#pyo3 #python #rust

cfpyo3_rs_bindings

a collection of performant utilities

3 releases

new 0.1.12 Oct 15, 2024
0.1.11 Oct 9, 2024
0.1.10 Sep 30, 2024

#652 in Algorithms

Download history 142/week @ 2024-09-28 175/week @ 2024-10-05 195/week @ 2024-10-12

512 downloads per month

Custom license

155KB
3.5K SLoC

carefree-pyo3

cfpyo3 is a collection of performant utilities.

Installation

carefree-pyo3 requires:

  • Python 3.8 or higher.
  • numpy < 2.x, because currently rust numpy doesn't support numpy 2.x.
pip install carefree-pyo3

Test

pytest

Benchmark (Rust)

cargo bench -F criterion -p cfpyo3_rs_core -- --verbose

Architecture

This project is divided into four parts - looks clumsy, but I'll introduce them and explain their necessity.

cfpyo3_rs_core

This is the Rust core of the project, and is meant to be responsible for the heavy lifting. Its necessity is almost self-explanatory.

cfpyo3_rs_bindings

This one looks redundant at first glance, as we already have cfpyo3_rs_py. Initially this member did not exist, until I find some bindings in cfpyo3_rs_py very useful, want to reuse them, and failed because:

  • It is not an rlib.
  • Even I managed to make it an rlib, it's just not good to import the whole package because cfpyo3_rs_py itself is exposing lots of APIs to Python.

Another choice is to put these useful bindings in cfpyo3_rs_core, but then GitHub CI cannot build it for whatever reason.

So at last, this member is born.

cfpyo3_rs_py

This is the 'direct' Python bindings of this project. It is just a REALLY thin wrapper around cfpyo3_rs_core and cfpyo3_rs_bindings, and is responsible for exposing the APIs to Python.

cfpyo3

This is the Python package that users will interact with. It is a relatively thin wrapper that dispatches the calls to cfpyo3_rs_py.

A typical use case is the f32 & f64 dispatch.

Dependencies

~10–15MB
~213K SLoC