Skip to main content

Refraction Index

CI License: MIT + NRL non-commercial Python 3.10+ C++20

Refractive index computation and 3D ray tracing for atmospheric and ocean media on the WGS-84 ellipsoid.

Decades of research have produced accurate refraction models for the atmosphere (Ciddor 1996, ITU-R P.453, NRLMSIS 2.1) and ocean (Millard & Seaver 1990, Meissner & Wentz 2004, Del Grosso 1974), but no modern, readily available library brings them together in a form that engineers and scientists can use directly. This project fills that gap: a single library that computes refractive index profiles, traces rays through the real Earth geometry (WGS-84 ellipsoid), and provides the derivatives needed for inversion and uncertainty analysis — all with cross-validated Python and C++ implementations.

Features

Atmospheric refraction (surface to 122 km)

  • Optical mode (Ciddor 1996, 300–1700 nm) and radio mode (ITU-R P.453-14)
  • Species-sum approach: n − 1 = Σ nᵢ × Kᵢ(λ) using NRLMSIS 2.1 (non-commercial license, see License)
  • Surface anchoring to weather observations via temperature offset and density scaling

Ocean refraction (surface to 11 km depth)

  • Radio: Meissner & Wentz 2004/2012 (double-Debye permittivity)
  • Optical with pressure: Millard & Seaver 1990 (500–700 nm)
  • Optical surface: Quan & Fry 1995 (400–700 nm)
  • Pure water: IAPWS R9-97 (200–1100 nm)

Ocean sound speed

  • Del Grosso 1974 / Wong & Zhu 1995 (ITS-90, ±0.05 m/s)
  • Chen-Millero / UNESCO 1977 / Wong & Zhu 1995 (ITS-90)
  • Mackenzie 1981 (9-term, ±0.070 m/s)

3D ray tracing (eikonal equation from Fermat's Principle)

  • ECEF coordinates on WGS-84 ellipsoid — no flat-Earth approximation
  • Slowness momentum formulation — smooth through turning points, no sign tracking
  • Travel time as ODE state — stop at measured radio/sonar round-trip time
  • First and second derivatives (curvature, acceleration) from solver output
  • Travel-time derivatives (dr/dT, d²r/dT², dp/dT) for radar/sonar inversion
  • Sensitivity derivatives w.r.t. 5 initial-condition parameters (h₀, θ₀, α₀, φ₀, λ₀)
  • Batch tracing — trace thousands of rays; pure Python or C++ via nanobind

Three implementation tiers (same interface for Python and nanobind)

  • Pure Python — easy to use, full features including batch tracing
  • Header-only C++20 — fast, for integration into C++ applications
  • Native Python (nanobind) — C++ speed from Python, same API as pure Python

Installation

Python

pip install earth-refraction

The package is imported as refraction. Prebuilt wheels include the C++ native extension.

To build from source (requires CMake 3.20+ and a C++20 compiler; scikit-build-core and nanobind are fetched automatically):

git clone https://github.com/nvhuynh16/earth_refraction.git
cd earth_refraction
pip install .

For development (editable install with test dependencies):

pip install -e ".[dev]"

C++ (header-only, no installation needed)

#include <refraction/ray_trace.hpp>   // ray tracing
#include <refraction/profile.hpp>     // atmospheric profiles
#include <refraction/geodetic.hpp>    // WGS-84 geodetic utilities

Quick Start

Atmospheric refraction

from refraction import AtmosphericConditions, RefractionProfile, Mode

atm = AtmosphericConditions(day_of_year=172, latitude_deg=45.0)

# Use the model directly (NRLMSIS prediction, no anchoring).
# NRLMSIS has no water vapor, so this profile is dry air only.
profile = RefractionProfile(atm)

# Or anchor to surface weather observations for higher accuracy.
# The surface temperature offset fades out over temperature_taper_km
# (Gaussian scale, default 2 km); the pressure offset is carried upward
# hydrostatically.
from refraction import SurfaceObservation
obs = SurfaceObservation(altitude_km=0.0, temperature_C=15.0,
                         pressure_kPa=101.325, relative_humidity=0.5,
                         temperature_taper_km=2.0)
profile = RefractionProfile(atm, obs)

result = profile.compute(10.0, Mode.Ciddor, wavelength_nm=633.0)
print(f"n = {result.n:.8f}, N = {result.N:.2f} N-units")

Ocean sound speed

from refraction.ocean import SoundSpeedProfile, SoundMode, OceanConditions

# From ocean conditions (temperature, salinity)
cond = OceanConditions(sst_C=25.0, sss_psu=35.0)
profile = SoundSpeedProfile(cond)
result = profile.compute(500.0, SoundMode.DelGrosso)  # 500 m depth
print(f"Sound speed = {result.sound_speed_m_s:.1f} m/s")

Ray tracing — atmospheric

from refraction import (
    EikonalTracer, EikonalInput, EikonalStopCondition, Mode,
    RefractionProfile, AtmosphericConditions,
)

profile = RefractionProfile(AtmosphericConditions(day_of_year=172, latitude_deg=45.0))
tracer = EikonalTracer.from_profile(profile, Mode.Ciddor)

inp = EikonalInput(lat_deg=45.0, lon_deg=0.0, h_m=0.0, elevation_deg=10.0, azimuth_deg=0.0)
stop = EikonalStopCondition(target_altitude_m=100_000.0)
result = tracer.trace(inp, stop)

print(f"Arc length: {result.s[-1]:.0f} m")
print(f"Travel time: {result.T[-1]*1e6:.1f} µs")
print(f"Bending: {result.bending_deg*60:.2f} arcmin")  # negative: ray exits shallower

Ray tracing — from measured sound velocity profile

from refraction import EikonalTracer, EikonalInput, EikonalStopCondition

# Measured SVP data (depth positive downward, speed in m/s)
depths = [0, 50, 100, 200, 500, 1000, 2000]
speeds = [1520, 1515, 1490, 1495, 1500, 1510, 1520]
tracer = EikonalTracer.from_depth_speed_table(depths, speeds)

inp = EikonalInput(lat_deg=30.0, lon_deg=-80.0, h_m=-10.0,
                   elevation_deg=-5.0, azimuth_deg=90.0)
stop = EikonalStopCondition(target_travel_time_s=0.5, detect_ground_hit=False)
result = tracer.trace(inp, stop)

Batch tracing

from refraction.native import NativeTracer, TableSpeedProfile
from refraction import BatchInput
import numpy as np

# From atmospheric speed table
h = np.linspace(0, 200_000, 2000)
v = 299_792_458.0 / (1.000315 * np.exp(-39e-9 * h))
tracer = NativeTracer.from_table(TableSpeedProfile(h, v))

# Or from measured SVP (depth positive downward)
# depths = [0, 50, 100, 500, 1000, 2000]
# speeds = [1520, 1515, 1490, 1500, 1510, 1520]
# tracer = NativeTracer.from_table(TableSpeedProfile.from_depth(depths, speeds))

# 1000 rays at different elevations, same travel time
inp = BatchInput(
    lat_deg=np.full(1000, 45.0),
    lon_deg=np.zeros(1000),
    h_m=np.zeros(1000),
    elevation_deg=np.linspace(1, 89, 1000),
    azimuth_deg=np.zeros(1000),
    travel_time_s=np.full(1000, 0.001),
)
result = tracer.trace_batch(inp)  # single C++ call → BatchResult (endpoint only)

print(f"Positions shape: {result.r.shape}")  # (1000, 3)
print(f"Velocities shape: {result.dr_dT.shape}")  # (1000, 3)

# Full ray paths (list of EikonalResult, one per ray)
full = tracer.trace_batch(inp, endpoint=False)
print(f"Ray 0 path length: {len(full[0].s)} steps")

Note: EikonalTracer also has trace_batch() with the same interface, just slower (Python loop internally). Use NativeTracer for performance.

C++ ray tracing

#include <refraction/ray_trace.hpp>

auto tracer = refraction::EikonalTracer{
    [](double h) { return 1500.0 + 0.017 * h; },  // v(h)
    [](double)   { return 0.017; },                 // v'(h)
};

refraction::EikonalInput inp{30.0, -80.0, -10.0, -5.0, 90.0};
refraction::EikonalStopCondition stop{.target_travel_time_s = 0.5};
auto result = tracer.trace(inp, stop);

Building and Testing

C++ tests

Requires CMake 3.20+ and a C++20 compiler (GCC 10+, Clang 10+, MSVC 19.29+):

cd cpp
cmake -B build
cmake --build build --config Release
ctest --test-dir build -C Release --output-on-failure

Python tests

pip install -e ".[dev]"
python -m pytest python/tests/ -q

Project Structure

cpp/
  include/refraction/          # Header-only C++20 library
    profile.hpp                # Atmospheric refraction profiles
    ray_trace.hpp              # Eikonal ray tracer + sensitivities
    ray_trace_batch.hpp        # Type-erased tracer + batch API
    geodetic.hpp               # WGS-84 coordinate utilities
    constants.hpp              # Physical constants + WGS-84 ellipsoid
    ocean/                     # Ocean refraction + sound speed
    atmosphere/                # NRLMSIS 2.1 model
  tests/                       # 17 test executables

python/
  src/refraction/
    ray_trace.py               # Eikonal tracer, BatchInput/Result, EikonalResult
    geodetic.py                # WGS-84 utilities
    native.py                  # Nanobind wrapper (NativeTracer, TableSpeedProfile)
    profile.py                 # Atmospheric profiles
    ocean/                     # Ocean refraction + sound speed
  nanobind/                    # C++ nanobind extension source
  tests/                       # 936 Python tests

docs/
  Ray Trace/                   # Derivation from Fermat's Principle (PDF)

Citation

If you use this library in your research, please cite:

@software{huynh2026refraction,
  author = {Huynh, Nen},
  title = {Refraction Index: Atmospheric and Ocean Refractive Index with 3D Ray Tracing},
  year = {2026},
  url = {https://github.com/nvhuynh16/earth_refraction},
  license = {MIT; NRLMSIS 2.1 component under NRL-SOF-014-1},
}

References

Atmospheric

  • Ciddor, P. E. (1996). "Refractive index of air: new equations for the visible and near infrared." Applied Optics, 35(9), 1566–1573.
  • ITU-R P.453-14 (2019). "The radio refractive index: its formula and refractivity data."
  • Emmert, J. T., et al. (2021). "NRLMSIS 2.0: A whole-atmosphere empirical model of temperature and neutral species densities." Earth and Space Science, 8(3), e2020EA001321.
  • Emmert, J. T., et al. (2022). "NRLMSIS 2.1: An empirical model of nitric oxide incorporated into MSIS." Journal of Geophysical Research: Space Physics, 127(10), e2022JA030896.

Ocean

  • Meissner, T. & Wentz, F. J. (2004/2012). "The complex dielectric constant of pure and sea water from microwave satellite observations." IEEE TGRS.
  • Millard, R. C. & Seaver, G. (1990). "An index of refraction algorithm for seawater over temperature, pressure, salinity, density, and wavelength." Deep-Sea Research, 37(12), 1909–1926.
  • Quan, X. & Fry, E. S. (1995). "Empirical equation for the index of refraction of seawater." Applied Optics, 34(18), 3477–3480.
  • IAPWS (1997). "Release on the Refractive Index of Ordinary Water Substance as a Function of Wavelength, Temperature and Pressure." R9-97.
  • Del Grosso, V. A. (1974). "New equation for the speed of sound in natural waters." JASA, 56(4), 1084–1091.
  • Chen, C.-T. & Millero, F. J. (1977). "Speed of sound in seawater at high pressures." JASA, 62(5), 1129–1135.
  • Mackenzie, K. V. (1981). "Nine-term equation for sound speed in the oceans." JASA, 70(3), 807–812.

Ray Tracing

  • Huynh, N. (2026). "Deriving Atmospheric and Acoustic Refraction from Fermat's Principle." (included in docs/Ray Trace/)

License

The library code is released under the MIT license © 2026 Nen Huynh, except the NRLMSIS 2.1 atmosphere model.

This software incorporates the MSIS® empirical atmospheric model software designed and provided by NRL. Use is governed by the Open Source Academic Research License Agreement contained in the file nrlmsis2.1_license.txt.

That agreement (NRL-SOF-014-1) authorizes use solely for research, academic and non-profit purposes; commercial use is prohibited. It applies to everything that uses the atmosphere model: RefractionProfile, from_profile tracers, and refraction.atmosphere. The ocean models, the ray tracer with your own speed profile or table, the geodetic utilities, and the direct Ciddor / ITU-R formulas do not use NRLMSIS. See THIRD_PARTY_NOTICES.md for details.

Metadata

Release files for earth-refraction 0.1.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 earth-refraction 0.1.1
File Size Uploaded Provenance Actions
earth_refraction-0.1.1.tar.gz 283.3 kB With provenance Details for earth_refraction-0.1.1.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for earth-refraction 0.1.1
File Actions
earth_refraction-0.1.1-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for earth_refraction-0.1.1-cp314-cp314-win_amd64.whl
earth_refraction-0.1.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for earth_refraction-0.1.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
earth_refraction-0.1.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for earth_refraction-0.1.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
earth_refraction-0.1.1-cp314-cp314-macosx_11_0_x86_64.whl CPython 3.14 CPython 3.14 macOS 11.0+ x86-64 Details for earth_refraction-0.1.1-cp314-cp314-macosx_11_0_x86_64.whl
earth_refraction-0.1.1-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for earth_refraction-0.1.1-cp314-cp314-macosx_11_0_arm64.whl
earth_refraction-0.1.1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for earth_refraction-0.1.1-cp313-cp313-win_amd64.whl
earth_refraction-0.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for earth_refraction-0.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
earth_refraction-0.1.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for earth_refraction-0.1.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
earth_refraction-0.1.1-cp313-cp313-macosx_11_0_x86_64.whl CPython 3.13 CPython 3.13 macOS 11.0+ x86-64 Details for earth_refraction-0.1.1-cp313-cp313-macosx_11_0_x86_64.whl
earth_refraction-0.1.1-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for earth_refraction-0.1.1-cp313-cp313-macosx_11_0_arm64.whl
earth_refraction-0.1.1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for earth_refraction-0.1.1-cp312-cp312-win_amd64.whl
earth_refraction-0.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for earth_refraction-0.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
earth_refraction-0.1.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for earth_refraction-0.1.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
earth_refraction-0.1.1-cp312-cp312-macosx_11_0_x86_64.whl CPython 3.12 CPython 3.12 macOS 11.0+ x86-64 Details for earth_refraction-0.1.1-cp312-cp312-macosx_11_0_x86_64.whl
earth_refraction-0.1.1-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for earth_refraction-0.1.1-cp312-cp312-macosx_11_0_arm64.whl
earth_refraction-0.1.1-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for earth_refraction-0.1.1-cp311-cp311-win_amd64.whl
earth_refraction-0.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for earth_refraction-0.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
earth_refraction-0.1.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details for earth_refraction-0.1.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
earth_refraction-0.1.1-cp311-cp311-macosx_11_0_x86_64.whl CPython 3.11 CPython 3.11 macOS 11.0+ x86-64 Details for earth_refraction-0.1.1-cp311-cp311-macosx_11_0_x86_64.whl
earth_refraction-0.1.1-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for earth_refraction-0.1.1-cp311-cp311-macosx_11_0_arm64.whl
earth_refraction-0.1.1-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for earth_refraction-0.1.1-cp310-cp310-win_amd64.whl
earth_refraction-0.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for earth_refraction-0.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
earth_refraction-0.1.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for earth_refraction-0.1.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
earth_refraction-0.1.1-cp310-cp310-macosx_11_0_x86_64.whl CPython 3.10 CPython 3.10 macOS 11.0+ x86-64 Details for earth_refraction-0.1.1-cp310-cp310-macosx_11_0_x86_64.whl
earth_refraction-0.1.1-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for earth_refraction-0.1.1-cp310-cp310-macosx_11_0_arm64.whl

Total release size: 6.7 MB

Release files / earth_refraction-0.1.1.tar.gz

Download URL earth_refraction-0.1.1.tar.gz
Size 283.3 kB
Tags Source
SHA-256 checksum
How to use checksums
ab93b252e35ff9d0cdb14b220342634c61654cbcb8948668c0188718c4fc8d7b
BLAKE2b-256 checksum
How to use checksums
c635c600f46e7279a795eea37ee5d4ae26d8c2085985298f6a22a5c0c0590588
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp314-cp314-win_amd64.whl

Download URL earth_refraction-0.1.1-cp314-cp314-win_amd64.whl
Size 424.9 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
8fcebed995ddb06acd06c912a53dd95ff3729738e91d2f212d7dc4c9cf57819b
BLAKE2b-256 checksum
How to use checksums
908d2e23e4713939825fd26895691e5b1671e32564d28e53adf40325ae618a40
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL earth_refraction-0.1.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 226.1 kB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ba83de304db0db245c8da3f0ab2b7953b5f8dd965fc50b409abd401a1b60fecd
BLAKE2b-256 checksum
How to use checksums
67233bf8076b0dae0c233123dca1471aaf4252b3dbee3b703c14cb437300f6e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL earth_refraction-0.1.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 220.1 kB
Tags CPython 3.14 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
f2bc8804b2b7a2ee0c9cd44e9edff2c3557886eee07fc85e53e55f1619de08bc
BLAKE2b-256 checksum
How to use checksums
271ade010326bc946105a7eb8c7a522d857c74c570deb3e2f6425ad6eb946021
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp314-cp314-macosx_11_0_x86_64.whl

Download URL earth_refraction-0.1.1-cp314-cp314-macosx_11_0_x86_64.whl
Size 208.1 kB
Tags CPython 3.14 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
19fa4341c6d8a268659d22bc08077974961c6bbac6e25a228e7c9507224b7d7d
BLAKE2b-256 checksum
How to use checksums
ec3de6894cab54f6a2d4cb098404fc495b68aa0415a39f2c4d29ccd4d16b7305
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp314-cp314-macosx_11_0_arm64.whl

Download URL earth_refraction-0.1.1-cp314-cp314-macosx_11_0_arm64.whl
Size 204.2 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e3c22de73bb8ccec06cd00fe586105543cba787aff3be7112348b4954a096d13
BLAKE2b-256 checksum
How to use checksums
9f62988ff01eb364251f0068cc533489a2963c9b7d674f2fde59bcd1d3f2289e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp313-cp313-win_amd64.whl

Download URL earth_refraction-0.1.1-cp313-cp313-win_amd64.whl
Size 415.8 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
ff185d1fd3a912085769149f3a601ffa8cb8c7e9511bf2d26de379abb34b6a2c
BLAKE2b-256 checksum
How to use checksums
b7be9ca5a6449c6718ff277840606fb8430ea3a1fb8319ed651584073b437b35
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL earth_refraction-0.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 225.8 kB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
7dc937fae987a8263c963b05bd4b39672f9be556cf3355272fb65018646478a1
BLAKE2b-256 checksum
How to use checksums
0369ccebb5ab0ec01e29841b8410995992cc65059fd30ded1b307048f45c1b41
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL earth_refraction-0.1.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 219.9 kB
Tags CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
820891317e9ce4d8e8735c64c03c6862afaeca2a664ed1f3bad2bc87aa955f0a
BLAKE2b-256 checksum
How to use checksums
bc97ce7f31aebf294ef26e903829e0d75ccdf9bcedce49516b1b37358348fa4b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp313-cp313-macosx_11_0_x86_64.whl

Download URL earth_refraction-0.1.1-cp313-cp313-macosx_11_0_x86_64.whl
Size 208.1 kB
Tags CPython 3.13 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
347d86b3041ae925143c2cc1caf6fa1c51d688d6bc3538362a69c16869cb17d3
BLAKE2b-256 checksum
How to use checksums
9d6fc2a3274ea5c44746f1be2dca5cc98a014d269aaa1a0c971221aa9e065b78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp313-cp313-macosx_11_0_arm64.whl

Download URL earth_refraction-0.1.1-cp313-cp313-macosx_11_0_arm64.whl
Size 204.1 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
fb48a95a7afc464f00ce091ca3dd83d9124ebde8d61a0096b1783918709d2aa4
BLAKE2b-256 checksum
How to use checksums
292fe95a31a240fe6cb5e23fd9e6c6ebe0d80e8b78b58851cd916f52a306237b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp312-cp312-win_amd64.whl

Download URL earth_refraction-0.1.1-cp312-cp312-win_amd64.whl
Size 415.8 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
9d44254e0f6ee5e96523aecf08fe8ab5f641cfb0fd51c1deee7a005b8dc97618
BLAKE2b-256 checksum
How to use checksums
73820c2ac8aa4256feb0cbb8a145e17f37601cb95f5865437e24a436d2cf4047
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL earth_refraction-0.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 225.9 kB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
bdc3d56a768c143de49fd8436f351d3d92bcb88954b844435f14946ce65f77a6
BLAKE2b-256 checksum
How to use checksums
8dda309592d13284ee34c060cdd3c7c31597da3e300728ee39571134191bef1d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL earth_refraction-0.1.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 219.9 kB
Tags CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
8289f601d2240fdde0d646d601bc1b1311561ae278e701a0ea4cec03e861f604
BLAKE2b-256 checksum
How to use checksums
01ce06ed808a1160ee5210adbb9db3fb9f8a0687795f22c30b42754f18bb72c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp312-cp312-macosx_11_0_x86_64.whl

Download URL earth_refraction-0.1.1-cp312-cp312-macosx_11_0_x86_64.whl
Size 208.1 kB
Tags CPython 3.12 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
0e778b33bcb92ba28ece3b2f6ca990ff93360828d408880e2a76d445ddcd5add
BLAKE2b-256 checksum
How to use checksums
b2126a74d074eeb6a4fa259a643652fac67abc17375178f796a6af846b8ab6f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp312-cp312-macosx_11_0_arm64.whl

Download URL earth_refraction-0.1.1-cp312-cp312-macosx_11_0_arm64.whl
Size 204.1 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5619d0e3d808896d3fa4ea5b63af6834f93509e30d9be5180c9c2b9a0af040ad
BLAKE2b-256 checksum
How to use checksums
4bcfb706e33870785fdc328fae06d9103c1f97d0088d8cb9c5f7df8dc2cff059
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp311-cp311-win_amd64.whl

Download URL earth_refraction-0.1.1-cp311-cp311-win_amd64.whl
Size 415.8 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
66f29039a95e2529623dec2451e90812e89989a4b73a8ed9aeddb28acadf274e
BLAKE2b-256 checksum
How to use checksums
d8d7e82e74215c63d335b51ce1da1f5e1da66c494a3f83f35be05eebca1a75dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL earth_refraction-0.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 226.3 kB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
9f55ac0770b9093962e7851f13127d18001727806b1579ccff54fe20ed51e774
BLAKE2b-256 checksum
How to use checksums
541b8a30aedd9ce6df92f05c3e1ea8b0b2b2f5799f21a6ef9fdefe3462e67543
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL earth_refraction-0.1.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 220.6 kB
Tags CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
3e8ba7bbf813193e8783ed62d189a6578ac8d3187dab43a0f7900d15d3931ad3
BLAKE2b-256 checksum
How to use checksums
473928b421bc19c722599662fd3eb4f839ee5a1e45ad1ffb026d1fe2a10d1166
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp311-cp311-macosx_11_0_x86_64.whl

Download URL earth_refraction-0.1.1-cp311-cp311-macosx_11_0_x86_64.whl
Size 208.5 kB
Tags CPython 3.11 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
bee7815751781e75897b54621f66e1accfbb404b31a2c61f10fde9cca0926fcc
BLAKE2b-256 checksum
How to use checksums
701114a80cc678de493eb626b73728725fd18c3d5aa3381e55dca927d488ab8a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp311-cp311-macosx_11_0_arm64.whl

Download URL earth_refraction-0.1.1-cp311-cp311-macosx_11_0_arm64.whl
Size 204.8 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
7e49077f1dad75471536be5470bae8855b8dd1583dc5d9d3e5382ffea701ed3f
BLAKE2b-256 checksum
How to use checksums
219372112e373b403ffe653156e715f2f5f8733477cb0cc88e93dbc963862736
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp310-cp310-win_amd64.whl

Download URL earth_refraction-0.1.1-cp310-cp310-win_amd64.whl
Size 415.4 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
8ae6dc65130b87dec02672d6b02d9607873db34354bc22349dc74e653ade6cd3
BLAKE2b-256 checksum
How to use checksums
84932f9a55a77bac64221647afdac258dc331a54c8cd3317c776f87438c8d00d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL earth_refraction-0.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 226.7 kB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ca656edaf3e5b5895737c8b8c28a38ae34b3d086f9baf4fbb34f19c0f275699d
BLAKE2b-256 checksum
How to use checksums
38bd53a34fc536dba3e70cb9ab94695c9358036ba66ad03b3b73d04f5c378289
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL earth_refraction-0.1.1-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 220.9 kB
Tags CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
b32d56bed0fc2588a41f79afa75ffaae67338085d1ba0fb10108a60b17e88748
BLAKE2b-256 checksum
How to use checksums
39970fb7c129bbd2c74636721d70cf31ef98fe5837a9ddecaa791922a822c2ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp310-cp310-macosx_11_0_x86_64.whl

Download URL earth_refraction-0.1.1-cp310-cp310-macosx_11_0_x86_64.whl
Size 208.8 kB
Tags CPython 3.10 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
448637b0a4d0bde0f8fbe3edf78305d36abc1b60710cc46b9d9f4903e48384c7
BLAKE2b-256 checksum
How to use checksums
225bd678691117d6abed642c310c1522f3ec86460f5f8a29f5deb9f478a0acdf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Release files / earth_refraction-0.1.1-cp310-cp310-macosx_11_0_arm64.whl

Download URL earth_refraction-0.1.1-cp310-cp310-macosx_11_0_arm64.whl
Size 205.2 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0c16907160c0c352bca325d74c7d228ab3de9fd2f9601133f16326cd26c372cd
BLAKE2b-256 checksum
How to use checksums
a29ea6c6304458b6195353e468a2f2180b1adc0cb3ea6d10bf3a5608a78cac22
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Nov 11, 2026.

Transparency log

Security for earth-refraction 0.1.1

Provenance

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

Full provenance

All 26 files in this release have been uploaded with provenance metadata.

Select from 26 files

Attestation for earth_refraction-0.1.1.tar.gz

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 Nov 11, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

26 release files Full provenance

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