RocketPy
RocketPy copied to clipboard
MNT: Decouple and Extract `Function` Class to Standalone Repository
Rationale
The Function class has evolved into a powerful, general-purpose tool for handling 1D/ND interpolation, algebra, FFTs, and plotting. It is mathematically robust and useful outside the context of rocketry simulations.
Currently, a user who wants to use Function for general engineering tasks must install the entire RocketPy library (and its heavy dependencies). By extracting Function into its own repository and PyPI package:
- Broader Usage: It can be used in other scientific projects without the RocketPy overhead.
- Cleaner Architecture: RocketPy becomes a consumer of this new package, adhering to the "Separation of Concerns" principle.
- Independent Lifecycle: The
Functionclass can be versioned, tested, and released independently of RocketPy's flight physics engine.
Task List This migration should be performed in phases to minimize disruption.
Phase 1: Setup New Infrastructure
- [ ] Create a new repository within the RocketPy-Team organization (suggested name:
function-toolboxorpylib-function). - [ ] Port the
Functionclass code,utilities.py(if relevant), and associated unit tests to the new repository. - [ ] Set up a dedicated CI/CD pipeline (GitHub Actions) for the new repo.
- [ ] Create
pyproject.toml/setup.pyand publish the initial version to TestPyPI and eventually PyPI.
Phase 2: Integration
- [ ] Add the new package as a dependency in RocketPy's
pyproject.toml. - [ ] Refactor RocketPy codebase to import
Functionfrom the new external package instead ofrocketpy.Function. - [ ] Run the full RocketPy test suite to ensure no behavior has changed (Regression Testing).
Phase 3: Cleanup
- [ ] Deprecate/Remove the internal
Functionclass file from the main RocketPy repository. - [ ] Update documentation to point users to the new repository for
Functionspecific details.
Final Comments
- Naming: We need to decide on a PyPI package name that isn't taken (e.g.,
rocketpy-functionormath-function). - Breaking Change: This is a breaking change for users who import
Function. We should consider a transition period wherefrom rocketpy import Functionwraps the new library with a deprecation warning before being removed in v2.0. - Git History: Ideally, we should try to preserve the git commit history of the
Functionclass when moving it to the new repo (usinggit subtreeorfilter-branch).