Skip to main content

Analyse temporal network and hypergraphs efficiently.

Project description

Python bindings for Reticula

Installation

The library offers pre-compiled Wheels for manylinux2014 compatible systems. That is, Linux systems with GNU C Library (glibc) version 2.17 and newer. The library currently supports Python version 3.8, 3.9 and 3.10.

$ pip install reticula

Installing from source

Alternatively you can install the library from source:

Clone the library:

$ git clone https://github.com/arashbm/reticula-python.git

Build the Wheel:

$ cd reticula-python
$ pip install .

Note that compiling source requires an unbelievable amount of RAM.

Basic examples

Generate a random static network and investigate:

>>> import reticula as ret
>>> state = ret.mersenne_twister(42)  # create a pseudorandom number generator
>>> g = ret.random_gnp_graph[ret.int64](n=100, p=0.02, random_state=state)
>>> g
<undirected_network[int64] with 100 verts and 110 edges>
>>> g.vertices()
[0, 1, 2, 3, .... 99]
>>> g.edges()
[undirected_edge[int64](0, 16), undirected_edge[int64](0, 20),
  undirected_edge[int64](0, 31), undirected_edge[int64](0, 51),
  ...]
>>> ret.connected_components(g)
[<component[int64] of 1 nodes: {9}>,
  <component[int64] of 1 node {33}>,
  ...]
>>> lcc = max(ret.connected_components(g), key=len)
>>> lcc
<component[int64] of 93 nodes: {99, 96, 95, 94, ...}>
>>> g2 = ret.vertiex_induced_subgraph(g, lcc)
>>> g2
<undirected_network[int64] with 93 verts and 109 edges>

A more complete example of static network percolation analysis, running on multiple threads, can be found in examples/static_network_percolation/

Create a random fully-mixed temporal network and calculate simple (unconstrained) reachability from node 0 at time 0 to all nodes and times.

>>> import reticula as ret
>>> import ret.temporal_adjacency
>>> state = ret.mersenne_twister(42)
>>> g = ret.random_fully_mixed_temporal_network[int64](
...       size=100, rate=0.01, max_t=1024, random_state=state)
>>> adj = ret.temporal_adjacency.simple[
...       ret.undirected_temporal_edge[ret.int64, ret.double]]()
>>> cluster = ret.out_cluster(
...       temporal_network=g, temporal_adjacency=adj, vertex=0, time=0.0)
>>> cluster
<temporal_cluster[undirected_temporal_edge[int64, double],
  simple[undirected_temporal_edge[int64, double]]] with volume 100
  and lifetime (0 1.7976931348623157e+308]>
>>> cluster.covers(vertex=12, time=100.0)
True
>>> # Let's see all intervals where vert 15 is reachable from vert 0 at t=0.0:
>>> list(cluster.interval_sets()[15])
[(3.099055278145548, 1.7976931348623157e+308)]

Let's now try limited waiting-time (with dt = 5.0) reachability:

>>> import reticula as ret
>>> import ret.temporal_adjacency
>>> state = ret.mersenne_twister(42)
>>> g = ret.random_fully_mixed_temporal_network[int64](
...       size=100, rate=0.01, max_t=1024, random_state=state)
>>> adj = ret.temporal_adjacency.limited_waiting_time[
...       ret.undirected_temporal_edge[ret.int64, ret.double]](dt=5.0)
>>> cluster = ret.out_cluster(
...       temporal_network=g, temporal_adjacency=adj, vertex=0, time=0.0)
>>> cluster
<temporal_cluster[undirected_temporal_edge[int64, double],
  limited_waiting_time[undirected_temporal_edge[int64, double]]] with volume
  100 and lifetime (0 1028.9972186553928]>
>>> cluster.covers(vertex=15, time=16.0)
True
>>> list(cluster.interval_sets()[15])
[(3.099055278145548, 200.17866501023616),
  (200.39858803326402, 337.96139372380003),
  ...
  (1017.5258263596586, 1028.9149586273347)]
>>> cluster.mass()  # total "human-hours" of reachability
101747.97444555275
>>> cluster.lifetime()
(0.0, 1028.9972186553928)

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

reticula-0.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

reticula-0.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

reticula-0.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (17.9 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

File details

Details for the file reticula-0.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reticula-0.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4defe7d0a62871f9b676f6ac51fa6848a34d1dcaeaa7194416e1f4af636a583e
MD5 2d7baeaea62e49b412f8cd216e85ffa7
BLAKE2b-256 c8057358211e92f6de42305dbec9753d481eefb50c85d301e242b620c4cc5e4d

See more details on using hashes here.

File details

Details for the file reticula-0.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reticula-0.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 875efe69309a65f816da9436b82bb165835840d73e08d81fcb2fb00e3f527b5f
MD5 fe8f510bf90b606158f0cdd54d0fa395
BLAKE2b-256 bdedfa78133fba3caa8d68c99579a34da360b4413cf7818389ac711018658639

See more details on using hashes here.

File details

Details for the file reticula-0.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reticula-0.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3ecd249ef6b43ab36d9bff5d0f9bdea7d2769233b372f682a3629e28973a75fb
MD5 c78fc0c9573af820a23a644c0a82fdc5
BLAKE2b-256 5c739b51303a249c52989108a486ab463677cf6733ce41dad92bd24e1df270cd

See more details on using hashes here.

Supported by

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