PyCyBase
GitHub Actions: ⛔ temporarily disabled — kept disabled until the GitHub Actions issue is resolved. See
.github/workflows/README.md. CI runs on the GitLab mirror pipeline while disabled.
Common C / Cython dual interfaces for Python HFT Projects.
Overview
Low-level allocator infrastructure shared across HFT projects:
- Allocator Protocol — Pluggable memory allocation with heap, shared-memory (SHM), and raw
mallocbackends. Ref-counting, vigilant mode, thread-safety controls. - Heap Allocator — In-process allocator with free-list reuse and auto-growing pages.
- SHM Allocator — POSIX shared-memory page allocator with fixed-address virtual region mapping for cross-process pointer stability.
- ByteMap — Fast xxHash3-backed hash maps for byte-string keys (ByteMap, ByteMapEx, bound variants).
- Intern String — FNV-1a-hashed string interning with SHM-backed cross-process pools. 1.7–2.2× speedup over Python
str.
Quick Start
from cbase.allocator_protocol import AllocatorProtocol, AP_SHARED
with AP_SHARED:
alloc = AllocatorProtocol(1024)
alloc.buf[0] = b'x'
from cbase.intern_string import POOL
aapl = POOL.istr("AAPL")
assert aapl is POOL.istr("AAPL") # Identity — string deduplication
from cbase.bytemap import ByteMap
bm = ByteMap()
bm[b"ticker"] = b"AAPL"
assert bm[b"ticker"] == b"AAPL"
Build & Install
PyCyBase is a Cython extension package — it cannot be used with pip install -e . (editable mode breaks Cython .pxd resolution for downstream projects).
POSIX (Linux / macOS)
# Build extensions in-place, then install
./build.sh -i
# Or equivalently:
make build && pip install -U . --no-build-isolation
# Or step by step:
python setup.py build_ext --inplace --verbose --force
pip install -U . --no-build-isolation
Build script reference:
| Command | Effect |
|---|---|
./build.sh |
Clean + build in-place |
./build.sh -i |
Clean + build + pip install . |
./build.sh -r |
Clean + build + force-reinstall |
./build.sh -c |
Clean only (no build) |
./build.sh -a |
Deep clean (remove .c and .so files) |
./build.sh -l |
List all compile-time macros |
./build.sh -v /path/to/venv |
Use a specific venv |
make or make build |
Clean + build |
make install |
Build + pip install . |
make reinstall |
Build + force-reinstall |
make list-args |
List compile-time macros |
Windows (NT)
# Local build
.\build.ps1 -VenvPath "C:\Users\...\venv_313"
# Remote build (from Linux host):
python nt_build.py
Compile-Time Macros
Override any macro at build time via environment variable:
DEBUG=1 ./build.sh # Enable debug mode
DEBUG=1 make build # Same via Makefile
List all available macros and defaults:
./build.sh -l # Auto-generates macros.json via probe.py
make list-args
python probe.py # Run the probe directly
Key macros (see macros.json for full list):
| Macro | Default | Description |
|---|---|---|
AP_ALLOC_VIGILANT |
1 |
Enable bounds/canary checks |
AP_ALLOC_WITH_LOCK |
1 |
Thread-safety via pthread mutex |
AP_ALLOC_WITH_SHM |
0 |
Default to SHM allocator |
AP_ALLOC_WITH_FREELIST |
1 |
Free-list reuse |
AP_HEAP_AUTOPAGE_CAPACITY |
64 KiB |
Default heap page size |
AP_HEAP_AUTOPAGE_CAPACITY_MAX |
16 MiB |
Max heap page size |
AP_HEAP_EXACT_BIN_COUNT |
8192 |
Exact 8-byte-granular free-list bins |
AP_HEAP_LARGE_BIN_COUNT |
9 |
Pow2-class free-list bins for large blocks |
AP_HEAP_PAGE_EXTEND_MAX |
128 MiB |
Max auto-page extension on bin miss |
AP_HEAP_EXACT_BIN_PROBE_COUNT |
2 |
Larger exact bins to probe before extending |
AP_SHM_AUTOPAGE_CAPACITY |
64 KiB |
Default SHM page size |
AP_SHM_ALLOCATOR_DEFAULT_REGION_SIZE |
128 GiB |
SHM virtual region |
AP_SHM_EXACT_BIN_COUNT |
8192 |
Exact 8-byte-granular free-list bins |
AP_SHM_PAGE_EXTEND_MAX |
128 MiB |
Max auto-page extension on bin miss |
Using get_include() in Downstream Projects
from setuptools import setup, Extension
from Cython.Build import cythonize
import cbase
ext = Extension(
"my_module",
sources=["my_module.pyx"],
include_dirs=cbase.get_include(),
)
setup(ext_modules=cythonize([ext]))
Modules
| Module | Description |
|---|---|
cbase.env |
EnvConfigContext — context manager for temporary config changes |
cbase.allocator_protocol |
AllocatorProtocol, AllocatorConfigContext, AP sentinels |
cbase.allocator_protocol.c_heap_allocator |
In-process heap allocator with free-list |
cbase.allocator_protocol.c_shm_allocator |
POSIX shared-memory page allocator |
cbase.bytemap.c_bytemap |
xxHash3-backed hash maps |
cbase.intern_string.c_intern_string |
FNV-1a-hashed string interning |
cbase.backports.pylong |
Python int ↔ 128-bit integer (uint128_t/int128_t) backport |
cbase.backports.pydict |
PyDict_Pop backport for pre-3.13 Python |
Documentation
pip install sphinx furo
cd docs
sphinx-build -M html . _build
# Or with the project venv:
~/Projects/venv_313/bin/sphinx-build -M html . _build
Open docs/_build/html/index.html.
Online: https://bolunhan.github.io/PyCyBase/
License
Proprietary.
Metadata
Release files for PyCyBase 0.2.10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 67.7 MB
Release files / pycybase-0.2.10-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pycybase-0.2.10-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 8.6 MB |
| Tags | CPython 3.15 CPython 3.15 free-threading Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
ab3d135f6902b7dd2a70643ec83c070e937e4c4fa22984e4af6a414e1839986d
|
|
BLAKE2b-256 checksum How to use checksums |
b11ae18a289680883f055521f96a82d0092e43280d9771f9979539bc5033f21e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / pycybase-0.2.10-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pycybase-0.2.10-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 8.5 MB |
| Tags | CPython 3.15 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f440412c7cfea8cf37d133fd709ff6d0e83b1d0b44eced311261011aab97db82
|
|
BLAKE2b-256 checksum How to use checksums |
5239657e06f943e3f5c5f9d71a27b147ae7fbf9795f3ddbfb59efb19630f48e3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / pycybase-0.2.10-cp314-cp314t-win_amd64.whl
| Download URL | pycybase-0.2.10-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 4.2 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
959edf99f7fed3615fe54a3a6d873f608fa2e514c0d3a15c66ffeed9b51632c7
|
|
BLAKE2b-256 checksum How to use checksums |
56a2839c1523ef7a881613a3fb988dcac3d971a46955f090d5fd4cbd25617644
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.2
|
Release files / pycybase-0.2.10-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pycybase-0.2.10-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 8.6 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
51776ddc29b8ac8bb45a7498f1804c20a8dbb9535e9312e4815d9039388db862
|
|
BLAKE2b-256 checksum How to use checksums |
c10ca8528a27bf9ef2c7989b188069488201465cd4c001e25e45ec65f0dd6e55
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / pycybase-0.2.10-cp314-cp314-win_amd64.whl
| Download URL | pycybase-0.2.10-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b2e7e1c02826b992ac98b14e2f6cb70c1409215b465c5310fc364dac8de75ded
|
|
BLAKE2b-256 checksum How to use checksums |
e516c1670f4d4cb0efa013d625d9e45cacf97e2c4bf30baaf133ac1add4e170d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.2
|
Release files / pycybase-0.2.10-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pycybase-0.2.10-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 8.5 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
4a4e79fc1a0a27a340369e3fbd8504f1a30a079ef48be047b32fd18775207480
|
|
BLAKE2b-256 checksum How to use checksums |
70d83309c82331aaa90d805ea11270fd3fb579f104e612e46870f080d4b48077
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / pycybase-0.2.10-cp313-cp313-win_amd64.whl
| Download URL | pycybase-0.2.10-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
96512a3f6f9e1d2c4cde4831e07a2b6e8a0517a3202f96b8c5796d2246052329
|
|
BLAKE2b-256 checksum How to use checksums |
3457707cc8ff01f26d77d681230d390ff906b1f5505412ba007c6e982aadd83c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.2
|
Release files / pycybase-0.2.10-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pycybase-0.2.10-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 8.5 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
777b17319ee4ebf8876d2171efbd605dc95944b2a20c08911f8dc2832591f35c
|
|
BLAKE2b-256 checksum How to use checksums |
c79edbf7a703adee5dfcaec00d1f99035c569514b76dd3a14580f3785e542b34
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / pycybase-0.2.10-cp312-cp312-win_amd64.whl
| Download URL | pycybase-0.2.10-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
5b39a2c92b4fee40b3f70f19572730b8079c4e05c55ce751d16dec7624e7ad6a
|
|
BLAKE2b-256 checksum How to use checksums |
dad14364a71dd6472e554e33cc78517c0e8b85587252a3fce4da9a12b9b9f4f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.2
|
Release files / pycybase-0.2.10-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | pycybase-0.2.10-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 8.6 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f5fb858ce49e2ac72072f7f3d02f5bb11802c85a1002184e832b7e3d3666bd28
|
|
BLAKE2b-256 checksum How to use checksums |
d62614b4cc104db04c28597bcedd711ffc7f3fdf4ce9eedceda5f026377cd91a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|