-
Notifications
You must be signed in to change notification settings - Fork 2
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
Review comments on the codebase after GSOC #22
Comments
|
User can control it when constructing The orbit is recomputed so that |
You are right, file |
right, all sounds good. If you have time to contribute that would be welcomed of course! |
Yes, I will look at it in the following days :) |
In the logistic map example I filter out POs of a given period. The algorithm returned a vector with POs of various periods. Nevertheless, yes, the |
I am currently too busy with the university. I intend to finish the remaining points on the list once I get more free time. |
Now that the GSOC is done, I had another review of the whole codebase. Here are my comments. @JonasKoziorek please append the comments you have collected as well.
In the README say "throughout the docs 'Periodic Orbit' is sometimes condensed to PO in the documentation."For thestable
field, we should usemissing
instead ofnothing
.nothing
is for things that have no known structure.missing
is for things that have known structure, but their actual value is (currently) unknown. Somissing
is possible to know, but not right now. Whilenothing
is in general impossible to know.When referring to a Julia package, either use .jl without monotype, such as NonlinearSolve.jl, or use module name without .jl and monotype, such asNonlinearSolve
. Don't doNonlinearSolve.jl
.periodic_orbit
needs to be improved. First, I propose the call signature:periodic_orbit(ds::DynamicalSystem, alg::PeriodicOrbitFinder[, ig])
Then, say that it returns a
PeriodicOrbit
instance, and@ref
the docstring.Then, say that
ig
is an instance of anInitialGuess
and@ref
it. If not given, it is derived fromds
.periodic_orbits
. Say the return type in the text,because the call signature is too long. Remove
igs
from call signature like above. Also say why this function exists: because some algorithms find multiple POs in one go.periodic_orbits
should be first. Additionally, the algorithms should be in the same page as the Public API, not in a dedicated page.The folder structure ofsrc
needs to be organized more. We should have one folder for continuous and one for discrete time systems. Inside there we should have subfolders for algorithms that need more than 1 file, otherwise the algorithm as a single file. why islambdamatrix.jl
at the top level, but the Diakons algorithm is inside a folder?Are you also porting the DavidLaiHai algorithm?We have a problematic interaction withminimal_period
andcomplete_orbit
.minimal_period
enforces that the Δt for continuous time isT/100
. How can the user control this? In general, why doesminimal_period
callcomplete_orbit
in the first place? This seems unnecessary. The minimal period has the same points as the "double" or "triple" period. Once we have estimated the minimalT
we don't have to recompute/re-complete the orbit. We can just create aPeriodicOrbit
type with the new minimalT
and reuse its.points
field.This line is problematic:
function _periodic_orbits!(POs, ds, alg, igs, Λ)
the generic PeriodicOrbits.jl/src/algorithms/schmelcher_diakonos.jl
Line 65 in 13c53d0
_periodic_orbits!
function here does not have any type annotations for dispatch, but is really only valid for the schmelher diakonos algorithm. It should be renamed to_periodic_orbits_sd!
or something.Creating this extra
igs = [ig.u0 for ig in igs]
simply iterate over the existing igs
is unecessary:PeriodicOrbits.jl/src/algorithms/schmelcher_diakonos.jl
Line 66 in 13c53d0
igs
and useig.u0
as the initial condition.PeriodicOrbits.jl/src/algorithms/optimized_shooting.jl
Lines 90 to 99 in 13c53d0
periodic_orbits
function should do a cleanup/filtering: only return unique periodic orbits. This should also be mentioned in its docstring.PeriodicOrbit(ds::DynamicalSystem, ...)
constructors,Δt, stable
should be keyword arguments, so that the call signature is the same irrespectively of dynamical system. The discrete time case also getsΔt = 1
as keyword argument that is otherwise ignored.Instead of showing algorithm usage in the Algorithms page, a dedicated Examples page should exist that shows this.The example of Davidchack Lai does not seem correct? Or it is confusing. POs with different periods should be colored differently and with a different marker like the standard map example.SHouldn't the returned periodic orbits of the Davidchak Lai algorith be filtered to be unique? In the logistic map example it appears we do the filtering after the fact just for plotting.The text was updated successfully, but these errors were encountered: