Skip to main content
Yanked

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

CI License: MIT 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
  • 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/                       # 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)

Source distribution for earth-refraction 0.1.0
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)

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

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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Security 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.

Select from 26 files

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 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.0 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