Skip to content

ENH: pull v1.13 from RocketPy - #16

Merged
zuorenchen merged 183 commits into
developfrom
enh/merge-from-rocketpy
Jul 26, 2026
Merged

ENH: pull v1.13 from RocketPy#16
zuorenchen merged 183 commits into
developfrom
enh/merge-from-rocketpy

Conversation

@zuorenchen

Copy link
Copy Markdown
Member

RocketPy will soon release v1.13. This PR pulls the changes.

phmbressan and others added 30 commits November 2, 2025 17:49
MNT: update develop to release v1.11.0
Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
* DOC: Add entry for custom warnings in CHANGELOG.md

Added a placeholder in the [Unreleased] section for the upcoming feature
to add custom warnings when a rocket is missing motors and/or aero-surface. See RocketPy-Team#285.

* ENH: add custom warning for Rocket with no components

This enhancement adds a warning when a Rocket object has no motors,
parachutes, or AeroSurface components. It notifies the user so that
they can add missing components before running simulations. See RocketPy-Team#285

* ENH:Add tests for _check_missing_components method in Rocket class

* TST:improve test_check_missing_no_components_missing to correctly handle warnings

* BUG: do not warn for rockets without parachute

Only warn if motor or aerodynamic surfaces are missing. Never raise a warning for no parachute. See RocketPy-Team#285

* TST:Update the test:do not warn when missing parachute

* MNT: simplify checks and update docstrings in rocket.py

- Removed redundant len() check for aerodynamic_surfaces.
- Added 'Returns: None' section to NumPy-style docstring.
- Removed redundant '[WARNING]' prefix in warnings messages.

* TST:update test_check_missing_no_components_missing to avoid TypeError: exceptions must be derived from Warning, not <class 'NoneType'>

* TST:update test_check_missing_no_components_missing:import the lib at the top of file

* TST:update test_check_missing_no_components_missing:import the lib at the top of file

* Fix lint errors

---------

Co-authored-by: Tang Xiaoyu <xiaoyu.tang.fr@gmail.com>
Co-authored-by: Marchma0 <nehlilkamel@gmail.com>
* Add the function to create a motor from the API of thrustcurve and the test

* Improve load_from_thrustcurve_api and test_load_from_thrustcurve_api with clean imports

* Clean up load_from_thrustcurve_api and improve test_load_from_thrustcurve_api with exception testing

* Use warnings.warn() in load_from_thrustcurve_api when motor is found (as requested)

* Added documentation for the load_from_thrustcurve_api method into the genericmotors.rst file

* Changes to conform to lint

* Fixed Pylint errors

* Update docs/user/motors/genericmotor.rst

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* Update docs/user/motors/genericmotor.rst

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* Update docs/user/motors/genericmotor.rst

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Set private the method call_thrustcurve_api

* Update docs/user/motors/genericmotor.rst

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update tests/unit/motors/test_genericmotor.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update rocketpy/motors/motor.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/user/motors/genericmotor.rst

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/user/motors/genericmotor.rst

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/user/motors/genericmotor.rst

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Modify the changelog

* Bug fix

* Refactor GenericMotor class: comment out unused designation and manufacturer variables

* Add the function to create a motor from the API of thrustcurve and the test

* Improve load_from_thrustcurve_api and test_load_from_thrustcurve_api with clean imports

* Clean up load_from_thrustcurve_api and improve test_load_from_thrustcurve_api with exception testing

* Use warnings.warn() in load_from_thrustcurve_api when motor is found (as requested)

* Added documentation for the load_from_thrustcurve_api method into the genericmotors.rst file

* Changes to conform to lint

* Fixed Pylint errors

* Update docs/user/motors/genericmotor.rst

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* Update docs/user/motors/genericmotor.rst

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* Update docs/user/motors/genericmotor.rst

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Set private the method call_thrustcurve_api

* Update docs/user/motors/genericmotor.rst

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update tests/unit/motors/test_genericmotor.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update rocketpy/motors/motor.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/user/motors/genericmotor.rst

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/user/motors/genericmotor.rst

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/user/motors/genericmotor.rst

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Modify the changelog

* Bug fix

---------

Co-authored-by: monta <montadharettaieb@gmail.com>
* ENH: Enable only radial burning

* DOC: Update docstring for only_radial_burn default value in HybridMotor

* fix pylint

---------

Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br>
* DRAFT: for ENH/3-dof-simulation (See  RocketPy-Team#655)

ENH: adds 3 DOF simulation capability to rocketpy.Flight.

*ENH: added "u_dot_3dof" for "solid_propulsion"
mode

*ENH: adding "u_dot_generalized_3dof" for "standard"
mode (still incomplete)

*ENH: new parameter "simulation_mode" for swtiching
between 3 dof and 6 dof

*ENH: updated conditions for "__init_equations_of_motion"

*ENH: 2 new example files have been created to test 3 dof model
"test_bella_lui_flight_sim" and "test_camoes_flight_sim"

* ENH/3-dof-simulation (See  RocketPy-Team#655)
ENH: adds 3 DOF simulation capability to rocketpy.Flight.

*ENH: added "u_dot_3dof" for "solid_propulsion"
mode

*ENH: added "u_dot_generalized_3dof" for "standard"
mode

*ENH: new parameter "simulation_mode" for swtiching
between 3 dof and 6 dof

*ENH: updated conditions for "__init_equations_of_motion"

* MNT: cleaned up new functions and
ENH: fixed standard 3 dof

*MNT: Cleaned up the "u_dot_3dof" and "u_dot_generalized_3_dof"

*MNT: Corrected Typos in "simulation_mode"
description

*ENH: "u_dot_generalized_3_dof" fixed and tested
on examples.

* ENH: Addition of point mass classes to rocketpy.rocket and rocketpy.motor

ENH: added "BaseRocket" and "PointMassRocket" to rocket class

ENH: added "PointMassMotor" to motor class with various input cases of thrust values

* ENH: PointMassMotor and PointMassRocket working as intended after some tests

ENH: Added a new jupyter notebook for a simplified 3 DOF example

MNT: PointMassMotor intialization error fixed

MNT: PointMassRocket properties enhanced based on the example runs

* MNT: Removing unnecessary files added by mistake.

* MNT: Cleaned up PointMassMotor and PointMassRocket class

MNT: Cleaned up the flight class u_dot_generalized_3dof

TODO: Add info for 3 dof cases and fix some new issues when parachute is added.

* MNT: Cleaning up flight class and PointMassMotor class

* MNT: point mass motor cleanup

-MNT: removing the parameters not needed for point mass kind of motors

-MNT: removing extra parameter thrust_curve

-MNT: fixing problems with motor class inheritance

* ENH: restructuring rocket class

-ENH: removed 'BaseRocket' class now 'PointMassRocket' inherits directly from 'Rocket' class

* MNT: fixing certain calculations on point mass motor

-MNT: fixed calculations of mass flow rate and exhaust velocity
-MNT: adjusted propellant initial mass setter error by allocating the input initial mass to the property

* Rename PointMassMotor.py to pointmassmotor.py

MNT: renaming pointmassmotor.py

-MNT:snake case renaming

* MNT: updates to 3dof example

-MNT: incorporating latest structural changes made to PointMassMotor and PointMassRocket

* MNT: lint cleanup and adding 3dof to init

-MNT: cleaned up PointMassRocket rocket.py for linters.
-ENH: including PointMassMotor in motors and rocketpy __init__.py
-MNT: adopting to structural changes in 3dof on the 3_DOF_TRIAL.ipynb
-MNT: including pointmassmotor in settings.json as a spell word

* MNT: Point mass motor and rocket fixes

- MNT: pointmassmotor fixing the various properties.
- MNT: fixing super init and init inheritance by changing order in pointmassrocket
- MNT: pointmassrocket property setter and default value fixes

* MNT: flight class fix on simulation mode detection

- MNT: implemented identification of simulation mode based on check if point mass objects are used

* MNT: make format changes

- MNT: used make format to correct formatting mistakes on all the new classes.

* MNT: point mass motor cleanup

-MNT: removing the parameters not needed for point mass kind of motors

-MNT: removing extra parameter thrust_curve

-MNT: fixing problems with motor class inheritance

* ENH: restructuring rocket class

-ENH: removed 'BaseRocket' class now 'PointMassRocket' inherits directly from 'Rocket' class

* MNT: fixing certain calculations on point mass motor

-MNT: fixed calculations of mass flow rate and exhaust velocity
-MNT: adjusted propellant initial mass setter error by allocating the input initial mass to the property

* Rename PointMassMotor.py to pointmassmotor.py

MNT: renaming pointmassmotor.py

-MNT:snake case renaming

* ENH: _MotorPrints inheritance - issue RocketPy-Team#460 (RocketPy-Team#828)

* ENH: refactor motor prints classes to inherit from _MotorPrints

* STY: make format

* ENH: add entry for _MotorPrints inheritance in changelog

* MNT: fix deprecations and warnings (RocketPy-Team#829)

* MNT: update code and remove deprecated functions

* MNT: simplify geodesic_to_utm import and usage in Environment class

* MNT: update CHANGELOG to fix deprecations and warnings

* make lint

* MNT: remove unused post_processed attribute from Flight class

* MNT: update matplotlib version to 3.8.3 in requirements.txt

* MNT: update matplotlib version to 3.10.0 in requirements.txt

* MNT: downgrade matplotlib version to 3.9.0 in requirements.txt

* MNT: change boxplot orientation to horizontal for compatibility with future Python versions

* MNT: change boxplot orientation from horizontal to vertical for consistency

* DEV: streamline caching of Python dependencies in GitHub Actions

* ENH: Add the Coriolis Force to the Flight class (RocketPy-Team#799)

* wind factor bug corrected

the wind factor wasn't applied to the env.wind_velocity properties

* BUG: StochasticModel visualize attributes of a uniform distribution

It showed the nominal and the standard deviation values and it doesn't make sense in a uniform distribution. In a np.random.uniform the 'nominal value' is the lower bound of the distribution, and the 'standard deviation' value is the upper bound. Now, a new condition has been added for the uniform distributions where the mean and semi range are calculated and showed. This way the visualize_attribute function will show the whole range where the random values are uniformly taken in

* variable names corrections

* Corrections requested by the pylint test

* ENH: add multiplication for 2D functions in rocketpy.function

Added the ability to multiply functions with 2D domains in the __mul__ function

* ENH: StochasticAirBrakes class created

The StochasticAirBrakes class has been created. The __init__.py files in the stochastic and rocketpy folders have also been modified accordingly to incorporate this new class

* ENH: set_air_brakes function created

This functions appends an airbrake and controller objects previuosly created to the rocket

* ENH: add StochasticAirBrake to rocketpy.stochastic_rocket

Some functions has been modified and other has been created in order to include the new StochasticAirBrakes feature into the StochasticRocket class. A new function named 'add_air_brakes' has been created to append a StochasticAirBrakes and Controller objects to the StochasticRocket object. A new function '_create_air_brake' has been introduced to create a sample of an AirBrake object through a StochasticAirBrake object. Enventually, the 'create_object' function has been modified to add the sampled AirBrakes to the sampled Rocket

* BUG: StochasticAirBrake object input in _Controller

When defining the _Controller object a StochasticAirBrake was input. This is already corrected and a AirBrake object is now introduced

* ENH: add time_overshoot option to rocketpy.stochastic_flight

Since the new StochasticAirBrake class is defined, we need the 'time_overshoot' option in the Flight class to ensure that the time step defined in the simulation is the controller sampling rate. The MonteCarlo class has had to be modified as well to include this option.

* DOC: StochasticAirBrakes related documentation added

Documentation related to the StochasticAirBrakes implementation has been added in StochasticAirBrakes, StochasticRocket and Rocket classes.

* ENH: pylint recommendations done

* ENH: Reformatted files to pass Ruff linting checks

* ENH: Update rocketpy/stochastic/stochastic_rocket.py

Unnecessary comment

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* ENH: more intuitive uniform distribution display in StochasticModel

Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>

* DOC: improve drag curve factor definition in StochasticAirBrakes

* ENH: Change assert statement to if

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* DOC: better explanation of __mul__ function

Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>

* ENH: delete set_air_brakes function for simplicity

* ENH: inertial foreces added to u_dot_generalized

* ENH: define Earth's angular velocity vector in Environment

* ENH: some corrections to the Flight class

* ENH: modifications in the Flight class

* DOC: improving Environment documentation

* DOC: more improvements in the Environment class

* ENH: format changes done

* DOC: env.earth_rotation_vector improved

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* ENH: Coriolis acceleration added to u_dot

* BUG: print left

* ENH: ruff changes

* ENH: CHANGELOG updated

* ENH: remove unecessary frame rotation

* ENH: remove rotation from solid prop udot

* ENH: add coriolis to parachute

* TST: fix tests values

* MNT: remove debug functions

* DEV: changelog

---------

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>
Co-authored-by: MateusStano <go34lap@mytum.de>
Co-authored-by: MateusStano <mateusstano@usp.br>

* MNT: deprecated decorator (RocketPy-Team#830)

* ENH: refactor motor prints classes to inherit from _MotorPrints

* STY: make format

* MNT: update code and remove deprecated functions

* ENH: add deprecation decorator and update deprecated methods

* make format

* fix warnings

* MNT: updates to 3dof example

-MNT: incorporating latest structural changes made to PointMassMotor and PointMassRocket

* MNT: lint cleanup and adding 3dof to init

-MNT: cleaned up PointMassRocket rocket.py for linters.
-ENH: including PointMassMotor in motors and rocketpy __init__.py
-MNT: adopting to structural changes in 3dof on the 3_DOF_TRIAL.ipynb
-MNT: including pointmassmotor in settings.json as a spell word

* MNT: Point mass motor and rocket fixes

- MNT: pointmassmotor fixing the various properties.
- MNT: fixing super init and init inheritance by changing order in pointmassrocket
- MNT: pointmassrocket property setter and default value fixes

* MNT: flight class fix on simulation mode detection

- MNT: implemented identification of simulation mode based on check if point mass objects are used

* MNT: make format changes

- MNT: used make format to correct formatting mistakes on all the new classes.

* MNT: rocket.py removed pointmassrocket inertia

- MNT: removed dry inertia setters from pointmassrocket

* MNT: flight.py review updates

- MNT: fixed the order of attributes shifted simulation mode after ode solver
- MNT: added flight.simulation in docstring

* MNT: flight.py sanitization

- MNT: manually updated flight.py to match the current version on develop

* MNT: make format and renaming 3 dof example

- MNT: make format changes to flight.py
- MNT: "3_DOF_TRIAL.ipynb" renamed to "3_dof_trial_sim.ipynb"

* MNT: Update flight.py to remove duplicate line

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* MNT: correcting indentation in flight.py

- MNT: indentation error in flight class for callback under parachute trigger

* MNT: docstring for pointmassrocket in rocket.py

- MNT: added a short doc string describing pointmassrocket class

* MNT: removing property from rocket.py poitmassrocket

- MNT: properties which are similar to attributes are not needed were removed from pointmassrocket
- MNT: removing default set values for attributes for pointmassrocket

* ENH: first version of tests for 3dof rocketpy

- ENH: added first versions of tests using python assert statements for pointmassmotor, pointmassrocket and 3dof segments of flight.

* adds docs

* Refactor PointMassRocket class into its own module for improved organization and clarity

* refactored tests

* fix test

* remove example notebook

* type hint fix

* Configure matplotlib to use non-interactive backend for tests

* fix tests

* solve comments by copilot

* small fix

* DOC: Update test docstrings to follow RocketPy NumPy style guidelines

* docs: Update test docstrings to follow RocketPy style guidelines

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

---------

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br>
Co-authored-by: Kevin Alcañiz <kevinalcaniz22@gmail.com>
Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>
Co-authored-by: MateusStano <go34lap@mytum.de>
Co-authored-by: MateusStano <mateusstano@usp.br>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
…Team#825 (RocketPy-Team#877)

* created new branch

* ENH: Add MERRA-2 compatibility with unit conversion and documentation.

* ENH: Finalize MERRA-2 support (Resolve conflicts, Update Docs)

* Style: Fix ruff formatting errors

* REV: Address all code review comments

* Apply suggestion from @Gui-FernandesBR

---------

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
* ENH: Add persistent caching for ThrustCurve API and updated documentation

* REV: Address feedback (Robustness, Docstrings, Changelog)

* DOCS: Restore CHANGELOG history and add new entry

* REV: Final (hopefully) polish (Robustness test, Coverage, Docs)
…Team#884)

* Initial plan

* Add save functionality to _MonteCarloPlots.all method

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* Improve test cleanup for monte_carlo_plots_all_save test

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* DOC: Add PR RocketPy-Team#848 to CHANGELOG.md

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
…RocketPy-Team#885)

* Fix parallel Monte Carlo iteration count display to show monotonically increasing completed count

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* Add PR RocketPy-Team#806 to CHANGELOG.md

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
* ENH: Create FlightComparator class

* ENH: Integrate FlightComparator into Flight class

* TST: Add comprehensive unit tests for FlightComparator

* DOCS: Add FlightComparator user guide and update CHANGELOG

* DOC: Fix doctest failure in FlightComparator docstring

* MTN: Cleaned up some comments

* ran ruff format

* ENH: Addressed feedback

* MNT: fix legend wording typos

* keeping these changes here

* Removed Flight.compare wrapper to fix circular imports, updated docs and tests accordingly

* removed pylint silencer

* addressed copilot feedback
* Add the method CI estimation and test

* Update the changelog

* Add the documentation

* Add more tests

* Update rocketpy/simulation/monte_carlo.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Added a button_height attribute to RailButtons with a default value of 15mm and updated the docstring

* added a _calculate_rail_button_bending_moments to calculate the desired attributes

* fixed new method added properties

* fixed typo

* fixed code, added documentation, updated changelog, added tests

* formatting

* FIX: Handle center_of_dry_mass_position as property or callable

* ENH: Address review feedback - make button_height optional (None), add prints/plots, improve documentation

* clarified documentation(assumptions) in flight.rst

* TST: Split default vs explicit None button_height tests

* make format

* MNT: Fix pylint config and remove duplicate test imports
* feat: add axial_acceleration with tests

* Update axial_acceleration.

* Update CHANGELOG

* Update CHANGELOG

* Refine docstring for axial_acceleration method

Updated docstring for axial_acceleration method to improve clarity.

---------

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
…ocketPy-Team#894)

* ENH: add animations for motor propellant mass and tank fluid volumes

* DOC: update changelog for animation enhancement

* TST:add test_show_or_save_animation_unsupported_format and solve some problems

* TST:add tests for the methods animate_propellant_mass and animate_fluid_volume and solve linters issues

* DOC:update documentation docs/user/motors/liquidmotor.rst and docs/user/motors/tanks.rst

* fix hangelog

* fix changelog

---------

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
…f M, Re, α) (RocketPy-Team#875)

* Add grid interpolation support to Function class with from_grid() method

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* Add multi-dimensional drag coefficient support to Flight class and integration tests

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* Run ruff format on modified files

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* MNt: refactoring get_drag_coefficient in flight.py

- MNT: velocity_body was not being used in get_drag_coefficient, removed it as an input

* MNT: refactoring in flight.py and lint corrections to function.py and test_multidim_drag.py

-MNT:  removed unused velocity in body frame parameter requirement from all instances of get_drag_coefficient in flight.py

- MNT: corrected docstring for get_value_opt_grid in function.py

- MNT: shifted import of classes before the definition of functions in test_multidim_drag.py

* MNT: refactoring flight.py to remove unused parameters

* MNT: correction of docstring function.py

- MNT: rearranged the docstring of from_grid in function.py to match the expected output of doctest

* MNT: make format and lint corrections to function.py

- MNT: reran make format and lint on function.py to correct after previous changes to from_grid

* MNT: pylint adjustments for new methods in function.py

- MNT: disables pylint unused private member for get_value_opt_grid as it is called upon dynamically by from_grid

- MNT: disabled pylint too many statement for from_grid for now and added a to-do to refactor it into smaller methods/helper functions

- MNT: updated .pylintrc to record Re as good name

* MNt: make format after previous change to function.py

* MNT: removed Re where unused in test_multidim_drag.py

- MNT: Re variable was unused in test_3d_drag_with_varying_alpha thus replaced it

* TST: Add tests for shepard_fallback in test_function_grid.py (RocketPy-Team#879)

* Add tests for shepard_fallback in test_function_grid.py

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* TST: test_multidim_drag.py

- TST: Added integration-level check to verify the flight simulation actually uses alpha when evaluating multi dim drag coeff.
- TST: utilized pytest fixtures where possible.

* MNT: addition of is_multidimensional to function.py

- MNT: Function.is_multidimensional property in function.py. It returns True when the function's internal domain dimension is greater than 1 and safely returns False on errors.

- MNT: Replaced the ad-hoc hasattr/len check in flight.py with a clearer check:
if isinstance and drag_function.is_multidimensional

* MNT: Added validation in from_grid in function.py to raise a ValueError when an unsupported extrapolation value is provided.

* ENH: Added alpha-sensitive flight fixtures to flight_fixtures.py

ENH: Used  shared flight fixtures and simplify multi-drag integration tests in test_multidim_drag.py

ENH: Exposes multidimensionality and validated grid extrapolation in function.py

* MNT: renamed linear_grid to regular_grid for easy to understand nomenclature

- MNT: added a fallback to reynolds calculation in flight.py to avoid mu is zero case

- MNT: updated test_shepard_fallback_warning name and docstring to match implementation in test_function_grid.py

* MNT:  replaced the broad except Exception: with except (TypeError, ValueError, OverflowError): in get_drag_coefficient of flight.py

* TST: added from_grid unit tests to cover constructor-level validation and the explicit API.

* MNT: format and lint update to test_function_from_grid.py

* DOC: changelog.md update for multidim drag

* Address review feedback: add unsorted axis warning, flatten_for_compatibility parameter, and early return guard clause

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
Co-authored-by: Ishan <99824864+aZira371@users.noreply.github.com>
Co-authored-by: Ishan <dubeyishan371@gmail.com>
* ENH: addition of bella lui based 3 dof and 6 dof comparison notebook

- ENH: a new notebook bella_lui_3dof_vs_6dof.ipynb which uses new implementations of weathercocking model on 3dof

* ENH: addition of weathercocking model to flight.py

- ENH: introduced new weathercock_coeff parameter in Flight.init (default: 1.0)

- ENH: updated u_dot_generalized_3dof to compute quaternion derivatives proportional to misalignment with relative wind

- ENH: angular velocity = weathercock_coeff * sin(misalignment_angle)

* ENH: added tests for weathercocking to test_flight_3dof.py

- ENH: unit tests added for weathercocking to check whether weathercock_coeff=0 results in fixed attitude (no quaternion change).

- MNT: format and lint updates for new additions

* DOC: updating 3 dof documentation and corresponding index.rst

- DOC: added 3 dof and 6 dof comparison analysis to three_dof_simulation.rst

- DOC: updated iusers/index.rst to build three_dof_simulation.rst

- MNT: deleted the bella_lui_3dof_vs_6dof_comparison.ipynb as the doc now covers this section

* MNT: corrections to test_flight_3dof.py

- MNT: corrected doc string to represent correct orientation

- MNT: improved tolerance of check on quaternion derivative which should be ideally very small when axes are aligned

* MNT: docstring corrections to flight.py around new weathercocking implementation

* BUG: correction of singularity bug during align on vectors in weathercocking

- BUG: implemented a dot product check to ensure that singularity bug is avoided when rocket body and wind velocity are anti aligned to make rocket statically stable (in u_dot_generalized_3dof)

- MNT: removed redundant double assignment of e0 and w0 vectors within u_dot_generalized_3dof

- MNT: format correction to test_flight_3dof.py

* MNT: updating location of 3 dof doc in users index.rst

- MNT: 3 dof documentation only referred in users section/getting started

- MNT: correction of docstring in flight.py

- MNT: corrected unit_vector call when defining rotation axis in u_dot_generalized_3dof

- MNT:  docstring correction in test_flight_3dof.py

- ENH: test coverage added for anti alignment case in weathercock model to test_flight_3dof.py

* DOC: three_dof_simulation.rst update to add explanation of weather cocking coeff usage and value.

* MNT: changed default value of weather_coeff in flight.py and added fixtures to test_flight_3dof.py

* MNT: shifting test_flight_dof.py to integration tests.

- MNT: fixed default weathercock_coeff value in flight.py to match 3 dof behaviour by default

- MNT: corrected fixtures and docstrings in test_flight_3dof.py

* MNT: docsrting update in test_flight_3dof.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* MNT: Update of docstring in test_flight_3dof.py

- MNT: correction of docstring now that fixtures are used.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* DOC: Update of three_dof_simulation.rst

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update tests/integration/simulation/test_flight_3dof.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Docstring Update tests/integration/simulation/test_flight_3dof.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* docstring Update tests/integration/simulation/test_flight_3dof.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* docstring Update docs/user/three_dof_simulation.rst

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Docstring Update rocketpy/simulation/flight.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* MNT: Docstring updates to various files related to 3 dof

* MNT: unit vector edge case check in flight.py

- MNT: perp_axis singularity value error implemented to handle edge case for perp_axis being parallel to body axis in weathercocking model of 3 dof.

* DOC: Add note about motor file paths in 3-DOF comparison section (RocketPy-Team#902)

* Initial plan

* DOC: Add note about motor file paths in 3-DOF comparison section

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* MNT: eliminate quaternion derivative code duplication in u_dot_generalized_3dof (RocketPy-Team#903)

* Initial plan

* Refactor: eliminate quaternion derivative code duplication in u_dot_generalized_3dof

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* Improve comment clarity in weathercocking aligned case

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* DOC: CHANGELOG.md update to reflect implementation of 3 dof lateral motion improvement

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
…ument bug (RocketPy-Team#904)

* TST: add branch coverage for fin_flutter_analysis and fix keyword bug

This commit increases test coverage for utilities.py by adding three new
tests that cover previously untested branches in the fin_flutter_analysis
function. The tests cover the see_prints=True branch, see_graphs=True
branch, and both flags enabled simultaneously.

During testing, discovered and fixed a bug where the filename parameter
was incorrectly passed as a positional argument to _flutter_plots, which
requires it as a keyword-only argument. This would cause a TypeError at
runtime when users attempted to save flutter plots to files.

Changes:
- Add test_fin_flutter_analysis_with_prints for print branch coverage
- Add test_fin_flutter_analysis_with_graphs for plotting branch coverage
- Add test_fin_flutter_analysis_complete_output for combined coverage
- Fix filename argument bug in fin_flutter_analysis (line 286)
- Fix test_flutter_plots to use keyword argument for filename
- Increases utilities.py coverage from 68% to 69% (+2 statements)

* DOC: updated CHANGELOG for test coverage and bug fix

* DOC: revert CHANGELOG.md changes per reviewer feedback
* MNT: updated flight.py 3dof for net_thrust

- MNT: added net_thrust to u_dot_generalized_3dof in flight.py

* TST: net_thrust availability test on 3 dof flight

* MNT: docstring adjustment in net_thrust test in test_flight_3dof.py

* MNT: lint check update

* DOC: changelog.md update

* DOC: bug changelog update
* ENH: Add contextily as a dependency for Monte Carlo simulations in pyproject.toml and requirements-optional.txt

* ENH: Add background map functionality to Monte Carlo plots

- Introduced a new method `_get_background_map` to fetch and display background maps using contextily.
- Added support for various map types: "satellite", "street", "terrain", and custom contextily providers.
- Updated `ellipses` and comparison methods to integrate background maps, enhancing visualization capabilities.
- Included error handling and warnings for missing dependencies and attributes.
- See issue RocketPy-Team#890

* DOC: Enhance documentation for _get_background_map method in Monte Carlo plots

- Added detailed docstring for the _get_background_map method, outlining parameters, return values, and background map options.
- Clarified usage of background types including "satellite", "street", "terrain", and contextily providers.

* MNT: Move imageio import to conditional block in _MonteCarloPlots class

- Moved the import of imageio to be conditional upon the presence of an image, improving dependency management.
- This change ensures that imageio is only imported when necessary, optimizing performance and reducing unnecessary imports.

* TST: Add unit tests for ellipses background functionality in Monte Carlo plots

- Introduced a new test file to validate the behavior of the `ellipses` method with various background options including None, satellite, street, terrain, and custom providers.
- Implemented tests to ensure proper error handling when the MonteCarlo object lacks necessary attributes.
- Added checks for warnings when contextily is not installed and verified that images take precedence over backgrounds.

* TST: Add integration test for Monte Carlo background map options at Kennedy Space Center

- Introduced a new test script to visualize and validate various background map options for Monte Carlo simulations at Kennedy Space Center.
- The script generates simulated data and tests background options including None, satellite, street, terrain, and custom providers, saving the results as images.

* DOC: Updated CHANGELOG.md

* STY: Reformat with black

* MNT: Fix wrong usage for set_aspect in _MonteCarloPlots.ellipses_comparison

* MNT: Refactor _get_background_map in _MonteCarloPlots class

- Removed unnecessary else statements and improved indentation issues.

* MNT: Move mercator_to_wgs84 from_MonteCarloPlots class to tools

- Removed the local definition of mercator_to_wgs84 and replaced it with an import from tools.
- Updated calls to mercator_to_wgs84 to include the earth_radius parameter for improved accuracy.

* MNT: Decompose _get_background_map and move utilities to tools.py

- Refactors `_get_background_map` into modular functions and extracts shared utility logic into `tools.py`. This significantly improves maintainability and separation of concerns.

* BUG: Fix map alignment by enforcing standard Earth radius in plots

- Previously, `_get_environment_coordinates` retrieved the Earth radius
directly from the environment object. When simulations utilized a
custom or local Earth radius for high-precision physics, this value was
incorrectly applied to the map projection calculations.

- Since background map providers (like Contextily) rely on the standard
Web Mercator projection (based on ~6,378,137m), using a non-standard
radius caused the background map to be shifted or scaled incorrectly
relative to the scatter plot data.

- This change forces the plotting module to use the standard WGS84 radius.
This ensures visual accuracy for map overlays without affecting the
physical integrity of the simulation data itself.

* TST: Add Kennedy Space Center environment fixture

- Add example_kennedy_env fixture to replace create_kennedy_environment helper function in tests. This follows the same pattern as other environment fixtures and improves test consistency.
- Make test_all_background_options() a a parametrized test.
- Remove main from test

* ENH: Improve error handling and documentation for automatically download background
- Enhanced error messages for missing or invalid map providers, providing clearer guidance on potential issues.
- Removed warnings for missing contextily library and replaced them with exceptions to enforce required dependencies.
- Updated docstring to include raised exceptions and clarify the function's behavior when fetching background maps.

* TST: Enhance Monte Carlo background map unit tests

- Refactored tests to improve error handling for missing environment attributes and invalid map providers.
- Replaced warnings with exceptions for missing dependencies, ensuring stricter validation.
- Added assertions to verify error messages for better clarity on issues encountered during background map fetching.
- Introduced new tests for handling network errors and invalid map provider scenarios.

* TST: Refactor Monte Carlo plot tests with mock class

- Introduced a MockMonteCarlo class to simulate Monte Carlo data for testing background map options without real simulations.
- Updated tests to utilize the MockMonteCarlo, improving clarity and maintainability.
- Simplified environment handling in tests by creating a SimpleEnvironment class for latitude and longitude attributes.
- Enhanced error handling and assertions in tests for various background map scenarios.

* DOC: Add background map options to documentation

- Updated the user documentation for the Monte Carlo simulations to include details on the new ``background`` parameter for displaying various map types.
- Provided examples for using satellite, street, and terrain maps, along with instructions for listing available providers.

* DOC: Update Monte Carlo analysis notebook with background parameter

* REV: Remove background documents form mrs.rst

* TST: Refactor Monte Carlo plot tests to remove cleanup function

- Since we switched to MockMonteCarlo for testing. Since it does not inherit MonteCarlo.__init__(), no files that need cleanup are produced.
- Removed the `_post_test_file_cleanup` function to streamline test cases.
- Updated tests to directly handle file cleanup for test_ellipses_background_save.

* TST: Enhance Monte Carlo plot tests with file cleanup

- Added file cleanup functionality to the Monte Carlo plot tests to ensure generated files are removed after execution.

* DOC: Update docstring for background map provider resolution

- Enhanced the docstring for the background map provider function to include details on potential ValueError exceptions.

* ENH: Improve error handling in Monte Carlo background map fetching

- Enhanced exception handling for various error scenarios when fetching background map tiles, including invalid coordinates, network issues, and image data errors.
- Added detailed error messages to guide users on potential causes and solutions for encountered issues.

* TST: Parameterize tests for bounds2img failure scenarios

- Introduced parameterized tests to cover various exception types raised during background map fetching, including ValueError, ConnectionError, and RuntimeError.
- Enhanced assertions to verify specific error messages, improving clarity on the nature of failures encountered.
- Updated the test for bounds2img to handle different network and image data errors, ensuring comprehensive coverage of edge cases.

* TST: Parameterize background map option tests in Monte Carlo plots

- Introduced parameterization for the `test_all_background_options` function to streamline testing of various background map options.
- Enhanced the test structure by removing hardcoded background options and utilizing pytest's parameterization feature for improved clarity and maintainability.
- Updated docstring to reflect new parameters and their usage in the test.

* MNT: Formatting monte_carlo_class_usage.ipynb with ruff

* TST: Refactor imports in Monte Carlo plot tests for consistency

- Moved import statements for numpy and rocketpy.tools to the top of the test functions to adhere to best practices and improve readability.
- Added pylint disable comments for imports outside of the top-level to maintain code quality standards.

* TST: Skip tests requiring contextily in Monte Carlo plot tests

- Added pytest.importorskip for contextily in both integration and unit test files to ensure tests are only run if the required library is installed.

* TST: Update contextily import in Monte Carlo plot tests

- Replaced direct import of contextily with pytest.importorskip to ensure tests are skipped if the library is not available, enhancing test robustness.

* Update contextily dependency in pyproject.toml and requirements-optional.txt

- Modified contextily dependency in pyproject.toml to conditionally require it for Python versions below 3.14.

* DOC: Update monte_carlo_class_usage.ipynb to note about contextily issue on python 3.14
…ontrollers (RocketPy-Team#843)

* ENH: Refactor Flight class to improve time node handling and sensor/controller processing

TST: add tests for overshootable controllers

TST: fix slow tests

fix merge conflicts

* fix tests

fix slow tests

update CHANGELOG

Update rocketpy/simulation/flight.py

fix lint
* DOCS: Update file paths in flight_comparator example and improve formatting in simulation files

* DOCS: fix several documentation errors

* update changelog

* fix tests

* fix docs tests
)

* ENH: replace ifelif else chains with match statement

* Update rocketpy/environment/environment.py

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>

* fix CI tests and add changes to CHANGELOG.md

* update CHANGELOG.md

* fix linters

---------

Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
…ui rocket (RocketPy-Team#914)

* TST: Add comprehensive 3DOF acceptance tests

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* Configure 3DOF acceptance tests to skip until feature is available

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* Apply ruff formatting to 3DOF acceptance tests

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* Fix test logic issues based on code review feedback

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* Refactor 3DOF fixtures to flight_fixtures.py and reuse existing environment fixture

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* Remove unnecessary try/except blocks - PointMass classes are available in codebase

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* Refactor acceptance tests with Bella Lui parameters and named constants

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* Use named constants in flight fixtures for consistency

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* Define launch constants at module level to avoid duplication

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* Import launch constants from fixtures to eliminate duplication

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* Fix docstrings to accurately describe fixture relationships

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* Use appropriately named constant for weathercock apogee difference

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* TST: Amend acceptance tests for 3DOF flight simulation based on Bella Lui rocket

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* MNT: Adjust tolerance ranges to match Bella Lui rocket performance

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* Refactor weathercocking tests to verify physics implementation rather than specific tolerances

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* Update tests/acceptance/test_3dof_flight.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* MNT: removed unused tolerance parameter

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Remove duplicate bella_lui fixtures, keep only acceptance_point_mass fixtures

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* Update tests/acceptance/test_3dof_flight.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Fix critical rocket radius and floating-point comparison issues

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* MNT: update changelog.md for PR RocketPy-Team#914

- MNT: added required line to changelog.md

* Improve quaternion test tolerance to account for passive aerodynamic effects

Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>

* MNT: make format check

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: aZira371 <99824864+aZira371@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Ishan <dubeyishan371@gmail.com>
…eam#898)

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
…m#931)

* Fix: Duplicate merge of _controllers in Flight.TimeNodes.merge()

* BUG: Fix duplicate controllers in Flight.TimeNodes.merge()

Update changelog

---------

Co-authored-by: ZuoRen Chen <zuorenchen@outlook.com>
phmbressan and others added 10 commits July 14, 2026 01:35
* 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.
…Py-Team#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.
@zuorenchen

Copy link
Copy Markdown
Member Author

This PR is pending on the completion of RocketPy-Team#1068.

claude and others added 13 commits July 19, 2026 01:02
Fixes the two CI failures on the develop -> master sync (PR RocketPy-Team#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
…68-ci-failures-q35rzb

TST/DOC: fix build-docs and codecov failures from the PyVista animations
…astic_flight` objects with attributes in base flight (RocketPy-Team#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
… deps sync (RocketPy-Team#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 RocketPy-Team#958 entries (parachute abstract-base breaking change)
  and its revert RocketPy-Team#1063 - neither ever reached a release.
- Consolidate the 3D flight animation into a single RocketPy-Team#1066 (PyVista) entry;
  drop the superseded Vedo-based RocketPy-Team#909.
- Remove duplicate entries (RocketPy-Team#1066, RocketPy-Team#1067, RocketPy-Team#1055 in Added, RocketPy-Team#1047 in Added)
  and the doubled "ENH: ENH:" / "MNT: MNT:" auto-changelog prefixes.
- Drop non-user-facing meta entries (RocketPy-Team#1062 changelog cleanup, RocketPy-Team#1069 CI fix)
  and the test-only entry (RocketPy-Team#1051), per the changelog's own scope rules.
- Add the missing RocketPy-Team#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 (RocketPy-Team#909) to PyVista (RocketPy-Team#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>
* ENH: `Function` vectorized speed-up and refactor (RocketPy-Team#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 RocketPy-Team#1049

* ENH: Interactive 3D Flight Trajectory and Attitude Animation. (RocketPy-Team#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 RocketPy-Team#1066

* MNT: Remove unused pylint disable statements. (RocketPy-Team#1067)

* DOC: Update Changelog for PR RocketPy-Team#1067

* TST: cover PyVista flight animation helpers and fix docstring

Fixes the two CI failures on the develop -> master sync (PR RocketPy-Team#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 RocketPy-Team#1069

* ENH: Add optional `max time` to `stochastic_flight` and create `stochastic_flight` objects with attributes in base flight (RocketPy-Team#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 (RocketPy-Team#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 RocketPy-Team#958 entries (parachute abstract-base breaking change)
  and its revert RocketPy-Team#1063 - neither ever reached a release.
- Consolidate the 3D flight animation into a single RocketPy-Team#1066 (PyVista) entry;
  drop the superseded Vedo-based RocketPy-Team#909.
- Remove duplicate entries (RocketPy-Team#1066, RocketPy-Team#1067, RocketPy-Team#1055 in Added, RocketPy-Team#1047 in Added)
  and the doubled "ENH: ENH:" / "MNT: MNT:" auto-changelog prefixes.
- Drop non-user-facing meta entries (RocketPy-Team#1062 changelog cleanup, RocketPy-Team#1069 CI fix)
  and the test-only entry (RocketPy-Team#1051), per the changelog's own scope rules.
- Add the missing RocketPy-Team#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 (RocketPy-Team#909) to PyVista (RocketPy-Team#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 RocketPy-Team#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>
…ase-v1.13.0-review-fixes

BUG/MNT: pre-release v1.13.0 review fixes
Fold the RocketPy-Team#1074 pre-release review fixes into the [v1.13.0] section,
reset [Unreleased] to the empty template, and set the release date.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Merge pull request RocketPy-Team#1074 from RocketPy-Team/bug/pre-release-v1.13.0-review-fixes

BUG/MNT: pre-release v1.13.0 review fixes

* DOC: Update Changelog for PR RocketPy-Team#1074

* REL: consolidate changelog for v1.13.0 release

Fold the RocketPy-Team#1074 pre-release review fixes into the [v1.13.0] section,
reset [Unreleased] to the empty template, and set the release date.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@zuorenchen
zuorenchen marked this pull request as ready for review July 26, 2026 19:38
@zuorenchen
zuorenchen merged commit 36381dc into develop Jul 26, 2026
36 of 51 checks passed
@zuorenchen
zuorenchen deleted the enh/merge-from-rocketpy branch July 26, 2026 21:57
zuorenchen added a commit that referenced this pull request Jul 26, 2026
* Add actuator dynamics in TVC and ThrottleControl

* Refactor actuator_tau parameters to use None as default in TVC and ThrottleControl

* Add actuator dynamics to RollControl

* Move actuators to a new actuator folder and rename actuator classes

* Refactor roll, throttle, and thrust vector acutator with a new actuator class

* Add pytest for all actuators

* Update rocket.py and flight.py for actuator class update

* Fix actuator class calls

* Update active control example with new actuator class

* Update time_overshoot in flight.py to align rocketpy commit #45a89

RocketPy-Team@45a891e

* Fix actuator unit tests

* Enhance ThrustVectorActuator2D with serialization methods and improve documentation

* Fix comment msg

* Fix pylint unused parameters

* Remove unused import

* Fix pylint warnings

* Refactor __run_in_serial() to fix pylint too much statement warning

* Fix: use warning instead of printf

* Fix comment

* Fix: use warning instead of printf

* Run ruff format

* Fix thrust3 and effective_thrust name

* Fix pytests

* Fix pytest utilities

* Fix integration/gnss pytest

* Update readme

* ENH: seed sensor measurement noise per instance (#13)

* ENH: seed sensor measurement noise per instance

Sensor noise (white noise and random-walk bias drift in InertialSensor
and ScalarSensor, plus the GNSS position/velocity accuracy) was drawn
from the global numpy RNG. That made it impossible to reproduce from a
seed, and unsafe under multiprocess where workers share the global state.

Add a seed argument to the sensor constructors and draw all noise from a
per-instance numpy Generator. seed=None keeps the random-by-default
behaviour but per instance, so it no longer touches the global RNG,
matching how StochasticModel and MonteCarlo already seed. A
freshly-constructed sensor replays the same sequence, so reproducibility
lives at construction rather than in _reset.

Adds tests/unit/sensors/test_sensor_seeding.py.

* TST: seed the noisy_barometer fixture to fix a pre-existing flake

test_noisy_barometer asserts a barometer reading within rel=0.03 of the clean
pressure, but the reading carries an unseeded Gaussian noise draw plus a
+1000 Pa constant_bias the expected value omits, leaving only ~+2.42 sigma of
headroom, so it already flaked at ~0.76% on develop (a 20k-trial check: develop
0.77%, this branch 0.75%). Passing a fixed seed makes it deterministic and also
exercises the new sensor seed argument.

* TST: seed the noisy accelerometer and gyroscope fixtures (#14)

Following @zuorenchen's review note on #13, seed the remaining noisy sensor
fixtures (noisy_rotated_accelerometer, noisy_rotated_gyroscope) the same way
noisy_barometer already is, so the whole sensor suite is deterministic instead
of relying on statistical tolerance bounds. Uses the seed argument added in #13.

* ENH: pull v1.13 from RocketPy (#16)

* test: characterization tests for Flight.step_simulation() (#11)

* test: characterization tests for Flight.step_simulation()

Verify the stepped-simulation API (run_simulation=False plus repeated
step_simulation() calls) reproduces a one-shot simulate():

- initial step state is unfinished at the first phase
- stepping visits multiple phases and reaches the finished state
- the stepped trajectory (final t and the full solution array) matches simulate()
  to a tight tolerance, robust to LSODA last-bit noise across platforms
- post_process_simulation / initialize_prints_plots fire on finish
  (t_final, prints, plots present)
- stepping after finished is a no-op

Uses the parachute-free calisto flight (parachute triggers are not migrated into
the stepping path); the twin's launch parameters are read back from the
reference so it cannot drift. Scope: uncontrolled stepping only.

* test: cover controlled stepping in step_simulation()

Inject a roll command between step_simulation() calls (the Balloon Popping
Challenge use case) and assert the trajectory responds:

- a sustained command spins the body up (roll rate w3 grows) while a neutral
  command leaves w3 at zero
- a mid-flight command reversal turns the roll rate around -- only possible if
  the command is re-read every step (a latched command could not)
- a zero command leaves the angular state bit-identical to an uncontrolled run,
  isolating the divergence as the command, not the actuator's presence

Uses time_overshoot=False (as BPC does) so each step advances one solver node
and the command is injected per timestep. Tolerances/thresholds are used rather
than bit-exact equality, to stay robust to LSODA last-bit noise across platforms.

---------

Co-authored-by: RickyRicato <rickywang44@gmail.com>
Co-authored-by: ChiChun Wang <99960850+chichunwang@users.noreply.github.com>
Co-authored-by: 秀吉 <84045975+thc1006@users.noreply.github.com>
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.