Conversation
release -> main (v0.2.0)
release -> main (syncing commits)
Creating Geometric Model
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.
Add CLAUDE.md
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
Migrate packaging to pyproject.toml
Replace black and flake8 with ruff
Migrate CI and install docs to uv
Fix advance_time re-entrancy guard leaking on early return/exception
Skip pytest coverage comment on fork PRs
…e-default Fix: use correct units for body_surface_temperature_in_K (K instead of K^4)
This was referenced Aug 22, 2026
Closed
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Merges the current
mainintoreleaseto start the0.2.1hotfix release.Related to #224
Changelog
Added
ActorBuilder(Document two-body vs SGP4 propagation fidelity in ActorBuilder #214)Fixed
body_surface_temperature_in_Kdefault corrected from288**4to288so it matches the documentation and is physically meaningful (Fix: use correct units for body_surface_temperature_in_K (K instead of K^4) #222)advance_time()re-entrancy guard is now exception-safe: an activity raising insideadvance_time()no longer leaves the instance permanently locked (Fix advance_time re-entrancy guard leaking on early return/exception #220)Changed
setup.py/requirements.txttopyproject.toml(Migrate packaging to pyproject.toml #217)black+flake8toruff(Replace black and flake8 with ruff #218)uv(Migrate CI and install docs to uv #221)CLAUDE.mdwith project overview and development guidance (Add CLAUDE.md #216)Test plan
0.2.1, testpypi upload, and install check from testpypiImportant
Do not delete the
releasebranch when merging this PR.