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.1},
  url     = {https://github.com/miluta7/geoveil-mp},
  license = {PolyForm-Noncommercial-1.0.0}
}

Metadata

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

Built distributions (wheels)

Table of built distributions (wheels) for geoveil-mp 1.0.1
File
geoveil_mp-1.0.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
geoveil_mp-1.0.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
geoveil_mp-1.0.1-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
geoveil_mp-1.0.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
geoveil_mp-1.0.1-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.1-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
geoveil_mp-1.0.1-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
geoveil_mp-1.0.1-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.1-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
geoveil_mp-1.0.1-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
geoveil_mp-1.0.1-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.1-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.1.tar.gz

Download URL geoveil_mp-1.0.1.tar.gz
Size 641.1 kB
Tags Source
SHA-256 checksum
How to use checksums
265bc4be19cb26db2d2a6811415a22a0472326ddaec3972cc1114b7841f6925f
BLAKE2b-256 checksum
How to use checksums
93221d111d2d42336d65d5351d8c9ec75acd54e5b6786dbe35f6431324e1bde2
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.1-cp312-cp312-win_amd64.whl

Download URL geoveil_mp-1.0.1-cp312-cp312-win_amd64.whl
Size 617.3 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
fe8e362f15f172cfedb8730ad817927ee249af4a653c69a02558558d0ea48949
BLAKE2b-256 checksum
How to use checksums
8ee19a4c0186f2d62b9c4d91bea1603934846e4f96e49b8315d8254e493a5832
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.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL geoveil_mp-1.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 678.7 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
70343557a5d472e279f6030f5216b95955354c8111663836c58a85c37f2a4107
BLAKE2b-256 checksum
How to use checksums
a6b240b8b5e98591058e0cb44bc33734fedf9fb3613db53bd402dca07ac74532
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.1-cp312-cp312-macosx_11_0_arm64.whl

Download URL geoveil_mp-1.0.1-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
fef37cf07d9fb9bb17947545d443645ffa8240b8296636984cb06d0ce46375c4
BLAKE2b-256 checksum
How to use checksums
6a4fc59aa1c89abf26d281b2826a1c4eb3b8b33443a60047ce6460a2d6a044c9
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.1-cp311-cp311-win_amd64.whl

Download URL geoveil_mp-1.0.1-cp311-cp311-win_amd64.whl
Size 616.3 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
0acdf333481e7cb5094204968cfe2b3b630bbe3bf932e8aca2e80ce29e133aac
BLAKE2b-256 checksum
How to use checksums
f82b252062b9c0ca5bb3680e6cd2996b23c018fe9c9697657c0c1163e2cd61e7
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.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL geoveil_mp-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 677.4 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
3705c63ec10c3519f9b4309e946030a9a3d950012d4a98579fb8ac4b4c0fc560
BLAKE2b-256 checksum
How to use checksums
f126aa9aea9fd39220f63ae3ad514988c005367390982679feb331c6dca3939c
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.1-cp311-cp311-macosx_11_0_arm64.whl

Download URL geoveil_mp-1.0.1-cp311-cp311-macosx_11_0_arm64.whl
Size 624.5 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
65f4b227e3f1668b8f0e319acc2798b341e0d9f65cd943f27880d5ae48f52e90
BLAKE2b-256 checksum
How to use checksums
e004affad3929f4a054db04e9e898b055c5b91389c5330a2a285c9286443940b
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.1-cp310-cp310-win_amd64.whl

Download URL geoveil_mp-1.0.1-cp310-cp310-win_amd64.whl
Size 616.5 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
16cdbd4a644995b8ca71396379d15b5d1a2efead021597a24d527997588028fc
BLAKE2b-256 checksum
How to use checksums
05d60c10dfd485373df4c13053bbab0b234c7bac727d2cd462fddff827e2a580
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.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL geoveil_mp-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 677.6 kB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
d2a9c37e0cacd16b005feefc4a1bf19cba214b82132481cf5cf24cdafdacebd3
BLAKE2b-256 checksum
How to use checksums
98e59f64177038fb05ee522630b87b11912c5aa16c0b8e327a1a9d6ec18875fb
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.1-cp310-cp310-macosx_11_0_arm64.whl

Download URL geoveil_mp-1.0.1-cp310-cp310-macosx_11_0_arm64.whl
Size 624.6 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d6ee01f047f39f39efb541ee23edcb57b35d938776358390fa4c5f37e2c815e1
BLAKE2b-256 checksum
How to use checksums
4c8505cea29e2db9e1ff49e2c3ee5390e2fed1e31afb1fbf2c679002b669ebc3
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.1-cp39-cp39-win_amd64.whl

Download URL geoveil_mp-1.0.1-cp39-cp39-win_amd64.whl
Size 617.4 kB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
5e22d55c179dd698ff1392d428ee83cea2e69e356a765874cf7545375db3d889
BLAKE2b-256 checksum
How to use checksums
2ba47ab3f7b9bd0ca0bb163ceddaed953e9c7208869b4c4ea8042b718802707d
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.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL geoveil_mp-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 678.4 kB
Tags CPython 3.9 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
1b4f015f3bdefde1ab48ecfb37d0da8209a3ec949962998a1d400f728cfa017b
BLAKE2b-256 checksum
How to use checksums
41b7e749be5c905dda0d7a8c86bff1106326344560e8069027c1c898b4e70820
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.1-cp39-cp39-macosx_11_0_arm64.whl

Download URL geoveil_mp-1.0.1-cp39-cp39-macosx_11_0_arm64.whl
Size 625.5 kB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
177c6862fa88b1909a6148e18410bd461b87ee7c89271fd2ddd636a1e63338c1
BLAKE2b-256 checksum
How to use checksums
832af95beb62cdae44ba1148f66b1bda92ec62c667b96162731d20d64a71a7c3
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

This release

1.0.1 This release

13 release files

1.0.0

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