Full Code of pik-copan/pyunicorn for AI

master e6ee67754d1a cached
157 files
3.0 MB
795.6k tokens
1082 symbols
1 requests
Download .txt
Showing preview only (3,181K chars total). Download the full file or copy to clipboard to get everything.
Repository: pik-copan/pyunicorn
Branch: master
Commit: e6ee67754d1a
Files: 157
Total size: 3.0 MB

Directory structure:
gitextract_td07sgq3/

├── .gitattributes
├── .gitignore
├── .travis.yml
├── CHANGELOG.rst
├── CITATION.cff
├── CONTRIBUTIONS.rst
├── LICENSE.txt
├── MANIFEST.in
├── README.rst
├── devenv.nix
├── devenv.yaml
├── docs/
│   ├── Makefile
│   └── source/
│       ├── _static/
│       │   ├── default.css
│       │   └── logo.psd
│       ├── _templates/
│       │   └── layout.html
│       ├── api/
│       │   ├── climate/
│       │   │   ├── climate_data.rst
│       │   │   ├── climate_network.rst
│       │   │   ├── coupled_climate_network.rst
│       │   │   ├── coupled_tsonis.rst
│       │   │   ├── eventseries_climatenetwork.rst
│       │   │   ├── havlin.rst
│       │   │   ├── hilbert.rst
│       │   │   ├── map_plots.rst
│       │   │   ├── mutual_info.rst
│       │   │   ├── partial_correlation.rst
│       │   │   ├── rainfall.rst
│       │   │   ├── spearman.rst
│       │   │   └── tsonis.rst
│       │   ├── core/
│       │   │   ├── data.rst
│       │   │   ├── geo_grid.rst
│       │   │   ├── geo_network.rst
│       │   │   ├── grid.rst
│       │   │   ├── interacting_networks.rst
│       │   │   ├── netcdf_dictionary.rst
│       │   │   ├── network.rst
│       │   │   ├── resistive_network.rst
│       │   │   └── spatial_network.rst
│       │   ├── eventseries/
│       │   │   └── event_series.rst
│       │   ├── funcnet/
│       │   │   ├── coupling_analysis.rst
│       │   │   └── coupling_analysis_pure_python.rst
│       │   ├── timeseries/
│       │   │   ├── cross_recurrence_plot.rst
│       │   │   ├── inter_system_recurrence_network.rst
│       │   │   ├── joint_recurrence_network.rst
│       │   │   ├── joint_recurrence_plot.rst
│       │   │   ├── recurrence_network.rst
│       │   │   ├── recurrence_plot.rst
│       │   │   ├── surrogates.rst
│       │   │   └── visibility_graph.rst
│       │   └── utils/
│       │       ├── mpi.rst
│       │       └── navigator.rst
│       ├── api_doc.rst
│       ├── changelog.rst
│       ├── conf.py
│       ├── contact.rst
│       ├── development.rst
│       ├── download.rst
│       ├── examples/
│       │   ├── modules/
│       │   │   ├── mpi/
│       │   │   │   ├── network_large.py
│       │   │   │   ├── network_mc.py
│       │   │   │   └── network_scan_no_comm.py
│       │   │   └── timeseries/
│       │   │       └── recurrence_network.py
│       │   └── tutorials/
│       │       ├── ClimateNetworks.ipynb
│       │       ├── CoupledClimateNetworks.ipynb
│       │       ├── EventSeriesAnalysis.ipynb
│       │       ├── RecurrenceNetworks.ipynb
│       │       └── VisibilityGraphs.ipynb
│       ├── index.rst
│       ├── license.rst
│       ├── methods.rst
│       ├── publications.rst
│       ├── sitemap.rst
│       └── tutorials.rst
├── pyproject.toml
├── setup.py
├── src/
│   └── pyunicorn/
│       ├── __init__.py
│       ├── climate/
│       │   ├── __init__.py
│       │   ├── _ext/
│       │   │   ├── __init__.py
│       │   │   └── numerics.pyx
│       │   ├── climate_data.py
│       │   ├── climate_network.py
│       │   ├── coupled_climate_network.py
│       │   ├── coupled_tsonis.py
│       │   ├── eventseries_climatenetwork.py
│       │   ├── havlin.py
│       │   ├── hilbert.py
│       │   ├── map_plot.py
│       │   ├── mutual_info.py
│       │   ├── partial_correlation.py
│       │   ├── rainfall.py
│       │   ├── spearman.py
│       │   └── tsonis.py
│       ├── core/
│       │   ├── __init__.py
│       │   ├── _ext/
│       │   │   ├── __init__.py
│       │   │   ├── numerics.pyx
│       │   │   ├── types.pxd
│       │   │   └── types.py
│       │   ├── cache.py
│       │   ├── data.py
│       │   ├── geo_grid.py
│       │   ├── geo_network.py
│       │   ├── grid.py
│       │   ├── interacting_networks.py
│       │   ├── netcdf_dictionary.py
│       │   ├── network.py
│       │   ├── resistive_network.py
│       │   └── spatial_network.py
│       ├── eventseries/
│       │   ├── __init__.py
│       │   └── event_series.py
│       ├── funcnet/
│       │   ├── __init__.py
│       │   ├── _ext/
│       │   │   ├── __init__.py
│       │   │   └── numerics.pyx
│       │   ├── coupling_analysis.py
│       │   └── coupling_analysis_pure_python.py
│       ├── timeseries/
│       │   ├── __init__.py
│       │   ├── _ext/
│       │   │   ├── __init__.py
│       │   │   └── numerics.pyx
│       │   ├── cross_recurrence_plot.py
│       │   ├── inter_system_recurrence_network.py
│       │   ├── joint_recurrence_network.py
│       │   ├── joint_recurrence_plot.py
│       │   ├── recurrence_network.py
│       │   ├── recurrence_plot.py
│       │   ├── surrogates.py
│       │   └── visibility_graph.py
│       ├── utils/
│       │   ├── __init__.py
│       │   └── mpi.py
│       └── version.py
├── tests/
│   ├── conftest.py
│   ├── test_climate/
│   │   ├── __init__.py
│   │   ├── test_climate_data.py
│   │   ├── test_climate_network.py
│   │   ├── test_coupled_climate_network.py
│   │   ├── test_eventseries_climatenetwork.py
│   │   ├── test_map_plot.py
│   │   └── test_tsonis.py
│   ├── test_core/
│   │   ├── ResistiveNetwork_utils.py
│   │   ├── TestResistiveNetwork-circuits.py
│   │   ├── TestResistiveNetwork-complexInput.py
│   │   ├── TestResistiveNetwork-cython.py
│   │   ├── TestResistiveNetwork-types.py
│   │   ├── __init__.py
│   │   ├── test_cache.py
│   │   ├── test_data.py
│   │   ├── test_geo_grid.py
│   │   ├── test_geo_network.py
│   │   ├── test_grid.py
│   │   ├── test_interacting_networks.py
│   │   ├── test_network.py
│   │   ├── test_resistive_networks.py
│   │   └── test_spatial_network.py
│   ├── test_eventseries/
│   │   └── test_event_series.py
│   ├── test_funcnet/
│   │   ├── test_coupling_analysis.py
│   │   └── test_coupling_analysis_pure_python.py
│   ├── test_generic.py
│   └── test_timeseries/
│       ├── test_joint_recurrence_plot.py
│       ├── test_recurrence_plot.py
│       └── test_timeseries.py
└── tools/
    └── update-copyright

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
# Override jupyter in Github language stats for more accurate estimate of repo code
# reference: https://github.com/github/linguist/blob/master/docs/overrides.md#generated-code
*.ipynb linguist-generated

================================================
FILE: .gitignore
================================================
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions / Cython / Weave
*.c
!*/_ext/src_numerics.c
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
#   For a library or package, you might want to ignore these files since the code is
#   intended to run in multiple environments; otherwise, check them in:
# .python-version

# pipenv
#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
#   However, in case of collaboration, if having platform-specific dependencies or dependencies
#   having no cross-platform support, pipenv may install dependencies that don't work, or not
#   install all needed dependencies.
#Pipfile.lock

# UV
#   Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
#   This is especially recommended for binary packages to ensure reproducibility, and is more
#   commonly ignored for libraries.
uv.lock

# poetry
#   Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
#   This is especially recommended for binary packages to ensure reproducibility, and is more
#   commonly ignored for libraries.
#   https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock

# pdm
#   Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
#   pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
#   in version control.
#   https://pdm.fming.dev/#use-with-ide
.pdm.toml

# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Devenv
.devenv*
devenv.local.nix
devenv.lock

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# Eclipse project settings
.settings/org.eclipse.*

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

# PyCharm
#  JetBrains specific template is maintained in a separate JetBrains.gitignore that can
#  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
#  and can be added to the global gitignore or merged into this file.  For a more nuclear
#  option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/

# cached data
*.data
docs/source/examples/tutorials/data


================================================
FILE: .travis.yml
================================================
# This file is part of pyunicorn.
# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors
# URL: <https://www.pik-potsdam.de/members/donges/software-2/software>
# License: BSD (3-clause)


# documentation & validation ==================================================

# - https://docs.travis-ci.com/user/reference/overview
# - https://docs.travis-ci.com/user/build-matrix/
# - https://docs.travis-ci.com/user/multi-os/

# - https://docs.travis-ci.com/user/build-config-validation/
# - https://config.travis-ci.com/explore


# meta ========================================================================

# enable build config validation
version: ~> 1.0

# save Travis budget
if: branch = master

# report outcomes
notifications:
  email:
    on_success: change
    on_failure: always


# default jobs: Linux, all Python versions ====================================

os: linux
dist: focal
arch: arm64
virt: lxd
language: generic

env:
  global:
    # limit procs to available cores
    - TOX_JOBS=2
  jobs:
    - PYTHON=3.14
    - PYTHON=3.13
    - PYTHON=3.12
    - PYTHON=3.11
    - PYTHON=3.10

before_install: export ARCH=Linux-aarch64

install:
  - | # install Miniconda
    travis_retry wget https://repo.anaconda.com/miniconda/Miniconda3-latest-${ARCH}.sh -O miniconda.sh
    bash miniconda.sh -b -p ${HOME}/miniconda
    export PATH="${HOME}/miniconda/bin:${PATH}"; hash -r
    conda config --set quiet yes --set always_yes yes --set changeps1 no
    travis_retry conda update -n base -c defaults conda
    travis_retry conda update --all
    conda config --set solver libmamba
    conda info -a
    conda list
  - | # install executables via Miniconda: Python, Pandoc, Codecov
    travis_retry conda create -n test-env
    eval "$(conda shell.bash hook)"
    conda activate test-env
    travis_retry conda install -c conda-forge python=${PYTHON} pandoc codecov
    travis_retry conda update  -c conda-forge --all
    conda info -a
    conda list
  - | # install Python libs via Miniconda
    travis_retry conda install -c conda-forge \
        numpy scipy python-igraph h5netcdf[h5py] tqdm \
        ipython networkx matplotlib cartopy sphinx nbsphinx \
        tox flake8 pylint pytest-xdist pytest-cov
    conda info -a
    conda list

script:
  - | # install Python libs via Pip: self (+ dependencies, if on Windows)
    travis_retry pip install -v -e . --group tests --group docs
  - | # run test suite
    tox -v

# report statistics
after_success: codecov


# modified job: Windows, newest Python version ================================
# (inherit only 1st `env.jobs` entry)

jobs:
  fast_finish: true
  include:
    - os: windows
      language: shell
      before_install:
        - export ARCH=Windows-x86_64
        - export PATH=/c/Python${PYTHON/.}:/c/Python${PYTHON/.}/Scripts:${PATH}
      install:
        - | # install executables via Chocolatey: Python, Pandoc, Codecov
          travis_retry choco install python${PYTHON/.}
          travis_retry python -m pip install --upgrade pip
          travis_retry choco install pandoc codecov


================================================
FILE: CHANGELOG.rst
================================================

Changelog
=========

0.9.0
-----

New/updated functionality:

- enabled link/edge weighting in calculation of shortest path betweenness centrality (i.e. ``Network.betweenness()``) and
  corrected implementation of ``Network.nsi_betweenness()`` to enable calculation of n.s.i. shortest path betweenness
  centrality of directed networks.
  (`#142 <https://github.com/pik-copan/pyunicorn/issues/142>`_, 
  `#248 <https://github.com/pik-copan/pyunicorn/issues/248>`_, 
  `#250 <https://github.com/pik-copan/pyunicorn/pull/250>`_)
- updated and enhanced structure, documentation and testing of ``Cached`` mix-in class
  (`#252 <https://github.com/pik-copan/pyunicorn/issues/252>`_,
  `#253 <https://github.com/pik-copan/pyunicorn/pull/253>`_)

Package:

- updated CI to discontinue macOS support
  (`1a7973b <https://github.com/pik-copan/pyunicorn/commit/1a7973b247fd2b71315ca65a7773a8807c58959c>`_)
- updated CI to observe end-of-life for ``python=3.9`` and add support for ``python=3.14``
  (`#253 <https://github.com/pik-copan/pyunicorn/pull/253>`_)
- migrated ``setup.cfg`` to ``pyproject.toml`` and established support for ``uv`` package manager
  (`1c94599 <https://github.com/pik-copan/pyunicorn/commit/1c94599e70590d4365a65e5fcd1806df9ac04510>`_)
- simplified CI configuration wrt. limiting of processes
  (`d8bc4a0 <https://github.com/pik-copan/pyunicorn/commit/d8bc4a0163abd279f9ff7ceea6bbbf78adb89e70>`_)
- updated dependencies and CI to ``h5netcdf>=1.8.1``
  (`a88ab4d <https://github.com/pik-copan/pyunicorn/commit/a88ab4d08231f09e2ae5ff8024cbf39bba0d7e7a>`_)

Documentation:

- minor fix in API documentation (`#246 <https://github.com/pik-copan/pyunicorn/pull/246>`_)

Bug Fixes:

- updated download URL for test data 
  (`40cd2b9 <https://github.com/pik-copan/pyunicorn/commit/40cd2b96b69a377d1d300b399982ef171fedb6d2>`_,
  `#251 <https://github.com/pik-copan/pyunicorn/issues/251>`_)
- adapted ``Network`` to API of ``scipy>=1.19``
  (`031fdfe <https://github.com/pik-copan/pyunicorn/commit/031fdfeddff4947941cf221f77ac78f5be5f58dd>`_)

0.8.2
-----

Documentation:

- Review ``CITATION.cff`` to fix `Zenodo-Hook <https://zenodo.org/records/10697647>`_.


0.8.1
-----

Package:

- Established support for Python 3.13, faded out support for Python 3.8
  (`1bfd5d2 <https://github.com/pik-copan/pyunicorn/commit/1bfd5d2e9f89517326ee034cf9b8ed7b31d4f078>`_)

Documentation:

- Enabled automated `Zenodo-Hook <https://zenodo.org/records/10697647>`_.

Bug Fixes:

- Fixed bugs in parallel code of ``Network`` class as well as ``utils.mpi`` example scripts
  (`#241 <https://github.com/pik-copan/pyunicorn/issues/241>`_,
  `#242 <https://github.com/pik-copan/pyunicorn/pull/242>`_).

0.8.0
-----

Package:

- Improved `test coverage <https://app.codecov.io/gh/pik-copan/pyunicorn?search=&trend=all%20time>`_.
- Improved style and linting by revising and reducing global message disables
  (`#224 <https://github.com/pik-copan/pyunicorn/pull/224>`_,
  `#231 <https://github.com/pik-copan/pyunicorn/pull/231>`_,
  `#233 <https://github.com/pik-copan/pyunicorn/pull/233>`_).
- Ensured ``numpy=2.0`` support
  (`#234 <https://github.com/pik-copan/pyunicorn/pull/234>`_).
- Removed experimental and untested code
  (`#40 <https://github.com/pik-copan/pyunicorn/issues/40>`_,
  `#239 <https://github.com/pik-copan/pyunicorn/pull/239>`_).

New/Updated functionality:

- Extended Caching to ``RecurrenceNetwork`` and child classes as well as ``Surrogates``.
  (`#236 <https://github.com/pik-copan/pyunicorn/pull/236>`_).
- Revised API of ``Surrogates`` to conform to OO structure assumed by ``Cached``.
  (`#236 <https://github.com/pik-copan/pyunicorn/pull/236>`_).

Documentation:

- Removed malfunctioning links from Introduction
  (`369b086 <https://github.com/pik-copan/pyunicorn/commit/369b086a8535dbfad6651caa62bee5a5488a0bfd>`_).
- Moved tutorial notebooks into ``docs``, dropped ``nbsphinx-link`` dependency
  (`c54102e <https://github.com/pik-copan/pyunicorn/commit/c54102e42b767271be6299f8bf8170b27bda28e6>`_).
- Added ``EventSeriesClimateNetwork`` to API documentation
  (`#232 <https://github.com/pik-copan/pyunicorn/pull/232>`_).
- Removed outdated MathJax path for correct math display
  (`0dd133c <https://github.com/pik-copan/pyunicorn/commit/0dd133c59da252b8c0e0e17f82290881508d0274>`_).

Bug fixes:

- Fixed unnoticed bug in ``SpatialNetwork.{in|out}average_link_distance()``
  (`6b40587 <https://github.com/pik-copan/pyunicorn/commit/6b405873bede4ec18cd72164c734ed47964d2930>`_).
- Substituted deprecated shorthand ``scipy.sparse.*_matrix.A`` for ``scipy>=1.14`` compatibility
  (`1d96e58 <https://github.com/pik-copan/pyunicorn/commit/1d96e58040c831afdcd7f7bf97be3ebd6ae6815a>`_).
- Substituted variable name ``I`` in C code, which might interfere with C's own macro for complex numbers
  (`#225 <https://github.com/pik-copan/pyunicorn/issues/225>`_,
  `#226 <https://github.com/pik-copan/pyunicorn/pull/232>`_).
- Fixed setup of Travis-CI on Windows builds
  (`#237 <https://github.com/pik-copan/pyunicorn/pull/237>`_).

0.7.0
-----

Package:

- Migrated to PEP 517/518 package format
  (`a6c4c83 <https://github.com/pik-copan/pyunicorn/commit/a6c4c83905fcc4b73f46643fbe2f160917755e0e>`_).
- Added full Windows support
  (`#159 <https://github.com/pik-copan/pyunicorn/issues/159>`_,
  `#160 <https://github.com/pik-copan/pyunicorn/issues/160>`_).
- Reestablished `CI <https://app.travis-ci.com/github/pik-copan/pyunicorn>`_ on Linux
  (`#191 <https://github.com/pik-copan/pyunicorn/issues/191>`_,
  `#192 <https://github.com/pik-copan/pyunicorn/pull/192>`_)
  and added macOS and Windows
  (`#214 <https://github.com/pik-copan/pyunicorn/pull/214>`_).
- Improved `test coverage <https://app.codecov.io/gh/pik-copan/pyunicorn?search=&trend=all%20time>`_.
- Discontinued Python 3.7 support
  (`4cf6969 <https://github.com/pik-copan/pyunicorn/commit/4cf6969c40de39f01f31ea141767ec67cc3d6d31>`_).
- Replaced optional dependecy ``netcdf4`` with ``h5netcdf``
  (`cd8ee00 <https://github.com/pik-copan/pyunicorn/commit/cd8ee00a534c0eae9440414d38a0eaaa5100aaec>`_,
  `#12 <https://github.com/pik-copan/pyunicorn/issues/12>`_,
  `#210 <https://github.com/pik-copan/pyunicorn/issues/210>`_).
- Replaced outdated ``progressbar`` with ``tqdm``
  (`#202 <https://github.com/pik-copan/pyunicorn/pull/202>`_).

Documentation:

- Added new tutorials
  (`#175 <https://github.com/pik-copan/pyunicorn/pull/175>`_,
  `#180 <https://github.com/pik-copan/pyunicorn/pull/180>`_,
  `#190 <https://github.com/pik-copan/pyunicorn/pull/190>`_).
- Edited tutorials and included notebooks in documentation
  (`#179 <https://github.com/pik-copan/pyunicorn/pull/179>`_,
  `#185 <https://github.com/pik-copan/pyunicorn/issues/185>`_,
  `#213 <https://github.com/pik-copan/pyunicorn/pull/213>`_).

New/Updated functionality:

- Generalized spatial and interacting network analysis
  (`#131 <https://github.com/pik-copan/pyunicorn/pull/131>`_):
  added ``SpatialNetwork`` class, added Watts-Strogatz model to ``Network``,
  added new metrics to ``RecurrencePlot``, ``CoupledClimateNetwork`` and
  ``InteractingNetworks``.
- Added ``EventSeries`` and ``EventSeriesClimateNetwork`` classes
  (`#156 <https://github.com/pik-copan/pyunicorn/pull/156>`_).
- Extended n.s.i. measures in ``Network`` with directed and weighted versions
  (`#153 <https://github.com/pik-copan/pyunicorn/pull/153>`_).
- Replaced ``MapPlots`` class with simplified ``MapPlot`` based on ``Cartopy``
  (`#174 <https://github.com/pik-copan/pyunicorn/pull/174>`_,
  `#203 <https://github.com/pik-copan/pyunicorn/issues/203>`_).

Extensions:

- Overhauled the Python/Cython interface
  (`3dab5bf <https://github.com/pik-copan/pyunicorn/commit/3dab5bf89d2e224fc319ddd64aeeecc480f27fba>`_,
  `402197f <https://github.com/pik-copan/pyunicorn/commit/402197fedff6dc4ce9796b5d2c32bb63ef6ecba8>`_).
- Made Cython/C extensions compatible with MSVC
  (`#160 <https://github.com/pik-copan/pyunicorn/issues/160>`_,
  `#165 <https://github.com/pik-copan/pyunicorn/issues/165>`_).
- Ported most of the remaining C extensions to Cython
  (`#128 <https://github.com/pik-copan/pyunicorn/issues/128>`_,
  `#142 <https://github.com/pik-copan/pyunicorn/issues/142>`_,
  `#145 <https://github.com/pik-copan/pyunicorn/issues/145>`_,
  `#187 <https://github.com/pik-copan/pyunicorn/issues/187>`_,
  `#195 <https://github.com/pik-copan/pyunicorn/pull/195>`_).
  
Bug fixes:

- Resolved indexing and typing problems in extensions
  (`#126 <https://github.com/pik-copan/pyunicorn/issues/126>`_,
  `#141 <https://github.com/pik-copan/pyunicorn/issues/141>`_,
  `#145 <https://github.com/pik-copan/pyunicorn/issues/145>`_,
  `#162 <https://github.com/pik-copan/pyunicorn/issues/162>`_,
  `#163 <https://github.com/pik-copan/pyunicorn/issues/163>`_).
- Overhauled the memoization/caching system
  (`#124 <https://github.com/pik-copan/pyunicorn/issues/124>`_,
  `#148 <https://github.com/pik-copan/pyunicorn/issues/148>`_,
  `#219 <https://github.com/pik-copan/pyunicorn/pull/219>`_).
- Shifted the histogram index in ``RecurrencePlot`` line distributions
  (`#166 <https://github.com/pik-copan/pyunicorn/issues/166>`_,
  `#209 <https://github.com/pik-copan/pyunicorn/pull/209>`_).
- Resolved numerous other issues related to inheritance and method overloading,
  deprecated APIs, etc. For a full list, see the `release milestone
  <https://github.com/pik-copan/pyunicorn/milestone/1?closed=1>`_.

0.6.1
-----
- Fixed some bugs and compatibility issues.
- Improved test framework.
- Added ``pyunicorn`` description paper reference to all code files.

0.6.0
-----
- Migrated from Python 2.7 to Python 3.7.
- Completed transition from ``Weave`` to ``Cython``.
- Added Event Coincidence Analysis.

0.5.2
-----
- Updated test suite and CI.

0.5.1
-----
- Added reference to ``pyunicorn`` description paper published in the
  journal *Chaos*.

0.5.0
-----
- Substantial update of ``CouplingAnalysis``.
- New methods in ``RecurrenceNetwork``: ``transitivity_dim_single_scale``,
  ``local_clustering_dim_single_scale``.
- Renamed time-directed measures in ``VisibilityGraph``: ``left/right`` ->
  ``retarded/advanced``.
- Improved documentation and extended publication list.
- Began transition from ``Weave`` to ``Cython``.
- Added unit tests and improved Pylint compliance.
- Set up continuous testing with Travis-CI.
- Fixed some minor bugs.

0.4.1
-----
- Removed a whole lot of ``get_`` s from the API. For example,
  ``Network.get_degree()`` is now ``Network.degree()``.
- Fixed some minor bugs.

0.4.0
-----
- Restructured package (subpackages: ``core``, ``climate``, ``timeseries``,
  ``funcnet``, ``utils``).
- Removed dependencies: ``Pysparse``, ``PyNio``, ``progressbar``.
- Added a module for resistive networks.
- Switched to ``tox`` for test suite management.
- Ensured PEP8 and PyFlakes compliance.

0.3.2
-----
- Fixed some minor bugs.
- Switched to ``Sphinx`` documentation system.

0.3.1
-----
- First public release of ``pyunicorn``.


================================================
FILE: CITATION.cff
================================================
cff-version: 1.2.0
message: If you use this software, please cite it using the metadata provided below.
type: software
title: 'Pyunicorn: Unified Complex Network and Recurrence Analysis Toolbox'
abstract: pyunicorn (Unified Complex Network and RecurreNce analysis toolbox) is an
  object-oriented Python package for the advanced analysis and modeling of complex networks.
  Beyond the standard measures of complex network theory (such as degree, betweenness and
  clustering coefficients), it provides some uncommon but interesting statistics like
  Newman's random walk betweenness. pyunicorn also provides novel node-weighted (node
  splitting invariant) network statistics, measures for analyzing networks of
  interacting/interdependent networks, and special tools to model spatially embedded complex
  networks.

  Moreover, pyunicorn allows one to easily construct networks from uni- and multivariate
  time series and event data (functional/climate networks and recurrence networks). This
  involves linear and nonlinear measures of time series analysis for constructing functional
  networks from multivariate data (e.g., Pearson correlation, mutual information, event
  synchronization and event coincidence analysis). pyunicorn also features modern techniques
  of nonlinear analysis of time series (or pairs thereof), such as recurrence quantification
  analysis (RQA), recurrence network analysis and visibility graphs.

  pyunicorn is fast, because all costly computations are performed in compiled C code. It can
  handle large networks through the use of sparse data structures. The package can be used
  interactively, from any Python script, and even for parallel computations on large cluster
  architectures.
authors:
- family-names: Donges
  given-names: Jonathan
  email: donges@pik-potsdam.de
  orcid: https://orcid.org/0000-0001-5233-7703
- family-names: Heitzig
  given-names: Jobst
  email: jobst.heitzig@pik-potsdam.de
  orcid: https://orcid.org/0000-0002-0442-8077
- family-names: Beronov
  given-names: Boyan
  email: beronov@cs.ubc.ca
  orcid: https://orcid.org/0000-0002-0900-752X
- family-names: Kühlein
  given-names: Fritz
  email: fritzku@pik-potsdam.de
- family-names: Bechthold
  given-names: Max
  email: maxbecht@pik-potsdam.de
  orcid: https://orcid.org/0009-0007-7113-4814
- family-names: Kroenke
  given-names: Jonathan
  email: kroenke@pik-potsdam.de
- family-names: Barfuss
  given-names: Wolfram
  email: barfuss@uni-bonn.de
  orcid: https://orcid.org/0000-0002-9077-5242
- family-names: Harmening
  given-names: Nils
- family-names: Nascimento Silva
  given-names: Filipi
- family-names: Kassel
  given-names: Johannes
- family-names: Ziehbarth
  given-names: Malte
- family-names: Odenweller
  given-names: Adrian
- family-names: Tzinis
  given-names: Efthymios
- family-names: Hotz
  given-names: Ronja

license: GPL-3.0
repository-code: https://github.com/pik-copan/pyunicorn

preferred-citation:
  type: article
  title: 'Unified functional network and nonlinear time series analysis for complex
    systems science: The pyunicorn package'
  authors:
  - family-names: Donges
    given-names: Jonathan
    email: donges@pik-potsdam.de
    orcid: https://orcid.org/0000-0001-5233-7703
  - family-names: Heitzig
    given-names: Jobst
    email: jobst.heitzig@pik-potsdam.de
    orcid: https://orcid.org/0000-0002-0442-8077
  - family-names: Beronov
    given-names: Boyan
    email: beronov@pik-potsdam.de
    orcid: https://orcid.org/0000-0002-0900-752X
  - family-names: Wiedermann
    given-names: Marc
    orcid: https://orcid.org/0000-0001-9869-3789
  - family-names: Runge
    given-names: Jakob
  - family-names: Feng
    given-names: Quing Yi
  - family-names: Tupikina
    given-names: Liubov
  - family-names: Stolbova
    given-names: Veronika
  - family-names: Donner
    given-names: Reik V.
    email: redonner@pik-potsdam.de
    orcid: https://orcid.org/0000-0001-7023-6375
  - family-names: Marwan
    given-names: Norbert
    email: marwan@pik-potsdam.de
    orcid: https://orcid.org/0000-0003-1437-7039
  - family-names: Dijkstra
    given-names: Henk A.
  - family-names: Kurths
    given-names: Jürgen
    email: juergen.kurths@pik-potsdam.de
    orcid: https://orcid.org/0000-0002-5926-4276
  abstract: We introduce the pyunicorn (Pythonic unified complex network and recurrence analysis
    toolbox) open source software package for applying and combining modern methods of data
    analysis and modeling from complex network theory and nonlinear time series analysis. pyunicorn
    is a fully object-oriented and easily parallelizable package written in the language Python. It
    allows for the construction of functional networks such as climate networks in climatology or
    functional brain networks in neuroscience representing the structure of statistical
    interrelationships in large data sets of time series and, subsequently, investigating this
    structure using advanced methods of complex network theory such as measures and models for
    spatial networks, networks of interacting networks, node-weighted statistics, or network
    surrogates. Additionally, pyunicorn provides insights into the nonlinear dynamics of complex
    systems as recorded in uni- and multivariate time series from a non-traditional perspective by
    means of recurrence quantification analysis, recurrence networks, visibility graphs, and
    construction of surrogate time series. The range of possible applications of the library is
    outlined, drawing on several examples mainly from the field of climatology.
  doi: 10.1063/1.4934554
  journal: Chaos
  month: 11
  issue: 11
  volume: 25
  year: 2015


================================================
FILE: CONTRIBUTIONS.rst
================================================

Contributions
=============

Copyright
---------
\ |copy| 2008-2026 Jonathan F. Donges and pyunicorn authors.

License
-------
BSD (3-clause)

URL
---
https://www.pik-potsdam.de/members/donges/software-2/software

Mail
----
Jonathan Donges, Potsdam Institute for Climate Impact Research,
P.O. Box 60 12 03, D-14412 Potsdam, Germany

Related publications
--------------------
See `Publications <docs/source/publications.rst>`_.

Authors
-------
Written as part of a diploma/PhD thesis in physics by `Jonathan F. Donges
<donges@pik-potsdam.de>`_ at Humboldt University Berlin and the Potsdam
Institute for Climate Impact Research (PIK) and completed at the University of
Potsdam, Germany. Substantially extended by `Jobst Heitzig
<heitzig@pik-potsdam.de>`_.

Contributors
------------
- Jakob Runge (extended ``core`` and ``climate``)
- Alexander Radebach
- Hanna Schultz
- Marc Wiedermann (extended ``core`` and ``climate``)
- `Alraune Zech <alrauni@web.de>`_
  (extended ``timeseries`` during an internship at PIK)
- `Jan Feldhoff <feldhoff@pik-potsdam.de>`_ (extended ``timeseries``)
- Aljoscha Rheinwalt
- Hannes Kutza
- `Boyan Beronov <beronov@cs.ubc.ca>`_ (restructured, updated and linted
  codebase and documentation, consolidated original packaging, prepared
  Cythonization and migration to Python 3, managed open-sourcing, introduced CI,
  migrated to PEP 517/518 package format, overhauled the Python/Cython interface,
  made Cython/C extensions compatible with MSVC, edited tutorials,
  overhauled the caching system, maintained test suite and CI)
- `Paul Schultz <pschultz@pik-potsdam.de>`_, `Stefan Schinkel
  <mail@dreeg.org>`_ (added ``resistive_network`` and corresponding
  tests)
- `Wolfram Barfuss <barfuss@pik-potsdam.de>`_
  (contributed to Cythonization, extended and maintained package)
- Malte Ziehbarth (contributed to Python 3 support in
  `#106 <https://github.com/pik-copan/pyunicorn/pull/106>`_)
- Nils Harmening (added event coincidence analysis, contributed to Cythonization,
  extended test suite, migrated from Python 2.7 to 3.6)
- Jonathan Kroenke (fixed numerous bugs and style issues in
  `#119 <https://github.com/pik-copan/pyunicorn/pull/119>`_,
  generalized spatial and interacting network analysis in
  `#131 <https://github.com/pik-copan/pyunicorn/pull/131>`_,
  extended test suite, maintained package and managed release)
- Johannes Kassel (added ``eventseries`` and
  ``climate.eventseries_climatenetwork`` in
  `#156 <https://github.com/pik-copan/pyunicorn/pull/156>`_)
- `Frederik Wolf <Frederik.Wolf@bmz.bund.de>`_ (contributed to ``eventseries``)
- Lena Schmidt (added tutorials, maintained package)
- `Max Bechthold <maxbecht@pik-potsdam.de>`_
  (reenabled CI, migrated plotting to ``Cartopy``, added tutorials,
  maintained package)
- `Ronja Hotz <ronja.hotz@yahoo.de>`_ (added a tutorial
  in `#190 <https://github.com/pik-copan/pyunicorn/pull/190>`_)
- `Fritz Kühlein <fritzku@pik-potsdam.de>`_
  (fixed numerous bugs and style issues, improved test coverage and CI,
  integrated tutorial notebooks into documentation,
  maintained package and managed releases)

Acknowledgements
----------------
- Travis-CI (https://www.travis-ci.com/) for providing free builds for this open
  source project.

.. |copy|   unicode:: U+000A9 .. COPYRIGHT SIGN


================================================
FILE: LICENSE.txt
================================================

Copyright (C) 2008-2026, Jonathan F. Donges (Potsdam-Institute for Climate
Impact Research), pyunicorn authors

All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice, this
      list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.

    * Neither the name of pyunicorn authors and the Potsdam-Institute for
      Climate Impact Research nor the names of its contributors may be used to
      endorse or promote products derived from this software without specific
      prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


================================================
FILE: MANIFEST.in
================================================
include MANIFEST.in
recursive-exclude src/pyunicorn/*/_ext *.c
recursive-include src/pyunicorn/*/_ext *.pxd *.pyx src_*.c

include *.rst *.txt docs/Makefile
graft docs/source
prune **/.ipynb_checkpoints

recursive-include tests *.py


================================================
FILE: README.rst
================================================
=========
pyunicorn
=========

.. image:: https://app.travis-ci.com/pik-copan/pyunicorn.svg?branch=master
  :target: https://app.travis-ci.com/github/pik-copan/pyunicorn

.. image:: https://codecov.io/gh/pik-copan/pyunicorn/branch/master/graph/badge.svg
  :target: https://codecov.io/gh/pik-copan/pyunicorn

.. image:: https://img.shields.io/pypi/v/pyunicorn
  :target: https://pypi.org/project/pyunicorn/

.. image:: https://img.shields.io/pypi/pyversions/pyunicorn
  :target: https://pypi.org/project/pyunicorn/

.. image:: https://zenodo.org/badge/33720178.svg
  :target: https://zenodo.org/badge/latestdoi/33720178

About
=====
``pyunicorn`` (**Uni**\ fied **Co**\ mplex Network and **R**\ ecurre\ **N**\ ce
analysis toolbox) is an object-oriented Python package for the advanced analysis
and modeling of complex networks. Beyond the standard **measures of complex
network theory** (such as *degree*, *betweenness* and *clustering coefficients*), it
provides some uncommon but interesting statistics like *Newman's random walk
betweenness*. ``pyunicorn`` also provides novel **node-weighted** *(node splitting invariant)*
network statistics, measures for analyzing networks of **interacting/interdependent
networks**, and special tools to model **spatially embedded** complex networks.

Moreover, ``pyunicorn`` allows one to easily *construct networks* from uni- and
multivariate time series and event data (**functional/climate networks** and
**recurrence networks**). This involves linear and nonlinear measures of
**time series analysis** for constructing functional networks from multivariate data
(e.g., *Pearson correlation*, *mutual information*, *event synchronization* and *event
coincidence analysis*). ``pyunicorn`` also features modern techniques of
nonlinear analysis of time series (or pairs thereof), such as *recurrence
quantification analysis* (RQA), *recurrence network analysis* and *visibility
graphs*.

``pyunicorn`` is **fast**, because all costly computations are performed in
compiled C code. It can handle **large networks** through the
use of sparse data structures. The package can be used interactively, from any
Python script, and even for parallel computations on large cluster architectures.
For information about individual releases,
see our `CHANGELOG <CHANGELOG.rst>`_ and `CONTRIBUTIONS <CONTRIBUTIONS.rst>`_.


License
-------
``pyunicorn`` is `BSD-licensed <LICENSE.txt>`_ (3 clause).

Reference
---------
*Please acknowledge and cite the use of this software and its authors when
results are used in publications or published elsewhere. You can use the
following reference:*

    J.F. Donges, J. Heitzig, B. Beronov, M. Wiedermann, J. Runge, Q.-Y. Feng,
    L. Tupikina, V. Stolbova, R.V. Donner, N. Marwan, H.A. Dijkstra, and J.
    Kurths.
    **"Unified functional network and nonlinear time series analysis for complex
    systems science: The pyunicorn package"**.
    Chaos 25, 113101 (2015), `doi:10.1063/1.4934554
    <http://dx.doi.org/10.1063/1.4934554>`_, Preprint: `arxiv.org:1507.01571
    <http://arxiv.org/abs/1507.01571>`_ [physics.data-an].

Funding
-------
The development of ``pyunicorn`` has been supported by various funding sources,
notably the `German Federal Ministry for Education and Research
<https://www.bmbf.de/bmbf/en/home/home_node.html>`_ (projects `GOTHAM
<https://www.belmontforum.org/projects>`_ and `CoSy-CC2
<http://cosy.pik-potsdam.de/>`_), the `Leibniz Association
<https://www.leibniz-gemeinschaft.de/en/>`_ (projects `ECONS
<http://econs.pik-potsdam.de/>`_ and `DominoES
<https://www.pik-potsdam.de/en/institute/departments/activities/dominoes>`_),
the `German National Academic Foundation <https://www.studienstiftung.de/en/>`_,
and the `Stordalen Foundation <http://www.stordalenfoundation.no/>`_ via the
`Planetary Boundary Research Network
<https://web.archive.org/web/20200212214011/http://pb-net.org/>`_ (PB.net) among
others.

Getting Started
===============

Installation
------------
Official releases
.................
`Stable releases <https://pypi.org/project/pyunicorn/#history>`_ can be
installed from the Python Package Index, using a Python package manager such as
`pip <https://pip.pypa.io/en/latest/user_guide/>`__ or
`uv <https://docs.astral.sh/uv/>`__::

    $> pip install pyunicorn

Alternatively, source distributions can be downloaded from the
`GitHub Releases <https://github.com/pik-copan/pyunicorn/releases>`_.

On **Windows**, please *first* install the latest version of the
`Microsoft C++ Build Tools <https://wiki.python.org/moin/WindowsCompilers>`_,
which is required for compiling Cython modules.

Current development version
...........................
In order to use a `newer version <https://github.com/pik-copan/pyunicorn>`_,
please follow the `pip
<https://packaging.python.org/en/latest/tutorials/installing-packages/#installing-from-vcs>`__
or `uv <https://docs.astral.sh/uv/concepts/projects/dependencies/#git>`__
instructions for installing from version control.

Dependencies
............
``pyunicorn`` is implemented in `Python 3 <https://docs.python.org/3/>`_ /
`Cython 3 <https://cython.org/>`_, is `tested
<https://app.travis-ci.com/github/pik-copan/pyunicorn>`_ on *Linux*
and *Windows*, and relies on the following packages:

- Required:

  - `numpy <http://www.numpy.org/>`_, `scipy <http://www.scipy.org/>`_
  - `python-igraph <http://igraph.org/>`_ (for ``Network``)
  - `h5netcdf <https://h5netcdf.org/>`_ (for ``Data``, ``NetCDFDictionary``)
  - `tqdm <https://tqdm.github.io/>`_ (for progress bars)

- Optional:

  - `Matplotlib <http://matplotlib.org/>`_,
    `Cartopy <https://scitools.org.uk/cartopy/docs/latest/index.html>`_
    (for plotting features)
  - `mpi4py <https://github.com/mpi4py/mpi4py>`_
    (for parallelizing costly computations)
  - `Sphinx <http://sphinx-doc.org/>`_
    (for generating documentation)
  - `Jupyter Notebook <https://jupyter-notebook.readthedocs.io/en/latest/>`_
    (for tutorial notebooks)


Documentation
-------------
For extensive HTML documentation, jump right to the `homepage
<http://www.pik-potsdam.de/~donges/pyunicorn/>`_. In a local source tree,
HTML and PDF documentation can be generated using ``Sphinx``::

    $> pip install --group docs
    $> cd docs; make clean html latexpdf

Tutorials
---------

For some example applications look into the
`tutorials <https://github.com/pik-copan/pyunicorn/tree/master/docs/source/examples/tutorials>`_ provided with the documentation.
They are designed to be self-explanatory, and are set up as Jupyter notebooks.

Development
===========

Test suite
----------
Before committing changes or opening a pull request (PR) to the code base,
please make sure that all tests pass. The test suite is managed by `tox
<https://tox.wiki/>`_ and is configured to use system-wide packages
when available. Install the test dependencies as follows::

    $> pip install --group tests

The test suite can be run from anywhere in the project tree by issuing::

    $> tox

To display the defined test environments and target them individually::

    $> tox -l
    $> tox -e style,lint,test,docs

To test individual files::

    $> flake8 src/pyunicorn/core/network.py     # style check
    $> pylint src/pyunicorn/core/network.py     # static code analysis
    $> pytest tests/test_core/test_network.py   # unit tests


================================================
FILE: devenv.nix
================================================

# Documentation: https://devenv.sh/

{ pkgs, lib, config, inputs, ... }:

{
  packages = with pkgs; [ stdenv.cc.cc zlib git pandoc ];

  cachix.enable = true;
  cachix.pull = [ "nixpkgs-python" ];

  languages.python = {
    enable = true;
    version = "3.14";
    venv.enable = true;
    uv = {
      enable = true;
      sync = {
        enable = true;
        allGroups = true;
        allExtras = true;
      };
    };
  };
}


================================================
FILE: devenv.yaml
================================================
inputs:
  nixpkgs-python:
    url: github:cachix/nixpkgs-python


================================================
FILE: docs/Makefile
================================================
# Makefile for Sphinx documentation
#

# You can set these variables from the command line.
SPHINXOPTS    = -j 4
SPHINXBUILD   = sphinx-build
SPHINXPROJ    = pyunicorn
SOURCEDIR     = source
BUILDDIR      = build

# Put it first so that "make" without argument is like "make help".
help:
	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

.PHONY: help Makefile

# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)


================================================
FILE: docs/source/_static/default.css
================================================
/**
 * Alternate Sphinx design
 * Originally created by Armin Ronacher for Werkzeug, adapted by Georg Brandl.
 */

body {
    font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif;
    font-size: 14px;
    letter-spacing: -0.01em;
    line-height: 150%;
    text-align: center;
    /*background-color: #AFC1C4; */
    background-color: #BFD1D4;
    color: black;
    padding: 0;
    border: 1px solid #aaa;

    margin: 0px 80px 0px 80px;
    min-width: 740px;
}

a {
    color: #CA7900;
    text-decoration: none;
}

a:hover {
    color: #2491CF;
}

pre {
    font-family: 'Consolas', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
    font-size: 0.95em;
    letter-spacing: 0.015em;
    padding: 0.5em;
    border: 1px solid #ccc;
    background-color: #f8f8f8;
}

td.linenos pre {
    padding: 0.5em 0;
    border: 0;
    background-color: transparent;
    color: #aaa;
}

table.highlighttable {
    margin-left: 0.5em;
}

table.highlighttable td {
    padding: 0 0.5em 0 0.5em;
}

cite, code, tt {
    font-family: 'Consolas', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
    font-size: 0.95em;
    letter-spacing: 0.01em;
}

hr {
    border: 1px solid #abc;
    margin: 2em;
}

tt {
    background-color: #f2f2f2;
    border-bottom: 1px solid #ddd;
    color: #333;
}

tt.descname {
    background-color: transparent;
    font-weight: bold;
    font-size: 1.2em;
    border: 0;
}

tt.descclassname {
    background-color: transparent;
    border: 0;
}

tt.xref {
    background-color: transparent;
    font-weight: bold;
    border: 0;
}

a tt {
    background-color: transparent;
    font-weight: bold;
    border: 0;
    color: #CA7900;
}

a tt:hover {
    color: #2491CF;
}

dl {
    margin-bottom: 15px;
}

dd p {
    margin-top: 0px;
}

dd ul, dd table {
    margin-bottom: 10px;
}

dd {
    margin-top: 3px;
    margin-bottom: 10px;
    margin-left: 30px;
}

.refcount {
    color: #060;
}

dt:target,
.highlight {
    background-color: #fbe54e;
}

dl.class, dl.function {
    border-top: 2px solid #888;
}

dl.method, dl.attribute {
    border-top: 1px solid #aaa;
}

dl.glossary dt {
    font-weight: bold;
    font-size: 1.1em;
}

pre {
    line-height: 120%;
}

pre a {
    color: inherit;
    text-decoration: underline;
}

.first {
    margin-top: 0 !important;
}

div.document {
    background-color: white;
    text-align: left;
    background-image: url(contents.png);
    background-repeat: repeat-x;
}

/*
div.documentwrapper {
    width: 100%;
}
*/

div.clearer {
    clear: both;
}

div.related h3 {
    display: none;
}

div.related ul {
    background-image: url(navigation.png);
    height: 2em;
    list-style: none;
    border-top: 1px solid #ddd;
    border-bottom: 1px solid #ddd;
    margin: 0;
    padding-left: 10px;
}

div.related ul li {
    margin: 0;
    padding: 0;
    height: 2em;
    float: left;
}

div.related ul li.right {
    float: right;
    margin-right: 5px;
}

div.related ul li a {
    margin: 0;
    padding: 0 5px 0 5px;
    line-height: 1.75em;
    color: #EE9816;
}

div.related ul li a:hover {
    color: #3CA8E7;
}

div.body {
    margin: 0;
    padding: 0.5em 20px 20px 20px;
}

div.bodywrapper {
    margin: 0 240px 0 0;
    border-right: 1px solid #ccc;
}

div.body a {
    text-decoration: underline;
}

div.sphinxsidebar {
    margin: 0;
    padding: 0.5em 15px 15px 0;
    width: 210px;
    float: right;
    text-align: left;
/*    margin-left: -100%; */
}

div.sphinxsidebar h4, div.sphinxsidebar h3 {
    margin: 1em 0 0.5em 0;
    font-size: 0.9em;
    padding: 0.1em 0 0.1em 0.5em;
    color: white;
    border: 1px solid #86989B;
    background-color: #AFC1C4;
}

div.sphinxsidebar ul {
    padding-left: 1.5em;
    margin-top: 7px;
    list-style: none;
    padding: 0;
    line-height: 130%;
}

div.sphinxsidebar ul ul {
    list-style: square;
    margin-left: 20px;
}

p {
    margin: 0.8em 0 0.5em 0;
}

p.rubric {
    font-weight: bold;
}

h1 {
    margin: 0;
    padding: 0.7em 0 0.3em 0;
    font-size: 1.5em;
    color: #11557C;
}

h2 {
    margin: 1.3em 0 0.2em 0;
    font-size: 1.35em;
    padding: 0;
}

h3 {
    margin: 1em 0 -0.3em 0;
    font-size: 1.2em;
}

h1 a, h2 a, h3 a, h4 a, h5 a, h6 a {
    color: black!important;
}

h1 a.anchor, h2 a.anchor, h3 a.anchor, h4 a.anchor, h5 a.anchor, h6 a.anchor {
    display: none;
    margin: 0 0 0 0.3em;
    padding: 0 0.2em 0 0.2em;
    color: #aaa!important;
}

h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor,
h5:hover a.anchor, h6:hover a.anchor {
    display: inline;
}

h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover,
h5 a.anchor:hover, h6 a.anchor:hover {
    color: #777;
    background-color: #eee;
}

table {
    border-collapse: collapse;
    margin: 0 -0.5em 0 -0.5em;
}

table td, table th {
    padding: 0.2em 0.5em 0.2em 0.5em;
}

div.footer {
    background-color: #E3EFF1;
    color: #86989B;
    padding: 3px 8px 3px 0;
    clear: both;
    font-size: 0.8em;
    text-align: right;
}

div.footer a {
    color: #86989B;
    text-decoration: underline;
}

div.pagination {
    margin-top: 2em;
    padding-top: 0.5em;
    border-top: 1px solid black;
    text-align: center;
}

div.sphinxsidebar ul.toc {
    margin: 1em 0 1em 0;
    padding: 0 0 0 0.5em;
    list-style: none;
}

div.sphinxsidebar ul.toc li {
    margin: 0.5em 0 0.5em 0;
    font-size: 0.9em;
    line-height: 130%;
}

div.sphinxsidebar ul.toc li p {
    margin: 0;
    padding: 0;
}

div.sphinxsidebar ul.toc ul {
    margin: 0.2em 0 0.2em 0;
    padding: 0 0 0 1.8em;
}

div.sphinxsidebar ul.toc ul li {
    padding: 0;
}

div.admonition, div.warning {
    font-size: 0.9em;
    margin: 1em 0 0 0;
    border: 1px solid #86989B;
    background-color: #f7f7f7;
}

div.admonition p, div.warning p {
    margin: 0.5em 1em 0.5em 1em;
    padding: 0;
}

div.admonition pre, div.warning pre {
    margin: 0.4em 1em 0.4em 1em;
}

div.admonition p.admonition-title,
div.warning p.admonition-title {
    margin: 0;
    padding: 0.1em 0 0.1em 0.5em;
    color: white;
    border-bottom: 1px solid #86989B;
    font-weight: bold;
    background-color: #AFC1C4;
}

div.warning {
    border: 1px solid #940000;
}

div.warning p.admonition-title {
    background-color: #CF0000;
    border-bottom-color: #940000;
}

div.admonition ul, div.admonition ol,
div.warning ul, div.warning ol {
    margin: 0.1em 0.5em 0.5em 3em;
    padding: 0;
}

div.versioninfo {
    margin: 1em 0 0 0;
    border: 1px solid #ccc;
    background-color: #DDEAF0;
    padding: 8px;
    line-height: 1.3em;
    font-size: 0.9em;
}


a.headerlink {
    color: #c60f0f!important;
    font-size: 1em;
    margin-left: 6px;
    padding: 0 4px 0 4px;
    text-decoration: none!important;
    visibility: hidden;
}

h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink {
    visibility: visible;
}

a.headerlink:hover {
    background-color: #ccc;
    color: white!important;
}

table.indextable td {
    text-align: left;
    vertical-align: top;
}

table.indextable dl, table.indextable dd {
    margin-top: 0;
    margin-bottom: 0;
}

table.indextable tr.pcap {
    height: 10px;
}

table.indextable tr.cap {
    margin-top: 10px;
    background-color: #f2f2f2;
}

img.toggler {
    margin-right: 3px;
    margin-top: 3px;
    cursor: pointer;
}

img.inheritance {
    border: 0px
}

form.pfform {
    margin: 10px 0 20px 0;
}

table.contentstable {
    width: 90%;
}

table.contentstable p.biglink {
    line-height: 150%;
}

a.biglink {
    font-size: 1.3em;
}

span.linkdescr {
    font-style: italic;
    padding-top: 5px;
    font-size: 90%;
}

ul.search {
    margin: 10px 0 0 20px;
    padding: 0;
}

ul.search li {
    padding: 5px 0 5px 20px;
    background-image: url(file.png);
    background-repeat: no-repeat;
    background-position: 0 7px;
}

ul.search li a {
    font-weight: bold;
}

ul.search li div.context {
    color: #888;
    margin: 2px 0 0 30px;
    text-align: left;
}

ul.keywordmatches li.goodmatch a {
    font-weight: bold;
}


================================================
FILE: docs/source/_templates/layout.html
================================================
{%- extends "basic/layout.html" %}


{% block rootrellink %}
        <li><a href="{{ pathto('index') }}">home</a>&nbsp;|</li>
        <li><a href="{{ pathto('search') }}">search</a>&nbsp;|</li>
{% endblock %}

{% block relbar1 %}

<div style="background-color: white; text-align: left; padding: 10px 10px 15px 15px">
<a href="{{ pathto('index') }}"><img src="{{
pathto("_static/logo.png", 1) }}" border="0" alt="py4sci"/></a>
</div>
{{ super() }}
{% endblock %}


================================================
FILE: docs/source/api/climate/climate_data.rst
================================================

climate.climate_data
====================

.. automodule:: pyunicorn.climate.climate_data
    :synopsis: complex climate networks
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/climate/climate_network.rst
================================================

climate.climate_network
=======================

.. automodule:: pyunicorn.climate.climate_network
    :synopsis: complex climate networks
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/climate/coupled_climate_network.rst
================================================

climate.coupled_climate_network
===============================

.. automodule:: pyunicorn.climate.coupled_climate_network
    :synopsis: complex coupled climate networks
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/climate/coupled_tsonis.rst
================================================

climate.coupled_tsonis
======================

.. automodule:: pyunicorn.climate.coupled_tsonis
    :synopsis: complex coupled climate networks
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/climate/eventseries_climatenetwork.rst
================================================

climate.eventseries_climatenetwork
==================================

.. automodule:: pyunicorn.climate.eventseries_climatenetwork
    :synopsis: event series climate networks
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/climate/havlin.rst
================================================

climate.havlin
==============

.. automodule:: pyunicorn.climate.havlin
    :synopsis: complex climate networks
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/climate/hilbert.rst
================================================

climate.hilbert
===============

.. automodule:: pyunicorn.climate.hilbert
    :synopsis: complex climate networks
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/climate/map_plots.rst
================================================

climate.map_plot
=================

.. automodule:: pyunicorn.climate.map_plot
    :synopsis: spatially embedded complex networks, multivariate data,
               time series surrogates
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/climate/mutual_info.rst
================================================

climate.mutual_info
===================

.. automodule:: pyunicorn.climate.mutual_info
    :synopsis: complex climate networks
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/climate/partial_correlation.rst
================================================

climate.partial_correlation
===========================

.. automodule:: pyunicorn.climate.partial_correlation
    :synopsis: complex climate networks
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/climate/rainfall.rst
================================================

climate.rainfall
================

.. automodule:: pyunicorn.climate.rainfall
    :synopsis: complex climate networks
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/climate/spearman.rst
================================================

climate.spearman
================

.. automodule:: pyunicorn.climate.spearman
    :synopsis: complex climate networks
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/climate/tsonis.rst
================================================

climate.tsonis
==============

.. automodule:: pyunicorn.climate.tsonis
    :synopsis: complex climate networks
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/core/data.rst
================================================

core.data
=========

.. automodule:: pyunicorn.core.data
    :synopsis: spatially embedded complex networks, multivariate data,
               time series surrogates
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/core/geo_grid.rst
================================================

core.geo_grid
=============

.. automodule:: pyunicorn.core.geo_grid
    :synopsis: spatially embedded complex networks, multivariate data,
               time series surrogates
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/core/geo_network.rst
================================================

core.geo_network
================

.. automodule:: pyunicorn.core.geo_network
    :synopsis: spatially embedded complex networks, multivariate data,
               time series surrogates
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/core/grid.rst
================================================

core.grid
=========

.. automodule:: pyunicorn.core.grid
    :synopsis: spatially embedded complex networks, multivariate data,
               time series surrogates
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/core/interacting_networks.rst
================================================

core.interacting_networks
=========================

.. automodule:: pyunicorn.core.interacting_networks
    :synopsis: spatially embedded complex networks, multivariate data,
               time series surrogates
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/core/netcdf_dictionary.rst
================================================

core.netcdf_dictionary
======================

.. automodule:: pyunicorn.core.netcdf_dictionary
    :synopsis: NetCDF <-> Python dictionary, NetCDF4 compression
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/core/network.rst
================================================

core.network
============

.. automodule:: pyunicorn.core.network
    :synopsis: advanced statistics and models for general complex networks
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/core/resistive_network.rst
================================================

core.resistive_network
======================

.. automodule:: pyunicorn.core.resistive_network
    :synopsis: resistance based networks
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/core/spatial_network.rst
================================================

core.spatial_network
====================

.. automodule:: pyunicorn.core.spatial_network
    :synopsis: spatially embedded complex networks, multivariate data,
               time series surrogates
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/eventseries/event_series.rst
================================================

eventseries.event_series
========================

.. automodule:: pyunicorn.eventseries.event_series
    :synopsis: event synchronization, event coincidence analysis
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/funcnet/coupling_analysis.rst
================================================

funcnet.coupling_analysis
=========================

.. automodule:: pyunicorn.funcnet.coupling_analysis
    :synopsis: spatially embedded complex networks, multivariate data, time
               series surrogates
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/funcnet/coupling_analysis_pure_python.rst
================================================

funcnet.coupling_analysis_pure_python
=====================================

.. automodule:: pyunicorn.funcnet.coupling_analysis_pure_python
    :synopsis: spatially embedded complex networks, multivariate data, time
               series surrogates
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/timeseries/cross_recurrence_plot.rst
================================================

timeseries.cross_recurrence_plot
================================

.. automodule:: pyunicorn.timeseries.cross_recurrence_plot
    :synopsis: recurrence plots, RQA measures, recurrence network analysis
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/timeseries/inter_system_recurrence_network.rst
================================================

timeseries.inter_system_recurrence_network
==========================================

.. automodule:: pyunicorn.timeseries.inter_system_recurrence_network
    :synopsis: recurrence plots, RQA measures, recurrence network analysis
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/timeseries/joint_recurrence_network.rst
================================================

timeseries.joint_recurrence_network
===================================

.. automodule:: pyunicorn.timeseries.joint_recurrence_network
    :synopsis: recurrence plots, RQA measures, recurrence network analysis
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/timeseries/joint_recurrence_plot.rst
================================================

timeseries.joint_recurrence_plot
================================

.. automodule:: pyunicorn.timeseries.joint_recurrence_plot
    :synopsis: recurrence plots, RQA measures, recurrence network analysis
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/timeseries/recurrence_network.rst
================================================

timeseries.recurrence_network
=============================

.. automodule:: pyunicorn.timeseries.recurrence_network
    :synopsis: recurrence plots, RQA measures, recurrence network analysis
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/timeseries/recurrence_plot.rst
================================================

timeseries.recurrence_plot
==========================

.. automodule:: pyunicorn.timeseries.recurrence_plot
    :synopsis: recurrence plots, RQA measures, recurrence network analysis
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/timeseries/surrogates.rst
================================================

timeseries.surrogates
=====================

.. automodule:: pyunicorn.timeseries.surrogates
    :synopsis: spatially embedded networks, multivariate data,
               time series surrogates
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/timeseries/visibility_graph.rst
================================================

timeseries.visibility_graph
===========================

.. automodule:: pyunicorn.timeseries.visibility_graph
    :synopsis: recurrence plots, RQA measures, recurrence network analysis
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/utils/mpi.rst
================================================

utils.mpi
=========

.. automodule:: pyunicorn.utils.mpi
    :synopsis: parallelization using mpi4py
    :members:
    :private-members:
    :special-members:
    :show-inheritance:


================================================
FILE: docs/source/api/utils/navigator.rst
================================================

utils.navigator
===============


================================================
FILE: docs/source/api_doc.rst
================================================

API
===

:Release: |release|
:Date: |today|

``pyunicorn`` consists of six subpackages, where the ``core`` and
``utils.mpi`` namespaces are to be accessed by calling ``import pyunicorn``. 
The subpackage ``eventseries`` only contains one function and will be extended
in one of the next versions. All subpackages except for ``utils`` directly export the 
classes defined in their submodules.

core
----
General network analysis and modeling.

.. toctree::
    :maxdepth: 1
    :glob:

    api/core/*

climate
-------
Constructing and analysing climate networks, related climate data analysis.

.. toctree::
    :maxdepth: 1
    :glob:

    api/climate/*

timeseries
----------
Recurrence plots, recurrence networks, multivariate extensions and visibility
graph analysis of time series. Time series surrogates for significance testing.

.. toctree::
    :maxdepth: 1
    :glob:

    api/timeseries/*

funcnet
-------
Constructing and analysing general functional networks.

.. toctree::
    :maxdepth: 1
    :glob:

    api/funcnet/*

eventseries
-----------
Analysis of event series.

.. toctree::
    :maxdepth: 1
    :glob:

    api/eventseries/*

utils
-----
Parallelization, interactive network navigator, helpers.

.. toctree::
    :maxdepth: 1
    :glob:

    api/utils/*


================================================
FILE: docs/source/changelog.rst
================================================

.. include:: ../../CHANGELOG.rst

================================================
FILE: docs/source/conf.py
================================================
# pyunicorn documentation build configuration file, created by
# sphinx-quickstart on Thu Feb 23 19:15:07 2017.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.

# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.

import re
import os
import sys

sys.path.insert(0, os.path.abspath('../..'))
from pyunicorn import __version__


# -- General configuration ------------------------------------------------

# If your documentation needs a minimal Sphinx version, state it here.
needs_sphinx = '1.3'

# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
    'sphinx.ext.autodoc',
    'sphinx.ext.doctest',
    'sphinx.ext.todo',
    'sphinx.ext.coverage',
    'sphinx.ext.mathjax',
    'sphinx.ext.ifconfig',
    'sphinx.ext.viewcode',
    'sphinx.ext.githubpages',
    'nbsphinx',
]

# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']

# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
source_suffix = ['.rst', '.md']

# The master toctree document.
master_doc = 'sitemap'

# General information about the project.
project = u'pyunicorn'
copyright = u'2008-2026, Jonathan F. Donges and pyunicorn authors'
author = u'Jonathan F. Donges'

# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = re.search(r'\d*\.\d*', __version__).group()
# The full version, including alpha/beta/rc tags.
release = __version__

# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = 'en'

# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This patterns also effect to html_static_path and html_extra_path
exclude_patterns = []

# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'

# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = False

# A list of ignored prefixes for module index sorting.
modindex_common_prefix = ['pyunicorn.']

# Suppress warnings for test suite.
suppress_warnings = ['image.nonlocal_uri']


# -- Options for HTML output ----------------------------------------------

# The theme to use for HTML and HTML Help pages.  See the documentation for
# a list of builtin themes.
#
html_theme = 'classic'

# Theme options are theme-specific and customize the look and feel of a theme
# further.  For a list of options available for each theme, see the
# documentation.
#
# html_theme_options = {}

# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']

# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
# html_logo = '_static/logo.png'

# Custom sidebar templates, maps document names to template names.
html_sidebars = {
    '**': [
        'globaltoc.html',
        'searchbox.html',
    ]
}


# -- Options for HTMLHelp output ------------------------------------------

# Output file base name for HTML help builder.
htmlhelp_basename = 'pyunicorndoc'


# -- Options for LaTeX output ---------------------------------------------

latex_elements = {
    # The paper size ('letterpaper' or 'a4paper').
    #
    'papersize': 'a4paper',

    # The font size ('10pt', '11pt' or '12pt').
    #
    'pointsize': '10pt',

    # Additional stuff for the LaTeX preamble.
    #
    # 'preamble': '',

    # Latex figure (float) alignment
    #
    # 'figure_align': 'htbp',
}

# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
#  author, documentclass [howto, manual, or own class]).
latex_documents = [
    (master_doc, 'pyunicorn.tex', u'pyunicorn Documentation',
    u'Jonathan F. Donges and pyunicorn authors', 'manual', False),
]

# The name of an image file (relative to this directory) to place at the top of
# the title page.
latex_logo = '_static/logo.png'

# If true, show URL addresses after external links.
latex_show_urls = 'inline'


# -- Options for manual page output ---------------------------------------

# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
    (master_doc, 'pyunicorn', u'pyunicorn Documentation',
     [author], 1)
]


# -- Options for Texinfo output -------------------------------------------

# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
#  dir menu entry, description, category)
texinfo_documents = [
    (master_doc, 'pyunicorn', u'pyunicorn Documentation',
     author, 'pyunicorn', 'One line description of project.',
     'Miscellaneous'),
]


================================================
FILE: docs/source/contact.rst
================================================

Contact
=======

.. include:: ../../README.rst
    :start-after: (3 clause).
    :end-before: Getting Started

.. include:: ../../CONTRIBUTIONS.rst
    :start-after: BSD (3-clause)


================================================
FILE: docs/source/development.rst
================================================

.. include:: ../../README.rst
    :start-after: Jupyter notebooks.

================================================
FILE: docs/source/download.rst
================================================

.. include:: ../../README.rst
    :start-after: others.
    :end-before: Development


================================================
FILE: docs/source/examples/modules/mpi/network_large.py
================================================
from pyunicorn import Network, mpi


def master():
    net = Network.Model("BarabasiAlbert", n_nodes=1000, n_links_each=10)
    print(net.newman_betweenness())
    mpi.info()

mpi.run()


================================================
FILE: docs/source/examples/modules/mpi/network_mc.py
================================================
from pyunicorn import Network, mpi


def do_one():
    net = Network.Model("BarabasiAlbert", n_nodes=100, n_links_each=10)
    return net.global_clustering()


def master():
    n = 1000
    for i in range(0, n):
        mpi.submit_call("do_one", ())
    s = 0
    for i in range(0, n):
        s += mpi.get_next_result()
    print(s/n)
    mpi.info()

mpi.run()


================================================
FILE: docs/source/examples/modules/mpi/network_scan_no_comm.py
================================================
import numpy
from pyunicorn import Network, mpi

offset = 10
n_max = 1000
s = 0
n = mpi.rank + offset
while n <= n_max + offset:
    s += Network.Model("BarabasiAlbert", n_nodes=n).global_clustering()
    n += mpi.size

numpy.save("s"+str(mpi.rank), s)


================================================
FILE: docs/source/examples/modules/timeseries/recurrence_network.py
================================================
import numpy as np
from pyunicorn.timeseries import RecurrenceNetwork

x = np.sin(np.linspace(0, 10 * np.pi, 1000))
net = RecurrenceNetwork(x, recurrence_rate=0.05)
print(net.transitivity())


================================================
FILE: docs/source/examples/tutorials/ClimateNetworks.ipynb
================================================
{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c79b8e2b",
   "metadata": {},
   "source": [
    "# Tutorial: Climate Networks"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "677ae7d7",
   "metadata": {},
   "source": [
    "The objective of this tutorial is to introduce climate networks, and to explain and illustrate their application with the `pyunicorn` package. First some theoretical background for understanding general climate networks will be given, and then some methods provided by `pyunicorn.climate.ClimateNetwork` will be illustrated. An introduction and application of coupled climate networks will follow. For a detailed discussion and further references, please consult __[Donges et al. (2015)](https://aip.scitation.org/doi/10.1063/1.4934554)__, on which this tutorial is based. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "76c98668",
   "metadata": {},
   "source": [
    "## Introduction"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a56c11e0",
   "metadata": {},
   "source": [
    "_Climate networks (CN)_ are a way to apply complex network theory to the climate system, by assuming that each node represents a varying dynamical system. Of interest is then the collective behaviour of these interacting dynamical systems and the structure of the resulting network. This approach was first introduced by __[Tsonis and Roebber (2004)](https://www.sciencedirect.com/science/article/abs/pii/S0378437103009646)__.\n",
    "\n",
    "CN analysis is a versatile approach for investigating climatological data, and it can be used as a complementary method to classical techniques from multivariate statistics. The approach allows for the analysis of single fields of climatological time series, e.g., surface air temperature observed on a grid, or even two or more fields. It has been successfully applied in many cases, for example to dynamics and predictability of the El Niño Phenomenon (__[Radebach et al., 2013](https://arxiv.org/abs/1310.5494)__)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "05e76cc7",
   "metadata": {},
   "source": [
    "## Theory of Climate Networks (CNs)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fcc79d2d",
   "metadata": {},
   "source": [
    "CNs are a typical application of _functional networks_, which allow to study the dynamical relationships between subsystems of a high-dimensional complex system by constructing networks from it. `pyunicorn` provides classes for the construction and analysis of such networks, representing the statistical interdependency structure within and between fields of time series using various similarity measures."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1860c9d0",
   "metadata": {},
   "source": [
    "### Coupling Analysis"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "30cd9555",
   "metadata": {},
   "source": [
    "CNs represent strong statistical interrelationships between time series of climatological fields. These statistical interrelationships can be estimated with methods from the `funcnet.CouplingAnalysis` class in terms of matrices of _statistical similarities_ $\\textbf{S}$, such as the _(lagged) classical linear Pearson product-moment correlation coefficient_ (CC). The CC of two zero-mean time series variables $X,Y$, as implemented in `funcnet.CouplingAnalysis.cross_correlation()`, is given by \n",
    "$$\\rho_{XY}(\\tau)=\\frac{\\langle X_{t-\\tau}, Y_t \\rangle}{\\sigma_X \\sigma_Y}\\,,$$\n",
    "which depends on the covariance $\\langle X_{t-\\tau}, Y_t \\rangle$ and the standard deviations $\\sigma_X, \\sigma_Y$. Lags $\\tau > 0$ correspond to the linear association of past values of $X$ with $Y$, and vice versa for $\\tau < 0$. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "70377c40",
   "metadata": {},
   "source": [
    "### Similarity Measures for CNs"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fadb2909",
   "metadata": {},
   "source": [
    "By thresholding the matrix of a statistical similarity measure $\\textbf{S}$, the interrelationships between time series of climate networks can be reconstructed:\n",
    "$$A_{pq} = \\Theta(S_{pq}-\\beta)\\quad \\text{ if } p \\neq q; \\qquad 0\\quad\\text{otherwise}\\,,$$\n",
    "where $\\Theta$ is the Heaviside function, $\\beta$ denotes a threshold parameter, and $A_{pp} = 0$ for all nodes $p$ to exclude self-loops. A CN that is reconstructed using the Pearson CC from above is called a _Pearson correlation CN_."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9c64c013",
   "metadata": {},
   "source": [
    "## Constructing CNs"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "ff7f5d81-129e-4966-a7fc-a0d25aea87f3",
   "metadata": {},
   "source": [
    "Having established some basic theoretic background, we will now use `pyunicorn` to construct a CN. We start by importing the required packages, by downloading an example __[NOAA dataset](https://psl.noaa.gov/repository/entry/show?entryid=synth%3Ae570c8f9-ec09-4e89-93b4-babd5651e7a9%3AL25jZXAucmVhbmFseXNpcy5kZXJpdmVkL3N1cmZhY2UvYWlyLm1vbi5tZWFuLm5j)__, and by specifying some metadata for it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "e793f1a2",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "from pyunicorn import climate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "2a8e9a1d-982d-4216-8483-4f372f40d918",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "./data/air.mon.mean 100%[===================>]  28.12M  2.25MB/s    in 88s     \n",
      "2025-12-12 15:53:44 URL:https://downloads.psl.noaa.gov/Datasets/ncep.reanalysis/Monthlies/surface/air.mon.mean.nc [29489350/29489350] -> \"./data/air.mon.mean.nc\" [1]\n"
     ]
    }
   ],
   "source": [
    "DATA_NAME = \"air.mon.mean.nc\"\n",
    "DATA_URL = f\"https://downloads.psl.noaa.gov/Datasets/ncep.reanalysis/Monthlies/surface/{DATA_NAME}\"\n",
    "DATA_FILE = f\"./data/{DATA_NAME}\"\n",
    "![ -f {DATA_FILE} ] || wget -O {DATA_FILE} -nv --show-progress \"{DATA_URL}\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "6f79efc6-63ca-4726-bb8f-003744170bcc",
   "metadata": {},
   "outputs": [],
   "source": [
    "DATA_FILENAME = \"./data/air.mon.mean.nc\"\n",
    "#  Indicate data source (optional)\n",
    "DATA_SOURCE = \"ncep_ncar_reanalysis\"\n",
    "#  Type of data file (\"NetCDF\" indicates a NetCDF file with data on a regular\n",
    "#  lat-lon grid, \"iNetCDF\" allows for arbitrary grids - > see documentation).\n",
    "FILE_TYPE = \"NetCDF\"\n",
    "#  Name of observable in NetCDF file (\"air\" indicates surface air temperature\n",
    "#  in NCEP/NCAR reanalysis data)\n",
    "OBSERVABLE_NAME = \"air\"\n",
    "#  Select a region in time and space from the data (here the whole dataset)\n",
    "WINDOW = {\"time_min\": 0., \"time_max\": 0., \"lat_min\": 0, \"lon_min\": 0,\n",
    "          \"lat_max\": 30, \"lon_max\": 0}\n",
    "#  Indicate the length of the annual cycle in the data (e.g., 12 for monthly\n",
    "#  data). This is used for calculating climatological anomaly values.\n",
    "TIME_CYCLE = 12"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "9f54ffe5-02a5-47e4-a459-870e1e8afef6",
   "metadata": {},
   "source": [
    "Now we set some parameters for the CN construction, the first being the threshold $\\beta$ from above, and create a `ClimateData` object containing our data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "baf245bd-2f3e-401d-bc1d-9943fee4bbf2",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Reading NetCDF File and converting data to NumPy array...\n",
      "Global attributes:\n",
      "description: Data from NCEP initialized reanalysis (4x/day).  These are the 0.9950 sigma level values\n",
      "platform: Model\n",
      "Conventions: COARDS\n",
      "NCO: 20121012\n",
      "history: Thu May  4 20:11:16 2000: ncrcat -d time,0,623 /Datasets/ncep.reanalysis.derived/surface/air.mon.mean.nc air.mon.mean.nc\n",
      "Thu May  4 18:11:50 2000: ncrcat -d time,0,622 /Datasets/ncep.reanalysis.derived/surface/air.mon.mean.nc ./surface/air.mon.mean.nc\n",
      "Mon Jul  5 23:47:18 1999: ncrcat ./air.mon.mean.nc /Datasets/ncep.reanalysis.derived/surface/air.mon.mean.nc /dm/dmwork/nmc.rean.ingest/combinedMMs/surface/air.mon.mean.nc\n",
      "/home/hoop/crdc/cpreanjuke2farm/cpreanjuke2farm Mon Oct 23 21:04:20 1995 from air.sfc.gauss.85.nc\n",
      "created 95/03/13 by Hoop (netCDF2.3)\n",
      "Converted to chunked, deflated non-packed NetCDF4 2014/09\n",
      "title: monthly mean air.sig995 from the NCEP Reanalysis\n",
      "dataset_title: NCEP-NCAR Reanalysis 1\n",
      "References: http://www.psl.noaa.gov/data/gridded/data.ncep.reanalysis.derived.html\n",
      "Variables (size):\n",
      "lat (73)\n",
      "lon (144)\n",
      "time (935)\n",
      "air (935)\n",
      "ClimateData:\n",
      "Data: 10512 grid points, 9828720 measurements.\n",
      "Geographical boundaries:\n",
      "         time     lat     lon\n",
      "   min 1297320.0  -90.00    0.00\n",
      "   max 1979616.0   90.00  357.50\n"
     ]
    }
   ],
   "source": [
    "#  For setting fixed threshold\n",
    "THRESHOLD = 0.5\n",
    "#  For setting fixed link density\n",
    "LINK_DENSITY = 0.005\n",
    "#  Indicates whether to use only data from winter months (DJF) for calculating\n",
    "#  correlations\n",
    "WINTER_ONLY = False\n",
    "\n",
    "data = climate.ClimateData.Load(\n",
    "    file_name=DATA_FILENAME, observable_name=OBSERVABLE_NAME,\n",
    "    data_source=DATA_SOURCE, file_type=FILE_TYPE,\n",
    "    window=WINDOW, time_cycle=TIME_CYCLE)\n",
    "print(data)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "2fade6f6-8457-436f-a52a-77464e92fd54",
   "metadata": {},
   "source": [
    "Next, we construct a CN based on the Pearson CC, without lag and with fixed threshold. Alternatively, several other similarity measures and construction mechanisms may be used as well."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "c5326b90",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Generating a Tsonis climate network...\n",
      "Calculating daily (monthly) anomaly values...\n",
      "Calculating correlation matrix at zero lag from anomaly values...\n",
      "Extracting network adjacency matrix by thresholding...\n",
      "Setting area weights according to type surface ...\n",
      "Setting area weights according to type surface ...\n"
     ]
    }
   ],
   "source": [
    "net = climate.TsonisClimateNetwork(\n",
    "    data, threshold=THRESHOLD, winter_only=WINTER_ONLY)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "2cdee7ef-7d2f-46d9-83ed-c9253e0100c0",
   "metadata": {},
   "outputs": [],
   "source": [
    "#  Create a climate network based on Pearson correlation without lag and with\n",
    "#  fixed link density\n",
    "# net = climate.TsonisClimateNetwork(\n",
    "#     data, link_density=LINK_DENSITY, winter_only=WINTER_ONLY)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "e6bf3b44-193b-48c0-b7be-f056bd35d72c",
   "metadata": {},
   "outputs": [],
   "source": [
    "#  Create a climate network based on Spearman's rank order correlation without\n",
    "#  lag and with fixed threshold\n",
    "# net = climate.SpearmanClimateNetwork(\n",
    "#     data, threshold=THRESHOLD, winter_only=WINTER_ONLY)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "5cdcfc8a-6448-4df3-b49f-f3e5d220f0f2",
   "metadata": {},
   "outputs": [],
   "source": [
    "#  Create a climate network based on mutual information without lag and with\n",
    "#  fixed threshold\n",
    "# net = climate.MutualInfoClimateNetwork(\n",
    "#     data, threshold=THRESHOLD, winter_only=WINTER_ONLY)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b443476e",
   "metadata": {},
   "source": [
    "We finish by calculating some basic network measures for the resulting CN, optionally saving them to text files."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "4f568b0f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Link density: 0.028533654023682083\n",
      "Calculating closeness...\n",
      "Calculating node betweenness...\n",
      "Calculating local clustering coefficients...\n",
      "Calculating average link distance...\n",
      "Calculating angular great circle distance...\n",
      "Calculating maximum link distance...\n"
     ]
    }
   ],
   "source": [
    "print(\"Link density:\", net.link_density)\n",
    "\n",
    "degree = net.degree()\n",
    "closeness = net.closeness()\n",
    "betweenness = net.betweenness()\n",
    "clustering = net.local_clustering()\n",
    "ald = net.average_link_distance()\n",
    "mld = net.max_link_distance()\n",
    "\n",
    "#  Save the grid (mainly vertex coordinates) to text files\n",
    "#data.grid.save_txt(filename=\"grid.txt\")\n",
    "#  Save the degree sequence. Other measures may be saved similarly.\n",
    "#np.savetxt(\"degree.txt\", degree)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "15af9941",
   "metadata": {},
   "source": [
    "## Plotting CNs"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "b26e5953-53c6-418a-b08b-509ad415081f",
   "metadata": {},
   "source": [
    "`pyunicorn` provides a basic plotting feature based on the __[cartopy](https://scitools.org.uk/cartopy/docs/latest/)__ and `matplotlib` packages, which can be used to have a first look at the generated data. We start by initializing a `MapPlot` object:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "b823297c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# create a Cartopy plot instance called map_plot\n",
    "# from the data with title DATA_SOURCE\n",
    "map_plot = climate.MapPlot(data.grid, DATA_SOURCE)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "422af668",
   "metadata": {},
   "source": [
    "With `MapPlot.plot()`, we can now plot some of our previously calculated measures on the given grid."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "056f3a92",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhQAAAEQCAYAAADoA+1uAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnXd4HMXZwH+zu1cknXTq1b1b7r1gioFgcIypoQVTQwmhJRBKQoAQQhJICCVASAJxKKEEPooJJXQDbrgX3Jus3svpdGV35vvjpLPPkmXJkhvs73n8WLs3Ozszt7fzzjtvEUophY2NjY2NjY1NF9AOdwNsbGxsbGxsjn5sgcLGxsbGxsamy9gChY2NjY2NjU2XsQUKGxsbGxsbmy5jCxQ2NjY2NjY2XcYWKGxsbGxsbGy6jC1Q2NjY2NjY2HQZW6CwsbGxsbGx6TK2QGFjY2NjY2PTZWyBwsbG5ojisssuo0+fPgel7s8++wwhBJ999tlBqd/G5ruMcbgbYGNjY3OoGDt2LAsXLiQ/P/9wN8XG5luHraGwsTlK8Pv9h+XabxNJSUlMnjyZpKSkw90UG5tvHbZAYXNQuffeexFCsG7dOi688EK8Xi9ZWVlcccUV1NXVRctJKXn88ccZPXo0cXFxJCcnM3nyZN5+++2Y+l555RWmTJlCQkICHo+HGTNmsGLFipgyl112GR6Ph3Xr1nHSSSeRkJBARkYG119/facn1pa6tmzZwsyZM/F4PPTs2ZNbbrmFYDAYUzYYDHLfffcxdOhQ3G43aWlpTJ8+nQULFkTLPPHEExx33HFkZmaSkJDAiBEjePDBBwmHwzF1nXDCCQwfPpz58+czdepU4uPjueKKKzrU5pYxX758Oeeeey4pKSn0798fAKUUTz75ZHScU1JSOPfcc9m2bVtMHR9++CFnnHEGPXr0wO12M2DAAK655hoqKyvbvNf+vt/O9H1vTjrpJIYMGcLeeQyVUgwYMIDvf//70XNPPfUUo0aNwuPxkJiYyJAhQ/jFL34R/bytLY9t27ZxwQUXkJubi8vlIisri5NOOomVK1fud6xtbGx2Y2952BwSzjnnHM4//3yuvPJK1qxZw5133gnAs88+C0Qm7hdeeIErr7yS++67D6fTyfLly9mxY0e0jgceeIC77rqLyy+/nLvuuotQKMRDDz3Esccey5IlS2LU2OFwmJkzZ3LNNddwxx13sGDBAu6//3527tzJvHnzOtX2cDjM7NmzufLKK7nllluYP38+v/nNb/B6vdx9990AmKbJaaedxhdffMHNN9/MiSeeiGmaLFq0iIKCAqZOnQrA1q1bueiii+jbty9Op5NVq1bx29/+lg0bNkTHooWSkhIuvvhibrvtNh544AE0rXPy/9lnn80FF1zAtddeS2NjIwDXXHMNc+fO5cYbb+QPf/gD1dXV3HfffUydOpVVq1aRlZUVbeeUKVP40Y9+hNfrZceOHTz88MNMmzaNNWvW4HA4Yu61v++3s33fk5tuuokzzjiDjz/+mJNPPjl6/r333mPr1q089thjALz88stcd9113HDDDfzxj39E0zS2bNnCN9980+44zZw5E8uyePDBB+nVqxeVlZUsWLCA2trajg+2jY0NKBubg8g999yjAPXggw/GnL/uuuuU2+1WUko1f/58Bahf/vKX+6ynoKBAGYahbrjhhpjzDQ0NKjs7W5133nnRc5deeqkC1KOPPhpT9re//a0C1Jdfftnh9rfU9eqrr8acnzlzpho8eHD0+LnnnlOA+vvf/97hui3LUuFwWD333HNK13VVXV0d/ez4449XgPr44487XF8LLWN+9913x5xfuHChAtSf/vSnmPO7du1ScXFx6rbbbmuzPimlCofDaufOnQpQb731Vqt7tff9tkV7fb/00ktV7969Y8r269dPnXHGGTF1nHbaaap///7Re1x//fUqOTm57UFp5tNPP1WA+vTTT5VSSlVWVipAPfLII+1eZ2Njs3/sLQ+bQ8Ls2bNjjkeOHEkgEKC8vJz33nsPgJ/85Cf7vP6DDz7ANE0uueQSTNOM/nO73Rx//PFtWu3/8Ic/jDm+6KKLAPj000871XYhBKeffnqr9u/cuTN6/N577+F2u/e7LbFixQpmz55NWloauq7jcDi45JJLsCyLTZs2xZRNSUnhxBNP7FRb9+Scc86JOX7nnXcQQnDxxRfHjGF2djajRo2KGcPy8nKuvfZaevbsiWEYOBwOevfuDcD69etb3au97/dA+r4nmqZx/fXX884771BQUABEtB3vv/8+1113HUIIACZOnEhtbS0XXnghb731VqvtmbZITU2lf//+PPTQQzz88MOsWLECKeV+r7OxsWmNLVDYHBLS0tJijl0uFwBNTU1UVFSg6zrZ2dn7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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot degree\n",
    "map_plot.plot(degree, \"Degree\")\n",
    "\n",
    "# add matplotlib.pyplot or cartopy commands to customize figure\n",
    "plt.set_cmap('plasma')\n",
    "# optionally save figure\n",
    "#plt.savefig('degree.png')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b8feb1e0",
   "metadata": {},
   "source": [
    "Try plotting more measures if you like."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "8b67424d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfoAAAEQCAYAAABYyratAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsnWWYHUXWgN/rOu7uGZ8kE3dPSAjBITiBxZ3FYRdYZBf9cDa7+GLBQ4AAcXfPzETG3fW69ffjZm7GLROD+/LkYbpvd3VVdXWdqlPnnBIJgiDgxo0bN27cuPlDIj7dGXDjxo0bN27cnDzcgt6NGzdu3Lj5A+MW9G7cuHHjxs0fGLegd+PGjRs3bv7AuAW9Gzdu3Lhx8wfGLejduHHjxo2bPzBuQe/GjRs3btz8gXELejdu3Lhx4+YPjFvQu3Hjxo0bN39g3ILejRs3ZxTXX3890dHRJyXttWvXIhKJWLt27UlJ342bMxHp6c6AGzdu3JwqMjMz2bJlCykpKac7K27cnDLcM3o3bs4SDAbDabn3j4Snpydjx47F09PzdGfFjZtThlvQuzmpPPXUU4hEIrKysrjiiivw8vIiKCiIG264gaamJtd1DoeDN998k2HDhqFSqfD29mbs2LH8+OOP7dJbsmQJ48aNQ6PRoNVqmTNnDnv27Gl3zfXXX49WqyUrK4sZM2ag0WgICAjgzjvv7LfAa00rNzeXefPmodVqiYiI4K9//Stms7ndtWazmX/84x8kJyejVCrx8/Nj2rRpbN682XXN22+/zeTJkwkMDESj0ZCens6LL76I1Wptl9bUqVNJS0tj/fr1jB8/HrVazQ033NCnPLfW+e7du7nkkkvw8fEhLi4OAEEQeOedd1z17OPjwyWXXEJ+fn67NFasWMH5559PeHg4SqWS+Ph4brnlFmpra7t8Vm/vtz9l78iMGTNISkqi4/5bgiAQHx/Pueee6zr37rvvMnToULRaLR4eHiQlJfHYY4+5fu9KdZ+fn8/ChQsJDQ1FoVAQFBTEjBkz2Lt3b6917cbN2YBbde/mlHDxxRdz+eWXc+ONN3LgwAEeffRRAD744APAKVA//fRTbrzxRv7xj38gl8vZvXs3hYWFrjSef/55nnjiCRYtWsQTTzyBxWLhpZdeYtKkSWzfvr2dOtZqtTJv3jxuueUWHnnkETZv3syzzz5LUVERy5Yt61ferVYrCxYs4MYbb+Svf/0r69ev55lnnsHLy4u///3vANhsNubOncuGDRu49957mT59Ojabja1bt1JcXMz48eMByMvL48orryQmJga5XM6+fft47rnnOHTokKsuWqmoqODqq6/moYce4vnnn0cs7t+4/KKLLmLhwoXceuut6PV6AG655RY++ugj7r77bl544QXq6+v5xz/+wfjx49m3bx9BQUGufI4bN46//OUveHl5UVhYyKuvvsrEiRM5cOAAMpms3bN6e7/9LXtb7rnnHs4//3xWrVrFzJkzXeeXL19OXl4eb7zxBgBffvklt99+O3fddRcvv/wyYrGY3NxcsrOze6ynefPmYbfbefHFF4mMjKS2tpbNmzfT2NjY98p24+ZMRnDj5iTy5JNPCoDw4osvtjt/++23C0qlUnA4HML69esFQHj88ce7Tae4uFiQSqXCXXfd1e58S0uLEBwcLFx22WWuc9ddd50ACK+//nq7a5977jkBEDZu3Njn/Lem9dVXX7U7P2/ePCExMdF1/MknnwiA8N///rfPadvtdsFqtQqffPKJIJFIhPr6etdvU6ZMEQBh1apVfU6vldY6//vf/97u/JYtWwRAeOWVV9qdLykpEVQqlfDQQw91mZ7D4RCsVqtQVFQkAMLSpUs7Paun99sVPZX9uuuuE6KiotpdGxsbK5x//vnt0pg7d64QFxfnesadd94peHt7d10px1izZo0ACGvWrBEEQRBqa2sFQHjttdd6vM+Nm7MZt+rezSlhwYIF7Y4zMjIwmUxUV1ezfPlyAO64445u7//tt9+w2Wxce+212Gw21z+lUsmUKVO6tKK+6qqr2h1feeWVAKxZs6ZfeReJRJx33nmd8l9UVOQ6Xr58OUqlslf1+p49e1iwYAF+fn5IJBJkMhnXXnstdrudI0eOtLvWx8eH6dOn9yuvbbn44ovbHf/000+IRCKuvvrqdnUYHBzM0KFD29VhdXU1t956KxEREUilUmQyGVFRUQDk5OR0elZP73cgZW+LWCzmzjvv5KeffqK4uBhwagd+/fVXbr/9dkQiEQCjR4+msbGRK664gqVLl3ZaZugKX19f4uLieOmll3j11VfZs2cPDoej1/vcuDmbcAt6N6cEPz+/dscKhQIAo9FITU0NEomE4ODgbu+vqqoCYNSoUchksnb/lixZ0qlTl0qlnZ7Zmn5dXV2/8q5Wq1EqlZ3ybzKZXMc1NTWEhob2qF4vLi5m0qRJlJWV8frrr7NhwwZ27NjB22+/DTjroi0hISH9ymdHOt5fVVWFIAgEBQV1qsOtW7e66tDhcDB79my+++47HnroIVatWsX27dvZunVrl/mEnt/vQMrekRtuuAGVSsW///1vwLner1Kp2g2srrnmGj744AOKioq4+OKLCQwMZMyYMaxYsaLbdEUiEatWrWLOnDm8+OKLZGZmEhAQwN13301LS0uPeXLj5mzBvUbv5rQTEBCA3W6nsrKyW+Hm7+8PwDfffOOaWfaEzWajrq6unQCqrKwEOgulwSAgIICNGzficDi6FfY//PADer2e7777rl0ZujP6ap2pDpSO9/v7+yMSidiwYYNLELel9dzBgwfZt28fH330Edddd53r99zc3AHnpb9l74iXlxfXXXcd7733Hg888AAffvghV155Jd7e3u2uW7RoEYsWLUKv17N+/XqefPJJ5s+fz5EjR7ptN1FRUbz//vsAHDlyhK+++oqnnnoKi8XiGli4cXM2457RuzntzJ07F3BaTHfHnDlzkEql5OXlMXLkyC7/deSzzz5rd/z5558DTov2wWbu3LmYTCY++uijbq9pFbxthawgCPz3v/8d9Px0xfz58xEEgbKysi7rLz09vdt8AixevHjAzx6Mst99993U1tZyySWX0NjYyJ133tnttRqNhrlz5/L4449jsVjIysrq0zOGDBnCE088QXp6Ort37+5z3ty4OZNxz+jdnHYmTZrENddcw7PPPktVVRXz589HoVCwZ88e1Go1d911F9HR0fzjH//g8ccfJz8/n3POOQcfHx+qqqrYvn07Go2Gp59+2pWmXC7nlVdeQafTMWrUKJfV/dy5c5k4ceKgl+GKK67gww8/5NZbb+Xw4cNMmzYNh8PBtm3bSE5OZuHChcyaNQu5XM4VV1zBQw89hMlk4t1336WhoWHQ89MVEyZM4Oabb2bRokXs3LmTyZMno9FoqKioYOPGjaSnp3PbbbeRlJREXFwcjzzyCIIg4Ovry7Jly3pUgffGYJR9yJAhnHPOOSxfvpyJEycydOjQdr/fdNNNqFQqJkyYQEhICJWVlfzzn//Ey8uLUaNGdZnm/v37ufPOO7n00ktJSEhALpezevVq9u/fzyOPPDLg8rpxcybhFvRuzgg+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
Download .txt
gitextract_td07sgq3/

├── .gitattributes
├── .gitignore
├── .travis.yml
├── CHANGELOG.rst
├── CITATION.cff
├── CONTRIBUTIONS.rst
├── LICENSE.txt
├── MANIFEST.in
├── README.rst
├── devenv.nix
├── devenv.yaml
├── docs/
│   ├── Makefile
│   └── source/
│       ├── _static/
│       │   ├── default.css
│       │   └── logo.psd
│       ├── _templates/
│       │   └── layout.html
│       ├── api/
│       │   ├── climate/
│       │   │   ├── climate_data.rst
│       │   │   ├── climate_network.rst
│       │   │   ├── coupled_climate_network.rst
│       │   │   ├── coupled_tsonis.rst
│       │   │   ├── eventseries_climatenetwork.rst
│       │   │   ├── havlin.rst
│       │   │   ├── hilbert.rst
│       │   │   ├── map_plots.rst
│       │   │   ├── mutual_info.rst
│       │   │   ├── partial_correlation.rst
│       │   │   ├── rainfall.rst
│       │   │   ├── spearman.rst
│       │   │   └── tsonis.rst
│       │   ├── core/
│       │   │   ├── data.rst
│       │   │   ├── geo_grid.rst
│       │   │   ├── geo_network.rst
│       │   │   ├── grid.rst
│       │   │   ├── interacting_networks.rst
│       │   │   ├── netcdf_dictionary.rst
│       │   │   ├── network.rst
│       │   │   ├── resistive_network.rst
│       │   │   └── spatial_network.rst
│       │   ├── eventseries/
│       │   │   └── event_series.rst
│       │   ├── funcnet/
│       │   │   ├── coupling_analysis.rst
│       │   │   └── coupling_analysis_pure_python.rst
│       │   ├── timeseries/
│       │   │   ├── cross_recurrence_plot.rst
│       │   │   ├── inter_system_recurrence_network.rst
│       │   │   ├── joint_recurrence_network.rst
│       │   │   ├── joint_recurrence_plot.rst
│       │   │   ├── recurrence_network.rst
│       │   │   ├── recurrence_plot.rst
│       │   │   ├── surrogates.rst
│       │   │   └── visibility_graph.rst
│       │   └── utils/
│       │       ├── mpi.rst
│       │       └── navigator.rst
│       ├── api_doc.rst
│       ├── changelog.rst
│       ├── conf.py
│       ├── contact.rst
│       ├── development.rst
│       ├── download.rst
│       ├── examples/
│       │   ├── modules/
│       │   │   ├── mpi/
│       │   │   │   ├── network_large.py
│       │   │   │   ├── network_mc.py
│       │   │   │   └── network_scan_no_comm.py
│       │   │   └── timeseries/
│       │   │       └── recurrence_network.py
│       │   └── tutorials/
│       │       ├── ClimateNetworks.ipynb
│       │       ├── CoupledClimateNetworks.ipynb
│       │       ├── EventSeriesAnalysis.ipynb
│       │       ├── RecurrenceNetworks.ipynb
│       │       └── VisibilityGraphs.ipynb
│       ├── index.rst
│       ├── license.rst
│       ├── methods.rst
│       ├── publications.rst
│       ├── sitemap.rst
│       └── tutorials.rst
├── pyproject.toml
├── setup.py
├── src/
│   └── pyunicorn/
│       ├── __init__.py
│       ├── climate/
│       │   ├── __init__.py
│       │   ├── _ext/
│       │   │   ├── __init__.py
│       │   │   └── numerics.pyx
│       │   ├── climate_data.py
│       │   ├── climate_network.py
│       │   ├── coupled_climate_network.py
│       │   ├── coupled_tsonis.py
│       │   ├── eventseries_climatenetwork.py
│       │   ├── havlin.py
│       │   ├── hilbert.py
│       │   ├── map_plot.py
│       │   ├── mutual_info.py
│       │   ├── partial_correlation.py
│       │   ├── rainfall.py
│       │   ├── spearman.py
│       │   └── tsonis.py
│       ├── core/
│       │   ├── __init__.py
│       │   ├── _ext/
│       │   │   ├── __init__.py
│       │   │   ├── numerics.pyx
│       │   │   ├── types.pxd
│       │   │   └── types.py
│       │   ├── cache.py
│       │   ├── data.py
│       │   ├── geo_grid.py
│       │   ├── geo_network.py
│       │   ├── grid.py
│       │   ├── interacting_networks.py
│       │   ├── netcdf_dictionary.py
│       │   ├── network.py
│       │   ├── resistive_network.py
│       │   └── spatial_network.py
│       ├── eventseries/
│       │   ├── __init__.py
│       │   └── event_series.py
│       ├── funcnet/
│       │   ├── __init__.py
│       │   ├── _ext/
│       │   │   ├── __init__.py
│       │   │   └── numerics.pyx
│       │   ├── coupling_analysis.py
│       │   └── coupling_analysis_pure_python.py
│       ├── timeseries/
│       │   ├── __init__.py
│       │   ├── _ext/
│       │   │   ├── __init__.py
│       │   │   └── numerics.pyx
│       │   ├── cross_recurrence_plot.py
│       │   ├── inter_system_recurrence_network.py
│       │   ├── joint_recurrence_network.py
│       │   ├── joint_recurrence_plot.py
│       │   ├── recurrence_network.py
│       │   ├── recurrence_plot.py
│       │   ├── surrogates.py
│       │   └── visibility_graph.py
│       ├── utils/
│       │   ├── __init__.py
│       │   └── mpi.py
│       └── version.py
├── tests/
│   ├── conftest.py
│   ├── test_climate/
│   │   ├── __init__.py
│   │   ├── test_climate_data.py
│   │   ├── test_climate_network.py
│   │   ├── test_coupled_climate_network.py
│   │   ├── test_eventseries_climatenetwork.py
│   │   ├── test_map_plot.py
│   │   └── test_tsonis.py
│   ├── test_core/
│   │   ├── ResistiveNetwork_utils.py
│   │   ├── TestResistiveNetwork-circuits.py
│   │   ├── TestResistiveNetwork-complexInput.py
│   │   ├── TestResistiveNetwork-cython.py
│   │   ├── TestResistiveNetwork-types.py
│   │   ├── __init__.py
│   │   ├── test_cache.py
│   │   ├── test_data.py
│   │   ├── test_geo_grid.py
│   │   ├── test_geo_network.py
│   │   ├── test_grid.py
│   │   ├── test_interacting_networks.py
│   │   ├── test_network.py
│   │   ├── test_resistive_networks.py
│   │   └── test_spatial_network.py
│   ├── test_eventseries/
│   │   └── test_event_series.py
│   ├── test_funcnet/
│   │   ├── test_coupling_analysis.py
│   │   └── test_coupling_analysis_pure_python.py
│   ├── test_generic.py
│   └── test_timeseries/
│       ├── test_joint_recurrence_plot.py
│       ├── test_recurrence_plot.py
│       └── test_timeseries.py
└── tools/
    └── update-copyright
Download .txt
SYMBOL INDEX (1082 symbols across 66 files)

FILE: docs/source/examples/modules/mpi/network_large.py
  function master (line 4) | def master():

FILE: docs/source/examples/modules/mpi/network_mc.py
  function do_one (line 4) | def do_one():
  function master (line 9) | def master():

FILE: src/pyunicorn/climate/climate_data.py
  class ClimateData (line 29) | class ClimateData(Data, Cached):
    method __init__ (line 46) | def __init__(self, observable, grid, time_cycle, anomalies=False,
    method __cache_state__ (line 91) | def __cache_state__(self) -> Tuple[Hashable, ...]:
    method __str__ (line 96) | def __str__(self):
    method Load (line 108) | def Load(cls, file_name, observable_name, file_type="NetCDF",
    method SmallTestData (line 169) | def SmallTestData():
    method phase_indices (line 199) | def phase_indices(self):
    method indices_selected_phases (line 233) | def indices_selected_phases(self, selected_phases):
    method indices_selected_months (line 261) | def indices_selected_months(self, selected_months):
    method phase_mean (line 289) | def phase_mean(self):
    method anomaly (line 324) | def anomaly(self):
    method anomaly_selected_months (line 358) | def anomaly_selected_months(self, selected_months):
    method shuffled_anomaly (line 375) | def shuffled_anomaly(self):
    method set_window (line 408) | def set_window(self, window):
    method set_global_window (line 446) | def set_global_window(self):

FILE: src/pyunicorn/climate/climate_network.py
  class ClimateNetwork (line 29) | class ClimateNetwork(GeoNetwork):
    method __init__ (line 45) | def __init__(self, grid: GeoGrid, similarity_measure: np.ndarray,
    method __cache_state__ (line 107) | def __cache_state__(self) -> Tuple[Hashable, ...]:
    method __str__ (line 110) | def __str__(self):
    method _regenerate_network (line 131) | def _regenerate_network(self):
    method save (line 150) | def save(self, filename, fileformat=None, *args, **kwds):
    method Load (line 209) | def Load(filename, fileformat=None, silence_level=0, *args, **kwds):
    method SmallTestNetwork (line 288) | def SmallTestNetwork():
    method link_density_function (line 323) | def link_density_function(self, n_bins):
    method threshold_from_link_density (line 361) | def threshold_from_link_density(self, link_density):
    method _calculate_threshold_adjacency (line 396) | def _calculate_threshold_adjacency(self, similarity_measure, threshold):
    method _calculate_non_local_adjacency (line 437) | def _calculate_non_local_adjacency(self, similarity_measure, threshold,
    method similarity_measure (line 492) | def similarity_measure(self):
    method non_local (line 510) | def non_local(self):
    method set_non_local (line 524) | def set_non_local(self, non_local):
    method threshold (line 545) | def threshold(self):
    method set_threshold (line 559) | def set_threshold(self, threshold):
    method set_link_density (line 592) | def set_link_density(self, link_density):
    method correlation_distance (line 616) | def correlation_distance(self):
    method inv_correlation_distance (line 648) | def inv_correlation_distance(self):
    method correlation_distance_weighted_closeness (line 663) | def correlation_distance_weighted_closeness(self):
    method local_correlation_distance_weighted_vulnerability (line 686) | def local_correlation_distance_weighted_vulnerability(self):
    method _weighted_metric (line 709) | def _weighted_metric(self, attr: str, calc: Callable, metric: str):

FILE: src/pyunicorn/climate/coupled_climate_network.py
  class CoupledClimateNetwork (line 25) | class CoupledClimateNetwork(InteractingNetworks, ClimateNetwork):
    method __init__ (line 47) | def __init__(self, grid_1, grid_2, similarity_measure, threshold=None,
    method __str__ (line 130) | def __str__(self):
    method network_1 (line 141) | def network_1(self):
    method network_2 (line 157) | def network_2(self):
    method similarity_measure_1 (line 173) | def similarity_measure_1(self):
    method similarity_measure_2 (line 182) | def similarity_measure_2(self):
    method cross_similarity_measure (line 191) | def cross_similarity_measure(self):
    method adjacency_1 (line 204) | def adjacency_1(self):
    method adjacency_2 (line 213) | def adjacency_2(self):
    method cross_layer_adjacency (line 222) | def cross_layer_adjacency(self):
    method path_lengths_1 (line 242) | def path_lengths_1(self, link_attribute=None):
    method path_lengths_2 (line 262) | def path_lengths_2(self, link_attribute=None):
    method cross_path_lengths (line 282) | def cross_path_lengths(self, link_attribute=None):
    method cross_link_distance (line 299) | def cross_link_distance(self):
    method number_cross_layer_links (line 314) | def number_cross_layer_links(self):
    method number_internal_links (line 323) | def number_internal_links(self):
    method cross_link_density (line 337) | def cross_link_density(self):
    method internal_link_density (line 346) | def internal_link_density(self):
    method internal_global_clustering (line 360) | def internal_global_clustering(self):
    method cross_global_clustering (line 386) | def cross_global_clustering(self):
    method cross_transitivity (line 405) | def cross_transitivity(self):
    method cross_average_link_distance (line 425) | def cross_average_link_distance(self, reverse=False):
    method cross_average_path_length (line 449) | def cross_average_path_length(self, link_attribute=None):
    method internal_average_path_length (line 464) | def internal_average_path_length(self, link_attribute=None):
    method cross_degree (line 495) | def cross_degree(self):
    method internal_degree (line 511) | def internal_degree(self):
    method cross_local_clustering (line 527) | def cross_local_clustering(self):
    method cross_closeness (line 545) | def cross_closeness(self, link_attribute=None):
    method internal_closeness (line 565) | def internal_closeness(self, link_attribute=None):
    method cross_betweenness (line 589) | def cross_betweenness(self):
    method internal_betweenness_1 (line 605) | def internal_betweenness_1(self):
    method internal_betweenness_2 (line 622) | def internal_betweenness_2(self):

FILE: src/pyunicorn/climate/coupled_tsonis.py
  class CoupledTsonisClimateNetwork (line 25) | class CoupledTsonisClimateNetwork(CoupledClimateNetwork):
    method __init__ (line 52) | def __init__(self, data_1, data_2, threshold=None, link_density=None,
    method __str__ (line 115) | def __str__(self):
    method _calculate_correlation (line 126) | def _calculate_correlation(self, anomaly_1, anomaly_2):
    method calculate_similarity_measure (line 153) | def calculate_similarity_measure(self, anomaly_1, anomaly_2):
    method correlation (line 170) | def correlation(self):

FILE: src/pyunicorn/climate/eventseries_climatenetwork.py
  class EventSeriesClimateNetwork (line 33) | class EventSeriesClimateNetwork(EventSeries, ClimateNetwork):
    method __init__ (line 44) | def __init__(self, data, method='ES', p_value=None, **kwargs):
    method __str__ (line 198) | def __str__(self):
    method SmallTestData (line 233) | def SmallTestData():

FILE: src/pyunicorn/climate/havlin.py
  class HavlinClimateNetwork (line 29) | class HavlinClimateNetwork(ClimateNetwork):
    method __init__ (line 54) | def __init__(self, data, max_delay, threshold=None, link_density=None,
    method __cache_state__ (line 103) | def __cache_state__(self) -> Tuple[Hashable, ...]:
    method __str__ (line 106) | def __str__(self):
    method clear_cache (line 115) | def clear_cache(self):
    method _calculate_correlation_strength (line 129) | def _calculate_correlation_strength(self, anomaly, max_delay, gamma=0.2):
    method get_max_delay (line 185) | def get_max_delay(self):
    method _set_max_delay (line 193) | def _set_max_delay(self, max_delay):
    method set_max_delay (line 206) | def set_max_delay(self, max_delay):
    method correlation_strength (line 217) | def correlation_strength(self):
    method correlation_lag (line 226) | def correlation_lag(self):
    method correlation_strength_weighted_average_path_length (line 239) | def correlation_strength_weighted_average_path_length(self):
    method correlation_strength_weighted_closeness (line 250) | def correlation_strength_weighted_closeness(self):
    method correlation_lag_weighted_average_path_length (line 262) | def correlation_lag_weighted_average_path_length(self):
    method correlation_lag_weighted_closeness (line 273) | def correlation_lag_weighted_closeness(self):
    method local_correlation_strength_weighted_vulnerability (line 285) | def local_correlation_strength_weighted_vulnerability(self):
    method local_correlation_lag_weighted_vulnerability (line 297) | def local_correlation_lag_weighted_vulnerability(self):

FILE: src/pyunicorn/climate/hilbert.py
  class HilbertClimateNetwork (line 38) | class HilbertClimateNetwork(ClimateNetwork):
    method __init__ (line 59) | def __init__(self, data, threshold=None, link_density=None,
    method __cache_state__ (line 110) | def __cache_state__(self) -> Tuple[Hashable, ...]:
    method __str__ (line 113) | def __str__(self):
    method clear_cache (line 119) | def clear_cache(self):
    method _set_directed (line 132) | def _set_directed(self, directed, calculate_coherence=True):
    method set_directed (line 152) | def set_directed(self, directed):
    method _calculate_hilbert_correlation (line 165) | def _calculate_hilbert_correlation(self, anomaly):
    method coherence (line 210) | def coherence(self):
    method phase_shift (line 219) | def phase_shift(self):

FILE: src/pyunicorn/climate/map_plot.py
  class MapPlot (line 38) | class MapPlot:
    method __init__ (line 43) | def __init__(self, grid: Grid, title: str):
    method plot (line 77) | def plot(self, data: np.ndarray, label: str):

FILE: src/pyunicorn/climate/mutual_info.py
  class MutualInfoClimateNetwork (line 30) | class MutualInfoClimateNetwork(ClimateNetwork):
    method __init__ (line 48) | def __init__(self, data, threshold=None, link_density=None,
    method __cache_state__ (line 105) | def __cache_state__(self) -> Tuple[Hashable, ...]:
    method __str__ (line 108) | def __str__(self):
    method _cython_calculate_mutual_information (line 114) | def _cython_calculate_mutual_information(self, anomaly, n_bins=32):
    method calculate_similarity_measure (line 158) | def calculate_similarity_measure(self, anomaly):
    method mutual_information (line 173) | def mutual_information(self, anomaly=None, dump=True):
    method winter_only (line 218) | def winter_only(self):
    method _set_winter_only (line 227) | def _set_winter_only(self, winter_only, dump=False):
    method set_winter_only (line 243) | def set_winter_only(self, winter_only, dump=True):
    method mutual_information_weighted_average_path_length (line 260) | def mutual_information_weighted_average_path_length(self):
    method mutual_information_weighted_closeness (line 271) | def mutual_information_weighted_closeness(self):
    method local_mutual_information_weighted_vulnerability (line 283) | def local_mutual_information_weighted_vulnerability(self):

FILE: src/pyunicorn/climate/partial_correlation.py
  class PartialCorrelationClimateNetwork (line 33) | class PartialCorrelationClimateNetwork(TsonisClimateNetwork):
    method __init__ (line 47) | def __init__(self, data, threshold=None, link_density=None,
    method __str__ (line 87) | def __str__(self):
    method _calculate_correlation (line 98) | def _calculate_correlation(self, anomaly):

FILE: src/pyunicorn/climate/rainfall.py
  class RainfallClimateNetwork (line 36) | class RainfallClimateNetwork(ClimateNetwork):
    method __init__ (line 60) | def __init__(self, data, threshold=None, link_density=None,
    method __str__ (line 119) | def __str__(self):
    method _calculate_correlation (line 129) | def _calculate_correlation(self, event_threshold, scale_fac, offset):
    method calculate_rainfall (line 177) | def calculate_rainfall(observable, scale_fac, offset):
    method calculate_top_events (line 200) | def calculate_top_events(rainfall, event_threshold):
    method rank_time_series (line 244) | def rank_time_series(anomaly):
    method spearman_corr (line 257) | def spearman_corr(self, final_mask, anomaly):

FILE: src/pyunicorn/climate/spearman.py
  class SpearmanClimateNetwork (line 34) | class SpearmanClimateNetwork(TsonisClimateNetwork):
    method __init__ (line 53) | def __init__(self, data, threshold=None, link_density=None,
    method __str__ (line 94) | def __str__(self):
    method rank_time_series (line 106) | def rank_time_series(anomaly):
    method _calculate_correlation (line 123) | def _calculate_correlation(self, anomaly):

FILE: src/pyunicorn/climate/tsonis.py
  class TsonisClimateNetwork (line 27) | class TsonisClimateNetwork(ClimateNetwork):
    method __init__ (line 46) | def __init__(self, data, threshold=None, link_density=None,
    method __str__ (line 94) | def __str__(self):
    method SmallTestNetwork (line 122) | def SmallTestNetwork():
    method _calculate_correlation (line 142) | def _calculate_correlation(self, anomaly):
    method calculate_similarity_measure (line 162) | def calculate_similarity_measure(self, anomaly):
    method correlation (line 193) | def correlation(self):
    method winter_only (line 220) | def winter_only(self):
    method _set_winter_only (line 234) | def _set_winter_only(self, winter_only):
    method set_winter_only (line 249) | def set_winter_only(self, winter_only):
    method correlation_weighted_average_path_length (line 272) | def correlation_weighted_average_path_length(self):
    method correlation_weighted_closeness (line 287) | def correlation_weighted_closeness(self):
    method local_correlation_weighted_vulnerability (line 303) | def local_correlation_weighted_vulnerability(self):

FILE: src/pyunicorn/core/_ext/types.py
  function to_cy (line 37) | def to_cy(arr, ty):

FILE: src/pyunicorn/core/cache.py
  class CacheRef (line 29) | class CacheRef:
    method __init__ (line 88) | def __init__(self, obj, attr: str):
    method cache (line 94) | def cache(self) -> _lru_cache_wrapper:
    method __del__ (line 97) | def __del__(self):
  class Cached (line 103) | class Cached(ABC):
    method __cache_state__ (line 147) | def __cache_state__(self) -> Tuple[Hashable, ...]:
    method __eq__ (line 164) | def __eq__(self, other):
    method __hash__ (line 168) | def __hash__(self):
    method method (line 172) | def method(cls, name: Optional[str] = None,
    method is_global_cache (line 268) | def is_global_cache(attr) -> bool:
    method cache_clear (line 272) | def cache_clear(self, prefix: Optional[str] = None) -> None:

FILE: src/pyunicorn/core/data.py
  class Data (line 35) | class Data:
    method __init__ (line 51) | def __init__(self, observable: np.ndarray, grid: GeoGrid,
    method __str__ (line 106) | def __str__(self):
    method set_silence_level (line 115) | def set_silence_level(self, silence_level):
    method Load (line 134) | def Load(cls, file_name, observable_name, file_type, dimension_names=N...
    method SmallTestData (line 192) | def SmallTestData():
    method _get_netcdf_data (line 238) | def _get_netcdf_data(cls, file_name, file_type, observable_name,
    method _load_data (line 344) | def _load_data(cls, file_name, file_type, observable_name,
    method print_data_info (line 375) | def print_data_info(self):
    method observable (line 387) | def observable(self):
    method window (line 406) | def window(self):
    method set_window (line 423) | def set_window(self, window):
    method set_global_window (line 501) | def set_global_window(self):
    method rescale (line 532) | def rescale(array, var_type):
    method normalize_time_series_array (line 588) | def normalize_time_series_array(time_series_array):
    method next_power_2 (line 623) | def next_power_2(i):
    method zero_pad_data (line 645) | def zero_pad_data(data):
    method cos_window (line 680) | def cos_window(data, gamma):

FILE: src/pyunicorn/core/geo_grid.py
  class GeoGrid (line 33) | class GeoGrid(Grid):
    method __init__ (line 46) | def __init__(self, time_seq: np.ndarray,
    method __str__ (line 67) | def __str__(self):
    method save_txt (line 78) | def save_txt(self, filename):
    method LoadTXT (line 103) | def LoadTXT(filename):
    method SmallTestGrid (line 130) | def SmallTestGrid():
    method RegularGrid (line 144) | def RegularGrid(time_seq, space_grid, silence_level=0):
    method coord_sequence_from_rect_grid (line 193) | def coord_sequence_from_rect_grid(lat_grid, lon_grid):
    method lat_sequence (line 218) | def lat_sequence(self):
    method lon_sequence (line 232) | def lon_sequence(self):
    method convert_lon_coordinates (line 246) | def convert_lon_coordinates(self, lon_seq):
    method node_number (line 276) | def node_number(self, lat_node, lon_node):
    method cos_lat (line 321) | def cos_lat(self):
    method sin_lat (line 335) | def sin_lat(self):
    method cos_lon (line 349) | def cos_lon(self):
    method sin_lon (line 363) | def sin_lon(self):
    method distance (line 377) | def distance(self):
    method angular_distance (line 388) | def angular_distance(self):
    method boundaries (line 421) | def boundaries(self):
    method print_boundaries (line 444) | def print_boundaries(self):
    method grid (line 464) | def grid(self):
    method region_indices (line 492) | def region_indices(self, region):
    method region (line 523) | def region(name):

FILE: src/pyunicorn/core/geo_network.py
  class GeoNetwork (line 26) | class GeoNetwork(SpatialNetwork):
    method __init__ (line 42) | def __init__(self, grid: GeoGrid, adjacency=None, edge_list=None,
    method __str__ (line 83) | def __str__(self):
    method set_node_weight_type (line 90) | def set_node_weight_type(self, node_weight_type):
    method Load (line 124) | def Load(filename, fileformat=None, silence_level=0, *args, **kwds):
    method save_for_cgv (line 192) | def save_for_cgv(self, filename, fileformat="graphml"):
    method SmallTestNetwork (line 231) | def SmallTestNetwork():
    method Model (line 254) | def Model(network_model, grid, node_weight_type="surface", **kwargs):
    method geographical_distribution (line 269) | def geographical_distribution(self, sequence, n_bins):
    method geographical_cumulative_distribution (line 339) | def geographical_cumulative_distribution(self, sequence, n_bins):
    method area_weighted_connectivity (line 381) | def area_weighted_connectivity(self):
    method inarea_weighted_connectivity (line 406) | def inarea_weighted_connectivity(self):
    method outarea_weighted_connectivity (line 436) | def outarea_weighted_connectivity(self):
    method area_weighted_connectivity_distribution (line 467) | def area_weighted_connectivity_distribution(self, n_bins):
    method inarea_weighted_connectivity_distribution (line 493) | def inarea_weighted_connectivity_distribution(self, n_bins):
    method outarea_weighted_connectivity_distribution (line 519) | def outarea_weighted_connectivity_distribution(self, n_bins):
    method area_weighted_connectivity_cumulative_distribution (line 545) | def area_weighted_connectivity_cumulative_distribution(self, n_bins):
    method inarea_weighted_connectivity_cumulative_distribution (line 572) | def inarea_weighted_connectivity_cumulative_distribution(self, n_bins):
    method outarea_weighted_connectivity_cumulative_distribution (line 599) | def outarea_weighted_connectivity_cumulative_distribution(self, n_bins):
    method average_neighbor_area_weighted_connectivity (line 626) | def average_neighbor_area_weighted_connectivity(self):
    method max_neighbor_area_weighted_connectivity (line 654) | def max_neighbor_area_weighted_connectivity(self):
    method total_link_distance (line 686) | def total_link_distance(self, geometry_corrected=False):
    method intotal_link_distance (line 711) | def intotal_link_distance(self, geometry_corrected=False):
    method outtotal_link_distance (line 733) | def outtotal_link_distance(self, geometry_corrected=False):
    method _calculate_general_connectivity_weighted_distance (line 757) | def _calculate_general_connectivity_weighted_distance(self, adjacency,
    method connectivity_weighted_distance (line 788) | def connectivity_weighted_distance(self):
    method inconnectivity_weighted_distance (line 812) | def inconnectivity_weighted_distance(self):
    method outconnectivity_weighted_distance (line 834) | def outconnectivity_weighted_distance(self):
    method local_geographical_clustering (line 860) | def local_geographical_clustering(self):
    method cartesian2latlon (line 891) | def cartesian2latlon(pos):
    method latlon2cartesian (line 896) | def latlon2cartesian(lat, lon):

FILE: src/pyunicorn/core/grid.py
  class Grid (line 30) | class Grid(Cached):
    method __init__ (line 42) | def __init__(self, time_seq: np.ndarray, space_seq: np.ndarray,
    method __cache_state__ (line 82) | def __cache_state__(self) -> Tuple[Hashable, ...]:
    method __str__ (line 87) | def __str__(self):
    method save (line 98) | def save(self, filename):
    method Load (line 113) | def Load(filename):
    method SmallTestGrid (line 132) | def SmallTestGrid():
    method RegularGrid (line 146) | def RegularGrid(time_seq, space_grid, silence_level=0):
    method coord_sequence_from_rect_grid (line 186) | def coord_sequence_from_rect_grid(space_grid):
    method sequence (line 208) | def sequence(self, dimension):
    method node_number (line 227) | def node_number(self, x):
    method node_coordinates (line 259) | def node_coordinates(self, index):
    method distance (line 276) | def distance(self):
    method euclidean_distance (line 287) | def euclidean_distance(self):
    method boundaries (line 317) | def boundaries(self):
    method grid (line 332) | def grid(self):
    method grid_size (line 352) | def grid_size(self):
    method print_grid_size (line 371) | def print_grid_size(self):
    method geometric_distance_distribution (line 378) | def geometric_distance_distribution(self, n_bins):

FILE: src/pyunicorn/core/interacting_networks.py
  class InteractingNetworks (line 31) | class InteractingNetworks(Network):
    method __init__ (line 51) | def __init__(self, adjacency, directed=False, node_weights=None,
    method __str__ (line 72) | def __str__(self):
    method SmallTestNetwork (line 83) | def SmallTestNetwork():
    method SmallDirectedTestNetwork (line 115) | def SmallDirectedTestNetwork():
    method RandomlySetCrossLinks (line 142) | def RandomlySetCrossLinks(network, node_list1, node_list2,
    method RandomlySetCrossLinks_sparse (line 204) | def RandomlySetCrossLinks_sparse(network, node_list1, node_list2,
    method RandomlyRewireCrossLinks (line 281) | def RandomlyRewireCrossLinks(network, node_list1, node_list2, swaps):
    method subnetwork (line 365) | def subnetwork(self, node_list):
    method internal_adjacency (line 381) | def internal_adjacency(self, node_list):
    method cross_adjacency (line 404) | def cross_adjacency(self, node_list1, node_list2):
    method cross_adjacency_sparse (line 436) | def cross_adjacency_sparse(self, node_list1, node_list2):
    method internal_link_attribute (line 466) | def internal_link_attribute(self, attribute_name, node_list):
    method cross_link_attribute (line 498) | def cross_link_attribute(self, attribute_name, node_list1, node_list2):
    method internal_path_lengths (line 531) | def internal_path_lengths(self, node_list, link_attribute=None):
    method cross_path_lengths (line 562) | def cross_path_lengths(self, node_list1, node_list2, link_attribute=No...
    method number_cross_links (line 593) | def number_cross_links(self, node_list1, node_list2):
    method total_cross_degree (line 618) | def total_cross_degree(self, node_list1, node_list2):
    method number_internal_links (line 639) | def number_internal_links(self, node_list):
    method cross_degree_density (line 661) | def cross_degree_density(self, node_list1, node_list2):
    method cross_link_density (line 686) | def cross_link_density(self, node_list1, node_list2):
    method internal_link_density (line 712) | def internal_link_density(self, node_list):
    method internal_global_clustering (line 735) | def internal_global_clustering(self, node_list):
    method cross_global_clustering (line 768) | def cross_global_clustering(self, node_list1, node_list2):
    method cross_global_clustering_sparse (line 802) | def cross_global_clustering_sparse(self, node_list1, node_list2):
    method cross_transitivity (line 835) | def cross_transitivity(self, node_list1, node_list2):
    method cross_transitivity_sparse (line 868) | def cross_transitivity_sparse(self, node_list1, node_list2):
    method _calculate_general_average_path_length (line 926) | def _calculate_general_average_path_length(path_lengths, internal=False):
    method cross_average_path_length (line 961) | def cross_average_path_length(self, node_list1, node_list2,
    method internal_average_path_length (line 993) | def internal_average_path_length(self, node_list, link_attribute=None):
    method average_cross_closeness (line 1029) | def average_cross_closeness(self, node_list1, node_list2,
    method global_efficiency (line 1051) | def global_efficiency(self, node_list1, node_list2, link_attribute=None):
    method cross_degree (line 1077) | def cross_degree(self, node_list1, node_list2, link_attribute=None):
    method cross_indegree (line 1115) | def cross_indegree(self, node_list1, node_list2, link_attribute=None):
    method cross_outdegree (line 1146) | def cross_outdegree(self, node_list1, node_list2, link_attribute=None):
    method internal_degree (line 1175) | def internal_degree(self, node_list, link_attribute=None):
    method internal_indegree (line 1201) | def internal_indegree(self, node_list, link_attribute=None):
    method internal_outdegree (line 1226) | def internal_outdegree(self, node_list, link_attribute=None):
    method cross_local_clustering (line 1251) | def cross_local_clustering(self, node_list1, node_list2):
    method cross_local_clustering_sparse (line 1293) | def cross_local_clustering_sparse(self, node_list1, node_list2):
    method _calculate_general_closeness (line 1351) | def _calculate_general_closeness(self, path_lengths, internal=True):
    method cross_closeness (line 1394) | def cross_closeness(self, node_list1, node_list2, link_attribute=None):
    method internal_closeness (line 1424) | def internal_closeness(self, node_list, link_attribute=None):
    method cross_betweenness (line 1456) | def cross_betweenness(self, node_list1, node_list2):
    method internal_betweenness (line 1486) | def internal_betweenness(self, node_list):
    method local_efficiency (line 1508) | def local_efficiency(self, node_list1, node_list2, link_attribute=None):
    method nsi_cross_degree (line 1531) | def nsi_cross_degree(self, node_list1, node_list2):
    method nsi_cross_mean_degree (line 1556) | def nsi_cross_mean_degree(self, node_list1, node_list2):
    method nsi_internal_degree (line 1578) | def nsi_internal_degree(self, node_list):
    method nsi_cross_local_clustering (line 1597) | def nsi_cross_local_clustering(self, node_list1, node_list2):
    method nsi_cross_closeness_centrality (line 1628) | def nsi_cross_closeness_centrality(self, node_list1, node_list2):
    method nsi_internal_closeness_centrality (line 1657) | def nsi_internal_closeness_centrality(self, node_list):
    method nsi_cross_global_clustering (line 1677) | def nsi_cross_global_clustering(self, node_list1, node_list2):
    method nsi_internal_local_clustering (line 1697) | def nsi_internal_local_clustering(self, node_list):
    method nsi_cross_betweenness (line 1719) | def nsi_cross_betweenness(self, node_list1, node_list2):
    method nsi_cross_edge_density (line 1746) | def nsi_cross_edge_density(self, node_list1, node_list2):
    method nsi_cross_transitivity (line 1769) | def nsi_cross_transitivity(self, node_list1, node_list2):
    method nsi_cross_average_path_length (line 1796) | def nsi_cross_average_path_length(self, node_list1, node_list2):

FILE: src/pyunicorn/core/netcdf_dictionary.py
  class NetCDFDictionary (line 41) | class NetCDFDictionary:
    method __init__ (line 50) | def __init__(self, data_dict=None, silence_level=0):
    method __str__ (line 80) | def __str__(self):
    method from_file (line 97) | def from_file(file_name, with_array='all'):
    method to_file (line 178) | def to_file(self, file_name, compress=False, comp_level=6,

FILE: src/pyunicorn/core/network.py
  function nz_coords (line 50) | def nz_coords(matrix):
  class NetworkError (line 60) | class NetworkError(Exception):
    method __init__ (line 64) | def __init__(self, value):
    method __str__ (line 68) | def __str__(self):
  function r (line 76) | def r(obj, decimals=4):
  function rr (line 101) | def rr(obj, decimals=4):
  class Network (line 111) | class Network(Cached):
    method __init__ (line 141) | def __init__(self, adjacency=None, n_nodes=None, edge_list=None,
    method __cache_state__ (line 218) | def __cache_state__(self) -> Tuple[Hashable, ...]:
    method __str__ (line 221) | def __str__(self):
    method __len__ (line 237) | def __len__(self):
    method copy (line 250) | def copy(self):
    method undirected_copy (line 258) | def undirected_copy(self):
    method permuted_copy (line 278) | def permuted_copy(self, permutation):
    method splitted_copy (line 297) | def splitted_copy(self, node=-1, proportion=0.5):
    method adjacency (line 366) | def adjacency(self):
    method adjacency (line 381) | def adjacency(self, adjacency):
    method set_edge_list (line 427) | def set_edge_list(self, edge_list, n_nodes=None):
    method node_weights (line 460) | def node_weights(self):
    method node_weights (line 465) | def node_weights(self, weights: Optional[np.ndarray]):
    method sp_Aplus (line 496) | def sp_Aplus(self):
    method sp_diag_w (line 500) | def sp_diag_w(self):
    method sp_diag_w_inv (line 505) | def sp_diag_w_inv(self):
    method sp_diag_sqrt_w (line 510) | def sp_diag_sqrt_w(self):
    method save (line 520) | def save(self, filename, fileformat=None, *args, **kwds):
    method Load (line 562) | def Load(filename, fileformat=None, silence_level=0, *args, **kwds):
    method FromIGraph (line 603) | def FromIGraph(graph, silence_level=0):
    method SmallTestNetwork (line 651) | def SmallTestNetwork():
    method SmallDirectedTestNetwork (line 683) | def SmallDirectedTestNetwork():
    method Model (line 712) | def Model(network_model, **kwargs):
    method ErdosRenyi (line 738) | def ErdosRenyi(n_nodes=100, link_probability=None, n_links=None,
    method BarabasiAlbert_igraph (line 791) | def BarabasiAlbert_igraph(n_nodes=100, n_links_each=5):
    method BarabasiAlbert (line 828) | def BarabasiAlbert(n_nodes=100, n_links_each=5):
    method Configuration (line 870) | def Configuration(degree):
    method WattsStrogatz (line 902) | def WattsStrogatz(N, k, p):
    method GrowWeights (line 936) | def GrowWeights(n_nodes=100, n_initials=1, exponent=1,
    method randomly_rewire (line 985) | def randomly_rewire(self, iterations):
    method edge_list (line 1013) | def edge_list(self):
    method undirected_adjacency (line 1026) | def undirected_adjacency(self):
    method laplacian (line 1042) | def laplacian(self, direction="out", link_attribute=None):
    method nsi_laplacian (line 1080) | def nsi_laplacian(self):
    method _histogram (line 1109) | def _histogram(values, n_bins, interval=None):
    method _cum_histogram (line 1153) | def _cum_histogram(values, n_bins, interval=None):
    method set_node_attribute (line 1188) | def set_node_attribute(self, attribute_name: str, values):
    method node_attribute (line 1207) | def node_attribute(self, attribute_name: str):
    method del_node_attribute (line 1220) | def del_node_attribute(self, attribute_name: str):
    method find_link_attribute (line 1233) | def find_link_attribute(self, attribute_name: str):
    method average_link_attribute (line 1236) | def average_link_attribute(self, attribute_name: str):
    method link_attribute (line 1247) | def link_attribute(self, attribute_name: str):
    method del_link_attribute (line 1269) | def del_link_attribute(self, attribute_name: str):
    method set_link_attribute (line 1280) | def set_link_attribute(self, attribute_name, values):
    method degree (line 1305) | def degree(self, link_attribute=None):
    method indegree (line 1325) | def indegree(self, link_attribute=None):
    method outdegree (line 1346) | def outdegree(self, link_attribute=None):
    method bildegree (line 1367) | def bildegree(self, link_attribute=None):
    method sp_nsi_diag_k (line 1389) | def sp_nsi_diag_k(self):
    method sp_nsi_diag_k_inv (line 1394) | def sp_nsi_diag_k_inv(self):
    method nsi_degree (line 1400) | def nsi_degree(self, link_attribute=None, typical_weight=None):
    method nsi_indegree (line 1453) | def nsi_indegree(self, link_attribute=None, typical_weight=None):
    method nsi_outdegree (line 1494) | def nsi_outdegree(self, link_attribute=None, typical_weight=None):
    method nsi_bildegree (line 1535) | def nsi_bildegree(self, link_attribute=None, typical_weight=None):
    method degree_distribution (line 1559) | def degree_distribution(self):
    method indegree_distribution (line 1576) | def indegree_distribution(self):
    method outdegree_distribution (line 1593) | def outdegree_distribution(self):
    method degree_cdf (line 1610) | def degree_cdf(self):
    method indegree_cdf (line 1627) | def indegree_cdf(self):
    method outdegree_cdf (line 1644) | def outdegree_cdf(self):
    method nsi_degree_histogram (line 1662) | def nsi_degree_histogram(self, typical_weight=None):
    method nsi_degree_cumulative_histogram (line 1688) | def nsi_degree_cumulative_histogram(self, typical_weight=None):
    method average_neighbors_degree (line 1712) | def average_neighbors_degree(self):
    method max_neighbors_degree (line 1730) | def max_neighbors_degree(self):
    method nsi_average_neighbors_degree (line 1749) | def nsi_average_neighbors_degree(self):
    method nsi_max_neighbors_degree (line 1789) | def nsi_max_neighbors_degree(self):
    method local_clustering (line 1824) | def local_clustering(self):
    method global_clustering (line 1846) | def global_clustering(self):
    method _motif_clustering_helper (line 1865) | def _motif_clustering_helper(self, t_func, T, link_attribute=None, nsi...
    method local_cyclemotif_clustering (line 1908) | def local_cyclemotif_clustering(self, link_attribute=None):
    method local_midmotif_clustering (line 1931) | def local_midmotif_clustering(self, link_attribute=None):
    method local_inmotif_clustering (line 1954) | def local_inmotif_clustering(self, link_attribute=None):
    method local_outmotif_clustering (line 1977) | def local_outmotif_clustering(self, link_attribute=None):
    method nsi_local_cyclemotif_clustering (line 2001) | def nsi_local_cyclemotif_clustering(self, link_attribute=None, typical...
    method nsi_local_midmotif_clustering (line 2049) | def nsi_local_midmotif_clustering(self, link_attribute=None, typical_w...
    method nsi_local_inmotif_clustering (line 2097) | def nsi_local_inmotif_clustering(self, link_attribute=None, typical_we...
    method nsi_local_outmotif_clustering (line 2145) | def nsi_local_outmotif_clustering(self, link_attribute=None, typical_w...
    method transitivity (line 2191) | def transitivity(self):
    method higher_order_transitivity (line 2209) | def higher_order_transitivity(self, order, estimate=False):
    method local_cliquishness (line 2259) | def local_cliquishness(self, order):
    method weighted_local_clustering (line 2306) | def weighted_local_clustering(weighted_A):
    method nsi_twinness (line 2345) | def nsi_twinness(self):
    method assortativity (line 2385) | def assortativity(self):
    method nsi_local_clustering (line 2415) | def nsi_local_clustering(self, typical_weight=None):
    method nsi_global_clustering (line 2473) | def nsi_global_clustering(self):
    method nsi_transitivity (line 2502) | def nsi_transitivity(self):
    method nsi_local_soffer_clustering (line 2523) | def nsi_local_soffer_clustering(self):
    method path_lengths (line 2570) | def path_lengths(self, link_attribute=None):
    method average_path_length (line 2615) | def average_path_length(self, link_attribute=None):
    method nsi_average_path_length (line 2664) | def nsi_average_path_length(self):
    method diameter (line 2709) | def diameter(self, directed=True, only_connected=True):
    method matching_index (line 2732) | def matching_index(self):
    method link_betweenness (line 2757) | def link_betweenness(self):
    method edge_betweenness (line 2796) | def edge_betweenness(self):
    method betweenness (line 2824) | def betweenness(self, link_attribute=None):
    method interregional_betweenness (line 2849) | def interregional_betweenness(self, sources=None, targets=None):
    method nsi_interregional_betweenness (line 2885) | def nsi_interregional_betweenness(self, sources, targets):
    method nsi_betweenness (line 2912) | def nsi_betweenness(self, sources=None, targets=None,
    method _nsi_betweenness (line 2959) | def _nsi_betweenness(self, is_source: Tuple[MASK], targets: Tuple[NODE],
    method eigenvector_centrality (line 3000) | def eigenvector_centrality(self):
    method nsi_eigenvector_centrality (line 3024) | def nsi_eigenvector_centrality(self):
    method pagerank (line 3064) | def pagerank(self, link_attribute=None, use_directed=True):
    method closeness (line 3097) | def closeness(self, link_attribute=None):
    method nsi_closeness (line 3154) | def nsi_closeness(self):
    method nsi_harmonic_closeness (line 3191) | def nsi_harmonic_closeness(self):
    method nsi_exponential_closeness (line 3220) | def nsi_exponential_closeness(self):
    method arenas_betweenness (line 3248) | def arenas_betweenness(self):
    method _mpi_nsi_arenas_betweenness (line 3347) | def _mpi_nsi_arenas_betweenness(
    method nsi_arenas_betweenness (line 3392) | def nsi_arenas_betweenness(self, exclude_neighbors=True,
    method newman_betweenness (line 3584) | def newman_betweenness(self):
    method nsi_newman_betweenness (line 3706) | def nsi_newman_betweenness(self, add_local_ends=False):
    method global_efficiency (line 3888) | def global_efficiency(self, link_attribute=None):
    method nsi_global_efficiency (line 3926) | def nsi_global_efficiency(self):
    method distance_based_measures (line 3944) | def distance_based_measures(self, replace_inf_by=None):
    method local_vulnerability (line 4013) | def local_vulnerability(self, link_attribute=None):
    method coreness (line 4067) | def coreness(self):
    method msf_synchronizability (line 4091) | def msf_synchronizability(self):
    method hamming_distance_from (line 4146) | def hamming_distance_from(self, other_network):
    method spreading (line 4173) | def spreading(self, alpha=None):
    method nsi_spreading (line 4188) | def nsi_spreading(self, alpha=None):

FILE: src/pyunicorn/core/resistive_network.py
  class ResNetwork (line 53) | class ResNetwork(GeoNetwork):
    method __init__ (line 75) | def __init__(self, resistances, grid=None, adjacency=None, edge_list=N...
    method __str__ (line 145) | def __str__(self):
    method SmallTestNetwork (line 156) | def SmallTestNetwork():
    method SmallComplexNetwork (line 202) | def SmallComplexNetwork():
    method update_resistances (line 248) | def update_resistances(self, resistances):
    method update_admittance (line 314) | def update_admittance(self):
    method get_admittance (line 360) | def get_admittance(self):
    method update_R (line 378) | def update_R(self):
    method get_R (line 401) | def get_R(self):
    method admittance_lapacian (line 423) | def admittance_lapacian(self):
    method admittive_degree (line 444) | def admittive_degree(self):
    method average_neighbors_admittive_degree (line 461) | def average_neighbors_admittive_degree(self):
    method local_admittive_clustering (line 506) | def local_admittive_clustering(self):
    method global_admittive_clustering (line 566) | def global_admittive_clustering(self):
    method effective_resistance (line 583) | def effective_resistance(self, a, b):
    method average_effective_resistance (line 622) | def average_effective_resistance(self):
    method diameter_effective_resistance (line 653) | def diameter_effective_resistance(self):
    method effective_resistance_closeness_centrality (line 682) | def effective_resistance_closeness_centrality(self, a):
    method vertex_current_flow_betweenness (line 712) | def vertex_current_flow_betweenness(self, i):
    method edge_current_flow_betweenness (line 752) | def edge_current_flow_betweenness(self):

FILE: src/pyunicorn/core/spatial_network.py
  class SpatialNetwork (line 34) | class SpatialNetwork(Network):
    method __init__ (line 47) | def __init__(self, grid: Grid, adjacency=None, edge_list=None,
    method __cache_state__ (line 71) | def __cache_state__(self) -> Tuple[Hashable, ...]:
    method __str__ (line 74) | def __str__(self):
    method save (line 85) | def save(self, filename, fileformat=None, *args, **kwds):
    method Load (line 135) | def Load(filename, fileformat=None, silence_level=0, *args, **kwds):
    method SmallTestNetwork (line 203) | def SmallTestNetwork():
    method Model (line 224) | def Model(network_model, grid, **kwargs):
    method randomly_rewire_geomodel_I (line 237) | def randomly_rewire_geomodel_I(self, distance_matrix, iterations,
    method randomly_rewire_geomodel_II (line 298) | def randomly_rewire_geomodel_II(self, distance_matrix,
    method randomly_rewire_geomodel_III (line 349) | def randomly_rewire_geomodel_III(self, distance_matrix,
    method set_random_links_by_distance (line 403) | def set_random_links_by_distance(self, a, b):
    method link_distance_distribution (line 447) | def link_distance_distribution(self, n_bins, grid_type="euclidean",
    method _calculate_general_average_link_distance (line 510) | def _calculate_general_average_link_distance(self, adjacency, degree,
    method average_link_distance (line 551) | def average_link_distance(self, geometry_corrected=False):
    method inaverage_link_distance (line 581) | def inaverage_link_distance(self, geometry_corrected=False):
    method outaverage_link_distance (line 607) | def outaverage_link_distance(self, geometry_corrected=False):
    method max_link_distance (line 633) | def max_link_distance(self):
    method distance (line 662) | def distance(self):
    method average_distance_weighted_path_length (line 671) | def average_distance_weighted_path_length(self):
    method distance_weighted_closeness (line 690) | def distance_weighted_closeness(self):
    method local_distance_weighted_vulnerability (line 709) | def local_distance_weighted_vulnerability(self):

FILE: src/pyunicorn/eventseries/event_series.py
  class EventSeries (line 39) | class EventSeries(Cached):
    method __init__ (line 42) | def __init__(self, data, timestamps=None, taumax=np.inf, lag=0.0,
    method __cache_state__ (line 158) | def __cache_state__(self) -> Tuple[Hashable, ...]:
    method __str__ (line 163) | def __str__(self):
    method get_event_matrix (line 171) | def get_event_matrix(self):
    method _symmetrization_directed (line 175) | def _symmetrization_directed(matrix):
    method _symmetrization_symmetric (line 187) | def _symmetrization_symmetric(matrix):
    method _symmetrization_antisym (line 199) | def _symmetrization_antisym(matrix):
    method _symmetrization_mean (line 211) | def _symmetrization_mean(matrix):
    method _symmetrization_max (line 224) | def _symmetrization_max(matrix):
    method _symmetrization_min (line 237) | def _symmetrization_min(matrix):
    method make_event_matrix (line 250) | def make_event_matrix(data, threshold_method='quantile',
    method event_synchronization (line 429) | def event_synchronization(eventseriesx, eventseriesy, ts1=None, ts2=None,
    method event_coincidence_analysis (line 515) | def event_coincidence_analysis(eventseriesx, eventseriesy, taumax,
    method _eca_coincidence_rate (line 587) | def _eca_coincidence_rate(self, eventseriesx, eventseriesy,
    method event_series_analysis (line 704) | def event_series_analysis(self, method='ES', symmetrization='directed',
    method _ndim_event_synchronization (line 776) | def _ndim_event_synchronization(self):
    method _ndim_event_coincidence_analysis (line 801) | def _ndim_event_coincidence_analysis(self, window_type='symmetric'):
    method _empirical_percentiles (line 830) | def _empirical_percentiles(self, method=None, n_surr=1000,
    method event_analysis_significance (line 911) | def event_analysis_significance(self, method=None,

FILE: src/pyunicorn/funcnet/coupling_analysis.py
  class CouplingAnalysis (line 36) | class CouplingAnalysis:
    method __init__ (line 49) | def __init__(self, data, silence_level=0):
    method __str__ (line 71) | def __str__(self):
    method test_data (line 77) | def test_data():
    method symmetrize_by_absmax (line 91) | def symmetrize_by_absmax(self, similarity_matrix, lag_matrix):
    method cross_correlation (line 139) | def cross_correlation(self, tau_max=0, lag_mode='max'):
    method mutual_information (line 225) | def mutual_information(self, tau_max=0, estimator='knn',
    method information_transfer (line 414) | def information_transfer(self, tau_max=0, estimator='knn',
    method _par_corr_to_cmi (line 619) | def _par_corr_to_cmi(par_corr):
    method get_nearest_neighbors (line 634) | def get_nearest_neighbors(array, xyz, k, standardize=True):
    method _quantile_bin_array (line 679) | def _quantile_bin_array(array, bins=6):
    method bincount_hist (line 713) | def bincount_hist(symb_array):
    method create_plogp (line 750) | def create_plogp(T):

FILE: src/pyunicorn/funcnet/coupling_analysis_pure_python.py
  class CouplingAnalysisPurePython (line 31) | class CouplingAnalysisPurePython:
    method __init__ (line 45) | def __init__(self, dataarray, only_tri=False, silence_level=0):
    method __str__ (line 100) | def __str__(self):
    method cross_correlation (line 117) | def cross_correlation(self, tau_max=0, lag_mode='all'):
    method shuffled_surrogate_for_cc (line 168) | def shuffled_surrogate_for_cc(self, fourier=False, tau_max=1,
    method time_surrogate_for_cc (line 215) | def time_surrogate_for_cc(self, sample_range=100, tau_max=1,
    method _calculate_cc (line 248) | def _calculate_cc(self, array, tau_max, lag_mode):
    method mutual_information (line 325) | def mutual_information(self, bins=16, tau_max=0, lag_mode='all'):
    method mutual_information_edges (line 393) | def mutual_information_edges(self, bins=16, tau=0):
    method shuffled_surrogate_for_mi (line 430) | def shuffled_surrogate_for_mi(self, fourier=False, bins=16, tau_max=0,
    method time_surrogate_for_mi (line 494) | def time_surrogate_for_mi(self, bins=16, sample_range=100, tau_max=1,
    method _calculate_mi (line 545) | def _calculate_mi(self, array, corr_range, bins, tau_max, lag_mode):
    method correlatedNoiseSurrogates (line 650) | def correlatedNoiseSurrogates(self, original):

FILE: src/pyunicorn/timeseries/cross_recurrence_plot.py
  class CrossRecurrencePlot (line 30) | class CrossRecurrencePlot(RecurrencePlot):
    method __init__ (line 65) | def __init__(self, x, y, metric="supremum", normalize=False,
    method __str__ (line 157) | def __str__(self):
    method x_embedded (line 167) | def x_embedded(self) -> np.ndarray:
    method x_embedded (line 174) | def x_embedded(self, embedding: np.ndarray):
    method y_embedded (line 179) | def y_embedded(self) -> np.ndarray:
    method y_embedded (line 186) | def y_embedded(self, embedding: np.ndarray):
    method recurrence_matrix (line 194) | def recurrence_matrix(self):
    method distance_matrix (line 203) | def distance_matrix(self, metric):
    method manhattan_distance_matrix (line 221) | def manhattan_distance_matrix(self):
    method euclidean_distance_matrix (line 239) | def euclidean_distance_matrix(self):
    method supremum_distance_matrix (line 253) | def supremum_distance_matrix(self):
    method set_fixed_threshold (line 266) | def set_fixed_threshold(self, threshold):
    method set_fixed_recurrence_rate (line 286) | def set_fixed_recurrence_rate(self, recurrence_rate):
    method recurrence_rate (line 313) | def recurrence_rate(self):
    method cross_recurrence_rate (line 326) | def cross_recurrence_rate(self):
    method balance (line 335) | def balance(self):
    method diagline_dist (line 357) | def diagline_dist(self):
    method vertline_dist (line 363) | def vertline_dist(self):
    method white_vertline_dist (line 369) | def white_vertline_dist(self):

FILE: src/pyunicorn/timeseries/inter_system_recurrence_network.py
  class InterSystemRecurrenceNetwork (line 36) | class InterSystemRecurrenceNetwork(InteractingNetworks):
    method __init__ (line 71) | def __init__(self, x, y, metric="supremum", normalize=False,
    method __str__ (line 204) | def __str__(self):
    method __cache_state__ (line 218) | def __cache_state__(self) -> Tuple[Hashable, ...]:
    method inter_system_recurrence_matrix (line 225) | def inter_system_recurrence_matrix(self):
    method set_fixed_threshold (line 247) | def set_fixed_threshold(self, threshold):
    method set_fixed_recurrence_rate (line 278) | def set_fixed_recurrence_rate(self, density):
    method internal_recurrence_rates (line 314) | def internal_recurrence_rates(self):
    method cross_recurrence_rate (line 324) | def cross_recurrence_rate(self):
    method cross_global_clustering_xy (line 333) | def cross_global_clustering_xy(self):
    method cross_global_clustering_yx (line 346) | def cross_global_clustering_yx(self):
    method cross_transitivity_xy (line 359) | def cross_transitivity_xy(self):
    method cross_transitivity_yx (line 372) | def cross_transitivity_yx(self):

FILE: src/pyunicorn/timeseries/joint_recurrence_network.py
  class JointRecurrenceNetwork (line 32) | class JointRecurrenceNetwork(JointRecurrencePlot, Network):
    method __init__ (line 72) | def __init__(self, x, y, metric=("supremum", "supremum"),
    method __str__ (line 154) | def __str__(self):
    method set_fixed_threshold (line 165) | def set_fixed_threshold(self, threshold):
    method set_fixed_threshold_std (line 186) | def set_fixed_threshold_std(self, threshold_std):
    method set_fixed_recurrence_rate (line 209) | def set_fixed_recurrence_rate(self, recurrence_rate):

FILE: src/pyunicorn/timeseries/joint_recurrence_plot.py
  class JointRecurrencePlot (line 26) | class JointRecurrencePlot(RecurrencePlot):
    method __init__ (line 68) | def __init__(self, x, y, metric=("supremum", "supremum"),
    method __str__ (line 215) | def __str__(self):
    method recurrence_matrix (line 228) | def recurrence_matrix(self):
    method set_fixed_threshold (line 241) | def set_fixed_threshold(self, threshold):
    method set_fixed_threshold_std (line 278) | def set_fixed_threshold_std(self, threshold_std):
    method set_fixed_recurrence_rate (line 299) | def set_fixed_recurrence_rate(self, recurrence_rate):

FILE: src/pyunicorn/timeseries/recurrence_network.py
  class RecurrenceNetwork (line 32) | class RecurrenceNetwork(RecurrencePlot, Network):
    method __init__ (line 60) | def __init__(self, time_series, metric="supremum", normalize=False,
    method __str__ (line 148) | def __str__(self):
    method set_fixed_threshold (line 159) | def set_fixed_threshold(self, threshold):
    method set_fixed_threshold_std (line 179) | def set_fixed_threshold_std(self, threshold_std):
    method set_fixed_recurrence_rate (line 201) | def set_fixed_recurrence_rate(self, recurrence_rate):
    method set_fixed_local_recurrence_rate (line 221) | def set_fixed_local_recurrence_rate(self, local_recurrence_rate):
    method set_adaptive_neighborhood_size (line 247) | def set_adaptive_neighborhood_size(self, adaptive_neighborhood_size,
    method transitivity_dim_single_scale (line 281) | def transitivity_dim_single_scale(self):
    method local_clustering_dim_single_scale (line 300) | def local_clustering_dim_single_scale(self):

FILE: src/pyunicorn/timeseries/recurrence_plot.py
  class RecurrencePlot (line 42) | class RecurrencePlot(Cached):
    method __init__ (line 82) | def __init__(self, time_series: NDArray, metric: str = "supremum",
    method __cache_state__ (line 230) | def __cache_state__(self) -> Tuple[Hashable, ...]:
    method __str__ (line 233) | def __str__(self):
    method embedding (line 243) | def embedding(self) -> np.ndarray:
    method embedding (line 251) | def embedding(self, embedding: np.ndarray):
    method recurrence_matrix (line 260) | def recurrence_matrix(self):
    method distance_matrix (line 274) | def distance_matrix(self, metric: str):
    method normalize_time_series (line 292) | def normalize_time_series(time_series):
    method legendre_coordinates (line 319) | def legendre_coordinates(x, dim=3, t=None, p=None, tau_w="est"):
    method embed_time_series (line 400) | def embed_time_series(time_series, dim, tau):
    method permutation_entropy (line 427) | def permutation_entropy(self, normalize=True):
    method complexity_entropy (line 456) | def complexity_entropy(self):
    method manhattan_distance_matrix (line 515) | def manhattan_distance_matrix(self):
    method euclidean_distance_matrix (line 527) | def euclidean_distance_matrix(self):
    method supremum_distance_matrix (line 539) | def supremum_distance_matrix(self):
    method set_fixed_threshold (line 549) | def set_fixed_threshold(self, threshold):
    method set_fixed_threshold_std (line 573) | def set_fixed_threshold_std(self, threshold_std):
    method set_fixed_recurrence_rate (line 591) | def set_fixed_recurrence_rate(self, recurrence_rate):
    method set_fixed_local_recurrence_rate (line 611) | def set_fixed_local_recurrence_rate(self, local_recurrence_rate):
    method set_adaptive_neighborhood_size (line 640) | def set_adaptive_neighborhood_size(self, adaptive_neighborhood_size,
    method threshold_from_recurrence_rate (line 685) | def threshold_from_recurrence_rate(distance, recurrence_rate: float):
    method threshold_from_recurrence_rate_fast (line 715) | def threshold_from_recurrence_rate_fast(distance, recurrence_rate,
    method bootstrap_distance_matrix (line 751) | def bootstrap_distance_matrix(embedding, metric, M):
    method rqa_summary (line 786) | def rqa_summary(self, l_min=2, v_min=2):
    method recurrence_rate (line 806) | def recurrence_rate(self):
    method recurrence_probability (line 826) | def recurrence_probability(self, lag=0):
    method diagline_dist (line 847) | def diagline_dist(self):
    method rejection_sampling (line 910) | def rejection_sampling(dist, M):
    method resample_diagline_dist (line 937) | def resample_diagline_dist(self, M):
    method max_diaglength (line 969) | def max_diaglength(self):
    method determinism (line 981) | def determinism(self, l_min=2, resampled_dist=None):
    method average_diaglength (line 1010) | def average_diaglength(self, l_min=2, resampled_dist=None):
    method diag_entropy (line 1037) | def diag_entropy(self, l_min=2, resampled_dist=None):
    method vertline_dist (line 1072) | def vertline_dist(self):
    method resample_vertline_dist (line 1128) | def resample_vertline_dist(self, M):
    method max_vertlength (line 1160) | def max_vertlength(self):
    method laminarity (line 1172) | def laminarity(self, v_min=2, resampled_dist=None):
    method average_vertlength (line 1199) | def average_vertlength(self, v_min=2, resampled_dist=None):
    method trapping_time (line 1227) | def trapping_time(self, v_min=2, resampled_dist=None):
    method vert_entropy (line 1233) | def vert_entropy(self, v_min=2, resampled_dist=None):
    method white_vertline_dist (line 1268) | def white_vertline_dist(self):
    method max_white_vertlength (line 1294) | def max_white_vertlength(self):
    method average_white_vertlength (line 1307) | def average_white_vertlength(self, w_min=1):
    method mean_recurrence_time (line 1332) | def mean_recurrence_time(self, w_min=1):
    method white_vert_entropy (line 1338) | def white_vert_entropy(self, w_min=1):
    method twins (line 1367) | def twins(self, min_dist=7):
    method twin_surrogates (line 1397) | def twin_surrogates(self, n_surrogates=1, min_dist=7):

FILE: src/pyunicorn/timeseries/surrogates.py
  class Surrogates (line 42) | class Surrogates(Cached):
    method __init__ (line 58) | def __init__(self, original_data, silence_level=1):
    method __str__ (line 89) | def __str__(self):
    method __cache_state__ (line 95) | def __cache_state__(self) -> Tuple[Hashable, ...]:
    method embedding (line 99) | def embedding(self) -> np.ndarray:
    method embedding (line 107) | def embedding(self, embedding: np.ndarray):
    method SmallTestData (line 116) | def SmallTestData():
    method embed_time_series_array (line 138) | def embed_time_series_array(time_series_array, dimension, delay,
    method normalize_original_data (line 175) | def normalize_original_data(self):
    method recurrence_plot (line 203) | def recurrence_plot(embedding, threshold, silence_level=1):
    method twins (line 240) | def twins(self, threshold, min_dist=7):
    method original_data_fft (line 281) | def original_data_fft(self):
    method white_noise_surrogates (line 290) | def white_noise_surrogates(self):
    method correlated_noise_surrogates (line 324) | def correlated_noise_surrogates(self):
    method AAFT_surrogates (line 382) | def AAFT_surrogates(self):
    method refined_AAFT_surrogates (line 419) | def refined_AAFT_surrogates(self, n_iterations, output="true_amplitude...
    method twin_surrogates (line 478) | def twin_surrogates(self, dimension, delay, threshold, min_dist=7):
    method eval_fast_code (line 522) | def eval_fast_code(function, original_data, surrogates):
    method test_pearson_correlation (line 551) | def test_pearson_correlation(original_data, surrogates):
    method test_mutual_information (line 576) | def test_mutual_information(original_data, surrogates, n_bins=32):
    method original_distribution (line 610) | def original_distribution(self, test_function, n_bins=100):
    method test_threshold_significance (line 642) | def test_threshold_significance(self, surrogate_function, test_function,

FILE: src/pyunicorn/timeseries/visibility_graph.py
  class VisibilityGraph (line 36) | class VisibilityGraph(InteractingNetworks):
    method __init__ (line 50) | def __init__(self, time_series, timings=None, missing_values=False,
    method __str__ (line 104) | def __str__(self):
    method visibility_relations (line 116) | def visibility_relations(self):
    method visibility_relations_horizontal (line 140) | def visibility_relations_horizontal(self):
    method visibility (line 160) | def visibility(self, node1, node2):
    method visibility_single (line 169) | def visibility_single(self, node):
    method retarded_degree (line 178) | def retarded_degree(self):
    method advanced_degree (line 189) | def advanced_degree(self):
    method retarded_local_clustering (line 200) | def retarded_local_clustering(self):
    method advanced_local_clustering (line 221) | def advanced_local_clustering(self):
    method retarded_closeness (line 242) | def retarded_closeness(self):
    method advanced_closeness (line 253) | def advanced_closeness(self):
    method retarded_betweenness (line 264) | def retarded_betweenness(self):
    method advanced_betweenness (line 279) | def advanced_betweenness(self):
    method trans_betweenness (line 294) | def trans_betweenness(self):
    method boundary_corrected_degree (line 314) | def boundary_corrected_degree(self):
    method boundary_corrected_closeness (line 325) | def boundary_corrected_closeness(self):

FILE: src/pyunicorn/utils/mpi.py
  class MPIException (line 70) | class MPIException(Exception):
    method __init__ (line 71) | def __init__(self, value):
    method __str__ (line 75) | def __str__(self):
  function submit_call (line 160) | def submit_call(name_to_call, args=(), kwargs={},
  function get_result (line 291) | def get_result(id):
  function get_next_result (line 334) | def get_next_result():
  function info (line 353) | def info():
  function terminate (line 413) | def terminate():
  function abort (line 429) | def abort():
  function serve (line 449) | def serve():
  function abort (line 500) | def abort():
  function run (line 511) | def run(verbose=False):

FILE: tests/conftest.py
  function metric (line 23) | def metric(request) -> str:
  function reanalysis_data (line 32) | def reanalysis_data() -> Path:

FILE: tests/test_climate/test_climate_data.py
  function test_SmallTestData (line 27) | def test_SmallTestData():
  function test_phase_indices (line 42) | def test_phase_indices():
  function test_indices_selected_phases (line 48) | def test_indices_selected_phases():
  function test_phase_mean (line 54) | def test_phase_mean():
  function test_anomaly (line 64) | def test_anomaly():
  function test_shuffled_anomaly (line 71) | def test_shuffled_anomaly():
  function test_window (line 81) | def test_window():
  function test_set_global_window (line 94) | def test_set_global_window():

FILE: tests/test_climate/test_climate_network.py
  function test_str (line 22) | def test_str(capsys):
  function test_SmallTestNetwork (line 38) | def test_SmallTestNetwork():
  function test_link_density_function (line 46) | def test_link_density_function():
  function test_threshold_from_link_density (line 55) | def test_threshold_from_link_density():
  function test_similarity_measure (line 62) | def test_similarity_measure():
  function test_non_local (line 68) | def test_non_local():
  function test_set_non_local (line 74) | def test_set_non_local():
  function test_threshold (line 85) | def test_threshold():
  function test_set_threshold (line 91) | def test_set_threshold():
  function test_set_link_density (line 104) | def test_set_link_density():
  function test_correlation_distance (line 117) | def test_correlation_distance():
  function test_correlation_distance_weighted_closeness (line 128) | def test_correlation_distance_weighted_closeness():
  function test_local_correlation_distance_weighted_vulnerability (line 135) | def test_local_correlation_distance_weighted_vulnerability():

FILE: tests/test_climate/test_coupled_climate_network.py
  function test_internal_link_density (line 22) | def test_internal_link_density():

FILE: tests/test_climate/test_eventseries_climatenetwork.py
  function test_str (line 25) | def test_str(capsys):
  function test_SmallTestData (line 53) | def test_SmallTestData():

FILE: tests/test_climate/test_map_plot.py
  class TestMapPlot (line 28) | class TestMapPlot:
    method test_plot (line 34) | def test_plot(reanalysis_data: Path):

FILE: tests/test_climate/test_tsonis.py
  function test_str (line 23) | def test_str(capsys):
  function test_SmallTestNetwork (line 41) | def test_SmallTestNetwork():
  function test_calculate_similarity_measure (line 49) | def test_calculate_similarity_measure():
  function test_correlation (line 62) | def test_correlation():
  function test_winter_only (line 74) | def test_winter_only():
  function test_set_winter_only (line 80) | def test_set_winter_only():
  function test_correlation_weighted_average_path_length (line 89) | def test_correlation_weighted_average_path_length():
  function test_correlation_weighted_closeness (line 96) | def test_correlation_weighted_closeness():
  function test_local_correlation_weighted_vulnerability (line 103) | def test_local_correlation_weighted_vulnerability():

FILE: tests/test_core/ResistiveNetwork_utils.py
  function makeNW (line 12) | def makeNW(idI, idJ, val=None):
  function parallelCopy (line 39) | def parallelCopy(nw, a, b):
  function serialCopy (line 84) | def serialCopy(nw):
  function nx2nw (line 110) | def nx2nw(G):

FILE: tests/test_core/TestResistiveNetwork-circuits.py
  function testParallelTrivial (line 21) | def testParallelTrivial():
  function testParallelLessTrivial (line 58) | def testParallelLessTrivial():
  function testParallelRandom (line 157) | def testParallelRandom():
  function testSerialTrivial (line 197) | def testSerialTrivial():
  function testSerialRandom (line 240) | def testSerialRandom():

FILE: tests/test_core/TestResistiveNetwork-complexInput.py
  function testComplexAdmittance (line 28) | def testComplexAdmittance():
  function testPinvSymmetry (line 36) | def testPinvSymmetry():
  function testAdmittiveDegree (line 43) | def testAdmittiveDegree():

FILE: tests/test_core/TestResistiveNetwork-cython.py
  function testVCFB (line 18) | def testVCFB():
  function testECFB (line 41) | def testECFB():

FILE: tests/test_core/TestResistiveNetwork-types.py
  function testAdmittiveDegreeType (line 17) | def testAdmittiveDegreeType():

FILE: tests/test_core/test_cache.py
  function check_wrefc (line 28) | def check_wrefc(referent: object, count: int):
  function check_srefc (line 35) | def check_srefc(referent: object, count: int):
  function check_single_sref (line 42) | def check_single_sref(referent: object, obj: object, attr: str):
  class TestCached (line 58) | class TestCached:
    class Foo (line 63) | class Foo(Cached):
      method __cache_state__ (line 66) | def __cache_state__(self):
      method foo1 (line 70) | def foo1(self, a: int):
      method foo2 (line 75) | def foo2(self, *args):
      method bar (line 80) | def bar(self):
    class Bar (line 84) | class Bar(Cached):
      method __init__ (line 85) | def __init__(self):
      method __cache_state__ (line 88) | def __cache_state__(self):
    method test_args (line 92) | def test_args(cls, capfd: pytest.CaptureFixture):
    method test_instance_immutable (line 170) | def test_instance_immutable(cls):
    method test_instance_mutable (line 201) | def test_instance_mutable(cls):
    method test_instance_rec (line 242) | def test_instance_rec(cls):
    method test_attributes (line 290) | def test_attributes(cls):
    method test_disable (line 367) | def test_disable(cls):
    method test_refcount (line 403) | def test_refcount(cls):

FILE: tests/test_core/test_data.py
  function test_observable (line 22) | def test_observable():
  function test_window (line 49) | def test_window():
  function test_set_window (line 59) | def test_set_window():
  function test_set_global_window (line 74) | def test_set_global_window():
  function test_normalize_time_series_array (line 91) | def test_normalize_time_series_array():
  function test_next_power_2 (line 108) | def test_next_power_2():
  function test_zero_pad_data (line 113) | def test_zero_pad_data():
  function test_cos_window (line 126) | def test_cos_window():

FILE: tests/test_core/test_geo_grid.py
  function test_RegularGrid (line 22) | def test_RegularGrid():
  function test_coord_sequence_from_rect_grid (line 38) | def test_coord_sequence_from_rect_grid():
  function test_lat_sequence (line 45) | def test_lat_sequence():
  function test_lon_sequence (line 51) | def test_lon_sequence():
  function test_convert_lon_coordinates (line 57) | def test_convert_lon_coordinates():
  function test_node_number2d (line 64) | def test_node_number2d():
  function test_cos_lat (line 70) | def test_cos_lat():
  function test_sin_lat (line 76) | def test_sin_lat():
  function test_cos_lon (line 82) | def test_cos_lon():
  function test_sin_lon (line 88) | def test_sin_lon():
  function test_angular_distance (line 94) | def test_angular_distance():
  function test_boundaries (line 105) | def test_boundaries():
  function test_geometric_distance_distribution (line 112) | def test_geometric_distance_distribution():
  function test_region_indices (line 122) | def test_region_indices():

FILE: tests/test_core/test_geo_network.py
  function test_ErdosRenyi (line 24) | def test_ErdosRenyi(capsys):
  function test_ConfigurationModel (line 39) | def test_ConfigurationModel():
  function test_randomly_rewire_geomodel_I (line 50) | def test_randomly_rewire_geomodel_I():
  function test_set_random_links_by_distance (line 59) | def test_set_random_links_by_distance():
  function test_geographical_distribution (line 68) | def test_geographical_distribution():
  function test_geographical_cumulative_distribution (line 75) | def test_geographical_cumulative_distribution():
  function test_link_distance_distribution (line 83) | def test_link_distance_distribution():
  function test_area_weighted_connectivity (line 101) | def test_area_weighted_connectivity():
  function test_inarea_weighted_connectivity (line 108) | def test_inarea_weighted_connectivity():
  function test_outarea_weighted_connectivity (line 115) | def test_outarea_weighted_connectivity():
  function test_area_weighted_connectivity_distribution (line 122) | def test_area_weighted_connectivity_distribution():
  function test_inarea_weighted_connectivity_distribution (line 129) | def test_inarea_weighted_connectivity_distribution():
  function test_outarea_weighted_connectivity_distribution (line 136) | def test_outarea_weighted_connectivity_distribution():
  function test_area_weighted_connectivity_cumulative_distribution (line 143) | def test_area_weighted_connectivity_cumulative_distribution():
  function test_inarea_weighted_connectivity_cumulative_distribution (line 150) | def test_inarea_weighted_connectivity_cumulative_distribution():
  function test_outarea_weighted_connectivity_cumulative_distribution (line 157) | def test_outarea_weighted_connectivity_cumulative_distribution():
  function test_average_neighbor_area_weighted_connectivity (line 165) | def test_average_neighbor_area_weighted_connectivity():
  function test_max_neighbor_area_weighted_connectivity (line 173) | def test_max_neighbor_area_weighted_connectivity():
  function test_average_link_distance (line 181) | def test_average_link_distance():
  function test_inaverage_link_distance (line 194) | def test_inaverage_link_distance():
  function test_outaverage_link_distance (line 202) | def test_outaverage_link_distance():
  function test_total_link_distance (line 210) | def test_total_link_distance():
  function test_intotal_link_distance (line 218) | def test_intotal_link_distance():
  function test_outtotal_link_distance (line 226) | def test_outtotal_link_distance():
  function test_connectivity_weighted_distance (line 234) | def test_connectivity_weighted_distance():
  function test_inconnectivity_weighted_distance (line 242) | def test_inconnectivity_weighted_distance():
  function test_outconnectivity_weighted_distance (line 250) | def test_outconnectivity_weighted_distance():
  function test_max_link_distance (line 258) | def test_max_link_distance():
  function test_average_distance_weighted_path_length (line 265) | def test_average_distance_weighted_path_length():
  function test_distance_weighted_closeness (line 271) | def test_distance_weighted_closeness():
  function test_local_distance_weighted_vulnerability (line 278) | def test_local_distance_weighted_vulnerability():
  function test_local_geographical_clustering (line 285) | def test_local_geographical_clustering():

FILE: tests/test_core/test_grid.py
  function test_RegularGrid (line 22) | def test_RegularGrid():
  function test_coord_sequence_from_rect_grid (line 36) | def test_coord_sequence_from_rect_grid():
  function test_sequence (line 43) | def test_sequence():
  function test_node_number (line 49) | def test_node_number():
  function test_node_coordinates (line 55) | def test_node_coordinates():
  function test_grid (line 61) | def test_grid():
  function test_grid_size (line 71) | def test_grid_size():
  function test_geometric_distance_distribution (line 77) | def test_geometric_distance_distribution():
  function test_euclidean_distance (line 87) | def test_euclidean_distance():

FILE: tests/test_core/test_interacting_networks.py
  function test_RandomlyRewireCrossLinks (line 22) | def test_RandomlyRewireCrossLinks():
  function test_internal_adjacency (line 37) | def test_internal_adjacency():
  function test_cross_adjacency (line 48) | def test_cross_adjacency():
  function test_cross_adjacency_sparse (line 60) | def test_cross_adjacency_sparse():
  function test_internal_link_attribute (line 68) | def test_internal_link_attribute():
  function test_cross_link_attribute (line 78) | def test_cross_link_attribute():
  function test_internal_path_lengths (line 88) | def test_internal_path_lengths():
  function test_cross_path_lengths (line 100) | def test_cross_path_lengths():
  function test_number_cross_links (line 112) | def test_number_cross_links():
  function test_total_cross_degree (line 124) | def test_total_cross_degree():
  function test_number_internal_links (line 136) | def test_number_internal_links():
  function test_cross_degree_density (line 148) | def test_cross_degree_density():
  function test_cross_link_density (line 156) | def test_cross_link_density():
  function test_internal_link_density (line 168) | def test_internal_link_density():
  function test_internal_global_clustering (line 180) | def test_internal_global_clustering():
  function test_cross_global_clustering (line 192) | def test_cross_global_clustering():
  function test_cross_global_clustering_sparse (line 208) | def test_cross_global_clustering_sparse():
  function test_cross_transitivity (line 224) | def test_cross_transitivity():
  function test_cross_transitivity_sparse (line 239) | def test_cross_transitivity_sparse():
  function test_cross_average_path_length (line 255) | def test_cross_average_path_length():
  function test_internal_average_path_length (line 267) | def test_internal_average_path_length():
  function test_average_cross_closeness (line 279) | def test_average_cross_closeness():
  function test_global_efficiency (line 287) | def test_global_efficiency():
  function test_cross_degree (line 295) | def test_cross_degree():
  function test_cross_indegree (line 311) | def test_cross_indegree():
  function test_cross_outdegree (line 319) | def test_cross_outdegree():
  function test_internal_degree (line 327) | def test_internal_degree():
  function test_internal_indegree (line 339) | def test_internal_indegree():
  function test_internal_outdegree (line 347) | def test_internal_outdegree():
  function test_cross_local_clustering (line 355) | def test_cross_local_clustering():
  function test_cross_local_clustering_sparse (line 371) | def test_cross_local_clustering_sparse():
  function test_cross_closeness (line 387) | def test_cross_closeness():
  function test_internal_closeness (line 399) | def test_internal_closeness():
  function test_cross_betweenness (line 411) | def test_cross_betweenness():
  function test_internal_betweenness (line 423) | def test_internal_betweenness():
  function test_local_efficiency (line 431) | def test_local_efficiency():
  function test_nsi_cross_degree (line 439) | def test_nsi_cross_degree():
  function test_nsi_cross_mean_degree (line 451) | def test_nsi_cross_mean_degree():
  function test_nsi_internal_degree (line 463) | def test_nsi_internal_degree():
  function test_nsi_cross_local_clustering (line 475) | def test_nsi_cross_local_clustering():
  function test_nsi_cross_closeness_centrality (line 487) | def test_nsi_cross_closeness_centrality():
  function test_nsi_internal_closeness_centrality (line 499) | def test_nsi_internal_closeness_centrality():
  function test_nsi_cross_global_clustering (line 511) | def test_nsi_cross_global_clustering():
  function test_nsi_internal_local_clustering (line 519) | def test_nsi_internal_local_clustering():
  function test_nsi_cross_betweenness (line 531) | def test_nsi_cross_betweenness():
  function test_nsi_cross_edge_density (line 543) | def test_nsi_cross_edge_density():
  function test_nsi_cross_transitivity (line 555) | def test_nsi_cross_transitivity():
  function test_nsi_cross_average_path_length (line 567) | def test_nsi_cross_average_path_length():

FILE: tests/test_core/test_network.py
  function compare_results (line 36) | def compare_results(desired, actual, rev_perm=None):
  function compare_measures (line 51) | def compare_measures(orig, pnets, rev_perms, tasks):
  function compare_permutations (line 58) | def compare_permutations(net, permutations, measures):
  function compare_nsi (line 73) | def compare_nsi(net, nsi_measures):
  function test_int_overflow (line 96) | def test_int_overflow():
  function test_permutations (line 112) | def test_permutations():
  function test_nsi (line 140) | def test_nsi():
  function test_r (line 184) | def test_r():
  function test_r_type_error (line 189) | def test_r_type_error():
  function test_init (line 200) | def test_init():
  function test_str (line 207) | def test_str(capsys):
  function test_len (line 214) | def test_len():
  function test_undirected_copy (line 218) | def test_undirected_copy(capsys):
  function test_splitted_copy (line 232) | def test_splitted_copy(capsys):
  function test_adjacency (line 247) | def test_adjacency():
  function test_set_adjacency (line 254) | def test_set_adjacency(capsys):
  function test_set_node_weights (line 263) | def test_set_node_weights():
  function test_ErdosRenyi (line 273) | def test_ErdosRenyi(capsys):
  function test_BarabasiAlbert_igraph (line 282) | def test_BarabasiAlbert_igraph():
  function test_BarabasiAlbert (line 287) | def test_BarabasiAlbert():
  function test_ConfigurationModel (line 292) | def test_ConfigurationModel():
  function test_WattsStrogatz (line 297) | def test_WattsStrogatz():
  function test_GrowWeights (line 302) | def test_GrowWeights():
  function test_randomly_rewire (line 308) | def test_randomly_rewire(capsys):
  function test_edge_list (line 321) | def test_edge_list():
  function test_undirected_adjacency (line 328) | def test_undirected_adjacency():
  function test_laplacian (line 334) | def test_laplacian():
  function test_laplacian_value_error (line 341) | def test_laplacian_value_error():
  function test_nsi_laplacian (line 346) | def test_nsi_laplacian():
  function test_degree (line 356) | def test_degree():
  function test_indegree (line 367) | def test_indegree(link_attribute, deg_ref):
  function test_outdegree (line 378) | def test_outdegree(link_attribute, deg_ref):
  function test_bildegree (line 389) | def test_bildegree(link_attribute, deg_ref):
  function test_nsi_degree (line 398) | def test_nsi_degree():
  function test_nsi_indegree (line 423) | def test_nsi_indegree(tw, exp, exp_split):
  function test_nsi_outdegree (line 438) | def test_nsi_outdegree(tw, exp, exp_split):
  function test_nsi_bildegree (line 453) | def test_nsi_bildegree(tw, exp, exp_split):
  function test_degree_distribution (line 460) | def test_degree_distribution():
  function test_indegree_distribution (line 466) | def test_indegree_distribution():
  function test_outdegree_distribution (line 472) | def test_outdegree_distribution():
  function test_degree_cdf (line 478) | def test_degree_cdf():
  function test_indegree_cdf (line 483) | def test_indegree_cdf():
  function test_outdegree_cdf (line 488) | def test_outdegree_cdf():
  function test_nsi_degree_histogram (line 493) | def test_nsi_degree_histogram():
  function test_nsi_degree_cumulative_histogram (line 501) | def test_nsi_degree_cumulative_histogram():
  function test_average_neighbors_degree (line 508) | def test_average_neighbors_degree():
  function test_max_neighbors_degree (line 514) | def test_max_neighbors_degree():
  function test_nsi_average_neighbors_degree (line 520) | def test_nsi_average_neighbors_degree():
  function test_nsi_max_neighbors_degree (line 532) | def test_nsi_max_neighbors_degree():
  function test_local_clustering (line 538) | def test_local_clustering():
  function test_global_clustering (line 544) | def test_global_clustering():
  function test_local_cyclemotif_clustering (line 550) | def test_local_cyclemotif_clustering():
  function test_local_midmotif_clustering (line 556) | def test_local_midmotif_clustering():
  function test_local_inmotif_clustering (line 562) | def test_local_inmotif_clustering():
  function test_local_outmotif_clustering (line 568) | def test_local_outmotif_clustering():
  function test_nsi_local_cyclemotif_clustering (line 586) | def test_nsi_local_cyclemotif_clustering(tw, exp, exp_split):
  function test_nsi_local_midmotif_clustering (line 596) | def test_nsi_local_midmotif_clustering():
  function test_nsi_local_inmotif_clustering (line 608) | def test_nsi_local_inmotif_clustering():
  function test_nsi_local_outmotif_clustering (line 622) | def test_nsi_local_outmotif_clustering():
  function test_transitivity (line 636) | def test_transitivity():
  function test_weighted_local_clustering (line 642) | def test_weighted_local_clustering():
  function test_nsi_twinness (line 654) | def test_nsi_twinness():
  function test_assortativity (line 677) | def test_assortativity():
  function test_nsi_local_clustering (line 691) | def test_nsi_local_clustering(tw, exp, exp_split):
  function test_nsi_global_clustering (line 700) | def test_nsi_global_clustering():
  function test_nsi_local_soffer_clustering (line 706) | def test_nsi_local_soffer_clustering():
  function test_path_lengths (line 719) | def test_path_lengths():
  function test_average_path_length (line 730) | def test_average_path_length():
  function test_nsi_average_path_length (line 736) | def test_nsi_average_path_length():
  function test_diameter (line 748) | def test_diameter():
  function test_matching_index (line 754) | def test_matching_index():
  function test_link_betweenness (line 765) | def test_link_betweenness():
  function test_edge_betweenness (line 776) | def test_edge_betweenness():
  function test_betweenness (line 787) | def test_betweenness():
  function test_interregional_betweenness (line 799) | def test_interregional_betweenness():
  function test_nsi_interregional_betweenness (line 811) | def test_nsi_interregional_betweenness():
  function test_nsi_betweenness (line 819) | def test_nsi_betweenness(parallelize):
  function test_nsi_betweenness_directed (line 831) | def test_nsi_betweenness_directed():
  function test_eigenvector_centrality (line 840) | def test_eigenvector_centrality():
  function test_nsi_eigenvector_centrality (line 847) | def test_nsi_eigenvector_centrality():
  function test_pagerank (line 861) | def test_pagerank():
  function test_closeness (line 868) | def test_closeness():
  function test_nsi_closeness (line 875) | def test_nsi_closeness():
  function test_nsi_harmonic_closeness (line 889) | def test_nsi_harmonic_closeness():
  function test_nsi_exponential_closeness (line 903) | def test_nsi_exponential_closeness():
  function test_arenas_betweenness (line 917) | def test_arenas_betweenness():
  function test_nsi_arenas_betweenness (line 924) | def test_nsi_arenas_betweenness():
  function test_newman_betweenness (line 948) | def test_newman_betweenness():
  function test_nsi_newman_betweenness (line 955) | def test_nsi_newman_betweenness():
  function test_global_efficiency (line 978) | def test_global_efficiency():
  function test_nsi_global_efficiency (line 984) | def test_nsi_global_efficiency():
  function test_local_vulnerability (line 990) | def test_local_vulnerability():
  function test_coreness (line 997) | def test_coreness():
  function test_msf_synchronizability (line 1003) | def test_msf_synchronizability():

FILE: tests/test_core/test_resistive_networks.py
  function test_init (line 26) | def test_init(capsys):
  function test_SmallTestNetwork (line 39) | def test_SmallTestNetwork():
  function test_SmallComplexNetwork (line 43) | def test_SmallComplexNetwork():
  function test_update_resistances (line 66) | def test_update_resistances():
  function test_update_admittance (line 87) | def test_update_admittance():
  function test_get_admittance (line 93) | def test_get_admittance():
  function test_update_R (line 105) | def test_update_R():
  function test_get_R (line 111) | def test_get_R():
  function test_admittance_laplacian (line 121) | def test_admittance_laplacian():
  function test_admittive_degree (line 131) | def test_admittive_degree():
  function test_average_neighbors_admittive_degree (line 137) | def test_average_neighbors_admittive_degree():
  function test_local_admittive_clustering (line 143) | def test_local_admittive_clustering():
  function test_global_admittive_clustering (line 149) | def test_global_admittive_clustering():
  function test_effective_resistance (line 155) | def test_effective_resistance():
  function test_average_effective_resistance (line 167) | def test_average_effective_resistance():
  function test_diameter_effective_resistance (line 173) | def test_diameter_effective_resistance():
  function test_effective_resistance_closeness_centrality (line 179) | def test_effective_resistance_closeness_centrality():
  function test_vertex_current_flow_betweenness (line 191) | def test_vertex_current_flow_betweenness():
  function test_edge_current_flow_betweenness (line 199) | def test_edge_current_flow_betweenness():

FILE: tests/test_core/test_spatial_network.py
  function test_randomly_rewire_geomodel_I (line 22) | def test_randomly_rewire_geomodel_I():
  function test_set_random_links_by_distance (line 31) | def test_set_random_links_by_distance():
  function test_link_distance_distribution (line 40) | def test_link_distance_distribution():
  function test_average_link_distance (line 52) | def test_average_link_distance():
  function test_inaverage_link_distance (line 65) | def test_inaverage_link_distance():
  function test_outaverage_link_distance (line 73) | def test_outaverage_link_distance():
  function test_max_link_distance (line 81) | def test_max_link_distance():
  function test_average_distance_weighted_path_length (line 88) | def test_average_distance_weighted_path_length():
  function test_distance_weighted_closeness (line 95) | def test_distance_weighted_closeness():
  function test_local_distance_weighted_vulnerability (line 102) | def test_local_distance_weighted_vulnerability():

FILE: tests/test_eventseries/test_event_series.py
  function create_test_data (line 22) | def create_test_data():
  function test_EventSeries_init (line 32) | def test_EventSeries_init():
  function test_make_event_matrix (line 39) | def test_make_event_matrix():
  function eca_second_implementaion (line 84) | def eca_second_implementaion(eventseriesx, eventseriesy, *, ts1=None,
  function test_eca (line 171) | def test_eca():
  function eca_implementation_for_symmetric_window (line 191) | def eca_implementation_for_symmetric_window(es1, es2, *, ts1=None, ts2=N...
  function es_second_implementation (line 234) | def es_second_implementation(es1, es2, *, ts1=None, ts2=None, taumax=np....
  function test_es (line 312) | def test_es():
  function eca_matrix_second_implementation (line 333) | def eca_matrix_second_implementation(eventmatrix, taumax,
  function test_vectorized_eca (line 370) | def test_vectorized_eca():
  function es_matrix_second_implementation (line 415) | def es_matrix_second_implementation(eventmatrix, taumax):
  function test_vectorized_es (line 427) | def test_vectorized_es():
  function test_significance (line 489) | def test_significance():

FILE: tests/test_funcnet/test_coupling_analysis.py
  function create_test_data (line 27) | def create_test_data():
  function test_symmetrize_by_absmax (line 37) | def test_symmetrize_by_absmax():
  function test_cross_correlation_max (line 72) | def test_cross_correlation_max():
  function test_cross_correlation_all (line 85) | def test_cross_correlation_all():
  function test_mutual_information_knn (line 96) | def test_mutual_information_knn():
  function test_mutual_information_binning (line 112) | def test_mutual_information_binning():
  function test_mutual_information_gauss (line 129) | def test_mutual_information_gauss():
  function test_mutual_information_value_error (line 145) | def test_mutual_information_value_error():
  function test_information_transfer_knn (line 152) | def test_information_transfer_knn():
  function test_information_transfer_gauss (line 166) | def test_information_transfer_gauss():
  function test_information_transfer_value_error (line 182) | def test_information_transfer_value_error():

FILE: tests/test_funcnet/test_coupling_analysis_pure_python.py
  function test_cross_correlation_all (line 24) | def test_cross_correlation_all():
  function test_cross_correlation_sum (line 42) | def test_cross_correlation_sum():
  function test_cross_correlation_max (line 57) | def test_cross_correlation_max():
  function test_shuffled_surrogate_for_cc_all (line 71) | def test_shuffled_surrogate_for_cc_all():
  function test_shuffled_surrogate_for_cc_sum (line 89) | def test_shuffled_surrogate_for_cc_sum():
  function test_shuffled_surrogate_for_cc_max (line 103) | def test_shuffled_surrogate_for_cc_max():
  function test_shuffled_surrogate_for_cc_value_error (line 119) | def test_shuffled_surrogate_for_cc_value_error():
  function test_shuffled_surrogate_for_mi_all (line 126) | def test_shuffled_surrogate_for_mi_all():
  function test_shuffled_surrogate_for_mi_sum (line 144) | def test_shuffled_surrogate_for_mi_sum():
  function test_shuffled_surrogate_for_mi_max (line 158) | def test_shuffled_surrogate_for_mi_max():
  function test_shuffled_surrogate_for_mi_value_error (line 174) | def test_shuffled_surrogate_for_mi_value_error():
  function test_mutual_information_all (line 181) | def test_mutual_information_all():
  function test_mutual_information_sum (line 200) | def test_mutual_information_sum():
  function test_mutual_information_max (line 215) | def test_mutual_information_max():

FILE: tests/test_generic.py
  function test_version (line 22) | def test_version():
  function test_init_str (line 29) | def test_init_str():
  function simple_instances (line 37) | def simple_instances():

FILE: tests/test_timeseries/test_joint_recurrence_plot.py
  function test_recurrence (line 28) | def test_recurrence(metric: str, n: int):
  function test_exceptions (line 41) | def test_exceptions():

FILE: tests/test_timeseries/test_recurrence_plot.py
  function test_RP_euclidean (line 35) | def test_RP_euclidean():
  function test_RP_manhattan (line 55) | def test_RP_manhattan():
  function test_RP_threshold_std (line 77) | def test_RP_threshold_std():
  function test_RP_recurrence_rate (line 97) | def test_RP_recurrence_rate():
  function test_RP_local_recurrence_rate (line 117) | def test_RP_local_recurrence_rate():
  function recurrence_crit_fixture (line 145) | def recurrence_crit_fixture(request):
  function small_RP_fixture (line 152) | def small_RP_fixture(metric, recurrence_crit):
  function small_RP_basic_fixture (line 163) | def small_RP_basic_fixture(request):
  function test_line_dist (line 195) | def test_line_dist(measure: str, small_RP):
  function test_line_dist_numeric (line 207) | def test_line_dist_numeric(measure: str, small_RP_basic, exp):
  function test_line_dist_edgecases (line 217) | def test_line_dist_edgecases(sparse):
  function test_rqa_summary (line 233) | def test_rqa_summary(small_RP):
  function test_rqa_summary_numeric (line 239) | def test_rqa_summary_numeric(small_RP_basic):
  function test_resample_line_dist (line 248) | def test_resample_line_dist(measure: str, M: int, small_RP):
  function test_time (line 257) | def test_time(small_RP_basic, var, exp):
  function test_entropy (line 271) | def test_entropy(ts: np.ndarray, measure: str, value: float):
  function test_line_dist_entropy (line 279) | def test_line_dist_entropy(measure: str, exp: float, small_RP_basic):

FILE: tests/test_timeseries/test_timeseries.py
  function create_test_data (line 30) | def create_test_data():
  function testCrossRecurrencePlot (line 46) | def testCrossRecurrencePlot(thresh, rr, metric: str):
  function testRecurrenceNetwork (line 79) | def testRecurrenceNetwork(thresh, rr, metric: str):
  function testRecurrenceNetwork_setters (line 99) | def testRecurrenceNetwork_setters():
  function testJointRecurrenceNetwork (line 121) | def testJointRecurrenceNetwork(metric: str):
  function testInterSystemRecurrenceNetwork (line 143) | def testInterSystemRecurrenceNetwork(thresh, rr, metric: str):
  function testNormalizeOriginalData (line 172) | def testNormalizeOriginalData():
  function testEmbedTimeSeriesArray (line 185) | def testEmbedTimeSeriesArray():
  function testSurrogatesRecurrencePlot (line 199) | def testSurrogatesRecurrencePlot():
  function testWhiteNoiseSurrogates (line 214) | def testWhiteNoiseSurrogates():
  function testCorrelatedNoiseSurrogates (line 222) | def testCorrelatedNoiseSurrogates():
  function testTwinSurrogates (line 229) | def testTwinSurrogates():
  function testAAFTSurrogates (line 239) | def testAAFTSurrogates():
  function testPearsonCorrelation (line 251) | def testPearsonCorrelation():
  function testMutualInformation (line 264) | def testMutualInformation():
  function testOriginalDistribution (line 271) | def testOriginalDistribution():
  function testThresholdSignificance (line 280) | def testThresholdSignificance():
  function create_test_timeseries (line 298) | def create_test_timeseries():
  function testVisibility (line 337) | def testVisibility():
  function testVisibilityHorizontal (line 346) | def testVisibilityHorizontal():
  function testRetardedLocalClustering (line 355) | def testRetardedLocalClustering():
  function testAdvancedLocalClustering (line 364) | def testAdvancedLocalClustering():
Condensed preview — 157 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,218K chars).
[
  {
    "path": ".gitattributes",
    "chars": 203,
    "preview": "# Override jupyter in Github language stats for more accurate estimate of repo code\n# reference: https://github.com/gith"
  },
  {
    "path": ".gitignore",
    "chars": 3519,
    "preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions / Cython / Weave\n*.c\n!*/_ext/s"
  },
  {
    "path": ".travis.yml",
    "chars": 3078,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "CHANGELOG.rst",
    "chars": 10971,
    "preview": "\nChangelog\n=========\n\n0.9.0\n-----\n\nNew/updated functionality:\n\n- enabled link/edge weighting in calculation of shortest "
  },
  {
    "path": "CITATION.cff",
    "chars": 5675,
    "preview": "cff-version: 1.2.0\nmessage: If you use this software, please cite it using the metadata provided below.\ntype: software\nt"
  },
  {
    "path": "CONTRIBUTIONS.rst",
    "chars": 3299,
    "preview": "\nContributions\n=============\n\nCopyright\n---------\n\\ |copy| 2008-2026 Jonathan F. Donges and pyunicorn authors.\n\nLicense\n"
  },
  {
    "path": "LICENSE.txt",
    "chars": 1659,
    "preview": "\nCopyright (C) 2008-2026, Jonathan F. Donges (Potsdam-Institute for Climate\nImpact Research), pyunicorn authors\n\nAll rig"
  },
  {
    "path": "MANIFEST.in",
    "chars": 233,
    "preview": "include MANIFEST.in\nrecursive-exclude src/pyunicorn/*/_ext *.c\nrecursive-include src/pyunicorn/*/_ext *.pxd *.pyx src_*."
  },
  {
    "path": "README.rst",
    "chars": 7335,
    "preview": "=========\npyunicorn\n=========\n\n.. image:: https://app.travis-ci.com/pik-copan/pyunicorn.svg?branch=master\n  :target: htt"
  },
  {
    "path": "devenv.nix",
    "chars": 432,
    "preview": "\n# Documentation: https://devenv.sh/\n\n{ pkgs, lib, config, inputs, ... }:\n\n{\n  packages = with pkgs; [ stdenv.cc.cc zlib"
  },
  {
    "path": "devenv.yaml",
    "chars": 64,
    "preview": "inputs:\n  nixpkgs-python:\n    url: github:cachix/nixpkgs-python\n"
  },
  {
    "path": "docs/Makefile",
    "chars": 608,
    "preview": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    = -j 4\nSPHINXB"
  },
  {
    "path": "docs/source/_static/default.css",
    "chars": 8170,
    "preview": "/**\n * Alternate Sphinx design\n * Originally created by Armin Ronacher for Werkzeug, adapted by Georg Brandl.\n */\n\nbody "
  },
  {
    "path": "docs/source/_templates/layout.html",
    "chars": 462,
    "preview": "{%- extends \"basic/layout.html\" %}\n\n\n{% block rootrellink %}\n        <li><a href=\"{{ pathto('index') }}\">home</a>&nbsp;|"
  },
  {
    "path": "docs/source/api/climate/climate_data.rst",
    "chars": 212,
    "preview": "\nclimate.climate_data\n====================\n\n.. automodule:: pyunicorn.climate.climate_data\n    :synopsis: complex climat"
  },
  {
    "path": "docs/source/api/climate/climate_network.rst",
    "chars": 221,
    "preview": "\nclimate.climate_network\n=======================\n\n.. automodule:: pyunicorn.climate.climate_network\n    :synopsis: compl"
  },
  {
    "path": "docs/source/api/climate/coupled_climate_network.rst",
    "chars": 253,
    "preview": "\nclimate.coupled_climate_network\n===============================\n\n.. automodule:: pyunicorn.climate.coupled_climate_netw"
  },
  {
    "path": "docs/source/api/climate/coupled_tsonis.rst",
    "chars": 226,
    "preview": "\nclimate.coupled_tsonis\n======================\n\n.. automodule:: pyunicorn.climate.coupled_tsonis\n    :synopsis: complex "
  },
  {
    "path": "docs/source/api/climate/eventseries_climatenetwork.rst",
    "chars": 259,
    "preview": "\nclimate.eventseries_climatenetwork\n==================================\n\n.. automodule:: pyunicorn.climate.eventseries_cl"
  },
  {
    "path": "docs/source/api/climate/havlin.rst",
    "chars": 194,
    "preview": "\nclimate.havlin\n==============\n\n.. automodule:: pyunicorn.climate.havlin\n    :synopsis: complex climate networks\n    :me"
  },
  {
    "path": "docs/source/api/climate/hilbert.rst",
    "chars": 197,
    "preview": "\nclimate.hilbert\n===============\n\n.. automodule:: pyunicorn.climate.hilbert\n    :synopsis: complex climate networks\n    "
  },
  {
    "path": "docs/source/api/climate/map_plots.rst",
    "chars": 270,
    "preview": "\nclimate.map_plot\n=================\n\n.. automodule:: pyunicorn.climate.map_plot\n    :synopsis: spatially embedded comple"
  },
  {
    "path": "docs/source/api/climate/mutual_info.rst",
    "chars": 209,
    "preview": "\nclimate.mutual_info\n===================\n\n.. automodule:: pyunicorn.climate.mutual_info\n    :synopsis: complex climate n"
  },
  {
    "path": "docs/source/api/climate/partial_correlation.rst",
    "chars": 233,
    "preview": "\nclimate.partial_correlation\n===========================\n\n.. automodule:: pyunicorn.climate.partial_correlation\n    :syn"
  },
  {
    "path": "docs/source/api/climate/rainfall.rst",
    "chars": 200,
    "preview": "\nclimate.rainfall\n================\n\n.. automodule:: pyunicorn.climate.rainfall\n    :synopsis: complex climate networks\n "
  },
  {
    "path": "docs/source/api/climate/spearman.rst",
    "chars": 200,
    "preview": "\nclimate.spearman\n================\n\n.. automodule:: pyunicorn.climate.spearman\n    :synopsis: complex climate networks\n "
  },
  {
    "path": "docs/source/api/climate/tsonis.rst",
    "chars": 194,
    "preview": "\nclimate.tsonis\n==============\n\n.. automodule:: pyunicorn.climate.tsonis\n    :synopsis: complex climate networks\n    :me"
  },
  {
    "path": "docs/source/api/core/data.rst",
    "chars": 248,
    "preview": "\ncore.data\n=========\n\n.. automodule:: pyunicorn.core.data\n    :synopsis: spatially embedded complex networks, multivaria"
  },
  {
    "path": "docs/source/api/core/geo_grid.rst",
    "chars": 260,
    "preview": "\ncore.geo_grid\n=============\n\n.. automodule:: pyunicorn.core.geo_grid\n    :synopsis: spatially embedded complex networks"
  },
  {
    "path": "docs/source/api/core/geo_network.rst",
    "chars": 269,
    "preview": "\ncore.geo_network\n================\n\n.. automodule:: pyunicorn.core.geo_network\n    :synopsis: spatially embedded complex"
  },
  {
    "path": "docs/source/api/core/grid.rst",
    "chars": 248,
    "preview": "\ncore.grid\n=========\n\n.. automodule:: pyunicorn.core.grid\n    :synopsis: spatially embedded complex networks, multivaria"
  },
  {
    "path": "docs/source/api/core/interacting_networks.rst",
    "chars": 296,
    "preview": "\ncore.interacting_networks\n=========================\n\n.. automodule:: pyunicorn.core.interacting_networks\n    :synopsis:"
  },
  {
    "path": "docs/source/api/core/netcdf_dictionary.rst",
    "chars": 243,
    "preview": "\ncore.netcdf_dictionary\n======================\n\n.. automodule:: pyunicorn.core.netcdf_dictionary\n    :synopsis: NetCDF <"
  },
  {
    "path": "docs/source/api/core/network.rst",
    "chars": 223,
    "preview": "\ncore.network\n============\n\n.. automodule:: pyunicorn.core.network\n    :synopsis: advanced statistics and models for gen"
  },
  {
    "path": "docs/source/api/core/resistive_network.rst",
    "chars": 219,
    "preview": "\ncore.resistive_network\n======================\n\n.. automodule:: pyunicorn.core.resistive_network\n    :synopsis: resistan"
  },
  {
    "path": "docs/source/api/core/spatial_network.rst",
    "chars": 281,
    "preview": "\ncore.spatial_network\n====================\n\n.. automodule:: pyunicorn.core.spatial_network\n    :synopsis: spatially embe"
  },
  {
    "path": "docs/source/api/eventseries/event_series.rst",
    "chars": 249,
    "preview": "\neventseries.event_series\n========================\n\n.. automodule:: pyunicorn.eventseries.event_series\n    :synopsis: ev"
  },
  {
    "path": "docs/source/api/funcnet/coupling_analysis.rst",
    "chars": 296,
    "preview": "\nfuncnet.coupling_analysis\n=========================\n\n.. automodule:: pyunicorn.funcnet.coupling_analysis\n    :synopsis:"
  },
  {
    "path": "docs/source/api/funcnet/coupling_analysis_pure_python.rst",
    "chars": 332,
    "preview": "\nfuncnet.coupling_analysis_pure_python\n=====================================\n\n.. automodule:: pyunicorn.funcnet.coupling"
  },
  {
    "path": "docs/source/api/timeseries/cross_recurrence_plot.rst",
    "chars": 283,
    "preview": "\ntimeseries.cross_recurrence_plot\n================================\n\n.. automodule:: pyunicorn.timeseries.cross_recurrenc"
  },
  {
    "path": "docs/source/api/timeseries/inter_system_recurrence_network.rst",
    "chars": 313,
    "preview": "\ntimeseries.inter_system_recurrence_network\n==========================================\n\n.. automodule:: pyunicorn.timese"
  },
  {
    "path": "docs/source/api/timeseries/joint_recurrence_network.rst",
    "chars": 292,
    "preview": "\ntimeseries.joint_recurrence_network\n===================================\n\n.. automodule:: pyunicorn.timeseries.joint_rec"
  },
  {
    "path": "docs/source/api/timeseries/joint_recurrence_plot.rst",
    "chars": 283,
    "preview": "\ntimeseries.joint_recurrence_plot\n================================\n\n.. automodule:: pyunicorn.timeseries.joint_recurrenc"
  },
  {
    "path": "docs/source/api/timeseries/recurrence_network.rst",
    "chars": 274,
    "preview": "\ntimeseries.recurrence_network\n=============================\n\n.. automodule:: pyunicorn.timeseries.recurrence_network\n  "
  },
  {
    "path": "docs/source/api/timeseries/recurrence_plot.rst",
    "chars": 265,
    "preview": "\ntimeseries.recurrence_plot\n==========================\n\n.. automodule:: pyunicorn.timeseries.recurrence_plot\n    :synops"
  },
  {
    "path": "docs/source/api/timeseries/surrogates.rst",
    "chars": 276,
    "preview": "\ntimeseries.surrogates\n=====================\n\n.. automodule:: pyunicorn.timeseries.surrogates\n    :synopsis: spatially e"
  },
  {
    "path": "docs/source/api/timeseries/visibility_graph.rst",
    "chars": 268,
    "preview": "\ntimeseries.visibility_graph\n===========================\n\n.. automodule:: pyunicorn.timeseries.visibility_graph\n    :syn"
  },
  {
    "path": "docs/source/api/utils/mpi.rst",
    "chars": 183,
    "preview": "\nutils.mpi\n=========\n\n.. automodule:: pyunicorn.utils.mpi\n    :synopsis: parallelization using mpi4py\n    :members:\n    "
  },
  {
    "path": "docs/source/api/utils/navigator.rst",
    "chars": 33,
    "preview": "\nutils.navigator\n===============\n"
  },
  {
    "path": "docs/source/api_doc.rst",
    "chars": 1279,
    "preview": "\nAPI\n===\n\n:Release: |release|\n:Date: |today|\n\n``pyunicorn`` consists of six subpackages, where the ``core`` and\n``utils."
  },
  {
    "path": "docs/source/changelog.rst",
    "chars": 33,
    "preview": "\n.. include:: ../../CHANGELOG.rst"
  },
  {
    "path": "docs/source/conf.py",
    "chars": 5682,
    "preview": "# pyunicorn documentation build configuration file, created by\n# sphinx-quickstart on Thu Feb 23 19:15:07 2017.\n#\n# This"
  },
  {
    "path": "docs/source/contact.rst",
    "chars": 182,
    "preview": "\nContact\n=======\n\n.. include:: ../../README.rst\n    :start-after: (3 clause).\n    :end-before: Getting Started\n\n.. inclu"
  },
  {
    "path": "docs/source/development.rst",
    "chars": 67,
    "preview": "\n.. include:: ../../README.rst\n    :start-after: Jupyter notebooks."
  },
  {
    "path": "docs/source/download.rst",
    "chars": 86,
    "preview": "\n.. include:: ../../README.rst\n    :start-after: others.\n    :end-before: Development\n"
  },
  {
    "path": "docs/source/examples/modules/mpi/network_large.py",
    "chars": 186,
    "preview": "from pyunicorn import Network, mpi\n\n\ndef master():\n    net = Network.Model(\"BarabasiAlbert\", n_nodes=1000, n_links_each="
  },
  {
    "path": "docs/source/examples/modules/mpi/network_mc.py",
    "chars": 363,
    "preview": "from pyunicorn import Network, mpi\n\n\ndef do_one():\n    net = Network.Model(\"BarabasiAlbert\", n_nodes=100, n_links_each=1"
  },
  {
    "path": "docs/source/examples/modules/mpi/network_scan_no_comm.py",
    "chars": 253,
    "preview": "import numpy\nfrom pyunicorn import Network, mpi\n\noffset = 10\nn_max = 1000\ns = 0\nn = mpi.rank + offset\nwhile n <= n_max +"
  },
  {
    "path": "docs/source/examples/modules/timeseries/recurrence_network.py",
    "chars": 191,
    "preview": "import numpy as np\nfrom pyunicorn.timeseries import RecurrenceNetwork\n\nx = np.sin(np.linspace(0, 10 * np.pi, 1000))\nnet "
  },
  {
    "path": "docs/source/examples/tutorials/ClimateNetworks.ipynb",
    "chars": 224490,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"c79b8e2b\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Tutorial: Cl"
  },
  {
    "path": "docs/source/examples/tutorials/CoupledClimateNetworks.ipynb",
    "chars": 299185,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"9b3f935f\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Tutorial: Co"
  },
  {
    "path": "docs/source/examples/tutorials/EventSeriesAnalysis.ipynb",
    "chars": 21337,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"12877375\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Tutorial: Ev"
  },
  {
    "path": "docs/source/examples/tutorials/RecurrenceNetworks.ipynb",
    "chars": 565551,
    "preview": "{\n \"cells\": [\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"id\": \"d35172b4\",\n   \"metadata\": {},\n   \"source\":"
  },
  {
    "path": "docs/source/examples/tutorials/VisibilityGraphs.ipynb",
    "chars": 814386,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"id\": \"6154b988\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Tutorial: Vi"
  },
  {
    "path": "docs/source/index.rst",
    "chars": 427,
    "preview": "\n============\nIntroduction\n============\n\n.. include:: ../../README.rst\n    :start-after:   :target: https://zenodo.org/b"
  },
  {
    "path": "docs/source/license.rst",
    "chars": 55,
    "preview": "\nLicense\n=======\n\n.. literalinclude:: ../../LICENSE.txt"
  },
  {
    "path": "docs/source/methods.rst",
    "chars": 5618,
    "preview": "\nPackage Overview\n================\n\nA brief introduction to the methods, measures and algorithms provided by\n``pyunicorn"
  },
  {
    "path": "docs/source/publications.rst",
    "chars": 22950,
    "preview": "\nPublications\n############\n\nReferences to peer-reviewed publications, theses and reports describing in\ndetail and applyi"
  },
  {
    "path": "docs/source/sitemap.rst",
    "chars": 181,
    "preview": "\nSitemap\n=======\n\n.. toctree::\n    :maxdepth: 3\n\n    index\n    download\n    methods\n    tutorials\n    api_doc\n    public"
  },
  {
    "path": "docs/source/tutorials.rst",
    "chars": 438,
    "preview": "\nTutorials\n=========\n\nThe tutorials are designed to be self-explanatory, and are set up as Jupyter\nnotebooks that can be"
  },
  {
    "path": "pyproject.toml",
    "chars": 5041,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "setup.py",
    "chars": 1853,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/__init__.py",
    "chars": 951,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/__init__.py",
    "chars": 1681,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/_ext/__init__.py",
    "chars": 654,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/_ext/numerics.pyx",
    "chars": 2730,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/climate_data.py",
    "chars": 17828,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/climate_network.py",
    "chars": 27366,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/coupled_climate_network.py",
    "chars": 25229,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/coupled_tsonis.py",
    "chars": 7254,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/eventseries_climatenetwork.py",
    "chars": 10800,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/havlin.py",
    "chars": 11244,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/hilbert.py",
    "chars": 8050,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/map_plot.py",
    "chars": 4125,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/mutual_info.py",
    "chars": 10923,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/partial_correlation.py",
    "chars": 4722,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/rainfall.py",
    "chars": 10220,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/spearman.py",
    "chars": 5256,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/climate/tsonis.py",
    "chars": 11428,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/core/__init__.py",
    "chars": 1417,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/core/_ext/__init__.py",
    "chars": 654,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/core/_ext/numerics.pyx",
    "chars": 23243,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/core/_ext/types.pxd",
    "chars": 1214,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/core/_ext/types.py",
    "chars": 1091,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/core/cache.py",
    "chars": 12705,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/core/data.py",
    "chars": 28433,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/core/geo_grid.py",
    "chars": 18342,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/core/geo_network.py",
    "chars": 32161,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/core/grid.py",
    "chars": 13190,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/core/interacting_networks.py",
    "chars": 74555,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/core/netcdf_dictionary.py",
    "chars": 9777,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/core/network.py",
    "chars": 160423,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/core/resistive_network.py",
    "chars": 29542,
    "preview": "# # Copyright (C) 2014 Paul Schultz and the SWIPO Project\n#\n# Authors (this file):\n#   Stefan Schinkel <stefan.schinkel@"
  },
  {
    "path": "src/pyunicorn/core/spatial_network.py",
    "chars": 26837,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/eventseries/__init__.py",
    "chars": 1078,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/eventseries/event_series.py",
    "chars": 49184,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/funcnet/__init__.py",
    "chars": 842,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/funcnet/_ext/__init__.py",
    "chars": 654,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/funcnet/_ext/numerics.pyx",
    "chars": 8068,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/funcnet/coupling_analysis.py",
    "chars": 28804,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/funcnet/coupling_analysis_pure_python.py",
    "chars": 27129,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/timeseries/__init__.py",
    "chars": 2228,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/timeseries/_ext/__init__.py",
    "chars": 654,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/timeseries/_ext/numerics.pyx",
    "chars": 30312,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/timeseries/cross_recurrence_plot.py",
    "chars": 13663,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/timeseries/inter_system_recurrence_network.py",
    "chars": 15056,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/timeseries/joint_recurrence_network.py",
    "chars": 9482,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/timeseries/joint_recurrence_plot.py",
    "chars": 13498,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/timeseries/recurrence_network.py",
    "chars": 13609,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/timeseries/recurrence_plot.py",
    "chars": 55576,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/timeseries/surrogates.py",
    "chars": 26898,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/timeseries/visibility_graph.py",
    "chars": 10661,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/utils/__init__.py",
    "chars": 695,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/utils/mpi.py",
    "chars": 19806,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "src/pyunicorn/version.py",
    "chars": 731,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/conftest.py",
    "chars": 1806,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_climate/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "tests/test_climate/test_climate_data.py",
    "chars": 4293,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_climate/test_climate_network.py",
    "chars": 4613,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_climate/test_coupled_climate_network.py",
    "chars": 1088,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_climate/test_eventseries_climatenetwork.py",
    "chars": 2977,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_climate/test_map_plot.py",
    "chars": 1927,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_climate/test_tsonis.py",
    "chars": 4140,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_core/ResistiveNetwork_utils.py",
    "chars": 2466,
    "preview": "# Copyright (C) 2014 SWIPO Project\n#\n# Authors (this file):\n#   Stefan Schinkel <stefan.schinkel@gmail.com>\n\n\"\"\"\nUtils n"
  },
  {
    "path": "tests/test_core/TestResistiveNetwork-circuits.py",
    "chars": 6365,
    "preview": "# Copyright (C) 2014 SWIPO Project\n#\n# Authors (this file):\n#   Stefan Schinkel <stefan.schinkel@gmail.com>\n\"\"\"\nProvides"
  },
  {
    "path": "tests/test_core/TestResistiveNetwork-complexInput.py",
    "chars": 1114,
    "preview": "# Copyright (C) 2014 SWIPO Project\n#\n# Authors (this file):\n#   Stefan Schinkel <stefan.schinkel@gmail.com>\n\"\"\"\nProvides"
  },
  {
    "path": "tests/test_core/TestResistiveNetwork-cython.py",
    "chars": 1979,
    "preview": "# Copyright (C) 2014 SWIPO Project\n#\n# Authors (this file):\n#   Stefan Schinkel <stefan.schinkel@gmail.com>\n\"\"\"\nWeave te"
  },
  {
    "path": "tests/test_core/TestResistiveNetwork-types.py",
    "chars": 376,
    "preview": "# Copyright (C) 2014 SWIPO Project\n#\n# Authors (this file):\n#   Stefan Schinkel <stefan.schinkel@gmail.com>\n\"\"\"\nProvides"
  },
  {
    "path": "tests/test_core/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "tests/test_core/test_cache.py",
    "chars": 15257,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_core/test_data.py",
    "chars": 5327,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_core/test_geo_grid.py",
    "chars": 4450,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_core/test_geo_network.py",
    "chars": 11208,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_core/test_grid.py",
    "chars": 3443,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_core/test_interacting_networks.py",
    "chars": 16637,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_core/test_network.py",
    "chars": 35076,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_core/test_resistive_networks.py",
    "chars": 6765,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_core/test_spatial_network.py",
    "chars": 3968,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_eventseries/test_event_series.py",
    "chars": 22521,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_funcnet/test_coupling_analysis.py",
    "chars": 7743,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_funcnet/test_coupling_analysis_pure_python.py",
    "chars": 10168,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_generic.py",
    "chars": 3023,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_timeseries/test_joint_recurrence_plot.py",
    "chars": 1892,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_timeseries/test_recurrence_plot.py",
    "chars": 9729,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tests/test_timeseries/test_timeseries.py",
    "chars": 12473,
    "preview": "# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn authors\n# URL: <https://ww"
  },
  {
    "path": "tools/update-copyright",
    "chars": 1393,
    "preview": "#! /usr/bin/env bash\n#\n# This file is part of pyunicorn.\n# Copyright (C) 2008--2026 Jonathan F. Donges and pyunicorn aut"
  }
]

// ... and 1 more files (download for full content)

About this extraction

This page contains the full source code of the pik-copan/pyunicorn GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 157 files (3.0 MB), approximately 795.6k tokens, and a symbol index with 1082 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!