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 (> 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


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.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (62.0 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

reticula-0.0.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (62.0 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

reticula-0.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (30.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

reticula-0.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (30.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

reticula-0.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (30.7 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

File details

Details for the file reticula-0.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

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

See more details on using hashes here.

File details

Details for the file reticula-0.0.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

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

See more details on using hashes here.

File details

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

File metadata

File hashes

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

See more details on using hashes here.

File details

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

File metadata

File hashes

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

See more details on using hashes here.

File details

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

File metadata

File hashes

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

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