pathcensus


Namepathcensus JSON
Version 1.0 PyPI version JSON
download
home_pageNone
SummaryStructural similarity and complementarity coefficients for undirected networks based on efficient counting
upload_time2025-08-25 20:16:34
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseThe MIT License (MIT) Copyright (c) 2021 Szymon Talaga Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords networks graphs undirected weighted bipartite network science network geometry triples quadruples triangles quadrangles path census motifs relational principles homophily similarity complementarity structural equivalence random geometric graph latent space model exponential random graph ergm
VCS
bugtrack_url
requirements numpy numba scipy pandas NEMtropy statsmodels tqdm
Travis-CI No Travis.
coveralls test coverage No coveralls.
            =============================
``pathcensus`` package
=============================

.. image:: https://github.com/sztal/pathcensus/actions/workflows/tests.yml/badge.svg
 :target: https://github.com/sztal/pathcensus

.. image:: https://codecov.io/gh/sztal/pathcensus/branch/master/graph/badge.svg?token=HP4hLAnagg
 :target: https://codecov.io/gh/sztal/pathcensus


Welcome to the documentation of ``pathcensus`` package.
It is a Python (3.8+) implementation of **structural similarity and
complementarity coefficients** for undirected (un)weighted networks based
on efficient counting of 2- and 3-paths (triples and quadruples)
and 3- and 4-cycles (triangles and quadrangles).

**Structural coefficients are graph-theoretic
measures of the extent to which relations at different levels
(of edges, nodes or entire networks) are driven by similarity or
complementarity between different nodes**. Even though they are defined
in purely combinatorial manner they are motivated by geometric arguments
which link them to the family of latent space/random geometric graph models.
In particular, the geometric view allow the identification of network motifs
charactersitic for similarity (triangles) and complementarity (quadrangles).
They can be seen as a generalization of the well-known
local and global clustering coefficients which summarize the structure
of a network in terms of density of ego subgraph(s).

Even though it is a Python package ``pathcensus`` is performant as its main
workhorse functions are just-in-time (JIT) compiled to efficient C code
thanks to the `numba`_ library. It is compatible with `numpy`_
arrays and `scipy`_ sparse matrices making it easy to use in practice.
Moreover, it allows registering graph classes implemented by different
third-party packages such as `networkx`_ so they can be converted
automatically to sparse matrices. Conversion methods for `networkx`_,
`igraph`_ and `graph-tool`_ are registered automatically
provided the packages are installed.

**NOTE**

    ``pathcensus`` uses the ``A_{ij} = 1`` convention to indicate
    that a node `i` sends a tie to a node `j`. Functions converting
    graph-like objects to arrays / sparse matrices need to be aware
    of that.

**NOTE**

    ``pathcensus`` is compatible only with Python versions supported
    by `numba`_. In practice it means that it is compatible with all
    versions (starting from 3.8) except for the latest one, which usually
    starts to be supported by `numba`_ with some (often significant)
    delay.


For the sake of convenience ``pathcensus`` also provides implementations
of most appropriate null models for statistical calibration of structural
coefficients which are simple wrappers around the excellent `NEMtropy`_
package. It also defines the ``pathcensus.inference`` submodule with
utility class for facilitating approximate statistical inference based on
sampling from null models.

See ``examples`` subfolder and the main documentation for more details.

At the command line via pip:

.. code-block::

    # Install from PyPI
    pip install pathcensus

The current development version (not guaranteed to be stable)
can be installed directly from the `github repo`_

.. code-block::

    pip install git+ssh://git@github.com/sztal/pathcensus.git


How to cite?
============

You find the package useful? Please cite our work properly.

**Main theory paper**

    Talaga, S., & Nowak, A. (2022). Structural measures of similarity
    and complementarity in complex networks. *Scientific Reports*, 12(1), 16580.
    https://doi.org/10.1038/s41598-022-20710-w


Usage
=====

**NOTE**

    Main internal functions for calculating path census are JIT-compiled
    when used for the first time. Thus, the first initialization of a
    ``PathCensus`` object may be quite slow as its execution time will include
    the time required for compilation. However, this happens only once.

We will use `igraph`_ to generate graphs used in examples. However, even though
it is automatically integrated with ``pathcensus``, `igraph`_ is not
a dependency and needs to be installed separately.

.. code-block:: python

    # Main imports used in the examples below
    import random
    import numpy as np
    import igraph as ig
    from pathcensus import PathCensus

    # Set random and numpy rng seeds
    random.seed(303)
    np.random.seed(101)

More detailed examples can be found in the official documentation.


Path census & structural coefficients
-------------------------------------

Path census is a set of counts of different paths and cycles per edge, node
or in the entire graph. The counts are subsequently used to calculate different
kinds of structural coefficients.

.. code-block:: python

    # Generate simple undirected ER random graph
    G = ig.Graph.Erdos_Renyi(100, p=.05, directed=False)
    # Initialize path census object.
    # it precomputed path/cycle counts at the level of edges.
    # Other counts are derived from them.
    P = PathCensus(G)

    # Get edge-level census
    P.census("edges")
    # Get node-level census
    P.census("nodes")   # or just P.census()
    # Get global census
    P.census("global")

    # Column definitions
    ?P.definitions

Once path census is computed it can be used to calculate structural
coefficients.

.. code-block:: python

    # Similarity coefficients
    P.tclust()     # triangle-clustering equivalent to local clustering coefficient
    P.tclosure()   # triangle-closure equivalent to local closure coefficient
    P.similarity() # structural similarity (weighted average of clustering and closure)

    # Edge-wise similarity
    P.similarity("edges")
    # Global similarity (equivalent to global clustering coefficient)
    P.similarity("global")

The figure below sums up the design of structural similarity coefficients,
their geometric motivation and some of the main properties.

.. image:: /docs/figures/sim.svg
    :align: center


.. code-block:: python

    # Complementarity coefficients
    P.qclust()          # quadrangle-based clustering
    P.qclosure()        # quadrangle-based closure
    P.complementarity() # structural complementarity (weighted average of clustering and closure)

    # Edge-wise complementarity
    P.complementarity("edges")
    # Global complementarity
    P.complementarity("global")

The figure below sums up the design and the geometric motivation of
complementarity coefficients as well as their main properties.

.. image:: /docs/figures/comp.svg
    :align: center

Similarity and/or complementarity coefficients may be calculated in one
go using appropriate methods as shown below.

.. code-block:: python

    # Similarity + corresponding clustering and closure coefs
    P.simcoefs()           # node-wise
    P.simcoefs("global")   # global

    # Complementarity + corresponding clustering and closure coefs
    P.compcoefs()          # node-wise
    P.compcoefs("global")  # global

    # All coefficients
    P.coefs()
    # All coefficients + full path census
    P.coefs(census=True)


Weighted coefficients
---------------------

Below we create an ER random graph with random integer edge weights
between 1 and 10. As long as edge weights are assigned to an edge property
of the standard name (``"weight"``) they should be detected automatically
and ``pathcensus`` will calculate weighted census. However, unweighted census
may be enforced by using ``weighted=False``.

.. code-block:: python

    G = ig.Graph.Erdos_Renyi(100, p=0.05, directed=False)
    G.es["weight"] = np.random.randint(1, 11, G.ecount())

    P = PathCensus(G)
    P.weighted   # True
    # Get all coefficients and full path census
    P.coefs(census=True)

    # Use unweighted census
    P = PathCensus(G, weighted=False)
    P.weighted   # False
    P.coefs(census=True)

Below is the summary of the construction of weighted coefficients.

.. image:: /docs/figures/weighted.svg
    :align: center


Parallel ``PathCensus`` algorithm
---------------------------------

``PathCensus`` objects may be initialized using parallelized algorithms
by using ``parallel=True``.

**NOTE**

    Parallel algorithms require an extra compilation step so the first
    time ``parallel=True`` is used there will be a significant extra
    overhead.

**NOTE**

    The ``parallel=True`` argument may not work and lead to segmentation
    faults on some MacOS machines.

.. code-block:: python

    # By default all available threads are used
    P = PathCensus(G, parallel=True)

    # Use specific number of threads
    P = PathCensus(G, parallel=True, num_threads=2)


Other features
==============

Other main features of ``pathcensus`` are:

#. Null models based on the ERGM family.
#. Utilities for conducting statistical inference based on null models.
#. Integration with arbitrary classes of graph-like objects.

All these features are documented in the official documentation.


Testing
=======

The repository with the package source code can be cloned easily
from the `github repo`_.

.. code-block::

    git clone git@github.com:sztal/pathcensus.git

It is recommended to work within an isolated virtual environment.
This can be done easily for instance using `conda`_.
Remember about using a proper Python version (i.e. 3.8+).

.. code-block::

    conda create --name my-env python=3.8
    conda activate my-env

After entering the directory in which ``pathcensus`` repository
was cloned it is enough to install the package locally.

.. code-block:: bash

    pip install .
    # Or in developer/editable mode
    pip install --editable .

In order to run tests it is necessary to install also test dependencies.

.. code-block:: bash

    pip install -r ./requirements-tests.txt
    # Now tests can be run
    pytest
    # Or alternatively
    make test
    # And to run linter
    make lint

And similarly for building the documentation from source.

.. code-block:: bash

    pip install -r ./requirements-docs.txt
    # Now documentation can be built
    make docs

Tests targeting different Python versions can be run using `tox`_ test
automation framework. You may first need to install `tox`_
(e.g. ``pip install tox``).

.. code-block:: bash

    make test-all
    # Or alternatively
    tox

Test coverage
-------------

Unit test coverage report can be generated easily.

.. code-block::

    make coverage
    # Report can be displayed again after running coverage
    make cov-report


Feedback
========

If you have any suggestions or questions about **Path census** feel free to email me
at stalaga@protonmail.com.

If you encounter any errors or problems with **Path census**, please let me know!
Open an Issue at the GitHub http://github.com/sztal/pathcensus main repository.


Authors
=======

* Szymon Talaga <stalaga@protonmail.com>



.. _github repo: https://github.com/sztal/pathcensus
.. _examples: https://github.com/sztal/pathcensus/tree/master/examples
.. _conda: https://docs.conda.io/en/latest/
.. _tox: https://tox.wiki/en/latest/
.. _numpy: https://numpy.org/
.. _scipy: https://scipy.org/
.. _numba: https://numba.pydata.org/
.. _networkx: https://networkx.org/
.. _igraph: https://igraph.org/python/
.. _graph-tool: https://graph-tool.skewed.de/
.. _NEMtropy: https://pypi.org/project/NEMtropy/

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "pathcensus",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "networks, graphs, undirected, weighted, bipartite, network science, network geometry, triples, quadruples, triangles, quadrangles, path census, motifs, relational principles, homophily, similarity, complementarity, structural equivalence, random geometric graph, latent space model, exponential random graph, ergm",
    "author": null,
    "author_email": "Szymon Talaga <stalaga@protonmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/64/35/0679a60240fbe10f190104ead4ab3c0e4351b99a63ab25749debe6b6ac35/pathcensus-1.0.tar.gz",
    "platform": null,
    "description": "=============================\n``pathcensus`` package\n=============================\n\n.. image:: https://github.com/sztal/pathcensus/actions/workflows/tests.yml/badge.svg\n :target: https://github.com/sztal/pathcensus\n\n.. image:: https://codecov.io/gh/sztal/pathcensus/branch/master/graph/badge.svg?token=HP4hLAnagg\n :target: https://codecov.io/gh/sztal/pathcensus\n\n\nWelcome to the documentation of ``pathcensus`` package.\nIt is a Python (3.8+) implementation of **structural similarity and\ncomplementarity coefficients** for undirected (un)weighted networks based\non efficient counting of 2- and 3-paths (triples and quadruples)\nand 3- and 4-cycles (triangles and quadrangles).\n\n**Structural coefficients are graph-theoretic\nmeasures of the extent to which relations at different levels\n(of edges, nodes or entire networks) are driven by similarity or\ncomplementarity between different nodes**. Even though they are defined\nin purely combinatorial manner they are motivated by geometric arguments\nwhich link them to the family of latent space/random geometric graph models.\nIn particular, the geometric view allow the identification of network motifs\ncharactersitic for similarity (triangles) and complementarity (quadrangles).\nThey can be seen as a generalization of the well-known\nlocal and global clustering coefficients which summarize the structure\nof a network in terms of density of ego subgraph(s).\n\nEven though it is a Python package ``pathcensus`` is performant as its main\nworkhorse functions are just-in-time (JIT) compiled to efficient C code\nthanks to the `numba`_ library. It is compatible with `numpy`_\narrays and `scipy`_ sparse matrices making it easy to use in practice.\nMoreover, it allows registering graph classes implemented by different\nthird-party packages such as `networkx`_ so they can be converted\nautomatically to sparse matrices. Conversion methods for `networkx`_,\n`igraph`_ and `graph-tool`_ are registered automatically\nprovided the packages are installed.\n\n**NOTE**\n\n    ``pathcensus`` uses the ``A_{ij} = 1`` convention to indicate\n    that a node `i` sends a tie to a node `j`. Functions converting\n    graph-like objects to arrays / sparse matrices need to be aware\n    of that.\n\n**NOTE**\n\n    ``pathcensus`` is compatible only with Python versions supported\n    by `numba`_. In practice it means that it is compatible with all\n    versions (starting from 3.8) except for the latest one, which usually\n    starts to be supported by `numba`_ with some (often significant)\n    delay.\n\n\nFor the sake of convenience ``pathcensus`` also provides implementations\nof most appropriate null models for statistical calibration of structural\ncoefficients which are simple wrappers around the excellent `NEMtropy`_\npackage. It also defines the ``pathcensus.inference`` submodule with\nutility class for facilitating approximate statistical inference based on\nsampling from null models.\n\nSee ``examples`` subfolder and the main documentation for more details.\n\nAt the command line via pip:\n\n.. code-block::\n\n    # Install from PyPI\n    pip install pathcensus\n\nThe current development version (not guaranteed to be stable)\ncan be installed directly from the `github repo`_\n\n.. code-block::\n\n    pip install git+ssh://git@github.com/sztal/pathcensus.git\n\n\nHow to cite?\n============\n\nYou find the package useful? Please cite our work properly.\n\n**Main theory paper**\n\n    Talaga, S., & Nowak, A. (2022). Structural measures of similarity\n    and complementarity in complex networks. *Scientific Reports*, 12(1), 16580.\n    https://doi.org/10.1038/s41598-022-20710-w\n\n\nUsage\n=====\n\n**NOTE**\n\n    Main internal functions for calculating path census are JIT-compiled\n    when used for the first time. Thus, the first initialization of a\n    ``PathCensus`` object may be quite slow as its execution time will include\n    the time required for compilation. However, this happens only once.\n\nWe will use `igraph`_ to generate graphs used in examples. However, even though\nit is automatically integrated with ``pathcensus``, `igraph`_ is not\na dependency and needs to be installed separately.\n\n.. code-block:: python\n\n    # Main imports used in the examples below\n    import random\n    import numpy as np\n    import igraph as ig\n    from pathcensus import PathCensus\n\n    # Set random and numpy rng seeds\n    random.seed(303)\n    np.random.seed(101)\n\nMore detailed examples can be found in the official documentation.\n\n\nPath census & structural coefficients\n-------------------------------------\n\nPath census is a set of counts of different paths and cycles per edge, node\nor in the entire graph. The counts are subsequently used to calculate different\nkinds of structural coefficients.\n\n.. code-block:: python\n\n    # Generate simple undirected ER random graph\n    G = ig.Graph.Erdos_Renyi(100, p=.05, directed=False)\n    # Initialize path census object.\n    # it precomputed path/cycle counts at the level of edges.\n    # Other counts are derived from them.\n    P = PathCensus(G)\n\n    # Get edge-level census\n    P.census(\"edges\")\n    # Get node-level census\n    P.census(\"nodes\")   # or just P.census()\n    # Get global census\n    P.census(\"global\")\n\n    # Column definitions\n    ?P.definitions\n\nOnce path census is computed it can be used to calculate structural\ncoefficients.\n\n.. code-block:: python\n\n    # Similarity coefficients\n    P.tclust()     # triangle-clustering equivalent to local clustering coefficient\n    P.tclosure()   # triangle-closure equivalent to local closure coefficient\n    P.similarity() # structural similarity (weighted average of clustering and closure)\n\n    # Edge-wise similarity\n    P.similarity(\"edges\")\n    # Global similarity (equivalent to global clustering coefficient)\n    P.similarity(\"global\")\n\nThe figure below sums up the design of structural similarity coefficients,\ntheir geometric motivation and some of the main properties.\n\n.. image:: /docs/figures/sim.svg\n    :align: center\n\n\n.. code-block:: python\n\n    # Complementarity coefficients\n    P.qclust()          # quadrangle-based clustering\n    P.qclosure()        # quadrangle-based closure\n    P.complementarity() # structural complementarity (weighted average of clustering and closure)\n\n    # Edge-wise complementarity\n    P.complementarity(\"edges\")\n    # Global complementarity\n    P.complementarity(\"global\")\n\nThe figure below sums up the design and the geometric motivation of\ncomplementarity coefficients as well as their main properties.\n\n.. image:: /docs/figures/comp.svg\n    :align: center\n\nSimilarity and/or complementarity coefficients may be calculated in one\ngo using appropriate methods as shown below.\n\n.. code-block:: python\n\n    # Similarity + corresponding clustering and closure coefs\n    P.simcoefs()           # node-wise\n    P.simcoefs(\"global\")   # global\n\n    # Complementarity + corresponding clustering and closure coefs\n    P.compcoefs()          # node-wise\n    P.compcoefs(\"global\")  # global\n\n    # All coefficients\n    P.coefs()\n    # All coefficients + full path census\n    P.coefs(census=True)\n\n\nWeighted coefficients\n---------------------\n\nBelow we create an ER random graph with random integer edge weights\nbetween 1 and 10. As long as edge weights are assigned to an edge property\nof the standard name (``\"weight\"``) they should be detected automatically\nand ``pathcensus`` will calculate weighted census. However, unweighted census\nmay be enforced by using ``weighted=False``.\n\n.. code-block:: python\n\n    G = ig.Graph.Erdos_Renyi(100, p=0.05, directed=False)\n    G.es[\"weight\"] = np.random.randint(1, 11, G.ecount())\n\n    P = PathCensus(G)\n    P.weighted   # True\n    # Get all coefficients and full path census\n    P.coefs(census=True)\n\n    # Use unweighted census\n    P = PathCensus(G, weighted=False)\n    P.weighted   # False\n    P.coefs(census=True)\n\nBelow is the summary of the construction of weighted coefficients.\n\n.. image:: /docs/figures/weighted.svg\n    :align: center\n\n\nParallel ``PathCensus`` algorithm\n---------------------------------\n\n``PathCensus`` objects may be initialized using parallelized algorithms\nby using ``parallel=True``.\n\n**NOTE**\n\n    Parallel algorithms require an extra compilation step so the first\n    time ``parallel=True`` is used there will be a significant extra\n    overhead.\n\n**NOTE**\n\n    The ``parallel=True`` argument may not work and lead to segmentation\n    faults on some MacOS machines.\n\n.. code-block:: python\n\n    # By default all available threads are used\n    P = PathCensus(G, parallel=True)\n\n    # Use specific number of threads\n    P = PathCensus(G, parallel=True, num_threads=2)\n\n\nOther features\n==============\n\nOther main features of ``pathcensus`` are:\n\n#. Null models based on the ERGM family.\n#. Utilities for conducting statistical inference based on null models.\n#. Integration with arbitrary classes of graph-like objects.\n\nAll these features are documented in the official documentation.\n\n\nTesting\n=======\n\nThe repository with the package source code can be cloned easily\nfrom the `github repo`_.\n\n.. code-block::\n\n    git clone git@github.com:sztal/pathcensus.git\n\nIt is recommended to work within an isolated virtual environment.\nThis can be done easily for instance using `conda`_.\nRemember about using a proper Python version (i.e. 3.8+).\n\n.. code-block::\n\n    conda create --name my-env python=3.8\n    conda activate my-env\n\nAfter entering the directory in which ``pathcensus`` repository\nwas cloned it is enough to install the package locally.\n\n.. code-block:: bash\n\n    pip install .\n    # Or in developer/editable mode\n    pip install --editable .\n\nIn order to run tests it is necessary to install also test dependencies.\n\n.. code-block:: bash\n\n    pip install -r ./requirements-tests.txt\n    # Now tests can be run\n    pytest\n    # Or alternatively\n    make test\n    # And to run linter\n    make lint\n\nAnd similarly for building the documentation from source.\n\n.. code-block:: bash\n\n    pip install -r ./requirements-docs.txt\n    # Now documentation can be built\n    make docs\n\nTests targeting different Python versions can be run using `tox`_ test\nautomation framework. You may first need to install `tox`_\n(e.g. ``pip install tox``).\n\n.. code-block:: bash\n\n    make test-all\n    # Or alternatively\n    tox\n\nTest coverage\n-------------\n\nUnit test coverage report can be generated easily.\n\n.. code-block::\n\n    make coverage\n    # Report can be displayed again after running coverage\n    make cov-report\n\n\nFeedback\n========\n\nIf you have any suggestions or questions about **Path census** feel free to email me\nat stalaga@protonmail.com.\n\nIf you encounter any errors or problems with **Path census**, please let me know!\nOpen an Issue at the GitHub http://github.com/sztal/pathcensus main repository.\n\n\nAuthors\n=======\n\n* Szymon Talaga <stalaga@protonmail.com>\n\n\n\n.. _github repo: https://github.com/sztal/pathcensus\n.. _examples: https://github.com/sztal/pathcensus/tree/master/examples\n.. _conda: https://docs.conda.io/en/latest/\n.. _tox: https://tox.wiki/en/latest/\n.. _numpy: https://numpy.org/\n.. _scipy: https://scipy.org/\n.. _numba: https://numba.pydata.org/\n.. _networkx: https://networkx.org/\n.. _igraph: https://igraph.org/python/\n.. _graph-tool: https://graph-tool.skewed.de/\n.. _NEMtropy: https://pypi.org/project/NEMtropy/\n",
    "bugtrack_url": null,
    "license": "The MIT License (MIT)\n        \n        Copyright (c) 2021 Szymon Talaga\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy of\n        this software and associated documentation files (the \"Software\"), to deal in\n        the Software without restriction, including without limitation the rights to\n        use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n        the Software, and to permit persons to whom the Software is furnished to do so,\n        subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n        FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n        COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n        IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n        CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n        ",
    "summary": "Structural similarity and complementarity coefficients for undirected networks based on efficient counting",
    "version": "1.0",
    "project_urls": {
        "changelog": "https://github.com/sztal/pathcensus/blob/master/HISTORY.rst",
        "documentation": "https://pathcensus.readthedocs.io/en/latest/",
        "repository": "https://github.com/sztal/pathcensus"
    },
    "split_keywords": [
        "networks",
        " graphs",
        " undirected",
        " weighted",
        " bipartite",
        " network science",
        " network geometry",
        " triples",
        " quadruples",
        " triangles",
        " quadrangles",
        " path census",
        " motifs",
        " relational principles",
        " homophily",
        " similarity",
        " complementarity",
        " structural equivalence",
        " random geometric graph",
        " latent space model",
        " exponential random graph",
        " ergm"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3287fc27f32592d72db0c104758fb7373eafa8f2b41bd89709bb95a3094ae149",
                "md5": "b01ccc879592679c17175b2c2423f854",
                "sha256": "68ef588f935c5f70e9b56282deb6b23abd76844932d2e518e9b09111c486ae41"
            },
            "downloads": -1,
            "filename": "pathcensus-1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "b01ccc879592679c17175b2c2423f854",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 44335,
            "upload_time": "2025-08-25T20:16:33",
            "upload_time_iso_8601": "2025-08-25T20:16:33.037516Z",
            "url": "https://files.pythonhosted.org/packages/32/87/fc27f32592d72db0c104758fb7373eafa8f2b41bd89709bb95a3094ae149/pathcensus-1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "64350679a60240fbe10f190104ead4ab3c0e4351b99a63ab25749debe6b6ac35",
                "md5": "54b34f04666e3b3ff86d3e08487941eb",
                "sha256": "ca6d26ea7740aeffef11476b996b719aa372f851b45d5889bc5dacb63c921c87"
            },
            "downloads": -1,
            "filename": "pathcensus-1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "54b34f04666e3b3ff86d3e08487941eb",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 45025,
            "upload_time": "2025-08-25T20:16:34",
            "upload_time_iso_8601": "2025-08-25T20:16:34.634553Z",
            "url": "https://files.pythonhosted.org/packages/64/35/0679a60240fbe10f190104ead4ab3c0e4351b99a63ab25749debe6b6ac35/pathcensus-1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-25 20:16:34",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "sztal",
    "github_project": "pathcensus",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "numpy",
            "specs": [
                [
                    ">=",
                    "1.20"
                ]
            ]
        },
        {
            "name": "numba",
            "specs": [
                [
                    ">=",
                    "0.51"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    ">=",
                    "1.7"
                ]
            ]
        },
        {
            "name": "pandas",
            "specs": [
                [
                    ">=",
                    "1.3"
                ]
            ]
        },
        {
            "name": "NEMtropy",
            "specs": [
                [
                    ">=",
                    "2.0"
                ]
            ]
        },
        {
            "name": "statsmodels",
            "specs": [
                [
                    ">=",
                    "0.12"
                ]
            ]
        },
        {
            "name": "tqdm",
            "specs": [
                [
                    ">=",
                    "4.62"
                ]
            ]
        }
    ],
    "tox": true,
    "lcname": "pathcensus"
}
        
Elapsed time: 0.45782s