Skip to main content

Icebug - Frozen Graph Analytics

Icebug is an open source library for high-performance graph analysis backed by read-only memory. Due to its heritage, it also supports network/graph analysis on read-write memory, but it can be 5x more CPU and 5x more memory efficient when using columnar memory such as Apache Arrow.

Its aim is to provide tools for the analysis of large networks in the size range from thousands to billions of edges. For this purpose, it implements efficient graph algorithms, many of them parallel to utilize multicore architectures. These are meant to compute standard measures of network analysis. Icebug is focused on scalability and comprehensiveness. Icebug is also a testbed for algorithm engineering and contains novel algorithms from recently published research (see list of publications below).

Icebug is a Python module. High-performance algorithms are written in C++ and exposed to Python via the Cython toolchain. Python in turn gives us the ability to work interactively and a rich environment of tools for data analysis and scientific computing. Furthermore, Icebug's core can be built and used as a native library if needed.

Requirements

You will need the following software to install Icebug as a python package:

  • A modern C++ compiler, e.g.: g++ (>= 8.1), clang++ (>= 6.0) or MSVC (>= 14.20)
  • OpenMP for parallelism (usually ships with the compiler)
  • Python3 (3.9 or higher is supported)
    • Development libraries for Python3. The package name depends on your distribution. Examples:
      • Debian/Ubuntu: apt-get install python3-dev
      • RHEL/CentOS: dnf install python3-devel
      • Windows: Use the official release installer from www.python.org
  • Pip
  • CMake version 3.6 or higher (Advised to use system packages if available. Alternative: pip3 install cmake)
  • Build system: Make or Ninja
  • Cython version 0.29 or higher (e.g., pip3 install cython)
  • Apache Arrow development libraries (libarrow-dev)

Install

In order to use Icebug, you can either install it via package managers or build the Python module from source.

Install via package manager

While the most recent version is in general available for all package managers, the number of older downloadable versions differ.

uv
uv pip install icebug

More system-specific information on how to install Icebug on Linux, macOS (both Intel and M1) and Windows-systems can be found here.

Building the Python module from source

git clone https://github.com/Ladybug-Memory/icebug icebug
cd icebug
python3 setup.py build_ext [-jX]
pip3 install -e .

The script will call cmake and ninja (make as fallback) to compile Icebug as a library, build the extensions and copy it to the top folder. By default, Icebug will be built with the amount of available cores in optimized mode. It is possible the add the option -jN the number of threads used for compilation.

Usage example

To get an overview and learn about Icebug's different functions/classes, have a look at our interactive notebooks-section, especially the Icebug UserGuide. Note: To view and edit the computed output from the notebooks, it is recommended to use Jupyter Notebook. This requires the prior installation of Icebug. You should really check that out before start working on your network analysis.

We also provide a Binder-instance of our notebooks. To access this service, you can either click on the badge at the top or follow this link. Disclaimer: Due to rebuilds of the underlying image, it can takes some time until your Binder instance is ready for usage.

If you only want to see in short how Icebug is used - the following example provides a glimpse at that. Here we generate a random hyperbolic graph with 100k nodes and compute its communities with the PLM method:

>>> import networkit as nk
>>> g = nk.generators.HyperbolicGenerator(1e5).generate()
>>> communities = nk.community.detectCommunities(g, inspect=True)
PLM(balanced,pc,turbo) detected communities in 0.14577102661132812 [s]
solution properties:
-------------------  -----------
# communities        4536
min community size      1
max community size   2790
avg. community size    22.0459
modularity              0.987243
-------------------  -----------

Icebug also offers two ways to load a graph from CSR format enabling zero-copy loading of large graphs using Arrow tables

>>> import pyarrow as pa
>>> from icebug_format import IcebugMemGraph
>>> nodes = pa.table({"id": pa.array([0, 1, 2], type=pa.int64())})
>>> rels  = pa.table({"source": pa.array([0, 1, 2], type=pa.int64()),
...                   "target": pa.array([1, 2, 0], type=pa.int64())})
>>> mem = IcebugMemGraph.from_arrow_tables(nodes, rels)
>>> g = nk.graph.Graph.fromIcebugMemGraph(mem)

# using fromCSR directly
>>> indices = pa.table({"target": pa.array([1, 2, 0], type=pa.int64())})
>>> indptr = pa.table({"row_ptr": pa.array([0, 1, 2, 3], type=pa.int64())})
>>> g = nk.graph.Graph.fromCSR(3, True, indices, indptr)

Note: Properties in IcebugMemGraph are pyarrow tables, so, node and edge tables could contain properties, whereas the fromCSR method only supports loading the graph structure, so no properties are supported. If the resolved CSR column is already a single uint64 chunk, fromIcebugMemGraph keeps it zero-copy; chunked columns are combined and integer columns are cast to uint64, which allocates.

Install the C++ Core only

In case you only want to work with Icebug's C++ core, you can either install it via package managers or build it from source.

Install C++ core via package manager

conda (channel conda-forge)
conda config --add channels conda-forge
conda install libicebug [-c conda-forge]
brew
brew install libicebug
spack
spack install libicebug

Building the C++ core from source

We recommend CMake and your preferred build system for building the C++ part of Icebug.

The following description shows how to use CMake in order to build the C++ Core only:

First you have to create and change to a build directory: (in this case named build)

mkdir build
cd build

Then call CMake to generate files for the make build system, specifying the directory of the root CMakeLists.txt file (e.g., ..). After this make is called to start the build process:

cmake ..
make -jX

To speed up the compilation with make a multi-core machine, you can append -jX where X denotes the number of threads to compile with.

Use NetworKit as a library

This paragraph explains how to use the Icebug core C++ library in case it has been built from source. For how to use it when installed via package managers, best refer to the official documentation (brew, conda, spack).

In order to use the previous compiled icebug library, you need to have it installed, and link it while compiling your project. Use these instructions to compile and install Icebug in /usr/local:

cmake ..
make -jX install

Once Icebug has been installed, you can use include directives in your C++-application as follows:

#include <icebug/graph/Graph.hpp>

You can compile your source as follows:

g++ my_file.cpp -licebug

Unit tests

Building and running Icebug unit tests is not mandatory. However, as a developer you might want to write and run unit tests for your code, or if you experience any issues with Icebug, you might want to check if Icebug runs properly. The unit tests can only be run from a clone or copy of the repository and not from a pip installation. In order to run the unit tests, you need to compile them first. This is done by setting the CMake NETWORKI_BUILD_TESTS flag to ON:

cmake -DNETWORKIT_BUILD_TESTS=ON ..

Unit tests are implemented using GTest macros such as TEST_F(CentralityGTest, testBetweennessCentrality). Single tests can be executed with:

./networkit_tests --gtest_filter=CentralityGTest.testBetweennessCentrality

Additionally, one can specify the level of the logs outputs by adding --loglevel <log_level>; supported log levels are: TRACE, DEBUG, INFO, WARN, ERROR, and FATAL.

Compiling with address/leak sanitizers

Sanitizers are great tools to debug your code. Icebug provides additional Cmake flags to enable address, leak, and undefined behavior sanitizers. To compile your code with sanitizers, set the CMake NETWORKIT_WITH_SANITIZERS to either address or leak:

cmake -DNETWORKIT_WITH_SANITIZERS=leak ..

By setting this flag to address, your code will be compiled with the address and the undefined sanitizers. Setting it to leak also adds the leak sanitizer.

Documentation

The most recent version of the documentation can be found online.

Contact

For questions regarding Icebug, have a look at our issues-section and see if there is already an open discussion. If not feel free to open a new issue. To stay updated about this project, subscribe to our mailing list.

Contributions

We encourage contributions to the Icebug source code. See the development guide for instructions. For support please contact the mailing list.

Credits

Icebug is a fork of NetworKit.

List of contributors can be found on the NetworKit website credits page.

External Code

The program source includes:

License

The source code of this program is released under the MIT License. We ask you to cite us if you use this code in your project (c.f. the publications section below and especially the technical report). Feedback is also welcome.

Publications

The Icebug publications page lists the publications on Icebug as a toolkit, on algorithms available in Icebug, and simply using Icebug. We ask you to cite the appropriate ones if you found Icebug useful for your own research.

Metadata

Release files for icebug 13.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for icebug 13.3
File Size Uploaded
icebug-13.3.tar.gz 7.6 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for icebug 13.3
File
icebug-13.3-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
icebug-13.3-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details
icebug-13.3-cp313-cp313-macosx_15_0_x86_64.whl CPython 3.13 CPython 3.13 macOS 15.0+ x86-64 Details
icebug-13.3-cp313-cp313-macosx_15_0_arm64.whl CPython 3.13 CPython 3.13 macOS 15.0+ ARM64 Details

Total release size: 136.4 MB

Release files / icebug-13.3.tar.gz

Download URL icebug-13.3.tar.gz
Size 7.6 MB
Tags Source
SHA-256 checksum
How to use checksums
335dffa3b218324c96c39f5eb4d3f310412c721342fab7dcc3276a453d57bd93
BLAKE2b-256 checksum
How to use checksums
adc44bab845a95a3d49117c922dd8ffbd24f5b4586059267a99e8ab3abb42694
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.

Transparency log

Release files / icebug-13.3-cp313-cp313-win_amd64.whl

Download URL icebug-13.3-cp313-cp313-win_amd64.whl
Size 58.3 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
4fdbb1143c7620dfd98852827ded2610b61474f454d90c798bf6ef84469b7e5f
BLAKE2b-256 checksum
How to use checksums
ca328385391b067ba810ec95696980187b8861816a9ba508ba5fd4b0302af006
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.

Transparency log

Release files / icebug-13.3-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL icebug-13.3-cp313-cp313-manylinux_2_28_x86_64.whl
Size 29.9 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
eec8c2edc57e114bfe1067a590fd06802b2fb56cbb8b560a802dac8513e551e1
BLAKE2b-256 checksum
How to use checksums
2bf5aaf2d7deb8a50110a7d7ca467131704e1b3de2f984bc36770f9b64beae53
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.

Transparency log

Release files / icebug-13.3-cp313-cp313-macosx_15_0_x86_64.whl

Download URL icebug-13.3-cp313-cp313-macosx_15_0_x86_64.whl
Size 20.9 MB
Tags CPython 3.13 macOS 15.0+ x86-64
SHA-256 checksum
How to use checksums
92f33d7cced495c5d5d70217961ed4416d3d44006c7a65587e289bfd2fd7bb1a
BLAKE2b-256 checksum
How to use checksums
b5c6c3663c9b9566162a5770a4a5848f6327fab36a09f12317e560b1a9e2d06d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.

Transparency log

Release files / icebug-13.3-cp313-cp313-macosx_15_0_arm64.whl

Download URL icebug-13.3-cp313-cp313-macosx_15_0_arm64.whl
Size 19.7 MB
Tags CPython 3.13 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
fc8686d421dde984d99882822942c2a3f7103414813fefffe1e0a475d23356de
BLAKE2b-256 checksum
How to use checksums
25b363d753476a2b33dbcfe7c1e25b3031c26117c1379337f2f21b4c01210356
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.

Transparency log

Release history Release notifications | RSS feed

13.4

26 release files

This release

13.3 This release

5 release files

13.2

26 release files

13.0

26 release files

12.9

26 release files

12.8

26 release files

12.7

26 release files

12.6

26 release files

12.5

26 release files

12.4

26 release files

12.3

26 release files

12.2

21 release files

12.1

21 release files

12.0

21 release files

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page