Skip to content

Enh/automatically download images #896

Merged
Gui-FernandesBR merged 32 commits intoRocketPy-Team:developfrom
IDL-IMTA-Students:enh/automatically-download-images
Dec 8, 2025
Merged

Enh/automatically download images #896
Gui-FernandesBR merged 32 commits intoRocketPy-Team:developfrom
IDL-IMTA-Students:enh/automatically-download-images

Conversation

@C8H10O2
Copy link
Copy Markdown
Contributor

@C8H10O2 C8H10O2 commented Dec 2, 2025

Pull request type

  • Code changes (bugfix, features)
  • Code maintenance (refactoring, formatting, tests)

Checklist

  • Tests for the changes have been added (if needed)
  • Docs have been reviewed and added / updated
  • Lint (black rocketpy/ tests/) has passed locally
  • All tests (pytest tests -m slow --runslow) have passed locally
  • CHANGELOG.md has 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() and MonteCarlo.plots.ellipses_comparison().

Currently available options are:

  • "satellite" (uses Esri.WorldImagery)
  • "street" (uses OpenStreetMap.Mapnik)
  • "terrain" (uses Esri.WorldTopoMap)
  • or any contextily provider name from xyzservices.providers (e.g., "CartoDB.Positron").

Utilised on-demand imports, with proper handling of projection coordinate system conversions and network errors.

Breaking change

  • Yes
  • No

Comment thread rocketpy/plots/monte_carlo_plots.py Outdated
Comment thread rocketpy/plots/monte_carlo_plots.py Outdated
Comment thread rocketpy/plots/monte_carlo_plots.py
Comment thread rocketpy/plots/monte_carlo_plots.py Outdated
Comment thread tests/integration/simulation/test_monte_carlo_plots_background_kennedy.py Outdated
Comment thread tests/integration/simulation/test_monte_carlo_plots_background_kennedy.py Outdated
Comment thread tests/integration/simulation/test_monte_carlo_plots_background_kennedy.py Outdated
Comment thread tests/integration/simulation/test_monte_carlo_plots_background_kennedy.py Outdated
Copy link
Copy Markdown
Member

@Gui-FernandesBR Gui-FernandesBR left a comment

Choose a reason for hiding this comment

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

Impressive work by @C8H10O2 !

Could you update monte carlo documentation and also the monte carlo example notebook to include this new feature?

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@C8H10O2 C8H10O2 force-pushed the enh/automatically-download-images branch from 0ee44b9 to f35dc18 Compare December 4, 2025 14:56
@C8H10O2
Copy link
Copy Markdown
Contributor Author

C8H10O2 commented Dec 4, 2025

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.

Comment thread docs/user/mrs.rst
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 9 out of 10 changed files in this pull request and generated 8 comments.

Comment thread tests/integration/simulation/test_monte_carlo_plots_background.py Outdated
Comment thread rocketpy/plots/monte_carlo_plots.py Outdated
Comment thread rocketpy/plots/monte_carlo_plots.py
Comment thread tests/unit/simulation/test_monte_carlo_plots_background.py
Comment thread tests/unit/simulation/test_monte_carlo_plots_background.py
Comment thread tests/unit/simulation/test_monte_carlo_plots_background.py
Comment thread tests/integration/simulation/test_monte_carlo_plots_background.py
Comment thread tests/unit/simulation/test_monte_carlo_plots_background.py
@Gui-FernandesBR
Copy link
Copy Markdown
Member

@C8H10O2 just a few more comments to solve and we are done. Almost there!

- 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.
@Gui-FernandesBR
Copy link
Copy Markdown
Member

@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.
@C8H10O2
Copy link
Copy Markdown
Contributor Author

C8H10O2 commented Dec 5, 2025

@C8H10O2 can you fix linters and tests please?

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.

@Monta120
Copy link
Copy Markdown
Contributor

Monta120 commented Dec 5, 2025

@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 ? )

@C8H10O2
Copy link
Copy Markdown
Contributor Author

C8H10O2 commented Dec 5, 2025

@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 background="satellite", we would have to hardcode and manually maintain a list of map provider APIs. If a provider changes their API and we don't update it immediately, the feature would break.

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.

@Gui-FernandesBR
Copy link
Copy Markdown
Member

@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 ? )

contextily is an optional requirement. No problem.

@Gui-FernandesBR
Copy link
Copy Markdown
Member

@C8H10O2 tests are still not passing on CI.

Is it passing locally?

@Monta120
Copy link
Copy Markdown
Contributor

Monta120 commented Dec 5, 2025

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).
This change would make the feature optional and you can make the helper raise a clear error or warning that points users to install the optional dependency (such as " please run pip install contextily or "pip install "rocketpy[monte-carlo]"")
@Gui-FernandesBR Thoughts?

@Gui-FernandesBR
Copy link
Copy Markdown
Member

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). This change would make the feature optional and you can make the helper raise a clear error or warning that points users to install the optional dependency (such as " please run pip install contextily or "pip install "rocketpy[monte-carlo]"") @Gui-FernandesBR Thoughts?

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

@C8H10O2
Copy link
Copy Markdown
Contributor Author

C8H10O2 commented Dec 5, 2025

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)

Hi,

The current implementation actually already handles this as you suggested: contextily is not imported at the top level.

Instead, I am using:

contextily = import_optional_dependency("contextily")

By utilizing the existing import_optional_dependency function in tools.py, contextily is loaded optionally. If the import fails, it raises an exception with guidance for the user:

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

@Gui-FernandesBR
Copy link
Copy Markdown
Member

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?

@Monta120
Copy link
Copy Markdown
Contributor

Monta120 commented Dec 5, 2025

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)

Hi,

The current implementation actually already handles this as you suggested: contextily is not imported at the top level.

Instead, I am using:

contextily = import_optional_dependency("contextily")

By utilizing the existing import_optional_dependency function in tools.py, contextily is loaded optionally. If the import fails, it raises an exception with guidance for the user:

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

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)

Hi,

The current implementation actually already handles this as you suggested: contextily is not imported at the top level.

Instead, I am using:

contextily = import_optional_dependency("contextily")

By utilizing the existing import_optional_dependency function in tools.py, contextily is loaded optionally. If the import fails, it raises an exception with guidance for the user:

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

You're right, I just looked at the code. Then I believe the only thing causing the issue is your contextily import inside test_ellipses_background_bounds2img_failure in tests/unit/simulation/test_monte_carlo_plots_background.py

Screenshot 2025-12-05 at 21 13 11

Could you remove that import and then replace it with a module level pytest.importorskip? As long as contextily remains an optional dependancy the checker shouldn't fail

- 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.
@Monta120
Copy link
Copy Markdown
Contributor

Monta120 commented Dec 5, 2025

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?

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?

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.
That might not be necessary though, I don't see why an importor skip wouldn't work. Let's see if the checkers pass after the latest commit.

@Monta120
Copy link
Copy Markdown
Contributor

Monta120 commented Dec 5, 2025

@C8H10O2 I think a module level pytest.importorskip would be better (at the top of the file)

@C8H10O2
Copy link
Copy Markdown
Contributor Author

C8H10O2 commented Dec 5, 2025

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?

1. The CI Failure: Simply put, rasterio (a dependency of contextily) does not yet have pre-built wheels for Python 3.14. Consequently, pip tries to build it from source. This compilation requires the GDAL system library, which isn't present in the default GitHub Actions environment, causing the installation to fail.

2. Fixing CI: It shouldn't be too complicated. I will try updating .github/workflows/test_pytest.yaml shortly to automatically install GDAL in the CI environment.

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.

@C8H10O2
Copy link
Copy Markdown
Contributor Author

C8H10O2 commented Dec 5, 2025

@C8H10O2 I think a module level pytest.importorskip would be better (at the top of the file)

Please check the previous commit, I've already implemented module-level pytest.importorskip in both the unit test and integration test files.

@Monta120
Copy link
Copy Markdown
Contributor

Monta120 commented Dec 5, 2025

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?

1. The CI Failure: Simply put, rasterio (a dependency of contextily) does not yet have pre-built wheels for Python 3.14. Consequently, pip tries to build it from source. This compilation requires the GDAL system library, which isn't present in the default GitHub Actions environment, causing the installation to fail.

2. Fixing CI: It shouldn't be too complicated. I will try updating .github/workflows/test_pytest.yaml shortly to automatically install GDAL in the CI environment.

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.

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.

@Gui-FernandesBR
Copy link
Copy Markdown
Member

I will take a look at it during the weekend

1 similar comment
@Gui-FernandesBR
Copy link
Copy Markdown
Member

I will take a look at it during the weekend

@C8H10O2
Copy link
Copy Markdown
Contributor Author

C8H10O2 commented Dec 6, 2025

@Gui-FernandesBR
Regarding the CI and user experience, I spent a few hours investigating the feasibility of building rasterio from source today.

While installing GDAL and compiling rasterio on Linux and macOS is straightforward (using system package managers), doing so on Windows is virtually impossible. It requires a very complex environment configuration that is definitely not suitable for a standard user guide. Since Python 3.14 is so new, pre-built binaries are also not available on conda-forge yet.

Given this, I propose we temporarily restrict the dependency in pyproject.toml until rasterio releases wheels for 3.14. We can modify the optional dependencies like this:

monte-carlo = [
    ...
    "contextily>=1.0.0; python_version < '3.14'",
]

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.

@Gui-FernandesBR
Copy link
Copy Markdown
Member

@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.
However, this is a "plus" or a "nice to have". I won't block the PR if you don't proceed with that.

…nal.txt

- Modified contextily dependency in pyproject.toml to conditionally require it for Python versions below 3.14.
@C8H10O2
Copy link
Copy Markdown
Contributor Author

C8H10O2 commented Dec 7, 2025

@Gui-FernandesBR
Thanks! I've pushed the changes to pyproject.toml and the docs.

Regarding the upstream issue: As I mentioned in my previous comment, there is already an active issue on the rasterio repo tracking this.

According to the rasterio issue #3419, Python 3.14 wheels should be released soon.

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
Copy link
Copy Markdown

codecov Bot commented Dec 8, 2025

Codecov Report

❌ Patch coverage is 92.00000% with 8 lines in your changes missing coverage. Please review.
✅ Project coverage is 81.13%. Comparing base (9cf3dd4) to head (e450d25).
⚠️ Report is 23 commits behind head on develop.

Files with missing lines Patch % Lines
rocketpy/plots/monte_carlo_plots.py 91.30% 6 Missing ⚠️
rocketpy/tools.py 93.54% 2 Missing ⚠️
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.
📢 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.

Copy link
Copy Markdown
Member

@Gui-FernandesBR Gui-FernandesBR left a comment

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 a25fd25 into RocketPy-Team:develop Dec 8, 2025
10 checks passed
zuorenchen added a commit to zuorenchen/ActiveRocketPy that referenced this pull request Apr 22, 2026
* 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

No open projects
Status: Backlog

Development

Successfully merging this pull request may close these issues.

ENH: Automatically downloads satellite images from the internet

4 participants