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
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:
87
README.md
87
README.md
@@ -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.
|
||||
Reference in New Issue
Block a user