Skip to content

Add the Iqbal positioning algorithm - #118

Merged
langestefan merged 7 commits into
mainfrom
feature/iqbal-algorithm
Jul 28, 2026
Merged

Add the Iqbal positioning algorithm#118
langestefan merged 7 commits into
mainfrom
feature/iqbal-algorithm

Conversation

@langestefan

@langestefan langestefan commented Jul 28, 2026

Copy link
Copy Markdown
Member

Summary

Adds the Iqbal solar position algorithm: declination and equation of time from a truncated Fourier series in the day angle (Iqbal 1983, building on Spencer 1971), zenith and azimuth from the standard spherical trigonometry relations, no refraction by default.

  • Implementation follows the current type generic architecture: T <: Real, magnitude safe fractional_hour(T, dt), unit_clamp on the zenith argument, azimuth normalized to [0°, 360°), and solposx's exact operation order so the reference comparison is artifact free. Zero allocations, @inferred clean.
  • Accuracy: matches the exact solposx reference table to 2.8e-14°, tested at the house atol = 1e-10. Measured against a 256 bit BigFloat reference over the standard date/latitude grid: 2.2e-5° at Float32, 2.1e-14° at Float64, 3.1e-32° at Float128. Notably Float128 works here, unlike NOAA and USNO, because Iqbal never feeds large unreduced angles into degree trigonometry.
  • Test dedup: the per file algorithm lists are replaced by a single test_algorithms() helper in expected-values.jl, so a new algorithm registers in the interface, type stability, precision, autodiff, and MTK suites in one place. This also widens coverage that the old lists silently skipped (USNO in the interface tests, SPA in the refraction interface tests).
  • Docs: positioning page section and table row, index table row, precision guide row and Float128 bullet.
  • README restructure (requested alongside): Iqbal row, short sections on the Interpolated wrapper and automatic differentiation with guide links, the previously missing Interpolations row in the extensions table, and the numeric precision section condensed and moved down, with the full measured table living in the precision guide.

Test plan

  • test-iqbal.jl enabled against the exact solposx references at atol = 1e-10
  • Iqbal included in interface, type stability, BigFloat convergence, autodiff, and MTK accuracy suites via the shared list
  • Full Pkg.test() green locally (including Aqua and JET)
  • Docs build clean

🤖 Generated with Claude Code

langestefan and others added 3 commits July 28, 2026 16:44
Ports the Iqbal implementation to the type generic architecture with
the solposx operation order, unit_clamp on the zenith argument, and
azimuth normalized to [0, 360). The enabled reference test matches the
exact solposx table to 2.8e-14 degrees, five orders inside the 1e-10
tolerance the other algorithms use. Measured precision entries: 2.2e-5
degrees at Float32, 2.1e-14 at Float64, 3.1e-32 at Float128, which
works here because Iqbal never feeds large angles into degree trig.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg3j4XXUooMvDgUpRajxTq
test_algorithms() in expected-values.jl replaces the per file lists, so
a new algorithm registers everywhere in one place. This also widens
coverage: the interface tests previously skipped USNO and the
refraction interface tests skipped SPA.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg3j4XXUooMvDgUpRajxTq
Adds the Iqbal row, short sections on the Interpolated wrapper and
automatic differentiation with pointers to their guides, an
Interpolations row in the extensions table, and condenses the numeric
precision section to a summary near the end, with the full measured
table living in the precision guide.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg3j4XXUooMvDgUpRajxTq
@github-actions

github-actions Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia vlts)

Time benchmarks
main 85a5af6... main / 85a5af6...
ours/n=100/NOAA 0.0441 ± 0.00033 ms 0.0441 ± 0.0003 ms 0.999 ± 0.01
ours/n=100/PSA 0.017 ± 0.00014 ms 0.0171 ± 0.00013 ms 0.993 ± 0.011
ours/n=100/SPA 0.291 ± 0.0082 ms 0.289 ± 0.008 ms 1.01 ± 0.04
ours/n=100/USNO 0.0421 ± 0.0016 ms 0.0421 ± 0.0017 ms 0.999 ± 0.057
ours/n=100/Walraven 0.0191 ± 0.00012 ms 0.0191 ± 0.00012 ms 1 ± 0.0089
ours/n=1000/NOAA 0.415 ± 0.0085 ms 0.414 ± 0.0084 ms 1 ± 0.029
ours/n=1000/PSA 0.177 ± 0.0094 ms 0.17 ± 0.00086 ms 1.04 ± 0.055
ours/n=1000/SPA 2.97 ± 0.017 ms 2.95 ± 0.0052 ms 1.01 ± 0.0061
ours/n=1000/USNO 0.4 ± 0.0091 ms 0.393 ± 0.0082 ms 1.02 ± 0.032
ours/n=1000/Walraven 0.2 ± 0.0095 ms 0.199 ± 0.0093 ms 1 ± 0.067
ours/n=10000/NOAA 4.18 ± 0.01 ms 4.18 ± 0.011 ms 1 ± 0.0036
ours/n=10000/PSA 1.73 ± 0.007 ms 1.73 ± 0.0063 ms 0.999 ± 0.0054
ours/n=10000/SPA 29.8 ± 0.19 ms 29.7 ± 0.093 ms 1.01 ± 0.0072
ours/n=10000/USNO 3.96 ± 0.01 ms 3.96 ± 0.0097 ms 1 ± 0.0035
ours/n=10000/Walraven 1.94 ± 0.0055 ms 1.94 ± 0.0063 ms 1 ± 0.0043
ours/n=100000/NOAA 42.7 ± 0.18 ms 42.7 ± 1 ms 1 ± 0.024
ours/n=100000/PSA 17.4 ± 0.051 ms 17.4 ± 0.06 ms 0.999 ± 0.0045
ours/n=100000/SPA 300 ± 1.9 ms 298 ± 1.4 ms 1.01 ± 0.0078
ours/n=100000/USNO 39.9 ± 0.21 ms 39.9 ± 0.12 ms 1 ± 0.006
ours/n=100000/Walraven 19.5 ± 0.041 ms 19.5 ± 0.066 ms 1 ± 0.004
refraction/ARCHER 0.00024 ± 1e-05 ms 0.00024 ± 1e-05 ms 1 ± 0.059
refraction/BENNETT 0.00023 ± 1e-06 ms 0.000231 ± 1e-06 ms 0.996 ± 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 ± 1e-05 ms 1 ± 0.071
refraction/SG2 0.000241 ± 1e-06 ms 0.000241 ± 1e-05 ms 1 ± 0.042
single/NOAA 0.000451 ± 0 ms 0.000451 ± 0 ms 1 ± 0
single/PSA 0.0002 ± 1e-05 ms 0.0002 ± 1e-06 ms 1 ± 0.05
single/SPA 0.00299 ± 1.1e-05 ms 0.00296 ± 1.1e-05 ms 1.01 ± 0.0053
single/USNO 0.000411 ± 1e-06 ms 0.000411 ± 1e-06 ms 1 ± 0.0034
single/Walraven 0.000221 ± 1e-05 ms 0.000221 ± 1e-05 ms 1 ± 0.064
solposx/n=100/NOAA 3.99 ± 0.059 ms 4.13 ± 0.049 ms 0.968 ± 0.018
solposx/n=100/PSA 2.85 ± 0.041 ms 2.95 ± 0.037 ms 0.967 ± 0.018
solposx/n=100/SPA 3.15 ± 0.027 ms 3.17 ± 0.029 ms 0.992 ± 0.012
solposx/n=100/USNO 3.06 ± 0.047 ms 3.16 ± 0.033 ms 0.966 ± 0.018
solposx/n=100/Walraven 1.14 ± 0.023 ms 1.17 ± 0.02 ms 0.977 ± 0.026
solposx/n=1000/NOAA 4.7 ± 0.051 ms 4.89 ± 0.059 ms 0.962 ± 0.016
solposx/n=1000/PSA 3.21 ± 0.053 ms 3.39 ± 0.049 ms 0.948 ± 0.021
solposx/n=1000/SPA 7.71 ± 0.048 ms 7.73 ± 0.057 ms 0.997 ± 0.0097
solposx/n=1000/USNO 7.32 ± 0.067 ms 7.39 ± 0.077 ms 0.99 ± 0.014
solposx/n=1000/Walraven 1.43 ± 0.031 ms 1.47 ± 0.03 ms 0.972 ± 0.029
solposx/n=10000/NOAA 10.8 ± 0.18 ms 10.9 ± 0.16 ms 0.984 ± 0.022
solposx/n=10000/PSA 6.69 ± 0.098 ms 6.81 ± 0.099 ms 0.983 ± 0.02
solposx/n=10000/SPA 50.6 ± 0.3 ms 50.7 ± 0.36 ms 0.997 ± 0.0092
solposx/n=10000/USNO 48.5 ± 0.76 ms 48.2 ± 0.72 ms 1.01 ± 0.022
solposx/n=10000/Walraven 3.95 ± 0.046 ms 3.99 ± 0.044 ms 0.991 ± 0.016
solposx/n=100000/NOAA 68.1 ± 0.6 ms 67.9 ± 0.59 ms 1 ± 0.012
solposx/n=100000/PSA 39.2 ± 0.55 ms 39.8 ± 0.65 ms 0.987 ± 0.021
solposx/n=100000/SPA 482 ± 2.4 ms 493 ± 6.2 ms 0.978 ± 0.013
solposx/n=100000/USNO 470 ± 31 ms 461 ± 38 ms 1.02 ± 0.11
solposx/n=100000/Walraven 28.7 ± 0.37 ms 28.9 ± 0.52 ms 0.992 ± 0.022
time_to_load 0.165 ± 0.0025 s 0.164 ± 0.0013 s 1.01 ± 0.017
Memory benchmarks
main 85a5af6... main / 85a5af6...
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/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/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/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/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/NOAA 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
solposx/n=100/PSA 0.06 k allocs: 1.66 kB 0.06 k allocs: 1.66 kB 1
solposx/n=100/SPA 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
solposx/n=100/USNO 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
solposx/n=100/Walraven 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
solposx/n=1000/NOAA 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
solposx/n=1000/PSA 0.06 k allocs: 1.66 kB 0.06 k allocs: 1.66 kB 1
solposx/n=1000/SPA 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
solposx/n=1000/USNO 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
solposx/n=1000/Walraven 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
solposx/n=10000/NOAA 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
solposx/n=10000/PSA 0.06 k allocs: 1.66 kB 0.06 k allocs: 1.66 kB 1
solposx/n=10000/SPA 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
solposx/n=10000/USNO 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
solposx/n=10000/Walraven 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
solposx/n=100000/NOAA 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
solposx/n=100000/PSA 0.06 k allocs: 1.66 kB 0.06 k allocs: 1.66 kB 1
solposx/n=100000/SPA 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
solposx/n=100000/USNO 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
solposx/n=100000/Walraven 22 allocs: 0.781 kB 22 allocs: 0.781 kB 1
time_to_load 0.153 k allocs: 14.5 kB 0.153 k allocs: 14.5 kB 1

The positioning page cites Iqb83 and Spe71, which were missing from
refs.bib and failed the docs build.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg3j4XXUooMvDgUpRajxTq
@github-actions

github-actions Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia v1)

Time benchmarks
main 85a5af6... main / 85a5af6...
ours/n=100/NOAA 0.0386 ± 0.00037 ms 0.0386 ± 0.00036 ms 1 ± 0.013
ours/n=100/PSA 0.0168 ± 0.00023 ms 0.0169 ± 0.00024 ms 0.998 ± 0.02
ours/n=100/SPA 0.341 ± 0.0069 ms 0.34 ± 0.0069 ms 1 ± 0.029
ours/n=100/USNO 0.0355 ± 0.00044 ms 0.0356 ± 0.00048 ms 1 ± 0.018
ours/n=100/Walraven 0.0209 ± 0.00026 ms 0.0209 ± 0.00026 ms 0.999 ± 0.018
ours/n=1000/NOAA 0.374 ± 0.0075 ms 0.373 ± 0.0072 ms 1 ± 0.028
ours/n=1000/PSA 0.167 ± 0.0068 ms 0.167 ± 0.0066 ms 1 ± 0.057
ours/n=1000/SPA 3.52 ± 0.016 ms 3.51 ± 0.014 ms 1 ± 0.0061
ours/n=1000/USNO 0.346 ± 0.0072 ms 0.344 ± 0.0071 ms 1.01 ± 0.029
ours/n=1000/Walraven 0.209 ± 0.0076 ms 0.209 ± 0.0078 ms 1 ± 0.052
ours/n=10000/NOAA 3.78 ± 0.039 ms 3.78 ± 0.028 ms 1 ± 0.013
ours/n=10000/PSA 1.72 ± 0.01 ms 1.72 ± 0.01 ms 1 ± 0.0085
ours/n=10000/SPA 35.3 ± 0.098 ms 35.2 ± 0.092 ms 1 ± 0.0038
ours/n=10000/USNO 3.49 ± 0.038 ms 3.48 ± 0.025 ms 1 ± 0.013
ours/n=10000/Walraven 2.1 ± 0.011 ms 2.1 ± 0.013 ms 0.999 ± 0.0079
ours/n=100000/NOAA 39.2 ± 0.83 ms 39.3 ± 1.1 ms 0.998 ± 0.035
ours/n=100000/PSA 17.5 ± 0.59 ms 17.5 ± 0.21 ms 1 ± 0.036
ours/n=100000/SPA 355 ± 1 ms 354 ± 1.1 ms 1 ± 0.0043
ours/n=100000/USNO 35.4 ± 0.19 ms 35.3 ± 0.25 ms 1 ± 0.0088
ours/n=100000/Walraven 21.1 ± 0.68 ms 21.1 ± 0.19 ms 1 ± 0.034
refraction/ARCHER 0.000259 ± 3e-06 ms 0.000258 ± 3e-06 ms 1 ± 0.016
refraction/BENNETT 0.000258 ± 3e-06 ms 0.000258 ± 3e-06 ms 1 ± 0.016
refraction/MICHALSKY 0.00022 ± 3e-06 ms 0.000219 ± 2e-06 ms 1 ± 0.016
refraction/NoRefraction 0.000214 ± 2e-06 ms 0.000214 ± 3e-06 ms 1 ± 0.017
refraction/SG2 0.000275 ± 2e-06 ms 0.000275 ± 2e-06 ms 1 ± 0.01
single/NOAA 0.000397 ± 3e-06 ms 0.000397 ± 4e-06 ms 1 ± 0.013
single/PSA 0.000214 ± 3e-06 ms 0.000214 ± 2e-06 ms 1 ± 0.017
single/SPA 0.00354 ± 1.9e-05 ms 0.00354 ± 2.1e-05 ms 1 ± 0.008
single/USNO 0.000368 ± 4e-06 ms 0.000367 ± 4e-06 ms 1 ± 0.015
single/Walraven 0.000257 ± 4e-06 ms 0.000257 ± 3e-06 ms 1 ± 0.019
solposx/n=100/NOAA 2.74 ± 0.05 ms 2.81 ± 0.056 ms 0.975 ± 0.026
solposx/n=100/PSA 1.96 ± 0.042 ms 2.03 ± 0.047 ms 0.968 ± 0.03
solposx/n=100/SPA 2.51 ± 0.041 ms 2.55 ± 0.05 ms 0.986 ± 0.025
solposx/n=100/USNO 2.22 ± 0.04 ms 2.27 ± 0.048 ms 0.975 ± 0.027
solposx/n=100/Walraven 0.797 ± 0.026 ms 0.818 ± 0.027 ms 0.974 ± 0.044
solposx/n=1000/NOAA 3.4 ± 0.052 ms 3.5 ± 0.055 ms 0.97 ± 0.021
solposx/n=1000/PSA 2.28 ± 0.042 ms 2.35 ± 0.049 ms 0.97 ± 0.027
solposx/n=1000/SPA 6.28 ± 0.067 ms 6.45 ± 0.08 ms 0.973 ± 0.016
solposx/n=1000/USNO 5.86 ± 0.062 ms 5.91 ± 0.089 ms 0.991 ± 0.018
solposx/n=1000/Walraven 1.04 ± 0.027 ms 1.07 ± 0.03 ms 0.97 ± 0.037
solposx/n=10000/NOAA 9.64 ± 0.19 ms 9.75 ± 0.18 ms 0.988 ± 0.027
solposx/n=10000/PSA 5.28 ± 0.11 ms 5.36 ± 0.096 ms 0.985 ± 0.027
solposx/n=10000/SPA 42.9 ± 0.44 ms 42.9 ± 0.49 ms 0.999 ± 0.015
solposx/n=10000/USNO 42.2 ± 0.67 ms 42.4 ± 0.54 ms 0.996 ± 0.02
solposx/n=10000/Walraven 3.37 ± 0.095 ms 3.4 ± 0.095 ms 0.992 ± 0.039
solposx/n=100000/NOAA 74.6 ± 1.3 ms 75.5 ± 1.2 ms 0.988 ± 0.023
solposx/n=100000/PSA 38.2 ± 0.75 ms 38.2 ± 1.1 ms 0.999 ± 0.034
solposx/n=100000/SPA 422 ± 1.4 ms 426 ± 2.5 ms 0.992 ± 0.0068
solposx/n=100000/USNO 415 ± 49 ms 414 ± 50 ms 1 ± 0.17
solposx/n=100000/Walraven 27.8 ± 1.3 ms 27.8 ± 1.1 ms 0.999 ± 0.061
time_to_load 0.179 ± 0.0041 s 0.181 ± 0.0012 s 0.988 ± 0.024
Memory benchmarks
main 85a5af6... main / 85a5af6...
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/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/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/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/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/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/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/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/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 28, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia vpre)

Time benchmarks
main 85a5af6... main / 85a5af6...
ours/n=100/NOAA 0.0471 ± 0.0003 ms 0.0405 ± 0.0003 ms 1.16 ± 0.011
ours/n=100/PSA 0.0172 ± 0.00014 ms 0.0172 ± 0.00017 ms 0.999 ± 0.013
ours/n=100/SPA 0.459 ± 0.009 ms 0.464 ± 0.0089 ms 0.988 ± 0.027
ours/n=100/USNO 0.0416 ± 0.00026 ms 0.0379 ± 0.00025 ms 1.1 ± 0.01
ours/n=100/Walraven 0.0207 ± 0.00032 ms 0.0206 ± 0.00035 ms 1.01 ± 0.023
ours/n=1000/NOAA 0.513 ± 0.0093 ms 0.398 ± 0.0087 ms 1.29 ± 0.037
ours/n=1000/PSA 0.173 ± 0.0031 ms 0.174 ± 0.0078 ms 0.999 ± 0.048
ours/n=1000/SPA 4.69 ± 0.021 ms 4.69 ± 0.013 ms 1 ± 0.0053
ours/n=1000/USNO 0.418 ± 0.01 ms 0.373 ± 0.0091 ms 1.12 ± 0.038
ours/n=1000/Walraven 0.208 ± 0.0074 ms 0.208 ± 0.0076 ms 0.999 ± 0.051
ours/n=10000/NOAA 4.72 ± 0.03 ms 4.03 ± 0.016 ms 1.17 ± 0.0087
ours/n=10000/PSA 1.75 ± 0.0076 ms 1.75 ± 0.0074 ms 0.999 ± 0.0061
ours/n=10000/SPA 47.3 ± 0.53 ms 47 ± 0.097 ms 1.01 ± 0.011
ours/n=10000/USNO 4.21 ± 0.04 ms 3.78 ± 0.026 ms 1.12 ± 0.013
ours/n=10000/Walraven 2.08 ± 0.011 ms 2.08 ± 0.011 ms 1 ± 0.0074
ours/n=100000/NOAA 48.3 ± 1.1 ms 41.5 ± 0.68 ms 1.16 ± 0.033
ours/n=100000/PSA 17.5 ± 0.49 ms 17.5 ± 0.3 ms 1 ± 0.033
ours/n=100000/SPA 477 ± 3.6 ms 483 ± 5.9 ms 0.987 ± 0.014
ours/n=100000/USNO 42.4 ± 0.62 ms 38.5 ± 0.59 ms 1.1 ± 0.023
ours/n=100000/Walraven 20.7 ± 0.52 ms 20.7 ± 0.51 ms 1 ± 0.035
refraction/ARCHER 0.000261 ± 1e-06 ms 0.000261 ± 1e-06 ms 1 ± 0.0054
refraction/BENNETT 0.00026 ± 1e-06 ms 0.000261 ± 1e-05 ms 0.996 ± 0.038
refraction/MICHALSKY 0.00022 ± 1e-06 ms 0.00022 ± 1e-06 ms 1 ± 0.0064
refraction/NoRefraction 0.00022 ± 1e-05 ms 0.00022 ± 1e-05 ms 1 ± 0.064
refraction/SG2 0.000271 ± 1e-05 ms 0.00028 ± 1e-05 ms 0.968 ± 0.05
single/NOAA 0.000501 ± 1e-06 ms 0.00045 ± 1e-05 ms 1.11 ± 0.025
single/PSA 0.000211 ± 1e-05 ms 0.000211 ± 1e-05 ms 1 ± 0.067
single/SPA 0.00419 ± 3e-05 ms 0.00423 ± 0.0001 ms 0.991 ± 0.025
single/USNO 0.000461 ± 1e-06 ms 0.00042 ± 1e-05 ms 1.1 ± 0.026
single/Walraven 0.00026 ± 1e-05 ms 0.00026 ± 9e-06 ms 1 ± 0.052
solposx/n=100/NOAA 2.88 ± 0.028 ms 2.89 ± 0.029 ms 0.998 ± 0.014
solposx/n=100/PSA 1.99 ± 0.022 ms 2.01 ± 0.024 ms 0.991 ± 0.016
solposx/n=100/SPA 3.01 ± 0.077 ms 3.02 ± 0.086 ms 0.996 ± 0.038
solposx/n=100/USNO 2.38 ± 0.027 ms 2.39 ± 0.028 ms 0.995 ± 0.016
solposx/n=100/Walraven 0.834 ± 0.015 ms 0.845 ± 0.016 ms 0.988 ± 0.026
solposx/n=1000/NOAA 3.49 ± 0.032 ms 3.52 ± 0.035 ms 0.992 ± 0.014
solposx/n=1000/PSA 2.32 ± 0.025 ms 2.36 ± 0.028 ms 0.983 ± 0.016
solposx/n=1000/SPA 7.55 ± 0.11 ms 7.58 ± 0.11 ms 0.996 ± 0.02
solposx/n=1000/USNO 6.38 ± 0.069 ms 6.4 ± 0.084 ms 0.997 ± 0.017
solposx/n=1000/Walraven 1.12 ± 0.024 ms 1.13 ± 0.025 ms 0.989 ± 0.031
solposx/n=10000/NOAA 9.48 ± 0.082 ms 9.67 ± 0.36 ms 0.981 ± 0.038
solposx/n=10000/PSA 5.68 ± 0.047 ms 5.74 ± 0.07 ms 0.991 ± 0.015
solposx/n=10000/SPA 48.7 ± 0.41 ms 48.9 ± 0.35 ms 0.997 ± 0.011
solposx/n=10000/USNO 47.5 ± 0.7 ms 46.8 ± 0.98 ms 1.01 ± 0.026
solposx/n=10000/Walraven 3.73 ± 0.037 ms 3.76 ± 0.044 ms 0.991 ± 0.015
solposx/n=100000/NOAA 68.4 ± 0.51 ms 68.6 ± 0.28 ms 0.997 ± 0.0085
solposx/n=100000/PSA 39.4 ± 0.61 ms 39.5 ± 0.62 ms 0.998 ± 0.022
solposx/n=100000/SPA 466 ± 3.8 ms 468 ± 3.2 ms 0.995 ± 0.011
solposx/n=100000/USNO 462 ± 32 ms 466 ± 33 ms 0.991 ± 0.097
solposx/n=100000/Walraven 29.5 ± 0.49 ms 29.5 ± 0.63 ms 0.998 ± 0.027
time_to_load 0.128 ± 0.0031 s 0.13 ± 0.0011 s 0.987 ± 0.025
Memory benchmarks
main 85a5af6... main / 85a5af6...
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/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/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/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/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/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/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/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/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

langestefan and others added 3 commits July 28, 2026 17:03
Iqbal joins the AirspeedVelocity position suite, the solposx reference
benchmarks, and the accuracy comparison in the benchmarking guide. The
Interpolated wrapper joins the speed suite with a span covering the
largest vector case, and stays out of the accuracy figures because its
error against the SPA reference is only around 1e-10 degrees.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg3j4XXUooMvDgUpRajxTq
expected_iqbal moves into expected-values.jl because the extensions
tests run before the positioning tests and referenced it too early,
which failed CI on every LTS job. The refraction test list is renamed
to avoid colliding with the new test_algorithms helper. The
benchmarking guide figures derive their axis ranges from the algorithm
list instead of a hardcoded four, and the color sets gain an Iqbal
entry.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg3j4XXUooMvDgUpRajxTq
The throughput and speedup barplots still hardcoded five tick values,
which Makie rejects with six algorithms. The full docs build now passes
end to end.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wg3j4XXUooMvDgUpRajxTq
@codecov

codecov Bot commented Jul 28, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (00d8142) to head (85a5af6).

Additional details and impacted files
@@            Coverage Diff            @@
##              main      #118   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           19        20    +1     
  Lines          735       751   +16     
=========================================
+ Hits           735       751   +16     

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

@langestefan
langestefan merged commit 0bb61c3 into main Jul 28, 2026
19 of 20 checks passed
@langestefan
langestefan deleted the feature/iqbal-algorithm branch July 28, 2026 16:22
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