SofaBuffers
Structured Objects For Anyone
... so optimized, feels amazing.
SofaBuffers Python library
A streaming, dependency-free implementation of the SofaBuffers (Sofab)
serialization format — a compact, TLV-like binary format. It is the runtime
stream core, meant to be driven by generated code: a schema-driven generator
emits one class per message with the streaming serialize / deserialize pair
and the one-shot encode / decode wrappers over it, all of which call the
Encoder / Decoder primitives here — the same way protobuf's generated code
calls its runtime.
The public API is one pair of classes with two interchangeable engines selected
at import: the hot path (varint / zigzag / buffer management) ships as an
optional compiled native accelerator (Cython → C, sofab._speedups) loaded
automatically when present, with a pure-Python fallback used when it is not.
The two are byte-for-byte interchangeable, so the library runs anywhere CPython
runs, with or without a C compiler.
Requirements
Python 3.9 or newer (CPython or PyPy); CI runs 3.9–3.14. The optional native accelerator additionally needs a C compiler and Cython, both build-time only.
Dependencies
None at runtime — the pure-Python path uses only the standard library
(struct, io). The one third-party build dependency is Cython
(PEP 517), used to compile the accelerator
and never imported at runtime.
Packaging
Distribution sofa-buffers-corelib on PyPI; import package sofab.
pip install sofa-buffers-corelib
import sofab # Encoder, Decoder, Visitor, wire-format types and limits
print(sofab.__version__) # release of this runtime
sofab.__version__ is the release version of the runtime and is the only
place it is written down: pyproject.toml declares the distribution version
dynamic and reads it from there, so an install and an import always report the
same string.
Why this design
| Goal | How |
|---|---|
| Streaming out | Encoder writes into a fixed buffer and drains it to any binary stream (file, socket, BytesIO) as the message is written — never after it — so a message can exceed RAM and stream straight to the wire. |
| Streaming in | Decoder is a pull parser over any read(n) reader; next() returns one field header at a time, never materializing the whole message. A call that runs out of bytes reports SofaIncompleteError without consuming anything, so it can simply be re-issued when more arrive. |
| Native speed, zero runtime deps | The hot path ships as an optional Cython accelerator (sofab._speedups); when it can't be built it falls back to pure Python. No runtime third-party deps either way. |
| Runs everywhere | With no compiler or wheel, pip still installs a working pure-Python build (py3-none-any). Native and pure paths are byte-for-byte identical — falling back changes only speed. |
| Sticky errors | Encoder(sticky=True) records the first failure and turns later writes into no-ops, so generated serialize code can check enc.error once. |
| No silent truncation | An integer field accepts what Python accepts wherever an integer is required — anything with __index__ (int, bool, IntEnum, NumPy integers). A float is refused with SofaRangeError, 3.0 included: writing 3 for a caller's 3.7 would change the value in a way the receiver could never detect. |
| No unreadable message | The format-wide ceilings (CORELIB_PLAN §6.2) bind the encoder too: a field id above ID_MAX, an array count above ARRAY_MAX, nesting past MAX_DEPTH, and a string/blob payload above FIXLEN_MAX (2 GiB − 1) are each refused with SofaRangeError before the field header is written, so the encoder never returns a message that every conformant decoder — this one included — would reject. An oversized blob is refused on its length, before it is copied. |
| Floats narrow by IEEE rules | A Python float is a C double, so write_float32 (scalar and array) narrows on the way out: round-to-nearest, and a magnitude past FLT_MAX overflows to ±inf — the same bytes a native-fp32 corelib writes, and identical in both engines. NaN payloads, signaling ones included, keep their exact bits (§4.6/§6.5). |
| Reserve-offset | Encoder.over_buffer(buf, offset=…) leaves room at the front of the buffer for a lower-layer protocol header; a sink calling buffer_set(buf, offset) re-arms that room for every flushed packet. |
| Sparse sequences | write_sequence_begin_lazy holds a sequence header back until the sequence receives content, so a sequence-typed field equal to its declared default is omitted rather than framed empty (MESSAGE_SPEC §2) — decided in one forward pass, without buffering the sub-message. write_sequence_end drops a contentless sequence; write_sequence_end_keep forces the frame out where presence itself carries meaning — a wrapper-array element is still always framed, even when all-default, because element presence is what carries a dynamic array's length (§5.1). |
| Typed | Fully type-annotated with a py.typed marker (PEP 561); clean under mypy --strict. |
| Forward/backward compatible | Unknown fields are consumed with skip() — consumed, not copied: the payload is stepped over, never materialized. A field whose wire type contradicts the read is the same situation and takes the same path (MESSAGE_SPEC §7.3, see Deserialize). |
Usage
The codec has four use cases — serialize a message that fits in one buffer, serialize one too large for the buffer (streamed out in chunks), deserialize a whole message, and deserialize one arriving in chunks — plus the generated-code path that wraps them.
Serialize
Write fields into an Encoder and take the finished bytes:
from sofab import Encoder
enc = Encoder()
enc.write_unsigned(1, 42)
enc.write_signed(2, -7)
enc.write_string(3, "hi")
data = enc.getvalue()
Encoder() writes into a fixed 1 KiB scratch buffer and appends each bufferful
to the result it hands back — it never grows a buffer mid-message (see Memory
handling). Pass a writer (anything with write(bytes)) and
the same bufferfuls go there instead, as they are produced:
with open("msg.sofab", "wb") as fh:
enc = Encoder(fh) # streams out; nothing accumulates
enc.write_unsigned(1, 42)
enc.flush() # push the tail
Serialize stream
Encoder.over_buffer is the same mechanism over a buffer you supply: it
writes in place and calls a flush sink whenever the buffer fills, so an
arbitrarily large message streams out through however much memory you chose to
give it:
from sofab import Encoder
out = bytearray() # or a socket / file write
enc = Encoder.over_buffer(bytearray(16), offset=0, flush=out.extend) # tiny buffer
for i in range(1_000_000):
enc.write_unsigned(i % 128, i)
enc.flush() # push the tail
With no sink the buffer is all the encoder gets: it holds the message or
reports SofaBufferError. That is the shape generated code uses when the schema
bounds the message — allocate MAX_SIZE, encode in one pass, no flush possible:
buf = bytearray(Point.MAX_SIZE)
enc = Encoder.over_buffer(buf, offset=0)
point.serialize(enc)
wire = memoryview(buf)[: enc.bytes_used()] # no copy
Deserialize
Decoder is a pull parser: next() returns one field header at a time; read the
value with a typed accessor, or skip() an unknown field:
import io
from sofab import Decoder
dec = Decoder(io.BytesIO(data))
while (field := dec.next()) is not None: # None == clean EOF
if field.id == 1: v = dec.unsigned()
elif field.id == 2: v = dec.signed()
elif field.id == 3: s = dec.string()
else: dec.skip() # unknown field
A read whose type contradicts the field on the wire is not an error
(MESSAGE_SPEC §7.3): it returns None and consumes nothing, so the field is
skipped by the following next() exactly like a field with an unknown id and the
decode stays complete — dec.float64() on a string field yields None, not an
exception. Test field.type / field.subtype before reading (this is what
generated code does) or treat None as "not my field"; because nothing was
consumed, re-reading the same field with the type the wire carries still works. A
read issued when there is no pending value at all — before the first next(),
twice for one field, or on a sequence start/end — is a caller mistake and raises
SofaRangeError (§6.3 InvalidArgument, the only code that taxonomy has for
one). There is no separate "API misuse" class: §6.3 has no code for one, and a
wrong-type read is not an error to catch in the first place.
Deserialize stream
Hand Decoder any object with read(n) (a socket, sys.stdin.buffer,
gzip.GzipFile, …) and pull fields with next() as they arrive. It refills on
demand, so the same loop decodes correctly even when fed one byte at a time,
wherever the bytes come from:
from sofab import Decoder
dec = Decoder(reader) # any read(n) source: file, socket, pipe
while (field := dec.next()) is not None:
... # pull each field, or dec.skip()
When the bytes have not all arrived yet. A reader that can return b""
before end-of-message — a non-blocking socket, a queue fed by another task — puts
the decoder in the position CORELIB_PLAN §5.2 calls INCOMPLETE: the bytes stop
inside a field. That is not an error and not the end of the message; it means
"feed me more". Two shapes signal it, and both are resumable — the suspended
call consumed nothing, so the answer to either is to obtain more bytes and
issue the same call again:
next()returnsNone— the bytes stopped exactly between fields (§5.2COMPLETE: a message may end here, and more fields may also still follow);SofaIncompleteErroris raised — the bytes stopped inside a field header or payload, or inside a sequence that is still open.
while True:
try:
field = dec.next()
except SofaIncompleteError:
feed_more(); continue # partial field retained; re-issue next()
if field is None:
if stream_ended: break # your framing decides; the decoder never does
feed_more(); continue
value = read_the_value(dec, field) # same retry rule for the typed reads
Whether an incomplete message is acceptable is the caller's decision, not the decoder's: only your framing (a length prefix, a datagram boundary, EOF) knows whether more bytes can still come.
Code generator
The most common real use is driving the library through generated code:
sofabgen --lang python emits a @dataclass per message with exactly four
methods (CORELIB_PLAN §6.1.1 fixes the names) — the streaming pair serialize /
deserialize, which talks to the primitives above, and the one-shot pair
encode / decode, which are thin wrappers over it. A hand-written stand-in:
import io
from dataclasses import dataclass
from sofab import Decoder, Encoder
# generated by: sofabgen --lang python
@dataclass
class Point:
x: int = 0
y: int = 0
def serialize(self, e: Encoder) -> None: # streaming out: write into any encoder
e.write_signed(1, self.x)
e.write_signed(2, self.y)
def deserialize(self, d: Decoder) -> None: # streaming in: pull from any decoder
while (f := d.next()) is not None:
if f.id == 1: self.x = d.signed()
elif f.id == 2: self.y = d.signed()
else: d.skip() # tolerate unknown fields
def encode(self) -> bytes: # one-shot wrapper over serialize()
e = Encoder()
self.serialize(e)
return e.getvalue()
@classmethod
def decode(cls, data: bytes) -> "Point": # one-shot wrapper over deserialize()
o = cls()
o.deserialize(Decoder(io.BytesIO(data)))
return o
wire = Point(x=3, y=4).encode()
got = Point.decode(wire) # got.x == 3, got.y == 4
The one-shot pair holds the whole message in memory; serialize / deserialize
are the same code without that requirement. Out, serialize writes into an
encoder over a buffer you sized, draining to a sink as it fills; in,
deserialize pulls from a Decoder over any read(n) source, which is this
port's chunk-fed reader — the corelib Decoder is the object §6.1.1 calls
decoder(), so there is no second handle to obtain:
# streaming out: a 2-byte buffer, drained to the sink as the message is written
packets = bytearray() # or a socket / file write
enc = Encoder.over_buffer(bytearray(2), offset=0, flush=packets.extend)
Point(x=3, y=4).serialize(enc)
enc.flush() # push the tail
streamed = bytes(packets) # == wire, out of a buffer half its size
class ChunkReader: # stand-in for a socket / pipe
def __init__(self, data): self.data, self.pos = data, 0
def read(self, n): # hands over one byte per call
chunk = self.data[self.pos : self.pos + 1]
self.pos += len(chunk)
return chunk
# streaming in: the same object, fed one byte at a time
got_streamed = Point()
got_streamed.deserialize(Decoder(ChunkReader(streamed)))
A reader that can run dry before the message ends adds one obligation to the
generated loop: retry a SofaIncompleteError after obtaining more bytes, as
Deserialize stream describes — the suspended call
consumed nothing, so re-issuing it is always correct.
Decode limits
Array counts and string/blob lengths are optional on the wire, so by default the
decoder allocates whatever a message declares. Untrusted input can abuse that, so
Decoder takes optional receiver-side caps that reject an oversize field on its
count/length word alone — before any allocation or payload buffering:
dec = Decoder(reader, max_array_count=65536, max_string_len=1 << 20, max_blob_len=1 << 20)
A field whose declared count/length exceeds its cap raises SofaLimitError. That
is a policy rejection, distinct from malformed input: it is a sibling of
SofaDecodeError under SofaError, not a subclass, so except SofaDecodeError does not catch it. Each limit defaults to None (no cap);
the values are meant to be supplied by generated code, not
guessed by the runtime. Independent of any limit, the decoder never pre-allocates
from an untrusted array count — a truncated oversize claim fails promptly as
SofaIncompleteError rather than attempting a huge allocation.
The verdict is reached on the count/length word alone, inside next(), before a
single payload byte is read or buffered — the point CORELIB_PLAN §6.2.1 requires
it to be decided. It is raised by the call that would consume the field: a
typed read, skip(), or the auto-skip the following next() performs. Nothing
is read or allocated in between, and the field cannot be got at any other way, so
the protection is the same; what the gap buys is the window in which the caller
can say the field is not one of the cap's business.
A schema-bounded field is exempt: schema_bounded()
A cap is capacity the deployment commits where the sender chooses the size.
Where the schema already states a count:/maxlen:, that bound governs
instead and an over-bound value is malformed input, so §6.2.1 forbids the cap
there ("MUST NOT be applied to a field the schema already bounds") and §6.3
forbids SofaLimitError on such a field. Only the schema knows which fields
those are, so the caller declares them per field:
f = dec.next()
if f.id == 1: # `name: { type: string, maxlen: 4194304 }`
dec.schema_bounded() # the cap does not bind this field
if dec.fixlen_len() > 4194304:
raise SofaDecodeError("name: string byte length above schema maxlen")
o.name = dec.string()
The declaration covers the current field only — the next next() starts an
undeclared, and therefore capped, field again — and it is a no-op on a field no
cap has rejected, so generated code emits it unconditionally on the fields its
schema bounds. Declaring is a promise to enforce: with the cap off, nothing
else stands between an untrusted length word and the allocation it implies, so
the caller must reject an over-bound count/length itself, as SofaDecodeError
(MESSAGE_SPEC §7.1). fixlen_len() is the peek for that — it consumes nothing
and answers whether or not a cap has spoken on the field, so the schema bound can
be decided in either order. A Visitor driven by drive() can call
schema_bounded() from on_field, which is reached before the typed read.
A schema bound is the opposite kind of thing from a cap: it is part of the
message definition, so breaching it is malformed input, not policy. The
integer-array reads take the declared element width for exactly that reason —
read_unsigned_array(255) for a u8 array, read_signed_array(-128, 127) for
an i8 one (either half may be given alone; the other side stays open). An
element outside the declared width raises SofaDecodeError the moment its own
bytes are decoded, so the verdict never depends on how much of the array
followed it or on which engine read it (MESSAGE_SPEC §7.1). Omit the argument
for u64/i64, whose range is the value domain, or for an unbounded consumer.
Memory handling
The key point for Python: the library allocates results for you — the caller never provides a value buffer.
-
Decode: a suspended call keeps its bytes, and only its bytes. Everything the reader hands over is retained, so a field split across chunks is never half-consumed; the buffer's consumed prefix is dropped on the next refill, down to the first byte of the call in flight — that byte is the one a resumed call re-reads from. The window held is therefore one field (for a
skip()over a sequence, one sequence), not one message. -
Decode.
Decoderkeeps a single internal buffer, refilled from theread(n)source and never handed out, so there is no zero-copy aliasing:string()returns a freshstr,bytes()independentbytes, scalars a freshint/float, and arrays a newlist— every result stays valid after the decoder advances.fixlen_len()peeks the current string/blob field's exact wire byte length without consuming it, so a caller can bound the field against a schemamaxlenbefore reading — no re-encoding a decodedstrjust to measure it. -
Decode: a value you don't want costs nothing to get rid of.
skip()— and the auto-skipnext()performs over an unconsumed value — walks a string, blob or fixlen-array payload by advancing the cursor, so nothing is allocated for bytes that are being discarded (CORELIB_PLAN §5.2: a skip consumes). Skipping a 1 MiB blob already in the buffer is a pointer bump, not a 1 MiB copy. The bytes are still buffered when the payload straddles a refill — a suspended skip has to be replayable from its first byte, andskip()over a sequence replays the whole walk — so what a skip saves is the copy, not the window: the memory held is still one field (one sequence for a sequence skip). -
Encode: one ownership model — the output buffer is fixed, and never grows. CORELIB_PLAN §5.1 forbids a corelib to allocate an output buffer or to grow one, so there is a single mechanism here with three ways to reach it, not two competing models:
Encoder.over_buffer(buf, offset, flush)is the primitive and the only caller-supplied form: it writes in place through amemoryview, drains to the sink when full and reuses the buffer — or, without a sink, holds the message or reportsSofaBufferError. That is the shape generated code uses for a schema whoseMAX_SIZEbounds the message.Encoder(writer)installs a 1 KiB scratch buffer with a sink that forwards each bufferful towriter.write— §5.1's "unbounded schema" shape. A 100 MB message costs 1 KiB of encoder memory, and the bytes leave while the message is written, not atflush(). Nothing is retained, sogetvalue()raisesSofaRangeError: returning the undrained tail would be partial output dressed up as a whole message.Encoder()is the same scratch buffer with the sink appending into the result — the messagegetvalue()hands back, joined from the drained chunks (a message that fits in the scratch is never chunked at all, and astring/blobrun longer than the buffer becomes one chunk rather than being copied through it). What grows is the message being returned, not a buffer being written into:bytes_used()never exceeds 1 KiB.
The scratch is one allocation per encoder, made at construction and never resized. §5.1 puts even that in the generated layer, which knows the schema — a caller who wants zero library allocation supplies the buffer with
over_buffer. -
MIN_OUTPUT_BUFFERis1, and it applies to a buffer installed with a sink.sofab.MIN_OUTPUT_BUFFERis the smallest output buffer this port accepts for streaming: one byte, because the encoder splits every atomic unit — a header varint, afixlen_word, an element count, a scalar, one float — at any byte boundary, so a one-byte scratch buffer already yields exactly the one-shot bytes.Encoder.over_buffer(buf, offset, flush)and every mid-streambuffer_set(buf, offset)that carries a flush sink requirelen(buf) - offset >= MIN_OUTPUT_BUFFERand raiseSofaRangeErrorright there — where the buffer is handed over, never partway through a message. A buffer installed without a sink is subject to no minimum: no flush can occur, so the buffer simply holds the message or reportsSofaBufferError, and sizing it from a generatedMAX_SIZEstays exact — a message that encodes to two bytes encodes into a two-bytebytearray. There is no pass-through: astring/blobrun is copied into the output buffer like any other output, and every flush hands the sink abytessnapshot of that buffer's prefix — a sink may retain what it receives without pinning caller memory. -
The start offset belongs to the installation, not to the buffer. A flush sink states what it did by what it does before returning. Returning without installing anything means it copied the bytes it was handed: the same buffer stays active and encoding resumes at offset 0. A sink that takes the buffer — queues it for an async write, hands it to a transport — must install a replacement with
buffer_set(buf, offset)before it returns, and that call'soffsetis where encoding resumes. Re-installing is therefore how a sink gets fresh framing-header room in every flushed packet (one header per packet), including when it passes the same buffer back: a bare return would reserve nothing, since the offset is consumed by the installation that carried it. -
Sequence framing is lazy.
write_sequence_begin_lazy(id)pushes the id onto a pending run and writes nothing; the first field write inside commits the whole run, outermost header first.write_sequence_end()then drops a sequence that never got content — header and end marker — which is exactly MESSAGE_SPEC §2's "omit a sequence-typed field equal to its declared default", since generated code already omits every child equal to its default. Close withwrite_sequence_end_keep()wherever the frame carries information regardless of its contents: a wrapper-array element (element presence is what carries a dynamic array's length, §5.1) or an array field that must encode as explicitly empty against a non-empty declared default. The two mistakes are not symmetric —end_keepwhereendwould do costs one non-canonical empty frame every decoder normalizes away, while the reverse changes a decoded array's length — soend_keepis the safe choice when a call site is ambiguous. The pending run grows on demand, so the hold-back reaches the fullMAX_DEPTHand every nesting depth is canonical, and it is allocated on the first hold-back — an encoder that never opens a sequence never pays for it. The pending ids are encoder state, never buffer content, so a flush cannot split a run by construction: a held-back header takes no buffer space, and the buffer only fills through a write, which commits the run before its first byte. A tiny output buffer therefore yields exactly the one-shot bytes.
Native accelerator
Encoder / Decoder / Field are re-exported from the compiled
sofab._speedups extension when present, and from the pure-Python
encoder.py / decoder.py otherwise. The native core is a small Cython
implementation of the same algorithm — one contiguous buffer, an advancing
cursor, bulk memcpy, and varint/zigzag compiled to C. Both engines import wire
constants, enums and exception classes from the shared types.py, so a
SofaRangeError is the same class from either, and the two produce
byte-for-byte identical output (enforced by tests/test_native_parity.py).
The active engine is reported by sofab.IMPL ("native" or "python"):
import sofab
print(sofab.IMPL) # "native" when the compiled extension is loaded
Force the pure-Python path with SOFAB_PUREPYTHON=1.
Released wheels ship the accelerator already compiled, so a plain
pip install sofa-buffers-corelib gets the native engine without a toolchain on
every platform that has a wheel (CPython 3.9–3.14 on Linux — glibc and musl,
x86-64 and ARM64 — macOS Intel and Apple Silicon, and Windows x86-64). Anywhere
else pip builds the sdist, which compiles the accelerator if a C compiler is
present and installs the pure-Python engine if not.
Feature flags
The package always builds the full format (unsigned / signed varints, fp32 /
fp64, strings, blobs, arrays and nested sequences). The one build toggle is
SOFAB_DISABLE_NATIVE=1, which builds a native-free (pure-Python) distribution;
it changes only speed, never the wire format or the public API.
Build & test
python -m venv .venv && . .venv/bin/activate
pip install -e . pytest ruff mypy # compiles the native accelerator if a C compiler is present
pytest # vectors + roundtrip + streaming + malformed + native↔pure parity
ruff check src/sofab tests # lint
mypy --strict src/sofab # type-check
If the compile fails or no compiler is available, the install falls back to
pure-Python (the extension is marked optional in setup.py). To exercise both
engines:
pytest # whichever engine is active (native if built)
SOFAB_PUREPYTHON=1 pytest # force the pure-Python engine
That optionality has a sharp edge: a failed compile removes every native test
(they are gated on importing sofab._speedups) instead of failing one, so a run
can stay green with the accelerator — and the native↔pure parity tests — gone.
SOFAB_REQUIRE_ENGINE=native|python closes it, by making the run assert that
sofab.IMPL is the engine it claims to be exercising:
SOFAB_REQUIRE_ENGINE=native pytest # fails if the accelerator is missing
SOFAB_PUREPYTHON=1 SOFAB_REQUIRE_ENGINE=python pytest # the fallback engine, pinned
CI runs the full suite twice on every supported Python — once per engine, each
pinned that way — and adds a leg installed with SOFAB_DISABLE_NATIVE=1 that
proves the compiler-less install still passes.
Benchmarks
bench/perfbench.py implements the three tools BENCH_SPEC requires — the same
workloads, on the same data, measured the same way and printed in the same
grammar as the C/C++/Rust/Go/… ports, so the numbers are directly comparable
across languages. bench/compare_protobuf.py is extra, and language-native: it
compares the native accelerator, the pure-Python fallback, and (for a yardstick)
protobuf's Python runtime (upb C backend), with full materialization on both
sides so it is apples-to-apples with the SofaBuffers pull API:
python bench/perfbench.py bench # throughput on this machine, MB/s (MB = 1e6)
python bench/perfbench.py perf # per-op cost for the shared 12-field message
bash bench/run_callgrind.sh # instructions/op (Callgrind) — clock-independent
pip install protobuf # optional; the column is dropped if absent
python bench/compare_protobuf.py # best-of-5 MB/s table
bench / perf measure this machine and move with its load; run_callgrind.sh
counts instructions retired, which is deterministic and comparable across hosts,
so it is the one to trust when judging a change to the library itself.
(time still works as a synonym for bench.)
The workloads are BENCH_SPEC's, not this port's invention:
| dataset | what it is there for |
|---|---|
u64 array (1000) |
the compact scalar-array path, 1..10-byte varints |
typical message |
seven mixed fields, ~37 bytes — the small-message case |
perf message (perf only) |
twelve fields, 170 bytes on every port — a size parity check |
blob 1MB |
buffer handling: 1,000,005 encoded bytes, one-shot vs. streaming vs. chunk-fed decode |
composite |
956 bytes exercising a wrapper array, non-ASCII UTF-8, depth-3 nesting, an omitted default field and a two-byte header |
The three blob 1MB rows are read against each other, never next to
typical message: five of its bytes are metadata and a million are payload, so
the absolute figure is this machine's memory bandwidth. The signal is the gap
between them — one-shot is one contiguous write into a 1,000,005-byte caller
buffer with no sink; streaming is the same bytes through a 4096-byte caller
buffer with a flush sink, i.e. ~245 flushes of the divisible-run path
(CORELIB_PLAN §5.1); decode is fed in 4096-byte chunks. This port grants no
pass-through, so BENCH_SPEC's optional blob 1MB passthrough row is absent
rather than stubbed.
BENCH_SPEC says to read that pair as Ir/op, and on x86-64 CPython there is a
caveat: the one-shot row is a single 1,000,000-byte memcpy, which glibc
serves from its ERMS (rep movsb) path and Valgrind counts at ~1 instruction per
byte, while the streaming row's 4096-byte copies take the vectorised path at a
fraction of that. Ir/op consequently reports one-shot as the dearer of the
two (≈1.07M vs ≈0.41M) although it does strictly less work — measured, not
assumed: a bare 1 MB memcpy costs ≈967k Ir under Callgrind on this host. For
these two rows read the MB/s above (one-shot ≈2.7× streaming, which is the real
cost of the flush machinery); every other row is Ir/op's to tell.
Representative result (throughput MB/s, higher is better; one x86-64 host, CPython 3.14 — the ratios are the point, not the absolute numbers):
| Workload | sofab native | sofab pure | native vs pure |
|---|---|---|---|
| encode: u64 array (1000) | 1067 | 7.9 | ≈136× |
| encode: typical message | 47.6 | 3.8 | ≈13× |
| encode: blob 1MB one-shot | 37729 | 28370 | ≈1.3× |
| encode: blob 1MB streaming | 13777 | 3066 | ≈4.5× |
| encode: composite | 176 | 7.6 | ≈23× |
| decode: u64 array (1000) | 452 | 5.4 | ≈84× |
| decode: typical message | 15.7 | 1.3 | ≈12× |
| decode: blob 1MB | 5926 | 414 | ≈14× |
| decode: composite | 38.0 | 5.0 | ≈7.6× |
| decode: composite skip-all | 187 | 6.5 | ≈29× |
Two readings worth pulling out. The blob one-shot row is memcpy in both
engines and the two are nearly level — there is no per-field Python work left to
remove there; the streaming row costs the native engine 2.7× the one-shot and
the pure engine 9.3×, and that gap is the flush machinery. And decode: composite skip-all is ≈4.9× decode: composite on the native engine: what a
router or filter saves by walking a message without materializing it.
Against protobuf (a separate measurement — bench/compare_protobuf.py, best of
5, one x86-64 host, CPython 3.12; read this table internally, not across into the
one above):
| Workload | sofab native | sofab pure | protobuf (upb) | native vs protobuf |
|---|---|---|---|---|
| encode: u64 array (1000) | ≈840 | ≈11 | ≈160 | ≈5× faster |
| encode: typical message | ≈18 | ≈4.4 | ≈10 | ≈1.7× faster |
| decode: u64 array (1000) | ≈460 | ≈7.8 | ≈195 | ≈2.4× faster |
| decode: typical message | ≈9.2 | ≈2.1 | ≈9.0 | ≈1.0× (see note) |
The native accelerator is an order of magnitude faster than the pure-Python
fallback on small mixed messages and ~85–135× on array-heavy ones, and beats
protobuf everywhere except the smallest decode, where the two are level. (The
per-field gap has widened since this table was taken — see the row set above,
measured on current main.) That last workload is where
the streaming pull API costs the most: it crosses the Python↔C boundary twice
per field (next() then a typed read), whereas protobuf parses the whole message
in one C call — an inherent pull-vs-parse-tree trade-off that only shows on very
small messages, and the price of never having to hold one in memory.
Release files for sofa-buffers-corelib 0.10.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sofa_buffers_corelib-0.10.1.tar.gz | 362.1 kB | Details |
Built distributions (wheels)
Total release size: 18.5 MB
Release files / sofa_buffers_corelib-0.10.1.tar.gz
| Download URL | sofa_buffers_corelib-0.10.1.tar.gz |
|---|---|
| Size | 362.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fe00d15a4896aa1eff30443a05c8cea72495c16215763eaeb89a00e82ceafd97
|
|
BLAKE2b-256 checksum How to use checksums |
ca20cc511a942a2b474bd54cf468e080376003b879d9477ce9fb952da2161769
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp314-cp314-win_amd64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 125.4 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9f609994dc9747d61e4a45f8d801c6afac90659d8a7fd5981e7456c9c0bc29a9
|
|
BLAKE2b-256 checksum How to use checksums |
bf4ab4841d881245a5f9776c772eb268e2edad98bd2d33562a463f06be860cde
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp314-cp314-musllinux_1_2_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp314-cp314-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 648.2 kB |
| Tags | CPython 3.14 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
ad908fe26a8f6868cd9b94e80860f2cc01e46d3788927d0ef077cadc9af7d307
|
|
BLAKE2b-256 checksum How to use checksums |
fbae6b6f0bfa34637f60d10de113311e13489c272b219beaa4faa4eeee7d5072
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp314-cp314-musllinux_1_2_aarch64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp314-cp314-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 624.1 kB |
| Tags | CPython 3.14 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
bb6f1bbe71dd24995739ffe24bdfb7ab4361de60a3fdbf05cf2449b0b090bdc9
|
|
BLAKE2b-256 checksum How to use checksums |
04d48a64b1b4bac17b481abc874dd69c6ccb1c270f6bb3d0cc5896914d6802c9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 650.5 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
443ea321a79a5b24b982892ac31ea97289295a42d444a9e8e7713c726ca5d085
|
|
BLAKE2b-256 checksum How to use checksums |
37fc936acc8e3e5782e2bbe124abf7628f6de434e09de6a56f94cafe28ed2e9b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 637.9 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
fb5d2a48cca52fa8c24b444d5d5f09dbbaba4759463f96c440ba86c54df30b63
|
|
BLAKE2b-256 checksum How to use checksums |
ccd69568726850ccf955964afd38f0528316983001a69b3f091a9b66e784af6d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 137.6 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
2f58ae03317dcace4e47d3a5bdbb97406fbc2129b63787e39b5700f7d4a57c35
|
|
BLAKE2b-256 checksum How to use checksums |
0ef43961bf73c45510fb744ed1811dafa131d80cb1fb9cf1152eefcffd080c27
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp314-cp314-macosx_10_15_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp314-cp314-macosx_10_15_x86_64.whl |
|---|---|
| Size | 140.3 kB |
| Tags | CPython 3.14 macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
e4ba1ce9e15a51e4c53ec92efacb42a10918548c01f2185377cfd8415e48f5e5
|
|
BLAKE2b-256 checksum How to use checksums |
636557415f1d1ff061971807da176ddd526b2d128213fda59ad2655158a03787
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp313-cp313-win_amd64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 123.7 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
bf00929ff1ccdd00b8697c6ae556f9944f8da05ee66a7eaec193fb2c2092a400
|
|
BLAKE2b-256 checksum How to use checksums |
8cc7c3cd0cc5ee52d62825b3e9e837dc08e85b415f7fbeedf03a38fe84a7f12e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp313-cp313-musllinux_1_2_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp313-cp313-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 654.4 kB |
| Tags | CPython 3.13 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
d41e12222f564df7d070cafb8517f5342223f241aca2e3ec82ebdf093a93511d
|
|
BLAKE2b-256 checksum How to use checksums |
afa65a3a20cd90dcb4b62ed83b550a6f3e6e0d26a4ec33cd6881f0f05b032839
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp313-cp313-musllinux_1_2_aarch64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp313-cp313-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 625.0 kB |
| Tags | CPython 3.13 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
34dea6669aa23a630ed309a9b7e62fef44fda61f3863d608fe43f3d194749706
|
|
BLAKE2b-256 checksum How to use checksums |
77ee604290481594176a627586cdd124dc420f90269d131fce842bfdafa9df30
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 657.4 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
0d6b59936cbc5ed2d126efc6b34bf5af4c5f3e08ae3fc4ee3187172a14eb60bc
|
|
BLAKE2b-256 checksum How to use checksums |
e6e06d65cf47d8a12a15c98e87ad438f03574e3d44ef78f0bb21e69762a34538
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 639.3 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
8d6ef9c79b025626643e59d159eeefa87790859b238b86a9d9252d69f5ff5bd6
|
|
BLAKE2b-256 checksum How to use checksums |
fcc6d3493ed99e63d57bbafffe282b931977cad758cbbfca77b4b67902f8adff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 136.9 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
5c8b8fe131a6917f829ba31b948a36613c3c5263364d3cf006a37c8585a9d2ea
|
|
BLAKE2b-256 checksum How to use checksums |
9aa610ffe875edf52845d8bb922ff7cab9f30cffc3b2310084f8426679d9c119
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp313-cp313-macosx_10_13_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp313-cp313-macosx_10_13_x86_64.whl |
|---|---|
| Size | 139.9 kB |
| Tags | CPython 3.13 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
38fe4784ad072e05ec085fdb40991bc438c949b09c0d0f56a9de8a0e6c4c6977
|
|
BLAKE2b-256 checksum How to use checksums |
ef4011a3a1ddc1e2e8509c0ef205524befb34bfe51b88f932c844325af4c337f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp312-cp312-win_amd64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 123.8 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
3d5c1f3b73d2a592713041ed05dd6b641f16cf62a7c6ad4ca46f9d6f330a4661
|
|
BLAKE2b-256 checksum How to use checksums |
7fdbc6db780fdd00675f99f4132a6041dd548e93d480d1e119329159985aeb41
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp312-cp312-musllinux_1_2_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp312-cp312-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 657.2 kB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
80f68394a8a4bfa20512c2592f18d1569e2a03d65af32b867c325d5f663afe05
|
|
BLAKE2b-256 checksum How to use checksums |
eae059dc4bdac0aa7cbe1478ac52f93368644424a0d4a81c741550403c978b55
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp312-cp312-musllinux_1_2_aarch64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp312-cp312-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 631.0 kB |
| Tags | CPython 3.12 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
b0b93177859760d73ae8df512b4a17d97abcfb6a0d49707d8732e3413b77178e
|
|
BLAKE2b-256 checksum How to use checksums |
4b90ad50c2af8ec517906b88fbab62573261f29cfd6b8b4c1a7407f8635fa5a9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 659.5 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
cf408dc7601de1d7675d548ccb0aa7937d2f23c870f1409b17abe21a608adfd6
|
|
BLAKE2b-256 checksum How to use checksums |
be9973be90482c9d6d6dc205d365c8838172d90fbbc5f7966dadbe297d5acf4e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 644.4 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
a25323822666c56b536ad926f99ddddc9ae6609b21ccdc07a82aeb3c9fd12d04
|
|
BLAKE2b-256 checksum How to use checksums |
e978a23872accfc9ed3ee2b7ea9e4b42ec0dd7d1e3badabf227cc48a57c10a1c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 137.3 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
58c2c59e40d2a7cb5b2bc299f3007dcfe7fc3f8b5c6fe9bf30ce93c977dbe19b
|
|
BLAKE2b-256 checksum How to use checksums |
333912c2b940e4cf031df998c6b911b390d8edccab4ccc2bb1c0f5e3521e6f57
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp312-cp312-macosx_10_13_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp312-cp312-macosx_10_13_x86_64.whl |
|---|---|
| Size | 140.4 kB |
| Tags | CPython 3.12 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
c3c258150c123bb6025cd148cc98509565b29fabcf48e428f93fe5c74380bdc9
|
|
BLAKE2b-256 checksum How to use checksums |
4a31764d1344e6002baddc425ef3414f465ac6d4485c240f14c2ec32afc9a3c4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp311-cp311-win_amd64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 126.4 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2ee48ae10b68cec729663a9ccdb46220df6a15da59025f2d4548ee8166c09a4a
|
|
BLAKE2b-256 checksum How to use checksums |
aab59b485319abc153eaee6c8f48889f4e9ab8035c29c75ee335935b635a3d86
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp311-cp311-musllinux_1_2_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp311-cp311-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 697.9 kB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
bec5b9b5d0a8465cef02657f61be1c8b14123870103245005aab9e4599f8a92d
|
|
BLAKE2b-256 checksum How to use checksums |
956fa41ab47f92c5cb0643293fe5cdf7df2eef003cb8838c602e50730a34c581
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp311-cp311-musllinux_1_2_aarch64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp311-cp311-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 671.9 kB |
| Tags | CPython 3.11 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
79312d4ae281f6329cb9f4b97cd9ad4c22b6fef9a0405024fc9567c802ea8a6f
|
|
BLAKE2b-256 checksum How to use checksums |
a86be52f25b892923992f645e1d634e2683dec7fcd5818f11a1c0f8a29ce650b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 692.6 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
352f1b935d2d374b73c884dc339ce3539b1a14a47c812fd87cf1f8a8644ee672
|
|
BLAKE2b-256 checksum How to use checksums |
6b645f79a7b765b7493b262b556b51066469218da380aef187cc1ede9bbf478b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 679.6 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
71fea385648ba882df49f96a1f645fe3b971f25f598fae8e2bd0fdcaebd6d8b9
|
|
BLAKE2b-256 checksum How to use checksums |
def55e15c2be3290629159107d83b932efe99548af4891ae80bc136c89e3300a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 138.1 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
953d6cc3e1423fad4d6cf511b3d4e79d41ffd43f5b5d4a717f3d22b383266367
|
|
BLAKE2b-256 checksum How to use checksums |
8845079c35e65cfa96d6e1f5185e5557c469acc2d7541c245b0c00d81231a317
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp311-cp311-macosx_10_9_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp311-cp311-macosx_10_9_x86_64.whl |
|---|---|
| Size | 142.9 kB |
| Tags | CPython 3.11 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
185672cdb94cf2dfba54407b5655d17090a905528f272d1bc623a478362c39b5
|
|
BLAKE2b-256 checksum How to use checksums |
a83bc678f880b79d2a12b940213da2ac0fb14cbd61d8423ce91d0b6fa3f762e5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp310-cp310-win_amd64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 125.6 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a1c3cf9493f1050d756a43f2a36508ae1e42bc594ac17fe5189b710f95a7a8f2
|
|
BLAKE2b-256 checksum How to use checksums |
3c5f679d6e6363e4ab42e67ac95d0763e2c7c519044b03d5b4d968ef0abc7d2e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp310-cp310-musllinux_1_2_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp310-cp310-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 671.2 kB |
| Tags | CPython 3.10 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
953e04d7217d4aee3a83237602fb2d5570ff2361a5c64c848bd9d48d64fd9f48
|
|
BLAKE2b-256 checksum How to use checksums |
85a2fe287c7f1e08750762d31cc126456570cbfebc31809d764469867c75a0de
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp310-cp310-musllinux_1_2_aarch64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp310-cp310-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 650.6 kB |
| Tags | CPython 3.10 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
c0895df28686e9bac4aee94375c0189313e3cd2f2dde84516307f2a83e8c5267
|
|
BLAKE2b-256 checksum How to use checksums |
3642490a32d17e0d5806d0d38b3c07c9321e96938b4976fab4ef881d24b96359
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 668.0 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
da07cdd9dfd3e29dab23ada4dd98af5b15f32cba07caf2e81918dc74ee2d117d
|
|
BLAKE2b-256 checksum How to use checksums |
eb7e4b9cafeb2c9298e9f013fad9956d2d800508c25141bc18e97612185639f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 658.0 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
63d110e29e82ed727bf2edf79f0d5adb8909a0496ea7cabf03f8dd415f755edb
|
|
BLAKE2b-256 checksum How to use checksums |
17fa2f1ae25727249b6d24356138566ae70188ffe51df37507ae8b3e982d5a3a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 139.3 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
90ecf6e841c6336a40b62021463f9558900fc028fea456ef4a0e1dfb0b6af05a
|
|
BLAKE2b-256 checksum How to use checksums |
41229a12a71bbd071210b484c5bcca4ac1e1670d5cb89843db524544ba6ae6b6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp310-cp310-macosx_10_9_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp310-cp310-macosx_10_9_x86_64.whl |
|---|---|
| Size | 143.3 kB |
| Tags | CPython 3.10 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
391a0bb772aecbc5159929f2be8c06427e9e72ba51725ab88795d9e791c268c7
|
|
BLAKE2b-256 checksum How to use checksums |
f3ecd72ab21347b478cc158976d40f65158932c5920cc1e6c5ac74ab9c548dce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp39-cp39-win_amd64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 126.0 kB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
aaf662b371f3808b607d846ff01366d2b9d58ce3c29d37fff22cb2be7729c5df
|
|
BLAKE2b-256 checksum How to use checksums |
4f08a72a3b9fd450ea644e6dfa4f2a35966415538050c59fda35044f411e3b1f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp39-cp39-musllinux_1_2_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp39-cp39-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 668.0 kB |
| Tags | CPython 3.9 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
2cdb0b024d45bf02902f8d2bf121792453a21f4d2effb50afefba21a09f78f75
|
|
BLAKE2b-256 checksum How to use checksums |
0b9a4b3694e9ea5c7e9ff0a94a112f5a7856992f77176d12297c8d4a7390996a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp39-cp39-musllinux_1_2_aarch64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp39-cp39-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 646.9 kB |
| Tags | CPython 3.9 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
3b2ac2bfe643fd5f69cc31bb9bfd0ecf92e200b41a71438d6a3d9bc42fd6e59b
|
|
BLAKE2b-256 checksum How to use checksums |
92c49b8cc595d2a0c83f473bbb58fe21d20c71b768c75912408f26173f58bbb2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 665.2 kB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
b66653e4911cae77ad4e1650445f152304f44828a4d34c04639af60c9d5f45d9
|
|
BLAKE2b-256 checksum How to use checksums |
e66e0d134e844288053701f2e61ffa1c3dddd1c89b7b26f3265ced1b0dfd116b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 654.7 kB |
| Tags | CPython 3.9 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
7c98a088a461a20680f7b19471b4647310dc115111c2ee0472f729c895a3fbf7
|
|
BLAKE2b-256 checksum How to use checksums |
72273b545284c76acedfca0d4031570b8322393f584917df6538c054d55676c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp39-cp39-macosx_11_0_arm64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp39-cp39-macosx_11_0_arm64.whl |
|---|---|
| Size | 139.5 kB |
| Tags | CPython 3.9 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
b9246cf958eb4c0f11050db99162e5d4b9a491bb41d6702fdd53050e54f8905a
|
|
BLAKE2b-256 checksum How to use checksums |
30fa24f797003e8d83250370f912ed6fa22de08316d18d4e9273b488433c8146
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / sofa_buffers_corelib-0.10.1-cp39-cp39-macosx_10_9_x86_64.whl
| Download URL | sofa_buffers_corelib-0.10.1-cp39-cp39-macosx_10_9_x86_64.whl |
|---|---|
| Size | 143.6 kB |
| Tags | CPython 3.9 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
06dcaca70cc8f10e79a274a86d9f11e1ee09f56668ea9c85cb71c9861bbede55
|
|
BLAKE2b-256 checksum How to use checksums |
b097a208926103f649aaf69826faafa8733b2ba5c4eca49955a16b48551cbb47
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency log