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 (> 40GB) 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)
print(g) # => <undirected_network[int64] with 100 verts and 110 edges>
print(g.vertices()) # => [0, 1, 2, 3, .... 99]
print(g.edges())
# => [undirected_edge[int64](0, 16), undirected_edge[int64](0, 20),
# undirected_edge[int64](0, 31), undirected_edge[int64](0, 51),
# ...]
print(ret.connected_components(g))
# => [<component[int64] of 1 nodes: {9}>,
# <component[int64] of 1 node {33}>,
# ...]
lcc = max(ret.connected_components(g), key=len)
print(lcc) # => <component[int64] of 93 nodes: {99, 96, 95, 94, ...}>
g2 = ret.vertex_induced_subgraph(g, lcc)
print(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
state = ret.mersenne_twister(42)
g = ret.random_fully_mixed_temporal_network[ret.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)
print(cluster)
# => <temporal_cluster[undirected_temporal_edge[int64, double],
# simple[undirected_temporal_edge[int64, double]]] with volume 100
# and lifetime (0 1.7976931348623157e+308]>
print(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:
print(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
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)
print(cluster)
# => <temporal_cluster[undirected_temporal_edge[int64, double],
# limited_waiting_time[undirected_temporal_edge[int64, double]]] with
# volume 100 and lifetime (0 1028.9972186553928]>
print(cluster.covers(vertex=15, time=16.0)) # => True
print(list(cluster.interval_sets()[15]))
# => [(3.099055278145548, 200.17866501023616),
# (200.39858803326402, 337.96139372380003),
# ...
# (1017.5258263596586, 1028.9149586273347)]
# Total "human-hours" of reachability cluster
print(cluster.mass()) # => 101747.97444555275
# Survival time of the reachability cluster
print(cluster.lifetime()) # => (0.0, 1028.9972186553928)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for reticula-0.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ab91ef2d09530bc018737e3720c5a0f27a24e87bf2b2d7e53c77f5653f548c78 |
|
MD5 | 66e75cbc84d64df835e862741923e004 |
|
BLAKE2b-256 | 442af5942652e84403d212ca00dfb3cde7a01c626891feb2096b3afb2123a011 |
Hashes for reticula-0.0.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 21a1831d73c0b5fbf8c4e91e03e2f3dc2fe6b5964988b69f7b9e635694318fb2 |
|
MD5 | 565660a2b3742047db078859a4e2951e |
|
BLAKE2b-256 | f6b7340f3004acdaff51100d9522a2b9852330216d7cd091489bbb18ac27762b |
Hashes for reticula-0.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 288fba9a42c230316c698823890599783369bde1ae5edcd52743747fad2295c7 |
|
MD5 | 814a8694cb066dc91ab92fcbdbd39781 |
|
BLAKE2b-256 | 755e1545b76359d6e39f33c6fe621c44870dea24df521a0ac03c4f0f3c999999 |
Hashes for reticula-0.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3cfcad4fd676a64a01d92761ff09d7bf24f0ee2c9953d94a3078ce235cf3c001 |
|
MD5 | b2035d663b95970c4ece2a1dbb5b83e1 |
|
BLAKE2b-256 | 320d1da0b8aa41581132925f7289c5eef7b1be5ea391b7dbced28e666b04eb1d |
Hashes for reticula-0.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 170b70029f9dbcc949c1fa85be23798a6741defcddfc736f751549c35dd1e724 |
|
MD5 | 9fc96f9a53a229320f280b95c0379569 |
|
BLAKE2b-256 | 8ece251308061c99b410cc3913f3e3fd3cfadb9bb565d493deb4c58176e256a7 |