Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Debloat HarmonicBalance.jl #98

Closed
5 tasks
oameye opened this issue Jan 21, 2023 · 2 comments · Fixed by #154
Closed
5 tasks

Debloat HarmonicBalance.jl #98

oameye opened this issue Jan 21, 2023 · 2 comments · Fixed by #154
Labels
enhancement New feature or request

Comments

@oameye
Copy link
Member

oameye commented Jan 21, 2023

Problem

The current implementation of HarmonicBalance.jl package is becoming bloated and difficult to maintain regarding building out the future NonlinearOscillations ecosystem. It would be beneficial to split it into multiple smaller packages in order to improve maintainability and ease of use. In that way, the packages under the ecosystem becomes more more lightweight, focused on a specific set of functionality.

Proposed solution

Mimic the SCIML ecosystem by creating a hierarchical structure of packages. Create a main interface package at the top of the hierarchy that serves as a low-dependency common interface for libraries downstream. Split the current package into smaller, focused packages that are designed to work well together. Another, maybe more relevant, ecosystem who does a similar thing would be QuantumOptics.jl.

Potential drawbacks

Implementation plan

  • Create a new main interface package and move the common interface code into it. This would be the package now called HarmonicBalanceBase.jl.
  • Identify the main functionalities of the current package that can be separated into smaller packages.
    • Computing slow-flow equations.
    • Solving slow-flow equations with Homotopy Continuation.
    • Time evolve and analyze slow-flow equations and the nonlinear oscillatory ODE's.
  • Create new packages for each of the functionalities identified in the previous step and move the corresponding code into them.
  • Find good names for all extra packages.
  • Test the new packages to ensure they work well together and with the main interface package.

Additional information

  • Here one can find some tips and tricks for making common interfaces between packages
  • Package Reexport is commonly used.
@oameye oameye added this to the Reorganise milestone Jan 21, 2023
@oameye oameye added the enhancement New feature or request label Jan 27, 2023
@oameye
Copy link
Member Author

oameye commented Apr 18, 2023

oameye added a commit that referenced this issue Jul 31, 2023
From now on  the Module is only loaded when `OrdinaryDiffEq` is also loaded

The Package `PackageExtensionCompat` is used to make sure that HB stays backwards compatible by using `Requires`

Resolves #100, #98
@oameye oameye linked a pull request Jul 31, 2023 that will close this issue
@oameye oameye linked a pull request Aug 1, 2023 that will close this issue
@oameye
Copy link
Member Author

oameye commented Aug 1, 2023

Package Extensions cannot be used as you can only extent a extisting function and cannot export new ones

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
1 participant