Skip to main content

hypercast

CI PyPI License: MIT

match/case over a two-case verdict — the value, or a closed reason plus the exact byte span that offended — with the Rust core linked straight into CPython as a native extension. No dlopen, no ctypes marshalling, no runtime bridge.

Allocation-lean scalar casts — booleans, characters, the full integer family, reals, exact decimals, UUIDs, temporals. The PyO3 extension (hypercast._native) is the backend every wheel ships — a door is an ordinary METH_FASTCALL extension call into a direct Rust call, and the wheel maturin builds is the whole package (the interim ctypes fallback is gone). Python 3.11 is the floor, the oldest version still in upstream support (match/case is the consumption idiom).

Install

pip install hypercast

Real platform-specific wheels, so it lands at native speed with nothing to compile — no compiler needed and no dependencies at all; the PyO3 extension is the package. Each platform gets three wheels, which between them cover every CPython from the 3.11 floor up, with the GIL or without it:

Wheel Interpreters
cp311-abi3 CPython 3.11 and newer, with the GIL
cp314-cp314t free-threaded CPython 3.14
cp315-abi3.abi3t CPython 3.15 and newer, free-threaded or not (PEP 803)

on each of eight platforms, plus a twenty-fifth wheel for Pyodide in the browser (below):

x64 arm64
Linux, glibc 2.28 or newer (manylinux_2_28) ✓ ✓
Linux, musl 1.2 or newer (musllinux_1_2 — Alpine) ✓ ✓
macOS ✓ ✓
Windows ✓ ✓

Only wheels are published — there is no sdist. An interpreter none of the wheels matches (a glibc older than 2.28, PyPy, free-threaded 3.13) gets No matching distribution found from pip, not a source build.

On Alpine the musl wheel needs nothing beyond the base image — it carries its own copy of libgcc_s — and the whole suite passes on a bare python:3.14-alpine.

Free-threaded CPython runs it without the GIL. The extension declares it needs no GIL, so a free-threaded interpreter keeps the GIL off after import hypercast (no RuntimeWarning), and every door is safe to call from any number of threads at once: the verdict types and NumFormat are immutable, the objects a door builds its values with are bound once at import and only read after, and a door reads its str or bytes argument in place, both immutable. The bindings are written once, for free-threading; a GIL build runs the same code. No door releases the GIL on a GIL build: each is tens to hundreds of nanoseconds of pure Rust, less than the handoff would cost. CI runs the whole suite on free-threaded 3.15 on every platform, and installs each wheel on its own interpreters before it is published.

The package is typed: it ships py.typed and a stub for the extension module, so mypy and pyright see each door's own Success[...] | Fault rather than Any — which is what makes the exhaustiveness check below a real one.

Usage

import hypercast

match hypercast.cast_i32("(1,234)", hypercast.NumFormat.INVARIANT):
    case hypercast.Success(value):
        print("got", value)                       # -1234, accounting negative
    case hypercast.Fault(reason, offset, length):
        print(reason.name, "at char", offset)

Door names mirror the native ABI (cast_i32, cast_f64, cast_decimal, cast_timestamp, …); inputs are str or bytes, both zero-copy views, and a Fault's span comes back in the caller's own units — byte offsets for bytes, code-point offsets for str — so text[offset:offset + length] slices the offending text back out of whatever you passed, no mapping needed. Exhaustiveness is the type checker's job here — pair the two cases with typing.assert_never under mypy/pyright for the compile-time guarantee the static bindings get natively. Python-flavored fidelity, stated honestly: int is unbounded, so cast_u64 returns the true unsigned value with no bit-pattern games; cast_decimal returns an exact, canonical decimal.Decimal; datetime's resolution is microseconds, so the core's nanoseconds truncate by three digits on the temporal doors — datetime's own ceiling, not the parser's, and said out loud rather than discovered later.

The exhaustiveness check, spelled out — Verdict[int] is Success[int] | Fault, what cast_i32 returns, and the fall-through arm stops type-checking the moment either case above it goes missing (assert_never is in typing on every supported Python):

from typing import assert_never

def describe(verdict: hypercast.Verdict[int]) -> str:
    match verdict:
        case hypercast.Success(value):
            return f"got {value}"                 # value: int
        case hypercast.Fault(reason, offset, length):
            return f"{reason.name} at {offset}"
        case _:
            assert_never(verdict)

The doors

Every door takes the text first — str or bytes — and returns Success(value) or Fault(reason, offset, length):

Door Reads Success.value
cast_bool(text) the natural-language boolean lexicon bool
cast_char(text) one character verbatim, or a declared code point (65, U+0041, 0x41, &H41, A, A) str of length 1
cast_i8 cast_i16 cast_i32 cast_i64 (text, fmt) a signed integer under a declared NumFormat int
cast_u8 cast_u16 cast_u32 cast_u64 (text, fmt) an unsigned integer under a declared NumFormat int
cast_f32 cast_f64 (text, fmt) a real under a declared NumFormat float
cast_decimal(text, fmt) an exact decimal under a declared NumFormat decimal.Decimal
cast_uuid(text) every .NET Guid form, plus urn:uuid:-style prefixes uuid.UUID
cast_timestamp(text) an RFC 3339 instant datetime, aware, UTC
cast_unix(text, precision) an integer Unix-epoch value in a declared UnixPrecision datetime, aware, UTC
cast_excel_serial(text, epoch) an Excel date serial in a declared ExcelEpoch datetime, aware, UTC
cast_date(text) a strict ISO yyyy-MM-dd date date
cast_date(text, order) a separated date in a declared DateOrder date
cast_datetime(text, order, *, am="", pm="") a zone-less civil date-time in a declared DateOrder, a culture's day periods declared beside the English AM/PM datetime, naive
cast_time(text) an ISO 24-hour time of day time
cast_duration(text) ISO 8601, the invariant colon form, or protobuf JSON seconds timedelta
cast_decimal_from_float(value) a float as the shortest decimal that names it (0.1 is one tenth) decimal.Decimal
cast_excel_serial_from_float(value, epoch) an Excel serial float in a declared ExcelEpoch datetime, naive
cast_excel_time(value) the fraction of an Excel serial float time
cast_excel_duration(value) a float count of days timedelta

Nothing about the text is guessed; what a door cannot know from the text, the caller declares, as an IntEnum:

  • UnixPrecision — SECONDS, MILLISECONDS, MICROSECONDS, NANOSECONDS: the unit of a Unix-epoch value, never inferred from its magnitude.
  • ExcelEpoch — Y1900 (the Windows default, phantom February 29th 1900 included) or Y1904 (the legacy Macintosh system): a workbook-level setting no serial number carries.
  • DateOrder — YEAR_MONTH_DAY, MONTH_DAY_YEAR, DAY_MONTH_YEAR: "1/7/2026" is January 7th or July 1st only because the caller said which. Without one, cast_date stays strict ISO.
from hypercast import DateOrder, ExcelEpoch, UnixPrecision

hypercast.cast_unix("1700000000123", UnixPrecision.MILLISECONDS)
# Success(value=datetime.datetime(2023, 11, 14, 22, 13, 20, 123000, tzinfo=datetime.timezone.utc))
hypercast.cast_excel_serial("45000", ExcelEpoch.Y1900)
# Success(value=datetime.datetime(2023, 3, 15, 0, 0, tzinfo=datetime.timezone.utc))
hypercast.cast_date("1/7/2026", DateOrder.DAY_MONTH_YEAR)
# Success(value=datetime.date(2026, 7, 1))
hypercast.cast_datetime("1/7/2026 3:04 PM", DateOrder.MONTH_DAY_YEAR)
# Success(value=datetime.datetime(2026, 1, 7, 15, 4))
hypercast.cast_datetime("2026-01-07 오후 3:04", DateOrder.YEAR_MONTH_DAY, am="오전", pm="오후")
# Success(value=datetime.datetime(2026, 1, 7, 15, 4))
hypercast.cast_duration("PT1H30M")
# Success(value=datetime.timedelta(seconds=5400))

cast_datetime reads the English AM/PM whatever is declared — ASCII, either case, after the clock (3:04 PM) or ahead of it (PM 3:04). A culture's own designators are declared beside them as the keyword-only am and pm — German vorm./nachm., Korean 오전/오후, Spanish a. m./p. m. — and read exactly as spelled, after the clock with an optional space before (3:04 nachm.) or ahead of it with an optional space after (오후 3:04). Nothing is guessed from the text: undeclared, nachm. is the first offending character of a MALFORMED fault. A designator is 1 to 16 UTF-8 bytes with no ASCII digit and no whitespace at either end (inside is fine, as in a. m.); anything else is a ValueError at the call, a caller's bug like a NumFormat that cannot be.

A Fault's reason is a CastFailure — EMPTY (nothing there, or only whitespace), MALFORMED (present, but not the target type) or OUT_OF_RANGE (well-formed, outside the target's range) — compared with is. hypercast.optional(verdict) presents an EMPTY fault as None and passes everything else through, for the column where blank means absent:

hypercast.optional(hypercast.cast_i32("   ", hypercast.NumFormat.INVARIANT))    # None
hypercast.optional(hypercast.cast_i32("abc", hypercast.NumFormat.INVARIANT))    # Fault(reason=<CastFailure.MALFORMED: 2>, offset=0, length=1)

Bad data is always a Fault. What raises is a caller's bug: TypeError for an argument of the wrong type (text that is neither str nor bytes, a format that is not a NumFormat), ValueError for a declaration that names no member of its enum, a NumFormat that cannot be (below) or a day-period designator that cannot be, OverflowError for an integer too wide for the 32 unsigned bits a flag set or a declaration is. The one exception that is about data: a str holding a lone surrogate has no UTF-8 form, so it is a UnicodeEncodeError before any door runs.

See the repo root README for the receipts and the state of every other language binding.

Declared formats: separators, lenience flags, currency, signs, digits

Every numeric door — the integer family, cast_f32/cast_f64, and cast_decimal — takes a NumFormat: the decimal and group separators (one or two characters each: , and ., a no-break space, the , some feeds carry), a bitwise OR of the lenience flags (GROUPING, PARENTHESES, EXPONENT, RADIX_PREFIXES, PERCENT, CURRENCY; ALL is all six — TRAILING_SIGN is opted into separately, from a culture's negative pattern, and SEPARATOR_DETECT is a separator policy, not a lenience, opted into separately too), an optional currency symbol, and then, as keyword arguments, what a culture spells differently: currency_decimal_sep and currency_group_sep, the separators a currency amount is read with; minus_sign, plus_sign and percent, further spellings of the signs and the percent symbol; and digit_zero, the zero of a set of native digits. NumFormat.INVARIANT is ./, with every lenience on and nothing else declared; NumFormat.DETECT is the same with SEPARATOR_DETECT added, so the ./, roles are resolved per input from its structure (1.234.567,89 and 1,234,567.89 both read) and an undecidable one is a MALFORMED fault, never a guess; NumFormat.from_localeconv() bridges locale.localeconv() (below). A format is immutable and reads back through decimal_sep, group_sep, flags, currency and the keyword fields by their own names, each "" when it declares nothing. Unlike the C#, Java, Swift, PHP and Ruby doors, these take no platform format object: Python's locale is process-global, and from_localeconv() already reads it.

A currency symbol is declared, never guessed. With CURRENCY set and a symbol declared, the symbol is accepted once, leading (before or after the sign: $5, -$5, $ -5) or trailing (5 €, 1.234,50 kr.), with optional whitespace between it and the digits, and accounting parentheses wrap the symbol along with the digits (($5)). Declared but with the flag off, the symbol is simply the first offending byte of a MALFORMED fault; with no symbol declared the flag matches nothing. A symbol is 1 to 16 UTF-8 bytes with no ASCII digit or whitespace — anything else is a ValueError at construction, a caller bug like equal separators.

dollars = hypercast.NumFormat(".", ",", hypercast.NumFormat.ALL, "$")
hypercast.cast_i32("($1,234)", dollars)          # Success(value=-1234)
hypercast.cast_decimal("$1,234.50", dollars)     # Success(value=Decimal('1234.5'))

krone = hypercast.NumFormat(",", ".", hypercast.NumFormat.ALL, currency="kr.")
hypercast.cast_decimal("1.234,50 kr.", krone)    # Success(value=Decimal('1234.5'))

The one rule behind every declared symbol: the ASCII spelling is always read, and a declared symbol is a further spelling read beside it — so nothing that parsed before a declaration stops parsing after it. What each field adds:

  • Signs — minus_sign and plus_sign are read wherever ASCII - and + are: ahead of the digits, before or after a leading currency symbol (−5, €−5, −€5 with U+2212, as Estonian and Basque write it). Two signs are MALFORMED at the second.
  • TRAILING_SIGN — the sign after the digits, as a culture whose negative pattern is n- writes it: 5-, 5 -, 5+, 5 €-, 5- €, 2.5%-, 2.5-%; ASCII or declared, never beside a leading sign and never inside accounting parentheses. Not in ALL: from_localeconv() sets it from the locale's sign position, and you set it from yours.
  • Currency separators — with CURRENCY set, a symbol declared, and the symbol found in the text (either edge), the digits are read with currency_decimal_sep and currency_group_sep, each falling back to its number counterpart when not declared — the way the BCL switches to a culture's CurrencyDecimalSeparator when it sees the symbol (Swiss German groups a number on ' and writes money with a , decimal). A plain number keeps the number separators. Under SEPARATOR_DETECT detection governs the whole token and the currency separators are ignored.
  • Percent — percent is read exactly as a trailing ASCII % is, under PERCENT, on the real and decimal doors (50٪ is 0.5); the integer doors never read a percent.
  • Native digits — the ten code points from digit_zero (٠ U+0660 declares the Arabic-Indic digits, 0 U+FF10 the fullwidth ones) are digits everywhere ASCII 0–9 are: integer part, fraction, exponent, mixed with ASCII in one token. Radix-prefixed (0x, 0b) digits stay ASCII.
estonian = hypercast.NumFormat(",", "\u00a0", hypercast.NumFormat.ALL, "€", minus_sign="−")
hypercast.cast_f64("−1\u00a0234,5", estonian)    # Success(value=-1234.5)
hypercast.cast_f64("-1\u00a0234,5", estonian)    # Success(value=-1234.5) — ASCII is always read

swiss = hypercast.NumFormat(
    ".", "'", hypercast.NumFormat.ALL | hypercast.NumFormat.TRAILING_SIGN, "CHF",
    currency_decimal_sep=",",
)
hypercast.cast_decimal("CHF 1'234,50", swiss)    # Success(value=Decimal('1234.5'))
hypercast.cast_decimal("1'234.50", swiss)        # Success(value=Decimal('1234.5')) — no symbol, the number separators
hypercast.cast_decimal("1'234,50 CHF-", swiss)   # Success(value=Decimal('-1234.5'))

arabic = hypercast.NumFormat("٫", "٬", hypercast.NumFormat.ALL, percent="٪", digit_zero="٠")
hypercast.cast_f64("١٬٢٣٤٫٥", arabic)            # Success(value=1234.5)
hypercast.cast_decimal("٥٠٪", arabic)            # Success(value=Decimal('0.5'))

What the core refuses to carry is refused at construction, as a ValueError — the C ABI's own contract rules, so a NumFormat that exists is one the core reads: a separator that is not one or two characters or contains an ASCII digit, equal separators (the number pair, or the pair in force for a currency amount, counting what each falls back to), a sign or percent symbol with ASCII whitespace in it, a symbol longer than its field (8 UTF-8 bytes; 16 for the currency symbol), a digit zero that is ASCII or starts no Unicode digit block.

Not declared, by decision: cast_bool's lexicon stays English-only. No platform carries culture data for a boolean vocabulary, so no bridge could fill such a field — a caller maps a culture's words before the door.

cast_decimal is the real doors' grammar with an exact result: a decimal.Decimal built from the core's sign, 96-bit magnitude and base-10 scale, never a float in between. The result is canonical: exact trailing zeros in the fraction are trimmed, so "0.1" is one tenth, "50%" is Decimal('0.5'), "1.10", "1.1" and "1.1000" are all Decimal('1.1') (as_tuple() gives digits (1, 1), exponent -1), and zero is Decimal('0'), never negative. Text past 96 bits of magnitude or 28 nonzero places is OUT_OF_RANGE — nothing but a zero is ever dropped, never rounded, the one thing a caller who reached for a decimal is entitled to assume.

The locale bridge

NumFormat.from_localeconv() reads locale.localeconv() — or a dict shaped like it — and fills every field the C locale has a column for: decimal_point and thousands_sep as the separators, currency_symbol, mon_decimal_point and mon_thousands_sep as the currency separators, negative_sign and positive_sign as the signs (U+2212 for Estonian and Basque; an ASCII sign is already read, so it declares nothing), and an n_sign_posn of 2 or 4 — the sign after the amount — as TRAILING_SIGN. localeconv() has no percent symbol and no digits, so those stay ASCII. A separator the locale leaves empty takes its default (./, for the number pair, the number pair for the currency pair) unless the other separator already holds that character, in which case it takes the other of the pair — a comma-decimal locale with no thousands separator groups on . rather than colliding. Every lenience is on; narrow the flags, or construct a NumFormat outright, for anything stricter.

# With no argument, the process's own locale; here the fields et_EE.UTF-8 reports.
fmt = hypercast.NumFormat.from_localeconv(
    {"decimal_point": ",", "thousands_sep": "\xa0", "currency_symbol": "€", "negative_sign": "−"}
)
fmt                                       # NumFormat(',', '\xa0', 95, '€', minus_sign='−')
hypercast.cast_f64("−1\xa0234,5", fmt)    # Success(value=-1234.5)

hypercast.native_version() names the core actually loaded, "major.minor.patch", decoded from the same packed hypercast_version export every other binding probes. hypercast.BACKEND is always "native", the PyO3 extension.

Interop: building on HyperCast's C ABI

For a library that carries HyperCast's verdicts across a C ABI of its own — HyperTabular's, for one — and has to hand its native layer a format in the core's own layout rather than a copy of it. NumFormat.packed is those 92 bytes, the size-tagged layout the core reads in place: the size (92), the flags and the native digits' zero code point (0 for none) as little-endian u32s at offsets 0, 4 and 8; then each symbol as its UTF-8 zero-padded to its field, followed by its byte length — 8 + 1 bytes each for the decimal separator (offset 12), group separator (21), currency decimal separator (30), currency group separator (39), minus sign (48), plus sign (57) and percent symbol (66), and 16 + 1 for the currency symbol (75) — the same bytes as the Rust crate's RawNumFormat::to_le_bytes. A symbol declared empty is all zeros. A format's repr is the constructor call that builds it again — the four positional arguments, then only the keywords that declare something — so one can be logged and restored:

fmt = hypercast.NumFormat(".", ",", hypercast.NumFormat.ALL, "$")
fmt          # NumFormat('.', ',', 95, '$')
fmt.packed   # b'\\\x00\x00\x00' + b'_\x00\x00\x00' + bytes(4)         size 92, flags 95, no native digits
             #   + b'.' + bytes(7) + b'\x01' + b',' + bytes(7) + b'\x01'  the separators, each its UTF-8 then its length
             #   + bytes(45)                                            five symbols declared empty
             #   + b'$' + bytes(15) + b'\x01'                           the currency symbol

The values themselves are built on the Rust side: an extension module of its own that presents them enables the crate's python-values feature and uses hypercast::python::Values, the conversions this package's own extension makes, so a datetime, decimal.Decimal or uuid.UUID it hands out is the object cast_* would have returned (see rust/README.md).

In the browser (Pyodide)

The same PyO3 extension, compiled for Pyodide's Emscripten target, is published to PyPI as hypercast-X.Y.Z-cp311-abi3-pyemscripten_2026_0_wasm32.whl (about 150 KB), so micropip finds it the way pip finds the native wheels:

import micropip
await micropip.install("hypercast")

import hypercast
hypercast.cast_i32("(1,234)", hypercast.NumFormat.INVARIANT)   # Success(value=-1234)
hypercast.cast_timestamp("2026-01-02T10:04:05Z")

It is the native backend (hypercast.BACKEND == "native"), with the same API and no JavaScript bridge: every door is the same Rust call it is in CPython, and the verdicts are bit-for-bit the same. CI installs the wheel into Pyodide and runs this package's whole pytest suite in it twice, under Node and in headless Chrome, shared corpus replay included.

The wheel is for Pyodide 314.x (Python 3.14, platform pyemscripten_2026_0). It is abi3, but a Pyodide ABI is one Python minor built with one exact Emscripten, so each Pyodide ABI year needs its own wheel: earlier Pyodide lines (0.29.x and older) find no wheel, and the next line is covered by the release that adds its build.

Why not int() / fromisoformat / dateutil?

  1. Verdicts, not exceptions — bad data is the expected case for untrusted text, and a Fault is a reason plus a span, not a ValueError to catch and regex.
  2. The vocabulary untrusted sources actually send — twenty boolean lexemes, accounting parentheses, declared separators, currency symbols, signs, percent symbols and native digits, radix prefixes, a culture's day periods, all five .NET Guid text forms plus urn:uuid: prefixes, protobuf JSON durations — with each lenience individually declared, never guessed.
  3. One engine across a polyglot system — bit-for-bit verdicts with every other binding, held by the shared corpus (the whole suite green, in CPython and in Pyodide, the full corpus replayed).
  4. Native-extension speed — the escape from the interpreted tier is this binding's own receipt: the old losses were never "Python calling native code," they were ctypes (~1 µs of interpreted marshalling per call, measured). The numbers are under Benchmarks.

The honest trade-off: for plain invariant integers int() still wins — it's a C-accelerated builtin with no boundary to cross. These doors earn their keep on the culture-machinery parsers, the closed error contract, and cross-language agreement.

Benchmarks

With the mechanism replaced, every door runs roughly an order of magnitude faster than it did over ctypes, where each cost about 3 µs. Measured with pyperf on linux-x64 (an Intel Core i9-11900H), CPython 3.14.7 as Fedora builds it, each door beside the closest thing the stdlib has:

Door HyperCast stdlib Verdict
cast_datetime("1/7/2026 3:04 PM", MONTH_DAY_YEAR) 230 ns 4.65 µs datetime.strptime 20x faster
cast_date("1/7/2026", MONTH_DAY_YEAR) 201 ns 3.51 µs datetime.strptime 17x faster
cast_uuid 262 ns 798 ns uuid.UUID() 3.0x faster
cast_timestamp 252 ns 146 ns datetime.fromisoformat 1.7x slower
cast_f64 131 ns 72 ns float() 1.8x slower
cast_i32 103 ns 56 ns int() 1.8x slower
cast_i32 (grouped) 116 ns —
cast_bool 89 ns —
cast_duration (ISO) 262 ns —

The messy-feed doors are where the gap is widest, because strptime is the only stdlib parser that accepts their input at all — and it is slow. The three losses are each to a C builtin that reads one shape and has no boundary to cross: int() and float() on plain numbers, and fromisoformat on a timestamp. What a door returns for the difference is a verdict rather than an exception, and the forgiveness — grouping, declared separators, a currency symbol — at ~115-160 ns for grammar the stdlib doesn't sell at any price.

Past the parse, what a door costs is the Python object it hands back, so those are built the cheapest way the stable ABI allows: a uuid.UUID is allocated and its slots set through the C API with no __init__ (the core has already validated the text); a datetime, date or time comes from the packed form the datetime module's own pickling uses; and a timedelta from subtracting two datetimes, which is several times cheaper than its constructor. All of it is inside the stable ABI, so one abi3 wheel still covers every CPython from 3.11 with the GIL, and one abi3t wheel every CPython from 3.15.

Separator detection costs ~15 ns: 1.234.567,89 under NumFormat.DETECT is 157 ns against 142 ns for the same text under a declared eurozone format.

A declared currency symbol costs nothing measurable here: cast_i32("1,234,567") is 104 ns under NumFormat.INVARIANT and under a format declaring $. Rejection is where the verdict pays off. cast_i32("1,234x567") returns its Fault in 140 ns, while int("1234x567") takes 645 ns to raise its ValueError and have it caught: 4.6x.

The culture fields are free until used: a NumFormat is resolved once, at construction, and a door hands the core the same pre-resolved struct whatever it declares, so signs, percent, currency separators and native digits cost a door nothing on text that does not carry them. cast_datetime's keyword-only am and pm are the one declaration parsed per call: with nothing declared the door takes the core's English path and pays about 15 ns for the keyword signature (measured before and after on the same build, interleaved), and declaring a pair costs about 75 ns more — two keyword arguments extracted and checked against the designator rules on every call.

Reproduce: maturin develop --release (from python/, inside a virtualenv — pyproject.toml already points maturin at ../rust/Cargo.toml and the python feature) to build the release extension, then pip install pyperf and python bench_cast.py --fast.

Verifying provenance

Every wheel PyPI serves, the Pyodide one included, carries a GitHub build-provenance attestation. The wheels are built, installed and attested in CI by the shared hyper-build-wheels.yml workflow in SkunkWerkx/.github, and release.yml verifies each one before publishing it unchanged, so the verify command names that signer:

pip download hypercast==X.Y.Z --no-deps -d .
gh attestation verify hypercast-X.Y.Z-*.whl \
  --repo SkunkWerkx/HyperCast --signer-repo SkunkWerkx/.github
# or: gh attestation verify hypercast-X.Y.Z-*.whl --owner SkunkWerkx

This is a separate thing from the PEP 740 attestations gh-action-pypi-publish already sends to PyPI itself, which PyPI-side tooling checks on its own — this is the GitHub/Sigstore transparency-log route, checked with gh attestation verify, the same route every other artifact in this project uses. See csharp/README.md's provenance section for why an artifact signed by the shared workflow needs --signer-repo.

License

MIT

Metadata

Release files for hypercast 0.9.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for hypercast 0.9.0
File
hypercast-0.9.0-cp315-abi3.abi3t-win_arm64.whl CPython 3.15 abi3, abi3t Windows ARM64 Details
hypercast-0.9.0-cp315-abi3.abi3t-win_amd64.whl CPython 3.15 abi3t, abi3 Windows x86-64 Details
hypercast-0.9.0-cp315-abi3.abi3t-musllinux_1_2_x86_64.whl CPython 3.15 abi3t, abi3 Linux musl 1.2+ x86-64 Details
hypercast-0.9.0-cp315-abi3.abi3t-musllinux_1_2_aarch64.whl CPython 3.15 abi3t, abi3 Linux musl 1.2+ ARM64 Details
hypercast-0.9.0-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl CPython 3.15 abi3t, abi3 Linux glibc 2.28+ x86-64 Details
hypercast-0.9.0-cp315-abi3.abi3t-manylinux_2_28_aarch64.whl CPython 3.15 abi3t, abi3 Linux glibc 2.28+ ARM64 Details
hypercast-0.9.0-cp315-abi3.abi3t-macosx_11_0_arm64.whl CPython 3.15 abi3t, abi3 macOS 11.0+ ARM64 Details
hypercast-0.9.0-cp315-abi3.abi3t-macosx_10_12_x86_64.whl CPython 3.15 abi3t, abi3 macOS 10.12+ x86-64 Details
hypercast-0.9.0-cp314-cp314t-win_arm64.whl CPython 3.14 CPython 3.14 free-threading Windows ARM64 Details
hypercast-0.9.0-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
hypercast-0.9.0-cp314-cp314t-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 Details
hypercast-0.9.0-cp314-cp314t-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 Details
hypercast-0.9.0-cp314-cp314t-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64 Details
hypercast-0.9.0-cp314-cp314t-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64 Details
hypercast-0.9.0-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
hypercast-0.9.0-cp314-cp314t-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 Details
hypercast-0.9.0-cp311-abi3-win_arm64.whl CPython 3.11 abi3 Windows ARM64 Details
hypercast-0.9.0-cp311-abi3-win_amd64.whl CPython 3.11 abi3 Windows x86-64 Details
hypercast-0.9.0-cp311-abi3-pyemscripten_2026_0_wasm32.whl CPython 3.11 abi3 PyEmscripten 2026.0+ WebAssembly Details
hypercast-0.9.0-cp311-abi3-musllinux_1_2_x86_64.whl CPython 3.11 abi3 Linux musl 1.2+ x86-64 Details
hypercast-0.9.0-cp311-abi3-musllinux_1_2_aarch64.whl CPython 3.11 abi3 Linux musl 1.2+ ARM64 Details
hypercast-0.9.0-cp311-abi3-manylinux_2_28_x86_64.whl CPython 3.11 abi3 Linux glibc 2.28+ x86-64 Details
hypercast-0.9.0-cp311-abi3-manylinux_2_28_aarch64.whl CPython 3.11 abi3 Linux glibc 2.28+ ARM64 Details
hypercast-0.9.0-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details
hypercast-0.9.0-cp311-abi3-macosx_10_12_x86_64.whl CPython 3.11 abi3 macOS 10.12+ x86-64 Details

Total release size: 8.7 MB

Release files / hypercast-0.9.0-cp315-abi3.abi3t-win_arm64.whl

Download URL hypercast-0.9.0-cp315-abi3.abi3t-win_arm64.whl
Size 249.1 kB
Tags CPython 3.15 Windows ARM64 abi3 abi3t
SHA-256 checksum
How to use checksums
a36bc39230f7c600ef25141e2f80a6b7e505c470c180d112189d12053e38e298
BLAKE2b-256 checksum
How to use checksums
92b3129a5e67398bbb15234a816f923374c4e8f0d2b1d03b6c8c5185c07bf6c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp315-abi3.abi3t-win_amd64.whl

Download URL hypercast-0.9.0-cp315-abi3.abi3t-win_amd64.whl
Size 258.3 kB
Tags CPython 3.15 Windows x86-64 abi3 abi3t
SHA-256 checksum
How to use checksums
77c545c772b8492432d877db2aa9451d30f466f129f745aac45f69b292f484cc
BLAKE2b-256 checksum
How to use checksums
03a1db1bf454bee6d95a7a756e0ca9ec17c1986b0d463a064f5e28576d5af052
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp315-abi3.abi3t-musllinux_1_2_x86_64.whl

Download URL hypercast-0.9.0-cp315-abi3.abi3t-musllinux_1_2_x86_64.whl
Size 553.1 kB
Tags CPython 3.15 Linux musl 1.2+ x86-64 abi3 abi3t
SHA-256 checksum
How to use checksums
bb0b836100e3ea1ee496c3acf19acc32811dc509945750c5694cb27e989bdb41
BLAKE2b-256 checksum
How to use checksums
76db37c46c71b5c174f7b0d48d6c2d6bc25f74ec90291954b77e1de025d98e9b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp315-abi3.abi3t-musllinux_1_2_aarch64.whl

Download URL hypercast-0.9.0-cp315-abi3.abi3t-musllinux_1_2_aarch64.whl
Size 507.2 kB
Tags CPython 3.15 Linux musl 1.2+ ARM64 abi3 abi3t
SHA-256 checksum
How to use checksums
f9caf74347aef5db24e54b62e0523af74f39e3616c4133c61e1c118774e94522
BLAKE2b-256 checksum
How to use checksums
00124b1c313d9632c1091527e6568cccd2439b8bedef9eadadb6ddf37ecc5035
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl

Download URL hypercast-0.9.0-cp315-abi3.abi3t-manylinux_2_28_x86_64.whl
Size 340.1 kB
Tags CPython 3.15 Linux glibc 2.28+ x86-64 abi3 abi3t
SHA-256 checksum
How to use checksums
730248d0e0ec95f91e344d2a6be1f44e410f65fe92966a1ba404f593373101b4
BLAKE2b-256 checksum
How to use checksums
6bd39defa3a75edc53aee49e08456a8684aaef41e9dd7c5b231c00b0d8e1b571
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp315-abi3.abi3t-manylinux_2_28_aarch64.whl

Download URL hypercast-0.9.0-cp315-abi3.abi3t-manylinux_2_28_aarch64.whl
Size 329.2 kB
Tags CPython 3.15 Linux glibc 2.28+ ARM64 abi3 abi3t
SHA-256 checksum
How to use checksums
18a55e8cd43399b965ec4477801b04ec436cc382ae197947449661e1ac0b1c89
BLAKE2b-256 checksum
How to use checksums
7db4506daf2c664c9eb6eceba5d51539933621806589f97a018d251487d4aef5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp315-abi3.abi3t-macosx_11_0_arm64.whl

Download URL hypercast-0.9.0-cp315-abi3.abi3t-macosx_11_0_arm64.whl
Size 318.0 kB
Tags CPython 3.15 abi3 abi3t macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4351beb0d7b645d0b168b7fc6a8f408428b89926c4f1663606e4ed1d915acf62
BLAKE2b-256 checksum
How to use checksums
da216c566cc509894de75a59f24a8012b8b62b11dfeb06b919996ac6e8666758
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp315-abi3.abi3t-macosx_10_12_x86_64.whl

Download URL hypercast-0.9.0-cp315-abi3.abi3t-macosx_10_12_x86_64.whl
Size 332.0 kB
Tags CPython 3.15 abi3 abi3t macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
96f878d0b439c20f1bb9c0e8f0449dab477b9f1acd317ab85325ea9f4061fc48
BLAKE2b-256 checksum
How to use checksums
6321f93f3c367628cfc20662e1edf02351ecf65262b705c2360c5c93f4ccc065
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp314-cp314t-win_arm64.whl

Download URL hypercast-0.9.0-cp314-cp314t-win_arm64.whl
Size 236.0 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows ARM64
SHA-256 checksum
How to use checksums
9dc70a9f796ce223b1c6f0fc09a6c71f43693136cbadfa2f31fff2d99a8219de
BLAKE2b-256 checksum
How to use checksums
eca10f947f4edbffe4e97e24794fe2a491e4ed84b2459d2ef8e552b3b3aea5c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp314-cp314t-win_amd64.whl

Download URL hypercast-0.9.0-cp314-cp314t-win_amd64.whl
Size 243.4 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
b15bc9800374b41ff3f984b7ebc7bbe4259b6d88e63e6e12872a74c9315211ef
BLAKE2b-256 checksum
How to use checksums
443380c3d0ceed0e6010b5fb8c725e798d42d69f55d3ccbb48601ae6584a0c8a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp314-cp314t-musllinux_1_2_x86_64.whl

Download URL hypercast-0.9.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Size 541.9 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
415c57e05d5bf3f482f13774755958e87d0106f5103d6dbfcd42b73bfad8fa9b
BLAKE2b-256 checksum
How to use checksums
4fce1c458d88e2913b7e5436b650e3980c679c4d90322c7b652fc2aa61a43f9c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp314-cp314t-musllinux_1_2_aarch64.whl

Download URL hypercast-0.9.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Size 497.1 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
f9a3fd55c104c2626b40b8d2ec349398dfff82f76811d51a9a18e4561f3c8c51
BLAKE2b-256 checksum
How to use checksums
12fed22cbafc72386cf09ce82ede55510f07dcea1fc82dfc091d637227ed6519
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp314-cp314t-manylinux_2_28_x86_64.whl

Download URL hypercast-0.9.0-cp314-cp314t-manylinux_2_28_x86_64.whl
Size 329.3 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
d331194906289aaa69e8ce078ed0bddd8c1562de53c6689e79fbc86612b246ab
BLAKE2b-256 checksum
How to use checksums
5b93b9e3dfd00bf235e2512550b6c66916fd44fa26f71e6e84840cb87d705b53
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp314-cp314t-manylinux_2_28_aarch64.whl

Download URL hypercast-0.9.0-cp314-cp314t-manylinux_2_28_aarch64.whl
Size 319.4 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
3091dc39c95211273f87a79638e8585c25aecded2dd9ea862e5695819de3ced3
BLAKE2b-256 checksum
How to use checksums
a7537c9673e5045a7fd85b1bfaecbad9113fcaea4f42f89243c21a1c7593880d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp314-cp314t-macosx_11_0_arm64.whl

Download URL hypercast-0.9.0-cp314-cp314t-macosx_11_0_arm64.whl
Size 307.6 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
9eb95db4c33fb2bcbf459018f86e2901dc0270cd23ac583a6c2cbaa0601254d6
BLAKE2b-256 checksum
How to use checksums
e503d827743029c636481dab028806114899d088da22d359b1aec495c5b9e130
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp314-cp314t-macosx_10_12_x86_64.whl

Download URL hypercast-0.9.0-cp314-cp314t-macosx_10_12_x86_64.whl
Size 319.3 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
c4efd0a954ae542ea97d5d0e5d2a04bc6cee98a2e87e33f685d862f1c682ab51
BLAKE2b-256 checksum
How to use checksums
f60dd50b2c68b794457fd7808cde72112932fde0e4fcf6bbce2e13fc7a7442d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp311-abi3-win_arm64.whl

Download URL hypercast-0.9.0-cp311-abi3-win_arm64.whl
Size 244.6 kB
Tags CPython 3.11 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
51ceb1ec47fd5107de8558e9d9896a6b632441430913ddaae0f0c4429280a3f4
BLAKE2b-256 checksum
How to use checksums
14bcf5349e45543821f54510f5f0eee52ff10d7ea4e3b2d09e185c1e815ce83e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp311-abi3-win_amd64.whl

Download URL hypercast-0.9.0-cp311-abi3-win_amd64.whl
Size 253.2 kB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
238a5ae11088215923a2a607f16a6e1fa276395b1c1f6033820c336a87f77583
BLAKE2b-256 checksum
How to use checksums
9ef6f27947360087108060d89261b0f9e3cb61ea9cab65b4b7f4cbff34612222
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp311-abi3-pyemscripten_2026_0_wasm32.whl

Download URL hypercast-0.9.0-cp311-abi3-pyemscripten_2026_0_wasm32.whl
Size 146.5 kB
Tags CPython 3.11 PyEmscripten 2026.0+ WebAssembly abi3
SHA-256 checksum
How to use checksums
09c23f8a8bde115eafb2341b65fc78f89f3ed54342606116d130c2d98d999b0d
BLAKE2b-256 checksum
How to use checksums
bde3b88d7c17c8d4b5cc8d8172d3fe356299d41cb987b84e59f0bfe9acf939ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp311-abi3-musllinux_1_2_x86_64.whl

Download URL hypercast-0.9.0-cp311-abi3-musllinux_1_2_x86_64.whl
Size 548.7 kB
Tags CPython 3.11 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
084f9a12e959f7eda3670f9948a4bb516d438dc9015fb7d0f882f9bb2e005328
BLAKE2b-256 checksum
How to use checksums
2adc7b5550913dc6f52d264ce5663e55440ee3517716bd25148c27cce44aa789
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp311-abi3-musllinux_1_2_aarch64.whl

Download URL hypercast-0.9.0-cp311-abi3-musllinux_1_2_aarch64.whl
Size 504.4 kB
Tags CPython 3.11 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
85de9f261ca7c854e4c1dd4c1e3a1988f38d5577709739687e619a35c5198cb3
BLAKE2b-256 checksum
How to use checksums
2bc53e5614270c1503a871327948abecb812fc2b79a234c7bd9b757209941fd6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp311-abi3-manylinux_2_28_x86_64.whl

Download URL hypercast-0.9.0-cp311-abi3-manylinux_2_28_x86_64.whl
Size 335.9 kB
Tags CPython 3.11 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
9cefb6bbbed3ecfc1c878b7c90dd7744d9a03b0d519af971e716913145d6dc27
BLAKE2b-256 checksum
How to use checksums
98bcc5fe87a5ca0ef27c2f7c63b6ca09c13e9ee5022e450ccb6d7c25d32a2be0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp311-abi3-manylinux_2_28_aarch64.whl

Download URL hypercast-0.9.0-cp311-abi3-manylinux_2_28_aarch64.whl
Size 326.0 kB
Tags CPython 3.11 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
55cd59c1c9cb527315efe61e8158e17c461dbc54f3e537c154e58a038e5aeb7f
BLAKE2b-256 checksum
How to use checksums
b1065a564485c838aedf69251549c2e6e75a2c9e5899d8d61ed5d8ca72b92f62
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp311-abi3-macosx_11_0_arm64.whl

Download URL hypercast-0.9.0-cp311-abi3-macosx_11_0_arm64.whl
Size 315.9 kB
Tags CPython 3.11 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b9d1433e149e2645e7b70896ffae5273f1df590965449548044120964678864b
BLAKE2b-256 checksum
How to use checksums
fbb03698aae7d2051b8e7352a0e14ccef8057c2fc4d9643854bd628dc0564df9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Release files / hypercast-0.9.0-cp311-abi3-macosx_10_12_x86_64.whl

Download URL hypercast-0.9.0-cp311-abi3-macosx_10_12_x86_64.whl
Size 322.9 kB
Tags CPython 3.11 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
0bec05ff3c018cc1135ba0706719c795d773857181dd0ae5094ddf0661c99b80
BLAKE2b-256 checksum
How to use checksums
9afe92f1af7d2e31e6609f498f2ffc370734d1e14c3aec1ab8c5c47af722e255
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 21, 2026.

Transparency log

Security for hypercast 0.9.0

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.

Full provenance

All 25 files in this release have been uploaded with provenance metadata.

Select from 25 files

Attestation for hypercast-0.9.0-cp315-abi3.abi3t-win_arm64.whl

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 Oct 21, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page