Skip to main content

Fast python interface to the linux kernel reed solomon libraries

Project description

pyreedsolomon

A high performance Python interface to the linux kernel Reed Solomon libraries

Requirements

Userspace interface to the kernel Reed Solomon libraries and numpy Source and build instructions on https://github.com/tierney/reed-solomon

Recommendations for building the C-libraries:

To allow for symbol sizes larger than 8 bits uncomment in configure.ac:

AC_DEFINE(CONFIG_REED_SOLOMON_ENC16, 1, Reed Solomon encoding word length)
AC_DEFINE(CONFIG_REED_SOLOMON_DEC16, 1, Reed Solomon decoding word length)

configure with --prefix=/usr/ or add the location of librs.so is in your library path (LD_LIBRARY_PATH)

Installation

pip install pyreedsolomon

Usage

This library provides fast methods where the user needs to allocate the buffers and handle padding as well as easy-to-use methods that have a slightly lower performance

import pyreedsolomon
import numpy as np

rs_dr = pyreedsolomon.Reed_Solomon(8,223,255,0x11D,0,1,32)

data = np.random.randint(0,256,150).astype(np.uint8)

data_enc = rs_dr.encode(data)

# create a few errors
err_idx = [23,53,12,97,102, 200, 250]


data_enc[err_idx] = 255

data_dec, n_errors = rs_dr.decode(data_enc)

verify = np.all(data_dec[-len(data):]==data)

print(f"Decoding succes: {verify}. errors corrected {n_errors}")

For more examples including how to use the fast encoder and decoder that omits variable checking, check tests/bench.py

Performance

Performance comparison of pyreedsolomon with different input data types and comparison to unireedsolomon and reedsolo Input data types supported:

  • numpy.ndarray
  • list
  • bytes
  • bytearray

Test run on Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz

RS (973, 935, 10) -- encoding and decoding 1000 runs

test name encoding decoding num errors
dtype numpy.ndarray 0.081 s 0.081 ms each 0.077 s 0.077 ms each 0
dtype list 0.173 s 0.173 ms each 0.147 s 0.147 ms each 0
dtype bytearray 0.082 s 0.082 ms each 0.079 s 0.079 ms each 0
dtype bytes 0.080 s 0.080 ms each 0.078 s 0.078 ms each 0
fast 0.076 s 0.076 ms each 0.073 s 0.073 ms each 0
py unireedsolomon 10.175 s 10.175 ms each 8.111 s 8.111 ms each 0

RS (255, 223, 8) -- encoding and decoding 10000 runs

test name encoding decoding num errors
dtype numpy.ndarray 0.286 s 0.029 ms each 0.319 s 0.032 ms each 0
dtype list 0.475 s 0.048 ms each 0.542 s 0.054 ms each 0
dtype bytearray 0.277 s 0.028 ms each 0.356 s 0.036 ms each 0
dtype bytes 0.272 s 0.027 ms each 0.328 s 0.033 ms each 0
fast 0.232 s 0.023 ms each 0.280 s 0.028 ms each 0
py unireedsolomon 13.396 s 1.340 ms each 13.963 s 1.396 ms each 0
py reedsolo 12.086 s 1.209 ms each 24.035 s 2.404 ms each 0

RS (15, 11, 4) -- encoding and decoding 100000 runs

test name encoding decoding num errors
dtype numpy.ndarray 1.365 s 0.014 ms each 1.453 s 0.015 ms each 0
dtype list 1.759 s 0.018 ms each 1.900 s 0.019 ms each 0
dtype bytearray 1.452 s 0.015 ms each 1.613 s 0.016 ms each 0
dtype bytes 1.409 s 0.014 ms each 1.521 s 0.015 ms each 0
fast 1.069 s 0.011 ms each 1.015 s 0.010 ms each 0
py unireedsolomon 2.626 s 0.026 ms each 4.015 s 0.040 ms each 0
py reedsolo 1.991 s 0.020 ms each 2.753 s 0.028 ms each 0

image image image

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

pyreedsolomon-1.0.0.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

pyreedsolomon-1.0.0-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file pyreedsolomon-1.0.0.tar.gz.

File metadata

  • Download URL: pyreedsolomon-1.0.0.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.24.0 setuptools/52.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.6

File hashes

Hashes for pyreedsolomon-1.0.0.tar.gz
Algorithm Hash digest
SHA256 58ebe6030a1102b02ceed0f6ef979d449bb3ee506e47504202d018008999af5e
MD5 36b9411b4430bdfd9afc523e17406e9f
BLAKE2b-256 6a6b44af9a76632b14328236c4b1637192b6a4e7224512155de38f170eee7007

See more details on using hashes here.

File details

Details for the file pyreedsolomon-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: pyreedsolomon-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.24.0 setuptools/52.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.8.6

File hashes

Hashes for pyreedsolomon-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2ac0d58a0a36fde9af666210736947315c6327c65d493d722766d081e5a16bf8
MD5 f813a8eef9b399d7cf8a7b82845ef74d
BLAKE2b-256 cd8c83a3521f7eb94b69bb488d017e0fe25f96b8a9e2b343d129d54a5df112a9

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