pycosmicsdk
Python SDK for the Binho Supernova and Binho Pulsar USB host adapters, wrapping the
C/C++ CosmicSDK in a typed (PEP 561) nanobind
extension. The native library is statically linked into the extension — no separate install,
no ctypes glue, no lib_path to configure.
Every protocol has a blocking class and an asyncio twin (Device / AsyncDevice,
I2cController / AsyncI2cController, and so on).
| Protocol | Surface | Supernova | Pulsar |
|---|---|---|---|
| I2C | controller (7-bit write / read, scan) and target mode | bus A | buses A and B |
| UART | send / query / receive, streamed or subscribed | yes | yes |
| I3C | controller, all 38 CCCs, and target mode | yes | — |
| SPI | controller and target mode | controller yes; target mode not on rev B | yes |
| GPIO | digital I/O and interrupts | yes | yes |
Large payloads can travel over the adapter's vendor bulk USB endpoint instead of the
ordinary 1024-byte HID request — up to 32768 bytes on a Supernova and 16384 on a Pulsar
(32767 for I3C, which is a hardware frame limit rather than a buffer size). It reaches five
of the six protocol/role combinations; the I3C target has none by design, serving its bus
from a private 1024-byte buffer instead. Bulk is negotiated per connection and needs the
vendor USB interface claimed on this machine, so the same adapter answers differently on
two PCs. It is blocking-only. See
docs/api/guides/bulk.md and
docs/api/guides/target-mode.md.
Also on Device / AsyncDevice: list_devices(), device info and capabilities, voltage and
external-rail control, USB configuration, reboot(), and a notification subscription system;
AsyncDevice adds get_analog_measurements() and iter_notifications().
Install
Not on PyPI yet.
pycosmicsdk0.1.0 is on TestPyPI only — 15 wheels (CPython 3.10–3.14 × Linuxx86_64/ macOSarm64/ WindowsAMD64), uploaded 2026-09-10 by.github/workflows/publish.yml. The PyPI upload is the same workflow withtarget: pypi, gated on the0.1.0milestone (#70). Until thenpip install pycosmicsdkdoes not work; install from TestPyPI (docs/api/getting-started.md) or from the source checkout described below.
Requirements:
- Python
>= 3.10. Development is pinned to3.12.13via.python-versionand fetched automatically byuv(no system Python dev headers needed). - A C++17 toolchain and CMake
>= 3.18— the extension is compiled from source byscikit-build-core+ CMake. On Linux and macOS a compiler onPATH(gcc / clang) is what is needed. On Windows the compiler does not have to be onPATH: CMake selects the Visual Studio generator and locates the toolchain through the VS installation, so what you need is Visual Studio or Build Tools with the C++ workload — verified by runninguv syncwith every VS directory stripped fromPATH, which still succeeds. The documented path also needs no Developer Command Prompt. That changes if you exportCMAKE_GENERATOR=Ninjaor invokecmakeby hand: Ninja inherits the shell's environment rather than MSBuild's, sorc.exeis missing and the compiler check fails onRC Pass 1. Runvcvars64.batfirst in that case. uvfor environment and dependency management.- Access to the CosmicSDK submodule, which is a separate private repository.
export SKBUILD_CMAKE_ARGS=-DCMAKE_POLICY_VERSION_MINIMUM=3.5 # required, see below
git clone https://github.com/binhollc/pycosmicsdk.git
cd pycosmicsdk
git config submodule.submodules/CosmicSDK.url https://github.com/binhollc/CosmicSDK.git
git submodule update --init --recursive
uv sync
Over SSH those four lines collapse to
git clone --recurse-submodules git@github.com:binhollc/pycosmicsdk.git, but only with a key
that can read both binhollc/pycosmicsdk and binhollc/CosmicSDK. The two recipes are
mutually exclusive: git config submodule.<name>.url needs a repository that already exists,
so it cannot be combined with --recurse-submodules.
Worth recognising, because the failure is indirect: without submodule access the superproject
clone succeeds and leaves submodules/CosmicSDK empty, and the error surfaces later as a
CMake add_subdirectory failure during uv sync that mentions nothing about credentials.
SKBUILD_CMAKE_ARGS=-DCMAKE_POLICY_VERSION_MINIMUM=3.5 is not optional and is not set in
pyproject.toml: CosmicSDK fetches hidapi via FetchContent at tag hidapi-0.14.0, whose
cmake_minimum_required(VERSION 3.1.3) sits below CMake 4's policy floor, so without the
override a fresh configure fails. Export it before any command that builds the extension,
uv sync included. On Windows PowerShell:
$env:SKBUILD_CMAKE_ARGS = "-DCMAKE_POLICY_VERSION_MINIMUM=3.5".
Platform notes:
- Linux — install the udev rules once so the adapter is reachable without root:
./submodules/CosmicSDK/install_udev_rules.sh. Building from source also needs thelibudevandlibusbdevelopment packages (libudev-devandlibusb-1.0-0-devon Debian/Ubuntu; names vary elsewhere); themanylinuxwheel bundles both libraries, so a wheel install needs neither. - macOS / Windows — the adapters are USB HID devices and need no driver install.
- Windows, running a built wheel — no Visual C++ Redistributable is required.
native/CMakeLists.txtlinks the MSVC runtime statically, so the compiled.pydimports onlypython3XX.dllandKERNEL32.dll. This matters because CPython's own Windows installer shipsvcruntime140.dllbut notmsvcp140.dll, so a dynamically linked extension would fail to import on a machine without Visual Studio. Building from source is unaffected and still needs the C++ toolchain listed above.
Quickstart
Plug in a Supernova or Pulsar, wire an I2C target to bus A, and run:
from pycosmicsdk import Device, I2cBus, I2cPullUp, list_devices
for found in list_devices(): # USB enumeration only; opens nothing
print(f"{found.model.name} serial={found.serial_number} fw={found.fw_version}")
with Device.open() as dev: # or open(model=…), open(serial=…), open(path=…)
print(f"{dev.model.name} {dev.info.serial_number}")
i2c = dev.i2c(bus=I2cBus.A)
i2c.set_voltage(voltage_mv=3300) # VTARG before the bus, always
# Re-runnable: brings the bus up, or reconfigures it if an earlier run left
# it up. On return the bus is usable either way.
result = i2c.bring_up(frequency_hz=400_000, pull_up=I2cPullUp.OHM_330)
if not result.settings_applied:
print(f"bus kept its earlier settings: {result.refusal}")
print(f"targets on bus A: {[hex(a) for a in i2c.scan().addresses_7bit]}")
# Read 16 bytes from sub-address 0x0100 of the target at 0x50.
data = i2c.read(address=0x50, length=16, subaddress=b"\x01\x00")
print(data.hex(" "))
Adapted from
examples/blocking_api/system/list_devices.py
and examples/blocking_api/i2c/blocking.py; run
either for the full version.
Five things worth knowing up front:
Device.open()is a context manager; leaving thewithblock closes the native handle. An explicitclose()also works.- Payloads are
bytesin andbytesout. No lists, nobytearrayceremony. - Failures are exceptions, never status codes, and all derive from
CosmicError. bring_up()is the re-runnable bring-up, and it is what the second run of any script needs.initialize()is not idempotent — an already-initialised bus reportsFW_INTERFACE_ALREADY_INITIALIZED, and the peripheral stays initialised across reconnects, so a script that callsinitialize()directly fails the second time it is run unless the adapter was reset in between.bring_up()triesinitialize(), falls back toconfigure(), and returns aBringUpResultwhosesettings_appliedsays whether the settings you asked for actually took. I2C, I3C, UART and SPI all have one, as do the I2C and SPI target interfaces — six in all, on both the blocking class and its asyncio twin. (I3cTargethas none, and needs none: itsinitializeis already idempotent.)initialize()andconfigure()remain public and supported for when you know which state the interface is in.- A
CapabilityErroris not aFirmwareError. Some calls are refused before anything reaches the device, because the connected model or hardware revision cannot do them.CapabilityErrorderives straight fromCosmicError, soexcept FirmwareErrorwill not catch it, and it carriesSDK_ERROR_WRONG_REQUESTrather than a firmware code, so a handler for it must not filter onstatus_code. Better: askdev.capabilitiesfirst.
The asyncio twin is the same script with async with AsyncDevice.open() as dev: and an
await on each operation — see examples/async_api/.
Where to go next
| Where | What |
|---|---|
docs/api/ |
User documentation (Sphinx source). Build with ./docs/api/build.sh. |
docs/api/migration.md |
Migrating from the legacy packages. |
examples/ |
Runnable scripts, one directory per protocol, blocking and async. |
Migrating from the legacy packages
Three compatibility shims under pycosmicsdk.legacy reproduce the method names, argument
order and return shapes of the packages they replace:
| Legacy package | Shim |
|---|---|
binhosupernova |
pycosmicsdk.legacy.supernovasdk |
SupernovaController |
pycosmicsdk.legacy.supernovacontroller |
binhopulsar |
pycosmicsdk.legacy.pulsarsdk |
The adapter must run firmware 4.x first: SupernovaController users are on 3.x, which this
package cannot reach. Migration §0
says how to check and update.
All three emit a DeprecationWarning on import and are a migration path, not the recommended
API for new code. docs/api/migration.md has the per-method
detail, what breaks, and before/after snippets.
Logging
The SDK uses the standard logging module, with loggers under the pycosmicsdk hierarchy:
| Logger | Source |
|---|---|
pycosmicsdk.backend |
exceptions caught at the C++→Python notification bridge |
pycosmicsdk.dispatcher |
exceptions raised by user-supplied subscription callbacks |
pycosmicsdk.aio |
the asyncio path (AsyncEngine, AsyncDevice) |
pycosmicsdk.i3c |
the I3C interfaces |
pycosmicsdk.spi |
the SPI interfaces — one INFO line per connection recording which transport large payloads take |
pycosmicsdk.uart |
the UART interfaces |
The three legacy shims log under pycosmicsdk.legacy.*, so the same parent covers them too.
Set the level on the pycosmicsdk parent to cover all of them:
import logging
logging.basicConfig(level=logging.DEBUG)
logging.getLogger("pycosmicsdk").setLevel(logging.DEBUG)
The SDK installs no handlers of its own; consumers attach their own, following the standard library guidance.
Contributing
Cloning
.gitmodules records the CosmicSDK submodule over SSH
(git@github.com:binhollc/CosmicSDK.git). If you work over HTTPS, override the URL locally
before initialising.
# HTTPS override, if needed
git config submodule.submodules/CosmicSDK.url https://github.com/binhollc/CosmicSDK.git
git submodule update --init --recursive # after a clone without --recurse-submodules
git submodule update --remote submodules/CosmicSDK # pull upstream submodule changes later
Development setup
uv sync # create .venv and install runtime + dev deps
uv run pre-commit install # register git hooks
uv sync builds the C++ extension only on first install or when build inputs change;
imports of pycosmicsdk from Python never recompile, and neither does uv run. After
editing anything under native/, force a rebuild:
uv sync --reinstall-package pycosmicsdk
Without it, tests and examples silently keep using the previously-compiled extension.
--reinstall-package is targeted — it rebuilds our extension without touching the rest of
the venv, and CMake/ninja are incremental, so it is fast (≈ 1–3 s) when no .cpp changed.
Pure-Python edits need no rebuild.
If something breaks, start over:
rm -rf .venv
uv venv
uv sync --all-groups
uv run pre-commit install
Running examples
Scripts under examples/ exercise the SDK against a real Binho USB host adapter.
They are not part of the test suite and require a device to be plugged in.
examples/criteria.md documents the conventions they follow.
uv run python examples/blocking_api/system/get_device_info.py
uv run python examples/run_all_examples.py # discover and run every example
Running tests
Unit tests are the default and require no hardware.
uv run pytest # full default suite
uv run pytest tests/unit # just the unit tests
uv run pytest tests/regression # concurrency / GIL regressions
uv run pytest tests/unit/test_errors.py # single file
uv run pytest tests/unit/test_errors.py::TestHierarchy::test_cosmic_timeout_error_is_builtins_timeout_error
tests/unit and tests/regression are both safe to run on a bench with an adapter
attached: the one hardware-dependent regression test carries the hardware marker,
decides availability by enumeration alone, and takes the cross-process device lease
before it opens anything. A bare pytest opens no device, not even at collection.
Quality gates
All gates must pass locally before merging. CI runs them too — ci.yml fires on every pull
request and on pushes to develop-*, integration/** and main — but run them locally
anyway: a draft PR gets the Ubuntu-only fast path, and the hardware tier is excluded from
every CI job by addopts, so a green PR says nothing about tests/hardware/.
| Gate | Command |
|---|---|
| Format | uv run ruff format --check . |
| Lint | uv run ruff check . |
| Types | uv run mypy |
| Docstrings | uv run interrogate -c pyproject.toml . |
| Docstring/signature | uv run pydoclint src/pycosmicsdk/ |
| Tests | uv run pytest |
| All hooks | uv run pre-commit run --all-files |
pytest also enforces a coverage floor (fail_under = 70), and a local stub-drift
pre-commit hook compares _pycosmicsdk_cpp.pyi against the built extension.
Auto-format and auto-fix:
uv run ruff format .
uv run ruff check --fix .
Project-wide conventions for AI agents live as individual rule files in
.claude/rules/; .claude/skills/ holds project-shipped Claude Code
skills.
Project layout
src/pycosmicsdk/ # SDK source (PEP 561 typed)
_interfaces/ # per-protocol classes: i2c, i3c, spi, uart, gpio
legacy/ # binhosupernova / supernovacontroller / binhopulsar shims
_cpp/ # the compiled extension installs here
native/ # C++ sources for the nanobind extension
submodules/CosmicSDK/ # C/C++ CosmicSDK as a git submodule
docs/api/ # user documentation (Sphinx source, incl. migration.md)
docs_dev/ # internal design docs, specs and hardware notes
examples/ # hardware-touching usage examples (not run by CI)
tests/ # unit and regression test suites
License
Proprietary — Copyright (c) 2026 Binho LLC. See LICENSE.
The licence is a source-closed one: Binho keeps every right in its own code, and there is no right to distribute a modified build of it. But it is not the all-rights-reserved text it used to be, because a published wheel cannot be distributed under one. It permits installing and using the SDK commercially, redistributing the published wheel unmodified (an internal mirror, a build cache, a container image), modifying it for your own use, and reverse engineering it to debug those modifications.
Those last two are there because the wheel carries third-party code that requires them.
NOTICE lists it: libusb under the GNU LGPL v2.1-or-later, plus HIDAPI and
nanobind taken under BSD-3-Clause, and libudev on some Linux builds. LGPL §6 lets a proprietary
work link an LGPL library only on terms that permit modification for the customer's own use
and reverse engineering to debug it, so LICENSE grants exactly that and no more. A full copy
of the LGPL ships as LICENSE.libusb; libusb is dynamically linked and
replaceable, which is the §6(b) route. All three files ride in every wheel under
dist-info/licenses/, and .github/scripts/check_wheels.py refuses to publish a wheel whose
extension contains libusb without them.
Open licensing questions that need a person rather than a build change — including the ones that need a lawyer — are collected in docs_dev/discussion/licensing-open-decisions.md.
Release files for pycosmicsdk 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 19.5 MB
Release files / pycosmicsdk-0.1.1-cp314-cp314-win_amd64.whl
| Download URL | pycosmicsdk-0.1.1-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2cdc27571b5b48b8205af6981e8f87368bcab4edf53b0936bf797795f870e0c6
|
|
BLAKE2b-256 checksum How to use checksums |
9b6f8fb1171055da385692a2ff17e7831a799d095c5fffe308549fff5d1ae20a
|
| 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 Sep 24, 2026.
Transparency logRelease files / pycosmicsdk-0.1.1-cp314-cp314-manylinux_2_28_x86_64.whl
| Download URL | pycosmicsdk-0.1.1-cp314-cp314-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | CPython 3.14 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
ae37c130458a769c31ae88064b39604c6dac244c7c3f298011ddd7ad61ba42a5
|
|
BLAKE2b-256 checksum How to use checksums |
cd48edb252205f555f3e798840c2a28304b30fc7fe25b6e5c56f6f297226ed44
|
| 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 Sep 24, 2026.
Transparency logRelease files / pycosmicsdk-0.1.1-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | pycosmicsdk-0.1.1-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 875.6 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
6050672dc05c41efd030bc92c941f10cfbb595cd40738abf9bb8c39185e239dc
|
|
BLAKE2b-256 checksum How to use checksums |
2f58130b4f3318913dc47031133e5762aa31cf1934d16ae6d64a86f717939d90
|
| 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 Sep 24, 2026.
Transparency logRelease files / pycosmicsdk-0.1.1-cp313-cp313-win_amd64.whl
| Download URL | pycosmicsdk-0.1.1-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ac8ab5b5c6d2d992921e7eebc9ce202e1e79308e78dd49dbaea00f904e6285e3
|
|
BLAKE2b-256 checksum How to use checksums |
a5ebdc8931fcb3b090058d6ec4b28efb684b9927a9404fb62b8998a326a2b713
|
| 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 Sep 24, 2026.
Transparency logRelease files / pycosmicsdk-0.1.1-cp313-cp313-manylinux_2_28_x86_64.whl
| Download URL | pycosmicsdk-0.1.1-cp313-cp313-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
706c9e7825065c373b82bde8bb15d104b63d8b565c71d186688ccb58cffd1315
|
|
BLAKE2b-256 checksum How to use checksums |
48c449ba4c306ed312003b5d32a92052d4a02eabf2216792c521b33f77ca99d4
|
| 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 Sep 24, 2026.
Transparency logRelease files / pycosmicsdk-0.1.1-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | pycosmicsdk-0.1.1-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 875.7 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
67e73c52c18c9346fcca4a459c5cc29890f474ce0d36aca388153973cfd306bf
|
|
BLAKE2b-256 checksum How to use checksums |
802b24665e243e9a05cfe528f74128675b21b9ad08d151322ffd6413c9ae5644
|
| 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 Sep 24, 2026.
Transparency logRelease files / pycosmicsdk-0.1.1-cp312-cp312-win_amd64.whl
| Download URL | pycosmicsdk-0.1.1-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
329fcfffc72670b8189c027ef5e2e5cc5769b1f5d6b69b39ab67a0d567d16644
|
|
BLAKE2b-256 checksum How to use checksums |
f6ff417f124412082f91cfa57840d924265a7aaeafaedadc9fd108d5ac5a221a
|
| 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 Sep 24, 2026.
Transparency logRelease files / pycosmicsdk-0.1.1-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | pycosmicsdk-0.1.1-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f349c35ba04f28ba37d25ec12b08d8bcfb8fb0e8b87e5a1ac8137a906fb43ea6
|
|
BLAKE2b-256 checksum How to use checksums |
7a0821755dd94fbca20c5f3807a563aff579f06673f13c4ca485be2479086ae0
|
| 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 Sep 24, 2026.
Transparency logRelease files / pycosmicsdk-0.1.1-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | pycosmicsdk-0.1.1-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 875.8 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0f2e6473d3fe2f4ef24d3cc11e6147aada628a792cdd5b16a76e456c89e8ce90
|
|
BLAKE2b-256 checksum How to use checksums |
3be22feb8a5c2ec7acb0664d249e80a50f64be20b2b2c318de4444ee4394111c
|
| 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 Sep 24, 2026.
Transparency logRelease files / pycosmicsdk-0.1.1-cp311-cp311-win_amd64.whl
| Download URL | pycosmicsdk-0.1.1-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
d4e4ce9ffbd7a07adbff986d6c109f957a9a2214ca67172a8a6710b24188702b
|
|
BLAKE2b-256 checksum How to use checksums |
cd7c6f9d5b94ad1df6f53873ca12e03c57d4e1d356d058e87e4ac217f8f7aad4
|
| 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 Sep 24, 2026.
Transparency logRelease files / pycosmicsdk-0.1.1-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | pycosmicsdk-0.1.1-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
6fafa0e446f5b60a2778f93eaddd38f309ca481ffafbce455bc8fa54c8c7cb93
|
|
BLAKE2b-256 checksum How to use checksums |
f346a1cd96d52a9f2857566ded134e6b17e0ae5d9631e341988ac3c534c9a4f5
|
| 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 Sep 24, 2026.
Transparency logRelease files / pycosmicsdk-0.1.1-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | pycosmicsdk-0.1.1-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 876.5 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
bf6785ab5cb2215f71cf7419586d6c3e00ec6a08ca3bffdb85024212920b90ae
|
|
BLAKE2b-256 checksum How to use checksums |
a7413271aeb30a62724a1984b93176eb1abe338ec280dd3ecdc499b6b733a9c4
|
| 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 Sep 24, 2026.
Transparency logRelease files / pycosmicsdk-0.1.1-cp310-cp310-win_amd64.whl
| Download URL | pycosmicsdk-0.1.1-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
cb85a92f7b92f859d11265744ba43123695497189feb44b1146bf4cd03fdb88f
|
|
BLAKE2b-256 checksum How to use checksums |
038e10dbfb0dd8123f1c00f5d5ff19f60b523052658e14cda6b5c11b9e3d3a2b
|
| 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 Sep 24, 2026.
Transparency logRelease files / pycosmicsdk-0.1.1-cp310-cp310-manylinux_2_28_x86_64.whl
| Download URL | pycosmicsdk-0.1.1-cp310-cp310-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.8 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
8854f6e2cde3e6127c4207b40089c1c120e5995793eed1503d00576f9a4a6aee
|
|
BLAKE2b-256 checksum How to use checksums |
b84bfb117eaced5a42c54433a891e70075b3433863bbddda500f8bc73aa675fb
|
| 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 Sep 24, 2026.
Transparency logRelease files / pycosmicsdk-0.1.1-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | pycosmicsdk-0.1.1-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 876.3 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
922f3199116a93a7df2c6320bb7336ee3232389c46a2dd44ba8d7a21ffdfde3c
|
|
BLAKE2b-256 checksum How to use checksums |
d7c50abc1e5df9e091ec4bab133773ec8ea1d7a184b0d9797e8fc4b9ec5df96a
|
| 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 Sep 24, 2026.
Transparency log