who’s even reading this
Some checks failed
Build / wheels (aarch64, ubuntu-24.04-arm) (push) Waiting to run
Build / wheels (arm64, macos-15) (push) Waiting to run
Build / wheels (x86_64, ubuntu-latest) (push) Failing after 1s
Build / source (push) Failing after 1m13s
Build / lint (push) Failing after 2s

This commit is contained in:
2026-09-21 23:47:55 -05:00
parent 6889e97c28
commit bf91b37c92

View File

@@ -1,87 +0,0 @@
# pycapnp for IQPilot
IQ.Lvbs maintains this fork at https://git.konn3kt.com/IQ.Lvbs/pycapnp.
It extends comma's minimal branch at `caee18aeef0a9a54ad8f98292a325a1675a43bec`.
The upstream licenses and history are retained.
IQPilot additions:
- Native NumPy conversion for floating-point list readers and builders through
`__array__`, retaining inferred dtype, explicit casts and warnings, writable
independent output, and rejection of unsupported `copy=False` requests.
- `to_float64_bytes()` for an owned native-endian numeric snapshot without
constructing intermediate Python scalar objects. Non-numeric values are rejected.
- Direct serialization into the final Python bytes object, preserving segment
framing and byte identity while removing the intermediate flat-array copy.
NumPy is optional at runtime and loaded lazily only when its array protocol is used.
The validation suite additionally requires NumPy. Serialization reference hashes
were generated by the unmodified comma commit above and cover one and multiple
segments through megabyte payloads. The native helpers do not borrow message memory.
A serialization-only fork of [pycapnp](https://github.com/capnproto/pycapnp).
The `minimal` branch starts at upstream commit
`a0cb5cdf0673481f2f9850541f4d42b89698c476`, including the `from_dict` reference-cycle
fix in upstream PR #407.
The supported surface is based on openpilot at
`7f6f13997c3c9b8e27e1581583f61e3fcabc5151`, including its opendbc checkout:
- Explicit schema loading with `capnp.load()` and schema imports.
- Dynamic structs, lists, enums, unions, nested groups, and constants.
- Message construction, field access (including cached `_get_by_field` and
`_set_by_field`), dictionaries, reader/builder copies, and pickling.
- Unpacked `to_bytes()`, `from_bytes()`, and `read_multiple_bytes()`, including
traversal/nesting limits and readers that retain their underlying message.
- Schema reflection for cereal, CAN conversion, WebRTC, fuzzing, and replay tools.
Removed: RPC/capabilities, promises, KJ event loops, asyncio/network streams,
packed serialization, file-descriptor I/O, segment APIs, borrowed Data views,
custom allocators, orphans/resizable lists, AnyPointer wrappers, type registration,
the Python schema import hook, and the Cython code generator. Their examples,
tests, docs, dependencies, and unsupported-platform CI were removed too.
Also removed are generated per-schema `Reader`/`Builder` classes, synthetic
`.Union` enums, `_has_by_field`/`_init_by_field`, allocation-size overrides,
`from_bytes(builder=True)`, and `to_dict` ordering/base64 options. Incoming base64
Data values in `from_dict` remain supported. Unused schema reset/metadata helpers,
schema equality, `_which_str`, and legacy exception arguments were removed too.
`remove_import_hook()` remains a no-op for cereal/opendbc compatibility.
This is intentionally not a full upstream API replacement. The import and
package names remain `capnp` and `pycapnp`. It must replace the installed pycapnp,
not be installed alongside another distribution providing `capnp`.
## Build and test
Targets: CPython 3.12, Linux x86_64/aarch64, and macOS arm64. A C++17 compiler and
CMake are required to build the vendored library.
```sh
uv venv --python 3.12
uv pip install cython setuptools wheel pytest numpy build
.venv/bin/python setup.py build_ext --inplace
.venv/bin/python -m pytest
.venv/bin/python -m build
```
The C++ library is vendored under [`vendor/capnproto`](vendor/capnproto), based on
Cap'n Proto 1.4.0. Every build compiles and statically links this copy; it does not
search for a system Cap'n Proto installation or download sources. The source
archive includes the vendored files, and wheels contain the compiled library.
Runtime schema parsing remains included, so cereal schemas need no generated
Python bindings. See the vendor README for provenance and the removed features.
The retained upstream tests cover message construction, schema loading,
reflection, binary fixtures, serialization, and exceptions. Added lifetime tests
check kwargs construction with GC disabled and readers surviving their input or
iterator. Optional integration tests use real openpilot schemas and exercise
messaging, CAN conversion, WebRTC reflection, LogReader, pickling, and replay:
```sh
# Run in an environment with openpilot's dependencies and this fork installed.
OPENPILOT_PATH=/path/to/openpilot python -m pytest test/test_openpilot.py
python -m pytest /path/to/openpilot/openpilot/cereal/messaging/tests \
/path/to/openpilot/openpilot/tools/lib/tests/test_logreader.py
```
See [LICENSE.md](LICENSE.md) for the upstream BSD license and attribution.