Skip to main content

Python SDK for the Invisensing Audace DAS environment — reads Audace data files (DAT / HDF5 / TDMS / SEG-Y) and extracts per-channel data (I / Q / arctan / magnitude / phase) via a Rust-backed core.

Project description

Invisensing — Python SDK for the Audace DAS environment

invisensing is the official Python library for reading Distributed Acoustic Sensing (DAS) acquisition files produced by the Audace platform. It handles every file format the platform writes (.dat, .hdf5, .tdms, .sgy) through a single uniform API, and exposes the channels each file actually contains — I / Q / arctan / magnitude / phase — in one method call, with the right dtype and optional physical-unit scaling.

The library is format-agnostic but mode-faithful: it never silently re-derives one demodulation product from another. The on-board DAQ DSP chain (fading suppression, spatial differential, detrend filter) is not reproducible in software from an earlier tap, so the channel you can extract is the one the FPGA wrote. Inspect file.mode to dispatch; the SDK raises a clear ValueError if you call an extractor that doesn't apply.

The hot path (header parsing, bytes → numpy conversion, de-interleave) is implemented in Rust and exposed through PyO3, so reading a multi-GB capture stays fast even from Python.

Installation

pip install invisensing

That's it — every supported file format (DAT, HDF5, TDMS, SEG-Y) works out of the box. The default install pulls in numpy, h5py, npTDMS, and segyio so any file written by the Audace FileWriter can be opened without further setup.

Wheels are built from a Rust extension; pip handles the native build transparently. No Rust toolchain is required for end users.

Note — the format extras (pip install invisensing[hdf5] etc.) are still recognised for backwards compatibility with older installation guides, but they are no-ops now: every backend is part of the default install.

Quick start

from invisensing import File, Mode

with File("acquisition.dat") as f:
    print(f)                       # File('…', mode=iq, shape=…, …)
    print(f.duration, "s")
    print(f.distance, "m of fibre")

    # The Mode enum lets you dispatch cleanly on what the file contains.
    match f.mode:
        case Mode.RAW:
            data = f.read_lines(1000)              # (1000, line_size) ADC codes
        case Mode.IQ:
            i = f.get_i()                          # (n, positions) i16
            q = f.get_q()                          # (n, positions) i16
            iq = f.get_iq()                        # (n, positions) complex64
        case Mode.ARCTAN_MAGNITUDE:
            arctan = f.get_arctan()                # (n, positions) i16
            magnitude = f.get_magnitude()          # (n, positions) u16
        case Mode.PHASE:
            phase = f.get_phase()                  # (n, positions) f32 radians

Streaming large files

read_lines(n) advances a cursor; iterating the file yields one pulse at a time:

with File("long_capture.h5") as f:
    while f.lines_left:
        chunk = f.read_lines(10_000)
        process(chunk)

# Or, one pulse at a time:
with File("long_capture.dat") as f:
    for pulse in f:
        process(pulse)

For ad-hoc scripts on small files, read_all() returns everything in one allocation.

Output dtypes — raw codes vs. physical units

I, Q, arctan, and √(I²+Q²) are physically continuous quantities (volts for I/Q/magnitude, radians for arctan) that the FPGA encodes as fixed-point integers on the wire. The SDK offers two flavours of extractor for each lane:

  • Default extractors (get_i, get_q, get_arctan, get_magnitude) return the wire dtype — fast, no copy beyond the de-interleave, no precision loss on round-trip writes.
  • Physical-unit extractors (get_i_volts, get_q_volts, get_iq_volts, get_arctan_radians, get_magnitude_volts) return float32 numpy arrays in the natural physical unit (volts or radians). Use these when you start doing DSP — they save you from remembering the scaling constants.

The full mapping per mode:

Mode Method dtype Unit Scaling applied
Raw read_lines() int16 ADC code
IQ read_lines() int16 ADC code wire layout [I, Q, I, Q, …]
IQ get_i() / get_q() int16 ADC code de-interleave only
IQ get_iq() complex64 ADC code I + j·Q packed
IQ get_i_volts() / get_q_volts() float32 V i16 × range / 32768
IQ get_iq_volts() complex64 V real/imag both in volts
ArctanMagnitude read_lines() int16 mixed wire layout [atan, √, atan, √, …]
ArctanMagnitude get_arctan() int16 fixed-point 32767 ↔ +π
ArctanMagnitude get_arctan_radians() float32 rad i16 × π / 32768
ArctanMagnitude get_magnitude() uint16 ADC code bitcast from wire i16
ArctanMagnitude get_magnitude_volts() float32 V u16 × range / 32768
Phase read_lines() / get_phase() float32 rad already converted by Cardcontrol (i32 × π/32768)

Phase mode is the only one whose payload is already floating-point on the wire — the conversion happens in the acquisition driver so consumers never need to know the vendor's π/32768 scaling.

f.dtype always reflects what read_lines() will return, derived from sample_size and the FLOAT flag in the header.

When to pick which

with File("iq.dat") as f:
    # Quick QC / dumping — keep the wire codes:
    i = f.get_i()                      # int16, fast
    plt.plot(i[0])                     # ADC codes on Y axis

    # Real DSP — work in volts:
    iq_v = f.get_iq_volts()            # complex64, in volts
    envelope_v = np.abs(iq_v)          # volts
    phase_rad  = np.angle(iq_v)        # radians, wrapped

with File("arctan_mag.dat") as f:
    rad = f.get_arctan_radians()       # float32, ±π
    vol = f.get_magnitude_volts()      # float32, ≥ 0 volts

Reading a 4 GB DAT capture stays a 4 GB numpy array if you use the default extractors; the *_volts / *_radians family allocates a new float32 array (so 2× the raw size for i16 / 2× for u16, 8× for the complex64 in get_iq_volts).

Channel extractors — what they mean per mode

PCIe7821 on-board DSP can emit four different products. The SDK maps each to the right extractor:

Mode Wire layout (per pulse) Extractor(s) Dtype out
Mode.RAW [s0, s1, …, sN-1] read_lines() int16
Mode.IQ [I0, Q0, I1, Q1, …] get_i(), get_q(), get_iq() int16 / int16 / complex64
Mode.ARCTAN_MAGNITUDE [atan0, √0, atan1, √1, …] get_arctan(), get_magnitude() int16 / uint16
Mode.PHASE [φ0, φ1, …, φN-1] get_phase() float32 (radians)

Each extractor reads from the file or from a buffer you've already read — pass data= to reuse a buffer across extractors so the cursor doesn't double-advance:

with File("iq.dat") as f:
    chunk = f.read_lines(1000)
    i = f.get_i(chunk)                # reuses the buffer
    q = f.get_q(chunk)                # same — no extra file read
    # equivalent: f.channels(chunk) returns {"i": …, "q": …, "iq": …}

Calling the wrong extractor for the file's mode raises a clear error that names both the actual and the expected mode — no silent garbage:

>>> with File("phase.dat") as f:
...     f.get_i()
ValueError: get_i: file mode is 'phase', but this extractor only
applies to 'iq'. Inspect file.mode to dispatch  see the Mode enum docs.

Format auto-detection

The format is picked from the file suffix:

Suffix Backend
.dat Native Rust (no third-party dep)
.h5, .hdf5 h5py
.tdms npTDMS
.sgy, .segy segyio

If your file has no suffix or an unusual one, force the backend:

File("acquisition_data", format="dat")

Metadata at your fingertips

with File("acquisition.dat") as f:
    f.line_size                 # samples per pulse on the wire
    f.positions_per_line        # spatial positions per pulse (= line_size/2 if INTERLEAVED)
    f.sample_size               # bytes per sample
    f.sample_rate               # Hz
    f.trig_frequency            # Hz
    f.num_lines                 # total pulses recorded
    f.lines_left                # remaining behind the cursor
    f.duration                  # seconds (= num_lines / trig_frequency)
    f.distance                  # metres of fibre covered by one pulse
    f.range                     # ADC voltage range (V)
    f.timestamp                 # producer-side timestamp string
    f.dtype                     # numpy dtype of the wire samples
    f.shape                     # (num_lines, line_size)
    f.spatial_shape             # (num_lines, positions_per_line)

    # Flag inspection — works as a property or as a method call.
    f.is_demodulated            # True / False
    f.is_interleaved
    f.is_float
    f.is_phase
    f.is_unsigned               # arctan/√ files only
    f.is_ac                     # ADC AC-coupled
    f.is_hiz                    # ADC high-impedance

    # Full parsed header (byte-exact wire fields):
    f.header.num_channels       # active socket channels (1 or 2)
    f.header.content_type       # on-disk content descriptor byte (see below)
    f.header.content_type_name  # lowercase tag, e.g. "sw_mozart" / "raw" / "undefined"
    f.header.acquisition_ns     # precise acquisition time, i64 ns Unix (0 if legacy ASCII)

content_type — what the samples are

The header carries a content_type byte (offset 64) describing the meaning of the samples, orthogonal to the width/sign flags. Legacy captures (which had no such byte) decode as undefined (0), so it is fully backward-compatible.

with File("acquisition.dat") as f:
    if f.header.content_type_name == "sw_mozart":
        ...   # GPU Mozart software phase

Known tags: raw, hw_phase, hw_arctan, hw_arctan_dui, hw_amplitude, interleaved_hw_iq, interleaved_hw_arctan_amplitude, interleaved_hw_phase_amplitude, sw_mozart, undefined.

The acquisition timestamp is also surfaced as a precise i64 nanosecond Unix instant via f.header.acquisition_ns (it is 0 when the file used the legacy ASCII timestamp string, which is still readable through f.timestamp).

Writing files

from invisensing import export_dat
import numpy as np

samples = np.random.randn(10_000, 512).astype("float32")
export_dat(
    "out.dat",
    samples,
    sample_rate=250_000_000,
    trig_frequency=2_000,
    range_v=1.0,
    timestamp="2026-05-25_12:34:56",
)

export_dat writes the 128-byte Audace header (matching the C-side wire format byte-for-byte) followed by the array's raw samples. The FLOAT flag is set automatically when data.dtype.kind == 'f'.

API stability

Everything exported via from invisensing import * is part of the stable public API starting from version 1.0.0. We follow semantic versioning:

  • Patch releases (0.2.x): bug fixes, performance improvements.
  • Minor releases (0.x.0): additive changes only (new methods, new formats, new optional arguments). Existing code keeps working without changes.
  • Major releases (x.0.0): breaking changes — announced via the changelog with a migration guide.

Backwards compatibility with the legacy SDK

The original invisensing.File module is preserved unchanged:

import invisensing.File as iFile

file = iFile.File("acquisition.dat")
print(file.get_line_size(), file.get_trigger_frequency())
print(file.is_demodulated(), file.is_acquisition_ac())

while file.get_lines_left() > 0:
    data = file.get_lines(5)
    # process …

iFile.export("out.dat", data, file.get_timestamp(),
             file.get_trigger_frequency(), file.get_sample_rate(),
             file.get_range())

The legacy class delegates to the same Rust-backed implementation as the modern File, so legacy scripts run at the new speed without any modification.

Performance & safety

Performance

The lib is built to be the fastest credible way to get DAS samples into a numpy array in Python.

  • DAT reads stream through a BufReader<File>; the inner read_exact runs with the GIL released so a second Python thread can do work while the OS is blocked on disk.
  • No zero-init pass: the typed-conversion path allocates an uninitialised Vec<T> (via Vec::with_capacity + set_len) and fills it with one copy_nonoverlapping. Saves the 4 GB of pointless DRAM writes a vec![0; n] would do on a 4 GB acquisition.
  • De-interleave kernels read the contiguous numpy buffer via as_slice() and iterate with chunks_exact(2) — LLVM auto-vectorises this into SSE/AVX gather-extract instructions on x86_64. The output Vec is also set_len'd, no per-element capacity check.
  • HDF5 / TDMS / SEG-Y loading is handled by their respective Python libraries (themselves C-backed). The de-interleave step always runs through the same Rust kernels, regardless of the source format — channel extraction perf doesn't depend on the file format.
  • Zero allocation on the hot path in the channel extractors: each call returns a single freshly-allocated numpy array; no intermediate scratch buffers, no per-row copies.

Measured on a recent laptop (single-threaded, release build):

Operation Throughput
read_lines() from a .dat (i16 IQ, 100 MB chunk) 3.9 GB/s
get_i() + get_q() on a pre-loaded buffer 3.0 GB/s
get_iq()complex64 packing ≈ same order of magnitude

Reproduce with pytest tests/test_performance.py -v -s. The throughput sanity tests also fail loudly (assertion) if a regression cuts perf below the floor — > 50 MB/s for read_lines, > 100 MB/s for the kernels — so a future refactor can't silently re-introduce the Vec::push / vec![0; n] anti-patterns.

Safety

  • Strict header validation at open time: a File constructor rejects up front any header with line_size <= 0, sample_size not in {1, 2, 4, 8}, or an INTERLEAVED file with an odd line_size. The downstream maths can therefore assume positive sizes everywhere.
  • Bounded unsafe: the whole extension contains three small unsafe blocks (uninit Vec via set_len, the byte→typed primitive copy, and the i16→u16 bitcast for the magnitude lane). Each one has a one-line invariant in a // SAFETY: comment and is exercised by the 1-million-sample correctness tests in tests/test_performance.py.
  • Clear Python exceptions instead of crashes: every error path (missing file, malformed header, short read, wrong mode for the extractor) raises a typed OSError / ValueError / FileNotFoundError / ImportError with a message that names the field at fault.
  • No silent type coercion: the wire dtype is preserved by default; explicit *_volts / *_radians methods do the physical scaling when you want it. No implicit astype(float64) surprise on a 4 GB array.
  • Thread safety: each File owns its own backend; sharing a single File across Python threads is not supported (the file cursor isn't synchronised). Open one File per thread for parallel reads — they don't compete for any internal state.
  • No mmap: deliberate. Memory-mapped files turn I/O errors into SIGBUS (segfault) instead of Python exceptions, which is unsafe when reading user-supplied paths in a long-running lab process.

Examples

See assets/basic_usage.py for a runnable end-to-end script.

Building from source

git clone <repo>
cd python-lib
pip install maturin
maturin develop --release        # local dev install
maturin build  --release         # build a wheel for distribution

The Rust crate lives in src/lib.rs and the Python facade in python/invisensing/.

License

MIT — © 2024-2026 Invisensing. See LICENSE for the full text.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

invisensing-1.2.1.tar.gz (78.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

invisensing-1.2.1-cp314-cp314-win_amd64.whl (201.4 kB view details)

Uploaded CPython 3.14Windows x86-64

invisensing-1.2.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (289.3 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

invisensing-1.2.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (280.0 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

invisensing-1.2.1-cp314-cp314-macosx_11_0_arm64.whl (265.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

invisensing-1.2.1-cp313-cp313-win_amd64.whl (201.0 kB view details)

Uploaded CPython 3.13Windows x86-64

invisensing-1.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (288.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

invisensing-1.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (279.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

invisensing-1.2.1-cp313-cp313-macosx_11_0_arm64.whl (265.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

invisensing-1.2.1-cp312-cp312-win_amd64.whl (201.0 kB view details)

Uploaded CPython 3.12Windows x86-64

invisensing-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (288.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

invisensing-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (279.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

invisensing-1.2.1-cp312-cp312-macosx_11_0_arm64.whl (265.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

invisensing-1.2.1-cp311-cp311-win_amd64.whl (200.5 kB view details)

Uploaded CPython 3.11Windows x86-64

invisensing-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (289.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

invisensing-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (280.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

invisensing-1.2.1-cp311-cp311-macosx_11_0_arm64.whl (266.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

invisensing-1.2.1-cp310-cp310-win_amd64.whl (200.6 kB view details)

Uploaded CPython 3.10Windows x86-64

invisensing-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (289.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

invisensing-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (280.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

invisensing-1.2.1-cp310-cp310-macosx_11_0_arm64.whl (266.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

invisensing-1.2.1-cp39-cp39-win_amd64.whl (201.3 kB view details)

Uploaded CPython 3.9Windows x86-64

invisensing-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (290.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

invisensing-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (281.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

invisensing-1.2.1-cp39-cp39-macosx_11_0_arm64.whl (267.3 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

Details for the file invisensing-1.2.1.tar.gz.

File metadata

  • Download URL: invisensing-1.2.1.tar.gz
  • Upload date:
  • Size: 78.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for invisensing-1.2.1.tar.gz
Algorithm Hash digest
SHA256 d1d5b3c2b67e98f7837d4c7a0468b40a96da0f0283c4e91d3b6b683b249729c2
MD5 a154e5267a3fae99cc905bbf8d89af20
BLAKE2b-256 8ab80ab0b2fb03c6a1a017492e69a3fb8e87f554d92b4e3c17562fd6774b7122

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1.tar.gz:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: invisensing-1.2.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 201.4 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for invisensing-1.2.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 cd1e5481f65d3a9f60d786b73fd3b9bce567db46f1cd8c085938a102cec32b86
MD5 5ce99354f2639fc673d4e4b44ab80599
BLAKE2b-256 5d0ebf87c42d47b4c5a89d430cb442c61abbde223bf3bc4c8b64b06ed949429e

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp314-cp314-win_amd64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 975b57e17a4638627b58db5352c4d198ef2228c9540ad58bc9f8258110838b23
MD5 2a6765617bd31117285c4489372198e6
BLAKE2b-256 3c788292733e3e854437eaca1f95399db1aabd88137244a7c121a98df324bf8f

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 12fb87448198f8fd73b4edbeb8c1027e9e07c316e818cc8cc50fa74e38e1ccd3
MD5 ec557a2a1c506f9dab844e769298b967
BLAKE2b-256 cb6754255adbf44219cf9b47df8e7f6806018cdd424fff7be8813df0a8fa9393

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 303a22a1e921a51f4bf4b1650fd7aaacea04eac9949d4d7431d944f57e9b38ba
MD5 fefddaad08385b8952056c772955e7fa
BLAKE2b-256 0d4ba160a7077701d57866fc1ef5a73d904346116aada1bae58ede1b15aab085

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: invisensing-1.2.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 201.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for invisensing-1.2.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a27ffa456a9d92a5bbc4f20660184970a917e707455ac8ad36c33b347669a9b2
MD5 b4afabc5cf48e90e89b55f836edd3582
BLAKE2b-256 f820fa7516e600045fa756f472ee4d7e74ba17c250682d923d9c6c028db40f4d

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp313-cp313-win_amd64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 37ba3fcd86b43258d586fe19dfd14e2bef5ec8d84d9fd1dea818d324aa465e4c
MD5 8d16ec15e97d2400605738f06aa456b1
BLAKE2b-256 7e52aa93410801ddab8eb6dc72c48533959eec96d230d470362f382b2eb1198b

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ab965013a0055feaa3dfe1b93c2dcc66390d3140738d3dc8ad2633e07ffe00dd
MD5 448b6905c70162c51015b7f7d7cce7e5
BLAKE2b-256 9248b723c5321fe61dd2a0f504505f4a4e1ca4e1de7a5f0ca61e1786b49fb35e

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4255730259aecde6195cc41da4f9add193680b0230787f1c3b39bc08f86791f9
MD5 90459d532b8efaaff40ab044ef6899a7
BLAKE2b-256 68f1314a4014aacbef50374d2ea5cbd352ba0b19cb198b307d3ccd5df0f23be6

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: invisensing-1.2.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 201.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for invisensing-1.2.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2c9dd34e1c8fd15f33a4f8dd5dc03b603ca029bf4fc9964416da584309e0488b
MD5 43345d63328f4c6afc40427ce5965c80
BLAKE2b-256 2024dcf636448d33d80f3a956117a5f94c12c84f1767e1124bc28f0e0fc30ee8

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp312-cp312-win_amd64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c178a71fd15b1249e570e154ad79260a47bdc1e5c0e388558dd47cc371866ac0
MD5 f812081a4878b0b2aeef969ff7ddf660
BLAKE2b-256 94961a5e25f6f859dc433829d24071b90d91538ab2497cb7472377e86b190fb1

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 083eccd82c0f49e8987b4d256a1177d45638de56a1fec4a91049cf6dc543bb5f
MD5 fa94281b4ea094425759592fb830d933
BLAKE2b-256 060f979c63b770f9158d66c66873e0c64dca565d965c5440e4de0836a5f25d3a

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 664949b72d0de6faa644f341d87c1f7e2156ac9813c9b2c6b5d4409906e23ef8
MD5 ac2689c82e74beb811709b8890fb4a40
BLAKE2b-256 52c636b78a434a18340e0168c588e5cb5a0ea1e641d2b4c6909f5f9b03d078b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: invisensing-1.2.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 200.5 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for invisensing-1.2.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e4d2254bb2ad0b205569e88ca632252cf46177a55034d739f62d7dc84a41e38a
MD5 4b468a46ed4beeb0f02790d72267166b
BLAKE2b-256 2cef8068a001417012d399d6e7dd68fa64ef2d747e640eae481ce03b36c852c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp311-cp311-win_amd64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 58f20615e501b5eb15ea61c42bd1599ca68a16e43086a2e831de6510d27c0620
MD5 425e4ae3836e2ea0ef6cd100b1d12152
BLAKE2b-256 1f735ae6ac2fed9bf5fc67649828d2f4c1bd8f53da3f6b1f7ea04b0fa3d7ea98

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8b728a6205b7bae95a7824252d6775d6662004c79599c0f11f83ca86c4eeb5d4
MD5 523542fd209a05a352828cf74789661a
BLAKE2b-256 6eefa67ed0ab217a26e3f1205adc0d1fa076175b75d77ef1ae0fee66f7868631

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 417e846c5b53bda45c28c064bb252c1b164bce5b57f043facebcfc871b08ee49
MD5 bf7e14bd5a05411bc080ee839a67438e
BLAKE2b-256 97be542c6e5beb0ce828b3736fcdd888f56a34dae4727be7869d9628f4de92fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: invisensing-1.2.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 200.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for invisensing-1.2.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ee33664e22b1ced18e395715d15f88996e1b1ea9dfc9f4d09f87f5a8058fb48a
MD5 a8468f8e162d2311b3e152280feca880
BLAKE2b-256 0923ffa26de2f296a007d4a1360f2702b29096010b38e22789ef484e72e44ce9

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp310-cp310-win_amd64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 34d444274ded7024600c720925c6f10fa00e440d7f013160034ad1a3c0c55e64
MD5 b87b1f580bcc7eca8eefb88f122d0792
BLAKE2b-256 f4f4d4b278f01dac4c506079649407ee134601ea5d33b32790a5b50ea51cc80a

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 27abf8f3b6cb50e3a61ac740c6ce87c6f8531bc04b7ae7901e9e11c82d291865
MD5 2315241f37821bc80f25cb1efc679206
BLAKE2b-256 d5b751d8ef9ce2521395e6962ae3dd2c64cffdee5279d2e45ba9e490ac79933d

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fcadfd56e545d27609ab5beebf77cb8aebb1f7e98ba7b3c8f26f719f9ec69eeb
MD5 56eee47e0c22a6d3e9fe20cb870b9d0e
BLAKE2b-256 c37982d8fd0f9cfa477ea01731c6006732279dcbd9cadf85ade9a6b1745104d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: invisensing-1.2.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 201.3 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for invisensing-1.2.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 40c9ae61694d4846e079bf9cb044fcd0edbdc5815e1dea87e8d2e5111fa43857
MD5 f09ccd1b8c5f302a7f8452b3476e4684
BLAKE2b-256 0f000cfb3e3587e7223eda14ed5d84993b085cfce9936d91e27cb74d91387974

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp39-cp39-win_amd64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bc1a1774463ab82a4fd53d08252733fa9405af92c55dab0902b8c9cfe86b3b4d
MD5 47d2b421b6c723dc3dd49f5c120ba975
BLAKE2b-256 f73005bec76f43047a81f756e1c98f62e483fbd7c50b464074246f0375e6195a

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 431cf4d6422b76dca7a6ea9a71bdc682121a6b89aeadd9780f936509f942dccb
MD5 15f9357b5490479c6cdb3788d8c745ff
BLAKE2b-256 557d1a799667e73a59425bc9e388829ae83c9aa982692f7e3970e9e881e599f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invisensing-1.2.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for invisensing-1.2.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9d18046d349ecf655b49acf44b803c168d0607819c86095205535cb3e3cd524d
MD5 1fdc0ab03e25ab953b9b1a2e77cb3f74
BLAKE2b-256 bda0706057db345ee8449293596e3ffed98c4ad10cbe5a67849200d86d292e85

See more details on using hashes here.

Provenance

The following attestation bundles were made for invisensing-1.2.1-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: release.yml on invisensing-io/python-lib

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page