Skip to main content

geoveil-mp

GNSS code multipath analysis — Rust core, Python API

Crates.io PyPI PyPI downloads Rust Python License: PolyForm Noncommercial CI/CD

Code multipath RMS by signal — real 24 h / 30 s multi-GNSS data

Anubis/TEQC-style code multipath estimation for every pseudorange observable in a RINEX file — per-code MP linear combinations, arc-wise ambiguity debiasing, interval-aware cycle-slip detection, and SNR series export. Built for continuous station monitoring on long time series of 1 s or 30 s data, following the methodology of Hunegnaw & Teferle (Sensors 2022).

Part of the GeoVeil suite together with geoveil-cn0 (CN0 signal quality and threat detection).

Live demo: batch.geoveil-rinex.eu — the GeoVeil batch dashboard runs this library in production: per-code MP RMS, cycle-slip counts, SNR-residual wavelet spectra, Fresnel zone maps, and long-term multipath trend monitoring on daily 30 s station data.

Website: miluta7.github.io/geoveil-mp

What's new in 1.0

  • SNR wavelet analysis in Rust. Morlet continuous wavelet transform of detrended SNR per satellite, 95 % red-noise significance, and band power in period bands matched to the sampling interval.
  • First Fresnel zone mapping. Zone semi-axes and specular-point distance for every track cell, for any antenna height and carrier (Hunegnaw & Teferle 2022, eq. 6).
  • Same numbers, about 20x faster than the numpy reference that runs on the GeoVeil platform. Satellites run in parallel and the GIL is released.
  • License: PolyForm Noncommercial 1.0.0 with attribution. Versions up to 0.2.1 remain MIT. See License.

Installation

pip install geoveil-mp

Pre-built wheels for Linux, Windows, and macOS — no Rust toolchain required.

# Rust
[dependencies]
geoveil_mp = "0.2"

Quick Start

import geoveil_mp as gm

obs = gm.read_rinex_obs("BOR100POL_R_20240010000_01D_30S_MO.rnx")
print(obs.num_epochs, obs.num_satellites, obs.interval)   # 2880 104 30.0

analyzer = gm.MultipathAnalyzer(obs, elevation_cutoff=10.0, systems=["G", "R", "E", "C"])
results = analyzer.analyze()

# One statistics row per signal code: GPSM1C, GPSM2W, GALM8X, GLOM1P, BDSM2I, ...
for s in sorted(results.statistics, key=lambda s: s.signal):
    print(f"{s.signal}  rms={s.rms:.3f} m  n={s.count}  slips={s.cycle_slips}")

# Cycle slips, counted per carrier-phase signal
print(results.cycle_slip_counts)          # {'GPSL1C': 210, 'GPSL2W': 168, ...}

# Attach precise elevations from SP3 (recomputes elevation-weighted RMS)
sp3 = gm.read_sp3("COD0MGXFIN_20240010000_01D_05M_ORB.SP3")
computed, failed = results.compute_elevations(sp3, obs.approx_position)

# SNR time series per satellite and S-code (for SNR-residual multipath analysis)
for series in obs.get_snr_series("G07"):
    print(series.code, len(series), series.values[:3])
Debiased MP series for one satellite — the oscillation is site multipath

What it computes

Per-code multipath combinations

For every pseudorange code observable P_k (C1C, C1X, C2W, C2X, C5X, ...), the ionosphere-free, geometry-free multipath combination is formed with two carrier phases:

MP_k = P_k − (1 + 2/(α−1))·Φ_i + (2/(α−1))·Φ_j        α = (f_i / f_j)²
  • Φ_i — phase on the code's own band; Φ_j — phase on a partner band chosen from a deterministic per-system priority list
  • GLONASS FDMA frequencies use the per-satellite channel numbers from the RINEX header
  • The phase-ambiguity bias is removed per continuous arc: whole-arc mean for short arcs, centered moving average (default 1500 s) for long ones
  • Arcs reset at data gaps, cycle slips, and MP jumps — slips never smear into the RMS

Signals are named in the convention used by GNSS monitoring literature: GPSM1C, GPSM2W, GLOM1P, GALM8X, BDSM2I.

Cycle-slip detection

Three detectors, thresholds that scale with the sampling interval (|Δ| > base + rate·dt):

Method Test Default threshold
Geometry-free ΔGF per phase code vs. reference band 0.10 m + 0.003·dt
Code-phase Δ(Φ − P) per code 5.0 m + 0.10·dt
LLI RINEX loss-of-lock flags (phase only) —

At 30 s sampling this detects single-cycle L1 slips (GF signature ≈ 0.29 m vs. threshold 0.19 m) — rate-based thresholds tuned for 1 s data cannot. Slips are attributed and counted per signal code (GPSL2W, GLOL1C, ...).

SNR series export

RinexObsData.get_snr_series(satellite, code=None) returns per-S-code time series (unix-second timestamps, dB-Hz values) — the input for SNR-residual multipath analysis (polynomial detrending, wavelet spectra) without re-parsing the file.

SNR wavelets and Fresnel zones (1.0)

w = gm.analyze_snr_wavelets(obs)          # all satellites, in parallel
w["bands"]                                # [[60, 120], [120, 300], [300, 900], [900, 1800]] at 30 s
w["band_power"]["R02"]["power"]           # binned scale-averaged power, one series per band

r = w["residuals"]["R02"]                 # detrended linear-amplitude SNR
s = gm.scalogram(r["t"], r["v"], w["interval"])   # power, periods, significance, coi

a, b, dist = gm.fresnel_zone(15.0, 2.0)   # 2 m antenna, 15 deg, GPS L1 -> (4.896, 1.267, 7.464) m
zones = gm.fresnel_map([("G05", azimuths, elevations)], antenna_height=2.0)
  • SNR is converted from dB-Hz to linear amplitude, split into arcs at gaps, and detrended per arc with the polynomial (order 2 to 9) that leaves the smallest residual RMS
  • Morlet CWT follows the Torrence & Compo (1998) FFT formulation; significance is tested against a lag-1 red-noise background
  • Period bands adapt to the interval because the article's 1 s bands are unreachable at 30 s sampling
  • Fresnel footprints are sampled once per 10° × 10° azimuth/elevation cell above the elevation cutoff

First Fresnel zone footprints on the GeoVeil platform Morlet wavelet scalogram of detrended SNR on the GeoVeil platform


Results on real data

24 h of BOR1 (EPN, Poland) 30 s multi-GNSS RINEX 3, default settings:

Constellation Best signal RMS Worst signal RMS
Galileo E5 AltBOC (M8X) 0.165 m E5b (M7X) 0.395 m
GPS L2C (M2X) 0.312 m L1 C/A (M1C) 0.342 m
BeiDou B2I (M7I) 0.295 m B3I (M6I) 0.354 m
GLONASS L2 P (M2P) 0.318 m L1 C/A (M1C) 0.566 m

The ranking (Galileo AltBOC best, GLONASS C/A worst) reproduces published station-monitoring results. Parsing the file takes ~0.4 s; the full 15-signal analysis with slip detection ~1.4 s (306 k estimates).


Analyzer options

gm.MultipathAnalyzer(
    obs,
    elevation_cutoff=10.0,        # degrees; applied when elevations are known
    systems=["G", "R", "E", "C"], # G R E C J S I
    bias_window_seconds=1500.0,   # moving-average window; None = whole-arc mean
    min_arc_seconds=300.0,        # drop shorter arcs
    arc_gap_factor=5.0,           # arc break at gap > factor × interval
    include_codes=["C1C", "GC5X"],# restrict codes ("C1C" any system, "GC5X" GPS only)
    exclude_codes=[],
    max_epochs=None,              # uniform decimation guard for huge files
    detect_cycle_slips=True,
    ion_delta_base=0.10, ion_delta_rate=0.003,   # GF slip threshold (m, m/s)
    cp_delta_base=5.0,   cp_delta_rate=0.10,     # code-phase slip threshold
)

API surface

Object Key members
RinexObsData num_epochs, num_satellites, interval, marker_name, approx_position, satellites(), observation_types(sys), glonass_fcn(), snr_codes(sat), get_snr_series(sat, code=None)
MultipathAnalyzer analyze() → AnalysisResults
AnalysisResults estimates, statistics, cycle_slips, cycle_slip_counts, total_estimates(), total_cycle_slips(), compute_elevations(sp3, receiver)
MultipathEstimate satellite, system, signal ("C1C"), epoch, mp_value, elevation, azimuth, snr
MultipathStats signal ("GPSM1C"), system, code, count, rms, weighted_rms, mean, std_dev, min, max, cycle_slips
CycleSlip satellite, epoch, signal, system, magnitude, threshold, method ("gf", "code_phase", "lli")
SnrSeries satellite, system, code, times, values, epochs_iso()
Sp3Data satellites(), get_position(sat, epoch), num_epochs, interval
Wavelets & Fresnel (1.0) analyze_snr_wavelets(obs, satellites=None, interval=None, bands=None), scalogram, morlet_cwt, band_power, red_noise_significance, period_bands, detrend_arc, split_arcs, fresnel_zone, fresnel_map, GPS_L1_WAVELENGTH
Functions read_rinex_obs, read_rinex_obs_bytes, read_sp3, calculate_azel, compute_elevation, get_frequency, get_wavelength, version

Supported input: RINEX v2 / v3 / v4 observation files, SP3-c/d orbits, broadcast ephemerides (Keplerian + GLONASS RK4).


Pipeline

flowchart LR
    A[RINEX v2/v3/v4] --> B[Parse<br/>code + phase + SNR]
    B --> C[Per-code combos<br/>deterministic phase pairing]
    B --> D[Cycle-slip detection<br/>GF · code-phase · LLI]
    D --> E[Arc splitting]
    C --> E
    E --> F[Ambiguity debiasing<br/>mean / moving average]
    F --> G[Per-signal statistics<br/>RMS · weighted RMS]
    H[SP3 orbits] -.-> I[Elevations / azimuths]
    I -.-> G
    B --> J[SNR detrend<br/>per arc]
    J --> K[Morlet CWT<br/>band power · significance]
    I -.-> L[First Fresnel zones]

CLI

geoveil-mp analyze --obs station.rnx --sp3 orbits.sp3 --elevation 10 --output results/
geoveil-mp info --obs station.rnx

References

  • Hunegnaw, A.; Teferle, F.N. Evaluation of the Multipath Environment Using Electromagnetic-Absorbing Materials at Continuous GNSS Stations. Sensors 2022, 22, 3384.
  • Estey, L.H.; Meertens, C.M. TEQC: The Multi-Purpose Toolkit for GPS/GLONASS Data. GPS Solutions 1999, 3, 42–49.
  • Václavovic, P.; Douša, J. G-Nut/Anubis: Open-Source Tool for Multi-GNSS Data Monitoring. IAG Symposia 2016, 143.

License

PolyForm Noncommercial 1.0.0 with an attribution term — see LICENSE.

Free for research, education, personal and other non-commercial use, provided you credit the author and cite the library (see Citation below). Commercial use requires a separate license — contact miluta.flueras@cartografie.ro.

Author

Miluta Dulea-Flueras — miluta.flueras@cartografie.ro

Citation

@software{geoveil_mp,
  author  = {Dulea-Flueras, Miluta},
  title   = {geoveil-mp: GNSS Code Multipath Analysis Library},
  year    = {2026},
  version = {1.0.0},
  url     = {https://github.com/miluta7/geoveil-mp},
  license = {PolyForm-Noncommercial-1.0.0}
}

Metadata

Release files for geoveil-mp 1.0.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 geoveil-mp 1.0.0
File Size Uploaded
geoveil_mp-1.0.0.tar.gz 637.7 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for geoveil-mp 1.0.0
File
geoveil_mp-1.0.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
geoveil_mp-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
geoveil_mp-1.0.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
geoveil_mp-1.0.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
geoveil_mp-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
geoveil_mp-1.0.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
geoveil_mp-1.0.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
geoveil_mp-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
geoveil_mp-1.0.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
geoveil_mp-1.0.0-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
geoveil_mp-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ x86-64 Details
geoveil_mp-1.0.0-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details

Total release size: 8.3 MB

Release files / geoveil_mp-1.0.0.tar.gz

Download URL geoveil_mp-1.0.0.tar.gz
Size 637.7 kB
Tags Source
SHA-256 checksum
How to use checksums
ec71a90e50e42dddc494c1e440347f90e3ed8a038b933d3e03f8e8154aa39947
BLAKE2b-256 checksum
How to use checksums
ab30b49cfe365f7b417bc4ebbf76d2d369e1dacbb97504c2479f7602e19812d9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

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

PyPI Publish Attestation

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

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / geoveil_mp-1.0.0-cp312-cp312-win_amd64.whl

Download URL geoveil_mp-1.0.0-cp312-cp312-win_amd64.whl
Size 617.3 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
6a5ca41aab6b6f7f4385680d15afdca7f9845c0ab6122df9a849a15c103e2e1b
BLAKE2b-256 checksum
How to use checksums
4b5586b07b9a3128f32258590263fc5ffd28256b60cf56d2d5c7c3f1169312b2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

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

PyPI Publish Attestation

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

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / geoveil_mp-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL geoveil_mp-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 679.0 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
7cef7aad40c142eee7557fd168ef3d41086a7ffe149e1cf1c8258b679e652186
BLAKE2b-256 checksum
How to use checksums
e8b9b8405ab8ef9386a5126ee978026e3828c2a20d965cc0dacd2b438cab5335
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

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

PyPI Publish Attestation

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

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / geoveil_mp-1.0.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL geoveil_mp-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
Size 624.3 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
3b0d5084d24b72a966ea0d00913e2bc0e589d8477e20b12d52e672f4a4f218a1
BLAKE2b-256 checksum
How to use checksums
423fbf1283c0fc163de6ac59355d003f2035813c2600b6c2521a822bb0d48cb3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

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

PyPI Publish Attestation

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

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / geoveil_mp-1.0.0-cp311-cp311-win_amd64.whl

Download URL geoveil_mp-1.0.0-cp311-cp311-win_amd64.whl
Size 616.2 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
249af5710aeb9d749102a55adb64edbb5675cf24672b5ad690063bad11a81ed6
BLAKE2b-256 checksum
How to use checksums
40ef4bace45eb20dfeed99a0dff81d880ce85015cd2e6fa512b058444bbd9493
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

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

PyPI Publish Attestation

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

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / geoveil_mp-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL geoveil_mp-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 677.5 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
3358227cd69b8b0c5ba4c7a4e7894d25edb8cd22a6fe00509f70102d82baac23
BLAKE2b-256 checksum
How to use checksums
f304c9c891d89f804d538f9f5cd620a5f1eaa744f4af06549868486f70d57902
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

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

PyPI Publish Attestation

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

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / geoveil_mp-1.0.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL geoveil_mp-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
Size 624.6 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d602cc82ddd87b7b6215855f85e0d1cf64804e4b4f1bdb64c7f4d49f164351da
BLAKE2b-256 checksum
How to use checksums
71100c3fe0d9b8627914c5a2caae8388deedd7b2e80478baefcfbd2c517cbdba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

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

PyPI Publish Attestation

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

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / geoveil_mp-1.0.0-cp310-cp310-win_amd64.whl

Download URL geoveil_mp-1.0.0-cp310-cp310-win_amd64.whl
Size 616.3 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
9f233c2404468f99b0e04388fb89f4f31b53e92a85232e4bc9c916625e5ae52c
BLAKE2b-256 checksum
How to use checksums
57fd2b6e9a95cf774d5cc58724291d6ad8a5485a0de12722077b6c28d5c5f2d4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

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

PyPI Publish Attestation

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

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / geoveil_mp-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL geoveil_mp-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 677.8 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
6d5c5422bdbd717010e6103df0783a310de566a54ca18cd18f97782eb4c7988a
BLAKE2b-256 checksum
How to use checksums
666f92e4608fddbaca7a4605bbe18ea793b15eb11dad0ff6e5cf3e266d682507
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

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

PyPI Publish Attestation

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

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / geoveil_mp-1.0.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL geoveil_mp-1.0.0-cp310-cp310-macosx_11_0_arm64.whl
Size 624.7 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
a84690f5be5fbb67ebec859ae479e34fc654a069c1f450a9fbd72c39aad2dca5
BLAKE2b-256 checksum
How to use checksums
01fef59b7cf43df10b54a0196e742096fa4a76d6656566e150e5c043dfdc23c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

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

PyPI Publish Attestation

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

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / geoveil_mp-1.0.0-cp39-cp39-win_amd64.whl

Download URL geoveil_mp-1.0.0-cp39-cp39-win_amd64.whl
Size 617.3 kB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
edce0fa63ccff3a62dd4a060568e7aa1a7a4b16b72be7f632984d3995182aa64
BLAKE2b-256 checksum
How to use checksums
e32f3996a0cdd310aeabfbed286cfced1c4d5ad89ffdee5063bd73f6289b91a1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

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

PyPI Publish Attestation

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

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / geoveil_mp-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL geoveil_mp-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 678.6 kB
Tags CPython 3.9 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
d4316c2c67dcf8602380e473a59fe49410557b4975abf9860056b93692ef8eb6
BLAKE2b-256 checksum
How to use checksums
e48448e2a26da77a8769469bcf4666e83ac09f227c407972c51e50a6b4593c59
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

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

PyPI Publish Attestation

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

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / geoveil_mp-1.0.0-cp39-cp39-macosx_11_0_arm64.whl

Download URL geoveil_mp-1.0.0-cp39-cp39-macosx_11_0_arm64.whl
Size 625.6 kB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
aded8986fadb3bfbad6ac61d439982d511a055b0478f70579f27f26e4cb94e7d
BLAKE2b-256 checksum
How to use checksums
8cbe15710b11cf9002c4877e50726c7bd5623cc248fbcf61de34a8bba6a1faee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

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

PyPI Publish Attestation

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

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release history Release notifications | RSS feed

1.0.1

13 release files

This release

1.0.0 This release

13 release files

0.1.1

13 release files

0.1.0

14 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