Circuitscape in Julia: Empowering Dynamic Approaches to Connectivity Assessment

: The conservation ﬁeld is experiencing a rapid increase in the amount, variety, and quality of spatial data that can help us understand species movement and landscape connectivity patterns. As interest grows in more dynamic representations of movement potential, modelers are often limited by the capacity of their analytic tools to handle these datasets. Technology developments in software and high-performance computing are rapidly emerging in many ﬁelds, but uptake within conservation may lag, as our tools or our choice of computing language can constrain our ability to keep pace. We recently updated Circuitscape, a widely used connectivity analysis tool developed by Brad McRae and Viral Shah, by implementing it in Julia, a high-performance computing language. In this initial re-code (Circuitscape 5.0) and later updates, we improved computational efﬁciency and parallelism, achieving major speed improvements, and enabling assessments across larger extents or with higher resolution data. Here, we reﬂect on the beneﬁts to conservation of strengthening collaborations with computer scientists, and extract examples from a collection of 572 Circuitscape applications to illustrate how through a decade of repeated investment in the software, applications have been many, varied, and increasingly dynamic. Beyond empowering continued innovations in dynamic connectivity, we expect that faster run times will play an important role in facilitating co-production of connectivity assessments with stakeholders, increasing the likelihood that connectivity science will be incorporated in land use decisions.


Introduction
The conservation field is experiencing a rapid increase in the amount, variety, and quality of spatial data that can help us understand the dynamics of ecological systems, and incorporate key aspects of variation into land use decisions [1][2][3][4]. The accelerating pace of advances in the spatial and temporal resolution of ecologically relevant datasets track technology developments in remote sensing technologies, and in software and highperformance computing [5,6]. Updated software, and access to cloud computing and other high-performance hardware such as computing clusters and Graphics Processing Units (GPUs) are essential tools of the trade for researchers in other fields like data science and artificial intelligence that are experiencing similar explosions in data availability [7].
However, for landscape modelers who are collaborating and co-developing analyses with stakeholders and local governments, uptake of new science and technological advances may move slowly [8], especially when implementing change means leaving behind familiar tools or workflows. In this era of rapid global change, and concurrent leaps forward in data quality and availability, partnerships between conservation scientists and computer scientists that lead to updates of widely used, open-source software can help modelers keep pace, and more effectively support conservation decisions [7,9].
Here, we focus on assessments of landscape connectivity and animal movement potential, a conservation field that exemplifies the exciting opportunities and computational challenges that accompany improvements in technology. Recent advances in remote sensing and image processing have led to critically important increases in the variety of Earth observations available for characterizing the environment (e.g., types of ecological indicators and climatic variables, and options for spatial and temporal resolution), and advances in animal tracking technology are providing time series data on animal locations that can be integrated with environmental data [1,10,11]. Growth in citizen science efforts (e.g., eBird [12]), the deployment of automated data collection networks (e.g., camera traps, acoustic monitoring networks), and data sharing portals (e.g., Movebank [13]) are further increasing the volume of animal observation data streams [2].
The specific goals and underlying theories for landscape connectivity and animal movement models are many and varied [14]. Similarly, many different analytical approaches, software tools, and workflows are deployed to integrate geospatial data and ecological observations to build connectivity models (e.g., [14][15][16][17][18][19]). For applications that explore how landscape characteristics such as landcover type, topography, and the presence of barriers influence movement potential, representing the landscape as a "resistance" grid is a common element [15,17,20,21]. Each pixel of this surface is assigned a weight (or cost), that reflects, for example, habitat use patterns for an individual species, the likelihood of mortality in different habitats, or the "naturalness" of the landscape [20][21][22][23][24]. The datasets and models used to create resistance surfaces again vary, depending on the application, data availability, and the study goal [17,[20][21][22][23][24]. However, once the surface is created and used as input for a connectivity analysis, many modeling workflows share the trait of being constrained by computational demand [15,22,25,26], as representing spatial patterns in a cumulative process like connectivity requires extensive calculations, often across millions of pixels. If connectivity modeling software crashes or requires weeks to run, these performance issues limit the scope and scale of our work.
Yet, for many important connectivity questions, we have the data to rapidly advance our understanding beyond a single snapshot (i.e., one resistance grid), and explore the dynamic nature of animal movement and other processes. Moving the field of connectivity science toward dynamic assessments has been identified as an important research priority, a goal that motivated this Special Issue [27][28][29][30]. In our contribution, we focus on the essential role that partnerships between ecologists and computer scientists can play in shaping this rapidly growing branch of conservation science, drawing from the history of improvements in and applications of Circuitscape [31].
For connectivity tools like Circuitscape that use resistance grids as inputs, shifting toward a more dynamic approach typically involves additional model runs on resistance surfaces parameterized for different seasons, climatic conditions, or landscape patterns. However, if the workflow to create a single output map is already constrained by computational requirements, adding more runs may not be feasible given time or resource constraints. Improvements to software can empower innovation by reducing these constraints, but as a general rule, the programming languages that enable higher performance are the most challenging to use. Here, we describe how a long-term partnership to improve Circuitscape supported rapid growth in the tool's use, and also helped inspire a new high-performance programming language called Julia [32,33], which is now empowering the most recent Circuitscape release. We suggest that when improvements in software help users run computationally intensive models on available hardware (i.e., a personal computer, rather than a supercomputer), and are released as free, open-access tools, these investments play a key role in increasing accessibility, which can foster innovation, and the use of connectivity science to inform decisions. By describing this long-term collaboration, we hope to inspire ecologists to consider how similar improvements to other key tools could help the conservation community pursue more dynamic models, and take better advantage of rapid advances in the availability of ecological data.

Dynamic Approaches to Connectivity: Circuitscape Applications as a Case Study
We recently updated Circuitscape [34], a widely used, open-source connectivity analysis software package, by migrating it from Python [35] to the Julia programming language [33]. Developed by conservation scientist Brad McRae (with a background in electrical engineering) and computer scientist Viral Shah, Circuitscape allows users to apply the logic and mathematics of electrical circuit theory to questions of how genes, animals, or processes flow across heterogeneous landscapes [22,31]. Briefly, this approach treats the landscape as a surface of resistors (the resistance grid). The Circuitscape algorithm tracks where "current" flows across this resistance surface, following current flow from source nodes to ground nodes, and quantifying the spatial patterns of current accumulation as higher resistance areas and barriers shift current flow into pathways with lower resistance [22]. This major update to Circuitscape was envisioned by McRae, but was carried out after his death in 2017. Initially developed to provide a tool for understanding the spatial dynamics of gene flow [36], Circuitscape has been applied in hundreds of connectivity studies on a wide range of organisms and topics, in locations across the globe. A recent review [16] and tributes [37,38] provide background on the underlying theory and history of Circuitscape's development, and McRae's influence within the fields of conservation and genetics. Circuitscape.jl (or 5.0 [34]), redesigned in the Julia language, represents a unique milestone in the long collaboration between McRae and Shah. First publicly released in 2012, the Julia programming language is still in rapid development [32,33] and was, in part, inspired by Shah's experience collaborating with McRae to create a powerful yet accessible tool for biodiversity conservation applications.
The reach of Circuitscape reflects an unusual combination of innovative theory, analytical flexibility, and software accessibility. To date, Circuitscape has been most widely applied in landscape genetics, where modelers calculate "resistance distances," a measure that indicates gene flow, between spatially referenced pairs of genetic samples [22,36,39]. As described above in an animal movement context, the spatial data surface(s) used as Circuitscape inputs typically represent habitat suitability, topography, climatic factors, or a composite surface, and resistance distance matrices may be calculated for one or many surfaces [20,24,40]. Later steps in the workflow focus on evaluating the relative support for each environmental dataset as a constraint on gene flow, a process that can involve multiple statistical modeling and optimization steps [41]. Some landscape genetics applications include resistance or current flow maps, but many do not-the measure of how environmental heterogeneity relates to genetic variation is typically the focal product. In contrast, in an animal movement context, producing current flow maps is the goal, with current magnitudes representing the relative use of different pixels by animals (or ecological processes) moving across the landscape (resistance surface) between focal nodes (habitat patches), following the assumption of a random walk [22].
Ecologists interested in animal movement questions have used a wide range of methods and models to create and assign weights to resistance surfaces, and these surfaces are typically developed from many spatial data inputs. Unlike applications in landscape genetics, which by their nature have a measure of past dispersal, the challenge of obtaining suitable animal movement data typically limits modelers' abilities to directly evaluate weightings for animal movement models. This is an active area of research, and some modelers incorporate outputs from animal movement models into the development of the resistance grid (e.g., [17,42,43]), and/or develop outputs from other landscape connectivity models with different assumptions (e.g., least-cost path models) to contrast or comple-ment Circuitscape's assumption of a random walk (e.g., [44,45]). A third broad group of Circuitscape applications, including much of McRae's work at The Nature Conservancy (TNC), emphasizes a generalized "structural" landscape connectivity that focuses on the pattern of land use, human influence, and barriers, and does not require the delineation of habitat patches to connect [46][47][48][49]. Like the species-focused maps, the structural outputs provide a way to visualize movement across landscapes as a cumulative process where both the magnitude and spatial pattern of resistance shapes how a generalized flow of organisms is channeled or spread out across multiple pathways, but source nodes are either aligned along the edges of the extent (e.g., [50]), or every pixel can be a source and ground (as in Omniscape [46,51], see .
In support of the effort to update Circuitscape without McRae's leadership, and inspired by the breadth of applications described in the Dickson et al. review [16], we assembled a comprehensive set of peer-reviewed Circuitscape applications. Our intent was to learn more about how the tool has been applied, to add to our list of potential new features for the software, and to identify potential new collaborators to help us keep building from McRae's foundation. Our ongoing work with these applications includes examination of how computing constraints influenced modeling practices and spatial data use.
To find Circuitscape applications, we reviewed 1280 papers identified through Web of Science searches (end date for publication, including "early online" of December 2020, with the last search on 26 January 2021) that cited key foundational papers by McRae, Shah, and colleagues [22,31,36,39,46], or a Circuitscape user guide [25,52]. The user guides did not appear in searches by author, but we tracked them from the literature cited sections of a few applications; we found only a few studies that cited a user guide without also citing at least one of the foundational papers. From this set, we identified 572 papers in the natural sciences published in English from 2007-2020 where Circuitscape analyses were part of a research study. We included methods-focused papers if they had a case-study application; 11 papers that did not include a case study on a real landscape, as well as a few applications in other branches of science, were not included in our descriptions of applications. We did retain one paper in materials science [53], as it addressed issues of complexity that may be of interest to ecological modelers. In our counts by software version and topic, we did not attempt to control for the repeated use of the same Circuitscape analysis in different research papers. In a few cases the same paper used multiple versions of the software; we include these papers in the counts for both versions.
This set includes papers that used Circuitscape as part of another software package, such as Linkage Mapper [54], which has Circuitscape-based tools (Pinch Point Mapper and Centrality Mapper) in addition to tools for least-cost path analyses, and ResistanceGA [55] and Seraphim [56], software tools that can deploy Circuitscape to calculate pairwise resistance distances for genetics applications. We likely missed applications of Circuitscape in these tools, as we did not search for them directly, and thus only found them if the study cited one of the foundational papers. We did not include applications of gflow [57], a version of Circuitscape designed for deployment on supercomputers. This body of work represents an expansion over the 277 Circuitscape applications tallied in the Dickson et al. review [16], in part due to our identification of applications that only cited McRae's first circuit-theory paper [36], a genetics-focused paper that was not traced in that review, and due to the extension of the search past that effort's early 2018 end date. In just two years, the collection grew by over 180 papers (Figure 1a,b). The full list, including methods papers, is available as Supplementary Materials on https://Circuitscape.org/publications/.
The set of Circuitscape applications provides an interesting perspective on broad trends in the conservation field, including the expansion of dynamic connectivity approaches. There are many unique applications, but as described in Section 1, most Circuitscape analyses fall into three large and often overlapping categories-landscape genetic applications, studies that focus on movement potential for specific species or taxonomic groups, and structural connectivity approaches that provide a more general picture of how the arrangement of permeable land types and barriers shape movement potential ( Figure 1a). We separated landscape genetics studies that provided a map(s) of resistance or current flow in the body of the paper (maps in supplements may have been missed) from those that did not, as these maps provide way to compare connectivity insights across multiple methods. Notably, as each Circuitscape application incorporates one or more resistance surfaces, the different methods used to construct these representations of the environment also provide an interesting view of a decade of changes in landscape ecology. For example, this collection illustrates the shift from patch dynamics toward consideration of matrix habitats, the rapid growth of the machine-learning based species distribution modelling tool Maxent [58,59], and the increasing use of remotely sensed data to understand ecological processes (e.g., [60][61][62]). While it is hard to draw a clear distinction between what is "dynamic" and what is "static" when comparing many diverse studies, it is easy to see that some applications are more dynamic than others. We found Zeller et al.'s dynamic connectivity framework (see Figure 2 in [30]) very helpful for organizing this compelling body of Circuitscape research. The dynamic connectivity framework identifies three categories, landscape dynamics, movement dynamics, and challenges to connectivity, and then presents sets of topics under each category that span a gradient of spatial and temporal scales. To help characterize the breadth and distribution of Circuitscape applications, we (KH) sorted the application papers following the framework, and present the resulting distribution across categories in Figure 2. We used the framework as a tool for grouping similar papers so that we could more easily highlight innovations in dynamic connectivity; as most papers could reasonably fit in more than one box, others would likely split them differently.
Although many Circuitscape applications are static, they are based on the dynamic concept of current flow across a network of resistors. For landscape genetics applications, each node in the network carries information on changes that occurred in the past; more dynamic applications include multiple genetic markers that provide insights from different time periods. For non-genetic applications, the dynamic nature of analyses can be greatly enhanced when modelers compare multiple representations of resistance (e.g., habitat change over time), or demographic or seasonal difference in how species respond to the landscape. The process of sorting and revising categories led to the identification of natural breaks in the set of papers, and we characterize those in Table 1. We used a few rules, including assigning papers that incorporated two movement types (e.g., home range and dispersal) or multiple challenges (e.g., habitat loss and climate change) in the larger-scale category. While nearly all landscape genetics approaches could reasonably be categorized as "gene flow," the papers we grouped here emphasize a snapshot of the relationship between environmental patterns and genetic structure; when studies applied multiple genetic markers to capture change over time, or specifically addressed "challenges," or "landscape dynamics" they were placed in other categories.  [30] framing of topics in dynamic connectivity. Applications are grouped into three broad categories (inner circle), and then arranged in categories that range from finer scale (spatial or temporal) studies in darker shades, to applications at larger scales and/or longer focal time periods (lighter shades). See Table 1 for especially dynamic examples from these categories.
For each topic, we present a brief phrase if needed to describe the studies in the category, and a few examples of dynamic study design approaches (Table 1). These factors show strong overlap with topics discussed in [30], such as including multiple time steps, demographic factors, movement types (habitat use vs. dispersal) and seasonal variations. For the studies we highlight, we indicate their "Circuitscape application type" (see Figure 1a) to show the overlap and unique contributions of each of these broad groups. To include the full set of Circuitscape applications, we added a "biodiversity patterns" category to the framework. We inserted this topic under movement dynamics to reflect studies where resistance distance measures from Circuitscape are applied to species assemblage data (or similar measures) to evaluate species turnover as a function of landscape heterogeneity (e.g., [63,64]). While we did not distinguish papers that incorporate genetic or animal movement data from multiple rather than a single species in Table 1 (as we did in Figure 1a for animal movement), we note this as a "dynamic factor" under a few of the topic areas. We found examples for all topics, though some topics have received much more coverage than others ( Figure 2). Table 1. Examples of dynamic elements within Circuitscape applications, as grouped in the dynamic connectivity topics presented in Zeller et al.'s framework [30]. The three main columns describe key research themes; topics are arranged according to focal temporal and spatial scales (large to small, see "scale" column), and the color scheme links columns to the same research themes and topics in Figure 2. Circuitscape application types are labeled as "LG" for landscape genetics, "MO" for species movement data & habitat models, and "ST" for studies focused on generalized landscape structure.

Biodiversity patterns
Identify changes in species assemblages & turnover as a function of resistance. Can incorporate genetics, morphology [96].
Consider multiple time steps [97] or assess many sites in different landscape contexts [98]; in freshwater, consider the role of different hydrologic periods or [99] precipitation events [100]. Use multiple models to capture habitat choice and movement speed [42] (MO).
(see migration for many seasonality examples with movement data).

Dispersal
Recognize differences in home range use vs.

Invasive species & disease spread
Use information from multiple regions or introduction events [127]; pair time series of high-resolution habitat data with on-the ground detections of invasive species [62]; evaluate barrier strategies [128] (MO).
Use multiple waves to model viruses with wildlife vectors [129,130] (LG).
Disturbance events Disturbance events like fires can change dispersal patterns [149] (LG).

Home range Consider variations by sex and/or seasons
Home range may include multiple habitat types [154,155]; agriculture can be a key connector [156,157] (MO).
Integrate social science to understand the human side of conflicts [173,174] (MO).
As illustrated in Table 1, the collection includes applications at all scales, in freshwater, marine, and terrestrial environments. Less apparent from the table, which emphasizes alignment with the Zeller et al. framework, is the fact that the focal research subjects range in size from viruses and grains of pollen (e.g., [93,175]) through trees and elephants, and extend to work on human migrations and diseases, with a few applications integrating interactions between ecological and social systems (e.g., [173,174,176,177]). This diversity of scales and topics emphasizes Circuitscape's role as a "springboard" for innovation [16], and a tool that helps ideas flow between different branches of environmental modeling.

Computation as a Constraint to Dynamic Models and Driver of Innovation
As indicated by the range of applications ( Figure 2, Table 1), Circuitscape provides a very flexible platform for studying gene flow and connectivity, and we expect users will continue to advance the field by incorporating more dynamic approaches. However, the modeling process is very computationally intensive, a constraint that can limit how models are run, and the resolution of datasets that are deployed. To understand why computation can become a constraint, it's helpful to understand that in a Circuitscape run, the landscape is represented by a grid of cells, and a resistive circuit is constructed by placing a resistor along the shared edge between every pair of neighboring cells. For a 1000 by 1000 resistance grid (1 million cells), the software will need computer hardware with enough processing power and memory to solve a system of 1 million linear equations [34]. In "pairwise" Circuitscape, the mode that is used to develop distance metrics for landscape genetics, and is commonly applied in animal movement studies, these calculations are repeated for every pair of nodes (for example, habitat patches or populations) included in the model. Our own experiences, and stories we have heard from other modelers, include Circuitscape computations that ran for days, and sometimes weeks. If the problem is too large for hardware resources (typically RAM, random access memory, is the limiting factor), the analysis will not run to completion. In this section, we discuss computational demand in the context of promoting more dynamic approaches to connectivity modeling, and also highlight modifications in how Circuitscape has been used that arose (at least in part) to address computational constraints. In Section 4, we introduce the Julia language version, and discuss how innovations in computer science and programming languages have great potential to help connectivity modelers track advances in the quality of spatial data, and implement more dynamic connectivity models.
Although the mathematics that describe changes in computational requirements as the resolution of input datasets increase are straightforward, in practice, this constraint is easy for connectivity modelers to overlook, especially when new, high-resolution data products are available. For example, if the 1 million cell landscape noted above is comprised of 1-km pixels (100 million ha, roughly the combined size of the US states of Utah, Colorado, Arizona, and New Mexico) and a modeler shifts to a data resolution of 500-m, that would typically quadruple the number of linear equations that need to be managed by the software and hardware. A more dramatic shift to a 30-m resolution dataset, the native resolution of many commonly used spatial data products, would increase the number of computations by a massive 1100×. The Circuitscape user guides [25,52] are clear on these computational challenges, and include warnings about total problem size, and sections on how to modify the input data and/or run parameters to reduce the potential for problems with RAM, or exceedingly long computation times. In the 572 Circuitscape ecological applications, roughly one-fourth discuss issues with computation and/or or describe aspects of their workflow that were designed to address computational issues. These types of modifications, and their potential influence, are part the focus of our ongoing review of this collection of papers. While our review is still underway, we found that at least 10% of authors reported aggregating pixels (reducing the resolution of the resistance grid), combining nodes (reducing the number of populations or patches to connect), or used some other tactic to address computational constraints. We expect that many more users experienced and addressed computation challenges than reported them.
For Circuitscape modelers who are considering more dynamic assessments, computation speed is of great practical concern, because accounting for seasonal variation, land use change, and other dynamic drivers requires multiple runs with different resistance grids. Most modelers featured in our dynamic examples (Table 1) have included several resistance grids, while a few of the most dynamic assessments have taken on large numbers of runs, including use of 40 resistance grids to explore land use and climate change scenarios [84], and 72 time-steps to evaluate the spread of an invasive beetle [62]. The mechanics of creating a dynamic representation can also include adding or removing habitat nodes from the system, as was done in a set of 99 time-steps depicting changes over 25 years of seasonal droughts and floods in Australia's Murray-Darling Basin [61]. While a subset of modelers have access to computing clusters, we expect that as the researchers pursued many of the dynamic applications in Table 1, either data resolution, number of nodes, study extent, or some combination, were often reduced to make the project feasible. Our continued goal in terms of tool development is to reduce this constraint, facilitating ecologically driven choices, rather than compromises based on computation.
The trajectory of improvements to Circuitscape's functionality and performance reflects advances in computer science, and the key influence of innovative applications by modelers. To find additional efficiency in computation time, and also address other modeling goals or bias issues, a number of studies have pursued 'wall-to-wall' or 'omnidirectional' applications of Circuitscape ( [47,50,73,178,179]). Instead of connecting patches, these applications use bands or 'strings' of pixels at the edge of a grid to represent the sources and grounds, and current is run across the full area, through all habitats, between these bands of pixels. From an ecological perspective, these approaches allow modelers to treat the landscape as a continuous gradient, avoiding the need to delineate core habitats or patches (e.g., protected areas) to connect, and reducing biases in current magnitudes that can occur near focal patches [50]. On the computation side, this shift in how Circuitscape is applied allows users to subdivide or "tile" the landscape, and conduct multiple assessments on smaller problems, and then map the products together (e.g., [47]).
Building from "wall-to-wall" approaches, McRae developed Omniscape [46], a movingwindow version of Circuitscape that automated the process of breaking the landscape into smaller problem sizes, and combining results. Omniscape runs Circuitscape from "advanced mode," iteratively calculating current flow between all (or a regularly spaced subset of) pixels and the center pixel in a circular moving window of a user-specified radius [46,51]. To determine how much current will flow from every pixel to this central ground, Omniscape requires a source strength raster, which the user can supply, or define as the inverse of the resistance grid. Cumulative current maps capture the total current when results from all of the overlapping moving windows are summed. Breaking up large geographies into many smaller pieces allowed McRae to map connectivity across larger extents without running out of memory and causing a software crash, though regional analyses (i.e., several western US states) with his original Python version still required days or weeks of compute time for relatively high resolution (180-360 m) data.
A practical benefit of using tiles with the wall-to-wall approach, or using Omniscape's moving window method, is that modelers can expand their focal geographies without aggregating pixels to keep the problem size tractable. At TNC, McRae co-led work with Melissa Clark and Mark Anderson to engage large steering committees of regional experts through a collaborative process to develop structural connectivity analyses to support land protection decisions. These "Resilient and Connected Network" components integrate regional flow potential maps created with wall-to-wall Circuitscape for most of the coterminous US (e.g., [180]), and maps using Omniscape for the Pacific Northwest and California [46]. The regional assessments are mapped together at http://maps.tnc.org/resilientland/ (see the "connectivity and climate flow" layers, and links to in-depth reports). This ability to produce high resolution products for large areas allows modelers to provide partners in many locations with tools to inform local decisions, as they can clip output maps to fit their focal area, and combine them with other local data. Thus, while a foundational tenet of landscape ecology suggests that the appropriate resolution of data increases with spatial extent (e.g., [181]), a key caveat to this important concept is that it's typically more efficient to run one analysis and share it, rather than run many local assessments. The importance of higher resolution data will vary with the landscape and focal question, but if an important habitat or barrier is rare or occurs in narrow bands, such as riparian habitats, use of higher resolution data may provide important improvements in how the connectivity network is modeled (e.g., see Figure 1 in [34]). Balancing computational demands and data resolution, and the goal of sharing maps that could be applied at local scales, were key drivers of the development of Omniscape, and McRae's continued interest in improving Circuitscape's efficiency and speed.

An Introduction to the Julia Versions of Circuitscape and Omniscape
Given enough time and memory, the Circuitscape algorithm can solve arbitrarily large problems, so the upper limit for any individual user will depend on their hardware resources, and the software's ability to effectively use those resources. The challenge of increasing Circuitscape's ability to handle large problems has been addressed multiple times, using different software languages [34] (Figure 1b). The first version [22] was written in Java, followed by version 2.0 in MATLAB. While MATLAB was easier for development, it required that users obtain a commercial license to run the software. McRae and Shah soon translated the code to Python for version 3.0, the first fully open-source release. It made heavy use of several of Python's numerical code libraries (numpy [182], scipy [35] and pyamg [183]), which improved computational efficiency, and allowed users to solve problems with millions of nodes. In collaboration with Tanmay Mohapatra, McRae and Shah followed these improvements with additional steps to optimize the code for better performance, and added early parallelism (the ability to execute multiple processes simultaneously), creating Circuitscape 4.0 [25]. The Spatial Ecology and Telemetry Working Group of The Wildlife Society recognized this contribution with an award in 2013. While computation has been a major driver of updates, McRae and Shah also prioritized accessibility, especially for practitioners without access to high-end hardware. Leonard et al. [57] built the gflow software by modifying Circuitscape so that it could run on high performance cluster computers, but this version is out of reach for many modelers. In the recent update, Ranjan Anantharaman, working with Shah and following plans co-created with McRae, ported Circuitscape 5.0 to the high performance Julia language [34]. Circuitscape.jl is open source, runs on multiple platforms, and is very fast (Figure 3). The Julia implementation of Circuitscape represents a major leap forward in computational speed, and more effective use of the user's hardware resources [34] (Figure 3). Major contributors to increased performance include a larger variety of solvers (the option to deploy different solvers allows the calculation approach to be more effectively matched to the user's specific problem), and greatly improved support for parallel computing. To our knowledge, the largest problem a user has solved with Circuitscape.jl to date was 437 million pixels, representing the full range (roughly 13 million ha) of the threatened Mojave desert tortoise at 30-m resolution [179]. This computation was carried out on one server-class node in a cluster with 20 CPU (central processing unit) cores and 384 G of memory. We encourage modelers to download Circuitsape version 5 from GitHub ( https://github.com/Circuitscape/Circuitscape.jl), and to support continued development through reporting issues, suggesting new functionality, and contributing code (see Appendix A). Importantly, while we hope many Circuitscape users will be inspired by the improvements in speed to try programming in Julia, modelers do not need to know Julia to use the Julia version. It is provided as a self-contained Julia package, which can be loaded and run without a complicated software installation process.
To promote continued collaboration among ecological modelers and the growing community of Julia programmers, we highlight how the choice to use Julia reflects a major advance in the continued evolution of Circuitscape, and related tools like Omniscape. For ecologists that are less familiar with programming languages, we begin with a few basic concepts, drawing from several recent works [32,33,184]. Programming languages are an abstraction, an interface between the programmer and the computer. A key element of what a software program needs to communicate to the computer is information about the various forms of data in a program that are held in memory and operated upon as the program runs-this information is the "data type." Some languages are "statically typed," meaning they require this information to be spelled out by the programmer, while others, called dynamically typed, do not. In general, the more information the system has about a program's data inputs, the faster a program can run. These differences underlie the two broad families of programming languages; many conservation scientists are fluent in one or more dynamically typed or "productivity" languages, such as Python [35,182] and R [185] that allow them to write a program at a higher level of abstraction and not bother with meticulously annotating data types. Fewer in our field are fluent in the statically typed "performance" languages that are built for performance, but have a steeper learning curve, such as C and Fortran. For tasks like dynamic connectivity modeling with Circuitscape, continuing to sacrifice performance limits our ability to innovate, and take advantage of high-resolution data sets.
Often, a software tool may be first created in a high-productivity dynamically typed language, and as the tool matures and needs more performance and scale (ability to maintain performance as the problem size increases), it may be converted to a highperformance statically typed language [32,33]. Writing programs twice is not a good use of the scientist's time, and it is what is often referred to as the "two language problem." Julia was designed to solve this two language problem. It achieves high-performance by automatically inferring the data types in a user's program, without requiring the user to provide them manually; thus achieving the speed of C and Fortran with the ease of use of R and Python. Further, as with a spoken language, the elements of programming languages are shaped by the context in which they are used. The design of Julia has in part been shaped by Shah (one of the Julia co-creators) and McRae's partnership to address the challenge of getting Circuitscape to run on ever larger grid-based problems. While development of the language continues, key aspects such as an emphasis on speed and parallelism, while still being accessible to users with a wide range of expertise and computing resources, are well-aligned with the objective of helping to promote rapid advances in dynamic approaches to connectivity conservation.
Currently, Circuitscape in Julia distributes the tasks of calculating current flow between pairs of sources and grounds (or iterations of all-to-one or one-to-all, but not "ad-vanced" mode) across multiple CPUs using a form of parallelism called multi-processing. The consistently high performance across increasingly large problems shown in Figure  3 demonstrates that this parallelism scales well with the problem size [34]; our testing indicates similar scaling for increasing numbers of pairwise solves. Improvements to Circuitscape have also been capitalized on by other software packages that depend on it, such as ResistanceGA [55] which now calls the Julia version (see [186]), and Omniscape.jl [51], our recent re-imagination and Julia implementation of McRae's Python-based Omniscape, which was led by Vincent Landau. Omniscape.jl uses another form of parallelism called multi-threading to call Circuitscape on different CPU cores, allowing simultaneous analysis of multiple moving-window-sized problems. Tests of Omniscape.jl's performance again indicate favorable scaling (no loss of performance) as more CPUs are used in a computation (Figure 4, [51]). Circuitscape in its next release will also offer parallelism via multithreading. Omniscape uses Circuitscape's "advanced" mode, which does not currently support multi-processing. However, future updates could use composable multi-threading, which was introduced in Julia v1.3 (released in late 2019). Composable multi-threading allows "parallelism within parallelism" to occur without interference among the different processes. These Julia-empowered versions of Circuitscape and Omniscape are set up to enable continent-wide connectivity analyses, and to catalyze the growing wave of dynamic assessments. Every time we have improved the capabilities of Circuitscape computationally, the community has responded with new applications, and we wait with excitement to see what new applications these improved parallel computing capabilities will enable. . Increases in computational speed for Omniscape.jl from parallel processing via multithreading (deployment of moving window-sized calculations to different CPUs) scales well as the number of simultaneous processes (threads) increase [51]. The benchmark problem was a 132,642 pixel grid, run with a block size of 21, and a moving-window radius of 100 pixels (approximately 34,000 pixels per window, and 300 window-sized runs). Scaling was evaluated for three different solvers that are available in the software, the CG + AMG (preconditioned conjugate gradient with algebraic multigrid preconditioner) in blue, Suitesparse's CHOLMOD solver in orange, and Pardiso compiled with Intel Math Kernel Library (MKL [187]) in red. Produced on an Intel(R) Xeon(R) Silver 4114 CPU @ 2.20 GHz with 20 cores and 64 GB RAM. The Julia version is 1.6.0-dev Commit 599d3299c9, compiled with MKL.

Faster Software Facilitates Data Exploration and Stakeholder Engagement
Dynamic connectivity research has the power to produce models of the big landscape ecology questions of our time: habitat loss, fragmentation, and climate change [30]. Creating a network of connected biodiversity is an international goal identified in action targets 1 and 2 in the United Nations Convention on Biological Diversity draft of the Post-2020 Global Biodiversity Framework 2030 mission [188]. Scientists, policy makers, resource managers, and outreach specialists will need to work together if we are to achieve these ambitious goals. With increased computational power, we expect to see rapid progress in dynamic connectivity modeling with Circuitscape and Omniscape. As we see such advances, we recognize it is critical to keep building bridges between scientists, governments, and stakeholders [189][190][191], even as our increasing use of complex modeling approaches and new technology may make our work more challenging for partners to understand. Rather than complicating these important interactions, we hope these advances provide connectivity modelers with critical opportunities to iterate and learn more quickly, and to collaborate more broadly with practitioners and stakeholders.
While our intent with modeling may be to estimate resistance distance values, or create a specific map product, the trial and error of building and running models is most useful if the process itself provides insight into how systems work. The different modes and tools for deploying Circuitscape have different characteristics, and current flow results will reflect these differences. As we speed up the modeling process, this should make it easier for users to explore how different ways of applying the same tool, different parameter settings, and different datasets influence their results, which hopefully leads to greater understanding of movement potential. In the section below, we include one simple example of this type of exploration ( Figure 5), where we ran Omniscape.jl on a resistance grid of VIIRS Nighttime Lights data [192][193][194] for most of the US state of Colorado. We chose this example to help familiarize connectivity modelers with outputs from Omniscape.jl, and to highlight a frequently updated data source that can be part of assessing "challenges to connectivity," the most common broad topic area ( Figure 2) for Circuitscape applications. For a typical conservation application, we would incorporate multiple data sources into a resistance grid, usually starting with land cover; here our goal was to isolate current flow patterns derived from just the Nighttime Lights source.
To develop the current flow map (Figure 5b), we downloaded the mean of monthly averages of VIRRS Nighttime Lights radiance values from Google Earth Engine for January-September of 2019 ( Figure 5a). Next, we projected and resampled the data to 100-m pixels, rescaled the data to 1-100 to create the resistance grid, used the inverse of the resistance grid as the source strength, and then ran Omniscape.jl with a 300-m window radius and a 49 pixel block size (meaning it selects one pixel in every 49 by 49 square of pixels to serve as the ground for the moving window, and all pixels in the window act as potential sources; even with much faster software, the tool still has options for reducing computation time). Note that in future work, we would likely drop the rescaling step, as it seemed to overcompress the values.
To provide context for this example, we will start by describing the interpretation of "typical" Circuitscape outputs, i.e., assessments where modelers define a set of focal nodes or patches, and current is applied across pairs of nodes which act as sources and grounds. In these models, high current values between nodes suggest high movement potential, and the pattern and degree of spread of the current flow describes the network of pathways between patches. The highest current flow values accrue in locations where there are few options for movement between one or multiple patches; these "pinch points" arise due to a concentration of natural or anthropogenic barriers that displace current into a small number of pixels. Parts of the study region that are not between focal patches will likely have low current values, even if in reality they are a key connector to other patches outside of the study boundary. In this scenario, pixels with the highest current values (pinch points) signal a high risk of connectivity loss through a relatively small amount of landcover change, while broader zones of high current typically indicate multiple options, and thus higher redundancy in terms of support for movement. Broad movement corridors are likely also of high importance for conservation, but investments to restore and/or provide legal protection may be less urgent. Figure 5. VIIRS Nighttime Lights radiance values (a) were used as the resistance and source strength grids for Omniscape.jl [51] to explore the influence of anthropogenic activities on structural connectivity in the wildland-urban interface in Colorado, USA. Areas with high radiance values had high resistance, and low source strengths (i.e., source strength grid was the inverse of the resistance grid). Major roads (dark blue) and topography (hillshade) have been included on the map to aid in interpretation. Normalized current flow (b) is very low (dark blue) in cities due to high resistance and low source strength, as determined by the high nighttime light radiance values. Current flow that is displaced from areas with many nighttime lights is most concentrated (highest current flow values, in yellow) in small pockets of areas with few lights between the major city of Denver and neighboring Loveland (to the north), which limits how far this displaced current can spread. In other places on the landscape where displaced current encounters lower resistance and thus more options, the landscape appears orange; pixels grade into reds and pinks in low resistance areas near scattered high resistance areas (e.g., in the upper left section of the map, around Vail and Winterpark). Areas with generally low resistance (few nighttime lights) are in purples-these can be interpreted as a "baseline"or "natural" current flow, with light blue zones indicating lower flow due to higher resistance, and many nearby options for where that displaced current could go. Both the broad flow patterns of moderate current, and the high flow concentration areas are important, but suggest different conservation approaches.
In "patch-free" applications, where current is released from the pixels along the edges of the geography (wall-to-wall), or emerges from every pixel based on values in a source strength grid (Omniscape), appropriate interpretation of the current flow values typically requires more consideration of how the pattern of resistances and sources interact on the landscape. As with patch-based Circuitscape applications, current flow will be highest in places with the fewest options (pinch points). However, if a section of the landscape is relatively homogenous in terms of differences in resistance, or if displaced current can spread out in many directions, it will not become highly concentrated. As a result, for those expecting high current flow in highly intact landscapes, moderate current flow may be misinterpreted as indicating low movement potential. In Figure 5, the broad expanses of moderate current flow (purple) correspond to highly connected landscapes in terms of "natural" light regimes (lack of nighttime lights). These areas could easily (and incorrectly) be interpreted as having low connectivity value. The moderate flow values actually suggest diffuse, near-natural levels of connectivity, with multiple redundant pathways for movement, an important characteristic to consider in land conservation decisions.
With Omniscape, the normalization process (dividing current flow results by results from a uniform resistance grid) provides information on how the realized current flow compares to the level of current that would be "expected" in resistance-free conditions, with the source strength held constant [46,51]. This innovation was incorporated by McRae in part to address biases in the total current applied to each region (i.e., to account for presence of water bodies, which would typically not be a source of current in a terrestrial analysis, so total current in a region with many "water" pixels would be lower). It's important to remember that this simple example ( Figure 5) does not include a land use or habitat surface-just the nighttime lights. In studies with different configurations of resistances and source strengths (e.g., incorporating higher resistance values for agriculture, a common land use in the eastern part of this region, rather than just the point pattern of resistance from nighttime lights), the patterns of variation in current would likely be quite different. The best way to learn about how current flow patterns change is to study your resistance and source strength surfaces, and run your data.
With faster model runs, we have more capacity to test options and incorporate sensitivity analyses. In applications involving the use of expert opinion to inform resistance grid weightings, speed enhancements can help modelers target the most important questions to ask, rather than engaging experts in multiple discussions of choices with nominal influence on the final map. Even better, if we can explore variations of different models in real time in a workshop setting, the shared understanding that develops among participants is likely to lead to better products, and higher investment in using those products to inform decisions [195,196]. This approach would be especially useful in considering dynamic conservation applications, including scenarios for land restoration, barrier removals, or protection prioritization in a rapidly changing landscape and climate.
Finally, a bit of praise for beautiful and compelling connectivity maps. Dynamic representations of connectivity, even those built from static models, can be very powerful in terms of engaging people in conversations about how to protect moving targets. There are likely many great examples, but the "Migrations in Motion" [197] map created by Dan Majka is a crowd favorite with both research conference audiences and the public. This global map animates Circuitscape-based trajectories for species range shift in response to change [198] using colored lines for each species and visualizations designed for modeling wind patterns. Increased collaboration between ecologists, data scientists, and app and web developers to convey movement dynamics [199] has great potential to add even more impact to work with Circuitscape and other connectivity models.

Dynamic Collaborations Empower Dynamic Approaches to Modeling
For our models to keep up with our ideas and the ever-increasing flow of data, we need to continually improve them. Conversely, as is evidenced by many Circuitscape applications, sometimes constraints in computing can lead to innovations that take the science in new and interesting directions. In this way, the software, modeling philosophy, and modelers are also a dynamic system. The more we recognize how our modeling tools and ability to compute shape our thinking as well as the products we produce, the more we are likely to learn. The fact that Circuitscape has been deployed in such a large and diverse number of applications in just over a decade shows both the power of Brad McRae's ideas, but also an unusual and enduring commitment to a tool-both by its developers, but also by users and funders. Looking at the growth of dynamic approaches to connectivity solely through the lens of Circuitscape obviously leaves out an extensive volume of important and innovative work, but we hope that it demonstrates the dependence of science innovation on software innovation-if you build it, and keep improving it, people will come, and do amazing things. It is our hope that in the next decade, the pace of innovation we see in Circuitscape applications can be matched or even exceeded by innovations in the outreach and engagement efforts that build from these tools, accelerating opportunities for new biodiversity protections in the process.

Data Availability Statement:
No new data were created or analyzed in this study. Data sharing is not applicable to this article.

Acknowledgments:
The transition to Circuitscape 5.0, and the Julia implementation of Omniscape, were funded through a grant from NASA's Ecological Forecasting Program, and a grant from the Wilburforce Foundation. The authors also wish to acknowledge the Wilburforce Foundation's longterm investment in Circuitscape and related tools through several previous awards to Brad McRae, and the Foundation's tremendous and broad support of both connectivity science, and scientists. We are grateful for the grant program officers, colleagues, and Circuitscape users who have helped and encouraged us to continue this work despite the loss of Brad, who we deeply miss. We also thank all of the Circuitscape users who have shared datasets, reported issues, and provided feedback on various versions of these updated tools, and look forward to continued collaboration, and the opportunity to learn from your next innovation.

Conflicts of Interest:
The authors declare no conflict of interest.

Appendix A
We invite connectivity modelers to help us continue to develop Circuitscape and Omniscape in Julia, and to integrate them into other tools and workflows. Julia's modern Just in Time (JIT) compiler enables programmers to write generic code by generating specialized code for desired precision, index types and platform. This makes maintenance of the Circuitscape code base simple, and easy to integrate into other software packages. More broadly, we invite you to consider Julia as you develop other ecological modeling tools that will benefit from high performance (see [200]). The ecology and overlapping GIS communities in Julia continue to grow, and software packages centered around ecology and GIS are in rapid development and beginning to mature (see https://ecojulia.org, and https://juliageo.org/). Julia's extensible type system helps define hierarchies of complex data structures while paradigms like multiple dispatch enable rich, natural workflows that define the properties or behavior of these objects [201]. For example, the package EcologicalNetworks.jl [202] defines two fundamental data types describing the partiteness of a graph, parameterized by the nature of the interactions in the graph. This enables multiple combinations of graphs to be generated by a few lines of code. Julia's type system and multiple dispatch can thus define rich behavior for complex objects at any level of granularity. Julia's JIT compiler then compiles down to high performance native code for many hardware platforms. This performance, coupled with Julia's expressivity, benefits code bases written entirely in Julia. Other notable features include the package environment system https://julialang.github.io/Pkg.jl/v1/environments/ which can be used to set up reproducible environments for research. A larger ecosystem of Julia packages for ecology, built on similar principles, may be found on the EcoJulia Github page (https://github.com/EcoJulia).