Skip to content

Commit 1f27358

Browse files
Gui-FernandesBRphmbressangithub-actions[bot]claudezuorenchen
authored
Update Master with Develop (#1068)
* ENH: `Function` vectorized speed-up and refactor (#1049) * MNT: deduplicate function arithmetic logic. ENH: modularize function arithmetic and source dispatch. MNT: refactor function math modules. MNT: optimize function math speed. * MNT: enhance parachute trigger evaluation for speed. * MNT: improve typing stack on Function evaluation. * MNT: architecture corrections and optimizations. * TST: attempt at tests re-run. * MNT: minor fixes and docstring update. * DOC: Update Changelog for PR #1049 * ENH: Interactive 3D Flight Trajectory and Attitude Animation. (#1066) * ENH: Interactive 3D Flight Trajectory and Attitude Animation. * TST: update actions workflow dependencies for headless run. * MNT: solve plot animation review comments on styling. * DOC: Update Changelog for PR #1066 * MNT: Remove unused pylint disable statements. (#1067) * DOC: Update Changelog for PR #1067 * TST: cover PyVista flight animation helpers and fix docstring Fixes the two CI failures on the develop -> master sync (PR #1068): - DOC/build-docs: the ``color_by`` parameter of ``animate_trajectory`` used the numpydoc ``{...}`` value-set syntax split across two lines, which numpydoc rejects ("invalid value set (missing closing brace)"). Because the docs job builds with ``-W`` (warnings as errors) the build failed. Rewrite the type as a single-line prose description. - codecov/patch and codecov/project: the new PyVista animation subsystem in ``_FlightPlots`` was only exercised by a single minimal off-screen smoke test, leaving the scene builders and the pure geometry/telemetry helpers uncovered. Add unit tests for the render-independent helpers (quaternion rotation, polylines, camera paths, option validation, event markers, telemetry panels, background palette, etc.) and extend the off-screen integration tests to drive the full set of overlays (charts, camera tracking, stability markers, playback controls) and the GIF export path. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VW2VidZmPd93dd8xW8BX2J * DOC: Update Changelog for PR #1069 * ENH: Add optional `max time` to `stochastic_flight` and create `stochastic_flight` objects with attributes in base flight (#1070) * Add max_time option to stochastic_flight * Update: use default attributes in flight object for stochastic flights * Add tests to check attributes * Refactor implementation * MNT: pre-release v1.13.0 cleanup — changelog consolidation + optional deps sync (#1073) * DOC: consolidate and clean v1.13.0 changelog for release - Fold the Unreleased section into v1.13.0 and date it 2026-07-19. - Drop reverted PR #958 entries (parachute abstract-base breaking change) and its revert #1063 - neither ever reached a release. - Consolidate the 3D flight animation into a single #1066 (PyVista) entry; drop the superseded Vedo-based #909. - Remove duplicate entries (#1066, #1067, #1055 in Added, #1047 in Added) and the doubled "ENH: ENH:" / "MNT: MNT:" auto-changelog prefixes. - Drop non-user-facing meta entries (#1062 changelog cleanup, #1069 CI fix) and the test-only entry (#1051), per the changelog's own scope rules. - Add the missing #1070 (max_time for StochasticFlight) entry. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * MNT: sync optional animation deps in requirements-optional.txt The 3D flight animation switched from Vedo (#909) to PyVista (#1066). pyproject.toml was updated (animation extra = pyvista + imageio-ffmpeg) but requirements-optional.txt still pinned the now-unused vedo and was missing the new deps. Drop vedo and add pyvista/imageio-ffmpeg so both dependency sources agree. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * DOC: Update Changelog for PR #1073 --------- Co-authored-by: Pedro Henrique Marinho Bressan <87212571+phmbressan@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: ZuoRen Chen <180084773+zuorenchen@users.noreply.github.com>
2 parents 4277d2f + 10fa378 commit 1f27358

56 files changed

Lines changed: 7492 additions & 2131 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/test-pytest-slow.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ jobs:
2727
MPLBACKEND: Agg
2828
steps:
2929
- uses: actions/checkout@main
30+
- name: Set up headless display
31+
uses: pyvista/setup-headless-display-action@v4
3032
- name: Set up Python
3133
uses: actions/setup-python@main
3234
with:

.github/workflows/test_pytest.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ jobs:
2626
MPLBACKEND: Agg
2727
steps:
2828
- uses: actions/checkout@main
29+
- name: Set up headless display
30+
uses: pyvista/setup-headless-display-action@v4
2931
- name: Set up Python
3032
uses: actions/setup-python@main
3133
with:

.pylintrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,6 @@ disable=raw-checker-failed,
476476
locally-disabled,
477477
file-ignored,
478478
suppressed-message,
479-
useless-suppression,
480479
deprecated-pragma, # because we have some pending deprecations in the code.
481480
use-symbolic-message-instead,
482481
use-implicit-booleaness-not-comparison-to-string,
@@ -510,6 +509,7 @@ disable=raw-checker-failed,
510509
# multiple time (only on the command line, not in the configuration file where
511510
# it should appear only once). See also the "--disable" option for examples.
512511
enable=
512+
useless-suppression
513513

514514

515515
[METHOD_ARGS]

CHANGELOG.md

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,36 +32,33 @@ Attention: The newest changes should be on top -->
3232

3333
### Added
3434

35-
- ENH: REV: Revert PR #958 [#1063](https://github.com/RocketPy-Team/RocketPy/pull/1063)
36-
- ENH: MNT: remove duplicate and merge-sync entries from Unreleased changelog [#1062](https://github.com/RocketPy-Team/RocketPy/pull/1062)
35+
- ENH: MNT: pre-release v1.13.0 cleanup — changelog consolidation + optional deps sync [#1073](https://github.com/RocketPy-Team/RocketPy/pull/1073)
3736
### Changed
3837

3938
### Fixed
4039

41-
## [v1.13.0] - 2026-07-04
40+
## [v1.13.0] - 2026-07-19
4241

4342
### Added
4443

45-
- ENH: ENH: Refactor flight.py latitude/longitude to use inverted_haversine [#1055](https://github.com/RocketPy-Team/RocketPy/pull/1055)
46-
- ENH: TST: Add unit tests for evaluate_reduced_mass and remove TODO [#1051](https://github.com/RocketPy-Team/RocketPy/pull/1051)
44+
- ENH: `Function` vectorized speed-up and refactor [#1049](https://github.com/RocketPy-Team/RocketPy/pull/1049)
45+
- ENH: Interactive 3D Flight Trajectory and Attitude Animation (PyVista) [#1066](https://github.com/RocketPy-Team/RocketPy/pull/1066)
46+
- ENH: Add optional `max_time` to `StochasticFlight` and carry base-flight attributes into created objects [#1070](https://github.com/RocketPy-Team/RocketPy/pull/1070)
4747
- ENH: seed sensor measurement noise per instance [#1052](https://github.com/RocketPy-Team/RocketPy/pull/1052)
48-
- ENH: FIX: pre release hardening [#1047](https://github.com/RocketPy-Team/RocketPy/pull/1047)
49-
- ENH: DEV: Claude Code ruff hooks (auto-format on edit + pre-push lint guard) [#1046](https://github.com/RocketPy-Team/RocketPy/pull/1046)
50-
- ENH: CI: create a CI for testing docs updates + solve different docs issues [#1045](https://github.com/RocketPy-Team/RocketPy/pull/1045)
51-
- ENH: MNT: final fixes before next release [#1044](https://github.com/RocketPy-Team/RocketPy/pull/1044)
48+
- DEV: Claude Code ruff hooks (auto-format on edit + pre-push lint guard) [#1046](https://github.com/RocketPy-Team/RocketPy/pull/1046)
49+
- CI: create a CI for testing docs updates + solve different docs issues [#1045](https://github.com/RocketPy-Team/RocketPy/pull/1045)
50+
- MNT: final fixes before next release [#1044](https://github.com/RocketPy-Team/RocketPy/pull/1044)
5251
- ENH: Individual Fins: add `Fin`, `TrapezoidalFin`, `EllipticalFin`, and `FreeFormFin` classes for modeling asymmetric or individually-positioned fins [#818](https://github.com/RocketPy-Team/RocketPy/pull/818)
5352
- ENH: Add AIGFS and HRRR forecast models to the Environment class [#951](https://github.com/RocketPy-Team/RocketPy/pull/951)
5453
- ENH: Add RingClusterMotor for annular clustered motor modeling [#924](https://github.com/RocketPy-Team/RocketPy/pull/924)
5554
- ENH: Discrete and Continuous Controllers [#946](https://github.com/RocketPy-Team/RocketPy/pull/946)
5655
- ENH: Add custom exceptions and unstable rocket warning [#970](https://github.com/RocketPy-Team/RocketPy/pull/970)
5756
- ENH: Adopt built-in Python logging instead of print() calls (closes [#450](https://github.com/RocketPy-Team/RocketPy/issues/450)) [#973](https://github.com/RocketPy-Team/RocketPy/pull/973)
5857
- ENH: Pass acceleration (`u_dot`) data to parachute trigger functions [#911](https://github.com/RocketPy-Team/RocketPy/pull/911)
59-
- ENH: Add 3D flight trajectory and attitude animations in Flight plots layer [#909](https://github.com/RocketPy-Team/RocketPy/pull/909)
6058
- ENH: Monte Carlo Formatting Options [#947](https://github.com/RocketPy-Team/RocketPy/pull/947)
6159
- ENH: Adaptive Monte Carlo via Convergence Criteria [#922](https://github.com/RocketPy-Team/RocketPy/pull/922)
6260
- ENH: Auto-Detection of Pressure Conversion Factor [#966](https://github.com/RocketPy-Team/RocketPy/pull/966)
6361
- ENH: Introduce pressure unit conversion when using forecast/reanalysis/ensemble data [#955](https://github.com/RocketPy-Team/RocketPy/pull/955)
64-
- MNT: Refactor parachute implementation with abstract base and hemispherical model split [#958](https://github.com/RocketPy-Team/RocketPy/pull/958)
6562
- DOC: Add aerodynamic surfaces user guide [#1043](https://github.com/RocketPy-Team/RocketPy/pull/1043)
6663
- DOC: Add Valkyrie flight example (Bisky Team) [#967](https://github.com/RocketPy-Team/RocketPy/pull/967)
6764
- DOC: Configure AI instructions and update developer docs [#975](https://github.com/RocketPy-Team/RocketPy/pull/975)
@@ -72,7 +69,7 @@ Attention: The newest changes should be on top -->
7269
### Changed
7370

7471
- REL: bumps up rocketpy version to 1.13.0 [#1048](https://github.com/RocketPy-Team/RocketPy/pull/1048)
75-
- MNT: **Breaking**: `Parachute` is now an abstract base class and can no longer be instantiated directly; use `HemisphericalParachute` (or `Rocket.add_parachute`, which builds it for you). Loading old serialized files still works [#958](https://github.com/RocketPy-Team/RocketPy/pull/958)
72+
- MNT: Remove unused pylint disable statements [#1067](https://github.com/RocketPy-Team/RocketPy/pull/1067)
7673
- MNT: Discrete controllers are now called exactly once per time node (previously twice); results may change for stateful controllers and `observed_variables` no longer contains duplicated entries [#949](https://github.com/RocketPy-Team/RocketPy/pull/949)
7774
- MNT: Multi-dimensional linear `Function` objects now apply their extrapolation rule to points outside the data's convex hull (previously returned NaN) [#969](https://github.com/RocketPy-Team/RocketPy/pull/969)
7875
- MNT: Informational messages previously shown with `print()` now use Python logging and are silent by default; call `rocketpy.utils.enable_logging()` to see them [#973](https://github.com/RocketPy-Team/RocketPy/pull/973)

docs/notebooks/getting_started_colab.ipynb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -592,12 +592,12 @@
592592
},
593593
{
594594
"cell_type": "markdown",
595-
"source": "## 3D Flight Animation\n\nRocketPy can render an interactive 3D animation of the rocket's trajectory and attitude using [vedo](https://vedo.embl.es/). This feature requires the optional `animation` extra:\n\n```bash\npip install rocketpy[animation]\n```\n\n> **Note:** The interactive animation window opens in a desktop environment. It will not display inside Google Colab or other headless notebook servers — run it locally for the best experience.\n\nTwo animation modes are available:\n\n| Method | What it shows |\n|---|---|\n| `flight.plots.animate_trajectory()` | Rocket moves through 3D space following the simulated trajectory |\n| `flight.plots.animate_rotate()` | Rocket stays centred; only attitude (rotation) is animated |\n\nBoth methods accept an optional `file_name` argument pointing to a custom `.stl` model. When omitted, RocketPy uses a built-in default rocket shape.",
595+
"source": "## 3D Flight Animation\n\nRocketPy can render an interactive 3D animation of the rocket's trajectory and attitude using [PyVista](https://pyvista.org/). This feature requires the optional `animation` extra:\n\n```bash\npip install rocketpy[animation]\n```\n\n> **Note:** A local desktop Python or Jupyter environment provides the best interactive experience. Google Colab requires a compatible PyVista Jupyter backend.\n\nTwo animation modes are available:\n\n| Method | What it shows |\n|---|---|\n| `flight.plots.animate_trajectory()` | Simulated and flown paths, scalar coloring, telemetry, velocity and wind, flight events and georeferenced ground imagery |\n| `flight.plots.animate_rotate()` | Centred attitude view with body, velocity and wind vectors, stability markers, an inertial reference sphere and live angular rates |\n\nBoth views provide play/pause, a draggable flight-time control, 0.5x/1x/2x/3x playback speeds, optional kinematic charts, camera presets and deterministic GIF/MP4 export. Day/night colors are selected from local launch time and blend toward near-space navy with altitude. The trajectory defaults to speed coloring and also supports Mach, dynamic pressure, acceleration and altitude. The rotate view can show aerodynamic angles, 3-1-3 Euler angles, body rates, center of mass and center of pressure. Pass `color_scheme` to override the shared palette. The methods accept an optional `file_name` argument pointing to a custom `.stl` model. When omitted, RocketPy uses a built-in default rocket shape.",
596596
"metadata": {}
597597
},
598598
{
599599
"cell_type": "code",
600-
"source": "# Install the optional animation dependency (skip if already installed)\n!pip install \"rocketpy[animation]\"\n\n# Animate the full trajectory — rocket moves through 3D space\n# Press Escape or close the window to exit the animation\ntest_flight.plots.animate_trajectory(\n start=0,\n stop=test_flight.t_final,\n time_step=0.05,\n)\n\n# Alternatively, animate only the attitude changes (rocket stays centred)\n# test_flight.plots.animate_rotate(\n# start=0,\n# stop=test_flight.t_final,\n# time_step=0.05,\n# )\n\n# To use your own 3D model, pass its path via file_name:\n# test_flight.plots.animate_trajectory(file_name=\"my_rocket.stl\")",
600+
"source": "# Install the optional animation dependency (skip if already installed)\n!pip install \"rocketpy[animation]\"\n\n# Animate the full trajectory — rocket moves through 3D space\n# Press Escape or close the window to exit the animation\ntest_flight.plots.animate_trajectory(\n start=0,\n stop=test_flight.t_final,\n time_step=0.05,\n color_by=\"speed\",\n show_kinematic_plots=True,\n camera_mode=\"follow\",\n)\n\n# Alternatively, animate attitude and stability diagnostics\n# test_flight.plots.animate_rotate(\n# start=0,\n# stop=test_flight.t_final,\n# time_step=0.05,\n# show_attitude_plots=True,\n# show_cp_cm=True,\n# )\n\n# Deterministic export:\n# test_flight.plots.animate_trajectory(export_file=\"flight.mp4\", export_fps=30)\n\n# To use your own 3D model, pass its path via file_name:\n# test_flight.plots.animate_trajectory(file_name=\"my_rocket.stl\")",
601601
"metadata": {},
602602
"execution_count": null,
603603
"outputs": []
@@ -833,4 +833,4 @@
833833
},
834834
"nbformat": 4,
835835
"nbformat_minor": 2
836-
}
836+
}

0 commit comments

Comments
 (0)