Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 63 additions & 63 deletions scan/simulations.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,10 +141,10 @@ def __init__(
dt: Size of time steps.
"""

self.sigma = sigma or self.default_parameters["sigma"]
self.rho = rho or self.default_parameters["rho"]
self.beta = beta or self.default_parameters["beta"]
self.dt = dt or self.default_parameters["dt"]
self.sigma = sigma if sigma is not None else self.default_parameters["sigma"]
self.rho = rho if rho is not None else self.default_parameters["rho"]
self.beta = beta if beta is not None else self.default_parameters["beta"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

def flow(self, x: np.ndarray) -> np.ndarray:
"""Calculates (dx/dt, dy/dt, dz/dt) with given (x,y,z) for RK4.
Expand Down Expand Up @@ -189,10 +189,10 @@ def __init__(
dt: Size of time steps.
"""

self.a = a or self.default_parameters["a"]
self.b = b or self.default_parameters["b"]
self.c = c or self.default_parameters["c"]
self.dt = dt or self.default_parameters["dt"]
self.a = a if a is not None else self.default_parameters["a"]
self.b = b if b is not None else self.default_parameters["b"]
self.c = c if c is not None else self.default_parameters["c"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

def flow(self, x: np.ndarray) -> np.ndarray:
"""Calculates (dx/dt, dy/dt, dz/dt) with given (x,y,z) for RK4.
Expand Down Expand Up @@ -232,8 +232,8 @@ def __init__(self, a: float | None = None, dt: float | None = None) -> None:
a: 'a' parameter in the Complex butterfly equations.
dt: Size of time steps.
"""
self.a = a or self.default_parameters["a"]
self.dt = dt or self.default_parameters["dt"]
self.a = a if a is not None else self.default_parameters["a"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

def flow(self, x: np.ndarray) -> np.ndarray:
"""Calculates (dx/dt, dy/dt, dz/dt) with given (x,y,z) for RK4.
Expand Down Expand Up @@ -277,10 +277,10 @@ def __init__(
c: 'c' parameter in the Chen system.
dt: Size of time steps.
"""
self.a = a or self.default_parameters["a"]
self.b = b or self.default_parameters["b"]
self.c = c or self.default_parameters["c"]
self.dt = dt or self.default_parameters["dt"]
self.a = a if a is not None else self.default_parameters["a"]
self.b = b if b is not None else self.default_parameters["b"]
self.c = c if c is not None else self.default_parameters["c"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

def flow(self, x: np.ndarray) -> np.ndarray:
"""Calculates (dx/dt, dy/dt, dz/dt) with given (x,y,z) for RK4.
Expand Down Expand Up @@ -336,11 +336,11 @@ def __init__(
b: 'b' parameter in the Chua equations.
dt: Size of time steps.
"""
self.alpha = alpha or self.default_parameters["alpha"]
self.beta = beta or self.default_parameters["beta"]
self.a = a or self.default_parameters["a"]
self.b = b or self.default_parameters["b"]
self.dt = dt or self.default_parameters["dt"]
self.alpha = alpha if alpha is not None else self.default_parameters["alpha"]
self.beta = beta if beta is not None else self.default_parameters["beta"]
self.a = a if a is not None else self.default_parameters["a"]
self.b = b if b is not None else self.default_parameters["b"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

def flow(self, x: np.ndarray) -> np.ndarray:
"""Calculates (dx/dt, dy/dt, dz/dt) with given (x,y,z) for RK4.
Expand Down Expand Up @@ -387,8 +387,8 @@ def __init__(self, b: float | None = None, dt: float | None = None) -> None:
b: 'b' parameter of Thomas' cyclically symmetric attractor.
dt: Size of time steps.
"""
self.b = b or self.default_parameters["b"]
self.dt = dt or self.default_parameters["dt"]
self.b = b if b is not None else self.default_parameters["b"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

def flow(self, x: np.ndarray) -> np.ndarray:
"""Calculates (dx/dt, dy/dt, dz/dt) with given (x,y,z) for RK4.
Expand Down Expand Up @@ -429,9 +429,9 @@ def __init__(self, a: float | None = None, b: float | None = None, dt: float | N
b: 'b' parameter in the WINDMI equations.
dt: Size of time steps.
"""
self.a = a or self.default_parameters["a"]
self.b = b or self.default_parameters["b"]
self.dt = dt or self.default_parameters["dt"]
self.a = a if a is not None else self.default_parameters["a"]
self.b = b if b is not None else self.default_parameters["b"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

def flow(self, x: np.ndarray) -> np.ndarray:
"""Calculates (dx/dt, dy/dt, dz/dt) with given (x,y,z) for RK4.
Expand Down Expand Up @@ -481,9 +481,9 @@ def __init__(self, kappa: float | None = None, lam: float | None = None, dt: flo
lam: 'lambda' parameter in the Rucklidge equations.
"""

self.kappa = kappa or self.default_parameters["kappa"]
self.lam = lam or self.default_parameters["lam"]
self.dt = dt or self.default_parameters["dt"]
self.kappa = kappa if kappa is not None else self.default_parameters["kappa"]
self.lam = lam if lam is not None else self.default_parameters["lam"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

def flow(self, x: np.ndarray) -> np.ndarray:
"""Calculates (dx/dt, dy/dt, dz/dt) with given (x,y,z) for RK4.
Expand Down Expand Up @@ -526,8 +526,8 @@ def __init__(self, a: float | None = None, dt: float | None = None) -> None:
a: 'a' parameter in the Simplest Quadratic Chaotic flow.
dt: Size of time steps.
"""
self.a = a or self.default_parameters["a"]
self.dt = dt or self.default_parameters["dt"]
self.a = a if a is not None else self.default_parameters["a"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

def flow(self, x: np.ndarray) -> np.ndarray:
"""Calculates (dx/dt, dy/dt, dz/dt) with given (x,y,z) for RK4.
Expand Down Expand Up @@ -570,8 +570,8 @@ def __init__(self, a: float | None = None, dt: float | None = None) -> None:
a: 'a' parameter in the Simplest Cubic Chaotic flow.
dt: Size of time steps.
"""
self.a = a or self.default_parameters["a"]
self.dt = dt or self.default_parameters["dt"]
self.a = a if a is not None else self.default_parameters["a"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

def flow(self, x: np.ndarray) -> np.ndarray:
"""Calculates (dx/dt, dy/dt, dz/dt) with given (x,y,z) for RK4.
Expand Down Expand Up @@ -614,8 +614,8 @@ def __init__(self, a: float | None = None, dt: float | None = None) -> None:
a: 'a' parameter in the Simplest Piecewise Linear Chaotic flow.
dt: Size of time steps.
"""
self.a = a or self.default_parameters["a"]
self.dt = dt or self.default_parameters["dt"]
self.a = a if a is not None else self.default_parameters["a"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

def flow(self, x: np.ndarray) -> np.ndarray:
"""Calculates (dx/dt, dy/dt, dz/dt) with given (x,y,z) for RK4.
Expand Down Expand Up @@ -655,8 +655,8 @@ def __init__(self, a: float | None = None, dt: float | None = None) -> None:
a: 'a' parameter in Double Scroll system.
dt: Size of time steps.
"""
self.a = a or self.default_parameters["a"]
self.dt = dt or self.default_parameters["dt"]
self.a = a if a is not None else self.default_parameters["a"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

def flow(self, x: np.ndarray) -> np.ndarray:
"""Calculates (dx/dt, dy/dt, dz/dt) with given (x,y,z) for RK4.
Expand Down Expand Up @@ -695,11 +695,11 @@ def __init__(
d: 'd' parameter in Lotka Volterra System.
dt: Size of time steps.
"""
self.a = a or self.default_parameters["a"]
self.b = b or self.default_parameters["b"]
self.c = c or self.default_parameters["c"]
self.d = d or self.default_parameters["d"]
self.dt = dt or self.default_parameters["dt"]
self.a = a if a is not None else self.default_parameters["a"]
self.b = b if b is not None else self.default_parameters["b"]
self.c = c if c is not None else self.default_parameters["c"]
self.d = d if d is not None else self.default_parameters["d"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

def flow(self, x: np.ndarray) -> np.ndarray:
"""Calculates (dx/dt, dy/dt, dz/dt) with given (x,y,z) for RK4.
Expand Down Expand Up @@ -740,8 +740,8 @@ def __init__(self, a: float | None = None, b: float | None = None) -> None:
a: 'a' parameter of Henon map.
b: 'b' parameter of Henon map.
"""
self.a = a or self.default_parameters["a"]
self.b = b or self.default_parameters["b"]
self.a = a if a is not None else self.default_parameters["a"]
self.b = b if b is not None else self.default_parameters["b"]

def iterate(self, x: np.ndarray) -> np.ndarray:
"""Calculates next timestep (x(i+1), y(i+1)) with given (x(i),y(i)).
Expand Down Expand Up @@ -780,7 +780,7 @@ def __init__(self, r: float | None = None) -> None:
Args:
r: 'r' parameter of Logistic map.
"""
self.r = r or self.default_parameters["r"]
self.r = r if r is not None else self.default_parameters["r"]

def iterate(self, x: np.ndarray) -> np.ndarray:
"""Calculates next timestep (x(i+1), ) with given (x(i), ).
Expand Down Expand Up @@ -830,8 +830,8 @@ def __init__(self, omega: float | None = None, dt: float | None = None) -> None:
omega: 'omega' parameter of the Simplest Driven Chaotic flow.
dt: Size of time steps.
"""
self.omega = omega or self.default_parameters["omega"]
self.dt = dt or self.default_parameters["dt"]
self.omega = omega if omega is not None else self.default_parameters["omega"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

def flow(self, x: np.ndarray) -> np.ndarray:
"""Calculates (dx/dt, dy/dt, dt/dt) with given (x,y,t) for RK4.
Expand Down Expand Up @@ -878,10 +878,10 @@ def __init__(
omega: 'omega' parameter of Ueda Oscillator.
dt: Size of time steps.
"""
self.b = b or self.default_parameters["b"]
self.A = A or self.default_parameters["A"]
self.omega = omega or self.default_parameters["omega"]
self.dt = dt or self.default_parameters["dt"]
self.b = b if b is not None else self.default_parameters["b"]
self.A = A if A is not None else self.default_parameters["A"]
self.omega = omega if omega is not None else self.default_parameters["omega"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

def flow(self, x: np.ndarray) -> np.ndarray:
"""Calculates (dx/dt, dy/dt, dt/dt) with given (x,y,t) for RK4.
Expand Down Expand Up @@ -943,10 +943,10 @@ def __init__(
if sys_dim is not None:
if sys_dim % 2 != 0: # check if even number.
raise ValueError("Parameter dimension must be an even number.")
self.sys_dim = sys_dim or self.default_parameters["sys_dim"]
self.sys_length = sys_length or self.default_parameters["sys_length"]
self.eps = eps or self.default_parameters["eps"]
self.dt = dt or self.default_parameters["dt"]
self.sys_dim = sys_dim if sys_dim is not None else self.default_parameters["sys_dim"]
self.sys_length = sys_length if sys_length is not None else self.default_parameters["sys_length"]
self.eps = eps if eps is not None else self.default_parameters["eps"]
self.dt = dt if dt is not None else self.default_parameters["dt"]
self.set_default_starting_point()
self._prepare()

Expand Down Expand Up @@ -1062,11 +1062,11 @@ def __init__(
if sys_dim % 2 != 0: # check if even number.
raise ValueError("Parameter dimension must be an even number.")

self.sys_dim = sys_dim or self.default_parameters["sys_dim"]
self.sys_length = sys_length or self.default_parameters["sys_length"]
self.dt = dt or self.default_parameters["dt"]
self.precision = precision or self.default_parameters["precision"]
self.fft_type = fft_type or self.default_parameters["fft_type"]
self.sys_dim = sys_dim if sys_dim is not None else self.default_parameters["sys_dim"]
self.sys_length = sys_length if sys_length is not None else self.default_parameters["sys_length"]
self.dt = dt if dt is not None else self.default_parameters["dt"]
self.precision = precision if precision is not None else self.default_parameters["precision"]
self.fft_type = fft_type if fft_type is not None else self.default_parameters["fft_type"]

self.set_default_starting_point()
self._set_precision_and_fft_type()
Expand Down Expand Up @@ -1227,9 +1227,9 @@ def __init__(self, sys_dim: int | None = None, force: float | None = None, dt: f
force: 'force' parameter in the Lorenz 96 equations.
dt: Size of time steps.
"""
self.sys_dim = sys_dim or int(self.default_parameters["sys_dim"])
self.force = force or self.default_parameters["force"]
self.dt = dt or self.default_parameters["dt"]
self.sys_dim = sys_dim if sys_dim is not None else int(self.default_parameters["sys_dim"])
self.force = force if force is not None else self.default_parameters["force"]
self.dt = dt if dt is not None else self.default_parameters["dt"]

self.default_starting_point = np.sin(np.arange(self.sys_dim))

Expand Down Expand Up @@ -1277,8 +1277,8 @@ def __init__(self, A: np.ndarray | None = None, dt: float | None = None) -> None
dt: Size of time steps.
"""

self.A = A or np.array(self.default_parameters["A"])
self.dt = dt or float(self.default_parameters["dt"])
self.A = A if A is not None else np.array(self.default_parameters["A"])
self.dt = dt if dt is not None else float(self.default_parameters["dt"])

self.sys_dim = self.A.shape[0]
self.default_starting_point = np.ones(self.sys_dim)
Expand Down