Commit Graph

128 Commits

Author SHA1 Message Date
ApsisRS contributors 4cf0d237cb topology: index the outgoing edges
Asking whether an edge already exists scanned the whole edge list, so
building a graph of E edges cost O(E^2). A visibility sweep adds a quadratic
number of edges, so the whole construction was cubic: 600 satellites took
twelve seconds. An index of outgoing edge positions makes the membership
test constant time, and the same index answers neighbours and out-degree
without a scan. Removal rebuilds the index in one pass, since it renumbers
every later position. Six hundred satellites now take 130 ms, a factor of
ninety five.
2026-09-30 18:29:18 +08:00
ApsisRS contributors 9e2f820257 docs: register the two scale benchmarks and correct the stale note
bench_scale and bench_parallel were runnable but documented nowhere, so the
directory listing did not say they existed. The file header of
bench_scale also still claimed the harness warms up, which it stopped
doing when the cold cost was given its own column.
2026-09-30 18:23:37 +08:00
ApsisRS contributors d6d33b1c73 bench: add a parallel scale benchmark
Splits the three heavy paths across scoped threads and reports the
speedup and the efficiency against the thread count, with the serial time
taken as the fastest of several runs so a scheduling hiccup cannot inflate
the reference every number is divided by.

Constellation propagation and access search are embarrassingly parallel and
scale as expected until the thread count passes eight, where the machine
stops gaining. Topology construction does not scale at all, and the split
line shows why: the geometric visibility test is two milliseconds while
folding the visible pairs into the graph is four hundred, because each
insertion scans the edges already stored.
2026-09-30 17:53:48 +08:00
ApsisRS contributors aeb533fe06 bench: drop the warm up and widen the constellation sweep
The warm up hid the first call's allocation and cache cost behind a
discarded run, so the reported figure was one the caller never waits for.
Report the first call separately as the cold cost and the rest as the
steady state, and let the difference speak for itself.

The constellation path now covers a full day at a sixty second step and
sweeps from 24 to 2016 satellites, propagating each satellite at its own
orbital elements so the deep space branch is reached where the period is
long.
2026-09-30 17:36:08 +08:00
ApsisRS contributors 22016f35e9 workspace: add the scale benchmark and state the expect convention
bench_scale sweeps the input size over four paths and reports time per
unit, so growth is visible even when absolute times move with the machine.
It shows SGP4 propagation and access search are flat per satellite, while
topology construction is quadratic and planning is quadratic in the number
of tasks.

The README said library code never uses expect, but twelve call sites do,
each guarded by a check on the line above or by construction. Allow that
case explicitly and record each site with its guard in the design notes.
2026-09-30 17:25:59 +08:00
ApsisRS contributors a730851ec2 validation: add cross checks for the two-body model and the element parser
Both crates were verified only against themselves. dump_kepler writes the
element to state conversions and a state back to element round trip, which
check_kepler recomputes from the perifocal formulae, the rotation and the
vis-viva equation. dump_tle writes the parsed fields of eight element sets,
which check_tle reparses with a column indexed reader and a
reimplementation of the modulo ten checksum.
2026-09-30 17:18:45 +08:00
ApsisRS contributors 6e7e1ba798 apsis-rs: reuse the shared Earth radius in the network examples
Both network examples repeated the WGS 84 equatorial radius that
apsis-core already exports, so a change to the ellipsoid would not reach
them. Use the constant.
2026-09-26 23:43:51 +08:00
ApsisRS contributors e262c78c03 orbit: mark the new error enums non exhaustive
EphemerisSamplingError and ManeuverApplicationError were missing the
attribute the other fifteen error kinds carry. Record the distinction
between an error enum, which is marked so a new category does not break a
caller, and a domain state enum, which is left exhaustive so the compiler
points at every match that a new variant needs.
2026-09-26 23:40:43 +08:00
ApsisRS contributors fac3732f08 docs: fix the broken intra doc links and check them in CI
Running rustdoc with -D warnings found nine broken links: a misspelt
WGS84, links to methods and constants that are private or in a crate that
is not a dependency, and three redundant explicit targets. Fix each and add
a documentation step to CI so a doc comment cannot drift away from the code
it describes without the build noticing.
2026-09-26 23:37:48 +08:00
ApsisRS contributors 4d45d4cf41 workspace: remove dependencies that are declared but never used
Thirty four crates listed apsis-core or apsis-math without referencing it,
and apsis-kepler listed apsis-time and apsis-tle as well. Each was verified
removable by compiling with it taken out. An unused dependency still costs
build time and makes the dependency graph and the layer check report
relations that do not exist. The layer check now reports 104 edges, down
from 141.
2026-09-26 23:36:38 +08:00
ApsisRS contributors 26ee3d72e9 docs: correct the core error claim and record the error strategy
apsis-core described Error and Result as the workspace's single error
surface, but no crate uses them: every layer with a domain specific failure
defines its own Error and ErrorKind, whose variants name the concrete
conditions a caller matches on. Correct the doc comment and record the
strategy, including the Option versus Result split and the tolerance
conventions.
2026-09-26 23:29:25 +08:00
ApsisRS contributors e34cc06ceb validation: add the coverage geometry cross-check
The network layer was the only layer without a Python cross-check, and
validation/python/constellation/ was an empty placeholder that the README
described as existing. Add the dump example and the reference script, which
recomputes the geometry from the spherical triangle relations rather than
from the Rust code, and remove the placeholder.
2026-09-26 23:26:13 +08:00
ApsisRS contributors 9482d63548 ci: run the integration checks and add a dependency free benchmark
The cross-layer integration checks were examples containing assertions
that cargo test never ran, so a break in one layer's assumptions about
another could pass CI. Run them explicitly.

The benches/ and tests/ directories were empty placeholders that a virtual
workspace does not compile, and benches/criterion named a third party crate
this workspace forbids. Remove both and add a real zero dependency
benchmark as a facade example.
2026-09-26 23:22:34 +08:00
ApsisRS contributors c256dc0da2 orbit: add maneuver models and wire the orbit facade 2026-09-26 23:17:16 +08:00
ApsisRS contributors fc23571d4a orbit: add ephemeris sampling and Hermite interpolation 2026-09-26 23:11:00 +08:00
ApsisRS contributors 00fc18ec80 apsis-rs: fix the network example altitude check 2026-09-26 22:57:03 +08:00
ApsisRS contributors 241b6bf073 sim: add simulation facade and integration example 2026-09-26 22:52:51 +08:00
ApsisRS contributors d595c1ce3c sim: add output trace recording 2026-09-26 22:50:05 +08:00
ApsisRS contributors 92cd444353 sim: add scenario definition and text loading 2026-09-26 22:48:27 +08:00
ApsisRS contributors d426aa7a1e sim: add discrete event simulation engine 2026-09-26 22:28:23 +08:00
ApsisRS contributors 15c1531f30 sim: add event type and time ordered event queue 2026-09-26 22:23:13 +08:00
ApsisRS contributors 436ebcc6f9 ops: add precedence constraints and an improvement pass 2026-09-26 22:21:20 +08:00
ApsisRS contributors ea5da41880 apsis-rs: add end to end operations integration example 2026-09-26 17:08:06 +08:00
ApsisRS contributors 56a7aacd91 ops: add greedy task planner 2026-09-26 17:07:12 +08:00
ApsisRS contributors 6aeaa29dc1 ops: add schedule conflict detection 2026-09-26 17:04:56 +08:00
ApsisRS contributors b30a11b224 ops: add schedule representation and evaluation 2026-09-26 17:02:35 +08:00
ApsisRS contributors 09e5e7e5e4 ops: fix a lint in the task tests 2026-09-26 17:00:11 +08:00
ApsisRS contributors 9e571188c8 ops: add tasks with resource requirements and windows 2026-09-26 16:59:48 +08:00
ApsisRS contributors 1d44a6d8ea ops: add resources with availability windows and capacity 2026-09-26 16:57:54 +08:00
ApsisRS contributors 9d8773d6ab physics: add the TEME to Earth-fixed transformation 2026-09-26 16:54:09 +08:00
ApsisRS contributors 841b586e2d physics: add IAU 2000A nutation and IAU 2006 precession 2026-09-26 16:48:57 +08:00
ApsisRS contributors c0bd0400bf apsis-rs: add end to end network integration example 2026-09-26 16:09:27 +08:00
ApsisRS contributors b20c9d9147 network: add mesh connectivity and critical link analysis 2026-09-26 16:06:59 +08:00
ApsisRS contributors f941131011 network: add handover policy with hysteresis and dwell time 2026-09-26 16:04:52 +08:00
ApsisRS contributors 8cc2b435b3 network: add shortest path and interval routing 2026-09-26 16:03:15 +08:00
ApsisRS contributors 97a4a82d0c network: add time-varying topology graph and series 2026-09-26 16:01:19 +08:00
ApsisRS contributors 316a5f8eef network: add inter-satellite link geometry 2026-09-26 15:58:49 +08:00
ApsisRS contributors 2a41cf1560 network: add access window finder 2026-09-26 15:51:47 +08:00
ApsisRS contributors c75fb8bc5c network: add coverage geometry, footprint, and visibility 2026-09-26 15:48:14 +08:00
ApsisRS contributors a3741cafae network: add Walker constellation construction 2026-09-26 15:44:38 +08:00
ApsisRS contributors be00a4f088 rf: add the exact P.676 slant path with the P.835 atmosphere 2026-09-26 15:43:12 +08:00
ApsisRS contributors 1dced37406 rf: pin the S.465 revision in the citation 2026-09-26 15:36:23 +08:00
ApsisRS contributors 1ff6c261f1 rf: derive the rain height from P.839 in the path method 2026-09-26 15:35:20 +08:00
ApsisRS contributors 84d1c744f1 rf: add the ITU-R P.839-4 rain height model 2026-09-26 15:34:34 +08:00
ApsisRS contributors be55196be8 workspace: add the S.465 cross-check and document the ITU-R suite 2026-09-26 15:29:41 +08:00
ApsisRS contributors a2e31c32ab rf: add the ITU-R S.465 reference antenna pattern 2026-09-26 15:27:58 +08:00
ApsisRS contributors 64c78c9dac rf: correct the P.618 elevation units and the pattern citation 2026-09-26 15:18:10 +08:00
ApsisRS contributors 2f342db877 rf: replace gaseous and rain models with ITU-R P.676-12 and P.838-3 2026-09-26 15:13:48 +08:00
ApsisRS contributors 9b1f8df76b rf: add link budget cross-check example and script 2026-09-26 14:46:36 +08:00
ApsisRS contributors c6064cc8e5 rf: add carrier to interference and noise combination 2026-09-26 14:44:05 +08:00
ApsisRS contributors 6629969150 rf: add atmospheric gaseous and rain attenuation models 2026-09-26 14:42:47 +08:00
ApsisRS contributors b3d3071778 rf: add Doppler shift and range rate models 2026-09-26 14:40:12 +08:00
ApsisRS contributors 7d08f900a9 rf: add link budget with gain to temperature figure 2026-09-26 14:38:32 +08:00
ApsisRS contributors 9a4b5bf9e5 rf: add noise temperature and cascade models 2026-09-26 14:37:15 +08:00
ApsisRS contributors c112f02d9c rf: add parabolic aperture and off-axis pattern models 2026-09-26 14:36:01 +08:00
ApsisRS contributors 73546ea8b2 rf: add decibel, power, gain, and free space primitives 2026-09-26 14:32:58 +08:00
ApsisRS contributors faa81fb573 orbit: add layer facade that combines propagation and elements 2026-09-26 14:21:55 +08:00
ApsisRS contributors 02d03205df orbit: add Keplerian elements and two-body propagation 2026-09-26 14:20:09 +08:00
ApsisRS contributors 74594e6a04 workspace: add SGP4 cross-check against the reference library 2026-09-26 14:16:23 +08:00
ApsisRS contributors 6eaaa86e30 orbit: add SGP4 and SDP4 propagator 2026-09-26 14:16:23 +08:00
ApsisRS contributors 7c66653fa1 orbit: add TLE parser 2026-09-26 14:02:01 +08:00
ApsisRS contributors 3bec39d181 foundation: record the built in macro capabilities 2026-09-26 13:48:53 +08:00
ApsisRS contributors a79a6502e0 apsis-rs: add validation examples for geodesy and time 2026-09-26 13:47:59 +08:00
ApsisRS contributors 9fd8c9b2fc physics: add frame carrying position types 2026-09-26 13:27:05 +08:00
ApsisRS contributors bdbaa20a5a physics: keep frames limited to rotations 2026-09-26 13:27:05 +08:00
ApsisRS contributors efb69c77bf physics: return plain vectors from geodetic conversions 2026-09-26 13:27:05 +08:00
ApsisRS contributors 3320491456 physics: add frame markers and Earth rotation angle 2026-09-26 13:25:12 +08:00
ApsisRS contributors 7e822d7ce4 physics: add WGS84 ellipsoid and geodetic ECEF conversion 2026-09-26 13:22:56 +08:00
ApsisRS contributors f38e8a6097 physics: add time scales, epochs, and calendar conversions 2026-09-26 13:19:51 +08:00
ApsisRS contributors ce0f341cbd physics: make leap second lookup reject instants inside a leap second 2026-09-26 13:19:51 +08:00
ApsisRS contributors 8b5213747a physics: add leap second table and UTC TAI conversion 2026-09-26 13:15:52 +08:00
ApsisRS contributors 051170fc07 foundation: move apsis-math tests into tests directory 2026-09-26 13:02:01 +08:00
ApsisRS contributors f286b5daf8 foundation: move apsis-units tests into tests directory 2026-09-26 13:02:01 +08:00
ApsisRS contributors a053e2ee71 foundation: move apsis-core tests into tests directory 2026-09-26 13:01:58 +08:00
ApsisRS contributors da4125ffd0 foundation: add vector, quaternion, and matrix types 2026-09-26 12:58:16 +08:00
ApsisRS contributors e861789cc1 foundation: add length, time, frequency, angle, and temperature units 2026-09-26 12:55:11 +08:00
ApsisRS contributors c08fcd0f90 foundation: add error trait, result alias, constants, and unit trait 2026-09-26 12:53:54 +08:00
ApsisRS contributors d3afe86dfc workspace: initialize workspace with all layer crates 2026-09-26 12:53:13 +08:00