This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 0.1.1 instead.
Reason given by maintainers: Missing required NRLMSIS 2.1 license notices; use 0.1.1.
Refraction Index
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
- 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:
EikonalTraceralso hastrace_batch()with the same interface, just slower (Python loop internally). UseNativeTracerfor 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/ # 736 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},
}
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
MIT © 2026 Nen Huynh
Metadata
Release files for earth-refraction 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| earth_refraction-0.1.0.tar.gz | 263.5 kB | With provenance | Details for earth_refraction-0.1.0.tar.gz |
Built distributions (wheels)
Total release size: 6.5 MB
Release files / earth_refraction-0.1.0.tar.gz
| Download URL | earth_refraction-0.1.0.tar.gz |
|---|---|
| Size | 263.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0d377b62e68bdd6d488b65ed52caf3fe6a4958b649893417d29d63ca6d09864e
|
|
BLAKE2b-256 checksum How to use checksums |
7c7308b5288d88901a7b7b9a34f6b386aed8b2cbadb60a5b865c1d448d04d82a
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp314-cp314-win_amd64.whl
| Download URL | earth_refraction-0.1.0-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 419.3 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
1410727561ed86bf315cedffe31040fd2da50cbb4e3ddd513eb9937471bf5b62
|
|
BLAKE2b-256 checksum How to use checksums |
ad7bca355768475041bb989f5135c7baaf3cf52084e2751715b5a700dcddfcc6
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | earth_refraction-0.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 220.6 kB |
| Tags | CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
6182f1c44e2ef4141b65a72aa8c6047af4ea26be52be781e1b10492ed04ec037
|
|
BLAKE2b-256 checksum How to use checksums |
c7d347e5049937700c42f2d61c12074650c026976cb7ee7bb4833f49c57b3e84
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | earth_refraction-0.1.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 214.6 kB |
| Tags | CPython 3.14 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
bb69d7d806fe639cba1ce5cf1537be803f29a38b3392e8b82c25f99150ea0895
|
|
BLAKE2b-256 checksum How to use checksums |
8e8f20a9b71812113a641b0d7f3ef86f4a8e67f489d7c06c59b4519265c823e6
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp314-cp314-macosx_11_0_x86_64.whl
| Download URL | earth_refraction-0.1.0-cp314-cp314-macosx_11_0_x86_64.whl |
|---|---|
| Size | 202.6 kB |
| Tags | CPython 3.14 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
f8c96613511eb6271325ebdfac23222ecbe1d084d5c92843c6fc886ae4a5777f
|
|
BLAKE2b-256 checksum How to use checksums |
98b8412f3faee06f0048cc9b32e9e3e9a583d715a53c320bef89e45c1fbcbfd2
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | earth_refraction-0.1.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 198.7 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
47bb11286797a78b90be77d0065622c619800e40d95f564a582cfa40532b97ea
|
|
BLAKE2b-256 checksum How to use checksums |
2775adf926d3260e60d0f1364b408c90858dcb490b643ac7f7a11b047fcc6a75
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp313-cp313-win_amd64.whl
| Download URL | earth_refraction-0.1.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 410.3 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
7b7a8a5c086d307886f903ea62299a1703906bb0eeb3be25cf74b5e8fa50fd48
|
|
BLAKE2b-256 checksum How to use checksums |
6dba833be87858ae74a31f67a07bead9c09348f8cea333762538e0d4daf622ad
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | earth_refraction-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 220.4 kB |
| Tags | CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
20d7237f1116d8f2319fdfc8e0501e4b46e2b02dc5b842f84a15f3f07de15134
|
|
BLAKE2b-256 checksum How to use checksums |
6ff1eaf629649136ac0eeb2bd939c654d0707efdc0770f45e1f0559e11a4a15a
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | earth_refraction-0.1.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 214.4 kB |
| Tags | CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
00d33b5658b725051e76761d27db7f8059c24c34c296b1b488a6e8e82ef46981
|
|
BLAKE2b-256 checksum How to use checksums |
ba5a8f333ab7387d38251f68e3bff3c1f8dd51beb13aaddb8433324123aa22b7
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp313-cp313-macosx_11_0_x86_64.whl
| Download URL | earth_refraction-0.1.0-cp313-cp313-macosx_11_0_x86_64.whl |
|---|---|
| Size | 202.6 kB |
| Tags | CPython 3.13 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
2a50090e3f6683802c633a12e6d1146220e0d34ca09dfb19a27e103e1168de27
|
|
BLAKE2b-256 checksum How to use checksums |
33f893e6980d6d1e894c26010e7c8d86255a1a10422d4d4a5f620661553e3f76
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | earth_refraction-0.1.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 198.7 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
36b57803b615766a1e2e66ef6f6a675f6cde51a3b2c65f2b822352705c8f3cbe
|
|
BLAKE2b-256 checksum How to use checksums |
78ff7bbf39ac500272d2e035ae324e1906030d97e72cdc3d4d4f07ee1d178c1f
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp312-cp312-win_amd64.whl
| Download URL | earth_refraction-0.1.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 410.3 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
634266d17b6500b8ce04252cbeda40fb8ecd14ed9d0a16395f30460f734e1ea0
|
|
BLAKE2b-256 checksum How to use checksums |
b9adb566390a58ccea0b7e064b255a6134f08a02a33023af90aa07ff1ec19767
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | earth_refraction-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 220.4 kB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
0e2961fbaee1cc536a57c7938a7d1178660a9d098ac46dc32e18b7dc451a5dad
|
|
BLAKE2b-256 checksum How to use checksums |
dacca2f5ac8c0ed4579c11d623e3a2b7e88f1998de769b8fbee67dfcdc816257
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | earth_refraction-0.1.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 214.4 kB |
| Tags | CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
5d5c79cf568fea5417450a5e7e8388348651750284387547737c494d9310b3db
|
|
BLAKE2b-256 checksum How to use checksums |
191aa4a99dead41cbffa30cc1baccefb963401dc0b78208392344c66d8c9844e
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp312-cp312-macosx_11_0_x86_64.whl
| Download URL | earth_refraction-0.1.0-cp312-cp312-macosx_11_0_x86_64.whl |
|---|---|
| Size | 202.6 kB |
| Tags | CPython 3.12 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
25e499f2a2da1b48e3fd8b81109b7e16b199864b032d3c2fbeb1d228eba56888
|
|
BLAKE2b-256 checksum How to use checksums |
77cb1a8ab9d6cfba63de79976ae322b7c3a29b62177c6594069e107e50ce3dcb
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | earth_refraction-0.1.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 198.6 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3def5034cdf4dac204ed5c579a2de357f9340e041ffe8bcd2119dc7a2ad9435d
|
|
BLAKE2b-256 checksum How to use checksums |
8e3e23b8d260ec355288241da2b1a7fa47bfc48b1d5a026a10151f0e06510cb3
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp311-cp311-win_amd64.whl
| Download URL | earth_refraction-0.1.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 410.2 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b9ae43ed760b3e066f8e65521e3ee282f80a84f143ab8da2b3a062df3fb3f30f
|
|
BLAKE2b-256 checksum How to use checksums |
715439071b585f0705e0f64b430ff710d1b3c792a7e7f322a163a84f230abfb6
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | earth_refraction-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 220.9 kB |
| Tags | CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
fda896a9300979da8e42b3ddc67c67ac61363370d4d7cdd987a647c5710b3de9
|
|
BLAKE2b-256 checksum How to use checksums |
6298f36faed4935f0d11c05f503576ca6f11f693c20e84a999613bbe4c95cbc4
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | earth_refraction-0.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 215.1 kB |
| Tags | CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
6c065f3f7fa76f13619bd79895f6c74b25e53cf2c0e48d3ec8682bf53e473c2e
|
|
BLAKE2b-256 checksum How to use checksums |
e572a2915389f68d90c2200051661676e95afdc9af14d8e0054c52b59f9ce9e7
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp311-cp311-macosx_11_0_x86_64.whl
| Download URL | earth_refraction-0.1.0-cp311-cp311-macosx_11_0_x86_64.whl |
|---|---|
| Size | 203.0 kB |
| Tags | CPython 3.11 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
b2a6f227372c16eba6b58bdfe6ae9f7f53628b02fce052596d9e37dfa89d0a85
|
|
BLAKE2b-256 checksum How to use checksums |
6861d5a0c546556ade837e34df4561000bdadec9a03244e9670085b0ebd96bb2
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | earth_refraction-0.1.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 199.3 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
d44c6686da2d33b7a7292d3bddeffea42e4cfba592d6978963f75d1bb2419a6b
|
|
BLAKE2b-256 checksum How to use checksums |
1ac1bcc7aacbcc6b72d7dfb992debda1dab3e41d5912fa609dd321c3542184b2
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp310-cp310-win_amd64.whl
| Download URL | earth_refraction-0.1.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 409.9 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
4d9c935ac2784f6eb38c5c034c8f2378404bb2484aab392467d56109392f560a
|
|
BLAKE2b-256 checksum How to use checksums |
b0e76a123531df7087c10f7481ba2e12b4e3a539d028a48d1d1cba66f30f1809
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | earth_refraction-0.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 221.2 kB |
| Tags | CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
7a6a6178d3babe2e524c7270e407c34d4c4930ed2a4cf4f05f31079c35bf72b9
|
|
BLAKE2b-256 checksum How to use checksums |
e514af4b50051edd924c9e2ce4a951443e9295fa29c2740985c11efb816f9457
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | earth_refraction-0.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 215.5 kB |
| Tags | CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
f0b7e335475da6236dc849edee2b700b8f5e6d16d9fdfde1244224b4d7abcaaf
|
|
BLAKE2b-256 checksum How to use checksums |
0052ae37163615a5188a5bd0f3c6eb9530737e3080ff5363e4916dbba3b92833
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp310-cp310-macosx_11_0_x86_64.whl
| Download URL | earth_refraction-0.1.0-cp310-cp310-macosx_11_0_x86_64.whl |
|---|---|
| Size | 203.3 kB |
| Tags | CPython 3.10 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
72b875aff75171068886946f50444052eb0b1462fa706ce55f5953a6ccdb5680
|
|
BLAKE2b-256 checksum How to use checksums |
699d0512b584af87b24c955142cb51933f831b030d0dcc1292dcae3b50a7115e
|
| 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 9, 2026.
Transparency logRelease files / earth_refraction-0.1.0-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | earth_refraction-0.1.0-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 199.7 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
efb11459851e765b633a50d2411a3fdf21665e2e7b47dbd2309b598fe4a81f23
|
|
BLAKE2b-256 checksum How to use checksums |
3485e59f82af9b46810f80c34016c9722f1214e940380088dd531a5f2c911a48
|
| 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 9, 2026.
Transparency logSecurity for earth-refraction 0.1.0
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.
Attestation for earth_refraction-0.1.0.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 9, 2026.
Transparency logA 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.