PyCyBase 0.1.8.post4__cp313-cp313-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. cbase/__infra__.pxd +6 -0
  2. cbase/__init__.pxd +6 -0
  3. cbase/__init__.py +28 -0
  4. cbase/allocator_protocol/__infra__.pxd +58 -0
  5. cbase/allocator_protocol/__init__.pxd +58 -0
  6. cbase/allocator_protocol/__init__.py +45 -0
  7. cbase/allocator_protocol/c_allocator_protocol.c +31818 -0
  8. cbase/allocator_protocol/c_allocator_protocol.cp313-win_amd64.pyd +0 -0
  9. cbase/allocator_protocol/c_allocator_protocol.h +352 -0
  10. cbase/allocator_protocol/c_allocator_protocol.pxd +64 -0
  11. cbase/allocator_protocol/c_allocator_protocol.pyi +144 -0
  12. cbase/allocator_protocol/c_allocator_protocol.pyx +209 -0
  13. cbase/allocator_protocol/c_heap_allocator.c +38144 -0
  14. cbase/allocator_protocol/c_heap_allocator.cp313-win_amd64.pyd +0 -0
  15. cbase/allocator_protocol/c_heap_allocator.h +444 -0
  16. cbase/allocator_protocol/c_heap_allocator.pxd +97 -0
  17. cbase/allocator_protocol/c_heap_allocator.pyi +161 -0
  18. cbase/allocator_protocol/c_heap_allocator.pyx +300 -0
  19. cbase/allocator_protocol/c_nt_shm_allocator.c +33399 -0
  20. cbase/allocator_protocol/c_nt_shm_allocator.cp313-win_amd64.pyd +0 -0
  21. cbase/allocator_protocol/c_nt_shm_allocator.h +996 -0
  22. cbase/allocator_protocol/c_nt_shm_allocator.pxd +102 -0
  23. cbase/allocator_protocol/c_nt_shm_allocator.pyx +223 -0
  24. cbase/allocator_protocol/c_shm_allocator.h +1168 -0
  25. cbase/allocator_protocol/c_shm_allocator.pxd +142 -0
  26. cbase/allocator_protocol/c_shm_allocator.pyi +299 -0
  27. cbase/allocator_protocol/c_shm_allocator.pyx +442 -0
  28. cbase/allocator_protocol/c_shm_comp.c +4643 -0
  29. cbase/allocator_protocol/c_shm_comp.cp313-win_amd64.pyd +0 -0
  30. cbase/allocator_protocol/c_shm_comp.h +49 -0
  31. cbase/allocator_protocol/c_shm_comp.pxd +38 -0
  32. cbase/allocator_protocol/c_shm_comp.pyx +1 -0
  33. cbase/backports/__infra__.pxd +17 -0
  34. cbase/backports/__init__.pxd +17 -0
  35. cbase/backports/__init__.py +9 -0
  36. cbase/backports/pydict.h +55 -0
  37. cbase/backports/pydict.pxd +5 -0
  38. cbase/backports/pylong.c +9946 -0
  39. cbase/backports/pylong.cp313-win_amd64.pyd +0 -0
  40. cbase/backports/pylong.h +79 -0
  41. cbase/backports/pylong.pxd +23 -0
  42. cbase/backports/pylong.pyx +61 -0
  43. cbase/bytemap/__infra__.pxd +42 -0
  44. cbase/bytemap/__init__.pxd +42 -0
  45. cbase/bytemap/__init__.py +21 -0
  46. cbase/bytemap/c_bytemap.c +52076 -0
  47. cbase/bytemap/c_bytemap.cp313-win_amd64.pyd +0 -0
  48. cbase/bytemap/c_bytemap.h +867 -0
  49. cbase/bytemap/c_bytemap.pxd +370 -0
  50. cbase/bytemap/c_bytemap.pyx +1758 -0
  51. cbase/bytemap/xxh3.h +55 -0
  52. cbase/bytemap/xxhash.c +42 -0
  53. cbase/bytemap/xxhash.h +7487 -0
  54. cbase/env.c +11109 -0
  55. cbase/env.cp313-win_amd64.pyd +0 -0
  56. cbase/env.pxd +8 -0
  57. cbase/env.pyi +48 -0
  58. cbase/env.pyx +46 -0
  59. cbase/includes/cbase/allocator_protocol/c_allocator_protocol.c +31818 -0
  60. cbase/includes/cbase/allocator_protocol/c_allocator_protocol.h +352 -0
  61. cbase/includes/cbase/allocator_protocol/c_heap_allocator.c +38144 -0
  62. cbase/includes/cbase/allocator_protocol/c_heap_allocator.h +444 -0
  63. cbase/includes/cbase/allocator_protocol/c_nt_shm_allocator.c +33399 -0
  64. cbase/includes/cbase/allocator_protocol/c_nt_shm_allocator.h +996 -0
  65. cbase/includes/cbase/allocator_protocol/c_shm_allocator.h +1168 -0
  66. cbase/includes/cbase/allocator_protocol/c_shm_comp.c +4643 -0
  67. cbase/includes/cbase/allocator_protocol/c_shm_comp.h +49 -0
  68. cbase/includes/cbase/backports/pydict.h +55 -0
  69. cbase/includes/cbase/backports/pylong.c +9946 -0
  70. cbase/includes/cbase/backports/pylong.h +79 -0
  71. cbase/includes/cbase/bytemap/c_bytemap.c +52076 -0
  72. cbase/includes/cbase/bytemap/c_bytemap.h +867 -0
  73. cbase/includes/cbase/bytemap/xxh3.h +55 -0
  74. cbase/includes/cbase/bytemap/xxhash.c +42 -0
  75. cbase/includes/cbase/bytemap/xxhash.h +7487 -0
  76. cbase/includes/cbase/env.c +11109 -0
  77. cbase/includes/cbase/int128.h +81 -0
  78. cbase/includes/cbase/intern_string/c_intern_string.c +28081 -0
  79. cbase/includes/cbase/intern_string/c_intern_string.h +614 -0
  80. cbase/includes/cbase/nt/pthread_nt_compat.h +102 -0
  81. cbase/includes/cbase/nt/regex_nt_compat.h +133 -0
  82. cbase/includes/cbase/nt/time_sched_nt_compat.h +32 -0
  83. cbase/int128.h +81 -0
  84. cbase/int128.pxd +15 -0
  85. cbase/intern_string/BENCHMARK.md +157 -0
  86. cbase/intern_string/__infra__.pxd +11 -0
  87. cbase/intern_string/__init__.pxd +11 -0
  88. cbase/intern_string/__init__.py +19 -0
  89. cbase/intern_string/c_intern_string.c +28081 -0
  90. cbase/intern_string/c_intern_string.cp313-win_amd64.pyd +0 -0
  91. cbase/intern_string/c_intern_string.h +614 -0
  92. cbase/intern_string/c_intern_string.pxd +118 -0
  93. cbase/intern_string/c_intern_string.pyi +376 -0
  94. cbase/intern_string/c_intern_string.pyx +765 -0
  95. cbase/nt/pthread_nt_compat.h +102 -0
  96. cbase/nt/regex_nt_compat.h +133 -0
  97. cbase/nt/time_sched_nt_compat.h +32 -0
  98. pycybase-0.1.8.post4.dist-info/METADATA +180 -0
  99. pycybase-0.1.8.post4.dist-info/RECORD +101 -0
  100. pycybase-0.1.8.post4.dist-info/WHEEL +5 -0
  101. pycybase-0.1.8.post4.dist-info/top_level.txt +1 -0
@@ -0,0 +1,102 @@
1
+ #ifndef PTHREAD_NT_COMPAT_H
2
+ #define PTHREAD_NT_COMPAT_H
3
+
4
+ #ifndef _WIN32
5
+ #error "pthread_nt_compat.h is intended for Windows builds only"
6
+ #endif
7
+
8
+ #include <errno.h>
9
+ #include <limits.h>
10
+ #include <time.h>
11
+
12
+ #ifndef WIN32_LEAN_AND_MEAN
13
+ #define WIN32_LEAN_AND_MEAN
14
+ #endif
15
+ #include <windows.h>
16
+
17
+ typedef CRITICAL_SECTION pthread_mutex_t;
18
+ typedef void pthread_mutexattr_t;
19
+ typedef CONDITION_VARIABLE pthread_cond_t;
20
+ typedef void pthread_condattr_t;
21
+
22
+ static inline DWORD pthread_nt_timeout_ms(const struct timespec* abstime) {
23
+ if (!abstime) return INFINITE;
24
+
25
+ struct timespec now;
26
+ if (timespec_get(&now, TIME_UTC) != TIME_UTC) return 0;
27
+
28
+ time_t sec = abstime->tv_sec - now.tv_sec;
29
+ long nsec = abstime->tv_nsec - now.tv_nsec;
30
+ if (nsec < 0) { sec -= 1; nsec += 1000000000L; }
31
+ if (sec < 0 || (sec == 0 && nsec <= 0)) return 0;
32
+
33
+ unsigned long long ms = (unsigned long long) sec * 1000ULL;
34
+ ms += (unsigned long long) ((nsec + 999999L) / 1000000L);
35
+ if (ms > (unsigned long long) INFINITE - 1ULL) return INFINITE - 1;
36
+ return (DWORD) ms;
37
+ }
38
+
39
+ static inline int pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutexattr_t* attr) {
40
+ (void) attr;
41
+ if (!mutex) return EINVAL;
42
+ InitializeCriticalSection(mutex);
43
+ return 0;
44
+ }
45
+
46
+ static inline int pthread_mutex_lock(pthread_mutex_t* mutex) {
47
+ if (!mutex) return EINVAL;
48
+ EnterCriticalSection(mutex);
49
+ return 0;
50
+ }
51
+
52
+ static inline int pthread_mutex_unlock(pthread_mutex_t* mutex) {
53
+ if (!mutex) return EINVAL;
54
+ LeaveCriticalSection(mutex);
55
+ return 0;
56
+ }
57
+
58
+ static inline int pthread_mutex_destroy(pthread_mutex_t* mutex) {
59
+ if (!mutex) return EINVAL;
60
+ DeleteCriticalSection(mutex);
61
+ return 0;
62
+ }
63
+
64
+ static inline int pthread_cond_init(pthread_cond_t* cond, const pthread_condattr_t* attr) {
65
+ (void) attr;
66
+ if (!cond) return EINVAL;
67
+ InitializeConditionVariable(cond);
68
+ return 0;
69
+ }
70
+
71
+ static inline int pthread_cond_wait(pthread_cond_t* cond, pthread_mutex_t* mutex) {
72
+ if (!cond || !mutex) return EINVAL;
73
+ if (SleepConditionVariableCS(cond, mutex, INFINITE)) return 0;
74
+ return EINVAL;
75
+ }
76
+
77
+ static inline int pthread_cond_timedwait(pthread_cond_t* cond, pthread_mutex_t* mutex, const struct timespec* abstime) {
78
+ if (!cond || !mutex) return EINVAL;
79
+ DWORD timeout_ms = pthread_nt_timeout_ms(abstime);
80
+ if (SleepConditionVariableCS(cond, mutex, timeout_ms)) return 0;
81
+ if (GetLastError() == ERROR_TIMEOUT) return ETIMEDOUT;
82
+ return EINVAL;
83
+ }
84
+
85
+ static inline int pthread_cond_signal(pthread_cond_t* cond) {
86
+ if (!cond) return EINVAL;
87
+ WakeConditionVariable(cond);
88
+ return 0;
89
+ }
90
+
91
+ static inline int pthread_cond_broadcast(pthread_cond_t* cond) {
92
+ if (!cond) return EINVAL;
93
+ WakeAllConditionVariable(cond);
94
+ return 0;
95
+ }
96
+
97
+ static inline int pthread_cond_destroy(pthread_cond_t* cond) {
98
+ (void) cond;
99
+ return 0;
100
+ }
101
+
102
+ #endif /* PTHREAD_NT_COMPAT_H */
@@ -0,0 +1,133 @@
1
+ #ifndef REGEX_NT_COMPAT_H
2
+ #define REGEX_NT_COMPAT_H
3
+
4
+ #ifndef _WIN32
5
+ #error "regex_nt_compat.h is intended for Windows builds only"
6
+ #endif
7
+
8
+ #include <errno.h>
9
+ #include <stddef.h>
10
+
11
+ #if defined(__has_include)
12
+ #if __has_include(<Python.h>)
13
+ #include <Python.h>
14
+ #define REGEX_NT_COMPAT_HAS_PYTHON 1
15
+ #else
16
+ #define REGEX_NT_COMPAT_HAS_PYTHON 0
17
+ #endif
18
+ #else
19
+ #include <Python.h>
20
+ #define REGEX_NT_COMPAT_HAS_PYTHON 1
21
+ #endif
22
+
23
+ #ifndef REG_EXTENDED
24
+ #define REG_EXTENDED 1
25
+ #endif
26
+
27
+ #ifndef REG_NOMATCH
28
+ #define REG_NOMATCH 1
29
+ #endif
30
+
31
+ #ifndef REG_BADPAT
32
+ #define REG_BADPAT 2
33
+ #endif
34
+
35
+ typedef struct regex_t {
36
+ PyObject* compiled;
37
+ } regex_t;
38
+
39
+ typedef struct regmatch_t {
40
+ ptrdiff_t rm_so;
41
+ ptrdiff_t rm_eo;
42
+ } regmatch_t;
43
+
44
+ #if REGEX_NT_COMPAT_HAS_PYTHON
45
+
46
+ static inline int regcomp(regex_t* regex, const char* pattern, int cflags) {
47
+ (void) cflags;
48
+ if (!regex || !pattern) {
49
+ return REG_BADPAT;
50
+ }
51
+
52
+ regex->compiled = NULL;
53
+
54
+ PyGILState_STATE gil_state = PyGILState_Ensure();
55
+ PyObject* re_module = PyImport_ImportModule("re");
56
+ if (!re_module) {
57
+ PyErr_Clear();
58
+ PyGILState_Release(gil_state);
59
+ return REG_BADPAT;
60
+ }
61
+
62
+ PyObject* compiled = PyObject_CallMethod(re_module, "compile", "s", pattern);
63
+ Py_DECREF(re_module);
64
+ if (!compiled) {
65
+ PyErr_Clear();
66
+ PyGILState_Release(gil_state);
67
+ return REG_BADPAT;
68
+ }
69
+
70
+ regex->compiled = compiled;
71
+ PyGILState_Release(gil_state);
72
+ return 0;
73
+ }
74
+
75
+ static inline int regexec(const regex_t* regex, const char* string, size_t nmatch, regmatch_t pmatch[], int eflags) {
76
+ (void) nmatch;
77
+ (void) pmatch;
78
+ (void) eflags;
79
+
80
+ if (!regex || !regex->compiled || !string) {
81
+ return REG_NOMATCH;
82
+ }
83
+
84
+ PyGILState_STATE gil_state = PyGILState_Ensure();
85
+ PyObject* match = PyObject_CallMethod(regex->compiled, "search", "s", string);
86
+ if (!match) {
87
+ PyErr_Clear();
88
+ PyGILState_Release(gil_state);
89
+ return REG_NOMATCH;
90
+ }
91
+
92
+ int result = (match == Py_None) ? REG_NOMATCH : 0;
93
+ Py_DECREF(match);
94
+ PyGILState_Release(gil_state);
95
+ return result;
96
+ }
97
+
98
+ static inline void regfree(regex_t* regex) {
99
+ if (!regex || !regex->compiled) {
100
+ return;
101
+ }
102
+
103
+ PyGILState_STATE gil_state = PyGILState_Ensure();
104
+ Py_DECREF(regex->compiled);
105
+ regex->compiled = NULL;
106
+ PyGILState_Release(gil_state);
107
+ }
108
+
109
+ #else
110
+
111
+ static inline int regcomp(regex_t* regex, const char* pattern, int cflags) {
112
+ (void) regex;
113
+ (void) pattern;
114
+ (void) cflags;
115
+ return REG_BADPAT;
116
+ }
117
+
118
+ static inline int regexec(const regex_t* regex, const char* string, size_t nmatch, regmatch_t pmatch[], int eflags) {
119
+ (void) regex;
120
+ (void) string;
121
+ (void) nmatch;
122
+ (void) pmatch;
123
+ (void) eflags;
124
+ return REG_NOMATCH;
125
+ }
126
+
127
+ static inline void regfree(regex_t* regex) {
128
+ (void) regex;
129
+ }
130
+
131
+ #endif
132
+
133
+ #endif /* REGEX_NT_COMPAT_H */
@@ -0,0 +1,32 @@
1
+ #ifndef TIME_SCHED_NT_COMPAT_H
2
+ #define TIME_SCHED_NT_COMPAT_H
3
+
4
+ #ifndef _WIN32
5
+ #error "time_sched_nt_compat.h is intended for Windows builds only"
6
+ #endif
7
+
8
+ #include <time.h>
9
+
10
+ #ifndef WIN32_LEAN_AND_MEAN
11
+ #define WIN32_LEAN_AND_MEAN
12
+ #endif
13
+ #include <windows.h>
14
+
15
+ #ifndef CLOCK_REALTIME
16
+ #define CLOCK_REALTIME 0
17
+ #endif
18
+
19
+ static inline int clock_gettime(int clock_id, struct timespec* ts) {
20
+ (void) clock_id;
21
+ if (!ts) {
22
+ return -1;
23
+ }
24
+
25
+ return timespec_get(ts, TIME_UTC) == TIME_UTC ? 0 : -1;
26
+ }
27
+
28
+ static inline void sched_yield(void) {
29
+ SwitchToThread();
30
+ }
31
+
32
+ #endif /* TIME_SCHED_NT_COMPAT_H */
@@ -0,0 +1,180 @@
1
+ Metadata-Version: 2.4
2
+ Name: PyCyBase
3
+ Version: 0.1.8.post4
4
+ Summary: Common C / Cython dual interfaces (allocator protocol, SHM allocator, heap allocator) for Python HFT projects
5
+ Author-email: Han Bolun <Bolun.Han@outlook.com>
6
+ Project-URL: Homepage, https://github.com/BolunHan/PyCyBase
7
+ Project-URL: Repository, https://github.com/BolunHan/PyCyBase
8
+ Project-URL: Issues, https://github.com/BolunHan/PyCyBase/issues
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Programming Language :: Python :: 3.12
11
+ Classifier: Programming Language :: Python :: 3.13
12
+ Classifier: Programming Language :: Python :: 3.14
13
+ Classifier: Operating System :: POSIX :: Linux
14
+ Requires-Python: >=3.12
15
+ Description-Content-Type: text/markdown
16
+ Requires-Dist: cython
17
+ Provides-Extra: docs
18
+ Requires-Dist: mypy; extra == "docs"
19
+ Requires-Dist: sphinx; extra == "docs"
20
+ Requires-Dist: sphinx-rtd-theme; extra == "docs"
21
+ Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
22
+
23
+ # PyCyBase
24
+
25
+ Common C / Cython dual interfaces for Python HFT Projects.
26
+
27
+ ## Overview
28
+
29
+ Low-level allocator infrastructure shared across HFT projects:
30
+
31
+ - **Allocator Protocol** — Pluggable memory allocation with heap, shared-memory (SHM), and raw `malloc` backends. Ref-counting, vigilant mode, thread-safety controls.
32
+ - **Heap Allocator** — In-process allocator with free-list reuse and auto-growing pages.
33
+ - **SHM Allocator** — POSIX shared-memory page allocator with fixed-address virtual region mapping for cross-process pointer stability.
34
+ - **ByteMap** — Fast xxHash3-backed hash maps for byte-string keys (ByteMap, ByteMapEx, bound variants).
35
+ - **Intern String** — FNV-1a-hashed string interning with SHM-backed cross-process pools. 1.7–2.2× speedup over Python `str`.
36
+
37
+ ## Quick Start
38
+
39
+ ```python
40
+ from cbase.allocator_protocol import AllocatorProtocol, AP_SHARED
41
+
42
+ with AP_SHARED:
43
+ alloc = AllocatorProtocol(1024)
44
+ alloc.buf[0] = b'x'
45
+ ```
46
+
47
+ ```python
48
+ from cbase.intern_string import POOL
49
+
50
+ aapl = POOL.istr("AAPL")
51
+ assert aapl is POOL.istr("AAPL") # Identity — string deduplication
52
+ ```
53
+
54
+ ```python
55
+ from cbase.bytemap import ByteMap
56
+
57
+ bm = ByteMap()
58
+ bm[b"ticker"] = b"AAPL"
59
+ assert bm[b"ticker"] == b"AAPL"
60
+ ```
61
+
62
+ ## Build & Install
63
+
64
+ PyCyBase is a Cython extension package — it **cannot** be used with `pip install -e .` (editable mode breaks Cython `.pxd` resolution for downstream projects).
65
+
66
+ ### POSIX (Linux / macOS)
67
+
68
+ ```bash
69
+ # Build extensions in-place, then install
70
+ ./build.sh -i
71
+
72
+ # Or equivalently:
73
+ make build && pip install -U . --no-build-isolation
74
+
75
+ # Or step by step:
76
+ python setup.py build_ext --inplace --verbose --force
77
+ pip install -U . --no-build-isolation
78
+ ```
79
+
80
+ **Build script reference:**
81
+
82
+ | Command | Effect |
83
+ |---------|--------|
84
+ | `./build.sh` | Clean + build in-place |
85
+ | `./build.sh -i` | Clean + build + `pip install .` |
86
+ | `./build.sh -r` | Clean + build + force-reinstall |
87
+ | `./build.sh -c` | Clean only (no build) |
88
+ | `./build.sh -a` | Deep clean (remove `.c` and `.so` files) |
89
+ | `./build.sh -l` | List all compile-time macros |
90
+ | `./build.sh -v /path/to/venv` | Use a specific venv |
91
+ | `make` or `make build` | Clean + build |
92
+ | `make install` | Build + `pip install .` |
93
+ | `make reinstall` | Build + force-reinstall |
94
+ | `make list-args` | List compile-time macros |
95
+
96
+ ### Windows (NT)
97
+
98
+ ```powershell
99
+ # Local build
100
+ .\build.ps1 -VenvPath "C:\Users\...\venv_313"
101
+
102
+ # Remote build (from Linux host):
103
+ python nt_build.py
104
+ ```
105
+
106
+ ### Compile-Time Macros
107
+
108
+ Override any macro at build time via environment variable:
109
+
110
+ ```bash
111
+ DEBUG=1 ./build.sh # Enable debug mode
112
+ DEBUG=1 make build # Same via Makefile
113
+ ```
114
+
115
+ List all available macros and defaults:
116
+
117
+ ```bash
118
+ ./build.sh -l # Auto-generates macros.json via probe.py
119
+ make list-args
120
+ python probe.py # Run the probe directly
121
+ ```
122
+
123
+ Key macros (see `macros.json` for full list):
124
+
125
+ | Macro | Default | Description |
126
+ |-------|---------|-------------|
127
+ | `AP_ALLOC_VIGILANT` | `1` | Enable bounds/canary checks |
128
+ | `AP_ALLOC_WITH_LOCK` | `1` | Thread-safety via pthread mutex |
129
+ | `AP_ALLOC_WITH_SHM` | `0` | Default to SHM allocator |
130
+ | `AP_ALLOC_WITH_FREELIST` | `1` | Free-list reuse |
131
+ | `AP_HEAP_AUTOPAGE_CAPACITY` | `64 KiB` | Default heap page size |
132
+ | `AP_HEAP_AUTOPAGE_CAPACITY_MAX` | `16 MiB` | Max heap page size |
133
+ | `AP_SHM_AUTOPAGE_CAPACITY` | `64 KiB` | Default SHM page size |
134
+ | `AP_SHM_ALLOCATOR_DEFAULT_REGION_SIZE` | `128 GiB` | SHM virtual region |
135
+
136
+ ### Using `get_include()` in Downstream Projects
137
+
138
+ ```python
139
+ from setuptools import setup, Extension
140
+ from Cython.Build import cythonize
141
+ import cbase
142
+
143
+ ext = Extension(
144
+ "my_module",
145
+ sources=["my_module.pyx"],
146
+ include_dirs=cbase.get_include(),
147
+ )
148
+ setup(ext_modules=cythonize([ext]))
149
+ ```
150
+
151
+ ## Modules
152
+
153
+ | Module | Description |
154
+ |--------|-------------|
155
+ | `cbase.env` | `EnvConfigContext` — context manager for temporary config changes |
156
+ | `cbase.allocator_protocol` | `AllocatorProtocol`, `AllocatorConfigContext`, AP sentinels |
157
+ | `cbase.allocator_protocol.c_heap_allocator` | In-process heap allocator with free-list |
158
+ | `cbase.allocator_protocol.c_shm_allocator` | POSIX shared-memory page allocator |
159
+ | `cbase.bytemap.c_bytemap` | xxHash3-backed hash maps |
160
+ | `cbase.intern_string.c_intern_string` | FNV-1a-hashed string interning |
161
+ | `cbase.backports.pylong` | Python int ↔ 128-bit integer (uint128_t/int128_t) backport |
162
+ | `cbase.backports.pydict` | PyDict_Pop backport for pre-3.13 Python |
163
+
164
+ ## Documentation
165
+
166
+ ```bash
167
+ pip install sphinx furo
168
+ cd docs
169
+ sphinx-build -M html . _build
170
+ # Or with the project venv:
171
+ ~/Projects/venv_313/bin/sphinx-build -M html . _build
172
+ ```
173
+
174
+ Open `docs/_build/html/index.html`.
175
+
176
+ Online: https://bolunhan.github.io/PyCyBase/
177
+
178
+ ## License
179
+
180
+ Proprietary.
@@ -0,0 +1,101 @@
1
+ cbase/__infra__.pxd,sha256=GHTo1d99jSDHnJ5btmrsnIPufxObGMUuydgD9HcUVt8,164
2
+ cbase/__init__.pxd,sha256=GHTo1d99jSDHnJ5btmrsnIPufxObGMUuydgD9HcUVt8,164
3
+ cbase/__init__.py,sha256=1T5xF9VbXhDgOfEFVmvX6PYCLfPGpe2dVCMH3ZWyQFM,600
4
+ cbase/env.c,sha256=KTOXCNGWl0wrgfelXQ3kgHj79XLUAs0cb2bW_D3c_X0,456770
5
+ cbase/env.cp313-win_amd64.pyd,sha256=GdlNM3b8QodKuGJdhKKLk7okIvMOlF6FTntBgncs4mU,52736
6
+ cbase/env.pxd,sha256=2bdWsv4upgPCVTkMY6BRExhsZ3JDBvxiD7Qd772sMQ0,152
7
+ cbase/env.pyi,sha256=6B5tlM65MTJxffbSH9aFfhZlKpJ-RkFFq8uxVUg1nuE,1426
8
+ cbase/env.pyx,sha256=9IM97NjbyOFHu875Jx_m9MqkimuJp4uR1ysCcEdcThw,1341
9
+ cbase/int128.h,sha256=oViSxaugBvmicLRCp3u1RiWz23KzmxyIyZtvvSVtX2M,2398
10
+ cbase/int128.pxd,sha256=IbblD1oOcYMWjy0HrXxsxwL35G6xzuzaUoIxc6dU-44,520
11
+ cbase/allocator_protocol/__infra__.pxd,sha256=UPB1yzwMz1U7vkzw22MT0oEAxMqTG6qTAR-1KJ9jmBE,1606
12
+ cbase/allocator_protocol/__init__.pxd,sha256=UPB1yzwMz1U7vkzw22MT0oEAxMqTG6qTAR-1KJ9jmBE,1606
13
+ cbase/allocator_protocol/__init__.py,sha256=LO9W9K1ffBtp1aNhrh_oGdU9eWKwn40Off_G_lEB8uw,1272
14
+ cbase/allocator_protocol/c_allocator_protocol.c,sha256=OB24XCQ6I-yh7MNc0YFN_IeTzcLgCSdorykQW09lz6o,1311169
15
+ cbase/allocator_protocol/c_allocator_protocol.cp313-win_amd64.pyd,sha256=0S05raxTGUuLAtP4iDRKrLVNBo4RUFCvXWKtJ74UShc,147968
16
+ cbase/allocator_protocol/c_allocator_protocol.h,sha256=5HjHfzW6Vs-Eai9V3U9SCAqLfu92Q-EfwCYWWeirnFo,13232
17
+ cbase/allocator_protocol/c_allocator_protocol.pxd,sha256=iuPKlgmscpoke2seCQhf-D11xwMhRbM6_qLac1kN4_4,2549
18
+ cbase/allocator_protocol/c_allocator_protocol.pyi,sha256=quToj-oxTZ8VcPUxVJ2pTTJDhZ7k7fwxB7QLcKU1LbE,4182
19
+ cbase/allocator_protocol/c_allocator_protocol.pyx,sha256=ZziuBJ32YpRVEkX8XdLPwgmOFkXjrE6_0vlrc4JWhUA,10497
20
+ cbase/allocator_protocol/c_heap_allocator.c,sha256=_kbRLFCxmTDlWdkgmU1xir23P7nh8TcN-l9PKDoRi4M,1610282
21
+ cbase/allocator_protocol/c_heap_allocator.cp313-win_amd64.pyd,sha256=6IwumxV9H2PFTrfzp0JivuAlq1W-FRmfaHYuGet7qmY,193536
22
+ cbase/allocator_protocol/c_heap_allocator.h,sha256=B_vifvXGbWO9HP0DIPlji_oYub_wpYb5suSyGemhYyE,12787
23
+ cbase/allocator_protocol/c_heap_allocator.pxd,sha256=EqRdPROhJURVgy8BPBN7-XSJrD8E4PndYqyUsUT3Fy8,3488
24
+ cbase/allocator_protocol/c_heap_allocator.pyi,sha256=zR2OMuVweL_1M5Cp-Xim97JI19-WakIupgfFSCM37Zc,4654
25
+ cbase/allocator_protocol/c_heap_allocator.pyx,sha256=RpKmYZhP178BouAcpsbuoWYiot11xbJd1V5tG8YGkHs,11941
26
+ cbase/allocator_protocol/c_nt_shm_allocator.c,sha256=0yNawXhtPjKl5QtstibZmBUMMwOuDgDyIJjAdmY5Tsw,1383016
27
+ cbase/allocator_protocol/c_nt_shm_allocator.cp313-win_amd64.pyd,sha256=iMb_gbT5uiCS8k6-_B0nGCBzjYRVjnyMC70epMHrKFI,176128
28
+ cbase/allocator_protocol/c_nt_shm_allocator.h,sha256=6AYC9Nt61r8_7IciALCF4oT8nGxRZOimAx-ZzltMpdg,31151
29
+ cbase/allocator_protocol/c_nt_shm_allocator.pxd,sha256=pTOEt_V6ReRogJeAWr59FwYlu_Unr513Ot6nxbNSVSs,4350
30
+ cbase/allocator_protocol/c_nt_shm_allocator.pyx,sha256=X4NPr69cqRAt3sXUl27FpouQNER1lySQKy6DbOc_8HM,9521
31
+ cbase/allocator_protocol/c_shm_allocator.h,sha256=ImPRx71z9TthdQgqsS8YMKOHI5rVBME9x9UU5VF9EzM,37012
32
+ cbase/allocator_protocol/c_shm_allocator.pxd,sha256=iCL9rbYuh_7sfeE7qn0rHtde5l_D3CVYtOjFVbweT4U,5398
33
+ cbase/allocator_protocol/c_shm_allocator.pyi,sha256=jgarsVbYnjWXxlp0c9CHuBee6ZgNPDwApB5J9NrJ7b8,9570
34
+ cbase/allocator_protocol/c_shm_allocator.pyx,sha256=3VsNcGXMcFPK_ZxCIqPlrboUXjSdFM1h6tHtInMOOm8,16931
35
+ cbase/allocator_protocol/c_shm_comp.c,sha256=YUg_WaIZUclMPvk-1WXZ3wbE0RNZC6PCKvoIIzF0nXo,194664
36
+ cbase/allocator_protocol/c_shm_comp.cp313-win_amd64.pyd,sha256=xL90dCvkjJbIgmDQoHbAV5zrxGByh8IXAOYw_QrxWIM,18944
37
+ cbase/allocator_protocol/c_shm_comp.h,sha256=WBitRJ1JpWL-H_p5suhUFoFtPkkjR9TTVgQx9yuiLMU,1968
38
+ cbase/allocator_protocol/c_shm_comp.pxd,sha256=YXfg6kdjETbP3-hITcjewOLzzFUkFJSU-hml3LglKdM,1550
39
+ cbase/allocator_protocol/c_shm_comp.pyx,sha256=RkI-L73IgEIiykhdPdyfjs9lJvHBV2fCeP0cfRYcYks,121
40
+ cbase/backports/__infra__.pxd,sha256=YSYd_zFps3ql31h49XBA1f5F_VMws7vXJsyXZwidYZk,316
41
+ cbase/backports/__init__.pxd,sha256=YSYd_zFps3ql31h49XBA1f5F_VMws7vXJsyXZwidYZk,316
42
+ cbase/backports/__init__.py,sha256=BipEaRj9FY54ASY18NYomZ7DAa0csl81iIYMDELNRfI,193
43
+ cbase/backports/pydict.h,sha256=aNZ0Y1wgvG46lKS_mw4wm2vwi8OVwpow8hofg2obfKk,1741
44
+ cbase/backports/pydict.pxd,sha256=fF_Fpmb9xkGb37a2-5kq0r2Ogea_ST9gW8FmcoZvWRI,158
45
+ cbase/backports/pylong.c,sha256=CsrbJojv8mdDrBQWB96lIMsnrRwtre50VlKZ4pFNW4g,410388
46
+ cbase/backports/pylong.cp313-win_amd64.pyd,sha256=kd0jWksZb7H_ndxOVpiRWohkVURV-IQ2MYv9AHNFA3Y,44544
47
+ cbase/backports/pylong.h,sha256=ZpNpCBYduT1ER08p4wnR8u2B-KUzQ87bKl9S2o9krq4,2218
48
+ cbase/backports/pylong.pxd,sha256=SnC7Bx9jgAbN87KFdXnoXPTiwGMzfHVPmoSJHIIUQm8,631
49
+ cbase/backports/pylong.pyx,sha256=98PNQSJaVPcD3VgaCq_ownuMQLRVDDhP8OpBYUTSSmw,2178
50
+ cbase/bytemap/__infra__.pxd,sha256=9UzjG3AFXPFe-jVvn3Ay27RcwSgUqFQJaCX4mCE19uU,1783
51
+ cbase/bytemap/__init__.pxd,sha256=9UzjG3AFXPFe-jVvn3Ay27RcwSgUqFQJaCX4mCE19uU,1783
52
+ cbase/bytemap/__init__.py,sha256=jmVp9McBp1PFWl-Dl1cWrTTtKGlB3ZeNmeALP6OBmXA,411
53
+ cbase/bytemap/c_bytemap.c,sha256=Lav8WlzS1xwHbha2CtyUrq5dy73iNBYeo9HhGGiDQY4,2399329
54
+ cbase/bytemap/c_bytemap.cp313-win_amd64.pyd,sha256=MbSCtzq6U1145zSZ6c4WeYBjbtOu5oEGKg9LaSW7yNU,304640
55
+ cbase/bytemap/c_bytemap.h,sha256=hp40nHJxEanSXPPcoE211Mg7q58hRy0e5GNS11TTES4,34874
56
+ cbase/bytemap/c_bytemap.pxd,sha256=CtoBI94K1unkgsB1ga6_umdZ7ZfAV9c9f8fEcc6Tkzo,14782
57
+ cbase/bytemap/c_bytemap.pyx,sha256=tXohXFstM5_te3NBuDUzzLi0Nxl77MMsnaIApboBRIA,73054
58
+ cbase/bytemap/xxh3.h,sha256=p5JnfO0ib4pi-nvNTY06dDQJlOS_0-TNPfxl0XQHep0,2449
59
+ cbase/bytemap/xxhash.c,sha256=whY6q68SdhXQhrhbRueD3yWmBiKrSpny3n__nDTUCaE,1897
60
+ cbase/bytemap/xxhash.h,sha256=w0DdoWurKi0_e3N6M7L35xLo9ZK3yjBv9EG8M9FsHPM,286913
61
+ cbase/includes/cbase/env.c,sha256=KTOXCNGWl0wrgfelXQ3kgHj79XLUAs0cb2bW_D3c_X0,456770
62
+ cbase/includes/cbase/int128.h,sha256=oViSxaugBvmicLRCp3u1RiWz23KzmxyIyZtvvSVtX2M,2398
63
+ cbase/includes/cbase/allocator_protocol/c_allocator_protocol.c,sha256=OB24XCQ6I-yh7MNc0YFN_IeTzcLgCSdorykQW09lz6o,1311169
64
+ cbase/includes/cbase/allocator_protocol/c_allocator_protocol.h,sha256=5HjHfzW6Vs-Eai9V3U9SCAqLfu92Q-EfwCYWWeirnFo,13232
65
+ cbase/includes/cbase/allocator_protocol/c_heap_allocator.c,sha256=_kbRLFCxmTDlWdkgmU1xir23P7nh8TcN-l9PKDoRi4M,1610282
66
+ cbase/includes/cbase/allocator_protocol/c_heap_allocator.h,sha256=B_vifvXGbWO9HP0DIPlji_oYub_wpYb5suSyGemhYyE,12787
67
+ cbase/includes/cbase/allocator_protocol/c_nt_shm_allocator.c,sha256=0yNawXhtPjKl5QtstibZmBUMMwOuDgDyIJjAdmY5Tsw,1383016
68
+ cbase/includes/cbase/allocator_protocol/c_nt_shm_allocator.h,sha256=6AYC9Nt61r8_7IciALCF4oT8nGxRZOimAx-ZzltMpdg,31151
69
+ cbase/includes/cbase/allocator_protocol/c_shm_allocator.h,sha256=ImPRx71z9TthdQgqsS8YMKOHI5rVBME9x9UU5VF9EzM,37012
70
+ cbase/includes/cbase/allocator_protocol/c_shm_comp.c,sha256=YUg_WaIZUclMPvk-1WXZ3wbE0RNZC6PCKvoIIzF0nXo,194664
71
+ cbase/includes/cbase/allocator_protocol/c_shm_comp.h,sha256=WBitRJ1JpWL-H_p5suhUFoFtPkkjR9TTVgQx9yuiLMU,1968
72
+ cbase/includes/cbase/backports/pydict.h,sha256=aNZ0Y1wgvG46lKS_mw4wm2vwi8OVwpow8hofg2obfKk,1741
73
+ cbase/includes/cbase/backports/pylong.c,sha256=CsrbJojv8mdDrBQWB96lIMsnrRwtre50VlKZ4pFNW4g,410388
74
+ cbase/includes/cbase/backports/pylong.h,sha256=ZpNpCBYduT1ER08p4wnR8u2B-KUzQ87bKl9S2o9krq4,2218
75
+ cbase/includes/cbase/bytemap/c_bytemap.c,sha256=Lav8WlzS1xwHbha2CtyUrq5dy73iNBYeo9HhGGiDQY4,2399329
76
+ cbase/includes/cbase/bytemap/c_bytemap.h,sha256=hp40nHJxEanSXPPcoE211Mg7q58hRy0e5GNS11TTES4,34874
77
+ cbase/includes/cbase/bytemap/xxh3.h,sha256=p5JnfO0ib4pi-nvNTY06dDQJlOS_0-TNPfxl0XQHep0,2449
78
+ cbase/includes/cbase/bytemap/xxhash.c,sha256=whY6q68SdhXQhrhbRueD3yWmBiKrSpny3n__nDTUCaE,1897
79
+ cbase/includes/cbase/bytemap/xxhash.h,sha256=w0DdoWurKi0_e3N6M7L35xLo9ZK3yjBv9EG8M9FsHPM,286913
80
+ cbase/includes/cbase/intern_string/c_intern_string.c,sha256=YRWZ09M-lOqN941Nh0AWYAng3oPINcC3tgoqE8240Bo,1292853
81
+ cbase/includes/cbase/intern_string/c_intern_string.h,sha256=G8iWzx3gLuS6BGW1FdiEFZte1xW1-hQ49juPgRXKbjc,20420
82
+ cbase/includes/cbase/nt/pthread_nt_compat.h,sha256=x3ocJ7BkGvgQeoX7ajTC2mjfnvO4wUTdIndr6hwCviE,3032
83
+ cbase/includes/cbase/nt/regex_nt_compat.h,sha256=MgA2Lt2AEA6_DGA_UYZmIXpz0K8Rd_ggdbYsBlH7AqU,3027
84
+ cbase/includes/cbase/nt/time_sched_nt_compat.h,sha256=Hc93-Q5wwX54KiNDhq2-yZrR9y9tgGytuXX2MxrDGUM,638
85
+ cbase/intern_string/BENCHMARK.md,sha256=u3nHS7OcoiLM8g6Vj_j9u6pQd91t-gX1eSsGKKuZrY8,8449
86
+ cbase/intern_string/__infra__.pxd,sha256=uIc4fP6JTFkznKuOAnaGKMMaPimKKDoyUrMqP4LppM8,219
87
+ cbase/intern_string/__init__.pxd,sha256=uIc4fP6JTFkznKuOAnaGKMMaPimKKDoyUrMqP4LppM8,219
88
+ cbase/intern_string/__init__.py,sha256=AMyVENcoE1A_SF1_D3RO9s6CRCPr2IsXbfs5oqOcY3Q,315
89
+ cbase/intern_string/c_intern_string.c,sha256=YRWZ09M-lOqN941Nh0AWYAng3oPINcC3tgoqE8240Bo,1292853
90
+ cbase/intern_string/c_intern_string.cp313-win_amd64.pyd,sha256=_GpRh5Oqpj-e_024vGTPBwIVh1xUlCDkVLQuJHSuGNk,165376
91
+ cbase/intern_string/c_intern_string.h,sha256=G8iWzx3gLuS6BGW1FdiEFZte1xW1-hQ49juPgRXKbjc,20420
92
+ cbase/intern_string/c_intern_string.pxd,sha256=0p4X-1j_z69ARN0x2XxUZIyqMrkC_7xF_X3G1N8FcqM,3973
93
+ cbase/intern_string/c_intern_string.pyi,sha256=-6Ga6pzFv_RuOsEP0Jlb_u39VL8LYy7dfEacG-y9n8Q,11955
94
+ cbase/intern_string/c_intern_string.pyx,sha256=G3dDqTSR3jfPlXSzumKnbXTNORfNFjDVwXokjLC4cW0,30785
95
+ cbase/nt/pthread_nt_compat.h,sha256=x3ocJ7BkGvgQeoX7ajTC2mjfnvO4wUTdIndr6hwCviE,3032
96
+ cbase/nt/regex_nt_compat.h,sha256=MgA2Lt2AEA6_DGA_UYZmIXpz0K8Rd_ggdbYsBlH7AqU,3027
97
+ cbase/nt/time_sched_nt_compat.h,sha256=Hc93-Q5wwX54KiNDhq2-yZrR9y9tgGytuXX2MxrDGUM,638
98
+ pycybase-0.1.8.post4.dist-info/METADATA,sha256=k-V6YNdqDegRUpDx29G7GnsudV8rcUYTsIHnEfyA4T4,5896
99
+ pycybase-0.1.8.post4.dist-info/WHEEL,sha256=AP_wkikJcUkDPUGvTNydv7g0R7BhW1u_fVHNKW7TJyI,101
100
+ pycybase-0.1.8.post4.dist-info/top_level.txt,sha256=1-AmkpeoVkkB4J_ETk_plA58n1BC02e30z4uvm_6bf8,6
101
+ pycybase-0.1.8.post4.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (83.0.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp313-cp313-win_amd64
5
+
@@ -0,0 +1 @@
1
+ cbase