Skip to content

Support type generic precision#94

Merged
langestefan merged 14 commits into
mainfrom
feature/type-generic-precision
Jul 27, 2026
Merged

Support type generic precision#94
langestefan merged 14 commits into
mainfrom
feature/type-generic-precision

Conversation

@langestefan

Copy link
Copy Markdown
Member

No description provided.

@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia v1)

Time benchmarks
main 7b32199... main / 7b32199...
ours/n=100/NOAA 0.0423 ± 0.00043 ms 0.0431 ± 0.00025 ms 0.983 ± 0.012
ours/n=100/PSA 0.0165 ± 0.00018 ms 0.0168 ± 0.00014 ms 0.987 ± 0.014
ours/n=100/SPA 0.303 ± 0.0084 ms 0.306 ± 0.0082 ms 0.989 ± 0.038
ours/n=100/USNO 0.0399 ± 0.00022 ms 0.0407 ± 0.0002 ms 0.981 ± 0.0072
ours/n=100/Walraven 0.0198 ± 0.00047 ms 0.0196 ± 0.00047 ms 1.01 ± 0.034
ours/n=1000/NOAA 0.413 ± 0.0089 ms 0.421 ± 0.0088 ms 0.981 ± 0.029
ours/n=1000/PSA 0.166 ± 0.0087 ms 0.167 ± 0.0085 ms 0.991 ± 0.073
ours/n=1000/SPA 3.11 ± 0.018 ms 3.14 ± 0.019 ms 0.989 ± 0.0084
ours/n=1000/USNO 0.388 ± 0.0088 ms 0.396 ± 0.0088 ms 0.98 ± 0.031
ours/n=1000/Walraven 0.195 ± 0.0088 ms 0.197 ± 0.0088 ms 0.989 ± 0.063
ours/n=10000/NOAA 4.16 ± 0.021 ms 4.24 ± 0.018 ms 0.982 ± 0.0065
ours/n=10000/PSA 1.66 ± 0.0094 ms 1.7 ± 0.01 ms 0.978 ± 0.0081
ours/n=10000/SPA 31.2 ± 0.099 ms 31.6 ± 0.068 ms 0.989 ± 0.0038
ours/n=10000/USNO 3.92 ± 0.019 ms 4.01 ± 0.016 ms 0.977 ± 0.006
ours/n=10000/Walraven 1.97 ± 0.011 ms 1.99 ± 0.01 ms 0.988 ± 0.0076
ours/n=100000/NOAA 42.5 ± 0.64 ms 43.2 ± 0.58 ms 0.982 ± 0.02
ours/n=100000/PSA 16.7 ± 0.11 ms 17.1 ± 0.11 ms 0.976 ± 0.0088
ours/n=100000/SPA 314 ± 1.1 ms 317 ± 1.6 ms 0.99 ± 0.006
ours/n=100000/USNO 39.5 ± 0.1 ms 40.4 ± 0.21 ms 0.977 ± 0.0057
ours/n=100000/Walraven 19.9 ± 0.25 ms 20 ± 0.14 ms 0.992 ± 0.014
refraction/ARCHER 0.00023 ± 1e-06 ms 0.00024 ± 1e-05 ms 0.958 ± 0.04
refraction/BENNETT 0.00023 ± 1e-06 ms 0.000231 ± 1e-05 ms 0.996 ± 0.043
refraction/MICHALSKY 0.000191 ± 1e-06 ms 0.0002 ± 1e-06 ms 0.955 ± 0.0069
refraction/NoRefraction 0.00019 ± 1e-06 ms 0.0002 ± 9e-06 ms 0.95 ± 0.043
refraction/SG2 0.000241 ± 1e-06 ms 0.00025 ± 1e-06 ms 0.964 ± 0.0056
single/NOAA 0.000451 ± 1e-06 ms 0.00046 ± 1e-05 ms 0.98 ± 0.021
single/PSA 0.00019 ± 1e-06 ms 0.0002 ± 9e-06 ms 0.95 ± 0.043
single/SPA 0.00311 ± 1.1e-05 ms 0.00311 ± 1e-05 ms 1 ± 0.0048
single/USNO 0.000401 ± 1e-05 ms 0.00042 ± 1e-05 ms 0.955 ± 0.033
single/Walraven 0.000231 ± 1e-05 ms 0.000231 ± 1e-05 ms 1 ± 0.061
solposx/n=100/NOAA 4.05 ± 0.058 ms 4.05 ± 0.065 ms 0.999 ± 0.021
solposx/n=100/PSA 2.88 ± 0.038 ms 2.87 ± 0.042 ms 1 ± 0.02
solposx/n=100/SPA 3.18 ± 0.032 ms 3.17 ± 0.03 ms 1 ± 0.014
solposx/n=100/USNO 3.11 ± 0.038 ms 3.12 ± 0.045 ms 0.999 ± 0.019
solposx/n=100/Walraven 1.15 ± 0.025 ms 1.15 ± 0.026 ms 0.998 ± 0.031
solposx/n=1000/NOAA 4.69 ± 0.06 ms 4.78 ± 0.06 ms 0.981 ± 0.018
solposx/n=1000/PSA 3.26 ± 0.047 ms 3.3 ± 0.047 ms 0.989 ± 0.02
solposx/n=1000/SPA 7.73 ± 0.06 ms 7.69 ± 0.092 ms 1.01 ± 0.014
solposx/n=1000/USNO 7.36 ± 0.065 ms 7.4 ± 0.077 ms 0.995 ± 0.014
solposx/n=1000/Walraven 1.43 ± 0.036 ms 1.44 ± 0.032 ms 0.997 ± 0.033
solposx/n=10000/NOAA 10.9 ± 0.23 ms 10.8 ± 0.17 ms 1.01 ± 0.026
solposx/n=10000/PSA 6.69 ± 0.12 ms 6.75 ± 0.13 ms 0.992 ± 0.026
solposx/n=10000/SPA 51.1 ± 0.39 ms 50.7 ± 0.35 ms 1.01 ± 0.01
solposx/n=10000/USNO 48.8 ± 0.85 ms 49.8 ± 0.73 ms 0.979 ± 0.022
solposx/n=10000/Walraven 3.97 ± 0.051 ms 3.99 ± 0.053 ms 0.996 ± 0.018
solposx/n=100000/NOAA 68.8 ± 0.43 ms 67.6 ± 0.49 ms 1.02 ± 0.0097
solposx/n=100000/PSA 39.6 ± 0.39 ms 39.5 ± 0.66 ms 1 ± 0.019
solposx/n=100000/SPA 505 ± 9.2 ms 498 ± 2.4 ms 1.01 ± 0.019
solposx/n=100000/USNO 471 ± 34 ms 475 ± 34 ms 0.992 ± 0.1
solposx/n=100000/Walraven 29.5 ± 0.4 ms 29 ± 0.5 ms 1.02 ± 0.022
time_to_load 0.173 ± 0.0015 s 0.174 ± 0.002 s 0.999 ± 0.014
Memory benchmarks
main 7b32199... main / 7b32199...
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 Jun 3, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia vpre)

Time benchmarks
main 7b32199... main / 7b32199...
ours/n=100/NOAA 0.0321 ± 0.00031 ms 0.0326 ± 0.00035 ms 0.985 ± 0.014
ours/n=100/PSA 0.014 ± 0.00019 ms 0.014 ± 0.00021 ms 1 ± 0.02
ours/n=100/SPA 0.285 ± 0.055 ms 0.281 ± 0.0049 ms 1.01 ± 0.2
ours/n=100/USNO 0.0286 ± 0.00042 ms 0.0297 ± 0.00043 ms 0.964 ± 0.02
ours/n=100/Walraven 0.0171 ± 0.00026 ms 0.0174 ± 0.00024 ms 0.983 ± 0.02
ours/n=1000/NOAA 0.309 ± 0.0052 ms 0.313 ± 0.0053 ms 0.987 ± 0.023
ours/n=1000/PSA 0.139 ± 0.002 ms 0.139 ± 0.0039 ms 1 ± 0.032
ours/n=1000/SPA 2.89 ± 0.0097 ms 2.9 ± 0.015 ms 0.997 ± 0.0062
ours/n=1000/USNO 0.272 ± 0.0049 ms 0.285 ± 0.0054 ms 0.953 ± 0.025
ours/n=1000/Walraven 0.168 ± 0.0017 ms 0.172 ± 0.0045 ms 0.982 ± 0.027
ours/n=10000/NOAA 3.12 ± 0.02 ms 3.17 ± 0.19 ms 0.983 ± 0.06
ours/n=10000/PSA 1.38 ± 0.0078 ms 1.41 ± 0.018 ms 0.981 ± 0.014
ours/n=10000/SPA 29.1 ± 0.12 ms 29.2 ± 0.17 ms 0.996 ± 0.0071
ours/n=10000/USNO 2.76 ± 0.014 ms 2.89 ± 0.028 ms 0.955 ± 0.01
ours/n=10000/Walraven 1.69 ± 0.007 ms 1.72 ± 0.014 ms 0.983 ± 0.0088
ours/n=100000/NOAA 32.6 ± 1.2 ms 33 ± 1.2 ms 0.989 ± 0.052
ours/n=100000/PSA 14.2 ± 0.45 ms 14.5 ± 0.72 ms 0.978 ± 0.058
ours/n=100000/SPA 293 ± 1.6 ms 293 ± 1.8 ms 0.998 ± 0.0082
ours/n=100000/USNO 28.9 ± 1.2 ms 29.4 ± 0.78 ms 0.981 ± 0.049
ours/n=100000/Walraven 17.1 ± 0.7 ms 17.4 ± 0.67 ms 0.983 ± 0.055
refraction/ARCHER 0.000207 ± 2e-06 ms 0.00022 ± 2.4e-05 ms 0.941 ± 0.1
refraction/BENNETT 0.000207 ± 2e-06 ms 0.00024 ± 2e-06 ms 0.863 ± 0.011
refraction/MICHALSKY 0.000174 ± 2e-06 ms 0.000182 ± 2e-06 ms 0.956 ± 0.015
refraction/NoRefraction 0.00017 ± 2e-06 ms 0.000177 ± 2e-06 ms 0.96 ± 0.016
refraction/SG2 0.000222 ± 2e-06 ms 0.000229 ± 2e-06 ms 0.969 ± 0.012
single/NOAA 0.00032 ± 3e-06 ms 0.00034 ± 8e-06 ms 0.941 ± 0.024
single/PSA 0.00017 ± 2e-06 ms 0.000177 ± 2e-06 ms 0.96 ± 0.016
single/SPA 0.00286 ± 0.00056 ms 0.00291 ± 1.3e-05 ms 0.983 ± 0.19
single/USNO 0.000292 ± 2e-06 ms 0.000302 ± 3e-06 ms 0.967 ± 0.012
single/Walraven 0.00021 ± 2e-06 ms 0.000213 ± 2e-06 ms 0.986 ± 0.013
solposx/n=100/NOAA 2.29 ± 0.042 ms 2.27 ± 0.046 ms 1.01 ± 0.027
solposx/n=100/PSA 1.64 ± 0.037 ms 1.63 ± 0.044 ms 1.01 ± 0.035
solposx/n=100/SPA 2.12 ± 0.033 ms 2.11 ± 0.038 ms 1 ± 0.024
solposx/n=100/USNO 1.86 ± 0.037 ms 1.84 ± 0.041 ms 1.01 ± 0.03
solposx/n=100/Walraven 0.676 ± 0.026 ms 0.665 ± 0.055 ms 1.02 ± 0.092
solposx/n=1000/NOAA 2.85 ± 0.046 ms 2.85 ± 0.046 ms 1 ± 0.023
solposx/n=1000/PSA 1.91 ± 0.038 ms 1.88 ± 0.039 ms 1.02 ± 0.029
solposx/n=1000/SPA 5.32 ± 0.13 ms 5.33 ± 0.11 ms 0.998 ± 0.032
solposx/n=1000/USNO 4.9 ± 0.052 ms 4.92 ± 0.065 ms 0.994 ± 0.017
solposx/n=1000/Walraven 0.871 ± 0.027 ms 0.852 ± 0.027 ms 1.02 ± 0.045
solposx/n=10000/NOAA 7.68 ± 0.071 ms 7.72 ± 0.069 ms 0.995 ± 0.013
solposx/n=10000/PSA 4.33 ± 0.054 ms 4.35 ± 0.059 ms 0.995 ± 0.018
solposx/n=10000/SPA 34.6 ± 0.45 ms 34.8 ± 0.7 ms 0.994 ± 0.024
solposx/n=10000/USNO 34.6 ± 0.55 ms 34.9 ± 0.58 ms 0.993 ± 0.023
solposx/n=10000/Walraven 2.77 ± 0.037 ms 2.77 ± 0.04 ms 1 ± 0.02
solposx/n=100000/NOAA 59.3 ± 0.6 ms 59 ± 0.41 ms 1.01 ± 0.012
solposx/n=100000/PSA 29.6 ± 0.26 ms 29.8 ± 0.37 ms 0.993 ± 0.015
solposx/n=100000/SPA 359 ± 4 ms 361 ± 6.2 ms 0.996 ± 0.02
solposx/n=100000/USNO 350 ± 28 ms 349 ± 27 ms 1 ± 0.11
solposx/n=100000/Walraven 21.5 ± 0.21 ms 21.3 ± 0.21 ms 1.01 ± 0.014
time_to_load 0.104 ± 0.00055 s 0.107 ± 0.0029 s 0.971 ± 0.027
Memory benchmarks
main 7b32199... main / 7b32199...
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

@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (Julia vlts)

Time benchmarks
main 7b32199... main / 7b32199...
ours/n=100/NOAA 0.0434 ± 0.00033 ms 0.044 ± 0.00036 ms 0.987 ± 0.011
ours/n=100/PSA 0.0169 ± 0.00015 ms 0.0172 ± 0.00016 ms 0.983 ± 0.013
ours/n=100/SPA 0.288 ± 0.0082 ms 0.289 ± 0.0081 ms 0.998 ± 0.04
ours/n=100/USNO 0.041 ± 0.0017 ms 0.0418 ± 0.0018 ms 0.98 ± 0.057
ours/n=100/Walraven 0.0189 ± 0.00013 ms 0.0191 ± 0.00014 ms 0.988 ± 0.01
ours/n=1000/NOAA 0.422 ± 0.02 ms 0.413 ± 0.0089 ms 1.02 ± 0.053
ours/n=1000/PSA 0.172 ± 0.0095 ms 0.173 ± 0.0093 ms 0.992 ± 0.077
ours/n=1000/SPA 2.95 ± 0.019 ms 2.95 ± 0.021 ms 1 ± 0.0096
ours/n=1000/USNO 0.391 ± 0.0096 ms 0.398 ± 0.01 ms 0.983 ± 0.035
ours/n=1000/Walraven 0.198 ± 0.0096 ms 0.2 ± 0.0095 ms 0.992 ± 0.067
ours/n=10000/NOAA 4.12 ± 0.016 ms 4.17 ± 0.017 ms 0.989 ± 0.0056
ours/n=10000/PSA 1.69 ± 0.0082 ms 1.74 ± 0.0088 ms 0.969 ± 0.0068
ours/n=10000/SPA 29.6 ± 0.2 ms 29.7 ± 0.21 ms 0.998 ± 0.0097
ours/n=10000/USNO 3.87 ± 0.014 ms 3.95 ± 0.021 ms 0.979 ± 0.0064
ours/n=10000/Walraven 1.93 ± 0.012 ms 1.95 ± 0.0089 ms 0.989 ± 0.0076
ours/n=100000/NOAA 42.1 ± 0.28 ms 42.6 ± 0.18 ms 0.988 ± 0.0078
ours/n=100000/PSA 17 ± 0.056 ms 17.6 ± 0.063 ms 0.97 ± 0.0047
ours/n=100000/SPA 299 ± 2.8 ms 299 ± 2 ms 0.999 ± 0.011
ours/n=100000/USNO 39.1 ± 0.33 ms 39.9 ± 0.24 ms 0.979 ± 0.01
ours/n=100000/Walraven 19.5 ± 0.056 ms 19.6 ± 0.065 ms 0.993 ± 0.0043
refraction/ARCHER 0.00023 ± 1e-06 ms 0.00024 ± 1e-05 ms 0.958 ± 0.04
refraction/BENNETT 0.000221 ± 1e-05 ms 0.00023 ± 1e-06 ms 0.961 ± 0.044
refraction/MICHALSKY 0.00019 ± 1e-06 ms 0.0002 ± 1e-06 ms 0.95 ± 0.0069
refraction/NoRefraction 0.00019 ± 1e-06 ms 0.0002 ± 1e-05 ms 0.95 ± 0.048
refraction/SG2 0.00024 ± 1e-05 ms 0.000241 ± 1e-06 ms 0.996 ± 0.042
single/NOAA 0.000441 ± 0 ms 0.000451 ± 1e-06 ms 0.978 ± 0.0022
single/PSA 0.00019 ± 1e-06 ms 0.0002 ± 1e-05 ms 0.95 ± 0.048
single/SPA 0.00294 ± 1.1e-05 ms 0.00294 ± 1e-05 ms 0.997 ± 0.005
single/USNO 0.000391 ± 1e-05 ms 0.000411 ± 1e-06 ms 0.951 ± 0.024
single/Walraven 0.00023 ± 1e-05 ms 0.00023 ± 1e-05 ms 1 ± 0.061
solposx/n=100/NOAA 4.13 ± 0.1 ms 4.2 ± 0.085 ms 0.983 ± 0.031
solposx/n=100/PSA 2.88 ± 0.073 ms 2.99 ± 0.067 ms 0.961 ± 0.032
solposx/n=100/SPA 3.18 ± 0.061 ms 3.34 ± 0.11 ms 0.953 ± 0.036
solposx/n=100/USNO 3.11 ± 0.062 ms 3.2 ± 0.07 ms 0.971 ± 0.029
solposx/n=100/Walraven 1.15 ± 0.026 ms 1.16 ± 0.028 ms 0.992 ± 0.033
solposx/n=1000/NOAA 4.72 ± 0.097 ms 5 ± 0.1 ms 0.944 ± 0.027
solposx/n=1000/PSA 3.24 ± 0.073 ms 3.45 ± 0.11 ms 0.939 ± 0.037
solposx/n=1000/SPA 7.72 ± 0.13 ms 8.24 ± 0.085 ms 0.936 ± 0.018
solposx/n=1000/USNO 7.42 ± 0.15 ms 7.94 ± 0.12 ms 0.935 ± 0.024
solposx/n=1000/Walraven 1.44 ± 0.036 ms 1.46 ± 0.04 ms 0.984 ± 0.037
solposx/n=10000/NOAA 10.9 ± 0.22 ms 11.2 ± 0.18 ms 0.971 ± 0.025
solposx/n=10000/PSA 6.68 ± 0.13 ms 7.05 ± 0.11 ms 0.948 ± 0.024
solposx/n=10000/SPA 51 ± 0.35 ms 51.7 ± 0.32 ms 0.986 ± 0.0091
solposx/n=10000/USNO 50.8 ± 0.87 ms 50.2 ± 0.79 ms 1.01 ± 0.024
solposx/n=10000/Walraven 3.95 ± 0.083 ms 4.23 ± 0.11 ms 0.935 ± 0.032
solposx/n=100000/NOAA 69.1 ± 0.95 ms 69.2 ± 0.7 ms 1 ± 0.017
solposx/n=100000/PSA 39.4 ± 0.61 ms 40.1 ± 0.66 ms 0.981 ± 0.022
solposx/n=100000/SPA 487 ± 3.6 ms 497 ± 3 ms 0.98 ± 0.0093
solposx/n=100000/USNO 482 ± 45 ms 483 ± 41 ms 0.999 ± 0.12
solposx/n=100000/Walraven 29 ± 0.53 ms 29.6 ± 0.4 ms 0.981 ± 0.022
time_to_load 0.177 ± 0.0049 s 0.184 ± 0.004 s 0.961 ± 0.034
Memory benchmarks
main 7b32199... main / 7b32199...
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

@codecov

codecov Bot commented Jun 3, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (7b8a5f6) to head (7b32199).
⚠️ Report is 3 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main       #94   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           17        18    +1     
  Lines          666       683   +17     
=========================================
+ Hits           666       683   +17     

☔ 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 and others added 7 commits July 24, 2026 18:19
Make solar_position compute at the precision of the input Observer{T}, for all
five algorithms (PSA, NOAA, Walraven, USNO, SPA), from Float16 up to BigFloat.

Keystone is a type-generic time base (src/Positioning/timebase.jl): instead of
the always-Float64 datetime2julian, derive the small Julian-century / day-count
quantities at precision T. PSA/NOAA/Walraven use an integer-split form that is
both Float64-exact and magnitude-safe for low precision; USNO/SPA use a T-typed
julian_date that reproduces the original Float64 arithmetic bit-for-bit (so the
existing 1e-8 reference pins are preserved unchanged).

Also: generic calculate_deltat(::Type{T}, ...), generic default refraction
constructors (HUGHES{T}/BENNETT{T}/SG2{T}) fixing NOAA default refraction for
non-Float64, and per-element T() accumulation in the SPA periodic sums so the
Float64 coefficient tables no longer pin the result to Float64.

Adds test-typestability.jl (@inferred across types x algorithms) and
test-precision.jl (BigFloat convergence, Float64 vs BigFloat, Float32 usable).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Switch SPA (_compute_spa_srt_parameters) and USNO from the T-typed full Julian
date to the integer-split julian_day_j2000 / fractional_hour time base, so they
keep full intra-day resolution at low precision. Float32 SPA goes from ~10 deg
error (Julian-date magnitude under-resolved) to ~0.2 deg; USNO and the other
algorithms reach ~1e-2 deg. Remove the now-unused julian_date helper.

This makes our Float64 output more accurate than the external solposx Float64
references for USNO/SPA (which carry a ~1e-7 Julian-date intra-day artifact in
the sidereal terms), so relax those two reference comparisons to atol 1e-6 in
test-usno.jl, test-spa.jl and test-mtk.jl (PSA/NOAA/Walraven stay at 1e-8). The
solposx reference values themselves are unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
mean_sidereal_time multiplied the day-count by 360.98564736629, reaching ~3.5e6
and costing Float32 ~0.2 deg. Pass the day-count split into exact integer days
and a full-precision [0,1) fraction (julian_day_j2000_split): the 360*n_int
whole rotations vanish mod 360, so only the 0.98564736629 deg/day drift is kept
at magnitude. Float32 SPA improves from ~0.2 deg to ~0.01 deg (worst case over
174 yr); Float64 is unchanged within the solposx 1e-6 tolerance, BigFloat still
converges, and throughput is unaffected (~1.45x faster than Float64, 2x less
memory).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Direction cosines fed to asin/acos can round just past ±1 in Float16/Float32,
throwing a DomainError (e.g. NOAA and Walraven threw on a full-year Float32
sweep). Clamp those arguments to [-1, 1] via a small unit_clamp helper at the 13
asin/acos sites across the five algorithms. The clamp only activates outside the
valid range, which Float64 never reaches for the reference conditions, so Float64
output (and the solposx references) are unchanged. All algorithms now run
crash-free at Float32.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The time-base helpers are internal (not exported), but their docstrings tripped
Documenter's strict missing_docs check (they are not in the manual). Convert them
to plain `#` comments, matching the convention for other internal helpers
(sum_periodic_terms, mean_sidereal_time, ...). Fixes the docs CI build.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Cover the new public-API surface that algorithms don't exercise internally: the
calculate_deltat(::Type{T}, …) methods for the (year, month) and ZonedDateTime
signatures, and the HUGHES{T}()/BENNETT{T}()/SG2{T}() parametric default
constructors. Restores patch coverage.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Document the actual Float16 failure mode (silent NaN from coefficient
  overflow, not DomainErrors — unit_clamp prevents those) and note that
  ΔT is always evaluated in Float64, bounding absolute accuracy for
  wide types.
- Remove the now-unused single-argument fractional_hour(::DateTime) and
  update the new-algorithm guide to the typed time-base helpers.
- Replace mod2pi in PSA with a type-generic wrap of the atan output;
  mod2pi has no Float128 method. Float64 results are bit-identical;
  Float128 now reaches ~1e-30 deg for PSA/SPA/Walraven.
- Document that NOAA/USNO are broken at Float128 by a Quadmath.jl bug:
  its rem() uses round-to-nearest (remainderq) instead of truncated
  (fmodq) semantics, corrupting Base's sind/cosd degree reduction.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CdvBPWUmqyc7dfftjgWVu8
@langestefan
langestefan force-pushed the feature/type-generic-precision branch from 656f8e4 to 905c06c Compare July 24, 2026 16:27
langestefan and others added 2 commits July 27, 2026 11:44
The solposx reference values are computed in Float64 from the full
~2.45e6 Julian Date, so a generic timestamp carries a ~1.5e-10 day
quantization error that puts a ~6e-8 deg artifact into the sidereal
terms. The magnitude-safe time base avoids that error, which forced
the SPA/USNO comparisons up to atol 1e-6.

Instead of tolerating the reference artifact, move the 19 shared test
conditions onto UTC instants whose offset from noon is a multiple of
84.375 s (84375 ms, the odd factor of 86_400_000 ms). At those instants
the full Julian Date is exactly representable in Float64, the solposx
references carry no time-base error, and every algorithm matches them
within 1e-8 again.

All tables regenerated with solposx 1.0.1 after verifying it reproduces
the previous checked-in values digit-for-digit at the old timestamps.
Coverage is preserved: timezone offsets, leap day, 1800/2200 dates,
poles, date line, altitudes, a night case, a low-sun (+0.9 deg) case,
and a nonzero-seconds timestamp (13:41:15). Whole seconds only, because
solposx's usno() mishandles sub-second times (its previous-midnight
t.replace() keeps sub-second fields - to be reported upstream).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01THG1S9aRU29qtH6gJTzpS5
The reference tables were rounded to 8 decimals, which alone injects up
to 5e-9 of comparison error. Emit solposx's exact Float64 outputs with
full round-trip digits instead, and measure the true implementation
floor at the exact-JD instants: PSA ~2e-12, NOAA ~1e-13, Walraven
~2e-14, USNO ~6e-14. Set atol = 1e-10 for these, keeping a margin of
50-500x.

SPA stays at 1e-8 because its ~4e-9 floor belongs to the reference:
pvlib's SPA accumulates the unreduced sidereal term to ~2.6e7 deg by
the year-2200 row, where one ulp is 3.7e-9. Documented in test-spa.jl.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01THG1S9aRU29qtH6gJTzpS5
@langestefan
langestefan force-pushed the feature/type-generic-precision branch from 17b5a8c to 45d4ae0 Compare July 27, 2026 10:13
langestefan and others added 5 commits July 27, 2026 12:20
Add a Numeric precision section to the README and the docs index. It
explains that computation follows the Observer{T} element type and
tabulates, per algorithm, the maximum error against a 256-bit BigFloat
reference and the runtime relative to Float64 for Float32, Float128,
and BigFloat. Measured over dates from 2015 to 2035 and latitudes from
70N to 60S on the vectorized API.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01THG1S9aRU29qtH6gJTzpS5
The guide covers the Observer{T} precision mechanism, the supported
float types, measured accuracy and runtime per algorithm, the
difference between Float128 and BigFloat, and multithreaded benchmarks
for PSA and SPA at Float32, Float64, and Float128 on 16 threads. The
index page section now links to the guide instead of duplicating the
table. Table placeholders use n/a instead of a dash.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01THG1S9aRU29qtH6gJTzpS5
Observer{Float128}(1.0, 2.0) previously threw a MethodError because the
inner constructor requires arguments that already have type T and
defining it disabled the default converting constructors. Add an outer
constructor that accepts any Real arguments plus the degrees to
arcminutes horizon Pair and converts them to T. Calls whose arguments
already match T still dispatch to the inner constructor. Also widen
_horizon_to_degrees from AbstractFloat to Real so integer horizon
keywords work.

Docs now use Observer{Float32}(45.0, 10.0) instead of literal suffixes
in the precision guide, the README, and the Observer docstring.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01THG1S9aRU29qtH6gJTzpS5
Convert the two code blocks in the precision guide to @example blocks
so the docs build runs them and shows real output. The threading
example now computes one day of minute timestamps instead of a year to
keep the docs build fast, and its displayed Float128 result shows the
quad precision digits. Quadmath is added to the docs environment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01THG1S9aRU29qtH6gJTzpS5
The Link checker job failed twice in a row on transient timeouts from
slow external sites, first doi.org and then aa.usno.navy.mil, with zero
actually broken links. Raise the lychee timeout to 60 seconds and the
retry count to 4.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01THG1S9aRU29qtH6gJTzpS5
@langestefan
langestefan merged commit 6ff80ad into main Jul 27, 2026
18 checks passed
@langestefan
langestefan deleted the feature/type-generic-precision branch July 27, 2026 11:48
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