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

Uploaded PyPymanylinux: glibc 2.17+ x86-64

reticula-0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (32.1 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

reticula-0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

reticula-0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

reticula-0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.5 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

File details

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

File metadata

File hashes

Hashes for reticula-0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 215aa5d7e2190e576d36d97cf7a0e3f747826d937be6e3c1013e0ced7251530d
MD5 736963365c5d12e6f1dbfd3767c6db9a
BLAKE2b-256 fbde02a07d5da6b45601e205b37264211e0230a687b3ec681be87d4797b0e207

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reticula-0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 235e6bb1fd423188834184ef08a78831731f9b1aa59b143dbc89403edf6fc35c
MD5 45f941a11c6470616bba9e99f1d534db
BLAKE2b-256 4a694b894244d23e2c050271e6e2a13dfafef9046161f253b4b0aa036a52cd3e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reticula-0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4e0dbd89f9845259645587bd635fe74c76f5506d9b7a98e74704852afdd99b56
MD5 8c7462fd2b8bbfe9f7c70c19617532e4
BLAKE2b-256 0b7ea8843d6e0326397345aa4b1c808926b2c56ab54f3f0a94edc3dd311288c7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reticula-0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 442444471cf932fd85cfc8d1cb908501981334c2bc51afede60da59396cad9df
MD5 a5aca523c7916937c092054207d0066b
BLAKE2b-256 e21f42e144bdc78d4b59259dc3325877f87bb80b0329126af26031a1fc5ab8fa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for reticula-0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3017584948da36a40d0d07bc3dd66b38531ae52920a776e8185b228da036fee7
MD5 a5755e7ad23f3049e1196b9484c1b92b
BLAKE2b-256 e44ca4da2b1e6e8b0c62e7125b2507b6446bd7b83a76401d1feafcca57948dd9

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