Skip to content

Migrate CI and install docs to uv - #221

Open
gomezzz wants to merge 5 commits into
ci/ruff-lint-formatfrom
ci/uv-migration
Open

Migrate CI and install docs to uv#221
gomezzz wants to merge 5 commits into
ci/ruff-lint-formatfrom
ci/uv-migration

Conversation

@gomezzz

@gomezzz gomezzz commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

Switches CI and install docs to uv (Python 3.8 — the only Python with pip wheels for pykep 2.6, the 2.x API PASEOS depends on). conda/environment.yml is kept as the cross-platform + newer-Python path.

  • Rewrite run_tests.yml to astral-sh/setup-uv on Python 3.8, replacing the deprecated provision-with-micromamba@main that had CI failing; README build instructions lead with uv.
  • A [tool.uv] override drops pykep's broken sklearn shim dependency; MPLBACKEND=Agg keeps the headless visualization test from blocking; pytest-timeout added as a safety net.
  • test_thermal runs in real-time mode; a 200x multiplier made slow/loaded runners spiral into unbounded catch-up. Lowered to 20x with a generous heated-up assertion window.

Result: 36/36 tests pass on the uv/Python 3.8 runner, lint + format green.

Test plan

  • CI Running tests green — 36 passed
  • CI Ruff Lint and Format Check green

Stacked on #218 (ruff). The advance_time engine fix is now a separate PR (#220) stacked on top of this one. (Supersedes the earlier #219, which GitHub auto-closed during a stack reorder.)

gomezzz added 5 commits July 24, 2026 11:25
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.
@github-actions

Copy link
Copy Markdown

Overall Coverage

Coverage Report
FileStmtsMissCoverMissing
__init__.py33197%48
paseos.py1441292%67–68, 145–146, 203, 218, 236, 245, 263, 294, 302, 305
activities
   activity_manager.py43393%46, 74, 156
   activity_processor.py570100% 
   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% 
   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
TOTAL218319691% 

Tests Skipped Failures Errors Time
36 0 💤 0 ❌ 0 🔥 3m 55s ⏱️

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