Skip to main content

NetworkX graphs with required node/edge parameters

Project description

paramnet provides a convenience mixin, Parametrized, for creating subclasses of NetworkX’s Graph (DiGraph) that have numeric parameters associated with nodes and edges (for example, a dynamical system on a network). It provides the following key features:

  • Simplified reads/writes for the parameter value for a specific node/edge, without navigating NetworkX’s nested dict structure

  • Enforcing a well-defined node order on the graph, which in turn allows…

  • Extraction of all values of a given node (edge) parameter as a 1D (2D) numpy array

Examples

A parametrized network class can be created by subclassing from Graph or DiGraph using the Parametrized mixin. The names of any node/edge parameters can be specified in the class definition:

>>> class MyGraph(Parametrized, Graph, node_params=['x'], edge_params=['y']):
...    pass

G = MyGraph()

Note: As with all mixins, Parametrized should be inherited from first as above.

paramnet automatically adds named fields for each declared parameter, supporting clean random access (both read and write) by node or edge

>>> G.add_edge('a', 'b', y=3)
>>> G.x['a']
100
>>> G.x['a'] = 4
>>> G.y['a', 'b']
3
>>> G.y['a', 'b'] = 50

Contrast this with the more cumbersome random access in base NetworkX (which can be used interchangeably if you wish):

>>> G.nodes['a']['x']
100
>>> G.nodes['a']['x'] = 4
>>> G.edges['a', 'b']['y']
3
>>> G.edges['a', 'b']['y'] = 50

What’s more, paramnet maintains the order in which nodes were added, allowing index lookup:

>>> G.index('a')
0
>>> G.index('b')
1
>>> G.add_node('c')
>>> G.index('c')
2

But that’s not all. Because the nodes are ordered, we can get a well-defined representation of all values of a given node (edge) parameter at once as a vector (matrix). This is accomplished within paramnet by accessing the associated parameter attribute without square brackets:

>>> G.x
array([100, 100])
>>> G.y
array([[0., 3.],
       [3., 0.]])

>>> G.A
array([[0., 1.],
       [1., 0.]])

Note the special case for the weighted network adjacency matrix, which is automatically defined for every graph through the field A (instead of weight), regardless of whether weight is supplied in edge_params.

Under the hood, the parameter fields return View objects that wrap most numpy functionality, allowing vector arithmetic and other array operations

>>> G = MyGraph()
>>> G.add_nodes_from([(node, {'x': 5*node+1}) for node in range(5)])
>>> G.add_cycle(range(5), y=1)

# number of paths of length two between node pairs
>>> np.dot(G.A, G.A)
array([[0., 3., 1., 1., 3.],
       [3., 0., 3., 1., 1.],
       [1., 3., 0., 3., 1.],
       [1., 1., 3., 0., 3.],
       [3., 1., 1., 3., 0.]])

>>> G.x + 1
array([ 2,  7, 12, 17, 22])

Dependencies

  • NetworkX (>= 2.0)

  • numpy

License

paramnet is released under the MIT license. See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

paramnet-2.3.0.tar.gz (7.0 kB view details)

Uploaded Source

Built Distribution

paramnet-2.3.0-py3-none-any.whl (11.4 kB view details)

Uploaded Python 3

File details

Details for the file paramnet-2.3.0.tar.gz.

File metadata

  • Download URL: paramnet-2.3.0.tar.gz
  • Upload date:
  • Size: 7.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.1

File hashes

Hashes for paramnet-2.3.0.tar.gz
Algorithm Hash digest
SHA256 c6482a92f9ac1c13ddcbabe1cd8f14c9e18a4380b25a86314d455440c0c7abc5
MD5 4a1885560475ed04de4a505c17886bad
BLAKE2b-256 39f7487b69c8f7452d9de1028451a0ff9b820cde3611c9a2e4429103c8281919

See more details on using hashes here.

File details

Details for the file paramnet-2.3.0-py3-none-any.whl.

File metadata

  • Download URL: paramnet-2.3.0-py3-none-any.whl
  • Upload date:
  • Size: 11.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.1

File hashes

Hashes for paramnet-2.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b556e9e935a04aaf3bc7fc25ada517891c469911beccd1551552cd405fcd2c3e
MD5 bec167d72b680ea47b238693df1dc617
BLAKE2b-256 f39753f271e0e3d8834fd914fc0ed042e9e956f8ca0e90a07bb30037c96fd117

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page