Network Analysis and Data Integration (NADI) System

NADI (Network Analysis and Data Integration) system is group of software packages that facilitate network analysis and do data analysis on data related to network/nodes.

The system is made with focus on river network, but is general enough to be applicable to any kind of directed network (Wikipedia: directed graph).

Why use NADI?

NADI DSL is designed with the intension of making network analysis codes easier, for example look at some example codes for NADI vs python for common things:

DescriptionPythonNADI
get a node attributenode.valnode.val
check a node attribute existsnode.val is not Nonenode.val?
sum val for all nodessum(n.val for n in net.nodes())sum(nodes.val)
assign value to all nodesfor n in net.nodes(): n.val = 1nodes.val = 1

Of course, this are simple examples, but as you learn more about NADI you can see how these and many other patterns in NADI language makes it easier and intuitive to analyze networks. Refer to the book’s Learn by Examples chapter to see specific features of NADI that are related to the programming language.

Most important features of NADI are:

  1. Language Keywords to support:
    1. Implicit loop while running functions/expressions in the nodes vs single node,
    2. Implicit array and map (dictionary) for variables, expressions, function calls,
    3. Easier access to input vs output nodes as well as root and leaf nodes of the networks for analysis,
    4. and more
  2. Features that are present in other languages like if-else, while, for, loop, try-catch, function, import, allowing users to write their own logic, reuse code, and handle errors.
  3. The ability to load functions from shared libraries (.dll, .so, .dynlib) through the NADI plugin system, allowing advanced users to write functions that are computationally efficient and use them as if they are native to the language itself.

NADI comes with GIS tools, IDE, jupyter notebook, and other tools to make it easier to use it thorough different interfaces.

For more details, refer to the User Manual.