Skip to main content

A Python package for GNSS RINEX file reading and total electron content (TEC) calculation with Rust-accelerated performance.

Project description

PyGNSS-TEC

PyPI - Version Supported Python Versions Codacy Badge License Test

PyGNSS-TEC is a high-performance Python package leveraging Rust acceleration, designed for processing and analyzing Total Electron Content (TEC) data derived from Global Navigation Satellite System (GNSS) observations. The package provides tools for RINEX file reading, TEC calculation, and DCB correction to support ionospheric studies.

Warning: This package is under active development and may undergo significant changes. It is not recommended for production use until it reaches a stable release (v1.0.0).

Features

  • RINEX File Reading: Efficient reading and parsing of RINEX GNSS observation files using rinex crate (see benchmarks for details).

  • Multiple File Formats: Support for RINEX versions 2.x and 3.x., as well as Hatanaka compressed files (e.g., .Z, .crx, .crx.gz).

  • TEC Calculation: Efficiently compute TEC from dual-frequency GNSS observations using polars DataFrames and lazy evaluation (see benchmarks for details).

  • Multi-GNSS Support: Process observations from multiple GNSS constellations (see Overview for constellation support).

  • Open-Source: Fully open-source under the MIT License, encouraging community contributions and collaboration.

Installation

Via pip

You can install PyGNSS-TEC via pip:

pip install pygnss-tec

Via uv (recommended)

uv is a modern Python package and project manager written in Rust. You can add PyGNSS-TEC to your uv project with:

uv add pygnss-tec

From Source

Building from source requires Rust and Cargo to be installed. Once you have both, run:

git clone https://github.com/Eureka-0/pygnss-tec.git
cd pygnss-tec
uv run maturin build --release

# Or enable custom memory allocator feature, which can improve performance in some scenarios (~10%) but may increase memory usage
uv run maturin build --release --features custom-alloc

The built package will be available in the target/wheels directory. You can then install it to your Python environment or uv project with:

# Using pip
pip install target/wheels/pygnss_tec-*.whl

# Or using uv
uv pip install target/wheels/pygnss_tec-*.whl

Usage

Overview

The following table summarizes the support for different GNSS constellations in PyGNSS-TEC:

Constellation RINEX Reading TEC Calculation
GPS (G) Yes Yes
Beidou (C) Yes Yes
Galileo (E) Yes No
GLONASS (R) Yes No
QZSS (J) Yes No
IRNSS (I) Yes No
SBAS (S) Yes No

RINEX file reading

Read a RINEX observation file (supports RINEX v2.x, v3.x, and Hatanaka compressed files):

import gnss_tec as gt

header, lf = gt.read_rinex_obs("./data/rinex_obs_v3/CIBG00IDN_R_20240100000_01D_30S_MO.crx.gz")

# You can read multiple files from the same station by passing a list of file paths
# header, lf = gt.read_rinex_obs(["./data/file1.crx.gz", "./data/file2.crx.gz"])

# header is a dataclass containing RINEX file header information
print(header)
# RinexObsHeader(
#     version='3.04',
#     constellation='MIXED',
#     marker_name='CIBG',
#     marker_type='GEODETIC',
#     rx_ecef=(-1837003.1909, 6065631.1631, -716184.055),
#     rx_geodetic=(-6.490367937958374, 106.84916836419953, 173.0000212144293),
#     sampling_interval=30,
#     leap_seconds=18,
# )

# lf is a polars LazyFrame, you can collect it to get a DataFrame.
# By default, time is in UTC timezone. You can keep it in GPS time by passing `utc=False` to `read_rinex_obs`.
print(lf.collect())
# shape: (180_027, 71)
# ┌─────────────────────────┬─────────┬─────┬──────────┬──────────┬──────┬──────┬──────────┬───┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐
# │ time                    ┆ station ┆ prn ┆ C1C      ┆ C1P      ┆ C1X  ┆ C1Z  ┆ C2C      ┆ … ┆ S5X  ┆ S6I  ┆ S6X  ┆ S7D  ┆ S7I  ┆ S7X  ┆ S8X  │
# │ ---                     ┆ ---     ┆ --- ┆ ---      ┆ ---      ┆ ---  ┆ ---  ┆ ---      ┆   ┆ ---  ┆ ---  ┆ ---  ┆ ---  ┆ ---  ┆ ---  ┆ ---  │
# │ datetime[ms, UTC]       ┆ cat     ┆ cat ┆ f64      ┆ f64      ┆ f64  ┆ f64  ┆ f64      ┆   ┆ f64  ┆ f64  ┆ f64  ┆ f64  ┆ f64  ┆ f64  ┆ f64  │
# ╞═════════════════════════╪═════════╪═════╪══════════╪══════════╪══════╪══════╪══════════╪═══╪══════╪══════╪══════╪══════╪══════╪══════╪══════╡
# │ 2024-01-09 23:59:42 UTC ┆ CIBG    ┆ C01 ┆ null     ┆ null     ┆ null ┆ null ┆ null     ┆ … ┆ null ┆ 42.9 ┆ null ┆ null ┆ 44.1 ┆ null ┆ null │
# │ 2024-01-09 23:59:42 UTC ┆ CIBG    ┆ C02 ┆ null     ┆ null     ┆ null ┆ null ┆ null     ┆ … ┆ null ┆ 43.0 ┆ null ┆ null ┆ 46.2 ┆ null ┆ null │
# │ 2024-01-09 23:59:42 UTC ┆ CIBG    ┆ C03 ┆ null     ┆ null     ┆ null ┆ null ┆ null     ┆ … ┆ null ┆ 44.5 ┆ null ┆ null ┆ 46.3 ┆ null ┆ null │
# │ 2024-01-09 23:59:42 UTC ┆ CIBG    ┆ C04 ┆ null     ┆ null     ┆ null ┆ null ┆ null     ┆ … ┆ null ┆ 39.9 ┆ null ┆ null ┆ 42.1 ┆ null ┆ null │
# │ 2024-01-09 23:59:42 UTC ┆ CIBG    ┆ C05 ┆ null     ┆ null     ┆ null ┆ null ┆ null     ┆ … ┆ null ┆ 41.1 ┆ null ┆ null ┆ 41.3 ┆ null ┆ null │
# │ …                       ┆ …       ┆ …   ┆ …        ┆ …        ┆ …    ┆ …    ┆ …        ┆ … ┆ …    ┆ …    ┆ …    ┆ …    ┆ …    ┆ …    ┆ …    │
# │ 2024-01-10 23:59:12 UTC ┆ CIBG    ┆ R16 ┆ 2.2936e7 ┆ 2.2936e7 ┆ null ┆ null ┆ 2.2936e7 ┆ … ┆ null ┆ null ┆ null ┆ null ┆ null ┆ null ┆ null │
# │ 2024-01-10 23:59:12 UTC ┆ CIBG    ┆ R21 ┆ 2.1521e7 ┆ 2.1521e7 ┆ null ┆ null ┆ 2.1521e7 ┆ … ┆ null ┆ null ┆ null ┆ null ┆ null ┆ null ┆ null │
# │ 2024-01-10 23:59:12 UTC ┆ CIBG    ┆ R22 ┆ 2.3833e7 ┆ 2.3833e7 ┆ null ┆ null ┆ 2.3833e7 ┆ … ┆ null ┆ null ┆ null ┆ null ┆ null ┆ null ┆ null │
# │ 2024-01-10 23:59:12 UTC ┆ CIBG    ┆ S32 ┆ 3.6030e7 ┆ null     ┆ null ┆ null ┆ null     ┆ … ┆ null ┆ null ┆ null ┆ null ┆ null ┆ null ┆ null │
# │ 2024-01-10 23:59:12 UTC ┆ CIBG    ┆ S37 ┆ 3.6282e7 ┆ null     ┆ null ┆ null ┆ null     ┆ … ┆ null ┆ null ┆ null ┆ null ┆ null ┆ null ┆ null │
# └─────────────────────────┴─────────┴─────┴──────────┴──────────┴──────┴──────┴──────────┴───┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘

If both observation and navigation files are provided, satellite azimuth and elevation angles will be calculated and included in the returned LazyFrame:

header, lf = gt.read_rinex_obs(
    "./data/rinex_obs_v3/CIBG00IDN_R_20240100000_01D_30S_MO.crx.gz",
    "./data/rinex_nav_v3/BRDC00IGS_R_20240100000_01D_MN.rnx.gz"
)

TEC calculation

From RINEX files

Directly calculate from RINEX files using calc_tec_from_rinex function:

tec_lf = gt.calc_tec_from_rinex(
    "./data/rinex_obs_v3/CIBG00IDN_R_20240100000_01D_30S_MO.crx.gz",
    "./data/rinex_nav_v3/BRDC00IGS_R_20240100000_01D_MN.rnx.gz",
    "./data/bias/CAS0OPSRAP_20240100000_01D_01D_DCB.BIA.gz",  # Optional DCB file, can be omitted if DCB correction is not needed
)

print(tec_lf.collect())
# shape: (50_147, 12)
# ┌─────────────────────────┬─────────┬─────┬───────────┬────────────┬─────────┬─────────┬───────────┬────────────┬─────────────┬────────────────────┬───────────┐
# │ time                    ┆ station ┆ prn ┆ rx_lat    ┆ rx_lon     ┆ C1_code ┆ C2_code ┆ ipp_lat   ┆ ipp_lon    ┆ stec        ┆ stec_dcb_corrected ┆ vtec      │
# │ ---                     ┆ ---     ┆ --- ┆ ---       ┆ ---        ┆ ---     ┆ ---     ┆ ---       ┆ ---        ┆ ---         ┆ ---                ┆ ---       │
# │ datetime[ms, UTC]       ┆ cat     ┆ cat ┆ f32       ┆ f32        ┆ cat     ┆ cat     ┆ f32       ┆ f32        ┆ f64         ┆ f64                ┆ f64       │
# ╞═════════════════════════╪═════════╪═════╪═══════════╪════════════╪═════════╪═════════╪═══════════╪════════════╪═════════════╪════════════════════╪═══════════╡
# │ 2024-01-09 23:59:42 UTC ┆ CIBG    ┆ C01 ┆ -6.490368 ┆ 106.849167 ┆ C2I     ┆ C6I     ┆ -6.021448 ┆ 110.041397 ┆ -65.178132  ┆ 37.369112          ┆ 28.186231 │
# │ 2024-01-09 23:59:42 UTC ┆ CIBG    ┆ C02 ┆ -6.490368 ┆ 106.849167 ┆ C2I     ┆ C6I     ┆ -5.874807 ┆ 105.12574  ┆ -92.766855  ┆ 30.478708          ┆ 27.233229 │
# │ 2024-01-09 23:59:42 UTC ┆ CIBG    ┆ C03 ┆ -6.490368 ┆ 106.849167 ┆ C2I     ┆ C6I     ┆ -5.987422 ┆ 107.10218  ┆ -99.906077  ┆ 27.888606          ┆ 27.553764 │
# │ 2024-01-09 23:59:42 UTC ┆ CIBG    ┆ C05 ┆ -6.490368 ┆ 106.849167 ┆ C2I     ┆ C6I     ┆ -5.77573  ┆ 102.127449 ┆ -80.838063  ┆ 37.301633          ┆ 23.284567 │
# │ 2024-01-09 23:59:42 UTC ┆ CIBG    ┆ C06 ┆ -6.490368 ┆ 106.849167 ┆ C2I     ┆ C6I     ┆ -2.625823 ┆ 105.790565 ┆ -117.679878 ┆ 30.499514          ┆ 20.802594 │
# │ …                       ┆ …       ┆ …   ┆ …         ┆ …          ┆ …       ┆ …       ┆ …         ┆ …          ┆ …           ┆ …                  ┆ …         │
# │ 2024-01-10 23:59:12 UTC ┆ CIBG    ┆ G18 ┆ -6.490368 ┆ 106.849167 ┆ C1C     ┆ C2W     ┆ -9.357401 ┆ 107.007019 ┆ 74.830984   ┆ 23.49472           ┆ 18.498105 │
# │ 2024-01-10 23:59:12 UTC ┆ CIBG    ┆ G23 ┆ -6.490368 ┆ 106.849167 ┆ C1C     ┆ C2W     ┆ -5.178424 ┆ 108.647789 ┆ 76.563659   ┆ 25.358676          ┆ 21.648637 │
# │ 2024-01-10 23:59:12 UTC ┆ CIBG    ┆ G25 ┆ -6.490368 ┆ 106.849167 ┆ C1C     ┆ C2W     ┆ -5.254835 ┆ 109.935173 ┆ 110.055906  ┆ 37.104073          ┆ 27.626465 │
# │ 2024-01-10 23:59:12 UTC ┆ CIBG    ┆ G28 ┆ -6.490368 ┆ 106.849167 ┆ C1C     ┆ C2W     ┆ -5.297853 ┆ 104.2929   ┆ 72.823386   ┆ 23.382123          ┆ 18.556846 │
# │ 2024-01-10 23:59:12 UTC ┆ CIBG    ┆ G31 ┆ -6.490368 ┆ 106.849167 ┆ C1C     ┆ C2W     ┆ -7.392913 ┆ 102.960022 ┆ 73.01637    ┆ 30.59289           ┆ 20.97296  │
# └─────────────────────────┴─────────┴─────┴───────────┴────────────┴─────────┴─────────┴───────────┴────────────┴─────────────┴────────────────────┴───────────┘

From DataFrame or LazyFrame

If you wish to calculate TEC from an existing polars DataFrame or LazyFrame (e.g., after some custom preprocessing), you can use the calc_tec_from_df function:

header, lf = gt.read_rinex_obs(
    "./data/rinex_obs_v3/CIBG00IDN_R_20240100000_01D_30S_MO.crx.gz",
    "./data/rinex_nav_v3/BRDC00IGS_R_20240100000_01D_MN.rnx.gz"
)

# ...
# Perform any custom preprocessing on lf if needed
# ...

tec_lf = gt.calc_tec_from_df(lf, header, "./data/bias/CAS0OPSRAP_20240100000_01D_01D_DCB.BIA.gz")

From parquet file

Reading RINEX files is time-consuming, accounting for at least 90% of the total calculation time. Thus, if you need to perform TEC calculation multiple times on the same RINEX files (e.g., when tuning configuration), it is recommended to save the parsed LazyFrame to a parquet file after the first read, and then use calc_tec_from_parquet for subsequent TEC calculations:

header, lf = gt.read_rinex_obs(
    "./data/rinex_obs_v3/CIBG00IDN_R_20240100000_01D_30S_MO.crx.gz",
    "./data/rinex_nav_v3/BRDC00IGS_R_20240100000_01D_MN.rnx.gz"
)

# ...
# Perform any custom preprocessing on lf if needed
# ...

# Note: Make sure to include header information when saving to parquet
lf.sink_parquet("./data/cibg_obs_2024010.parquet", metadata=header.to_metadata())

tec_lf = gt.calc_tec_from_parquet(
    "./data/cibg_obs_2024010.parquet",
    "./data/bias/CAS0OPSRAP_20240100000_01D_01D_DCB.BIA.gz"
)

Configuration

You can customize the TEC calculation process using the TECConfig dataclass:

# To see the default configuration
print(gt.TECConfig())
# TECConfig(
#     constellations='CG',
#     ipp_height=400,
#     min_elevation=30.0,
#     min_snr=30.0,
#     c1_codes={
#         '2': {
#             'G': ['C1']
#         },
#         '3': {
#             'C': ['C2I', 'C2D', 'C2X', 'C1I', 'C1D', 'C1X', 'C2W', 'C1C'],
#             'G': ['C1W', 'C1C', 'C1X']
#         },
#     },
#     c2_codes={
#         '2': {
#             'G': ['C2', 'C5']
#         },
#         '3': {
#             'C': ['C6I', 'C6D', 'C6X', 'C7I', 'C7D', 'C7X', 'C5I', 'C5D', 'C5X'],
#             'G': ['C2W', 'C2C', 'C2X', 'C5W', 'C5C', 'C5X']
#         },
#     },
#     rx_bias='external',
#     mapping_function='slm',
#     retain_intermediate=None
# )

The meaning of each parameter is as follows:

  • constellations: A string specifying which GNSS constellations to consider for TEC calculation. 'C' for Beidou, 'G' for GPS.
  • ipp_height: The assumed height of the ionospheric pierce point (IPP) in kilometers.
  • min_elevation: The minimum satellite elevation angle (in degrees) for observations to be considered in the TEC calculation.
  • min_snr: The minimum signal-to-noise ratio (in dB-Hz) for observations to be considered in the TEC calculation.
  • c1_codes: A dictionary specifying the preferred observation codes for the first frequency (C1) for each RINEX version and constellation. The codes are prioritized in the order they are listed, with the first available code being used. This parameter supports partial setting (e.g., c1_codes={'3': {'C': [...]} } to only set for Beidou in RINEX version 3, and use default for others).
  • c2_codes: A dictionary specifying the preferred observation codes for the second frequency (C2) for each RINEX version and constellation, similar to c1_codes.
  • rx_bias: Specifies how to handle receiver bias. It can be set to 'external' to use an external DCB file for correction, 'mstd' to use the minimum standard deviation method for estimation, 'lsq' to use least squares estimation, or None to skip receiver bias correction. Note that the receiver bias estimation is only applicable after the satellite bias has been corrected using an external DCB file (e.g., from IGS). If no external DCB file is provided, this parameter will be ignored. The 'mstd' and 'lsq' methods are for stations that are not included in the external DCB file.
  • mapping_function: The mapping function to use for converting slant TEC to vertical TEC. It can be set to 'slm' for the Single Layer Model or 'mslm' for the Modified Single Layer Model.
  • retain_intermediate: Names of intermediate columns to retain in the output DataFrame. It can be set to None to discard all intermediate columns, 'all' to retain all intermediate columns, or a list of column names to keep specific ones.

Benchmarks (on M2 Pro 12-Core CPU)

Task Time (s)
Read RINEX v2 (3.65 MB) 0.1362
Read RINEX v3 (14.02 MB) 0.7397
Read RINEX v3 (6.05 MB Hatanaka-compressed) 1.2468
Read RINEX v3 (2.34 MB Hatanaka-compressed) 0.5653
Calculate TEC from RINEX v2 (3.65 MB) 0.1457
Calculate TEC from RINEX v3 (14.02 MB) 0.7532
Calculate TEC from RINEX v3 (6.05 MB Hatanaka-compressed) 1.3067
Calculate TEC from RINEX v3 (2.34 MB Hatanaka-compressed) 0.5908

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

pygnss_tec-0.4.1.tar.gz (28.9 MB view details)

Uploaded Source

Built Distributions

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

pygnss_tec-0.4.1-cp314-cp314t-win_amd64.whl (566.8 kB view details)

Uploaded CPython 3.14tWindows x86-64

pygnss_tec-0.4.1-cp314-cp314t-win32.whl (576.4 kB view details)

Uploaded CPython 3.14tWindows x86

pygnss_tec-0.4.1-cp314-cp314t-manylinux_2_28_x86_64.whl (683.9 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64

pygnss_tec-0.4.1-cp314-cp314t-manylinux_2_28_i686.whl (754.1 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ i686

pygnss_tec-0.4.1-cp314-cp314t-manylinux_2_28_armv7l.whl (708.8 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARMv7l

pygnss_tec-0.4.1-cp314-cp314t-manylinux_2_28_aarch64.whl (653.7 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

pygnss_tec-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl (604.5 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

pygnss_tec-0.4.1-cp314-cp314t-macosx_10_12_x86_64.whl (640.9 kB view details)

Uploaded CPython 3.14tmacOS 10.12+ x86-64

pygnss_tec-0.4.1-cp310-abi3-win_amd64.whl (569.2 kB view details)

Uploaded CPython 3.10+Windows x86-64

pygnss_tec-0.4.1-cp310-abi3-win32.whl (578.3 kB view details)

Uploaded CPython 3.10+Windows x86

pygnss_tec-0.4.1-cp310-abi3-manylinux_2_28_x86_64.whl (686.5 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64

pygnss_tec-0.4.1-cp310-abi3-manylinux_2_28_i686.whl (757.3 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ i686

pygnss_tec-0.4.1-cp310-abi3-manylinux_2_28_armv7l.whl (711.4 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARMv7l

pygnss_tec-0.4.1-cp310-abi3-manylinux_2_28_aarch64.whl (656.6 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

pygnss_tec-0.4.1-cp310-abi3-macosx_11_0_arm64.whl (606.6 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

pygnss_tec-0.4.1-cp310-abi3-macosx_10_12_x86_64.whl (642.7 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file pygnss_tec-0.4.1.tar.gz.

File metadata

  • Download URL: pygnss_tec-0.4.1.tar.gz
  • Upload date:
  • Size: 28.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.1

File hashes

Hashes for pygnss_tec-0.4.1.tar.gz
Algorithm Hash digest
SHA256 e55977a69ccbbe93075c8346de360cf216cc796d0d1852234d585227e3f875ac
MD5 94e5fafef2bb10543e03a7cff610db45
BLAKE2b-256 857d6312d07efe415a1e8fcde73e273495a9001fe0f5a8a0b92cf71b57ac9e6a

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for pygnss_tec-0.4.1-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 e439509e7a572ae11187962128f51e0b478c8caa731069b67b5a2bd853612f54
MD5 ebd126ee3f3be106b1bfb5aaedee0549
BLAKE2b-256 2f32036dfa838bd850ece46a344c6f4bda91b234ed346a8f550d4cdb8cbafe86

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp314-cp314t-win32.whl.

File metadata

  • Download URL: pygnss_tec-0.4.1-cp314-cp314t-win32.whl
  • Upload date:
  • Size: 576.4 kB
  • Tags: CPython 3.14t, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.1

File hashes

Hashes for pygnss_tec-0.4.1-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 eab74fd4e08349f48debe8ddf3eea7889d4ff4bc59e37ee8d054b1531e831c12
MD5 e373fda830dfd42a4b62d6371814f1bb
BLAKE2b-256 a40d6d009ddcc1c56a73fbcdbb07e109c81815e83869024fe38e32eccc2d39df

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp314-cp314t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pygnss_tec-0.4.1-cp314-cp314t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 39aed0b21cd37f31b5c123dbea19db6d280828aa937972194fbfbdca7cc83b41
MD5 824708e3acf7a8c145b032e2abb31aea
BLAKE2b-256 b7534ab634d108c7b0f54451eb6dea46807c98ff528389fc52812359a1f85d38

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp314-cp314t-manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for pygnss_tec-0.4.1-cp314-cp314t-manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 da93105976530ad0dce36ec2cd7ab785a8256191391e2fb9a3a92b26e7a9dc76
MD5 98c7823d4f3b911e69ed483231db294a
BLAKE2b-256 95b3d357b4ef49c5f5d94f4aaede16ae18c2f7e2a1aef4a307faea7452a364a1

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp314-cp314t-manylinux_2_28_armv7l.whl.

File metadata

File hashes

Hashes for pygnss_tec-0.4.1-cp314-cp314t-manylinux_2_28_armv7l.whl
Algorithm Hash digest
SHA256 1ad804f0ee8b662b320bf8ed827ad3b5a2b2fb6bf85865e4758c1fe3b80686c6
MD5 aacfafd966b91926fb27a33f8adcde24
BLAKE2b-256 9e49eff5c176cece56a86ee388c08a7294411c216f1d8a8ae9eb56c3b79f900b

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp314-cp314t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pygnss_tec-0.4.1-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 51e919b342a05bcb2eb5adccb3c2fc0427b4b103485b47b3a2347a47d91dcd7c
MD5 6dd48bb7ea3a0e595b4bcab0a763953e
BLAKE2b-256 ff4ac3d694fa8697acf50fac74c6f866e7b9765d295afc86aaace159c3e0233c

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pygnss_tec-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b6e7c1acadb5cb33745128eea260a056352ad0485408539c0d6ab34ea4f39965
MD5 265c053fbe1539863637c751b5015d82
BLAKE2b-256 553e51c2c7c51857065f54af74d95a143581c376bc90971903f409f55517c3b9

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp314-cp314t-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pygnss_tec-0.4.1-cp314-cp314t-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ac89ed77cdc675ac8db6be641ff393533ef61c242bcc806acd550c32cbf0ee7e
MD5 7a0dbd84bca60f9aaf68c13371ff7b7c
BLAKE2b-256 23740b1cb72956a4ad36dfc4bbfbf0fea5c871505d450e869ac8ddc3ef664fe9

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for pygnss_tec-0.4.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 998e66be19693daafe5178d6d0710c7ce5a27e25ecab67716a7cd62f34a96ec4
MD5 4900106ee1788ec068802f4b2a9340d7
BLAKE2b-256 3a63093cc38c62bd3159ca44deecb640a25a2e33d0f946aa06bd34be75cc88b4

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp310-abi3-win32.whl.

File metadata

  • Download URL: pygnss_tec-0.4.1-cp310-abi3-win32.whl
  • Upload date:
  • Size: 578.3 kB
  • Tags: CPython 3.10+, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.1

File hashes

Hashes for pygnss_tec-0.4.1-cp310-abi3-win32.whl
Algorithm Hash digest
SHA256 c2e4546a40343a3ad8639252b75622a6ae666b50c515ed5fca9c4e423138bd03
MD5 4ffbdd628dd989695f7030c9f80d6fc1
BLAKE2b-256 75ce1aed27e06eb2453ddd2c2b284a38dfab61d07c429dfafb91f42f30c2f438

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pygnss_tec-0.4.1-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 01bbe58135c2fd2ec537c662e2bc2ed914aabf539b2a9548796f2f96d83efe0a
MD5 f34fb567d859889804b67943893fb762
BLAKE2b-256 d979c75774c78ecd1a3431b7e650cfef11d0fdc584dd6f0de3812a692a6ceeca

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp310-abi3-manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for pygnss_tec-0.4.1-cp310-abi3-manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 dceb5b957f1c911c92de22c7d7c8af3d6a9c4d0bc8d9781c77e33c7f8ed7a69a
MD5 46c68086768931333c3a214e501774a4
BLAKE2b-256 8207eddaeb3f1bdcc5e0ac641753b3d5de708edc86df72c10b4e36645a1da6be

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp310-abi3-manylinux_2_28_armv7l.whl.

File metadata

File hashes

Hashes for pygnss_tec-0.4.1-cp310-abi3-manylinux_2_28_armv7l.whl
Algorithm Hash digest
SHA256 ea1b72a542c95e947892f34ff88927a51f5c572421abcaa53fea00788bc80507
MD5 27283b2ef26f5ca8ba2cd55beda84dcb
BLAKE2b-256 9639c8e82b99a2082eef1416c5b1e237470aba2310ec707308e103434952b6bf

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pygnss_tec-0.4.1-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 39158c20367ca8e25151e6aa7902e33497f29b1ea116c15b52f8035dc144c4ea
MD5 667e56ca5d9a367e4b9df9e28b3959a1
BLAKE2b-256 3f44249e0b662d8c10de7479cc4397c7db1edb3876f3df54bb89f0315536609a

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pygnss_tec-0.4.1-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bc56967130e480800a6dda53cff36991a7827f9ed958a2d1b6114b80b8a3cc04
MD5 2424b9bb0b0b95041f9eafa85a9716d9
BLAKE2b-256 3ec04b568dd27b5049b8c17cbe4045f961656325efe527e22c7a156862ccda7c

See more details on using hashes here.

File details

Details for the file pygnss_tec-0.4.1-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pygnss_tec-0.4.1-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5d292ac88ebdd01f138038548467f04e8089f7da8e989d25836f892646edfacc
MD5 633bbc35eb5ed86598050d68d2861f73
BLAKE2b-256 b3b840dc66cfd12792494dab098f2f9299cee0a12c1285e56da71c8bdbcd1125

See more details on using hashes here.

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