Skip to content

Conversation

@akoumjian
Copy link
Contributor

@akoumjian akoumjian commented Oct 28, 2025

Note

Adds broad ADES spec coverage and robust validation/parsing to support ground and space observations.

  • Extend ADESObservations with optional fields (identification artSat, IDs, time precision, per-axis precision, optical offsets/geometry, pos/vel/covariance, radar, photometry, context) and include in I/O
  • New PSV diagnostics: detect/validate Keyword Records (lowercase, required obsTime, identification-first), warn on unknown columns, error on data before header, field-count mismatches
  • Writer updates: optional contexts allowed, sorting includes artSat, require at least one ID (including artSat), enforce ADES group column order, clamp/validate obsTime seconds precision, serialize nulls as empty cells, expanded precision controls
  • Value validation: enforce mag in [-5,35] and ctr==399 with configurable enforcement (error|warn|autofix)
  • Parser updates: generic header detection (incl. artSat-only), convert new numeric/int/string columns, preserve/strip fields appropriately
  • New tests cover round-trips, optional header omission, group ordering, null emission, artSat headers, precision cap, and PSV token casing

Written by Cursor Bugbot for commit 4996d14. This will update automatically on new commits. Configure here.

Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Python Benchmark

Details
Benchmark suite Current: 4996d14 Previous: 58fa623 Ratio
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[1-origin=SUN,-frame=equatorial,-to=SphericalCoordinates,] 542.6637491239336 iter/sec (stddev: 0.00008409441507886672) 545.3904248986381 iter/sec (stddev: 0.0001317758856522497) 1.01
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[1-origin=SUN,-frame=equatorial,-to=KeplerianCoordinates,] 369.49993799822164 iter/sec (stddev: 0.0001739631245149254) 353.96092540404084 iter/sec (stddev: 0.00023892013099094357) 0.96
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[1-origin=SUN,-frame=equatorial,-to=CometaryCoordinates,] 404.51202419970406 iter/sec (stddev: 0.00014663499761254244) 392.8964942489649 iter/sec (stddev: 0.00020265636436880857) 0.97
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[1-origin=SUN,-frame=ecliptic,-to=SphericalCoordinates,] 576.8680358054501 iter/sec (stddev: 0.000047219383244737015) 569.5677963545015 iter/sec (stddev: 0.00003295459651678336) 0.99
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[1-origin=SUN,-frame=ecliptic,-to=KeplerianCoordinates,] 391.02839313870254 iter/sec (stddev: 0.00005506884488234622) 383.9660466199227 iter/sec (stddev: 0.000029183448877038138) 0.98
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[1-origin=SUN,-frame=ecliptic,-to=CometaryCoordinates,] 437.88333436025056 iter/sec (stddev: 0.0000402983952552782) 419.8048745107752 iter/sec (stddev: 0.0001569780461065238) 0.96
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[50-origin=SUN,-frame=equatorial,-to=SphericalCoordinates,] 552.0981308657715 iter/sec (stddev: 0.00003461700840958042) 540.7065935671078 iter/sec (stddev: 0.00002844359621475783) 0.98
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[50-origin=SUN,-frame=equatorial,-to=KeplerianCoordinates,] 361.98852481302157 iter/sec (stddev: 0.00012422569791227718) 365.2056323185734 iter/sec (stddev: 0.000055678404632266866) 1.01
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[50-origin=SUN,-frame=equatorial,-to=CometaryCoordinates,] 374.98943467284437 iter/sec (stddev: 0.00014260404595504132) 369.68751645236784 iter/sec (stddev: 0.00015516324665376796) 0.99
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[50-origin=SUN,-frame=ecliptic,-to=SphericalCoordinates,] 546.9643653490441 iter/sec (stddev: 0.00004561747565993099) 540.3273361236852 iter/sec (stddev: 0.00007503199066103916) 0.99
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[50-origin=SUN,-frame=ecliptic,-to=KeplerianCoordinates,] 374.3700103927645 iter/sec (stddev: 0.00003486937820813615) 368.4702982499069 iter/sec (stddev: 0.000036470001797934985) 0.98
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[50-origin=SUN,-frame=ecliptic,-to=CometaryCoordinates,] 397.7498613149482 iter/sec (stddev: 0.000056143685085062465) 389.6014464199065 iter/sec (stddev: 0.00014416895234093977) 0.98
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[100-origin=SUN,-frame=equatorial,-to=SphericalCoordinates,] 521.3560658451812 iter/sec (stddev: 0.000042942040864566976) 506.2384223417981 iter/sec (stddev: 0.00006598782763387367) 0.97
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[100-origin=SUN,-frame=equatorial,-to=KeplerianCoordinates,] 361.5803686526619 iter/sec (stddev: 0.00010192383863005374) 355.6213243794993 iter/sec (stddev: 0.00007940929220938292) 0.98
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[100-origin=SUN,-frame=equatorial,-to=CometaryCoordinates,] 369.97140417186375 iter/sec (stddev: 0.00017885204696120935) 361.2189811362107 iter/sec (stddev: 0.00015680368899114575) 0.98
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[100-origin=SUN,-frame=ecliptic,-to=SphericalCoordinates,] 511.36292479713813 iter/sec (stddev: 0.00003933598251040203) 502.9388960250297 iter/sec (stddev: 0.00003217493658718854) 0.98
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[100-origin=SUN,-frame=ecliptic,-to=KeplerianCoordinates,] 360.3286562245558 iter/sec (stddev: 0.000055376175364697474) 355.90942472391765 iter/sec (stddev: 0.000039009678987430955) 0.99
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_transform_cartesian_coordinates[100-origin=SUN,-frame=ecliptic,-to=CometaryCoordinates,] 389.54752825458445 iter/sec (stddev: 0.00005205373680140724) 376.360379431329 iter/sec (stddev: 0.0001187252327222423) 0.97
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_CoordinateCovariances_to_matrix 610.7588203958156 iter/sec (stddev: 0.00002590711938914209) 606.39415910709 iter/sec (stddev: 0.00020541758820976955) 0.99
src/adam_core/coordinates/tests/test_benchmarks.py::test_benchmark_CoordinateCovariances_from_matrix 14294.700105317603 iter/sec (stddev: 0.000006187647036953629) 14069.442187002049 iter/sec (stddev: 0.0000068347386085193695) 0.98
src/adam_core/dynamics/tests/test_propagation.py::test_benchmark__propagate_2body 36558.5599729615 iter/sec (stddev: 0.000021205352657134433) 43482.88225184171 iter/sec (stddev: 0.000010624379279892338) 1.19
src/adam_core/dynamics/tests/test_propagation.py::test_benchmark__propagate_2body_vmap 33865.58747975007 iter/sec (stddev: 0.000011896530237112753) 32750.37660983307 iter/sec (stddev: 0.000011264965774008645) 0.97
src/adam_core/dynamics/tests/test_propagation.py::test_benchmark_propagate_2body 445.89839028234627 iter/sec (stddev: 0.00012719779944966777) 444.4550718627213 iter/sec (stddev: 0.00009623427522959122) 1.00
src/adam_core/dynamics/tests/test_propagation.py::test_benchmark_propagate_2body_matrix 4.0039316430594445 iter/sec (stddev: 0.0006683828698538116) 4.034851800663911 iter/sec (stddev: 0.0003746998494347887) 1.01
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SUN,-frame=equatorial,-code=X05,-times=1,] 669.7879853691624 iter/sec (stddev: 0.00012353230838748423) 665.2838990593476 iter/sec (stddev: 0.000027954637985755625) 0.99
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SUN,-frame=equatorial,-code=X05,-times=10000,] 4.638509355720327 iter/sec (stddev: 0.0008936146961874056) 4.4844051702514145 iter/sec (stddev: 0.0010430679037299467) 0.97
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SUN,-frame=equatorial,-code=500,-times=1,] 1400.936670492051 iter/sec (stddev: 0.000017341395166334617) 1360.9432863955203 iter/sec (stddev: 0.000049055946255813) 0.97
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SUN,-frame=equatorial,-code=500,-times=10000,] 17.306686988872645 iter/sec (stddev: 0.0002134920659056969) 16.5861408390667 iter/sec (stddev: 0.0003859436720647196) 0.96
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SUN,-frame=ecliptic,-code=X05,-times=1,] 685.5313782697315 iter/sec (stddev: 0.00004862524822675117) 670.4733059144164 iter/sec (stddev: 0.000039144668634585385) 0.98
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SUN,-frame=ecliptic,-code=X05,-times=10000,] 4.596572252413778 iter/sec (stddev: 0.0017097132797309338) 4.503004578020337 iter/sec (stddev: 0.0004810252171757016) 0.98
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SUN,-frame=ecliptic,-code=500,-times=1,] 1396.0771410563427 iter/sec (stddev: 0.000019687009627573186) 1365.7891446005876 iter/sec (stddev: 0.000020260797993410648) 0.98
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SUN,-frame=ecliptic,-code=500,-times=10000,] 17.297335511423437 iter/sec (stddev: 0.0002972258367639653) 16.34432681758005 iter/sec (stddev: 0.0016496058697851315) 0.94
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=equatorial,-code=X05,-times=1,] 676.4944582729032 iter/sec (stddev: 0.00013566749566332534) 666.2594826464843 iter/sec (stddev: 0.000025560471111635498) 0.98
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=equatorial,-code=X05,-times=10000,] 4.534461432125973 iter/sec (stddev: 0.0013570936674237855) 4.541419221991213 iter/sec (stddev: 0.0006184943182829622) 1.00
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=equatorial,-code=500,-times=1,] 1346.2374416103976 iter/sec (stddev: 0.00013615238217808243) 1363.6603476104053 iter/sec (stddev: 0.00009158350706249511) 1.01
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=equatorial,-code=500,-times=10000,] 17.68444948852429 iter/sec (stddev: 0.0003885099478369328) 17.03167916168112 iter/sec (stddev: 0.000274903156034198) 0.96
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=ecliptic,-code=X05,-times=1,] 682.9585833061135 iter/sec (stddev: 0.00003014635897744292) 660.3480818362847 iter/sec (stddev: 0.00008125319610426521) 0.97
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=ecliptic,-code=X05,-times=10000,] 4.647700841558966 iter/sec (stddev: 0.0009148484025661713) 4.512266134784899 iter/sec (stddev: 0.0006579868431868307) 0.97
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=ecliptic,-code=500,-times=1,] 1380.5139126147308 iter/sec (stddev: 0.00005670377783974617) 1379.7879035752055 iter/sec (stddev: 0.000017421913339632526) 1.00
src/adam_core/observers/tests/test_benchmarks.py::test_benchmark_get_observer_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=ecliptic,-code=500,-times=10000,] 17.556284073936812 iter/sec (stddev: 0.0009375390269198867) 16.812761271115033 iter/sec (stddev: 0.0003578408083157062) 0.96
src/adam_core/orbits/tests/test_benchmarks.py::test_benchmark_iterate_real_orbits 15172.434697019838 iter/sec (stddev: 0.000007543742329008913) 15608.875831423054 iter/sec (stddev: 0.0000027747349164109244) 1.03
src/adam_core/photometry/tests/test_benchmarks.py::test_benchmark_calculate_apparent_magnitude_jax[n=256] 812.5026421969119 iter/sec (stddev: 0.00006457697370251186) 809.518212817223 iter/sec (stddev: 0.0000621236807982173) 1.00
src/adam_core/photometry/tests/test_benchmarks.py::test_benchmark_calculate_apparent_magnitude_jax[n=16384] 467.4094368703595 iter/sec (stddev: 0.00007941372145455078) 475.9097611710503 iter/sec (stddev: 0.00008576967707106395) 1.02
src/adam_core/photometry/tests/test_benchmarks.py::test_benchmark_calculate_apparent_magnitude_jax[n=65536] 126.41702265998256 iter/sec (stddev: 0.00037794375991026096) 128.96288405045448 iter/sec (stddev: 0.0003668410751990165) 1.02
src/adam_core/photometry/tests/test_benchmarks.py::test_benchmark_calculate_apparent_magnitude_jax[n=262144] 28.53820201091266 iter/sec (stddev: 0.0017967856666631732) 28.85503320576054 iter/sec (stddev: 0.0017188665015710673) 1.01
src/adam_core/photometry/tests/test_benchmarks.py::test_benchmark_calculate_apparent_magnitude_jax[n=1048576] 7.282910337273554 iter/sec (stddev: 0.004907001534864432) 7.560772689912187 iter/sec (stddev: 0.004627537574540594) 1.04
src/adam_core/photometry/tests/test_benchmarks.py::test_benchmark_convert_magnitude_bandpass[n=256] 456.4126646895911 iter/sec (stddev: 0.000044988333898856545) 465.80159465325977 iter/sec (stddev: 0.00005499768661638766) 1.02
src/adam_core/photometry/tests/test_benchmarks.py::test_benchmark_convert_magnitude_bandpass[n=16384] 244.53351391612972 iter/sec (stddev: 0.00008164486521198765) 248.50244277137872 iter/sec (stddev: 0.00010726478006183718) 1.02
src/adam_core/photometry/tests/test_benchmarks.py::test_benchmark_convert_magnitude_bandpass[n=65536] 65.7651249454553 iter/sec (stddev: 0.0003993413350218097) 67.11429618334846 iter/sec (stddev: 0.0003755064954989575) 1.02
src/adam_core/photometry/tests/test_benchmarks.py::test_benchmark_convert_magnitude_bandpass[n=262144] 16.92467951953455 iter/sec (stddev: 0.0012913866773612338) 17.15263983243699 iter/sec (stddev: 0.0010090460533628118) 1.01
src/adam_core/photometry/tests/test_benchmarks.py::test_benchmark_convert_magnitude_bandpass[n=1048576] 4.3186969939755295 iter/sec (stddev: 0.0020210269807821677) 4.33198879173472 iter/sec (stddev: 0.0022055814524331503) 1.00
src/adam_core/photometry/tests/test_benchmarks.py::test_benchmark_convert_magnitude_bandpass_shape_sweep 9.634957679864998 iter/sec (stddev: 0.0015945072910963447) 9.638457442108457 iter/sec (stddev: 0.001115788160712843) 1.00
src/adam_core/photometry/tests/test_benchmarks.py::test_benchmark_calculate_apparent_magnitude_jax_shape_sweep 18.0951847249765 iter/sec (stddev: 0.0011300967349560929) 18.395965803696967 iter/sec (stddev: 0.001482499116127481) 1.02
src/adam_core/propagator/tests/test_benchmarks.py::test_assist_generate_ephemeris_single_process_benchmark 0.5202709896545903 iter/sec (stddev: 0.006821513350111667) 0.5071751910248448 iter/sec (stddev: 0.0070009026088579465) 0.97
src/adam_core/propagator/tests/test_benchmarks.py::test_assist_generate_ephemeris_multi_process_benchmark 0.36262845454106213 iter/sec (stddev: 0.022834092974802718) 0.34865016108550634 iter/sec (stddev: 0.012044950231442293) 0.96
src/adam_core/propagator/tests/test_benchmarks.py::test_observer_alignment_indices_benchmark[10000] 232.21927864253192 iter/sec (stddev: 0.00014146625855162908) 237.20168225537105 iter/sec (stddev: 0.00019101548622132294) 1.02
src/adam_core/propagator/tests/test_benchmarks.py::test_hg_param_mapping_benchmark[20000-5] 64.66318599231683 iter/sec (stddev: 0.0004375293669535568) 70.84335447728303 iter/sec (stddev: 0.0004035324775860624) 1.10
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-tai-tai] 489145.11301355064 iter/sec (stddev: 0.000002636297316791527) 490559.8348927911 iter/sec (stddev: 7.826056127272173e-7) 1.00
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-tai-utc] 2090.208736853391 iter/sec (stddev: 0.000034612422609222695) 2132.085873176312 iter/sec (stddev: 0.00002190297326389249) 1.02
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-tai-tdb] 1410.652114493091 iter/sec (stddev: 0.0000476572424793874) 1426.2628759373858 iter/sec (stddev: 0.000026466600193134613) 1.01
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-tai-tt] 2526.8653161813613 iter/sec (stddev: 0.00002869392785995721) 2535.5985189394614 iter/sec (stddev: 0.00001972642228691401) 1.00
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-utc-tai] 2145.4925370509427 iter/sec (stddev: 0.00003861882294032359) 2183.1186664475176 iter/sec (stddev: 0.000023495683412776197) 1.02
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-utc-utc] 544464.7283038958 iter/sec (stddev: 3.3615876506498244e-7) 553634.4895022538 iter/sec (stddev: 2.5786158624395496e-7) 1.02
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-utc-tdb] 1295.6602717132998 iter/sec (stddev: 0.00003991112402216964) 1303.692168542498 iter/sec (stddev: 0.00003433252697348838) 1.01
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-utc-tt] 2087.492848483879 iter/sec (stddev: 0.00003241617875589875) 2078.36923648337 iter/sec (stddev: 0.000034636836876222995) 1.00
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-tdb-tai] 1401.7853272937596 iter/sec (stddev: 0.0000651821143124212) 1427.615293424118 iter/sec (stddev: 0.000047698702689637255) 1.02
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-tdb-utc] 1268.2367848511187 iter/sec (stddev: 0.000055516426253195936) 1283.0573294629721 iter/sec (stddev: 0.000032572404521683416) 1.01
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-tdb-tdb] 545808.4678440578 iter/sec (stddev: 3.4325273678697485e-7) 527210.9908181529 iter/sec (stddev: 2.8487205060750977e-7) 0.97
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-tdb-tt] 1446.2932062402608 iter/sec (stddev: 0.0000389911329377935) 1446.8475852696336 iter/sec (stddev: 0.00004781872186287416) 1.00
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-tt-tai] 2555.531003897419 iter/sec (stddev: 0.000022754083567472288) 2537.46199846454 iter/sec (stddev: 0.000026764410735537155) 0.99
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-tt-utc] 2071.040513660935 iter/sec (stddev: 0.00003236435790248905) 2076.667038631392 iter/sec (stddev: 0.000020589508965215858) 1.00
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-tt-tdb] 1471.15182733292 iter/sec (stddev: 0.000036432963640852274) 1480.6717578716955 iter/sec (stddev: 0.00002281646777759791) 1.01
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[astropy-tt-tt] 556382.0471001256 iter/sec (stddev: 3.1917249795782737e-7) 549885.1257571769 iter/sec (stddev: 2.749088527756752e-7) 0.99
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-tai-tai] 558443.645830373 iter/sec (stddev: 3.2736795807542845e-7) 552777.4726462642 iter/sec (stddev: 2.732302233801155e-7) 0.99
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-tai-utc] 2495.9372098346353 iter/sec (stddev: 0.000030211318507873568) 2466.0633418696793 iter/sec (stddev: 0.000025275398036911185) 0.99
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-tai-tdb] 3229.8376756124417 iter/sec (stddev: 0.000027769607833969505) 3158.1146733854753 iter/sec (stddev: 0.000025339518578929313) 0.98
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-tai-tt] 4098.47771324799 iter/sec (stddev: 0.000020287473238967325) 3955.4041512618455 iter/sec (stddev: 0.000016205698556742228) 0.97
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-utc-tai] 2502.226266784042 iter/sec (stddev: 0.000027443575813584962) 2441.0502939664484 iter/sec (stddev: 0.000023934611765049194) 0.98
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-utc-utc] 548448.5450946495 iter/sec (stddev: 3.3746159981145035e-7) 554936.9373711682 iter/sec (stddev: 2.67518952243085e-7) 1.01
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-utc-tdb] 2272.3800157371656 iter/sec (stddev: 0.00003651877779759036) 2252.657578836102 iter/sec (stddev: 0.00002384582111168633) 0.99
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-utc-tt] 2516.708438194061 iter/sec (stddev: 0.00002869654907540485) 2481.872749452437 iter/sec (stddev: 0.000021739297960066928) 0.99
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-tdb-tai] 3294.7458754880677 iter/sec (stddev: 0.00002522846724564342) 3185.5465673563026 iter/sec (stddev: 0.000021926610214242325) 0.97
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-tdb-utc] 2327.2863147580383 iter/sec (stddev: 0.000022101284689457505) 2273.651682956279 iter/sec (stddev: 0.000031383348258133995) 0.98
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-tdb-tdb] 558661.8346434246 iter/sec (stddev: 3.131921456534932e-7) 554759.7261535496 iter/sec (stddev: 2.736003600085212e-7) 0.99
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-tdb-tt] 3328.7354998155683 iter/sec (stddev: 0.000026862266945265895) 3258.8374137618694 iter/sec (stddev: 0.000019012409696856373) 0.98
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-tt-tai] 4020.338898303104 iter/sec (stddev: 0.000019637262845503533) 3907.2946282803705 iter/sec (stddev: 0.00002170694344450541) 0.97
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-tt-utc] 2516.663628336065 iter/sec (stddev: 0.000025239298253850765) 2488.771917736984 iter/sec (stddev: 0.00001885493487095593) 0.99
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-tt-tdb] 3277.7139580956377 iter/sec (stddev: 0.000022972953763816805) 3201.046949504201 iter/sec (stddev: 0.00002172581029783059) 0.98
src/adam_core/time/tests/test_time.py::test_Timestamp_rescale_benchmark[new-tt-tt] 573244.2690375643 iter/sec (stddev: 2.7361754073260134e-7) 545203.7349906609 iter/sec (stddev: 3.1573757298942017e-7) 0.95
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SUN,-frame=equatorial,-perturber=EARTH,-times=1,] 1823.0652267405912 iter/sec (stddev: 0.000028649701689349033) 1781.1145727084267 iter/sec (stddev: 0.000027504365545393003) 0.98
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SUN,-frame=equatorial,-perturber=EARTH,-times=10000,] 17.142429002770506 iter/sec (stddev: 0.0008598292522118879) 16.43798645936242 iter/sec (stddev: 0.0005247709767641483) 0.96
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SUN,-frame=equatorial,-perturber=SUN,-times=1,] 1838.2876080010853 iter/sec (stddev: 0.000027324305071626352) 1796.224128826036 iter/sec (stddev: 0.000028805981726220302) 0.98
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SUN,-frame=equatorial,-perturber=SUN,-times=10000,] 19.10062902334576 iter/sec (stddev: 0.000412264952916347) 18.18878246645978 iter/sec (stddev: 0.0003999378264385441) 0.95
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SUN,-frame=equatorial,-perturber=SOLAR_SYSTEM_BARYCENTER,-times=1,] 1817.7349038897808 iter/sec (stddev: 0.000029217818666300022) 1764.8032033929967 iter/sec (stddev: 0.00003837757606089924) 0.97
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SUN,-frame=equatorial,-perturber=SOLAR_SYSTEM_BARYCENTER,-times=10000,] 17.52006391880051 iter/sec (stddev: 0.0033942633839596412) 17.05970012204002 iter/sec (stddev: 0.0005510202679447478) 0.97
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SUN,-frame=ecliptic,-perturber=EARTH,-times=1,] 1803.0787035230408 iter/sec (stddev: 0.00003254407846519484) 1762.2715197692246 iter/sec (stddev: 0.000047045396749427346) 0.98
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SUN,-frame=ecliptic,-perturber=EARTH,-times=10000,] 17.157817125310864 iter/sec (stddev: 0.0004490374058459175) 16.225890959162335 iter/sec (stddev: 0.0007846917166280615) 0.95
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SUN,-frame=ecliptic,-perturber=SUN,-times=1,] 1863.8263695578144 iter/sec (stddev: 0.00002710031056832164) 1811.8504148212805 iter/sec (stddev: 0.00002233210758667425) 0.97
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SUN,-frame=ecliptic,-perturber=SUN,-times=10000,] 18.98622782132939 iter/sec (stddev: 0.0004092699025362227) 18.1079807502735 iter/sec (stddev: 0.0007230053048612023) 0.95
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SUN,-frame=ecliptic,-perturber=SOLAR_SYSTEM_BARYCENTER,-times=1,] 1842.0722025518105 iter/sec (stddev: 0.00002735692176613402) 1765.9010353017284 iter/sec (stddev: 0.00002945602290734064) 0.96
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SUN,-frame=ecliptic,-perturber=SOLAR_SYSTEM_BARYCENTER,-times=10000,] 17.811275165918765 iter/sec (stddev: 0.0005849219771136009) 16.965553564180134 iter/sec (stddev: 0.0004395921294828602) 0.95
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=equatorial,-perturber=EARTH,-times=1,] 1839.381001878791 iter/sec (stddev: 0.00002602445846536583) 1764.7938175863092 iter/sec (stddev: 0.0000307039816364795) 0.96
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=equatorial,-perturber=EARTH,-times=10000,] 17.541085251234247 iter/sec (stddev: 0.0006038911848976001) 16.52490111152106 iter/sec (stddev: 0.0007255849743337734) 0.94
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=equatorial,-perturber=SUN,-times=1,] 1813.7201939788972 iter/sec (stddev: 0.000031034044867353344) 1774.8096558221976 iter/sec (stddev: 0.000028272118812222156) 0.98
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=equatorial,-perturber=SUN,-times=10000,] 18.04360730961458 iter/sec (stddev: 0.0006401896708394137) 17.23420752036344 iter/sec (stddev: 0.00036937874196537517) 0.96
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=equatorial,-perturber=SOLAR_SYSTEM_BARYCENTER,-times=1,] 1844.063221244115 iter/sec (stddev: 0.000031966958473739516) 1807.3965005775656 iter/sec (stddev: 0.000020452772293930118) 0.98
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=equatorial,-perturber=SOLAR_SYSTEM_BARYCENTER,-times=10000,] 19.184409846125057 iter/sec (stddev: 0.000401484189969499) 18.063294432068687 iter/sec (stddev: 0.0006947526854729338) 0.94
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=ecliptic,-perturber=EARTH,-times=1,] 1814.5948473761634 iter/sec (stddev: 0.00002874769702411899) 1775.0349809003753 iter/sec (stddev: 0.00002833461733362005) 0.98
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=ecliptic,-perturber=EARTH,-times=10000,] 17.347093829419155 iter/sec (stddev: 0.0006942902377814369) 16.672464254582728 iter/sec (stddev: 0.0007481230062065639) 0.96
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=ecliptic,-perturber=SUN,-times=1,] 1815.4613160988217 iter/sec (stddev: 0.000027317942577326337) 1793.3302881883596 iter/sec (stddev: 0.00002742962315039801) 0.99
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=ecliptic,-perturber=SUN,-times=10000,] 17.859196682480686 iter/sec (stddev: 0.0007136888383786733) 17.09161313155927 iter/sec (stddev: 0.0005230317242002205) 0.96
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=ecliptic,-perturber=SOLAR_SYSTEM_BARYCENTER,-times=1,] 1825.8125145088245 iter/sec (stddev: 0.000027803675514968115) 1761.7803685242407 iter/sec (stddev: 0.00002944668006922142) 0.96
src/adam_core/utils/tests/test_benchmarks.py::test_benchmark_get_perturber_state[origin=SOLAR_SYSTEM_BARYCENTER,-frame=ecliptic,-perturber=SOLAR_SYSTEM_BARYCENTER,-times=10000,] 18.989272864812758 iter/sec (stddev: 0.0006107059760146442) 18.13631510440826 iter/sec (stddev: 0.0004128151809758011) 0.96

This comment was automatically generated by workflow using github-action-benchmark.

@moeyensj
Copy link
Member

This PR is coming at a great time. I had some of these changes implemented for Rubin, but this PR is much more complete. Would it make sense to add a keyword argument for type and have it as a literal: "general" or "submission"? If "submission" we can then assert we need obscontexts. This puts it a bit more in line with the behavior of the ADES master repo.

@akoumjian
Copy link
Contributor Author

akoumjian commented Oct 30, 2025 via email

Add additional ADES PSV fields used by space telescopes, enforce a predictable column ordering, and fix null numeric serialization expectations.
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

This PR is being reviewed by Cursor Bugbot

Details

You are on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

line=raw,
)
)
continue
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Malformed keyword records get duplicate misleading error messages

Medium Severity

In find_ades_psv_problems, when a line looks like a keyword record but has issues (e.g., uppercase tokens like Band instead of band), the code correctly adds errors about the malformed header but then falls through to the if current_header is None: check and incorrectly also adds a "data_record_before_keyword_record" error. This happens because the if candidate_tokens is not None: block has no continue statement at the end. A malformed keyword record is NOT a data record, so calling it one produces confusing diagnostics for users debugging their ADES files.

Fix in Cursor Fix in Web

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.

3 participants