Skip to content

Merge main into release for 0.2.1 - #225

Merged
gomezzz merged 31 commits into
releasefrom
main
Aug 22, 2026
Merged

gomezzz merged 31 commits into
releasefrom
main

Conversation

@gomezzz

@gomezzz gomezzz commented Aug 22, 2026 •

Copy link
Copy Markdown
Collaborator

Description

Merges the current main into release to start the 0.2.1 hotfix release.

Related to #224

Changelog

Added

Fixed

Changed

Test plan

  • CI is green on this PR (ruff lint + format gate, pytest on Python 3.8)
  • Docs build locally without warnings that hide new features
  • After merge: version bump to 0.2.1, testpypi upload, and install check from testpypi

Important

Do not delete the release branch when merging this PR.

gomezzz and others added 30 commits September 4, 2023 10:16
release -> main (syncing commits)
Updated email address
set_orbit creates an analytical Keplerian two-body orbit, so J2 and
drag are unmodelled and propagated positions drift from real satellite
trajectories over multi-hour horizons. Measured for a LEO/SSO actor
seeded from an SGP4 state: 252 km at +3 h, 5,418 km at +72 h vs the
TLE's SGP4 trajectory, while set_TLE matches SGP4 exactly.

Add a fidelity note to the set_orbit docstring pointing TLE users to
set_TLE, a cross-reference in set_TLE, and a matching N.B. in the
README's orbit section. No behaviour change.

Verified-by: pytest paseos/tests — 30 passed; 6 pre-existing env
failures identical on unmodified tree
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…docs

Document two-body vs SGP4 propagation fidelity in ActorBuilder
Replace setup.py, requirements.txt and pytest.ini with a single
pyproject.toml (setuptools backend). Use namespace-package discovery so
all subpackages are shipped, including paseos.geometric_model, which the
hand-maintained setup.py package list had omitted.

Update the PyPI deploy workflows to build with 'python -m build' instead
of the removed 'setup.py sdist bdist_wheel'. environment.yml is kept for
conda users.
Drop autoblack.yml and the flake8 lint job; add formatting.yml running
'ruff check' and 'ruff format --check' via astral-sh/ruff-action, and
swap the severe-error gate in run_tests.yml from flake8 to ruff.

Apply 'ruff format' and 'ruff check --fix' (import sorting) across the
package and tests. Notebooks stay excluded, matching the previous
black 'jupyter: false' setup.
Rewrite run_tests.yml to use astral-sh/setup-uv with Python 3.8 (the
only Python for which pykep 2.6 ships pip wheels), replacing the
deprecated provision-with-micromamba action. Switch the README build
instructions to lead with uv, keeping conda/environment.yml as the
cross-platform, newer-Python option.

pykep 2.6 declares the deprecated 'sklearn' shim as a dependency (which
fails to build); drop it via a uv override-dependencies always-false
marker, since pykep only soft-checks sklearn and PASEOS never uses it.
The thermal test runs in real-time mode, so its outcome depends on wall
clock. A 200x multiplier made a slow/loaded runner fall behind and spiral
into an unbounded catch-up (overshooting temperature and timing out).
Lower the multiplier to 20x and assert a generous heated-up window instead
of a tight 285-300K band that only holds on fast machines.
advance_time set _is_advancing_time=True before validating its arguments
and only cleared it on the normal return path, so any early return
(radiation events) or exception left the guard stuck True, poisoning
every subsequent call with a spurious 'advance_time is already running'
assertion. In real-time activity mode the measured interval can round to
zero, tripping the positive-time assert, which crashed the background
ActivityProcessor and deadlocked wait_for_activity.

Release the guard in a finally block, treat a zero interval as a no-op,
and skip zero-length processor updates instead of asserting.
Covers the two failure modes fixed here: a zero-length interval is a
no-op that never engages the guard, and an exception mid-advance_time
still releases it so a subsequent call succeeds (previously deadlocked).
Also corrects the ActivityProcessor._update comment now that advance_time
handles zero intervals itself.
…*4 to 288 to match the documentation and make the value realistic
Replace black and flake8 with ruff
Migrate CI and install docs to uv
Fix advance_time re-entrancy guard leaking on early return/exception
…e-default

Fix: use correct units for body_surface_temperature_in_K (K instead of K^4)
@github-actions

Copy link
Copy Markdown

Overall Coverage

Coverage Report
FileStmtsMissCoverMissing
__init__.py33197%48
paseos.py1471292%67–68, 153–154, 214, 229, 247, 256, 274, 305, 313, 316
activities
   activity_manager.py43393%46, 74, 156
   activity_processor.py59198%91
   activity_runner.py621084%80–81, 84, 104, 108–109, 112–113, 122, 125
actors
   actor_builder.py1853283%24–25, 27, 30, 33, 223–225, 256–258, 312, 316–317, 320–321, 342, 344–345, 348–349, 488, 545, 573, 585–586, 588–589, 596–597, 604–605
   base_actor.py1281886%82, 104, 120, 167, 207–209, 230, 239, 256, 277, 283–286, 292, 307, 362
   ground_station_actor.py15380%47, 51, 53
   spacecraft_actor.py60198%122
central_body
   central_body.py65592%68, 177–178, 186–187
   is_in_line_of_sight.py581279%107–108, 110, 112–117, 124, 168, 188
   mesh_between_points.py35294%64, 72
   sphere_between_points.py26869%35, 37–38, 48, 50–51, 63–64
communication
   find_next_window.py200100% 
   get_communication_window.py23291%38, 64
geometric_model
   geometric_model.py281643%32, 34–38, 47, 49, 61, 76, 78–79, 92–93, 101–102
power
   charge_model.py16194%50
   discharge_model.py7186%34
   power_device_type.py40100% 
radiation
   radiation_model.py320100% 
tests
   activity_test.py56395%92, 95–96
   actor_builder_test.py630100% 
   advance_time_test.py170100% 
   communication_window_test.py48198%177
   custom_propagator_test.py250100% 
   custom_property_test.py230100% 
   default_cfg_test.py90100% 
   eclipse_test.py10190%20
   event_based_test.py230100% 
   import_test.py6183%13
   init_test.py8188%16
   line_of_sight_test.py62494%143–146
   mesh_test.py119397%119, 137, 145
   multiple_instance_test.py120100% 
   operations_monitor_test.py310100% 
   power_test.py290100% 
   radiation_test.py590100% 
   test_utils.py170100% 
   thermal_model_test.py30197%70
   time_multiplier_test.py260100% 
   visualization_test.py18194%30
thermal
   thermal_model.py750100% 
utils
   check_cfg.py611870%31, 40, 46, 60–62, 67, 70–72, 75–77, 80–82, 98, 103
   load_default_cfg.py90100% 
   operations_monitor.py71396%127–128, 130
   reference_frame.py40100% 
   set_log_level.py60100% 
visualization
   animation.py18667%28–31, 36, 45
   plot.py9367%29–30, 32
   space_animation.py2152389%109–110, 125, 148–149, 183, 207, 214, 220, 330, 353–355, 360, 369–370, 374, 410, 416–417, 448, 462, 473
TOTAL220519791% 

Tests Skipped Failures Errors Time
38 0 💤 0 ❌ 0 🔥 2m 49s ⏱️

@gomezzz
gomezzz merged commit bd70ff6 into release Aug 22, 2026
3 checks passed
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.

5 participants