RocketPy icon indicating copy to clipboard operation
RocketPy copied to clipboard

MNT: Decouple and Extract `Function` Class to Standalone Repository

Open Gui-FernandesBR opened this issue 1 year ago • 0 comments

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:

  1. Broader Usage: It can be used in other scientific projects without the RocketPy overhead.
  2. Cleaner Architecture: RocketPy becomes a consumer of this new package, adhering to the "Separation of Concerns" principle.
  3. Independent Lifecycle: The Function class 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-toolbox or pylib-function).
  • [ ] Port the Function class 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.py and 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 Function from the new external package instead of rocketpy.Function.
  • [ ] Run the full RocketPy test suite to ensure no behavior has changed (Regression Testing).

Phase 3: Cleanup

  • [ ] Deprecate/Remove the internal Function class file from the main RocketPy repository.
  • [ ] Update documentation to point users to the new repository for Function specific details.

Final Comments

  • Naming: We need to decide on a PyPI package name that isn't taken (e.g., rocketpy-function or math-function).
  • Breaking Change: This is a breaking change for users who import Function. We should consider a transition period where from rocketpy import Function wraps 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 Function class when moving it to the new repo (using git subtree or filter-branch).

Gui-FernandesBR avatar Aug 19 '24 02:08 Gui-FernandesBR