Enh/automatically download images #896
Enh/automatically download images #896Gui-FernandesBR merged 32 commits intoRocketPy-Team:developfrom
Conversation
Gui-FernandesBR
left a comment
There was a problem hiding this comment.
Impressive work by @C8H10O2 !
Could you update monte carlo documentation and also the monte carlo example notebook to include this new feature?
0ee44b9 to
f35dc18
Compare
|
Hi @Gui-FernandesBR , all review comments are addressed, and I've also updated the Monte Carlo documentation and example notebook to include the new feature. |
|
@C8H10O2 just a few more comments to solve and we are done. Almost there! |
…project.toml and requirements-optional.txt
- 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
…rlo 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.
- 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.
|
@C8H10O2 can you fix linters and tests please? |
- 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.
I fixed the issues with the linters, but regarding the tests, it looks like it's because there is no rasterio wheel package available on Python 3.14. It needs to be compiled from source, and the compilation process depends on GDAL. I think the GitHub Actions configuration needs to be upgraded to automatically install the GDAL library. |
|
@C8H10O2 Is there a way to get the same results with a default RocketPy dependency?I assume that (generally) we should avoid adding new libraries in the interest of optimization. (unless this a specific case @Gui-FernandesBR ? ) |
@Monta120 That is a valid concern regarding optimization, but I believe adding contextily is necessary in this specific case. If we were to implement the map downloading feature manually, we would run into two main issues: 1. Maintenance burden: To allow users to simply pass 2. Redundancy: Building this functionality natively would essentially mean re-implementing contextily from scratch within RocketPy. It feels like "reinventing the wheel" rather than leveraging a library that already handles this efficiently. |
contextily is an optional requirement. No problem. |
|
@C8H10O2 tests are still not passing on CI. Is it passing locally? |
|
I ran the tests locally. They passed (after installing contextily). The PR’s checker fails because the contextily library depends on rasterio, and rasterio needs the GDAL tools (gdal-config) to be installed on the CI machine; since GDAL is missing there, pip cannot build rasterio and aborts during pip install with the “A GDAL API version must be specified” error. What you can do is make the import completely optional in your helper inside monte_carlo_plots.py ( _get_background_map)(so remove the top import) then ask pytest to skip the tests on the machines that don't have contextily installed (using pytest.importorskip). |
Good option. Please proceed with the change but leaving a small comment explaining why the import was moved out of the top of the file |
Hi, The current implementation actually already handles this as you suggested: Instead, I am using: contextily = import_optional_dependency("contextily")By utilizing the existing raise ImportError(
f"{package_name} is an optional dependency and is not installed.\n"
+ f"\t\tUse 'pip install {package_name}' to install it or "
+ "'pip install rocketpy[all]' to install all optional dependencies."
) from exc |
|
I don't understand why the tests are failing on CI then. Sorry if I misunderstood (I work on several projects on GitHub, sometimes my reviews are a bit "too quick but shallow"). @Monta120 how hard would it to require the GDAL installation on CI? Would that mean that every user need to download it before using the feature? |
- Added pytest.importorskip for contextily in both integration and unit test files to ensure tests are only run if the required library is installed.
- Replaced direct import of contextily with pytest.importorskip to ensure tests are skipped if the library is not available, enhancing test robustness.
If it's only added to the CI and not as a dependency then no, users wouldn't need to install it nor would it install automatically when a user clones the rocketpy repository. I also don't believe we as contributors can modify the CI outside of our fork. |
|
@C8H10O2 I think a module level pytest.importorskip would be better (at the top of the file) |
1. The CI Failure: Simply put, rasterio (a dependency of 2. Fixing CI: It shouldn't be too complicated. I will try updating 3. User Impact: For now, yes, users on Python 3.14 would need GDAL installed system-wide. However, this is temporary. According to the rasterio issue #3419, Python 3.14 wheels should be released soon. Once available, users won't need to build from source or install GDAL manually. |
Please check the previous commit, I've already implemented module-level pytest.importorskip in both the unit test and integration test files. |
As I said, I'm not sure you have the required permissions to edit the CI beyond our fork.And if this check passes then there's no need to touch the CI at all. |
|
I will take a look at it during the weekend |
1 similar comment
|
I will take a look at it during the weekend |
|
@Gui-FernandesBR While installing GDAL and compiling Given this, I propose we temporarily restrict the dependency in This ensures contextily is only installed on supported Python versions. I will also update the documentation to reflect this limitation. I have already tested this configuration on my fork, and the CI pipeline passed successfully. If you agree with this solution, please let me know, and I will submit a commit to update pyproject.toml and the documentation. |
|
@C8H10O2 brilliant!! Please move forward with your implementation. If you don't mind... Something we usually do in open-source project when facing problems like that is to raise an issue on the dependency repo so we can follow the development of GDAL binaries for py3.14+windows from the contextly side. |
…nal.txt - Modified contextily dependency in pyproject.toml to conditionally require it for Python versions below 3.14.
…sue on python 3.14
|
@Gui-FernandesBR Regarding the upstream issue: As I mentioned in my previous comment, there is already an active issue on the
Since I linked it here, GitHub has automatically cross-referenced this PR in their thread, so the maintainers can already see that downstream projects (like us) are waiting on this. Given that there is no clear timeline on their side yet, I agree that merging this temporary fix is the best way forward. I have subscribed to that issue, and I'll be happy to submit a follow-up PR to revert this restriction once the wheels are officially released. |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## develop #896 +/- ##
===========================================
+ Coverage 80.27% 81.13% +0.86%
===========================================
Files 104 107 +3
Lines 12769 13742 +973
===========================================
+ Hits 10250 11150 +900
- Misses 2519 2592 +73 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
* Fix CSV column header spacing in FlightDataExporter (#865) Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> * Enh/custom warning no motor parachute aerosurface (#871) * 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 #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 #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 #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> * Enh/motor thrustcurve api (#870) * 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 (#815) * 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> * ENH: Implementing 3-dof-simulation (#745) * DRAFT: for ENH/3-dof-simulation (See #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 #460 (#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 (#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 (#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 (#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> * ENH: Compatibility with MERRA-2 atmosphere reanalysis files #825 (#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/thrustcurve api cache (#881) * 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) * DOC: fix changelog after recent merges * ENH: Add save functionality to _MonteCarloPlots.all method (#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 #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> * Fix parallel Monte Carlo simulation showing incorrect iteration count (#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 #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> * FIX documentation issues (#886) * Feat/flight comparison (#888) * 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 * Enh/bootstrapping for ci estimation (#897) * 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> * FEAT/Rail Button Bending Moments (#901) * 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 * Env/flight axial acceleration (#876) * 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> * ENH: add animations for motor propellant mass and tank fluid volumes (#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> * ENH: reorganize changelog entries for clarity and consistency * ENH: Add multi-dimensional drag coefficient support (Cd as function of M, Re, α) (#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 (#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: 3-dof lateral motion improvement (#883) * 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 (#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 (#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> * TST: add branch coverage for fin_flutter_analysis and fix keyword argument bug (#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: net thrust addition to 3 dof in flight class (#907) * 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/automatically download images (#896) * 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 #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 * ENH: Refactor Flight class to improve time node handling and sensor/controllers (#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: Fix documentation build (#908) * 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 if elif else chains with match statement (#921) * 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> * TST: Add acceptance tests for 3DOF flight simulation based on Bella Lui rocket (#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 #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> * MNT: ruff update * Fix incorrect indexing in max_acceleration_power_off_time (#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> * BUG: Duplicate _controllers in Flight.TimeNodes.merge() (#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> * ENH: Improve multi-variable drag compatibility, regular-grid handling, and related tests/docs (#927) * MNT: simplify function grid interpolation structure. * DOC: add regular grid to function docs * ENH: improve multi dim drag implementation to avoid breaking changes * TST: fix tests for new drag implementation * ENH: Let the user solve the csv file error instead of muting the error Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> * MNT: move create_grid function to tools * ENH: copilot suggestion Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * ENH: copilot suggestion Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * ENH: move load_csv to tools * ENH: remove unecessary dicretization * MNT: ruff and pylint * MNT: ruff update * MNT: pylint * ENH: Avoid circular imports * MNT: fix pylint and cyclic imports again * DEV: changelog --------- Co-authored-by: Pedro Bressan <87212571+phmbressan@users.noreply.github.com> Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * REL: bump version to 1.12 * BUG: Fix missing titles in roll parameter plots for fin sets (#934) * BUG: Fix missing titles in roll parameter plots for fin sets Call set_title(None) on clf_delta and cld_omega after set_inputs/set_outputs in Fins.evaluate_roll_parameters() so the title is auto-generated from the updated axis names instead of remaining None. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * MNT: Update CHANGELOG for PR #934 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> * DOC: HEDY Flight Example (#928) * DOC: Add simulation data for hedy * DOC: Add weather data for hedy launch * DOC: Add CATS Vega flight data * DOC: Add jupyter notebook * DOC: Renamed folder and notebook * DOC: Add Hedy rocket to examples index Add Hedy (2025) from TU Wien Space Team to the simulated vs measured apogee chart and to the toctree in docs/examples/index.rst. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * MNT: Apply ruff formatting to hedy notebook Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> * ENH: Air brakes controller functions now support 8-parameter signature (#854) * solved environment parameter global usage, now can be used locally * f string placeholder changes in test file * ENH: Update air brakes controller to support 8-parameter signature and improve environment access * make lint * solved environment parameter global usage, now can be used locally * f string placeholder changes in test file * ENH: Update air brakes controller to support 8-parameter signature and improve environment access * make lint * fix tests --------- Co-authored-by: Nitheesh Krishna <nitheeshhs@gmail.com> Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br> Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Co-authored-by: Mateus Stano Junqueira <69485049+MateusStano@users.noreply.github.com> * REL: bump version to 1.12 * MNT: Add pylint disable for too-many-statements in env test * Add tvc classes * Add tvc class to rocket.py * Fix: only one tvc per rocket * Add TVC dynamics to flight.py * Fix tvc prints * Fix tvc class init and remove old tvc controllers when add more than one TVC * Run black formatter * Fix: TVC torque act on CDM, not CM * Add roll control class and implement in flight.py and rocket.py * Add active contol example. Modified from Halcyon flight * BUG: Fix hard-coded radius value for parachute added mass calculation (#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> * REL: bump version to 1.12 * ENH: Add explicit timeouts to ThrustCurve API requests and update changelog (#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> * ENH: Restore power_off/on_drag as Function objects; add _input attributes 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> * MNT: Remove unused imports and deprecated functions from mathutils/function.py * BUG: Readd SourceType enumeration for function source types and clean up imports * BUG: Fix incorrect Jacobian in `only_radial_burn` branch of `SolidMotor.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> * ENH: move weathercocking_coeff to PointMassRockt * MNT: ruff * MNT: fix cyclic import * Init throttle control class * Add throttle basic logic * Init throttle control prints * Add features for balloon popping challenge (#5) * Merge pull request #4 from zuorenchen/develop Pull develop branch with TVC, roll control, buoyancy force, and stochastic features * Update monte carlo sim with the refactored flight class * Add function in flight class to run a step of simulation for a time node at a time * End rocket step sim at impact event. Refactor _step_state initialization. Add post processing when _step_simulation finishes * Refactor step simulation to get sensor measurement after step * Update gnss sensor output to local relative frame and add velocity measurements * Fix stuff caught by copilot and run formatter * Rename pyproject name * Update rocketpy/simulation/flight.py to init plots by default Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix thrust3 after cut off Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Add commits to self.set_processed_results() that fails when results contain arrays * Update comment in gnss sensor measurement * Update stochastic_aero_surfaces.py docstring Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Add assert to check if max roll torque is positive * Update tvc class docstring * Update to assert coefficient_constants length * Add assert to check if gimbal range is positive * Remove min_time_step and max_time_step attributes from StochasticFlight class, inhert them from flight class * Fix volume handlings in rocket.py * Update docstring units * Add attribute to run simulation after flight class initialization by default for backward competability * Format * Fix: put volume parameter to the end with default * Refactor monte carlo class as simulation is run by default after flight class initialization --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Add random_seed input to MonteCarlo.simulation() (#6) * Add random_seed input to simulation() method to ensure reproductability * Refactor step_simulation after merge v1.12.0 * Remove duplicate controller process * ENH: clamp AoA aero force to stable the rocket when tumbling * Add rate limit in tvc and roll control * Bug: process sensor if node._component_sensors exist instead of flight.sensor * Test throttle control * Debug throttle control * Fix throttle class problem * Fix pyproject so pip install all option has correct behavior * Fix throttle command not respond problem * Add throttle docstring * Refactor throttle range tuple instead of separate min and max values * Add comments for thrust vector control calculations in Flight class * Add flight simulation notebook for Halcyon rocket with throttle control * Enhance throttle control with rate limiting * Run formatter * Refactor throttle control functions * Handle impact event at first step * Create post_process_simulation to post process simulation if end early * Add citation information in readme --------- Co-authored-by: Pedro Henrique Marinho Bressan <87212571+phmbressan@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: Gui-FernandesBR <63590233+Gui-FernandesBR@users.noreply.github.com> Co-authored-by: Bizo883 <15618311793@163.com> Co-authored-by: Tang Xiaoyu <xiaoyu.tang.fr@gmail.com> Co-authored-by: Marchma0 <nehlilkamel@gmail.com> Co-authored-by: Marchma0 <88397818+Marchma0@users.noreply.github.com> Co-authored-by: monta <montadharettaieb@gmail.com> Co-authored-by: Caio Souza <99217921+caioessouza@users.noreply.github.com> Co-authored-by: Gui-FernandesBR <guilherme_fernandes@usp.br> Co-authored-by: Ishan <99824864+aZira371@users.noreply.github.com> 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 <175728472+Copilot@users.noreply.github.com> Co-authored-by: hogatata <98260741+hogatata@users.noreply.github.com> Co-authored-by: Ishan <dubeyishan371@gmail.com> Co-authored-by: Eriel Cabrera <98791243+erielC@users.noreply.github.com> Co-authored-by: Xiaoyu TANG <73884807+C8H10O2@users.noreply.github.com> Co-authored-by: Tiberiu Sabău <96194994+tibisabau@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Diego Grünberger <102720504+theDiego21@users.noreply.github.com> Co-authored-by: RahulKrishna <127146393+RahulKrishna145@users.noreply.github.com> Co-authored-by: Nitheesh Krishna <nitheeshhs@gmail.com> Co-authored-by: RickyRicato <rickywang44@gmail.com>

Pull request type
Checklist
black rocketpy/ tests/) has passed locallypytest tests -m slow --runslow) have passed locallyCHANGELOG.mdhas been updated (if relevant)Current behavior
There is no built-in way to visualize these ellipses against a real-world map background directly within the Python environment (e.g., Jupyter Notebooks or saved logic). Users currently see only a white background with axes, which lacks context regarding the launch site, safety zones, or geographical landmarks.
The only current available option is to manually add a background image to the matplotlib figure.
See issue #890
New behavior
Users may specify the map background provider via the background parameter in
MonteCarlo.plots.ellipses()andMonteCarlo.plots.ellipses_comparison().Currently available options are:
Utilised on-demand imports, with proper handling of projection coordinate system conversions and network errors.
Breaking change