Skip to main content

A python graph library implemented in Rust

Project description

rustworkx

License Build Status Build Status Coverage Status Minimum rustc 1.70 DOI arXiv Zenodo

A high-performance, general-purpose graph library for Python, written in Rust.

Usage

Once installed, simply import rustworkx. All graph classes and top-level functions are accessible with a single import. To illustrate this, the following example calculates the shortest path between two nodes A and C in an undirected graph.

import rustworkx

# Rustworkx's undirected graph type.
graph = rustworkx.PyGraph()

# Each time add node is called, it returns a new node index
a = graph.add_node("A")
b = graph.add_node("B")
c = graph.add_node("C")

# add_edges_from takes tuples of node indices and weights,
# and returns edge indices
graph.add_edges_from([(a, b, 1.5), (a, c, 5.0), (b, c, 2.5)])

# Returns the path A -> B -> C
rustworkx.dijkstra_shortest_paths(graph, a, c, weight_fn=float)

Installing rustworkx

rustworkx is published on PyPI so on x86_64, i686, ppc64le, s390x, and aarch64 Linux systems, x86_64 on Mac OSX, and 32 and 64 bit Windows installing is as simple as running:

pip install rustworkx

This will install a precompiled version of rustworkx into your Python environment.

Installing on a platform without precompiled binaries

If there are no precompiled binaries published for your system you'll have to build the package from source. However, to be able able to build the package from the published source package you need to have Rust >= 1.70 installed (and also cargo which is normally included with rust) You can use rustup (a cross platform installer for rust) to make this simpler, or rely on other installation methods. A source package is also published on pypi, so you still can also run the above pip command to install it. Once you have rust properly installed, running:

pip install rustworkx

will build rustworkx for your local system from the source package and install it just as it would if there was a prebuilt binary available.

[!NOTE]
To build from source you will need to ensure you have pip >=19.0.0 installed, which supports PEP-517, or that you have manually installed setuptools-rust prior to running pip install rustworkx. If you recieve an error about setuptools-rust not being found you should upgrade pip with pip install -U pip or manually install setuptools-rust with pip install setuptools-rust and try again.

Optional dependencies

If you're planning to use the rustworkx.visualization module you will need to install optional dependencies to use the functions. The matplotlib based drawer function rustworkx.visualization.mpl_draw requires that the matplotlib library is installed. This can be installed with pip install matplotlib or when you're installing rustworkx with pip install 'rustworkx[mpl]'. If you're going to use the graphviz based drawer function rustworkx.visualization.graphviz_drawer first you will need to install graphviz, instructions for this can be found here: https://graphviz.org/download/#executable-packages. Then you will need to install the pillow Python library. This can be done either with pip install pillow or when installing rustworkx with pip install 'rustworkx[graphviz]'.

If you would like to install all the optional Python dependencies when you install rustworkx you can use pip install 'rustworkx[all]' to do this.

Authors and Citation

rustworkx is the work of many people who contribute to the project at different levels. If you use rustworkx in your research, please cite our paper as per the included BibTeX file.

Community

Besides Github interactions (such as opening issues) there are two locations available to talk to other rustworkx users and developers. The first is a public Slack channel in the Qiskit workspace, #rustworkx. You can join the Qiskit Slack workspace here. Additionally, there is an IRC channel #rustworkx on the OFTC IRC network

Building from source

The first step for building rustworkx from source is to clone it locally with:

git clone https://github.com/Qiskit/rustworkx.git

rustworkx uses PyO3 and setuptools-rust to build the python interface, which enables using standard python tooling to work. So, assuming you have rust installed, you can easily install rustworkx into your python environment using pip. Once you have a local clone of the repo, change your current working directory to the root of the repo. Then, you can install rustworkx into your python env with:

pip install .

Assuming your current working directory is still the root of the repo. Otherwise you can run:

pip install $PATH_TO_REPO_ROOT

which will install it the same way. Then rustworkx is installed in your local python environment. There are 2 things to note when doing this though, first if you try to run python from the repo root using this method it will not work as you expect. There is a name conflict in the repo root because of the local python package shim used in building the package. Simply run your python scripts or programs using rustworkx outside of the repo root. The second issue is that any local changes you make to the rust code will not be reflected live in your python environment, you'll need to recompile rustworkx by rerunning pip install to have any changes reflected in your python environment.

Develop Mode

If you'd like to build rustworkx in debug mode and use an interactive debugger while working on a change you can use python setup.py develop to build and install rustworkx in develop mode. This will build rustworkx without optimizations and include debuginfo which can be handy for debugging. Do note that installing rustworkx this way will be significantly slower then using pip install and should only be used for debugging/development.

[!TIP] It's worth noting that pip install -e does not work, as it will link the python packaging shim to your python environment but not build the rustworkx binary. If you want to build rustworkx in debug mode you have to use python setup.py develop.

Project history

Rustworkx was originally called retworkx and was created initially to be a replacement for Qiskit's previous (and current) NetworkX usage (hence the original name). The project was originally started to build a faster directed graph to use as the underlying data structure for the DAG at the center of qiskit's transpiler. However, since it's initial introduction the project has grown substantially and now covers all applications that need to work with graphs which includes Qiskit.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rustworkx-0.15.0.tar.gz (342.2 kB view details)

Uploaded Source

Built Distributions

rustworkx-0.15.0-cp38-abi3-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.8+ Windows x86-64

rustworkx-0.15.0-cp38-abi3-win32.whl (1.7 MB view details)

Uploaded CPython 3.8+ Windows x86

rustworkx-0.15.0-cp38-abi3-musllinux_1_1_x86_64.whl (2.0 MB view details)

Uploaded CPython 3.8+ musllinux: musl 1.1+ x86-64

rustworkx-0.15.0-cp38-abi3-musllinux_1_1_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.8+ musllinux: musl 1.1+ ARM64

rustworkx-0.15.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.8+ manylinux: glibc 2.17+ x86-64

rustworkx-0.15.0-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl (3.6 MB view details)

Uploaded CPython 3.8+ manylinux: glibc 2.17+ s390x

rustworkx-0.15.0-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (2.0 MB view details)

Uploaded CPython 3.8+ manylinux: glibc 2.17+ ppc64le

rustworkx-0.15.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.9 MB view details)

Uploaded CPython 3.8+ manylinux: glibc 2.17+ ARM64

rustworkx-0.15.0-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (2.0 MB view details)

Uploaded CPython 3.8+ manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

rustworkx-0.15.0-cp38-abi3-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded CPython 3.8+ macOS 11.0+ ARM64

rustworkx-0.15.0-cp38-abi3-macosx_10_12_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.8+ macOS 10.12+ x86-64

File details

Details for the file rustworkx-0.15.0.tar.gz.

File metadata

  • Download URL: rustworkx-0.15.0.tar.gz
  • Upload date:
  • Size: 342.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for rustworkx-0.15.0.tar.gz
Algorithm Hash digest
SHA256 41a50586c48367c80eebc26809105c0c47db47b1d12a5078efa94d8d1f3850a4
MD5 1d4f0f19af8dde9904a648c35a13640a
BLAKE2b-256 35c5b03de0dced4516f306092000ae96d1d4eb32865f559ada21e7d5360cbd7b

See more details on using hashes here.

File details

Details for the file rustworkx-0.15.0-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: rustworkx-0.15.0-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for rustworkx-0.15.0-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 563ac93699d73fd2eb00d9bfe3c06c6c5bd1d8e588f0dff9e04708a0cc5685ac
MD5 b96e9a823f7740c3124c4235835bce3e
BLAKE2b-256 5dd416e92d132ae32892f4fd0c3dc1ffe456b8489e9d2982f4961212cd15b497

See more details on using hashes here.

File details

Details for the file rustworkx-0.15.0-cp38-abi3-win32.whl.

File metadata

  • Download URL: rustworkx-0.15.0-cp38-abi3-win32.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.8+, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for rustworkx-0.15.0-cp38-abi3-win32.whl
Algorithm Hash digest
SHA256 8eaeafc844df76bc13469d1876520049f226d108512f01b52672949912839325
MD5 458aad5ccf5a7bfb1703b1e302a70687
BLAKE2b-256 aa0af7da1b47ed068ef50910a341da6f00134fb90a779d9605a0a59e964e067f

See more details on using hashes here.

File details

Details for the file rustworkx-0.15.0-cp38-abi3-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for rustworkx-0.15.0-cp38-abi3-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 848cf180ce27ce8c985ec81e9bcba9c46ac01b9e11355a87aa16276b78385e13
MD5 1a3c5d0a277a0fbb4eb7d76f43ff2aa0
BLAKE2b-256 2e6f20d8d3cfecbf00ddf7252726fae00c5dbbbeca11bf636b0d3253d7e90d34

See more details on using hashes here.

File details

Details for the file rustworkx-0.15.0-cp38-abi3-musllinux_1_1_aarch64.whl.

File metadata

File hashes

Hashes for rustworkx-0.15.0-cp38-abi3-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 7572451d6a973395a82a2e8c5d726f8921e31d04634b38c508e64d8a1fb60f5c
MD5 34db26b64c0c7adf2c2cf83b6e18d2ac
BLAKE2b-256 40ecfd582568444fc07dfa56f9dbb76f67e23d06c2fbc24a68785f2b31c50876

See more details on using hashes here.

File details

Details for the file rustworkx-0.15.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rustworkx-0.15.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a1adf9f7241a2dacf20d89907ea2f719d3dda71835d7a2f5c9069083609168a3
MD5 80cd8f0cbe71564ed677cca16d60b960
BLAKE2b-256 4301a5e4609dbb411be24f5b40bde2dd1527b4a2a6085910d921030e4225aa6d

See more details on using hashes here.

File details

Details for the file rustworkx-0.15.0-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for rustworkx-0.15.0-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 0bc774e84528ca4a125e242a9ac3a2ed88bae2de274f4ab2757b9ad5bcda62e4
MD5 88fd300810a23c67c21b210af4ee0130
BLAKE2b-256 d0ecc8882d991ec2149068bce63996ce6ac6aeb83abf8ab602fb17fbcd977174

See more details on using hashes here.

File details

Details for the file rustworkx-0.15.0-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for rustworkx-0.15.0-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 4d79671bd49b8092260ede9c70a7c2df12054d46db297f28183e48166ee1fdbd
MD5 4172b27f14e2735b1895f76ce6750dd4
BLAKE2b-256 3f00a40d86b692156162c541a65c177aaffbc1979edcf61320288f28c1473d47

See more details on using hashes here.

File details

Details for the file rustworkx-0.15.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for rustworkx-0.15.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 032753a7b7a5f28e00aabaada0c549f1c95f36db59045078ee2401d67d03638e
MD5 71dd9856e448ef39d977177c3ec4ecf1
BLAKE2b-256 e62afe6975b6f9ab6f400ba3f8370a950533b9e80efc10143679aa447f6497bb

See more details on using hashes here.

File details

Details for the file rustworkx-0.15.0-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for rustworkx-0.15.0-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f29ab1fdf5c98d974362cc13e1c7fdd603cd3f774844a6ec6cdf0caf55a56df6
MD5 95a7c9f39224aa949550d8d6b1395e4b
BLAKE2b-256 1df30687e9141955fdbc87bb53d74b79d7de893becd4f7b21d5d40a3e03ef62c

See more details on using hashes here.

File details

Details for the file rustworkx-0.15.0-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustworkx-0.15.0-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5fd6f800692e104100548e8bcae58f09edf11e8010659e7e857a4726d8202d63
MD5 8dbf355e764ad502c77e0b0db7280205
BLAKE2b-256 dc10d721e9f9a3f538a66a294c40b58d8b83143defdda9117ca34503c4713d23

See more details on using hashes here.

File details

Details for the file rustworkx-0.15.0-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rustworkx-0.15.0-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d8d26d392680c4c81bd9da1fbdb531a4344f3edf01b583ee8a63ef1bf9a88e69
MD5 6f94bd3bc9e739e3960f8520bcb798a8
BLAKE2b-256 25761236cd6f6d1a0bf0c362f232c37bcbb1d15629b79b5dc3a81c0e53f88eca

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page