Skip to main content

PyRSB: a Cython-based Python interface to librsb

Project description

PyRSB

GPL enforced badge Build Status

librsb is a high performance sparse matrix library implementing the Recursive Sparse Blocks format, which is especially well suited for multiplications in iterative methods on very large sparse matrices.

PyRSB is a Cython-based Python interface to librsb.

On multicore machines, PyRSB can be several times faster than e.g. scipy.sparse.csr_matrix(). For an example how to invoke it with minimal overhead, see the advanced example.

So far, PyRSB is a prototype tested on Linux only. The librsb library instead is mature and well tested. Prospective PyRSB users and collaborators are welcome to contact me.

Features

The following functionality is implemented:

  • Initialization with rsb.rsb_matrix() styled as scipy.sparse.csr_matrix().
  • Conversion from scipy.sparse.csr_matrix().
  • Multiplication by vector/multivector.
  • Rows/columns through nr=a.shape()[0]/nr=a.shape()[1], or nr()/nc().
  • find(), find_block(), tril(), triu(), shape(), nnz.
  • print'able.
  • PyRSB-Specific: autotune(), do_print().
  • load from a Matrix Market file, e.g. rsb_matrix(bytes(filename,encoding='utf-8'))

Build and Use

  • If you want the Makefile to build librsb (in this directory): make all-local will attempt downloading librsb-1.2.0.9 from the web and building it here before building pyrsb. If the file is in place, it won't download it a second time. After that, make local-librsb-pyrsb (or make lp) will build pyrsb using local librsb, then run it. This method shall use the best compilation flags.
  • If you have librsb already installed: make shall build and test.
  • Make sure you have cython, scipy, numpy. installed.
  • If you don't have librsb installed you may want to try via pip pip install pyrsb
  • If you want to install librsb on Ubuntu or Debian: sudo apt-get install librsb-dev shall suffice. Other operating systems have librsb, too. Please check yours. Or check librsb's web site.
  • make test will test benchmark code using test.py (to compare speed to SciPy)
  • make b will also produce graphs (requires gnuplot)

Example Usage

# Example: demo1.py
"""
pyrsb demo
"""

import numpy
import scipy
from scipy.sparse import csr_matrix
from pyrsb import *

V = [11.0, 12.0, 22.0]
I = [0, 0, 1]
J = [0, 1, 1]
c = csr_matrix((V, (I, J)))
print(c)
# several constructor forms, as with csr_matrix:
a = rsb_matrix((V, (I, J)))
a = rsb_matrix((V, (I, J)), [3, 3])
a = rsb_matrix((V, (I, J)), sym="S")  # symmetric example
print(a)
a = rsb_matrix((4, 4))
a = rsb_matrix(c)
nrhs = 1  # set to nrhs>1 to multiply by multiple vectors at once
nr = a.shape[0]
nc = a.shape[1]
order = "F"
x = numpy.empty([nc, nrhs], dtype=rsb_dtype, order=order)
y = numpy.empty([nr, nrhs], dtype=rsb_dtype, order=order)
x[:, :] = 1.0
y[:, :] = 0.0
print(a)
print(x)
print(y)
# import rsb # import operators
# a.autotune() # makes only sense for large matrices
y = y + a * x
# equivalent to y=y+c*x
print(y)
del a

Example Advanced Usage

# Example: demo2.py
"""
pyrsb demo
"""

import numpy
import scipy
from scipy.sparse import csr_matrix
from pyrsb import *

V = [11.0, 12.0, 22.0]
I = [0, 0, 1]
J = [0, 1, 1]
a = rsb_matrix((V, (I, J)))

nrhs = 4  # set to nrhs>1 to multiply by multiple vectors at once
nr = a.shape[0]
nc = a.shape[1]

# Choose Fortran or "by columns" order here.
order = "F"
x = numpy.empty([nc, nrhs], dtype=rsb_dtype, order=order)
y = numpy.empty([nr, nrhs], dtype=rsb_dtype, order=order)
x[:, :] = 1.0
y[:, :] = 0.0
print(a)
print(x)
print(y)

# Autotuning example: use it if you need many multiplication iterations on huge matrices (>>1e6 nonzeroes).
# Here general (nrhs=1) case:
a.autotune()
# Here with all the autotuning parameters specified:
a.autotune(1.0,0,1,2.0,ord('N'),1.0,nrhs,ord('F'),1.0,False)

# Inefficient: reallocate y
y = y + a * x
# Inefficient: reallocate y
y += a * x

# Equivalent but more efficient: don't reallocate y
a._spmm(x,y)

print(y)

del a

License

GPLv3+

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

pyrsb-0.2.20210303.tar.gz (16.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyrsb-0.2.20210303-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64

pyrsb-0.2.20210303-cp39-cp39-manylinux2010_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64

pyrsb-0.2.20210303-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

pyrsb-0.2.20210303-cp38-cp38-manylinux2010_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

pyrsb-0.2.20210303-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.0 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

pyrsb-0.2.20210303-cp37-cp37m-manylinux2010_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

pyrsb-0.2.20210303-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (6.0 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64

pyrsb-0.2.20210303-cp36-cp36m-manylinux2010_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64

File details

Details for the file pyrsb-0.2.20210303.tar.gz.

File metadata

  • Download URL: pyrsb-0.2.20210303.tar.gz
  • Upload date:
  • Size: 16.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2

File hashes

Hashes for pyrsb-0.2.20210303.tar.gz
Algorithm Hash digest
SHA256 2a181f63a73289973b57c4d9864655f85a3d04ef0173e7f80be0a07bd5ef332b
MD5 77a4d980bdf3eab3fadc3914cd1ce580
BLAKE2b-256 50db47075b7acaaf739c55afb2726627fd5c696a5711e9877484c0d7e5d31a05

See more details on using hashes here.

File details

Details for the file pyrsb-0.2.20210303-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

  • Download URL: pyrsb-0.2.20210303-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
  • Upload date:
  • Size: 6.1 MB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.2

File hashes

Hashes for pyrsb-0.2.20210303-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 208f21c8dc273dfb4702a5fab52736727d4849d5a4d218d1860d7643e55c528c
MD5 8dcbfd9290d313a7d9656266f6d7e1f9
BLAKE2b-256 e8f043f2a0ad65707986d5e72d7e09e5b8beafa1c01e7d18d33a759e56c6d138

See more details on using hashes here.

File details

Details for the file pyrsb-0.2.20210303-cp39-cp39-manylinux2010_x86_64.whl.

File metadata

  • Download URL: pyrsb-0.2.20210303-cp39-cp39-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2

File hashes

Hashes for pyrsb-0.2.20210303-cp39-cp39-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 87951745a7e844144a50bc8bcecfcaf01e9044e7513452b3fea18162a8d33cfa
MD5 6d071a39235642670d25aa8d0c7852d1
BLAKE2b-256 aea30ae440029c96732f7683d558927e3400ebcc2f1bac1fa43abdb0a5a0e1e8

See more details on using hashes here.

File details

Details for the file pyrsb-0.2.20210303-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

  • Download URL: pyrsb-0.2.20210303-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
  • Upload date:
  • Size: 6.2 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.2

File hashes

Hashes for pyrsb-0.2.20210303-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 e382bd1391eac25fb0ba82a7697f139dd24707db7493a4589273aa72a28290b6
MD5 cfa73f200df70ff66208370b955558fc
BLAKE2b-256 1589e57bd837ae328b71b04626905ad2edbc2565d7e5fed2ef7eed93329e0188

See more details on using hashes here.

File details

Details for the file pyrsb-0.2.20210303-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: pyrsb-0.2.20210303-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2

File hashes

Hashes for pyrsb-0.2.20210303-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 5b444b249230e190ed7534c6c3c4e18581d8e1370ac0b710857cbe5b5b907468
MD5 a685f1b8bf63b5d873449dc5e73991d7
BLAKE2b-256 d32a4fec33ed19fa2e8c55d4df065f8b20cbc6560cc53f18f9587408caa976e9

See more details on using hashes here.

File details

Details for the file pyrsb-0.2.20210303-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

  • Download URL: pyrsb-0.2.20210303-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.2

File hashes

Hashes for pyrsb-0.2.20210303-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 f7a5b4cf5d26476cd084ad894e2826179fdc1b9a59f3f89fc5b51c622ea2e684
MD5 21e6587a2b32492d9b712fe3e88f2dcb
BLAKE2b-256 db00f6942ca9a22765efbc9f05b2a6020d463fdf6044c5715cf0f7c0c7178958

See more details on using hashes here.

File details

Details for the file pyrsb-0.2.20210303-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: pyrsb-0.2.20210303-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2

File hashes

Hashes for pyrsb-0.2.20210303-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 3856e15bb26bb94546d150e49fe43bd42e1126dbe90952637858a9619a46df5b
MD5 1c54d68919e403b6495d5eac004d7c98
BLAKE2b-256 7d8d891691d98dc37ea8c6a465db2d167687faa2963e7ab9f95550261304176e

See more details on using hashes here.

File details

Details for the file pyrsb-0.2.20210303-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

  • Download URL: pyrsb-0.2.20210303-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.2

File hashes

Hashes for pyrsb-0.2.20210303-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 113596c9387c46f2d5a00351b04bd8b4e15cbf1ff7a39bea179d8bd6fb4e280e
MD5 5da1e050e734b7262ba58ed72282bf06
BLAKE2b-256 18cd5930a08354a2ef014c7d62b87f1fb3f08540844a7eb289e3d1fe1297e940

See more details on using hashes here.

File details

Details for the file pyrsb-0.2.20210303-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: pyrsb-0.2.20210303-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.9.2

File hashes

Hashes for pyrsb-0.2.20210303-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 53b32cb2bc42c6926272aa4eb85ce0f145f6be568e6890b4484c537669aaee89
MD5 5598397ecb768f7a1b9e077a52ff379a
BLAKE2b-256 24e5883a0d85f644f76d8ec374d636312e704cda9fff9425197ff65bcb8988d9

See more details on using hashes here.

Supported by

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