Skip to main content

comnum

CI crates.io Documentation docs.rs PyPI Licence

Link-level simulation of digital communication systems, wireless and optical, in Rust with Python bindings: the blocks of a link, a parallel Monte Carlo runner whose results do not depend on the thread count, and campaigns written as files and checked against the literature.

  • Lightweight: one run-time dependency in Python (numpy), 9 direct crates in Rust and no C, C++ or Fortran library to build; 27 MB installed with its dependencies (the benchmark's environment: komm 22 MB, OptiCommPy 321 MB, Sionna 1004 MB).
  • Fast: compiled Rust, Monte Carlo runs on every core; on one CPU thread, the links of the benchmark take 2.1 to 33 times as long with komm, 2.3 to 4.7 times as long with OptiCommPy and 1.1 to 7.4 times as long with Sionna as with comnum.
  • Safe: unsafe code forbidden in every crate, invalid inputs are errors (one error type), results independent of the thread count; 717 unit tests, 187 validation tests, 272 Python tests.
  • Validated: compared with 130 papers, standards and reference tools (82 fully reproduced, 44 partly), 100 inconsistencies found in them; 93 validation cards rerun a comparison without the paper.

The numbers are recomputed by tools/highlights.py from the recorded benchmark and the validation files; the details are on the page Why comnum.

Install

pip install comnum            # Python 3.11 or later; wheels for Linux, macOS and Windows
pip install "comnum[plot]"    # with matplotlib, for the plots
cargo add comnum              # the Rust library (Rust 1.85 or later)
cargo install comnum-spec     # the `comnum` command, which runs campaigns written as YAML files

The Python package needs NumPy only. From a clone, maturin develop --release builds it (getting started).

Three examples

The bit and block error rates of an LDPC code with 16-QAM over AWGN, run by the parallel runner until 100 block errors are counted at each $E_b/N_0$, with their confidence intervals, against the uncoded closed form and the BICM limit of the code rate:

import comnum
res = comnum.run_spec("specs/bicm_ldpc.yaml")           # the link, the grid and the stopping rule
res.plot("ebn0_db", "coded_ber", theory=lambda x: comnum.theory_ber(16, x, "qam"))

The error rates of an LDPC (1024, 512) code with 16-QAM over AWGN

The same campaign from the command line, comnum run specs/bicm_ldpc.yaml, or in Rust on the same runner (comnum::sim, the example ber_awgn). The specification is a YAML file: the link as a list of blocks, the grid, the metrics and the stopping rule.

link:
  - {type: fec_encode, code: &code {type: ldpc, n: 1024, k: 512, seed: 1}, blocks: 8, interleave: true}
  - {type: map, constellation: 16-QAM}
  - {type: awgn_ebn0, ebn0_db: $ebn0_db}
  - demap
  - {type: fec_decode, code: *code, interleave: true}
metrics: {report: [ber, coded_ber, bler]}
stop: {min_errors: {bler: 100}, min_trials: 8, max_trials: 400}

16-QAM at 32 GBd over 10 × 80 km of standard fibre with EDFAs, propagated by the split-step Fourier method, then received with dispersion compensation or digital back-propagation (specs/ssfm_dbp.yaml; the Rust example ssfm_dbp writes the same link by hand):

res = comnum.run_spec("specs/ssfm_dbp.yaml")
res.plot("power_dbm", "snr_db", by="receiver")

Effective SNR against the launch power, CDC and DBP

A measured signal

A capture of a software radio goes through the same blocks as a simulation. Here one second of an LTE carrier recorded by a HackRF One (band 28, 15.36 MS/s) is brought to baseband, searched for a cell, and the master information block of every frame is decoded:

x, fs, meta = comnum.read_sigmf("capture", channel=0)
y = comnum.select_channel(x, fs, 770.5e6 - 775e6, 1.92e6, 0.6e6)   # the six central resource blocks
cell = comnum.lte_cell_search(y, max_cfo_hz=25e3)[0]
frames = comnum.lte_decode_mib(y, cell)                             # {"sfn", "ports", "n_rb", ...} per frame

The cell search and the MIB of an LTE capture

The receiver finds the cell identity, the frequency offset of the receiver (−13.06 kHz, the oscillator of the HackRF 17 ppm off) and decodes the MIB of 100 frames of 100, whose frame numbers follow one another. The Rust example lte_mib does the same from a SigMF file; the FM stereo multiplex and its RDS are received the same way (fm_stereo_decode, rds_receive).

What it covers

Every block is placed in one of fourteen crates, in five layers whose dependencies point downward only, re-exported by the facade comnum and bound to Python by name (comnum::channel::awgn, comnum.awgn); the layout and the rules are in docs/ARCHITECTURE.md.

Domain Blocks
Mapping and coding QAM, PSK, PAM and custom constellations with Gray labels, exact and max-log LLRs; CRC, scramblers, interleavers, convolutional (Viterbi, BCJR, tail biting), turbo, Reed–Solomon, BCH, LDPC and polar codes, the LDPC and polar codes of 5G NR with their rate matching; probabilistic amplitude shaping; closed-form error rates, capacities and finite-length bounds
Waveforms OFDM (resource grids, pilots, LS and LMMSE estimation, synchronisation), constant-envelope OFDM, CPM (MSK, GMSK), chirp spread spectrum (LoRa), FBMC/OQAM, UFMC, OTFS; PAPR and its reduction
MIMO detectors (ZF, MMSE, SIC, ML, sphere, K-best, message passing), space-time block codes, precoding and capacity, massive MIMO, channel estimation
Wireless channels AWGN, flat and correlated fading, the tapped and clustered delay lines of ITU-R M.1225 and 3GPP TR 38.901, delay–Doppler channels, path loss, reconfigurable surfaces
Optical fibre (linear, split-step Fourier, Manakov with PMD) and back-propagation, EDFA and Raman amplification, the GN and EGN models, lasers, modulators, photodiodes and coherent front ends, indoor optical wireless and free-space optics
Hardware power amplifiers and digital predistortion, phase noise, frequency and clock offsets, IQ imbalance, DAC and ADC
Receiver DSP pulse shaping and filters, rational resampling and the front end of a capture, carrier and clock recovery, adaptive equalisers, dispersion compensation, blind estimation (modulation, SNR, symbol rate)
Metrics error rates, SNR, EVM, mutual and generalised mutual information, the rates of a receiver's posterior, PSD, ACLR, PAPR
Standards DVB-S, DVB-S2, DVB-T, CCSDS 131.0-B, the 5G NR PDSCH with HARQ, the LTE cell search and MIB, FM broadcasting and RDS
Simulation the parallel Monte Carlo runner (Wilson intervals, stopping rules, operating-point search), declarative campaigns, verification against expected results, SigMF recordings

The declarative blocks are listed by comnum blocks with their parameters; a project can add its own without comnum depending on it (ADR 0006).

Validated, not only tested

Every block enters the library with the reference it is checked against: a closed form, a table of a standard reproduced verbatim, a published figure (cited with its authors, venue, year and figure number), or the recorded output of a reference implementation (OptiCommPy, GNPy, AFF3CT, Sionna, py3gpp) used as a test oracle. The comparisons are written as data, the validation cards, and rerun without the paper; the inconsistencies found in the documents themselves are recorded with them (docs/LITERATURE.md). The strongest evidence of every module: A, an external reference; B, a closed form only; C, self-consistency only (docs/MATURITY.md gives the tests behind every grade and the regimes not covered).

Summary: 71 modules: 66 at A, 3 at B, 2 at C.

Foundations

Module Level Strongest evidence
Constellations, mapping, demapping and closed-form error rates A OptiCommPy outputs; closed forms of Proakis & Salehi
Capacity and cutoff rate of CM and BICM A Caire, Taricco & Biglieri 1998 Figs. 4–7
Sources (bits, PRBS, uniform and shaped symbols) A ITU-T O.150 Sec. 5 and Table 1, exact
Differential PSK A Pawula, Rice & Roberts 1982 Sec. IV-A; closed forms of Proakis & Salehi
Error rates with an imperfect channel estimate and over Jakes' fading A Chang & Su 2002 eqs. 31–53, Figs. 3–4

Coding and shaping

Module Level Strongest evidence
Convolutional codes (Viterbi, BCJR) A AFF3CT; Yasuda et al. Table I
Puncturing A Yasuda et al. Table I; patterns of IEEE 802.11 and EN 300 421
Turbo codes (LTE) A AFF3CT, K = 40 and 1024
LDPC codes A AFF3CT, PEG and DVB-S2 short code; Hu et al. 2005
Polar codes (SC, CA-SCL) A AFF3CT, SC and CA-SCL
5G NR channel codes: LDPC and polar with rate matching A Sionna vectors bit for bit; TS 38.212 tables
Reed–Solomon codes A AFF3CT; Lin & Costello; ETSI EN 300 744, CCSDS 131.0-B
BCH codes A AFF3CT; generators of EN 302 307-1 Table 6a
CRC A CRC polynomials of TS 38.212
Scrambling, interleaving C balanced sequences, invertible permutations
Finite-length bounds A Polyanskiy, Poor & Verdú 2010 Table I; the Shannon limits of BPSK; Costello & Forney 2007
Distribution matching and probabilistic amplitude shaping A Schulte & Böcherer 2016 Fig. 2; Böcherer et al. 2015 Tables VI–X

Waveforms

Module Level Strongest evidence
OFDM, channel estimation and gain correction A Cimini 1985 Figs. 3–7; Coleri et al. 2002 Sec. VI-B (with an oversampled comb)
OFDM synchronisation (Schmidl–Cox, Moose, van de Beek) A Schmidl & Cox 1997, Moose 1994, van de Beek et al. 1997
PAPR: distribution and reduction A Ochiai & Imai 2001 eqs. (11), (27); Saul 2004 Figs. 8-9 (recursive clipping)
Constant-envelope OFDM A Thompson et al. 2008 eq. (15); Guerreiro et al. 2016 Fig. 1; López Morales et al. 2022 Fig. 3; Pacheco & Hatzinakos 2006 Fig. 1
Chirp spread spectrum (LoRa modulation) A Chiani & Elzanaty 2019 Table I; Afisiadis et al. 2020 Figs. 2, 7; Vangelista 2017 Fig. 1
Continuous-phase modulation A Murota & Hirade 1981 Table I and Fig. 5; Sundberg 1986 Fig. 5; MSK of Proakis & Salehi
FBMC/OQAM A Bouhadda et al. 2014 Table 1, Figs. 7, 10, 11; Nissel & Rupp 2017 eq. (17)
UFMC A Vakilian et al. 2013 Fig. 3(b)
OTFS and the delay–Doppler channel A Raviteja et al. 2019 Theorem 1 and its example; Hadani et al. 2017 Fig. 5 qualitatively

MIMO

Module Level Strongest evidence
MIMO detection A Yang & Hanzo 2015 Table X; MRC closed forms
Message-passing detection of large MIMO (LAMA, OAMP) A Jeon et al. 2018 Table II; Ma & Ping 2017 eq. (42), Figs. 2–3
Space-time block codes B Tarokh et al. 1999 eqs. (39)–(40); MRC closed forms
Capacity and precoding A Telatar 1999 Theorem 2, eqs. (13), (16)–(18), Figs. 1–4
MIMO channel estimation A Biguesh & Gershman 2006 Figs. 1–4, eqs. (12)–(59)
Multi-user massive MIMO A Ngo, Larsson & Marzetta 2013 Props. 1–3, 5–7, Figs. 1 and 4

Wireless channels

Module Level Strongest evidence
Path loss (TR 38.901) A TR 38.901 Tables 7.4.1-1 and 7.4.2-1 against Sionna 2.2.0
AWGN B closed forms of the error rates
Flat fading and antenna correlation A Loyka 2001 (exponential correlation, Fig. 1); BPSK over Rayleigh fading; MRC
Tapped and clustered delay lines (TDL, CDL) A ITU-R M.1225 and 3GPP TR 38.901 tables, verbatim
Reconfigurable intelligent surface A Basar et al. 2019 eqs. (14)–(18), Figs. 6–7

Optical

Module Level Strongest evidence
Fibre: linear, split-step Fourier, Manakov, back-propagation A OptiCommPy outputs; Häger & Pfister 2021 Fig. 5; Ip & Kahn 2008 Fig. 12 (in part)
GN and EGN models A Carena et al. 2014 Fig. 1(a); GNPy outputs; Semrau, Killey & Bayvel 2019 Figs. 4a, 4b, 5
Raman amplification and ISRS A Bromage 2004 eqs. (3)–(5), Figs. 7–8; Hu et al. 2004 eq. (2); GNPy outputs; Semrau & Bayvel 2018 eq. (10)
EDFA and PMD A the Maxwellian DGD of Foschini & Poole 1991 Fig. 3; the accumulated ASE
Optical front ends (laser, modulators, photodiodes, coherent receiver) A OptiCommPy outputs
Indoor optical wireless A Barry et al. 1993 Table II; Komine & Nakagawa 2004 Figs. 3–9
Free-space optics A Al-Habash et al. 2001 Figs. 3, 6–8

Hardware impairments

Module Level Strongest evidence
Nonlinear amplifier driven by OFDM A Banelli & Cacopardi 2000 eqs. 7–31, Fig. 5; Bouhadda et al. 2014, Tables 2–3
Power amplifiers, IQ imbalance and digital predistortion A Ding et al. 2004 Fig. 4 (memory-polynomial predistortion)
Phase noise, frequency and clock offsets A IEEE Std 1139-2022 Table B.2 (Allan variances of white FM)
DAC and ADC A Max 1960 Table II; Bennett 1948; the exact error of a Gaussian input; IEEE Std 1241; Walden 1999

Receiver DSP

Module Level Strongest evidence
Filters and resampling A OptiCommPy outputs
Carrier recovery A OptiCommPy outputs; Rife & Boorstyn 1974; Fatadin et al. 2009; Pfau et al. 2009
Clock recovery A OptiCommPy outputs
Frame synchronisation A Massey 1972 Tables I–II (optimum rule)
Adaptive equalisers A OptiCommPy outputs; Kikuchi's singularity
Chromatic dispersion compensation A Eghbali et al. 2014 Table I, Figs. 5 and 9
Blind estimation: modulation recognition, M2M4 SNR, symbol rate A Pauluzzi & Beaulieu 2000 Figs. 9–10 (M2M4, CRB); exact cumulants of the alphabets

Metrics and analysis

Module Level Strongest evidence
Error rates, SNR and EVM A OptiCommPy outputs
Information rates and shaping gains A Böcherer et al. 2015 Tables I, III; OptiCommPy outputs
Receiver posteriors (air metrics) A Alvarado et al. 2018 Remarks 4–5, eq. (35)
Spectral metrics (PSD, ACLR, PAPR, CCDF) C a tone lands in its bin

Systems and standards

Module Level Strongest evidence
DVB-S A EN 300 421 Tables 2 and 3, Figures 2, 4 and 5
DVB-S2 A EN 302 307-1 Table 13 and the tables of the standard
DVB-T A EN 300 744 Tables C.1 and A.1 (Gaussian within 0.12 dB)
CCSDS 131.0-B-5 channel coding A Tables F-1, 3-1, 6-2, 7-1, 7-5, C-1 and Annex G, exact
AIS A the CRC catalogue; pyais outputs; a simulated ship end to end
FM broadcasting and RDS A BS.450 and NRSC-4 tables; a simulated station end to end
LTE cell search and MIB A TS 36.211 Table 6.11.2.1-1 verbatim; a measured cell decoded
5G NR numerology, SSB, cell search and PDSCH DMRS A py3gpp outputs; Lin et al. 2019
5G NR PDSCH A Sionna and py3gpp bit for bit; TS 38.101-4 test 1-2 (2 and 4 RX) within the requirements

Simulation and specifications

Module Level Strongest evidence
Monte Carlo runner A Brown, Cai & DasGupta 2001: the intervals and their exact coverage; thread independence, stopping rules
Specifications, verification and operating-point search B the search against the inverted closed forms
Recordings (SigMF, raw IQ, NPY) A sigmf-python, the reference implementation, both ways

Positioning

comnum aims to be a reference link-level simulator: fast, reproducible bit for bit (seeded streams independent of the thread count), and validated block by block. It complements the existing tools rather than replacing them: Sionna targets differentiable, GPU-accelerated end-to-end learning; the MATLAB toolboxes and AFF3CT cover wider or more specialised ground; GNU Radio streams in real time. comnum offers one documented chain from the waveform to the metrics, wireless and optical, whose results trace to a closed form, a standard or a published curve (comparisons, benchmarks).

In scope: the physical layer of a point-to-point link, simulated sample by sample. Out of scope, because other tools do it well: system and network level, training neural receivers (comnum evaluates trained blocks at scale, from their parameters), real-time and hardware targets, graphical tools, and models without a reference.

The blocks follow the layout, names and conventions of OptiCommPy; the algorithms are written from their publications. OptiCommPy (GPL-3.0) is a test oracle only, never imported: the tests read its recorded outputs.

Stability

Version 0.2.0 is the first public release. From it on, the crates follow semantic versioning with one version for all, the Python API changes only with a migration note in the changelog, CI checks every pull request with cargo-semver-checks, and the schema of the specifications is versioned. Until then the API moves freely, without deprecated aliases.

How this library was written

comnum is developed with an AI coding assistant, and says so plainly: Claude (Anthropic), through Claude Code, wrote most of the code, tests and documentation, under the direction of the author, who decided the scope and the architecture, the models, the references each block is checked against and the tolerances, and reviewed every change. Correctness rests on the evidence above, not on who wrote a line; the rules apply to every contribution, human or generated (docs/ARCHITECTURE.md, CLAUDE.md).

Documentation

Licence

MIT or Apache-2.0, at your option (LICENSE-MIT, LICENSE-APACHE). The data of third parties shipped in the crates and the status of the recorded oracle fixtures are listed in THIRD_PARTY.md. To cite comnum, use CITATION.cff.

Metadata

Release files for comnum 0.2.0

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

Source distribution (sdist)

Source distribution for comnum 0.2.0
File Size Uploaded Provenance Actions
comnum-0.2.0.tar.gz 1.3 MB With provenance Details for comnum-0.2.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for comnum 0.2.0
File Actions
comnum-0.2.0-cp311-abi3-win_amd64.whl CPython 3.11 abi3 Windows x86-64 Details for comnum-0.2.0-cp311-abi3-win_amd64.whl
comnum-0.2.0-cp311-abi3-musllinux_1_2_x86_64.whl CPython 3.11 abi3 Linux musl 1.2+ x86-64 Details for comnum-0.2.0-cp311-abi3-musllinux_1_2_x86_64.whl
comnum-0.2.0-cp311-abi3-musllinux_1_2_aarch64.whl CPython 3.11 abi3 Linux musl 1.2+ ARM64 Details for comnum-0.2.0-cp311-abi3-musllinux_1_2_aarch64.whl
comnum-0.2.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.11 abi3 Linux glibc 2.17+ x86-64 Details for comnum-0.2.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
comnum-0.2.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.11 abi3 Linux glibc 2.17+ ARM64 Details for comnum-0.2.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
comnum-0.2.0-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details for comnum-0.2.0-cp311-abi3-macosx_11_0_arm64.whl
comnum-0.2.0-cp311-abi3-macosx_10_12_x86_64.whl CPython 3.11 abi3 macOS 10.12+ x86-64 Details for comnum-0.2.0-cp311-abi3-macosx_10_12_x86_64.whl

Total release size: 26.8 MB

Release files / comnum-0.2.0.tar.gz

Download URL comnum-0.2.0.tar.gz
Size 1.3 MB
Tags Source
SHA-256 checksum
How to use checksums
1643335b6f1d7acd584954ec9628f5ffb16dd6f8795c7898e4dd5dcb278196e8
BLAKE2b-256 checksum
How to use checksums
58dcca95531e1c2978e14ef756897f906f55814d619fdf2f16baadbfeb92d52d
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 Nov 4, 2026.

Transparency log

Release files / comnum-0.2.0-cp311-abi3-win_amd64.whl

Download URL comnum-0.2.0-cp311-abi3-win_amd64.whl
Size 3.8 MB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
30c8dc0437c2d411d8e373864d5f9879ac750861a1b60e757977dae150a7a794
BLAKE2b-256 checksum
How to use checksums
63143481ee157bf4ee4a88c69eeee80c016b7e367da959768f8fa7823288c162
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 Nov 4, 2026.

Transparency log

Release files / comnum-0.2.0-cp311-abi3-musllinux_1_2_x86_64.whl

Download URL comnum-0.2.0-cp311-abi3-musllinux_1_2_x86_64.whl
Size 4.0 MB
Tags CPython 3.11 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
53382a87650d745f4399a6bdc741e1f7d27e50d1f2339a5ac5257fc7cfaa264d
BLAKE2b-256 checksum
How to use checksums
702a371ba66dc03e1a9152fc57248b19b30e38e22e76f4f145c101c4ec8f682d
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 Nov 4, 2026.

Transparency log

Release files / comnum-0.2.0-cp311-abi3-musllinux_1_2_aarch64.whl

Download URL comnum-0.2.0-cp311-abi3-musllinux_1_2_aarch64.whl
Size 3.5 MB
Tags CPython 3.11 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
228030eabbd1220ed93cdc4444ed93378b7e45d499f2a580e1d53acd21c1a551
BLAKE2b-256 checksum
How to use checksums
6983c79cbb12307fd1bfc86e2dab54b74b5ff1c28d2c14024b1aef7a068cc674
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 Nov 4, 2026.

Transparency log

Release files / comnum-0.2.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL comnum-0.2.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 3.8 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
676bcd8b5bf57c71432722904aa272d1c4ac922eb98a35538b56195507296a72
BLAKE2b-256 checksum
How to use checksums
cbbf780dc78661fc71ed0abf01e2c6955d56eb1908977f7a49260be2436c1d25
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 Nov 4, 2026.

Transparency log

Release files / comnum-0.2.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL comnum-0.2.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 3.4 MB
Tags CPython 3.11 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
a1e81d6ed8018ecfd872ccba60a22ba6b57501d030fac1b695ba56726c77cd47
BLAKE2b-256 checksum
How to use checksums
2e938d74fe80fcd9d9deb149c8993893d6013fd54f7fb7607470b8b024a1480e
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 Nov 4, 2026.

Transparency log

Release files / comnum-0.2.0-cp311-abi3-macosx_11_0_arm64.whl

Download URL comnum-0.2.0-cp311-abi3-macosx_11_0_arm64.whl
Size 3.3 MB
Tags CPython 3.11 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6e646426ce0c856861125a1b46ed7868186eca08e7e6b03c67649416f0a1d5ea
BLAKE2b-256 checksum
How to use checksums
0552c96dddc01c558275c996fbcc9aef77187fb0198c0fd9b2f669ffe8c99844
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 Nov 4, 2026.

Transparency log

Release files / comnum-0.2.0-cp311-abi3-macosx_10_12_x86_64.whl

Download URL comnum-0.2.0-cp311-abi3-macosx_10_12_x86_64.whl
Size 3.6 MB
Tags CPython 3.11 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
fc728c1cd48520ef1ac66a76bf4fd6e3eb53189d7c6ca5eac47d03d318206ce0
BLAKE2b-256 checksum
How to use checksums
19808fea31c86673d82ce29f6f5d60faa0d8a9fcb918987e2810305ece21452f
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 Nov 4, 2026.

Transparency log

Security for comnum 0.2.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 8 files in this release have been uploaded with provenance metadata.

Select from 8 files

Attestation for comnum-0.2.0.tar.gz

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 Nov 4, 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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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