I have recently started on a journey to create a package `ChaosTools.jl`

that has common useful tools used in the study of nonlinear dynamics and chaos, like e.g. lyapunov exponents, attractor dimension estimation and other things.

I quickly realized that there wasn’t any API around that had a clear and intuitive way to create and explore Dynamical Systems, which gave me the idea to create a unifying package (`DynamicalSystems.jl`

) to provide this API. This would allow other people from other fields to use it as a base and create other kind of packages for the exploration of other dynamical systems. (Notice, both my repos are currently on a *very* basic state)

However, so far I have been developing by myself, and I am not sure about how to divide functionality, what functionality I should attribute to where and so on and so forth. For example, The DynamicalSystems.jl has a type `ContinuousDynamicalSystem`

which contains the system state, the equations of motion *as well as* the Jacobian function (and matrix). I chose to include the latter because the Jacobian is the second most used quantity in any kind of calculation involving a continuous dynamical system (standard example: lyapunov exponents).

Another example is that any calculation of lyapunov exponents will be in ChaosTools. Such a calculation requires for example the tangent dynamics of the vector field. Where should this tangent dynamics information be? At `DynamicalSystems`

or `ChaosTools`

?

With this post I would like to:

- invite people to collaborate on the projects and participate on the decisions on what should be the core types and/or what should they contain.
- Discuss with other developers about their opinions on how such a feat should be done. Should everything become a single package? Should the functionality be divided into 2 (or more)? I am personally leaning towards the idea of having this
`DynamicalSystems`

as some “core” and using the module`Reexport`

in the other one.

I really appreciate any feedback!