Skip to content

Measurements.jl support, and event times at the observer's element type - #122

Merged
langestefan merged 5 commits into
mainfrom
feature/measurements-support
Jul 31, 2026
Merged

Measurements.jl support, and event times at the observer's element type#122
langestefan merged 5 commits into
mainfrom
feature/measurements-support

Conversation

@langestefan

@langestefan langestefan commented Jul 31, 2026

Copy link
Copy Markdown
Member

Measurements.jl already works with the package, since every algorithm is generic over the
element type. Nothing enforced that, so this adds a testset that pins it down and a docs
section. Testing it then turned up one real gap and one small constructor wart, both fixed
here.

Tests

test/positioning/test-measurements.jl, written to fail on a wrong answer rather than only
on a crash:

  • the propagated uncertainty is compared against a finite-difference gradient for all seven
    algorithms, on both elevation and azimuth, so a broken derivative chain is caught
  • elevation + zenith must be exactly 90.0 ± 0.0. This holds only while the observer's
    precomputed sin_lat and cos_lat stay correlated with latitude, which is the part most
    likely to go silently wrong. Uncorrelated propagation would report ± 0.014
  • uncertain refraction parameters must widen the apparent angles while leaving the geometric
    ones untouched
  • the vectorized, in-place, and table paths, and Measurement{Float32} staying Float32

Event times at the observer's element type

transit_sunrise_sunset rounds to a whole second to build a DateTime, discarding the
sub-second part and anything the element type carries beyond a value. The solve already runs
at the observer's element type, so that information exists right up to the final conversion
and is then dropped. With a Measurement observer, roughly 4 s of uncertainty on sunrise was
being computed and discarded.

transit_sunrise_sunset_seconds returns the same events as seconds since midnight UTC,
keeping the element type:

julia> transit_sunrise_sunset_seconds(Observer(52.35888 ± 0.01, 4.88185 ± 0.01), Date(2023, 6, 21))
TransitSunriseSunset{Measurement{Float64}}(42134.7 ± 2.4, 11885.5 ± 4.3, 72384.2 ± 4.3)

This is not only for Measurements. It also makes the events differentiable, which they were
not before, and not workaroundable either: the DateTime variant cannot be usefully
finite-differenced, because a step small enough to behave like a derivative is swamped by the
whole-second rounding. As a cross-check, ForwardDiff gives -354.9 s/deg for latitude and
-240.0 s/deg for longitude, the latter being exactly 4 minutes per degree. Recombining those
gives 4.28 s, matching what Measurements reports by an entirely separate route.

The conversion dispatches on the requested type, so the DateTime and ZonedDateTime paths
are untouched, including the polar day and night branch. TransitSunriseSunset needed no
change, having been made generic when TimeZones moved to an extension.

Observer constructor

The inner constructor defaulted alt and horiz to zero(T), requiring the element type
alone to determine a zero. Taking them from lat instead is a no-op for Float32, Float64,
Float128, BigFloat, ForwardDiff duals, and Measurements, and lifts the requirement for
Real subtypes that carry information on the instance.

Verification

  • full Pkg.test() passes: Measurements 88, Autodiff 117, Aqua 11/11, JET 1/1, and every
    pre-existing testset unchanged, including Srt at 517. The three Broken in Sg2 are
    pre-existing @test_skips
  • prek run --all-files passes, including Runic and ExplicitImports
  • the new docs examples were executed and their output checked

Not covered

The constructor change has no direct test. Exercising it needs a Real subtype without
zero(::Type), and adding a contrived one seemed worse than leaving it, given every supported
type behaves identically either way.

A full docs/make.jl build was not run locally; the example snippets were verified on their
own and CI covers the rest.

🤖 Generated with Claude Code

langestefan and others added 3 commits July 31, 2026 13:14
The inner constructor defaulted alt and horiz to zero(T), which requires the
element type alone to determine a zero. That holds for the types the package
already supports, but not for every Real subtype: DynamicQuantities.RealQuantity
refuses zero of a bare type because the dimensions live on the instance rather
than in the type.

Taking the defaults from lat instead is a no-op for Float32, Float64, Float128,
BigFloat, ForwardDiff duals, and Measurements, and lifts the requirement for
anything else.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NQ9zmXUHQtA5suiMB8UdA7
The algorithms are generic over the element type, so Measurement observers work
with no extension package. This adds a testset that pins down the behaviour
rather than assuming it keeps working.

The propagated uncertainty is checked against a finite-difference gradient for
every algorithm, so the tests catch a wrong derivative chain and not merely a
crash. A separate testset asserts that elevation plus zenith carries no
uncertainty at all, which holds only while the observer's precomputed sin_lat
and cos_lat stay correlated with latitude.

Also covered: uncertain refraction parameters widening the apparent angles while
leaving the geometric ones untouched, the vectorized, in-place and table paths,
and the fact that the sunrise and sunset helpers drop the uncertainty because a
DateTime cannot carry one.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NQ9zmXUHQtA5suiMB8UdA7
Adds a worked refraction example that pairs an exact observer with an uncertain
atmosphere, so the geometric angles come back exact while the apparent ones
carry the pressure and temperature uncertainty. Also quantifies what treating
elevation and zenith as independent would report, and notes that the element
type, vectorized, in-place and table paths behave the same way.

Trims the Observer constructor comment and drops the reference to a specific
package.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NQ9zmXUHQtA5suiMB8UdA7
@github-actions

github-actions Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia vlts)

Time benchmarks
main cf03e37... main / cf03e37...
ours/n=100/Interpolated 0.0274 ± 0.00032 ms 0.0274 ± 0.00029 ms 1 ± 0.016
ours/n=100/Iqbal 0.0149 ± 0.0016 ms 0.0149 ± 0.0016 ms 1 ± 0.15
ours/n=100/Michalsky 0.0328 ± 0.00028 ms 0.0328 ± 0.00027 ms 1 ± 0.012
ours/n=100/NOAA 0.0441 ± 0.00038 ms 0.044 ± 0.00036 ms 1 ± 0.012
ours/n=100/PSA 0.0186 ± 0.0016 ms 0.0186 ± 0.0016 ms 1 ± 0.12
ours/n=100/SPA 0.291 ± 0.0085 ms 0.293 ± 0.0085 ms 0.995 ± 0.041
ours/n=100/USNO 0.042 ± 0.0017 ms 0.0417 ± 0.0017 ms 1.01 ± 0.056
ours/n=100/Walraven 0.0192 ± 0.00023 ms 0.0192 ± 0.00016 ms 1 ± 0.015
ours/n=1000/Interpolated 0.265 ± 0.017 ms 0.267 ± 0.017 ms 0.994 ± 0.088
ours/n=1000/Iqbal 0.138 ± 0.0009 ms 0.138 ± 0.00084 ms 1 ± 0.009
ours/n=1000/Michalsky 0.308 ± 0.0091 ms 0.308 ± 0.009 ms 1 ± 0.042
ours/n=1000/NOAA 0.415 ± 0.0091 ms 0.414 ± 0.0086 ms 1 ± 0.03
ours/n=1000/PSA 0.172 ± 0.0093 ms 0.172 ± 0.0093 ms 1 ± 0.077
ours/n=1000/SPA 2.97 ± 0.019 ms 2.99 ± 0.018 ms 0.994 ± 0.0087
ours/n=1000/USNO 0.393 ± 0.0085 ms 0.392 ± 0.0088 ms 1 ± 0.031
ours/n=1000/Walraven 0.2 ± 0.0098 ms 0.2 ± 0.0095 ms 1 ± 0.068
ours/n=10000/Interpolated 2.66 ± 0.01 ms 2.65 ± 0.0094 ms 1 ± 0.0052
ours/n=10000/Iqbal 1.46 ± 0.0094 ms 1.46 ± 0.0096 ms 1 ± 0.0092
ours/n=10000/Michalsky 3.2 ± 0.012 ms 3.2 ± 0.0097 ms 1 ± 0.0049
ours/n=10000/NOAA 4.18 ± 0.012 ms 4.18 ± 0.0099 ms 1 ± 0.0037
ours/n=10000/PSA 1.73 ± 0.0063 ms 1.73 ± 0.0055 ms 1 ± 0.0049
ours/n=10000/SPA 29.8 ± 0.17 ms 29.9 ± 0.18 ms 0.994 ± 0.0081
ours/n=10000/USNO 3.96 ± 0.015 ms 3.95 ± 0.0088 ms 1 ± 0.0045
ours/n=10000/Walraven 1.94 ± 0.0053 ms 1.94 ± 0.0052 ms 0.998 ± 0.0038
ours/n=100000/Interpolated 26.7 ± 0.082 ms 26.6 ± 0.09 ms 1 ± 0.0046
ours/n=100000/Iqbal 14.8 ± 0.052 ms 14.7 ± 0.049 ms 1.01 ± 0.0049
ours/n=100000/Michalsky 32.1 ± 0.087 ms 32 ± 0.089 ms 1 ± 0.0039
ours/n=100000/NOAA 42.7 ± 0.11 ms 42.6 ± 0.15 ms 1 ± 0.0045
ours/n=100000/PSA 17.4 ± 0.051 ms 17.4 ± 0.056 ms 1 ± 0.0043
ours/n=100000/SPA 300 ± 1.8 ms 301 ± 2.1 ms 0.996 ± 0.0091
ours/n=100000/USNO 39.9 ± 0.096 ms 39.9 ± 0.12 ms 1 ± 0.0038
ours/n=100000/Walraven 19.6 ± 0.073 ms 19.6 ± 0.054 ms 1 ± 0.0046
refraction/ARCHER 0.00024 ± 1e-05 ms 0.00024 ± 1e-05 ms 1 ± 0.059
refraction/BENNETT 0.000231 ± 1e-06 ms 0.000231 ± 1e-06 ms 1 ± 0.0061
refraction/MICHALSKY 0.0002 ± 1e-06 ms 0.0002 ± 1e-06 ms 1 ± 0.0071
refraction/NoRefraction 0.0002 ± 1e-05 ms 0.0002 ± 9e-06 ms 1 ± 0.067
refraction/SG2 0.000241 ± 1e-05 ms 0.000241 ± 1e-06 ms 1 ± 0.042
single/Interpolated 0.000381 ± 1e-06 ms 0.000381 ± 1e-06 ms 1 ± 0.0037
single/Iqbal 0.000171 ± 1e-05 ms 0.00018 ± 1e-05 ms 0.95 ± 0.077
single/Michalsky 0.000321 ± 1e-06 ms 0.000321 ± 1e-06 ms 1 ± 0.0044
single/NOAA 0.000451 ± 0 ms 0.000451 ± 0 ms 1 ± 0
single/PSA 0.0002 ± 9e-06 ms 0.0002 ± 1e-05 ms 1 ± 0.067
single/SPA 0.00297 ± 1.1e-05 ms 0.00296 ± 1.1e-05 ms 1 ± 0.0052
single/USNO 0.000411 ± 1e-06 ms 0.000411 ± 0 ms 1 ± 0.0024
single/Walraven 0.00023 ± 1e-05 ms 0.00023 ± 1e-05 ms 1 ± 0.061
solposx/n=100/Iqbal 2.29 ± 0.04 ms 2.29 ± 0.038 ms 0.999 ± 0.024
solposx/n=100/NOAA 4.11 ± 0.079 ms 4.06 ± 0.087 ms 1.01 ± 0.029
solposx/n=100/PSA 2.88 ± 0.055 ms 2.91 ± 0.045 ms 0.989 ± 0.024
solposx/n=100/SPA 3.17 ± 0.034 ms 3.16 ± 0.032 ms 1 ± 0.015
solposx/n=100/USNO 3.17 ± 0.044 ms 3.15 ± 0.04 ms 1.01 ± 0.019
solposx/n=100/Walraven 1.15 ± 0.024 ms 1.16 ± 0.025 ms 0.994 ± 0.03
solposx/n=1000/Iqbal 2.6 ± 0.045 ms 2.6 ± 0.045 ms 1 ± 0.025
solposx/n=1000/NOAA 4.82 ± 0.089 ms 4.81 ± 0.097 ms 1 ± 0.027
solposx/n=1000/PSA 3.28 ± 0.087 ms 3.31 ± 0.055 ms 0.992 ± 0.031
solposx/n=1000/SPA 7.74 ± 0.053 ms 7.71 ± 0.059 ms 1 ± 0.01
solposx/n=1000/USNO 7.37 ± 0.081 ms 7.33 ± 0.065 ms 1.01 ± 0.014
solposx/n=1000/Walraven 1.45 ± 0.035 ms 1.46 ± 0.034 ms 0.994 ± 0.034
solposx/n=10000/Iqbal 5.34 ± 0.078 ms 5.41 ± 0.061 ms 0.987 ± 0.018
solposx/n=10000/NOAA 10.7 ± 0.13 ms 10.8 ± 0.12 ms 0.99 ± 0.016
solposx/n=10000/PSA 6.7 ± 0.091 ms 6.73 ± 0.093 ms 0.996 ± 0.019
solposx/n=10000/SPA 50.9 ± 0.25 ms 50.4 ± 0.26 ms 1.01 ± 0.0072
solposx/n=10000/USNO 49.2 ± 0.61 ms 47.5 ± 0.59 ms 1.04 ± 0.018
solposx/n=10000/Walraven 3.96 ± 0.041 ms 3.96 ± 0.042 ms 0.999 ± 0.015
solposx/n=100000/Iqbal 30.6 ± 0.4 ms 30.9 ± 0.47 ms 0.988 ± 0.02
solposx/n=100000/NOAA 66.5 ± 0.56 ms 67.2 ± 0.47 ms 0.99 ± 0.011
solposx/n=100000/PSA 39.1 ± 0.33 ms 39.2 ± 0.37 ms 0.997 ± 0.013
solposx/n=100000/SPA 488 ± 3.7 ms 487 ± 1.2 ms 1 ± 0.008
solposx/n=100000/USNO 482 ± 25 ms 464 ± 24 ms 1.04 ± 0.076
solposx/n=100000/Walraven 28.3 ± 0.27 ms 28.3 ± 0.28 ms 1 ± 0.014
time_to_load 0.112 ± 0.00068 s 0.111 ± 0.0006 s 1.01 ± 0.0082
Memory benchmarks
main cf03e37... main / cf03e37...
ours/n=100/Interpolated 5 allocs: 4.38 kB 5 allocs: 4.38 kB 1
ours/n=100/Iqbal 3 allocs: 2.62 kB 3 allocs: 2.62 kB 1
ours/n=100/Michalsky 5 allocs: 4.38 kB 5 allocs: 4.38 kB 1
ours/n=100/NOAA 5 allocs: 4.38 kB 5 allocs: 4.38 kB 1
ours/n=100/PSA 3 allocs: 2.62 kB 3 allocs: 2.62 kB 1
ours/n=100/SPA 5 allocs: 4.38 kB 5 allocs: 4.38 kB 1
ours/n=100/USNO 3 allocs: 2.62 kB 3 allocs: 2.62 kB 1
ours/n=100/Walraven 3 allocs: 2.62 kB 3 allocs: 2.62 kB 1
ours/n=1000/Interpolated 5 allocs: 0.0388 MB 5 allocs: 0.0388 MB 1
ours/n=1000/Iqbal 3 allocs: 23.8 kB 3 allocs: 23.8 kB 1
ours/n=1000/Michalsky 5 allocs: 0.0388 MB 5 allocs: 0.0388 MB 1
ours/n=1000/NOAA 5 allocs: 0.0388 MB 5 allocs: 0.0388 MB 1
ours/n=1000/PSA 3 allocs: 23.8 kB 3 allocs: 23.8 kB 1
ours/n=1000/SPA 5 allocs: 0.0388 MB 5 allocs: 0.0388 MB 1
ours/n=1000/USNO 3 allocs: 23.8 kB 3 allocs: 23.8 kB 1
ours/n=1000/Walraven 3 allocs: 23.8 kB 3 allocs: 23.8 kB 1
ours/n=10000/Interpolated 10 allocs: 0.382 MB 10 allocs: 0.382 MB 1
ours/n=10000/Iqbal 6 allocs: 0.229 MB 6 allocs: 0.229 MB 1
ours/n=10000/Michalsky 10 allocs: 0.382 MB 10 allocs: 0.382 MB 1
ours/n=10000/NOAA 10 allocs: 0.382 MB 10 allocs: 0.382 MB 1
ours/n=10000/PSA 6 allocs: 0.229 MB 6 allocs: 0.229 MB 1
ours/n=10000/SPA 10 allocs: 0.382 MB 10 allocs: 0.382 MB 1
ours/n=10000/USNO 6 allocs: 0.229 MB 6 allocs: 0.229 MB 1
ours/n=10000/Walraven 6 allocs: 0.229 MB 6 allocs: 0.229 MB 1
ours/n=100000/Interpolated 10 allocs: 3.81 MB 10 allocs: 3.81 MB 1
ours/n=100000/Iqbal 6 allocs: 2.29 MB 6 allocs: 2.29 MB 1
ours/n=100000/Michalsky 10 allocs: 3.81 MB 10 allocs: 3.81 MB 1
ours/n=100000/NOAA 10 allocs: 3.81 MB 10 allocs: 3.81 MB 1
ours/n=100000/PSA 6 allocs: 2.29 MB 6 allocs: 2.29 MB 1
ours/n=100000/SPA 10 allocs: 3.81 MB 10 allocs: 3.81 MB 1
ours/n=100000/USNO 6 allocs: 2.29 MB 6 allocs: 2.29 MB 1
ours/n=100000/Walraven 6 allocs: 2.29 MB 6 allocs: 2.29 MB 1
refraction/ARCHER 0 allocs: 0 B 0 allocs: 0 B
refraction/BENNETT 0 allocs: 0 B 0 allocs: 0 B
refraction/MICHALSKY 0 allocs: 0 B 0 allocs: 0 B
refraction/NoRefraction 0 allocs: 0 B 0 allocs: 0 B
refraction/SG2 0 allocs: 0 B 0 allocs: 0 B
single/Interpolated 0 allocs: 0 B 0 allocs: 0 B
single/Iqbal 0 allocs: 0 B 0 allocs: 0 B
single/Michalsky 0 allocs: 0 B 0 allocs: 0 B
single/NOAA 0 allocs: 0 B 0 allocs: 0 B
single/PSA 0 allocs: 0 B 0 allocs: 0 B
single/SPA 0 allocs: 0 B 0 allocs: 0 B
single/USNO 0 allocs: 0 B 0 allocs: 0 B
single/Walraven 0 allocs: 0 B 0 allocs: 0 B
solposx/n=100/Iqbal 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=100/NOAA 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=100/PSA 0.057 k allocs: 1.61 kB 0.057 k allocs: 1.61 kB 1
solposx/n=100/SPA 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=100/USNO 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=100/Walraven 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=1000/Iqbal 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=1000/NOAA 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=1000/PSA 0.057 k allocs: 1.61 kB 0.057 k allocs: 1.61 kB 1
solposx/n=1000/SPA 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=1000/USNO 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=1000/Walraven 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=10000/Iqbal 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=10000/NOAA 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=10000/PSA 0.057 k allocs: 1.61 kB 0.057 k allocs: 1.61 kB 1
solposx/n=10000/SPA 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=10000/USNO 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=10000/Walraven 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=100000/Iqbal 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=100000/NOAA 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=100000/PSA 0.057 k allocs: 1.61 kB 0.057 k allocs: 1.61 kB 1
solposx/n=100000/SPA 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=100000/USNO 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
solposx/n=100000/Walraven 19 allocs: 0.734 kB 19 allocs: 0.734 kB 1
time_to_load 0.153 k allocs: 14.5 kB 0.153 k allocs: 14.5 kB 1

@github-actions

github-actions Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia v1)

Time benchmarks
main cf03e37... main / cf03e37...
ours/n=100/Interpolated 0.0262 ± 0.00023 ms 0.0263 ± 0.0002 ms 0.996 ± 0.012
ours/n=100/Iqbal 0.0133 ± 0.0001 ms 0.0134 ± 0.0001 ms 0.996 ± 0.011
ours/n=100/Michalsky 0.0318 ± 0.00019 ms 0.0318 ± 0.00018 ms 0.999 ± 0.0083
ours/n=100/NOAA 0.0427 ± 0.00027 ms 0.0427 ± 0.0002 ms 1 ± 0.0079
ours/n=100/PSA 0.0167 ± 0.00012 ms 0.0168 ± 0.00016 ms 0.998 ± 0.012
ours/n=100/SPA 0.306 ± 0.0082 ms 0.306 ± 0.0082 ms 1 ± 0.038
ours/n=100/USNO 0.0407 ± 0.00021 ms 0.0409 ± 0.00019 ms 0.995 ± 0.0069
ours/n=100/Walraven 0.0201 ± 0.00045 ms 0.0201 ± 0.00043 ms 1 ± 0.031
ours/n=1000/Interpolated 0.26 ± 0.0089 ms 0.262 ± 0.0089 ms 0.992 ± 0.048
ours/n=1000/Iqbal 0.137 ± 0.0016 ms 0.137 ± 0.0023 ms 0.996 ± 0.02
ours/n=1000/Michalsky 0.315 ± 0.0087 ms 0.315 ± 0.0086 ms 0.999 ± 0.039
ours/n=1000/NOAA 0.419 ± 0.0091 ms 0.419 ± 0.0086 ms 0.999 ± 0.03
ours/n=1000/PSA 0.167 ± 0.0085 ms 0.167 ± 0.0085 ms 0.999 ± 0.072
ours/n=1000/SPA 3.14 ± 0.019 ms 3.14 ± 0.019 ms 1 ± 0.0086
ours/n=1000/USNO 0.396 ± 0.009 ms 0.398 ± 0.0085 ms 0.997 ± 0.031
ours/n=1000/Walraven 0.197 ± 0.0086 ms 0.197 ± 0.0088 ms 1 ± 0.062
ours/n=10000/Interpolated 2.7 ± 0.012 ms 2.7 ± 0.011 ms 0.999 ± 0.006
ours/n=10000/Iqbal 1.46 ± 0.011 ms 1.47 ± 0.013 ms 0.996 ± 0.011
ours/n=10000/Michalsky 3.28 ± 0.017 ms 3.27 ± 0.017 ms 1 ± 0.0073
ours/n=10000/NOAA 4.21 ± 0.017 ms 4.22 ± 0.02 ms 0.999 ± 0.0063
ours/n=10000/PSA 1.7 ± 0.0082 ms 1.7 ± 0.0076 ms 0.999 ± 0.0066
ours/n=10000/SPA 31.6 ± 0.091 ms 31.6 ± 0.088 ms 1 ± 0.004
ours/n=10000/USNO 4.01 ± 0.02 ms 4.02 ± 0.022 ms 0.997 ± 0.0074
ours/n=10000/Walraven 1.99 ± 0.011 ms 2 ± 0.0078 ms 0.998 ± 0.0066
ours/n=100000/Interpolated 27.1 ± 0.8 ms 27.1 ± 0.67 ms 1 ± 0.039
ours/n=100000/Iqbal 14.8 ± 0.21 ms 14.8 ± 0.14 ms 0.998 ± 0.017
ours/n=100000/Michalsky 32.8 ± 0.82 ms 32.8 ± 0.86 ms 1 ± 0.036
ours/n=100000/NOAA 42.9 ± 0.74 ms 43 ± 0.83 ms 0.999 ± 0.026
ours/n=100000/PSA 17.1 ± 0.09 ms 17.2 ± 0.2 ms 0.999 ± 0.013
ours/n=100000/SPA 317 ± 1.8 ms 317 ± 1.8 ms 1 ± 0.0079
ours/n=100000/USNO 40.4 ± 0.24 ms 40.5 ± 0.13 ms 0.997 ± 0.0068
ours/n=100000/Walraven 20 ± 0.17 ms 20.1 ± 0.13 ms 0.997 ± 0.011
refraction/ARCHER 0.00024 ± 1e-05 ms 0.000231 ± 1e-05 ms 1.04 ± 0.062
refraction/BENNETT 0.00024 ± 1e-05 ms 0.000231 ± 1e-05 ms 1.04 ± 0.062
refraction/MICHALSKY 0.0002 ± 1e-06 ms 0.0002 ± 1e-06 ms 1 ± 0.0071
refraction/NoRefraction 0.0002 ± 1e-05 ms 0.0002 ± 1e-05 ms 1 ± 0.071
refraction/SG2 0.00025 ± 1e-06 ms 0.00025 ± 1e-06 ms 1 ± 0.0057
single/Interpolated 0.00041 ± 1e-05 ms 0.000411 ± 0 ms 0.998 ± 0.024
single/Iqbal 0.00018 ± 1e-05 ms 0.00018 ± 9e-06 ms 1 ± 0.075
single/Michalsky 0.00033 ± 1e-05 ms 0.00033 ± 1e-05 ms 1 ± 0.043
single/NOAA 0.000461 ± 1e-05 ms 0.000452 ± 1e-05 ms 1.02 ± 0.032
single/PSA 0.0002 ± 1e-05 ms 0.0002 ± 1e-05 ms 1 ± 0.071
single/SPA 0.00314 ± 1.1e-05 ms 0.00314 ± 1e-05 ms 1 ± 0.0047
single/USNO 0.000411 ± 1e-05 ms 0.00042 ± 1e-05 ms 0.979 ± 0.033
single/Walraven 0.000231 ± 1e-05 ms 0.00024 ± 1e-05 ms 0.963 ± 0.058
solposx/n=100/Iqbal 2.29 ± 0.047 ms 2.26 ± 0.039 ms 1.02 ± 0.027
solposx/n=100/NOAA 4.17 ± 0.079 ms 4.06 ± 0.085 ms 1.03 ± 0.029
solposx/n=100/PSA 2.96 ± 0.053 ms 2.85 ± 0.045 ms 1.04 ± 0.025
solposx/n=100/SPA 3.2 ± 0.047 ms 3.17 ± 0.038 ms 1.01 ± 0.019
solposx/n=100/USNO 3.19 ± 0.069 ms 3.11 ± 0.048 ms 1.02 ± 0.027
solposx/n=100/Walraven 1.16 ± 0.026 ms 1.13 ± 0.024 ms 1.03 ± 0.032
solposx/n=1000/Iqbal 2.57 ± 0.055 ms 2.54 ± 0.041 ms 1.01 ± 0.027
solposx/n=1000/NOAA 4.8 ± 0.099 ms 4.78 ± 0.11 ms 1.01 ± 0.031
solposx/n=1000/PSA 3.35 ± 0.059 ms 3.26 ± 0.065 ms 1.03 ± 0.027
solposx/n=1000/SPA 7.71 ± 0.16 ms 7.74 ± 0.12 ms 0.995 ± 0.026
solposx/n=1000/USNO 7.36 ± 0.1 ms 7.39 ± 0.098 ms 0.996 ± 0.019
solposx/n=1000/Walraven 1.45 ± 0.036 ms 1.42 ± 0.032 ms 1.02 ± 0.034
solposx/n=10000/Iqbal 5.39 ± 0.099 ms 5.39 ± 0.089 ms 1 ± 0.025
solposx/n=10000/NOAA 10.9 ± 0.15 ms 11 ± 0.19 ms 0.992 ± 0.022
solposx/n=10000/PSA 6.74 ± 0.11 ms 6.75 ± 0.14 ms 0.997 ± 0.027
solposx/n=10000/SPA 51.2 ± 0.23 ms 51.8 ± 0.34 ms 0.989 ± 0.0079
solposx/n=10000/USNO 49.6 ± 0.68 ms 50.2 ± 0.82 ms 0.989 ± 0.021
solposx/n=10000/Walraven 4 ± 0.073 ms 3.99 ± 0.067 ms 1 ± 0.025
solposx/n=100000/Iqbal 31.6 ± 0.48 ms 32.1 ± 0.66 ms 0.983 ± 0.025
solposx/n=100000/NOAA 68 ± 0.62 ms 69.7 ± 0.57 ms 0.974 ± 0.012
solposx/n=100000/PSA 39.6 ± 0.29 ms 39.9 ± 0.37 ms 0.99 ± 0.012
solposx/n=100000/SPA 496 ± 4.1 ms 508 ± 2.9 ms 0.976 ± 0.0098
solposx/n=100000/USNO 476 ± 38 ms 470 ± 32 ms 1.01 ± 0.11
solposx/n=100000/Walraven 29 ± 0.3 ms 29.8 ± 0.34 ms 0.974 ± 0.015
time_to_load 0.106 ± 0.0011 s 0.107 ± 0.003 s 0.992 ± 0.03
Memory benchmarks
main cf03e37... main / cf03e37...
ours/n=100/Interpolated 10 allocs: 4.53 kB 10 allocs: 4.53 kB 1
ours/n=100/Iqbal 6 allocs: 2.72 kB 6 allocs: 2.72 kB 1
ours/n=100/Michalsky 10 allocs: 4.53 kB 10 allocs: 4.53 kB 1
ours/n=100/NOAA 10 allocs: 4.53 kB 10 allocs: 4.53 kB 1
ours/n=100/PSA 6 allocs: 2.72 kB 6 allocs: 2.72 kB 1
ours/n=100/SPA 10 allocs: 4.53 kB 10 allocs: 4.53 kB 1
ours/n=100/USNO 6 allocs: 2.72 kB 6 allocs: 2.72 kB 1
ours/n=100/Walraven 6 allocs: 2.72 kB 6 allocs: 2.72 kB 1
ours/n=1000/Interpolated 15 allocs: 0.0385 MB 15 allocs: 0.0385 MB 1
ours/n=1000/Iqbal 9 allocs: 23.6 kB 9 allocs: 23.6 kB 1
ours/n=1000/Michalsky 15 allocs: 0.0385 MB 15 allocs: 0.0385 MB 1
ours/n=1000/NOAA 15 allocs: 0.0385 MB 15 allocs: 0.0385 MB 1
ours/n=1000/PSA 9 allocs: 23.6 kB 9 allocs: 23.6 kB 1
ours/n=1000/SPA 15 allocs: 0.0385 MB 15 allocs: 0.0385 MB 1
ours/n=1000/USNO 9 allocs: 23.6 kB 9 allocs: 23.6 kB 1
ours/n=1000/Walraven 9 allocs: 23.6 kB 9 allocs: 23.6 kB 1
ours/n=10000/Interpolated 15 allocs: 0.382 MB 15 allocs: 0.382 MB 1
ours/n=10000/Iqbal 9 allocs: 0.229 MB 9 allocs: 0.229 MB 1
ours/n=10000/Michalsky 15 allocs: 0.382 MB 15 allocs: 0.382 MB 1
ours/n=10000/NOAA 15 allocs: 0.382 MB 15 allocs: 0.382 MB 1
ours/n=10000/PSA 9 allocs: 0.229 MB 9 allocs: 0.229 MB 1
ours/n=10000/SPA 15 allocs: 0.382 MB 15 allocs: 0.382 MB 1
ours/n=10000/USNO 9 allocs: 0.229 MB 9 allocs: 0.229 MB 1
ours/n=10000/Walraven 9 allocs: 0.229 MB 9 allocs: 0.229 MB 1
ours/n=100000/Interpolated 15 allocs: 3.82 MB 15 allocs: 3.82 MB 1
ours/n=100000/Iqbal 9 allocs: 2.29 MB 9 allocs: 2.29 MB 1
ours/n=100000/Michalsky 15 allocs: 3.82 MB 15 allocs: 3.82 MB 1
ours/n=100000/NOAA 15 allocs: 3.82 MB 15 allocs: 3.82 MB 1
ours/n=100000/PSA 9 allocs: 2.29 MB 9 allocs: 2.29 MB 1
ours/n=100000/SPA 15 allocs: 3.82 MB 15 allocs: 3.82 MB 1
ours/n=100000/USNO 9 allocs: 2.29 MB 9 allocs: 2.29 MB 1
ours/n=100000/Walraven 9 allocs: 2.29 MB 9 allocs: 2.29 MB 1
refraction/ARCHER 0 allocs: 0 B 0 allocs: 0 B
refraction/BENNETT 0 allocs: 0 B 0 allocs: 0 B
refraction/MICHALSKY 0 allocs: 0 B 0 allocs: 0 B
refraction/NoRefraction 0 allocs: 0 B 0 allocs: 0 B
refraction/SG2 0 allocs: 0 B 0 allocs: 0 B
single/Interpolated 0 allocs: 0 B 0 allocs: 0 B
single/Iqbal 0 allocs: 0 B 0 allocs: 0 B
single/Michalsky 0 allocs: 0 B 0 allocs: 0 B
single/NOAA 0 allocs: 0 B 0 allocs: 0 B
single/PSA 0 allocs: 0 B 0 allocs: 0 B
single/SPA 0 allocs: 0 B 0 allocs: 0 B
single/USNO 0 allocs: 0 B 0 allocs: 0 B
single/Walraven 0 allocs: 0 B 0 allocs: 0 B
solposx/n=100/Iqbal 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100/NOAA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100/PSA 0.039 k allocs: 1.2 kB 0.039 k allocs: 1.2 kB 1
solposx/n=100/SPA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100/USNO 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100/Walraven 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=1000/Iqbal 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=1000/NOAA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=1000/PSA 0.039 k allocs: 1.2 kB 0.039 k allocs: 1.2 kB 1
solposx/n=1000/SPA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=1000/USNO 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=1000/Walraven 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=10000/Iqbal 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=10000/NOAA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=10000/PSA 0.039 k allocs: 1.2 kB 0.039 k allocs: 1.2 kB 1
solposx/n=10000/SPA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=10000/USNO 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=10000/Walraven 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100000/Iqbal 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100000/NOAA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100000/PSA 0.039 k allocs: 1.2 kB 0.039 k allocs: 1.2 kB 1
solposx/n=100000/SPA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100000/USNO 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100000/Walraven 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
time_to_load 0.145 k allocs: 11 kB 0.145 k allocs: 11 kB 1

@github-actions

github-actions Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia vpre)

Time benchmarks
main cf03e37... main / cf03e37...
ours/n=100/Interpolated 0.0259 ± 0.00025 ms 0.0261 ± 0.0002 ms 0.992 ± 0.012
ours/n=100/Iqbal 0.0131 ± 0.00011 ms 0.0131 ± 9.1e-05 ms 1 ± 0.011
ours/n=100/Michalsky 0.0315 ± 0.00016 ms 0.0314 ± 0.00018 ms 1 ± 0.0077
ours/n=100/NOAA 0.0424 ± 0.00018 ms 0.0424 ± 0.00021 ms 0.999 ± 0.0065
ours/n=100/PSA 0.0166 ± 0.00014 ms 0.0165 ± 0.00014 ms 1 ± 0.012
ours/n=100/SPA 0.44 ± 0.014 ms 0.42 ± 0.0082 ms 1.05 ± 0.039
ours/n=100/USNO 0.0404 ± 0.00024 ms 0.0406 ± 0.00018 ms 0.996 ± 0.0074
ours/n=100/Walraven 0.0195 ± 0.00045 ms 0.0198 ± 0.00041 ms 0.984 ± 0.031
ours/n=1000/Interpolated 0.257 ± 0.0091 ms 0.258 ± 0.0088 ms 0.993 ± 0.049
ours/n=1000/Iqbal 0.135 ± 0.0078 ms 0.135 ± 0.00096 ms 1 ± 0.058
ours/n=1000/Michalsky 0.312 ± 0.0087 ms 0.311 ± 0.0087 ms 1 ± 0.04
ours/n=1000/NOAA 0.416 ± 0.0086 ms 0.417 ± 0.0087 ms 0.999 ± 0.029
ours/n=1000/PSA 0.166 ± 0.008 ms 0.165 ± 0.0023 ms 1 ± 0.05
ours/n=1000/SPA 4.34 ± 0.13 ms 4.3 ± 0.075 ms 1.01 ± 0.036
ours/n=1000/USNO 0.394 ± 0.0086 ms 0.395 ± 0.0083 ms 1 ± 0.03
ours/n=1000/Walraven 0.195 ± 0.0079 ms 0.195 ± 0.0048 ms 1 ± 0.048
ours/n=10000/Interpolated 2.68 ± 0.017 ms 2.69 ± 0.018 ms 0.995 ± 0.0093
ours/n=10000/Iqbal 1.42 ± 0.011 ms 1.42 ± 0.01 ms 1 ± 0.01
ours/n=10000/Michalsky 3.24 ± 0.017 ms 3.22 ± 0.016 ms 1 ± 0.0072
ours/n=10000/NOAA 4.18 ± 0.015 ms 4.19 ± 0.015 ms 0.997 ± 0.005
ours/n=10000/PSA 1.68 ± 0.0094 ms 1.68 ± 0.0077 ms 1 ± 0.0073
ours/n=10000/SPA 44.1 ± 1.3 ms 42.9 ± 0.23 ms 1.03 ± 0.031
ours/n=10000/USNO 3.98 ± 0.018 ms 3.99 ± 0.0076 ms 0.998 ± 0.0048
ours/n=10000/Walraven 1.97 ± 0.0065 ms 1.97 ± 0.0057 ms 1 ± 0.0044
ours/n=100000/Interpolated 27.5 ± 1.6 ms 27.6 ± 1.7 ms 0.995 ± 0.084
ours/n=100000/Iqbal 14.3 ± 0.37 ms 14.3 ± 0.39 ms 1 ± 0.038
ours/n=100000/Michalsky 32.7 ± 1.6 ms 32.6 ± 1.5 ms 1 ± 0.067
ours/n=100000/NOAA 42.7 ± 1.4 ms 42.8 ± 1.1 ms 0.997 ± 0.041
ours/n=100000/PSA 16.9 ± 0.33 ms 16.9 ± 0.39 ms 1 ± 0.03
ours/n=100000/SPA 448 ± 8.2 ms 434 ± 0.89 ms 1.03 ± 0.019
ours/n=100000/USNO 40.3 ± 0.67 ms 40.3 ± 0.28 ms 1 ± 0.018
ours/n=100000/Walraven 19.7 ± 0.48 ms 19.7 ± 0.36 ms 1 ± 0.031
refraction/ARCHER 0.00024 ± 1e-05 ms 0.00024 ± 1e-06 ms 1 ± 0.042
refraction/BENNETT 0.00024 ± 1e-05 ms 0.00024 ± 1e-05 ms 1 ± 0.059
refraction/MICHALSKY 0.0002 ± 1e-06 ms 0.00021 ± 1e-06 ms 0.952 ± 0.0066
refraction/NoRefraction 0.0002 ± 9e-06 ms 0.0002 ± 1e-05 ms 1 ± 0.067
refraction/SG2 0.00025 ± 1e-06 ms 0.00025 ± 1e-06 ms 1 ± 0.0057
single/Interpolated 0.000401 ± 9e-06 ms 0.000401 ± 1e-06 ms 1 ± 0.023
single/Iqbal 0.00018 ± 1e-06 ms 0.00018 ± 1e-06 ms 1 ± 0.0079
single/Michalsky 0.000321 ± 1e-05 ms 0.000321 ± 1e-06 ms 1 ± 0.031
single/NOAA 0.000451 ± 1e-05 ms 0.000451 ± 0 ms 1 ± 0.022
single/PSA 0.0002 ± 1e-05 ms 0.0002 ± 1e-05 ms 1 ± 0.071
single/SPA 0.00396 ± 0.0001 ms 0.00395 ± 3e-05 ms 1 ± 0.027
single/USNO 0.000411 ± 1e-06 ms 0.000411 ± 0 ms 1 ± 0.0024
single/Walraven 0.000231 ± 1e-05 ms 0.000231 ± 1e-05 ms 1 ± 0.061
solposx/n=100/Iqbal 2.26 ± 0.04 ms 2.22 ± 0.032 ms 1.02 ± 0.023
solposx/n=100/NOAA 3.99 ± 0.049 ms 3.94 ± 0.043 ms 1.01 ± 0.017
solposx/n=100/PSA 2.81 ± 0.037 ms 2.85 ± 0.04 ms 0.985 ± 0.019
solposx/n=100/SPA 3.15 ± 0.026 ms 3.07 ± 0.025 ms 1.03 ± 0.012
solposx/n=100/USNO 3.13 ± 0.065 ms 3.05 ± 0.039 ms 1.03 ± 0.025
solposx/n=100/Walraven 1.15 ± 0.023 ms 1.12 ± 0.02 ms 1.03 ± 0.028
solposx/n=1000/Iqbal 2.57 ± 0.047 ms 2.53 ± 0.036 ms 1.01 ± 0.023
solposx/n=1000/NOAA 4.69 ± 0.075 ms 4.68 ± 0.079 ms 1 ± 0.023
solposx/n=1000/PSA 3.21 ± 0.05 ms 3.24 ± 0.037 ms 0.993 ± 0.019
solposx/n=1000/SPA 7.72 ± 0.04 ms 7.64 ± 0.037 ms 1.01 ± 0.0072
solposx/n=1000/USNO 7.32 ± 0.079 ms 7.28 ± 0.067 ms 1.01 ± 0.014
solposx/n=1000/Walraven 1.44 ± 0.031 ms 1.41 ± 0.032 ms 1.02 ± 0.032
solposx/n=10000/Iqbal 5.27 ± 0.063 ms 5.31 ± 0.066 ms 0.992 ± 0.017
solposx/n=10000/NOAA 10.6 ± 0.11 ms 10.6 ± 0.12 ms 0.993 ± 0.015
solposx/n=10000/PSA 6.59 ± 0.063 ms 6.64 ± 0.078 ms 0.992 ± 0.015
solposx/n=10000/SPA 50.3 ± 0.33 ms 50.7 ± 0.6 ms 0.993 ± 0.013
solposx/n=10000/USNO 48.6 ± 0.63 ms 48.9 ± 0.87 ms 0.993 ± 0.022
solposx/n=10000/Walraven 3.94 ± 0.037 ms 3.93 ± 0.036 ms 1 ± 0.013
solposx/n=100000/Iqbal 30.4 ± 0.31 ms 30.9 ± 0.53 ms 0.983 ± 0.019
solposx/n=100000/NOAA 66.2 ± 0.73 ms 66.8 ± 0.62 ms 0.992 ± 0.014
solposx/n=100000/PSA 38.7 ± 0.37 ms 39.1 ± 0.59 ms 0.99 ± 0.018
solposx/n=100000/SPA 496 ± 5.2 ms 497 ± 3.1 ms 0.997 ± 0.012
solposx/n=100000/USNO 471 ± 30 ms 464 ± 28 ms 1.02 ± 0.09
solposx/n=100000/Walraven 28.4 ± 0.31 ms 28.6 ± 0.4 ms 0.992 ± 0.018
time_to_load 0.0714 ± 0.00093 s 0.0702 ± 0.001 s 1.02 ± 0.02
Memory benchmarks
main cf03e37... main / cf03e37...
ours/n=100/Interpolated 10 allocs: 4.53 kB 10 allocs: 4.53 kB 1
ours/n=100/Iqbal 6 allocs: 2.72 kB 6 allocs: 2.72 kB 1
ours/n=100/Michalsky 10 allocs: 4.53 kB 10 allocs: 4.53 kB 1
ours/n=100/NOAA 10 allocs: 4.53 kB 10 allocs: 4.53 kB 1
ours/n=100/PSA 6 allocs: 2.72 kB 6 allocs: 2.72 kB 1
ours/n=100/SPA 10 allocs: 4.53 kB 10 allocs: 4.53 kB 1
ours/n=100/USNO 6 allocs: 2.72 kB 6 allocs: 2.72 kB 1
ours/n=100/Walraven 6 allocs: 2.72 kB 6 allocs: 2.72 kB 1
ours/n=1000/Interpolated 15 allocs: 0.0385 MB 15 allocs: 0.0385 MB 1
ours/n=1000/Iqbal 9 allocs: 23.6 kB 9 allocs: 23.6 kB 1
ours/n=1000/Michalsky 15 allocs: 0.0385 MB 15 allocs: 0.0385 MB 1
ours/n=1000/NOAA 15 allocs: 0.0385 MB 15 allocs: 0.0385 MB 1
ours/n=1000/PSA 9 allocs: 23.6 kB 9 allocs: 23.6 kB 1
ours/n=1000/SPA 15 allocs: 0.0385 MB 15 allocs: 0.0385 MB 1
ours/n=1000/USNO 9 allocs: 23.6 kB 9 allocs: 23.6 kB 1
ours/n=1000/Walraven 9 allocs: 23.6 kB 9 allocs: 23.6 kB 1
ours/n=10000/Interpolated 15 allocs: 0.382 MB 15 allocs: 0.382 MB 1
ours/n=10000/Iqbal 9 allocs: 0.229 MB 9 allocs: 0.229 MB 1
ours/n=10000/Michalsky 15 allocs: 0.382 MB 15 allocs: 0.382 MB 1
ours/n=10000/NOAA 15 allocs: 0.382 MB 15 allocs: 0.382 MB 1
ours/n=10000/PSA 9 allocs: 0.229 MB 9 allocs: 0.229 MB 1
ours/n=10000/SPA 15 allocs: 0.382 MB 15 allocs: 0.382 MB 1
ours/n=10000/USNO 9 allocs: 0.229 MB 9 allocs: 0.229 MB 1
ours/n=10000/Walraven 9 allocs: 0.229 MB 9 allocs: 0.229 MB 1
ours/n=100000/Interpolated 15 allocs: 3.82 MB 15 allocs: 3.82 MB 1
ours/n=100000/Iqbal 9 allocs: 2.29 MB 9 allocs: 2.29 MB 1
ours/n=100000/Michalsky 15 allocs: 3.82 MB 15 allocs: 3.82 MB 1
ours/n=100000/NOAA 15 allocs: 3.82 MB 15 allocs: 3.82 MB 1
ours/n=100000/PSA 9 allocs: 2.29 MB 9 allocs: 2.29 MB 1
ours/n=100000/SPA 15 allocs: 3.82 MB 15 allocs: 3.82 MB 1
ours/n=100000/USNO 9 allocs: 2.29 MB 9 allocs: 2.29 MB 1
ours/n=100000/Walraven 9 allocs: 2.29 MB 9 allocs: 2.29 MB 1
refraction/ARCHER 0 allocs: 0 B 0 allocs: 0 B
refraction/BENNETT 0 allocs: 0 B 0 allocs: 0 B
refraction/MICHALSKY 0 allocs: 0 B 0 allocs: 0 B
refraction/NoRefraction 0 allocs: 0 B 0 allocs: 0 B
refraction/SG2 0 allocs: 0 B 0 allocs: 0 B
single/Interpolated 0 allocs: 0 B 0 allocs: 0 B
single/Iqbal 0 allocs: 0 B 0 allocs: 0 B
single/Michalsky 0 allocs: 0 B 0 allocs: 0 B
single/NOAA 0 allocs: 0 B 0 allocs: 0 B
single/PSA 0 allocs: 0 B 0 allocs: 0 B
single/SPA 0 allocs: 0 B 0 allocs: 0 B
single/USNO 0 allocs: 0 B 0 allocs: 0 B
single/Walraven 0 allocs: 0 B 0 allocs: 0 B
solposx/n=100/Iqbal 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100/NOAA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100/PSA 0.039 k allocs: 1.2 kB 0.039 k allocs: 1.2 kB 1
solposx/n=100/SPA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100/USNO 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100/Walraven 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=1000/Iqbal 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=1000/NOAA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=1000/PSA 0.039 k allocs: 1.2 kB 0.039 k allocs: 1.2 kB 1
solposx/n=1000/SPA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=1000/USNO 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=1000/Walraven 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=10000/Iqbal 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=10000/NOAA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=10000/PSA 0.039 k allocs: 1.2 kB 0.039 k allocs: 1.2 kB 1
solposx/n=10000/SPA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=10000/USNO 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=10000/Walraven 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100000/Iqbal 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100000/NOAA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100000/PSA 0.039 k allocs: 1.2 kB 0.039 k allocs: 1.2 kB 1
solposx/n=100000/SPA 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100000/USNO 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
solposx/n=100000/Walraven 10 allocs: 0.531 kB 10 allocs: 0.531 kB 1
time_to_load 0.205 k allocs: 11.9 kB 0.205 k allocs: 11.9 kB 1

@codecov

codecov Bot commented Jul 31, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (e150bcb) to head (cf03e37).

Additional details and impacted files
@@            Coverage Diff            @@
##              main      #122   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           21        21           
  Lines          754       764   +10     
=========================================
+ Hits           754       764   +10     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

transit_sunrise_sunset rounds the event times to a whole second in order to
build a DateTime. That discards the sub-second part, and with it anything the
element type carries beyond a value. The solve already runs at the observer's
element type, so the information exists right up to that final conversion and
is then thrown away.

transit_sunrise_sunset_seconds returns the same events as seconds since
midnight UTC, keeping the element type. A Measurement observer therefore yields
event times with an uncertainty, and a dual-valued observer yields
differentiable ones. Neither was possible before, and the DateTime variant could
not even be finite-differenced, since a step small enough to be a derivative is
swamped by the rounding.

The conversion now dispatches on the requested type, so the DateTime and
ZonedDateTime paths are untouched, including the polar day and night branch.
TransitSunriseSunset needed no change, having been made generic when TimeZones
moved to an extension.

Covered from both directions: the propagated uncertainty is checked against a
finite-difference gradient, the ForwardDiff derivative against the same, and the
two variants are asserted to describe the same instant for a Float64 observer.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NQ9zmXUHQtA5suiMB8UdA7
@langestefan langestefan changed the title Cover Measurements.jl support and relax the Observer zero defaults Measurements.jl support, and event times at the observer's element type Jul 31, 2026
Codecov flagged two uncovered lines in srt.jl. The cause was that nothing
called transit_sunrise_sunset_seconds with a Date, so that method was never
compiled.

Adds a case for it, asserting it agrees with passing midnight of the same day
as a DateTime, and one for the polar branch, which has to return midnight at
the requested element type rather than falling back to a DateTime. The polar
line was already covered by the DateTime path, so it was not the coverage
failure, but it is behaviour this change introduced and was going untested.

A full run with coverage now reports no uncovered lines anywhere in src.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NQ9zmXUHQtA5suiMB8UdA7
@langestefan
langestefan merged commit f699a7a into main Jul 31, 2026
18 checks passed
@langestefan
langestefan deleted the feature/measurements-support branch July 31, 2026 12:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant