Skip to content

Rel: v1.13.0#1048

Merged
Gui-FernandesBR merged 92 commits into
masterfrom
rel/v1.13.0
Jul 9, 2026
Merged

Rel: v1.13.0#1048
Gui-FernandesBR merged 92 commits into
masterfrom
rel/v1.13.0

Conversation

@Gui-FernandesBR

Copy link
Copy Markdown
Member

One of the biggest releases of RocketPy so far!!

Copilot AI and others added 30 commits March 14, 2026 13:15
…#889)

* Fix hard-coded radius value for parachute added mass calculation

Calculate radius from cd_s using a typical hemispherical parachute drag
coefficient (1.4) when radius is not explicitly provided. This fixes
drift distance calculations for smaller parachutes like drogues.

Formula: R = sqrt(cd_s / (Cd * π))

Closes #860

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

Address code review: improve docstrings and add explicit None defaults

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

Add CHANGELOG entry for PR #889

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

Update rocket.add_parachute to use radius=None for consistency

Changed the default radius from 1.5 to None in the add_parachute method
to match the Parachute class behavior. This ensures consistent automatic
radius calculation from cd_s across both APIs.

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

Refactor Parachute class to remove hard-coded radius value and introduce drag_coefficient parameter for radius estimation

Fix hard-coded radius value for parachute added mass calculation

Calculate radius from cd_s using a typical hemispherical parachute drag
coefficient (1.4) when radius is not explicitly provided. This fixes
drift distance calculations for smaller parachutes like drogues.

Formula: R = sqrt(cd_s / (Cd * π))

Closes #860

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

Add CHANGELOG entry for PR #889

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

Refactor Parachute class to remove hard-coded radius value and introduce drag_coefficient parameter for radius estimation

MNT: Extract noise initialization to fix pylint too-many-statements in Parachute.__init__

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

* Refactor environment method access in controller test for clarity

* fix pylint

* fix comments

* avoid breaking change with drag_coefficient

* reafactors Parachute.__init__ method

* fix tests

---------

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: Gui-FernandesBR <guilherme_fernandes@usp.br>
…ngelog (#940)

* Initial plan

* ENH: Add explicit timeouts to ThrustCurve API requests

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

* DOC: Add timeout fix PR to changelog

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

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>
…utes for raw user input and update changelog (#941)

* Initial plan

* ENH: Restore power_off/on_drag as Function, add _input attributes for raw user input

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

* DOC: Add PR #941 compatibility fix to changelog

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

* Update rocketpy/rocket/rocket.py

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

* MNT: ruff pylint

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
Co-authored-by: MateusStano <mateusstano@usp.br>
…or.evaluate_geometry` (#944)

* Initial plan

* BUG: Fix incorrect Jacobian in only_radial_burn branch of evaluate_geometry

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

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MateusStano <69485049+MateusStano@users.noreply.github.com>
* chore: added personal toolkit files

* update branch name in workflow

* chore: update toolkit files

* Fix: add wraparound logic for wind direction and related tests

* style: fix ruff formatting

* Remove unused import

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

* refactor: move repetitive logic into helper method

* fix: update test logic in test_environment

* add changelog entry

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
* ENH: added a new function (simulate_convergence)

* DOC: added a cell to show simulate_convergence function usage

* TST: integration test for simulate_convergence

* DOC: updated changelog for this PR

* ENH: ran black to lint intg test file

* new fixes thx to copilot comments

* linted rocketpy/simulation/monte_carlo.py

---------

Co-authored-by: Malmahrouqi3 <mohdsaid497566@gmail.com>
* Remove duplicate controller process

* Bug: process sensor if node._component_sensors exist instead of flight.sensor
* Create changelog.yml for release drafting

Add changelog.yml for processing merged PRs.

* new workflow

* Change branch reference for changelog update

* Update auto-assign.yml

* Fix typo in changelog.yml conditional statement

* Update README with main features section

Added new section for main features of RocketPy.

* docs: update changelog for PR #3

* Enhance community section in README

Added emphasis to the community invitation.

* docs: update changelog for PR #4

* Update README with RocketPy import example

Added import statement example for RocketPy classes.

* docs: update changelog for PR #5

* Fix typo in changelog commit message

* Update .gitignore

* DOC: Ipdate Changelog for PR #6

* Fix typo in changelog commit message

* Add branch filter for changelog workflow

* Update README with aerodynamic models section

* Change target branch for pull request workflow

* DOC: Update Changelog for PR #7

* updating new things

* Remove floating point precision fix entry from CHANGELOG

Removed entry for floating point precision errors from changelog.

* re-org

* Few adjustments to work on the base repo, develop branch.

* new changes

* restored stuff

* doc changes

* updated changelog for this PR

* updated changelog

* PR # included in changelog

* DOC: clearer words and corrected grammar

* ENH: Updated changelog.yml to include permissions

---------

Co-authored-by: Malmahrouqi3 <mohdsaid497566@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
Co-authored-by: Mateus Stano Junqueira <69485049+MateusStano@users.noreply.github.com>
* ENH: add individual fin class

Co-authored-by: kevin-alcaniz <kevinalcaniz22@gmail.com>

* ENH: add trapezoidal fin and elliptical fin

Co-authored-by: kevin-alcaniz <kevinalcaniz22@gmail.com>

* ENH: add fin method to rocket class

* ENH: add print and plots to individual fins classes.

* ENH: Lint corrections, mainly attribute names.

* ENH: reorder imports for fins module

* ENH: fix rotation matrixes

* ENH: create _BaseFin class

* MNT: fix variable names in Fin

* BUG: correct interference factors

* ENH: create _TrapezoidalMixin

* MNT: remove unused methods and variables in fin classes

* ENH: move evaluate cp out of mixin and include to/from_dict

* ENH: free form mixin

* ENH: elliptical mixin

* ENH: add to_dict in Fin

* ENH: add FreeFormFin prints and plots

* ENH: add aero surfaces to body rotation matrixes

* ENH: adapt position related calculations

* Squashed commit of the following:

commit c674725
Author: Kevin Alcañiz <kevinalcaniz22@gmail.com>
Date:   Sat Apr 12 13:40:25 2025 +0200

    ENH: Introduce Net Thrust with pressure corrections (#789)

    * 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 pressure corrections for thrust in SolidMotor

    The thrust generated by a SolidMotor is now adjusted for the atmospheric pressure. To achieve that, a new attribute, 'vacuum_thrust', has been created. The 'net_thrust' is the result of 'vacuum_thrust' minus the atmospheric pressure multiplied by the nozzle area.

    * ENH: pylint recommendations done

    * ENH: net thrust method extended to the rest of the motor classes

    * BUG: __post_processed_variables inconsistent array

    * ENH: ruff reformatting

    * Update rocketpy/motors/motor.py

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

    * ENH: Avoid breaking change

    * ENH: Pressure Thrust method added

    * BUG: call to the thrust function wrong

    * BUG: pressure thrust evaluated when motor is turned off

    * ENH: CHANGELOG updated

    * DOC: definition of exhaust velocity improved

    ---------

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

commit 9f2644a
Author: Lucas Prates <57069366+Lucas-Prates@users.noreply.github.com>
Date:   Sat Apr 12 11:27:53 2025 +0200

    ENH: Implement Multivariate Rejection Sampling (MRS) (#738)

    * ENH: implementing a draft version of the Multivarite Rejectio Sampler (MRS).

    * MNT: quick notebook to test MRS during development

    * MNT: refactoring class to match review suggestions

    * ENH: add comparison prints, plots and ellipses to MonteCarlo and finally checks in MRS

    * MNT: add MultivariateRejectionSampler class to inits and apply format

    * DOC: writting .rst documentation for MRS

    * MNT: adding pylint flags to skip checks

    * DOC: completing missing sections in mrs.rst

    * DOC: add changelog and apply sugestions in MRS class

    * DOC: apply suggestions to the MRS.rst

    * MNT: use Union instead of | for type hinting since we have to support python3.9

    * TST: adding unit and integration tests to MRS

    * MNT: use pylint flag to fix linter

    * TST: adding tests to MonteCarlo comparison features

    * MNT: applying suggestions in .rst, better handling nested variables in MRS and applying linters

    * MNT: removing TODO comments from monte_carlo_plots

    * MNT: remove useless TODO

    * MNT: inserting pragmas for no cover and resolving changelog conflict

commit d49c40e
Author: ArthurJWH <167456467+ArthurJWH@users.noreply.github.com>
Date:   Fri Apr 11 16:11:20 2025 -0400

    ENH: Create a rocketpy file to store flight simulations (#800)

    * ENH: added .rpy file functionality (see issue 668)

    This commit add 'save_to_rpy' and 'load_from_rpy' functions, that allows saving and loading flights.

    * MNT: adjusting minor changes to .rpy functions and tests.

    Formatted docstrings correctly.
    Reverted duplication of `test_encoding.py` files.
    Version warning will be called when loaded version is more recent.

    * MNT: incorporating previous comments

    Change file management from os to Path
    Adjust docstrings

    * DOC: Added comment about outputs in `to_dict` method

    * MNT: Refactoring `RocketPyDecoder` unpacking operation and other small adjustments

    * DOC: update changelog

    * STY: formatted according to ruff

    * MNT: changing `str | Path` operation to support Python 3.9

    * MNT: fixed trailing commas on .rpy and added shield against `ruff` formatting .rpy and .json files

    * MNT: fixing error related to `test_flight_save_load_no_resimulate`

    When `include_outputs` were set to `True`, it would try to include the additional data into the flight, breaking the test

    * MNT: fixing a typo and adding comment on test coverage

    ---------

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

commit 6bf70f3
Author: Júlio Machado <85506246+juliomachad0@users.noreply.github.com>
Date:   Sat Apr 5 15:08:53 2025 -0300

    ENH: Support for the RSE file format has been added to the library (#798)

    * ENH: Support for the RSE file format has been added to the library. The import_rse method in the Abstract Motor class and the load_from_rse_file method in the GenericMotor class are now available. With this update, the library natively supports Rock Sim software data, eliminating the need for users to manually convert motor files. The implementation was based on the import_eng and load_from_eng_file methods, utilizing Python's standard XML library.

    * ENH: Adding tests to the methods of .rse file treatment.

    * ENH: fixing mistakes on the method and test file

    * MNT: Running ruff

    * MNT: Adding the PR to CHANGELOG.md

commit 220bb59
Merge: 4a41f7a 4df0b38
Author: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
Date:   Thu Mar 27 06:14:22 2025 -0300

    Merge pull request #797 from RocketPy-Team/master

    Updates develop after 1.9.0

commit 4df0b38
Author: MateusStano <69485049+MateusStano@users.noreply.github.com>
Date:   Mon Mar 24 17:35:03 2025 +0100

    REL: Update version to 1.9.0 (#795)

commit 5328d66
Author: MateusStano <69485049+MateusStano@users.noreply.github.com>
Date:   Mon Mar 24 13:07:52 2025 +0100

    DEP: Remove Pending Deprecations and Add Warnings Where Needed (#794)

    * DEP: Add deprecation warnings for outdated methods and functions

    * DEP: Remove deprecated methods for NOAA RUC soundings and power drag plots

    * DEV: changelog

    * MNT: ruff

    * DEP: Update deprecation warning for post_process method to specify removal in v1.10

    * MNT: Remove unused imports

commit 76fb5ef
Merge: a4b42c3 4a41f7a
Author: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
Date:   Sun Mar 23 19:17:16 2025 -0300

    Merge pull request #793 from RocketPy-Team/develop

    DEV: Master to v1.9.0

commit 4a41f7a
Author: Kevin Alcañiz <kevinalcaniz22@gmail.com>
Date:   Sun Mar 23 21:52:51 2025 +0100

    ENH: Introduce the StochasticAirBrakes class (#785)

    * 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>

    * 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

    * DOC: CHANGELOG file updated

    ---------

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

commit 90553f5
Author: Kevin Alcañiz <kevinalcaniz22@gmail.com>
Date:   Sun Mar 23 20:31:50 2025 +0100

    ENH: Add Eccentricity to Stochastic Simulations (#792)

    * 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: more intuitive uniform distribution display in StochasticModel

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

    * ENH: Eccentricities added to the StochasticRocket class

    A bug has been corrected in Flight class and an enhancement has been performed in the Rocket class as well

    * BUG: thrust eccentricity bug corrected

    eccentricity_y was defined by x coordinate and eccentricity_x was defined by y coordinate

    * BUG: Undo some Rocket class changes

    * ENH: add eccentricities to StochasticRocket

    * BUG: fix MonteCarlo eccentricity inputs

    * ENH: pylint and ruff recommended changes

    * TST: fix tests with eccentricity

    ---------

    Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br>

commit 7348053
Author: Kevin Alcañiz <kevinalcaniz22@gmail.com>
Date:   Sun Mar 23 13:49:35 2025 +0100

    BUG: fix the wind velocity factors usage and better visualization of uniform distributions in Stochastic Classes (#783)

    * 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: more intuitive uniform distribution display in StochasticModel

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

    ---------

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

commit d2f89ba
Author: Leonardo Rosa <leogabriel3@gmail.com>
Date:   Fri Mar 21 18:57:49 2025 -0300

    DEV: add requirements-tests.txt on make install target (#791)

    * DEV: adds 'pip install -r requirements-tests.txt' recipe to 'make install' target on Makefile

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

commit 91ac567
Author: Leonardo Rosa <leogabriel3@gmail.com>
Date:   Fri Mar 21 18:53:53 2025 -0300

    BUG: fixes get_instance_attributes for Flight objects containing a Rocket object without rail buttons (#786)

    * DOC: fixed a typo in funcify_method() description

    * TST: created test for get_instante_attributes() with flight without rail buttons

    * BUG: fixed __calculate_rail_button_forces() by assigning a Function(0) to null_force instead of an empty array

    * DEV: updates CHANGELOG

commit 9407470
Author: Leonard <74966503+L30-stack@users.noreply.github.com>
Date:   Wed Mar 19 16:01:59 2025 +0100

    BUG: fixed AGL altitude in _FlightPrints.events_registered (#788)

    * BUG: fixed AGL altitude in _FlightPrints.events_registered

    * updeted CHANGELOG

* MNT: rename base_fin to _base_fin

* DOC: finish docstrings

* ENH: add title to some fins plots

* ENH: individual fin in rocket draw

* DOC: add individual fin docs

* DOC: typo

* DEV: remove merge conflicts

* TST: fix tests

* MNT: ruff

* ENH: add from_dict to new classes

* MNT: ruff

* MNT: lint

* ENH: address comments and change mixin classes to geometry classes

* TST: add relevant tests

* MNT: ruff pylint

* Update docs/reference/classes/aero_surfaces/index.rst

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

* MNT: address copilot review

* ENH: remove mixin classes files

* DOC: typo

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

* DOC: typo

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

* MNT: add TODO

* TST: add unit tests for fin geometries

* MNT: reference barrowman on ellipitcal fins cp

* MNT: improve todo description

* ENH: add filename args to fins plots

* ENH: change fin.d and fin.ref_area to fin.rocket_diameter and fin.reference_area

* MNT: improve name of run_geometry_update_chain

* ENH: change geometry class to be compute only

* ENH: use math instead of numpy in non vector operations

* TST: replace pytest.approx with np.testing.assert_allclose for numerical assertions

* ENH: update type checks for surfaces and positions to use Iterable

* ENH: fix attribute access for sweep_angle in trapezoidal fins encoder test

---------

Co-authored-by: kevin-alcaniz <kevinalcaniz22@gmail.com>
Co-authored-by: Julio Machado <julioromac@outlook.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com>
* ENH: Add AIGFS and HRRR dataset fetchers

* ENH: Update documentation for atmospheric models and add AIGFS and HRRR support

* TST: Add tests for new models
…s/ensemble data (#955)

* MNT: remove conversion from mbar to Pa in netcdf4 fetched data

* ENH: introducing pressure conversion factor when using forecast or reanalysis

* fix: adding conversion factor argument to ensemble as well
* BUG: fix NaN in ND linear interpolation outside convex hull

Use Delaunay.find_simplex() instead of bounding box check in
__get_value_opt_nd to correctly detect out-of-domain points.

Closes #926

* BUG: fix NaN in ND linear interpolation outside convex hull

Use Delaunay.find_simplex() instead of bounding box check in
__get_value_opt_nd to correctly detect out-of-domain points.

Closes #926

* Potential fix for pull request finding

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

* STYLE: add pylint disable comment for Delaunay import

* STYLE: format Delaunay import in function.py to satisfy ruff linter

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br>
* DOC: add flight example for Valkyrie, Bisky Team

* STYLE: format valkyrie_flight_sim.ipynb python code blocks with ruff

---------

Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br>
* ENH: auto-detection of pressure conversion factor

* MNT: ruff and lint

* MNT: disable too-many-branches warning for set_atmospheric_model in environment.py

* MNT: encapsulate pressure_conversion_factor auto-detection and add test

* DOC: add entry for PR #966 in CHANGELOG

---------

Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br>
* feat: add csv import to monte_carlo module

* feat: add private file format helpers to MonteCarlo

* refactor: use _read_log_file in set_inputs/outputs/errors_log

* feat: make set_num_of_loaded_sims format-aware

* docs: update import method docstrings for CSV/JSON support

* feat: add CSV and JSON export methods to MonteCarlo

* test: add unit tests for CSV and JSON export/import

* style: apply ruff formatting to monte_carlo and tests

* MNT: resolve pylint warnings and update CHANGELOG for PR #947

---------

Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br>
…phericalTank` (#957)

* Initial plan

* MNT: rename radius to radius_function in CylindricalTank and SphericalTank

Agent-Logs-Url: https://github.com/RocketPy-Team/RocketPy/sessions/34182dad-3a90-44dc-96a2-e29c6a9b9f55

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

* MNT: fix docstrings in CylindricalTank and SphericalTank radius_function parameter

Agent-Logs-Url: https://github.com/RocketPy-Team/RocketPy/sessions/34182dad-3a90-44dc-96a2-e29c6a9b9f55

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

* DOC: update CHANGELOG for PR #957 - deprecate radius in favor of radius_function

* MNT: update deprecation warning messages to include version info

* MNT: resolve pylint C0415 (import-outside-toplevel) in test_tank_geometry.py

---------

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: Gui-FernandesBR <guilherme_fernandes@usp.br>
Comment thread rocketpy/utils.py Outdated
Comment thread rocketpy/prints/aero_surface_prints.py
Comment thread .github/renovate.json
@codecov

codecov Bot commented Jul 4, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 88.26638% with 222 lines in your changes missing coverage. Please review.
✅ Project coverage is 81.73%. Comparing base (1e748d8) to head (7f11a31).
⚠️ Report is 3 commits behind head on master.

Files with missing lines Patch % Lines
rocketpy/plots/rocket_plots.py 55.40% 33 Missing ⚠️
rocketpy/environment/environment.py 69.01% 22 Missing ⚠️
rocketpy/plots/flight_plots.py 89.47% 20 Missing ⚠️
rocketpy/environment/fetchers.py 21.73% 18 Missing ⚠️
rocketpy/simulation/monte_carlo.py 87.21% 17 Missing ⚠️
rocketpy/motors/ring_cluster_motor.py 92.00% 14 Missing ⚠️
rocketpy/rocket/aero_surface/fins/fin.py 87.73% 13 Missing ⚠️
rocketpy/rocket/rocket.py 80.00% 12 Missing ⚠️
rocketpy/plots/aero_surface_plots.py 89.90% 11 Missing ⚠️
rocketpy/prints/aero_surface_prints.py 75.60% 10 Missing ⚠️
... and 16 more
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1048      +/-   ##
==========================================
+ Coverage   81.12%   81.73%   +0.60%     
==========================================
  Files         107      118      +11     
  Lines       13881    15251    +1370     
==========================================
+ Hits        11261    12465    +1204     
- Misses       2620     2786     +166     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment thread rocketpy/exceptions.py
Comment thread docs/user/airbrakes.rst Outdated
Gui-FernandesBR and others added 3 commits July 4, 2026 22:45
EllipticalFin.__init__ and FreeFormFin.__init__ never called
self.evaluate_rotation_matrix(), unlike TrapezoidalFin. As a result the
_rotation_body_to_fin / _rotation_fin_to_body_uncanted matrices were never
created, so adding either fin to a Rocket crashed:

    Rocket.__add_single_surface -> Fin._compute_leading_edge_position
    -> AttributeError: 'EllipticalFin' object has no attribute
       '_rotation_fin_to_body_uncanted'

Both are new public classes in v1.13.0 and were fully unusable on the normal
add-to-rocket / simulate path. Existing tests only exercised the trapezoidal
singular fin, so this went uncaught.

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

RingClusterMotor defined neither to_dict nor from_dict, and its base class
Motor (ABC) has none either (only GenericMotor does). On decode, RocketPyDecoder
fell through to instantiating the class from the filtered dict, but the inherited
Motor.to_dict serializes computed motor fields (thrust_source, inertias, ...) and
none of the constructor arguments (motor, number, radius). Reconstruction called
RingClusterMotor() with no args:

    TypeError: RingClusterMotor.__init__() missing 3 required positional
    arguments: 'motor', 'number', and 'radius'

This TypeError is not caught by the decoder (only ImportError/AttributeError are),
so any Rocket/Flight carrying a RingClusterMotor could not be reloaded, which also
breaks Monte Carlo caching and .rpy save/load for the new motor.

The inner motor is a RocketPy object and is serialized/reconstructed recursively,
so from_dict just forwards the reconstructed motor plus number and radius.

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

@phmbressan phmbressan left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My local --runslow tests gave:

FAILED tests/integration/environment/test_environment.py::test_wyoming_sounding_atmosphere - AssertionError: assert np.float64(7725.0) < 1e-08

I cannot debug the changes right now, but it seems significant. Maybe related to unit conversions when reading csv or API responses.

@Gui-FernandesBR

Copy link
Copy Markdown
Member Author

There are a lot of files... I read the most of them already, but it's safer if we spend a few days reviewing and testing around. I still plan to open the getting started notebook and run each cell just to verify everything is ok.

@Gui-FernandesBR

Copy link
Copy Markdown
Member Author

A quick checklist:

  1. Run and fix slow tests (including warnings)
  2. Build the documentation
  3. Update CHANGELOG.mg one last time
  4. Use Claude Fable to investigate possible bugs or errors

Gui-FernandesBR and others added 3 commits July 8, 2026 23:22
RocketPyEncoder always passes include_outputs, discretize and allow_pickle
to to_dict, but Fin/TrapezoidalFin/EllipticalFin/FreeFormFin only accepted
include_outputs, so serializing any rocket or flight containing an
individual fin raised TypeError. Signatures now mirror the fin-set classes
(**kwargs), and the airfoil is serialized as the reconstructable
(airfoil_cl, unit) pair like the set classes do.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The University of Wyoming discontinued the legacy cgi-bin sounding
endpoint (it now redirects to a 404), which made
test_wyoming_sounding_atmosphere silently fall back to the standard
atmosphere and fail. process_wyoming_sounding now supports the new WSGI
page format as well: single <PRE> block (no station-info block, elevation
taken from the surface level row) and wind speed reported as SPED in m/s
instead of SKNT in knots. Legacy-format pages are still parsed as before.

The test now uses the new URL, skips loudly when the service is
unreachable instead of silently keeping the standard atmosphere, and
updates the expected wind value to the m/s-precision data. Docs examples
updated to the new URL format.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Gui-FernandesBR and others added 6 commits July 9, 2026 15:32
Fixes four rough edges found while running the getting_started notebook:

- Partial Angle of Attack and Angle of Sideslip are signed angles that
  oscillate around zero, but all_info clamped their y-axis floor to 0,
  clipping the negative half and making the damped oscillation look
  erratic. They now scale to the data in the plotted window.
- The noisy pressure signal (clean + noise Function) lost its axis
  labels/title, rendering as "Scalar x X". Labels are now restored, and
  pressure_signals draws a single clean-vs-noisy overlay per parachute
  instead of three separate plots (dropping the useless noise-only plot).
- parachutes_info now draws one figure per dynamic variable with all
  parachutes overlaid in different colors and properly-labelled axes
  with units (e.g. "Drag Force (N)" vs "Time (s)").
- animate_trajectory/animate_rotate now raise a clear, actionable error
  when vedo is on its non-interactive "2d" backend (Jupyter/headless)
  instead of spamming "No active Plotter found for the 2d backend".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
parachutes_info exceeded pylint's too-many-statements limit (26/25) after
the combined-plot rework. Move the per-variable figure building into a
__plot_parachute_variable helper, which also makes the method easier to read.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Addresses the review suggestion to separate controllers from air brakes in
the documentation. The generic controller material — the controller-function
signature and argument list, the 6/7/8-parameter backward-compatibility notes,
the environment argument, and the discrete vs. continuous controller behaviour
— now lives in a new docs/user/controllers.rst page. airbrakes.rst keeps the
concrete air-brakes example (which still defines its own controller_function so
its jupyter-execute cells run) and cross-references the new page. The
discrete-vs-continuous-controllers label moved to the new page; existing refs
to it resolve unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Addresses the review note in exceptions.py: reminds contributors to
progressively adopt the custom RocketPyError subclasses across the codebase
(and add new exception types here) instead of raising bare ValueError/TypeError.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Removes the third helper module flagged in review. enable_logging is a
user-facing convenience, so it belongs in the public utilities module
alongside the other analysis helpers rather than in a standalone utils.py.

- rocketpy.utils.enable_logging -> rocketpy.utilities.enable_logging
- delete rocketpy/utils.py; expose rocketpy.utilities via __init__ (imported
  last, since utilities pulls in Environment/Rocket/encoders)
- move the logging unit tests into test_utilities.py; delete test_utils.py
- update the logging user guide and reference pages

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The reset_rocketpy_logger fixture was passed as an explicit test argument,
which pylint (W0613, unused-argument) flags. Restore the autouse pattern the
tests originally used in test_utils.py so the fixture runs without being a
parameter.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@Gui-FernandesBR Gui-FernandesBR left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@Gui-FernandesBR Gui-FernandesBR merged commit fca8149 into master Jul 9, 2026
11 checks passed
@Gui-FernandesBR Gui-FernandesBR deleted the rel/v1.13.0 branch July 9, 2026 21:02
Comment on lines +116 to +128
def __init__(
self,
name,
cd_s,
trigger,
sampling_rate,
lag=0,
noise=(0, 0, 0),
radius=None,
height=None,
porosity=0.0432,
drag_coefficient=1.4,
):

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since we are adding the class, we should remove the noise parameter, we have a much more robust and useful implementation of noise in the Sensors now and the way noise is implemented in the flight class is sub optimal (some lists get appended to at every step of the simulation for very little gain)

radius=None,
height=None,
porosity=0.0432,
drag_coefficient=1.4,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldnt drag_coefficient already be set for the current geometry (Hemispherical)?

"""Implements a hemispherical parachute.

Attributes
----------

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the only thing that worries me about this release. I am okay with the way the deprecation of Parachute class was handled, but I don´t currently see any benefit for this new class

It makes sense to have classes for specific parachute geometries only if we have more than one geometry AND a more generic parachute case

When we had only the Parachute class, all users, independent of parachute geometry would use that one, and that was a good enough simplification. Now users will feel limited to the hemispherical geometry. An easy fix for this would be to make the Parachute class a generic parachute (that receives Volume instead of radius/height for example) instead of making it abstract. This would also reduce the level of breaking change

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe a GenericParachute class?

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.