Skip to main content

mdfr

High-performance ASAM MDF (Measurement Data Format) 3.x and 4.x reader, writer, and embedded streaming logger in Rust.

mdfr provides fast, memory-efficient access to automotive measurement data across desktop analytics, server pipelines, and resource-constrained embedded targets.


Key Capabilities

  • High-Performance Reader:
    • Full support for ASAM MDF 3.x and 4.x (.mdf, .mf4).
    • Multithreaded parallel parsing with Rayon and zero-copy data representation using Apache Arrow.
    • Direct integration with Polars DataFrames and NumPy arrays.
    • Exporters for Parquet, HDF5, and CSV.
  • Embedded MDF 4.3 Streaming Logger (no_std + alloc):
    • Independent mdfr-core subcrate engineered for microcontrollers and RTOS environments (ARM Cortex-M4/M7/A).
    • High-throughput streaming with both Sorted (independent DT/DZ blocks) and Unsorted (single interleaved stream) layouts.
    • Zero-copy hardware bus presets for CAN, CAN-FD, LIN, FlexRay, and Ethernet.
    • Lock-free ISR interrupt logging via single-producer single-consumer ring buffer (SpscRing).
    • Power-loss resilience: mid-record truncation repair and on-device in-place file recovery (recover_in_place).
  • Compile-Time Struct Logging:
    • #[derive(MdfRecord)] procedural macro (mdfr-derive) to serialize custom Rust structs with automatic physical conversion and unit metadata.
  • MDF 4.3 Variable-Length Channels (VLSC):
    • First-class support for cn_type = 7 (Variable Length with companion Size Channel) across sorted VDBLOCK and unsorted CG_F_VLSC streams.
  • Multilingual Support:
    • Python bindings via PyO3 (pip install mdfr).
    • Stable C FFI for desktop reading (mdfr.h) and embedded logging (include/mdfr_logger.h).

Workspace Architecture

Crate Target / Environment Description
mdfr Desktop / Server (std) Full-featured crate with Arrow, Polars, Rayon, Parquet, HDF5, Python bindings, and CLI.
mdfr-core Embedded / Bare-metal (no_std + alloc) Pure MDF 4.3 block model, Deflate/LZ4 codecs, static arena allocator, and streaming logger engine.
mdfr-derive Proc-Macro #[derive(MdfRecord)] for compile-time record layout and zero-overhead serialization.

Python Usage

Install from PyPI:

pip install mdfr

Reading Files and Polars Integration

import mdfr

# Load MDF 3 or 4 file metadata
obj = mdfr.Mdfr("measurement.mf4")

# Load all channels into memory (Arrow-backed)
obj.load_all_channels_data_in_memory()

# Or load a selective subset for low memory footprint
obj.load_channels_data_in_memory({"EngineSpeed", "VehicleSpeed"})

# Retrieve numpy array
speed = obj.get_channel_data("VehicleSpeed")

# Retrieve Polars Series or complete DataFrame grouped by master channel
series = obj.get_polars_series("VehicleSpeed")
df = obj.get_polars_dataframe("VehicleSpeed")

# Export to other analytical formats
obj.export_to_parquet("output.parquet", compression="snappy")
obj.export_to_hdf5("output.h5")
obj.export_to_csv("output.csv")

Streaming Logger (Python)

import mdfr

# Configure a streaming logger
builder = mdfr.MdfLogger(layout="sorted", compression="lz4")
g_vehicle = builder.add_group("Vehicle")
ch_speed = builder.add_channel(g_vehicle, "Speed", "float", 64)
builder.set_channel_unit(ch_speed, "km/h")

logger = builder.start("streamed_log.mf4")

for i in range(100):
    logger.begin_record(g_vehicle)
    logger.set_f64(ch_speed, 50.0 + i * 0.5)
    logger.commit()

logger.close()

Rust Usage

1. Analytical Desktop Reader (mdfr with Polars)

[dependencies]
mdfr = { version = "0.8", features = ["polars", "parquet"] }
use mdfr::mdfreader::Mdf;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut mdf = Mdf::new("measurement.mf4")?;
    mdf.load_all_channels_data_in_memory()?;

    // Extract Polars DataFrame grouped by master channel
    let df = mdf.get_channel_polars_dataframe(Some("Time"))?;
    println!("{df}");

    // Export to Parquet
    mdf.export_to_parquet("measurement.parquet", mdfr::export::parquet::CompressionOption::Snappy)?;

    Ok(())
}

2. Embedded Streaming Logger (mdfr-core + mdfr-derive)

[dependencies]
mdfr-core = { version = "0.8", default-features = false, features = ["lz4", "derive"] }
use mdfr_core::logger::{CompressionAlgorithm, DataLayout, Logger, LoggerBuilder};
use mdfr_core::time::ManualClock;
use mdfr_core::MdfRecord;

#[derive(MdfRecord)]
#[mdf(group = "Powertrain")]
struct PowertrainFrame {
    #[mdf(name = "RPM", unit = "rpm", linear(0.0, 0.25))]
    rpm_raw: u16,
    #[mdf(name = "Torque", unit = "Nm", rational(0.0, 0.5, -100.0, 0.0, 0.0, 1.0))]
    torque_raw: i16,
    #[mdf(name = "Throttle", unit = "%")]
    throttle: f32,
    #[mdf(name = "FaultActive")]
    fault: bool,
}

fn main() -> Result<(), Box<dyn core::error::Error>> {
    let mut builder = LoggerBuilder::new(DataLayout::Sorted, CompressionAlgorithm::Lz4Transpose);
    let g_pt = builder.add_record_group::<PowertrainFrame>()?;
    let schema = builder.build()?;

    let file = std::fs::File::create("log.mf4")?;
    let clock = ManualClock::new(0.001, 1); // 1 ms resolution
    let mut logger = Logger::start(schema, file, clock)?;

    let sample = PowertrainFrame {
        rpm_raw: 3200,   // phys: 800 rpm
        torque_raw: 400, // phys: 100 Nm
        throttle: 25.0,
        fault: false,
    };

    // Zero-overhead push
    logger.push_record(g_pt, &sample)?;
    logger.close()?;
    Ok(())
}

3. In-Place Power-Loss Recovery

In embedded applications, unexpected power cut before logger.close() leaves the MDF 4.3 header unfinalized. recover_in_place repairs the file directly on the storage device:

let mut file = std::fs::OpenOptions::new().read(true).write(true).open("log.mf4")?;
let recovered_samples = mdfr_core::logger::recover_in_place(&mut file)?;
println!("Repaired {recovered_samples} records in-place without data loss.");

C / C++ Embedded ABI (include/mdfr_logger.h)

mdfr-core exposes a clean, non-panicking C API using function-pointer vtables for I/O (mdfr_sink_t) and timer clocks (mdfr_clock_t), suitable for FatFs, LittleFS, POSIX, or bare-metal ring buffers:

#include "mdfr_logger.h"

// Define storage vtable (e.g. FatFs f_write / f_lseek)
mdfr_sink_t sink = { .ctx = &fil, .write = my_write, .seek = my_seek, .flush = NULL, .close = NULL };
mdfr_clock_t clock = { .ctx = NULL, .now_ticks = get_ticks, .tick_ns = 1000000, .wall_clock_ns = NULL };

mdfr_builder_t* b = mdfr_logger_builder_new(MDFR_LAYOUT_SORTED, MDFR_COMPRESS_LZ4_TRANSPOSE);
uint16_t group = 0;
mdfr_logger_add_group(b, "CAN_Raw", &group);

mdfr_logger_t* logger = NULL;
mdfr_logger_start(b, sink, clock, &logger);

// Push raw hardware-timestamped bus frame
uint8_t payload[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
mdfr_logger_push_raw_at(logger, group, get_hardware_timer(), payload, sizeof(payload));

mdfr_logger_close(logger);

Cargo Features

mdfr (Desktop)

  • default = ["numpy", "parquet", "polars", "cli"]
  • polars: High-performance Polars DataFrame integration.
  • parquet: Apache Parquet exporter.
  • hdf5: HDF5 exporter (rust-hdf5).
  • numpy: NumPy array conversion via PyO3.
  • cli: Command-line executable (mdfr).

mdfr-core (Embedded)

  • default = ["deflate", "lz4", "derive"]
  • deflate: Pure Rust Miniz-Oxide Deflate compression (no_std + alloc).
  • lz4: Pure Rust LZ4 compression (no_std + alloc).
  • derive: Proc-macro #[derive(MdfRecord)] integration.
  • capi-arena: Zero-fragmentation StaticArena bare-metal memory allocator.
  • defmt: Implements defmt::Format for embedded logging.

License

GPL-3.0 License.

Metadata

Release files for mdfr 0.8.1

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 mdfr 0.8.1
File Actions
mdfr-0.8.1-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for mdfr-0.8.1-cp314-cp314-win_amd64.whl
mdfr-0.8.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details for mdfr-0.8.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
mdfr-0.8.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ ARM64 Details for mdfr-0.8.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
mdfr-0.8.1-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for mdfr-0.8.1-cp314-cp314-macosx_11_0_arm64.whl
mdfr-0.8.1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for mdfr-0.8.1-cp313-cp313-win_amd64.whl
mdfr-0.8.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details for mdfr-0.8.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
mdfr-0.8.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64 Details for mdfr-0.8.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
mdfr-0.8.1-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for mdfr-0.8.1-cp313-cp313-macosx_11_0_arm64.whl
mdfr-0.8.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for mdfr-0.8.1-cp312-cp312-win_amd64.whl
mdfr-0.8.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details for mdfr-0.8.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
mdfr-0.8.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details for mdfr-0.8.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
mdfr-0.8.1-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for mdfr-0.8.1-cp312-cp312-macosx_11_0_arm64.whl
mdfr-0.8.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for mdfr-0.8.1-cp311-cp311-win_amd64.whl
mdfr-0.8.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details for mdfr-0.8.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
mdfr-0.8.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details for mdfr-0.8.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
mdfr-0.8.1-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for mdfr-0.8.1-cp311-cp311-macosx_11_0_arm64.whl
mdfr-0.8.1-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for mdfr-0.8.1-cp310-cp310-win_amd64.whl
mdfr-0.8.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details for mdfr-0.8.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
mdfr-0.8.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64 Details for mdfr-0.8.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
mdfr-0.8.1-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for mdfr-0.8.1-cp310-cp310-macosx_11_0_arm64.whl

Total release size: 87.4 MB

Release files / mdfr-0.8.1-cp314-cp314-win_amd64.whl

Download URL mdfr-0.8.1-cp314-cp314-win_amd64.whl
Size 4.3 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
2534cee8927ba7eea61337eeb527cdbb41e882d7fed365299c0af6692b7cb4f4
BLAKE2b-256 checksum
How to use checksums
cdd935066765aa91f10cf908e46851779a2d01125336b189bae530ba3b59ae71
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL mdfr-0.8.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 4.6 MB
Tags CPython 3.14 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
2948c56e8cacd15e1be1076ec296be552f5fa2c09c3f3486eb1f4cbc244b729a
BLAKE2b-256 checksum
How to use checksums
83d1f5f47a1fcded93570d09c105fd1efef5fb7cd0e361706d2613b52dd98f93
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL mdfr-0.8.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 4.4 MB
Tags CPython 3.14 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
bfb0747ba8de4b07d246c216490d245c17c8f71ad43496ee882e9707575d7c32
BLAKE2b-256 checksum
How to use checksums
32b4da203d08b01e296891f8d666ec7723b42f36f9cef5fe4789af94a1cdc224
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp314-cp314-macosx_11_0_arm64.whl

Download URL mdfr-0.8.1-cp314-cp314-macosx_11_0_arm64.whl
Size 4.1 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
474a4b4107e9888b4b59b4238982c97f1091031844c707ae39485f3b7ffb59d2
BLAKE2b-256 checksum
How to use checksums
2b2acc5ee4d3f6ac96bcbd2fee39a434905179ad5a161ce74a53aa9bb67d779c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp313-cp313-win_amd64.whl

Download URL mdfr-0.8.1-cp313-cp313-win_amd64.whl
Size 4.3 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
51ee913e6efb59df68a97c9d8f1bb0ec11aa1b1f92f9ec0b35d664fae4e3610e
BLAKE2b-256 checksum
How to use checksums
e427ef0ece712bd97e91b4b11c29b95e7e632948bec12785ebaa9ab982a07d30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL mdfr-0.8.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 4.6 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
bb10cac09c7d197fbb13f92933b162831e0abe61edaf88d4c0f9e58187e22db4
BLAKE2b-256 checksum
How to use checksums
c71d2bb56be4d9dd176627ad4ccab5f911054a1332a1078e9b02844ca878aac7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL mdfr-0.8.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 4.4 MB
Tags CPython 3.13 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
56a31c695b8e4e6426776ee364c2c81a9f86e9b03c920931626a68894fd55347
BLAKE2b-256 checksum
How to use checksums
7f599d7f93480fb5b3116271e005859a2170c557571122bf30dd19fce087e895
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp313-cp313-macosx_11_0_arm64.whl

Download URL mdfr-0.8.1-cp313-cp313-macosx_11_0_arm64.whl
Size 4.1 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e2c9d759d6261e4dc1257c2dd3f6279689afae2c07d24d58792edf1a8517499d
BLAKE2b-256 checksum
How to use checksums
7f12fb93647348ba6fb47128f667371918294036da980b325ddb4ec32664d600
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp312-cp312-win_amd64.whl

Download URL mdfr-0.8.1-cp312-cp312-win_amd64.whl
Size 4.3 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
60c81d26f32a8e4d77a0756fa1d402b5c133b3b6422f1bbaea8f3125d0efb326
BLAKE2b-256 checksum
How to use checksums
a83567f3d21c97f1f84f85d18dc919816f66b68809c5e9f66669c01af297e9e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL mdfr-0.8.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 4.6 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
fe413c8315123ef1eab88a8ccb4e5e4755906fdc1e9e01a91b09bd5ba914bbb1
BLAKE2b-256 checksum
How to use checksums
1495c77dd726237ab657d2e07d0b5791c2b2f17de707dcdb31ecf41afe1422c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL mdfr-0.8.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 4.4 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
02e9ac9fcd3fe4a658af472dfa2a2e23ab6d9cb3ebf9e3377c58f9f90f255a8c
BLAKE2b-256 checksum
How to use checksums
5097cbaf94105b5fcf5f65e6f0a5b78803ad981f5706a92359f99c918168b276
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp312-cp312-macosx_11_0_arm64.whl

Download URL mdfr-0.8.1-cp312-cp312-macosx_11_0_arm64.whl
Size 4.1 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4adf7e5355e5d25d792851102d67f2ca94aa713d1ecb430f48e097b1582dcfb5
BLAKE2b-256 checksum
How to use checksums
f01b822478b5e5c9a624625124a495ee7f44269c226878e2b1dfe9c4a7d612ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp311-cp311-win_amd64.whl

Download URL mdfr-0.8.1-cp311-cp311-win_amd64.whl
Size 4.3 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
0cd38485fbaed8ef1321982d194c5068f4d339794b44fb10281774bb7236449f
BLAKE2b-256 checksum
How to use checksums
165dd811bd0dd3d7e3647234a71c9930efa368ff365a1f3cb1b7531ff05a30c1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL mdfr-0.8.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 4.6 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
443754d407cb5f6727eab2a742e3ca441acfd969b81a6ef663fef92ef77850d0
BLAKE2b-256 checksum
How to use checksums
7d0180de732b5ac7561a011c0c01b8cd84c10aca47ec401c75d4740ca87f9e08
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL mdfr-0.8.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 4.4 MB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
9cb2b5b3b29a09a6d86f83a86706b68c31569c4d0f36187762157c92ff746e12
BLAKE2b-256 checksum
How to use checksums
f9f60002bdeaf9974b457d817b228cdf1482d20780d2025736a677ba811cb754
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp311-cp311-macosx_11_0_arm64.whl

Download URL mdfr-0.8.1-cp311-cp311-macosx_11_0_arm64.whl
Size 4.1 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
59d6ea0967452534d3c4f7167e533e2562ef5f2223b3df3078a86d77263426d5
BLAKE2b-256 checksum
How to use checksums
b945b17a5bb34124048e2edbb7395e2100c46aca60d3c3fac83f96315ede18ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp310-cp310-win_amd64.whl

Download URL mdfr-0.8.1-cp310-cp310-win_amd64.whl
Size 4.3 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
6bd830aa99f8b594af1cb2f78c7a8600759a8d1853683aa4df9083026958e89a
BLAKE2b-256 checksum
How to use checksums
8ee61de23501a0cc57daa5c2907b6b6e84ac36c9b389e8ea5b7d0bd3de6597e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL mdfr-0.8.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Size 4.6 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
9faf6e9383ade309f446d112d04cc2ff011c6919c574c1422c2772ac2bc7cfe4
BLAKE2b-256 checksum
How to use checksums
ada181d6342e8ac12e49875a747402833a15f31f5eaaa12e3aaa5ce4e53883f0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl

Download URL mdfr-0.8.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Size 4.4 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
a374df47d0e5e9c39475cc151107c33ca4b1bf4bf191e0467bdee832ef0d907e
BLAKE2b-256 checksum
How to use checksums
e990e54b42dc08a2dd0c3d53b3d1b1db58ee66124cef5dd4ffdfb3447c268847
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / mdfr-0.8.1-cp310-cp310-macosx_11_0_arm64.whl

Download URL mdfr-0.8.1-cp310-cp310-macosx_11_0_arm64.whl
Size 4.1 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
cf0be10e387bc402242a976ee8f583f68fc876c16a464c328c87f0a9d427c158
BLAKE2b-256 checksum
How to use checksums
a91620a31405b73f97553ad1aec0ce55a1dea2ba1a663491f17844e279993488
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Security for mdfr 0.8.1

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

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