Skip to main content

mmwcore

mmwcore decodes captured and live mmWave data for offline training and real-time inference. Its boundary starts at caller-owned bytes plus explicit physical contracts, then produces range-Doppler cubes, detections, calibrated point clouds, clusters, tracks, and vital-sign products.

PyPI crates.io docs.rs CI License

Install

CPython 3.12–3.14:

pip install mmwcore

Rust 1.97 or newer:

cargo add mmwcore

Input boundary

Maintained inputs are:

  • archived DCA1000 datagrams;
  • headerless int16 ADC files with an explicit frame contract;
  • completed versioned capture directories opened with open_capture;
  • finite mmwcli.capture_stream.v1 data supplied through a caller-owned BinaryIO;
  • published radar-plus-camera sessions opened with open_multisensor_capture;
  • finite mmwcli.multisensor_stream.v1 data opened with open_multisensor_stream.
mmwcli output mmwcore entry point Typical use
radar capture-session directory open_capture reproducible offline radar processing
radar --stream stdout open_capture_stream pull-driven real-time radar inference
radar-plus-camera session directory open_multisensor_capture training data, indexed source access, and causal joins
aggregate --stream stdout open_multisensor_stream provisional multi-sensor inference followed by COMMIT/EOF validation

The matching acquisition commands and camera-producer workflow are documented by mmwcli and its multi-sensor guide.

The library does not configure devices, render firmware commands, or manage live acquisition. Callers must supply ADC layout, frame geometry, timing, antenna geometry, and trusted packet/frame origins when the stored format does not prove them.

TI capture contracts

  • group2_i_then_q: complex16 two-lane layout documented by the TI mmWave Studio reader for xWR16xx, xWR18xx, and xWR68xx captures.
  • group4_i_then_q: complex16 four-lane, channel-interleaved layout documented by the TI mmWave Studio reader for xWR12xx and xWR14xx captures.
  • Source-backed antenna geometries: XWR1642, standard XWR1843 EVM, IWR6843ISK, IWR6843 AOP, and AWR1843 AOP.

These explicit decoders and geometry presets are usable only when the caller proves the actual layout and board. Versioned mmwcli directory and stream v1 readers accept the three closed family tuples family=xwr16xx, family=xwr18xx, and family=xwr68xx; each also requires vendor=ti, empty model/revision, identity_source=route_declaration, config_format=ti_mmwave_legacy_cli.v1, dtype=int16, byte_order=little, lane_count=2, and layout=group2_i_then_q.

The embedded legacy CFG must match the declared family: xWR16xx uses the 76–81 GHz range and up to two TX identifiers, xWR18xx uses 76–81 GHz and up to three, and xWR68xx uses 57–64 GHz and up to three. Chirp order determines the explicit tx_order; no family selects antenna geometry or a preset. The standalone TI CLI parser likewise requires an explicit family keyword and has no default. ADCFileCapture.raw_capture and CaptureStreamContract.raw_capture expose the declared tuple, but decoder acceptance does not claim that an mmwcli acquisition route has been validated. route_declaration is not an observed device identity. See the mmwcli hardware-support matrix.

Python examples

The repository includes complete command-line examples that consume files or binary stdin and never start hardware:

Workflow Example
capture directory or explicit raw frames capture_or_raw.py
explicit xWR18xx/XWR1843 EVM geometry and recipe xwr18_range_doppler.py
finite radar live stream radar_live_stream.py
multi-sensor offline training pairs multisensor_offline_training.py
multi-sensor provisional live inference multisensor_live_inference.py

See the example index for copyable commands and finalization semantics.

Open a versioned capture directory

open_capture validates the manifest schema, required files, byte count, and whole ADC-frame geometry without scanning the full payload. Pass verify_payload=True when a complete ADC SHA-256 replay is required. A finalized CFG with frameCfg numFrames=0 keeps its open-ended acquisition semantics; mmwcore derives the positive actual frame count from the immutable ADC file instead of inventing a planned length. The directory must remain unchanged while it is open.

from mmwcore import open_capture

capture = open_capture("capture-session")
raw = capture.frame(0)
print(capture.raw_capture.family, raw.samples.shape)

The hash proves internal consistency, not provenance. A supplied preset is the caller's explicit declaration of a processing contract; the route-declared manifest does not identify or guess a board. Pass an exact RangeDopplerRecipe or callable preset to open_capture(..., range_doppler=...) when Range-Doppler processing is wanted. Built-in board presets are conveniences, not family defaults.

Process a finite capture stream

import mmwcore

stream = mmwcore.open_capture_stream(source)  # caller-owned BinaryIO
for item in stream.frames():
    infer(item.frame, stream.contract.radar_capture)
commit = stream.require_commit()

Frames remain provisional until require_commit validates COMMIT and terminal EOF. mmwcore neither closes the source nor opens a process, socket, or device. The source must make read honor any required deadline or cancellation. Processing is synchronous and pull-driven, without prefetch or worker threads.

Train from synchronized radar and camera data

from mmwcore import open_multisensor_capture

session = open_multisensor_capture("training-session")
radar = session.source("radar-0")
radar_capture = radar.open_radar_capture()
for camera_item, radar_item in session.causal_pairs(
    "camera-0", "radar-0", lag_min_ns=0, lag_max_ns=50_000_000
):
    train(
        camera_item.payload,
        radar_capture.frame(radar_item.item_index),
    )

The join uses conservative mapped time intervals, not equal frame numbers or nearest arrival time. If training needs Range-Doppler cubes instead of raw frames, bind the exact recipe or preset through open_radar_capture(range_doppler=...) and call range_doppler. Choose processing geometry from the actual board, never from the family string alone. Normal session opening validates artifact sizes and index structure; pass verify_artifacts=True to open_multisensor_capture for a full SHA-256 replay of every declared artifact.

Read session metadata after archiving ADC

from mmwcore import (
    open_mmwcli_capture_metadata,
    open_multisensor_capture_metadata,
    open_multisensor_source_timeline,
)

capture = open_mmwcli_capture_metadata("training-session/sensors/radar-0")
session = open_multisensor_capture_metadata("training-session")
radar_timeline = open_multisensor_source_timeline("training-session", "radar-0")

print(capture.adc_sha256, session.session_id, radar_timeline.items[0].mapped_time)

These readers validate capture contracts, session metadata, and source timing without opening the sensor payload. They keep synchronized training context usable after raw ADC is replaced by a verified ADC archive. Inputs are validated when opened; derived-artifact workflows should retain the resulting source identities rather than repeat the same file reads at publication time.

Consume a live aggregate stream

from mmwcore import open_multisensor_stream

stream = open_multisensor_stream(source)  # caller-owned BinaryIO
provisional = list(stream.items())
commit = stream.require_commit()
accepted = [item for item in provisional if commit.accepts(item)]

Radar and delivery_observed camera items expose mapped_time on the same host-relative axis. A camera exposure_midpoint remains unmapped in the live stream unless the producer supplies a live mapping; mmwcore never substitutes delivery time for exposure time. Items and derived results remain provisional until global COMMIT and EOF.

Read a headerless ADC file

from mmwcore.core import ADCComplexLayout, ADCFrameSpec
from mmwcore.io import ADCFileFrameReader

spec = ADCFrameSpec(
    num_chirps=2,
    num_rx=4,
    num_samples=128,
    layout=ADCComplexLayout.GROUP2_I_THEN_Q,
)
reader = ADCFileFrameReader("adc.bin", spec, frame_periodicity_s=0.01)
raw = reader.read_frame(0)
print(raw.samples.shape)

ADCFileFrameReader rejects incomplete files by default and reads frames without loading the full capture.

Read a capture-bound ADC archive

An ADC archive embeds its complete immutable capture contract and logical ADC SHA-256. Opening the file reconstructs the frame semantics directly from its header; no sidecar contract is required.

from mmwcore.io import ADCArchiveFrameReader

reader = ADCArchiveFrameReader("adc.mmwa")
raw = reader.read_frame(100)
print(reader.capture, reader.num_frames, raw.samples.shape)

read_frame() verifies the selected frame before returning it. Use reader.verify_all() for an explicit complete replay before a long processing or training run. write_adc_archive() accepts a RadarCaptureSpec, validates it against the source size, embeds its canonical JSON record, and publishes atomically without overwriting an existing file.

Assemble archived datagrams

from mmwcore.core import ADCFrameSpec
from mmwcore.io import assemble_dca1000_frame_bytes

spec = ADCFrameSpec(num_chirps=1, num_rx=1, num_samples=2)
raw, stats = assemble_dca1000_frame_bytes(
    [datagram_0, datagram_1],
    spec,
    frame_start_byte_count=trusted_frame_origin,
    payload_values_per_packet=2,
)

Stateless assembly requires exactly one complete frame: fixed payload lengths, contiguous u48 byte slots, and contiguous wrapping u32 packet numbers. frame_start_byte_count must come from the capture lifecycle; it is never inferred from the first packet or a modulo guess.

Continue to point clouds and tracks

Use an explicit PointCloudRecipe with process_adc_to_calibrated_point_cloud, then cluster_point_cloud and ClusterTracker2D. Source-backed geometry helpers cover XWR1642, standard XWR1843 EVM, IWR6843ISK, IWR6843 AOP, and AWR1843 AOP; the IWR6843 processing recipes are one optional preset family, not the mmwcore input boundary. Thresholds, calibration, Tx order, and tracker timing remain explicit. Keep one tracker instance for a sequence; recreating it discards temporal state.

Rust example

use mmwcore::{AdcComplexLayout, AdcFrameSpec, decode_adc_i16};

let spec = AdcFrameSpec::new(1, 1, 2, AdcComplexLayout::Group2IThenQ).expect("valid spec");
let cube = decode_adc_i16(&[1, 2, 3, 4], spec, false).expect("valid captured payload");
assert_eq!(cube.shape(), [1, 1, 1, 2]);

Package map

  • mmwcore.core: axes, units, ADC, cube, detection, point-cloud, and tracking contracts.
  • mmwcore.config: finite radar profiles, capture contracts, antenna geometries, and recipes.
  • mmwcore.io: packet, ADC-file, radar/multi-sensor directory, and finite live-stream readers.
  • mmwcore.dsp: FFT, clutter removal, CFAR, calibration, AoA, projection, and clustering.
  • mmwcore.tracking: assignment, stateful trackers, runners, metrics, and validation artifacts.
  • mmwcore.plot: optional research visualizations outside the Rust compute core.

Validation boundaries

The retained laboratory capture used for the figures below has 5000 frames, 2 chirps, 4 receivers, 128 complex samples, group2_i_then_q, and a 10 ms period. It lacks slope and sample-rate metadata, so range remains in bins. The source capture is not distributed; the figures are validation assets, not runnable fixtures.

Range-Time magnitude before and after temporal-background suppression

Raw ADC I/Q and four-receiver range spectra

Synthetic tests verify shapes, axes, finite values, wrap behavior, and deterministic transforms. They do not prove a board configuration, capture provenance, universal thresholds, or performance superiority. Device documentation and redistributable reference vectors remain authoritative.

Benchmarks and development

The reproducible synthetic pipeline, workload contract, and comparison rules are documented in docs/benchmarking.md.

uv sync --extra dev --locked
uv run pytest --cov=mmwcore
cargo test --workspace --locked
uv run python benchmarks/pipeline.py --warmups 0 --samples 1 --stream-frames 2

Archive completed ADC data

The offline ADC archive preserves every source byte in independently compressed and verified frame groups. Its header embeds the complete decoding contract, so reopening requires only the archive.

import numpy as np

from mmwcore.config import RadarCaptureSpec
from mmwcore.io import ADCArchiveFrameReader, open_adc_archive, write_adc_archive

capture = RadarCaptureSpec.from_record(capture_record)
archive = write_adc_archive(
    "capture/adc.bin",
    "capture/adc.mmwa",
    capture,
)
archive.verify_all()
four_frames = archive.read_frames(100, 104, verify=False)
batch_bytes = archive.read_windows([100, 104, 100], 4, verify=False)
batch = np.frombuffer(batch_bytes, dtype="<i2").reshape(
    3,
    4,
    archive.frame_bytes // 2,
)

reopened = open_adc_archive("capture/adc.mmwa")
print(reopened.capture)
one_verified_frame = reopened.read_frames(100, 101)
frames = ADCArchiveFrameReader("capture/adc.mmwa").read_frames([5, 0, 5])

The accepted v3 codec predicts equal int16 capture coordinates across groups of at most four frames, ZigZag maps exact i32 residuals, and uses adaptive 512-sample Rice blocks with raw-block fallback. Rust owns the format and codec; Python adapts the native object to RadarCaptureSpec and NumPy frame contracts. Reads verify each decoded chunk by default; verify=False is an explicit fast path for trusted local archives. read_windows() preserves caller order while opening the archive once and decoding every chunk touched by that batch at most once. See the ADC archive v3 binary format, the historical v2 format, and the ADC archive study. The fixed 14-source real-ADC corpus accepts both the Rice codec and complete v3 container. V3 is introduced in mmwcore 0.7.0.

See CONTRIBUTING.md and docs/architecture.md.

License

Apache-2.0. See LICENSE.

Metadata

Release files for mmwcore 0.7.1

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

Source distribution (sdist)

Source distribution for mmwcore 0.7.1
File Size Uploaded
mmwcore-0.7.1.tar.gz 218.3 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for mmwcore 0.7.1
File
mmwcore-0.7.1-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
mmwcore-0.7.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details
mmwcore-0.7.1-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.14 CPython 3.14 macOS 10.12+ x86-64, macOS 11.0+ ARM64, macOS 10.12+ universal2 (ARM64, x86-64) Details
mmwcore-0.7.1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
mmwcore-0.7.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
mmwcore-0.7.1-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64 Details
mmwcore-0.7.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
mmwcore-0.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
mmwcore-0.7.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.12 CPython 3.12 macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64 Details

Total release size: 12.2 MB

Release files / mmwcore-0.7.1.tar.gz

Download URL mmwcore-0.7.1.tar.gz
Size 218.3 kB
Tags Source
SHA-256 checksum
How to use checksums
c0726b8c2d8fa80bf95abb4457c95fb5c87aca574cdb1df5156e186b24f0b4d6
BLAKE2b-256 checksum
How to use checksums
30bb1e95e75f11263b72591f332b8a7808d13154686fc1dc0a0296bb47f5ccc6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

Release files / mmwcore-0.7.1-cp314-cp314-win_amd64.whl

Download URL mmwcore-0.7.1-cp314-cp314-win_amd64.whl
Size 1.0 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
36d5af974a86af940765cbf6cc206404c1165c75ac4aae60a4cf5a8d0730674e
BLAKE2b-256 checksum
How to use checksums
60a4ef423551b0155e5da80b68238a001561cdc64408fb35e06bf89a9a12ab45
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

Release files / mmwcore-0.7.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL mmwcore-0.7.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.1 MB
Tags CPython 3.14 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
3863faf35f8edb260ee119a49c2e2423505c4828db94f5386008672b05a71cd0
BLAKE2b-256 checksum
How to use checksums
16d0f4a1727c44df871102c3c4ce50e9e86687add6d8f6d08193600262e5918d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

Release files / mmwcore-0.7.1-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL mmwcore-0.7.1-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 1.8 MB
Tags CPython 3.14 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
976c62324977cfae12bdd6a69cc41c2e988d2681f969c543c33775c047d15e89
BLAKE2b-256 checksum
How to use checksums
dae3bcf61a4b12b60fa3a262dc5f86b71b6e685e31f57b7baa3ee89873e5ba38
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

Release files / mmwcore-0.7.1-cp313-cp313-win_amd64.whl

Download URL mmwcore-0.7.1-cp313-cp313-win_amd64.whl
Size 1.0 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
47c6d717053a7997c619cdaa7126aec07a9ebeb2b7a1335f9fdb642da6727fb6
BLAKE2b-256 checksum
How to use checksums
00f1c701f3d9c60261bde25938136f73c0f81fa07a6158475e6288c393c75714
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

Release files / mmwcore-0.7.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL mmwcore-0.7.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.1 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
d5a5cb8cba79c277332b9247ecee33ee3bf6c983d36cd05a1471ae5e0e048ef0
BLAKE2b-256 checksum
How to use checksums
722828fb9ed86cc48232d12d60884602b244d951eeb885b062595a2d093984c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

Release files / mmwcore-0.7.1-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL mmwcore-0.7.1-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 1.8 MB
Tags CPython 3.13 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
271e59d4d8b4ee9ecd17b98fd6acf948bb9ee2f6e7d044763347b365eb5ae6cb
BLAKE2b-256 checksum
How to use checksums
0e50d3997030128901d550a00769c324ac1809dbad0f64f08f0dc6abc9e866a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

Release files / mmwcore-0.7.1-cp312-cp312-win_amd64.whl

Download URL mmwcore-0.7.1-cp312-cp312-win_amd64.whl
Size 1.0 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
b7ea5339e02dc0b7db8d4b706bd773a75219c7f6356aa3dc3ae1ee7155bffdf7
BLAKE2b-256 checksum
How to use checksums
f2166ddea7f8e1d461e716757f928496b8f291fb341658bdc0fd9beccac1a3d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

Release files / mmwcore-0.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL mmwcore-0.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.1 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
6be871de8ed9ba595c1dd857727e09332091f558bb6e837ee243f0aa45fcba59
BLAKE2b-256 checksum
How to use checksums
02abd394839bca463b71f352653a6cc4cbaa3a442d95929099c0e595feef4f51
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

Release files / mmwcore-0.7.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL mmwcore-0.7.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 1.8 MB
Tags CPython 3.12 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
9a1ad64e9aef24706411d2e4e159a4c0a25720de89bbf22db75d204f9b4250bc
BLAKE2b-256 checksum
How to use checksums
bc7cf34373f887b7e891b34c68ce590b77b9ddc5cb32cc7ba8333196322262a4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 26, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.7.1 This release

10 release files

0.7.0

10 release files

0.6.0

10 release files

0.5.1

10 release files

0.5.0

10 release files

0.4.0

10 release files

0.2.2

4 release files

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