From c2d050e0ec4fe2dcb62899426f37dae873e331f3 Mon Sep 17 00:00:00 2001 From: Jordan Landers Date: Mon, 13 Jul 2026 12:51:09 -0700 Subject: [PATCH] changed CCModel and CCOutput to Model and Output changes made to core classes, inheritance and docs. --- PACKAGE_SUMMARY.md | 2 +- climatecritters/__init__.py | 2 +- climatecritters/core/__init__.py | 4 +- climatecritters/core/{ccmodel.py => model.py} | 6 +- .../core/{ccoutput.py => output.py} | 2 +- climatecritters/model_critters/box_model.py | 4 +- climatecritters/model_critters/daisyworld.py | 4 +- .../model_critters/damped_spring.py | 4 +- climatecritters/model_critters/ebm.py | 4 +- .../model_critters/enso_recharge.py | 4 +- climatecritters/model_critters/g24.py | 4 +- climatecritters/model_critters/lorenz.py | 6 +- climatecritters/model_critters/melcher25.py | 4 +- climatecritters/model_critters/pendulum.py | 10 +- climatecritters/model_critters/roessler.py | 4 +- .../stocker2003_bipolar_seesaw.py | 6 +- climatecritters/model_critters/stommel.py | 4 +- .../model_critters/two_box_carbon.py | 4 +- .../tests/test_core_pbmodel_time_axis.py | 14 +-- docs/_quarto.yml | 6 +- docs/get-started/concepts.qmd | 10 +- docs/get-started/forcing.qmd | 2 +- docs/get-started/noise.qmd | 4 +- docs/get-started/quickstart.qmd | 4 +- docs/get-started/solvers.qmd | 2 +- docs/index.qmd | 4 +- docs/objects.txt | 108 +++++++++--------- docs/setup.md | 2 +- 28 files changed, 117 insertions(+), 117 deletions(-) rename climatecritters/core/{ccmodel.py => model.py} (99%) rename climatecritters/core/{ccoutput.py => output.py} (99%) diff --git a/PACKAGE_SUMMARY.md b/PACKAGE_SUMMARY.md index 6b464e9..eafc97f 100644 --- a/PACKAGE_SUMMARY.md +++ b/PACKAGE_SUMMARY.md @@ -16,7 +16,7 @@ climatecritters/ ## Core Framework (`core/`) -### `CCModel` ([climatecritters/core/ccmodel.py](climatecritters/core/ccmodel.py)) +### `CCModel` ([climatecritters/core/ccmodel.py](climatecritters/core/model.py)) The abstract base class for all signal models. Subclasses must implement `dydt(t, x)`. Key capabilities: diff --git a/climatecritters/__init__.py b/climatecritters/__init__.py index 9dca809..2733b10 100644 --- a/climatecritters/__init__.py +++ b/climatecritters/__init__.py @@ -1,6 +1,6 @@ from . import utils from .model_critters import * # all concrete models at cc.* -from .core import Forcing, CCModel, CCOutput # top-level abstractions +from .core import Forcing, Model, Output # top-level abstractions from .core import forcing as forcing # builder namespace at cc.forcing.* # from .utils import * diff --git a/climatecritters/core/__init__.py b/climatecritters/core/__init__.py index 6c87bcd..2a0f448 100644 --- a/climatecritters/core/__init__.py +++ b/climatecritters/core/__init__.py @@ -1,3 +1,3 @@ from .forcing import Forcing -from .ccmodel import CCModel -from .ccoutput import CCOutput \ No newline at end of file +from .model import Model +from .output import Output \ No newline at end of file diff --git a/climatecritters/core/ccmodel.py b/climatecritters/core/model.py similarity index 99% rename from climatecritters/core/ccmodel.py rename to climatecritters/core/model.py index 2a61e43..9e7a776 100644 --- a/climatecritters/core/ccmodel.py +++ b/climatecritters/core/model.py @@ -10,7 +10,7 @@ milstein_method, rk4_method, Solution, validate_initial_state as _validate_initial_state, build_state_from_history as _build_state_from_history) -from .ccoutput import CCOutput +from .output import Output from .forcing import ForcingSpec @@ -73,7 +73,7 @@ def _format_value(v): return repr(v) -class CCModel: +class Model: """The overarching model structure for ClimateCritters. CCModel serves as the archetype/parent class for models within the @@ -810,7 +810,7 @@ def integrate(self, t_span=None, y0=None, method='RK45', dt=None, k: v[keep] for k, v in self.diagnostic_variables.items() } - output = CCOutput( + output = Output( time=self.time, state_variables=self.state_variables, state_variable_names=list(self.state_variables_names), diff --git a/climatecritters/core/ccoutput.py b/climatecritters/core/output.py similarity index 99% rename from climatecritters/core/ccoutput.py rename to climatecritters/core/output.py index 613e8b3..e7c5357 100644 --- a/climatecritters/core/ccoutput.py +++ b/climatecritters/core/output.py @@ -12,7 +12,7 @@ import numpy as np -class CCOutput: +class Output: """Container for the results of one call to ``CCModel.integrate()``. ``CCOutput`` carries the full trajectory produced by the solver and diff --git a/climatecritters/model_critters/box_model.py b/climatecritters/model_critters/box_model.py index d5cd245..a6f59bb 100644 --- a/climatecritters/model_critters/box_model.py +++ b/climatecritters/model_critters/box_model.py @@ -46,7 +46,7 @@ import numpy as np -from climatecritters.core.ccmodel import CCModel +from climatecritters.core.model import Model @dataclass(frozen=True) @@ -388,7 +388,7 @@ def make_boxmodel(self, var_name=None, **parameter_overrides): return self.make_model(var_name=var_name, **parameter_overrides) -class GenericBoxModel(CCModel): +class GenericBoxModel(Model): """``CCModel`` subclass produced by :class:`BoxModelSpec`. Users construct this via :meth:`BoxModelSpec.make_boxmodel` rather than diff --git a/climatecritters/model_critters/daisyworld.py b/climatecritters/model_critters/daisyworld.py index 3c677b0..6ee72db 100644 --- a/climatecritters/model_critters/daisyworld.py +++ b/climatecritters/model_critters/daisyworld.py @@ -1,9 +1,9 @@ import numpy as np -from ..core.ccmodel import CCModel +from ..core.model import Model -class Daisyworld(CCModel): +class Daisyworld(Model): """Minimal 0D Daisyworld model with black/white daisy coverage and temperature. The model couples daisy population dynamics to a zero-dimensional energy diff --git a/climatecritters/model_critters/damped_spring.py b/climatecritters/model_critters/damped_spring.py index 6db1e16..a2a82db 100644 --- a/climatecritters/model_critters/damped_spring.py +++ b/climatecritters/model_critters/damped_spring.py @@ -2,10 +2,10 @@ import numpy as np -from ..core.ccmodel import CCModel +from ..core.model import Model -class DampedSpring(CCModel): +class DampedSpring(Model): """Damped (and optionally driven) spring-mass oscillator. Parameters diff --git a/climatecritters/model_critters/ebm.py b/climatecritters/model_critters/ebm.py index 6128473..7ad1076 100644 --- a/climatecritters/model_critters/ebm.py +++ b/climatecritters/model_critters/ebm.py @@ -1,7 +1,7 @@ import numpy as np from ..utils import constants as phys -from ..core.ccmodel import CCModel +from ..core.model import Model __all__ = [ 'EBMBase', 'EBM0D', 'EBM1DLat', @@ -133,7 +133,7 @@ def albedo_func1D(t, state, model, *, a2=0.25, alpha_ice=0.6, alpha_0=0.1, T1=26 # Base class # --------------------------------------------------------------------------- -class EBMBase(CCModel): +class EBMBase(Model): """Shared energy balance physics for all EBM variants. Provides default implementations of ``calc_OLR``, ``calc_albedo``, and diff --git a/climatecritters/model_critters/enso_recharge.py b/climatecritters/model_critters/enso_recharge.py index 91dc9bc..ea13ac6 100644 --- a/climatecritters/model_critters/enso_recharge.py +++ b/climatecritters/model_critters/enso_recharge.py @@ -2,7 +2,7 @@ import numpy as np -from climatecritters.core.ccmodel import CCModel +from climatecritters.core.model import Model def seasonal_forcing(A=0.5, period=6.0): @@ -52,7 +52,7 @@ def _func(t): return _func -class ENSORechargeOscillator(CCModel): +class ENSORechargeOscillator(Model): """Jin-style ENSO recharge oscillator. Couples the eastern Pacific SST anomaly ``T`` to the thermocline depth diff --git a/climatecritters/model_critters/g24.py b/climatecritters/model_critters/g24.py index 20e9ebd..1ee4af1 100644 --- a/climatecritters/model_critters/g24.py +++ b/climatecritters/model_critters/g24.py @@ -1,9 +1,9 @@ import numpy as np -from ..core.ccmodel import CCModel +from ..core.model import Model from scipy.interpolate import CubicSpline -class Model3(CCModel): +class Model3(Model): """Model 3 from Ganopolski (2024) describing glacial cycle evolution under orbital forcing. The model tracks ice volume ``v`` and glacial regime ``k`` (1 = glaciation, diff --git a/climatecritters/model_critters/lorenz.py b/climatecritters/model_critters/lorenz.py index df815f2..981c72d 100644 --- a/climatecritters/model_critters/lorenz.py +++ b/climatecritters/model_critters/lorenz.py @@ -1,9 +1,9 @@ import numpy as np -from ..core.ccmodel import CCModel +from ..core.model import Model -class Lorenz96(CCModel): +class Lorenz96(Model): """Lorenz (1996) single-scale and two-scale atmospheric model. A periodic ring of *n* slow-scale variables with quadratic advection and @@ -180,7 +180,7 @@ def _dydt_two_scale(self, t, x): return np.concatenate([dX, dY]).tolist() -class Lorenz63(CCModel): +class Lorenz63(Model): """Lorenz (1963) system. A minimal three-variable convection model exhibiting sensitive dependence diff --git a/climatecritters/model_critters/melcher25.py b/climatecritters/model_critters/melcher25.py index e1c3651..292ff9f 100644 --- a/climatecritters/model_critters/melcher25.py +++ b/climatecritters/model_critters/melcher25.py @@ -4,7 +4,7 @@ import numpy as np -from ..core.ccmodel import CCModel +from ..core.model import Model __all__ = ['Melcher25', 'classify_bistable_states'] @@ -38,7 +38,7 @@ def _classify_states(db, stadial_threshold, interstadial_threshold): return states -class Melcher25(CCModel): +class Melcher25(Model): """Two-equation bistable Itô SDE for stochastic Dansgaard-Oeschger transitions. Models the meridional buoyancy gradient Δb and buoyancy flux B as a coupled diff --git a/climatecritters/model_critters/pendulum.py b/climatecritters/model_critters/pendulum.py index def6100..c825a9e 100644 --- a/climatecritters/model_critters/pendulum.py +++ b/climatecritters/model_critters/pendulum.py @@ -37,14 +37,14 @@ import numpy as np -from ..core.ccmodel import CCModel +from ..core.model import Model # --------------------------------------------------------------------------- # SimplePendulum # --------------------------------------------------------------------------- -class SimplePendulum(CCModel): +class SimplePendulum(Model): """Nonlinear pendulum with optional linear damping. Parameters @@ -173,7 +173,7 @@ def damping_ratio(self): # DrivenPendulum # --------------------------------------------------------------------------- -class DrivenPendulum(CCModel): +class DrivenPendulum(Model): """Driven damped pendulum in dimensionless form. The standard dimensionless equation (g = L = m = 1): @@ -295,7 +295,7 @@ def driving_period(self): # DoublePendulum # --------------------------------------------------------------------------- -class DoublePendulum(CCModel): +class DoublePendulum(Model): """Double pendulum — a conservative chaotic system. Two point masses connected by rigid, massless rods swing freely from a @@ -528,7 +528,7 @@ def __post_init__(self): # MultiPendulumBeta # --------------------------------------------------------------------------- -class MultiPendulumBeta(CCModel): +class MultiPendulumBeta(Model): """Experimental N-rod chain pendulum solved via a Lagrangian mass matrix. This beta model generalizes the double pendulum to an arbitrary chain of diff --git a/climatecritters/model_critters/roessler.py b/climatecritters/model_critters/roessler.py index 1c3e692..2295495 100644 --- a/climatecritters/model_critters/roessler.py +++ b/climatecritters/model_critters/roessler.py @@ -1,9 +1,9 @@ import numpy as np -from climatecritters.core.ccmodel import CCModel +from climatecritters.core.model import Model -class Roessler(CCModel): +class Roessler(Model): """Roessler chaotic oscillator. A three-variable continuous-time system with a single scroll attractor: diff --git a/climatecritters/model_critters/stocker2003_bipolar_seesaw.py b/climatecritters/model_critters/stocker2003_bipolar_seesaw.py index 22e782b..43c1d84 100644 --- a/climatecritters/model_critters/stocker2003_bipolar_seesaw.py +++ b/climatecritters/model_critters/stocker2003_bipolar_seesaw.py @@ -11,10 +11,10 @@ import numpy as np -from ..core.ccmodel import CCModel +from ..core.model import Model -class Stocker2003BipolarSeesaw(CCModel): +class Stocker2003BipolarSeesaw(Model): """Minimum thermodynamic model for the thermal bipolar seesaw. A single prognostic southern temperature anomaly ``Ts`` relaxes toward @@ -126,7 +126,7 @@ def populate_diagnostics_from_history(self, time, history): self.diagnostic_variables = {"Tn": Tn_vals} -class Stocker2003ExtendedSeaIceSeesaw(CCModel): +class Stocker2003ExtendedSeaIceSeesaw(Model): """Extended Stocker-style model with reservoir, Southern Ocean, sea-ice, and Antarctic states. The model integrates four coupled ODEs with prescribed northern forcing diff --git a/climatecritters/model_critters/stommel.py b/climatecritters/model_critters/stommel.py index 5fc9c3a..93d82dd 100644 --- a/climatecritters/model_critters/stommel.py +++ b/climatecritters/model_critters/stommel.py @@ -2,10 +2,10 @@ import numpy as np -from ..core.ccmodel import CCModel +from ..core.model import Model -class Stommel(CCModel): +class Stommel(Model): """Minimal two-box Stommel thermohaline circulation model. State variables are the pole-to-equator temperature contrast ``T`` and diff --git a/climatecritters/model_critters/two_box_carbon.py b/climatecritters/model_critters/two_box_carbon.py index 6b2c1b3..3149653 100644 --- a/climatecritters/model_critters/two_box_carbon.py +++ b/climatecritters/model_critters/two_box_carbon.py @@ -2,10 +2,10 @@ import numpy as np -from climatecritters.core.ccmodel import CCModel +from climatecritters.core.model import Model -class TwoBoxCarbon(CCModel): +class TwoBoxCarbon(Model): """Two-box carbon exchange model with explicit box volumes. State variables ``A`` and ``S`` are carbon inventories (mass units) in the diff --git a/climatecritters/tests/test_core_pbmodel_time_axis.py b/climatecritters/tests/test_core_pbmodel_time_axis.py index a833e43..5987d00 100644 --- a/climatecritters/tests/test_core_pbmodel_time_axis.py +++ b/climatecritters/tests/test_core_pbmodel_time_axis.py @@ -11,7 +11,7 @@ import pytest import climatecritters as cc -from climatecritters.core.ccmodel import CCModel +from climatecritters.core.model import Model from climatecritters.model_critters import lorenz @@ -37,7 +37,7 @@ def test_reframe_time_axis_euler_t0(self): assert np.allclose(output.time, t_eval) -class _PostHistoryModel(CCModel): +class _PostHistoryModel(Model): def __init__(self): super().__init__(variable_name='post_history', state_variables=['x'], diagnostic_variables=['x_squared']) @@ -61,7 +61,7 @@ def test_post_history_model_integrates_t0(self): assert np.isclose(model.state_variables['x'][0], 1.0) -class _SDEPostHistoryModel(CCModel): +class _SDEPostHistoryModel(Model): """uses_post_history=True model with additive noise, for si/forcing tests.""" uses_post_history = True @@ -79,7 +79,7 @@ def sde_noise(self, t, x): return np.array([0.1]) -class _SDENoPostHistoryModel(CCModel): +class _SDENoPostHistoryModel(Model): """uses_post_history=False model, to exercise the si guard.""" uses_post_history = False @@ -96,7 +96,7 @@ def sde_noise(self, t, x): return np.array([0.1]) -class _SDENoNoiseOverrideModel(CCModel): +class _SDENoNoiseOverrideModel(Model): """uses_post_history=True model that does NOT override sde_noise, to confirm the base-class stub recovers deterministic integration.""" @@ -221,7 +221,7 @@ def test_pre_step_forcing_applied_t3(self, method): ) -class _ParamContractModel(CCModel): +class _ParamContractModel(Model): def __init__(self, coeff=1.0): super().__init__( variable_name='param_contract', @@ -257,7 +257,7 @@ def test_attribute_assignment_syncs_param_values_t0(self): assert model.param_values['coeff'](0.0) == 3.0 -class _FunctionSwapModel(CCModel): +class _FunctionSwapModel(Model): def __init__(self): super().__init__(variable_name='function_swap', state_variables=['x']) diff --git a/docs/_quarto.yml b/docs/_quarto.yml index 788cd6b..8ef3b8f 100644 --- a/docs/_quarto.yml +++ b/docs/_quarto.yml @@ -98,7 +98,7 @@ website: - tutorials/index.qmd - section: "Getting started" contents: - - text: "CCModel Basics" + - text: "Model Basics" href: notebooks/base_classes/ccmodel_basics.ipynb - text: "Forcing Basics" href: notebooks/base_classes/forcing.ipynb @@ -184,8 +184,8 @@ quartodoc: desc: | Base classes underlying all models. contents: - - core.CCModel - - core.CCOutput + - core.Model + - core.Output - core.Forcing - subtitle: Forcing diff --git a/docs/get-started/concepts.qmd b/docs/get-started/concepts.qmd index 9e4123c..a6396ae 100644 --- a/docs/get-started/concepts.qmd +++ b/docs/get-started/concepts.qmd @@ -3,11 +3,11 @@ title: Core Concepts sidebar: get-started --- -This page explains the three building blocks that every ClimateCritters workflow uses: `CCModel`, `Forcing`, and `CCOutput`. +This page explains the three building blocks that every ClimateCritters workflow uses: `Model`, `Forcing`, and `Output`. -## CCModel +## cc.Model -`CCModel` is the abstract base class for all signal models. You never instantiate it directly — instead you use one of the concrete subclasses (e.g. `Lorenz63`, `EBM`, `Stommel`). +`Model` is the abstract base class for all signal models. You never instantiate it directly — instead you use one of the concrete subclasses (e.g. `Lorenz63`, `EBM`, `Stommel`). Every subclass shares the same integration interface: @@ -77,9 +77,9 @@ See the [Forcing](forcing.qmd) page for the full API. --- -## CCOutput +## cc.Output -`integrate()` always returns a `CCOutput` object. It holds: +`integrate()` always returns a `Output` object. It holds: | Attribute | Contents | |---|---| diff --git a/docs/get-started/forcing.qmd b/docs/get-started/forcing.qmd index 55855a2..4f9219b 100644 --- a/docs/get-started/forcing.qmd +++ b/docs/get-started/forcing.qmd @@ -29,7 +29,7 @@ model.register_forcing('S', f, attachment_style='additive', timing='pre') --- -## `Forcing` — the signal object +## `cc.Forcing` — the signal object `Forcing` wraps any time-varying signal and exposes a uniform `get_forcing(t)` interface. There are four ways to create one. diff --git a/docs/get-started/noise.qmd b/docs/get-started/noise.qmd index ffaf164..a8112f2 100644 --- a/docs/get-started/noise.qmd +++ b/docs/get-started/noise.qmd @@ -45,9 +45,9 @@ To use any stochastic solver, attach an `sde_noise` method to your model. It rec ```python import numpy as np -from climatecritters.core.ccmodel import CCModel +from climatecritters.core.ccmodel import Model -class MyModel(CCModel): +class MyModel(Model): def sde_noise(self, t, y): return np.array([0.05, 0.01]) # per-variable diffusion scale ``` diff --git a/docs/get-started/quickstart.qmd b/docs/get-started/quickstart.qmd index 3efd3eb..7eadf52 100644 --- a/docs/get-started/quickstart.qmd +++ b/docs/get-started/quickstart.qmd @@ -19,7 +19,7 @@ model = Lorenz63(forcing=forcing, sigma=10.0, rho=28.0, beta=8/3) ## 2. Integrate -Call `integrate()` with an integration window, initial conditions, and a solver method. It returns a `CCOutput` object containing the full trajectory. +Call `integrate()` with an integration window, initial conditions, and a solver method. It returns an `Output` object containing the full trajectory. ```python output = model.integrate( @@ -68,6 +68,6 @@ output_tv = model_tv.integrate(t_span=(0, 50), y0=[1, 1, 1], method='RK45') ## Next steps -- [Core concepts](concepts.qmd) — understand `CCModel`, `Forcing`, and `CCOutput` in depth +- [Core concepts](concepts.qmd) — understand `Model`, `Forcing`, and `Output` in depth - [Tutorials](../tutorials/index.qmd) — worked examples for climate and dynamical systems models - [Reference](../api/index.qmd) — full API documentation diff --git a/docs/get-started/solvers.qmd b/docs/get-started/solvers.qmd index 8a0d4df..cdd0f4b 100644 --- a/docs/get-started/solvers.qmd +++ b/docs/get-started/solvers.qmd @@ -3,7 +3,7 @@ title: Solvers sidebar: get-started --- -`CCModel.integrate()` supports several solvers, selectable via the `method` argument. The choice affects step-size control, numerical accuracy, and whether stochastic forcing is possible. +`cc.Model.integrate()` supports several solvers, selectable via the `method` argument. The choice affects step-size control, numerical accuracy, and whether stochastic forcing is possible. ## Adaptive solvers (SciPy) diff --git a/docs/index.qmd b/docs/index.qmd index 00a1e16..857632c 100644 --- a/docs/index.qmd +++ b/docs/index.qmd @@ -7,12 +7,12 @@ sidebar: ClimateCritters `ClimateCritters` is a Python package for experimenting with minimal climate models and well-known dynamical systems. It provides a unified interface for integrating climate models, chaotic systems, and custom box models, with built-in support -for time-varying parameters, stochastic forcing, taphonimc alterations and export to +for time-varying parameters, stochastic forcing, taphonomic alterations and export to [Pyleoclim](https://pyleoclim-util.readthedocs.io/) for analysis. ## Features -- **Unified model API** — every model shares the same `integrate()` → `CCOutput` workflow +- **Unified model API** — every model shares the same `integrate()` → `Output` workflow - **Flexible forcing** — constants, callables, or composable `Forcing` sequences (Hold, Ramp, Harmonic) - **Time-varying parameters** — any parameter can be swapped for a callable or `Forcing` object at runtime - **Multiple solvers** — Euler, RK4, RK45, Euler-Maruyama (SDE), and scipy adaptive methods diff --git a/docs/objects.txt b/docs/objects.txt index 76305c6..21e24ac 100644 --- a/docs/objects.txt +++ b/docs/objects.txt @@ -2,50 +2,50 @@ # Project: climatecritters # Version: 0.0.9999 # The remainder of this file is compressed using zlib. -climatecritters.core.CCModel.clear_forcings py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.clear_forcings - -climatecritters.core.ccmodel.CCModel.clear_forcings py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.clear_forcings climatecritters.core.CCModel.clear_forcings -climatecritters.core.CCModel.doc py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.doc - -climatecritters.core.ccmodel.CCModel.doc py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.doc climatecritters.core.CCModel.doc -climatecritters.core.CCModel.dydt py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.dydt - -climatecritters.core.ccmodel.CCModel.dydt py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.dydt climatecritters.core.CCModel.dydt -climatecritters.core.CCModel.get_forcings py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.get_forcings - -climatecritters.core.ccmodel.CCModel.get_forcings py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.get_forcings climatecritters.core.CCModel.get_forcings -climatecritters.core.CCModel.get_param_value py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.get_param_value - -climatecritters.core.ccmodel.CCModel.get_param_value py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.get_param_value climatecritters.core.CCModel.get_param_value -climatecritters.core.CCModel.get_param_vector py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.get_param_vector - -climatecritters.core.ccmodel.CCModel.get_param_vector py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.get_param_vector climatecritters.core.CCModel.get_param_vector -climatecritters.core.CCModel.integrate py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.integrate - -climatecritters.core.ccmodel.CCModel.integrate py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.integrate climatecritters.core.CCModel.integrate -climatecritters.core.CCModel.list py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.list - -climatecritters.core.ccmodel.CCModel.list py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.list climatecritters.core.CCModel.list -climatecritters.core.CCModel.populate_diagnostics_from_history py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.populate_diagnostics_from_history - -climatecritters.core.ccmodel.CCModel.populate_diagnostics_from_history py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.populate_diagnostics_from_history climatecritters.core.CCModel.populate_diagnostics_from_history -climatecritters.core.CCModel.post_integrate py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.post_integrate - -climatecritters.core.ccmodel.CCModel.post_integrate py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.post_integrate climatecritters.core.CCModel.post_integrate -climatecritters.core.CCModel.register_forcing py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.register_forcing - -climatecritters.core.ccmodel.CCModel.register_forcing py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.register_forcing climatecritters.core.CCModel.register_forcing -climatecritters.core.CCModel.sde_noise py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.sde_noise - -climatecritters.core.ccmodel.CCModel.sde_noise py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.sde_noise climatecritters.core.CCModel.sde_noise -climatecritters.core.CCModel.set_function py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.set_function - -climatecritters.core.ccmodel.CCModel.set_function py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.set_function climatecritters.core.CCModel.set_function -climatecritters.core.CCModel.set_param_value py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.set_param_value - -climatecritters.core.ccmodel.CCModel.set_param_value py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.set_param_value climatecritters.core.CCModel.set_param_value -climatecritters.core.CCModel.validate_initial_state py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.validate_initial_state - -climatecritters.core.ccmodel.CCModel.validate_initial_state py:function 1 api/core.CCModel.html#climatecritters.core.CCModel.validate_initial_state climatecritters.core.CCModel.validate_initial_state -climatecritters.core.CCModel py:class 1 api/core.CCModel.html#climatecritters.core.CCModel - -climatecritters.core.ccmodel.CCModel py:class 1 api/core.CCModel.html#climatecritters.core.CCModel climatecritters.core.CCModel -climatecritters.core.CCOutput.add_noise py:function 1 api/core.CCOutput.html#climatecritters.core.CCOutput.add_noise - -climatecritters.core.ccoutput.CCOutput.add_noise py:function 1 api/core.CCOutput.html#climatecritters.core.CCOutput.add_noise climatecritters.core.CCOutput.add_noise -climatecritters.core.CCOutput.get_series_by_name py:function 1 api/core.CCOutput.html#climatecritters.core.CCOutput.get_series_by_name - -climatecritters.core.ccoutput.CCOutput.get_series_by_name py:function 1 api/core.CCOutput.html#climatecritters.core.CCOutput.get_series_by_name climatecritters.core.CCOutput.get_series_by_name -climatecritters.core.CCOutput.reframe_time_axis py:function 1 api/core.CCOutput.html#climatecritters.core.CCOutput.reframe_time_axis - -climatecritters.core.ccoutput.CCOutput.reframe_time_axis py:function 1 api/core.CCOutput.html#climatecritters.core.CCOutput.reframe_time_axis climatecritters.core.CCOutput.reframe_time_axis -climatecritters.core.CCOutput.remove_noise py:function 1 api/core.CCOutput.html#climatecritters.core.CCOutput.remove_noise - -climatecritters.core.ccoutput.CCOutput.remove_noise py:function 1 api/core.CCOutput.html#climatecritters.core.CCOutput.remove_noise climatecritters.core.CCOutput.remove_noise -climatecritters.core.CCOutput.to_pyleo py:function 1 api/core.CCOutput.html#climatecritters.core.CCOutput.to_pyleo - -climatecritters.core.ccoutput.CCOutput.to_pyleo py:function 1 api/core.CCOutput.html#climatecritters.core.CCOutput.to_pyleo climatecritters.core.CCOutput.to_pyleo -climatecritters.core.CCOutput py:class 1 api/core.CCOutput.html#climatecritters.core.CCOutput - -climatecritters.core.ccoutput.CCOutput py:class 1 api/core.CCOutput.html#climatecritters.core.CCOutput climatecritters.core.CCOutput +climatecritters.core.Model.clear_forcings py:function 1 api/core.Model.html#climatecritters.core.Model.clear_forcings - +climatecritters.core.model.Model.clear_forcings py:function 1 api/core.Model.html#climatecritters.core.Model.clear_forcings climatecritters.core.Model.clear_forcings +climatecritters.core.Model.doc py:function 1 api/core.Model.html#climatecritters.core.Model.doc - +climatecritters.core.model.Model.doc py:function 1 api/core.Model.html#climatecritters.core.Model.doc climatecritters.core.Model.doc +climatecritters.core.Model.dydt py:function 1 api/core.Model.html#climatecritters.core.Model.dydt - +climatecritters.core.model.Model.dydt py:function 1 api/core.Model.html#climatecritters.core.Model.dydt climatecritters.core.Model.dydt +climatecritters.core.Model.get_forcings py:function 1 api/core.Model.html#climatecritters.core.Model.get_forcings - +climatecritters.core.model.Model.get_forcings py:function 1 api/core.Model.html#climatecritters.core.Model.get_forcings climatecritters.core.Model.get_forcings +climatecritters.core.Model.get_param_value py:function 1 api/core.Model.html#climatecritters.core.Model.get_param_value - +climatecritters.core.model.Model.get_param_value py:function 1 api/core.Model.html#climatecritters.core.Model.get_param_value climatecritters.core.Model.get_param_value +climatecritters.core.Model.get_param_vector py:function 1 api/core.Model.html#climatecritters.core.Model.get_param_vector - +climatecritters.core.model.Model.get_param_vector py:function 1 api/core.Model.html#climatecritters.core.Model.get_param_vector climatecritters.core.Model.get_param_vector +climatecritters.core.Model.integrate py:function 1 api/core.Model.html#climatecritters.core.Model.integrate - +climatecritters.core.model.Model.integrate py:function 1 api/core.Model.html#climatecritters.core.Model.integrate climatecritters.core.Model.integrate +climatecritters.core.Model.list py:function 1 api/core.Model.html#climatecritters.core.Model.list - +climatecritters.core.model.Model.list py:function 1 api/core.Model.html#climatecritters.core.Model.list climatecritters.core.Model.list +climatecritters.core.Model.populate_diagnostics_from_history py:function 1 api/core.Model.html#climatecritters.core.Model.populate_diagnostics_from_history - +climatecritters.core.model.Model.populate_diagnostics_from_history py:function 1 api/core.Model.html#climatecritters.core.Model.populate_diagnostics_from_history climatecritters.core.Model.populate_diagnostics_from_history +climatecritters.core.Model.post_integrate py:function 1 api/core.Model.html#climatecritters.core.Model.post_integrate - +climatecritters.core.model.Model.post_integrate py:function 1 api/core.Model.html#climatecritters.core.Model.post_integrate climatecritters.core.Model.post_integrate +climatecritters.core.Model.register_forcing py:function 1 api/core.Model.html#climatecritters.core.Model.register_forcing - +climatecritters.core.model.Model.register_forcing py:function 1 api/core.Model.html#climatecritters.core.Model.register_forcing climatecritters.core.Model.register_forcing +climatecritters.core.Model.sde_noise py:function 1 api/core.Model.html#climatecritters.core.Model.sde_noise - +climatecritters.core.model.Model.sde_noise py:function 1 api/core.Model.html#climatecritters.core.Model.sde_noise climatecritters.core.Model.sde_noise +climatecritters.core.Model.set_function py:function 1 api/core.Model.html#climatecritters.core.Model.set_function - +climatecritters.core.model.Model.set_function py:function 1 api/core.Model.html#climatecritters.core.Model.set_function climatecritters.core.Model.set_function +climatecritters.core.Model.set_param_value py:function 1 api/core.Model.html#climatecritters.core.Model.set_param_value - +climatecritters.core.model.Model.set_param_value py:function 1 api/core.Model.html#climatecritters.core.Model.set_param_value climatecritters.core.Model.set_param_value +climatecritters.core.Model.validate_initial_state py:function 1 api/core.Model.html#climatecritters.core.Model.validate_initial_state - +climatecritters.core.model.Model.validate_initial_state py:function 1 api/core.Model.html#climatecritters.core.Model.validate_initial_state climatecritters.core.Model.validate_initial_state +climatecritters.core.Model py:class 1 api/core.Model.html#climatecritters.core.Model - +climatecritters.core.model.Model py:class 1 api/core.Model.html#climatecritters.core.Model climatecritters.core.Model +climatecritters.core.Output.add_noise py:function 1 api/core.Output.html#climatecritters.core.Output.add_noise - +climatecritters.core.output.Output.add_noise py:function 1 api/core.Output.html#climatecritters.core.Output.add_noise climatecritters.core.Output.add_noise +climatecritters.core.Output.get_series_by_name py:function 1 api/core.Output.html#climatecritters.core.Output.get_series_by_name - +climatecritters.core.output.Output.get_series_by_name py:function 1 api/core.Output.html#climatecritters.core.Output.get_series_by_name climatecritters.core.Output.get_series_by_name +climatecritters.core.Output.reframe_time_axis py:function 1 api/core.Output.html#climatecritters.core.Output.reframe_time_axis - +climatecritters.core.output.Output.reframe_time_axis py:function 1 api/core.Output.html#climatecritters.core.Output.reframe_time_axis climatecritters.core.Output.reframe_time_axis +climatecritters.core.Output.remove_noise py:function 1 api/core.Output.html#climatecritters.core.Output.remove_noise - +climatecritters.core.output.Output.remove_noise py:function 1 api/core.Output.html#climatecritters.core.Output.remove_noise climatecritters.core.Output.remove_noise +climatecritters.core.Output.to_pyleo py:function 1 api/core.Output.html#climatecritters.core.Output.to_pyleo - +climatecritters.core.output.Output.to_pyleo py:function 1 api/core.Output.html#climatecritters.core.Output.to_pyleo climatecritters.core.Output.to_pyleo +climatecritters.core.Output py:class 1 api/core.Output.html#climatecritters.core.Output - +climatecritters.core.output.Output py:class 1 api/core.Output.html#climatecritters.core.Output climatecritters.core.Output climatecritters.core.Forcing.from_csv py:function 1 api/core.Forcing.html#climatecritters.core.Forcing.from_csv - climatecritters.core.forcing.Forcing.from_csv py:function 1 api/core.Forcing.html#climatecritters.core.Forcing.from_csv climatecritters.core.Forcing.from_csv climatecritters.core.Forcing.from_sequence py:function 1 api/core.Forcing.html#climatecritters.core.Forcing.from_sequence - @@ -183,16 +183,16 @@ climatecritters.Stocker2003ExtendedSeaIceSeesaw py:class 1 api/Stocker2003Extend climatecritters.model_critters.stocker2003_bipolar_seesaw.Stocker2003ExtendedSeaIceSeesaw py:class 1 api/Stocker2003ExtendedSeaIceSeesaw.html#climatecritters.Stocker2003ExtendedSeaIceSeesaw climatecritters.Stocker2003ExtendedSeaIceSeesaw climatecritters.Stommel py:class 1 api/Stommel.html#climatecritters.Stommel - climatecritters.model_critters.stommel.Stommel py:class 1 api/Stommel.html#climatecritters.Stommel climatecritters.Stommel -climatecritters.BistableMelcherModel.compute_stability_thresholds py:function 1 api/BistableMelcherModel.html#climatecritters.BistableMelcherModel.compute_stability_thresholds - -climatecritters.model_critters.bistable_melcher.BistableMelcherModel.compute_stability_thresholds py:function 1 api/BistableMelcherModel.html#climatecritters.BistableMelcherModel.compute_stability_thresholds climatecritters.BistableMelcherModel.compute_stability_thresholds -climatecritters.BistableMelcherModel.dydt py:function 1 api/BistableMelcherModel.html#climatecritters.BistableMelcherModel.dydt - -climatecritters.model_critters.bistable_melcher.BistableMelcherModel.dydt py:function 1 api/BistableMelcherModel.html#climatecritters.BistableMelcherModel.dydt climatecritters.BistableMelcherModel.dydt -climatecritters.BistableMelcherModel.populate_diagnostics_from_history py:function 1 api/BistableMelcherModel.html#climatecritters.BistableMelcherModel.populate_diagnostics_from_history - -climatecritters.model_critters.bistable_melcher.BistableMelcherModel.populate_diagnostics_from_history py:function 1 api/BistableMelcherModel.html#climatecritters.BistableMelcherModel.populate_diagnostics_from_history climatecritters.BistableMelcherModel.populate_diagnostics_from_history -climatecritters.BistableMelcherModel.sde_noise py:function 1 api/BistableMelcherModel.html#climatecritters.BistableMelcherModel.sde_noise - -climatecritters.model_critters.bistable_melcher.BistableMelcherModel.sde_noise py:function 1 api/BistableMelcherModel.html#climatecritters.BistableMelcherModel.sde_noise climatecritters.BistableMelcherModel.sde_noise -climatecritters.BistableMelcherModel py:class 1 api/BistableMelcherModel.html#climatecritters.BistableMelcherModel - -climatecritters.model_critters.bistable_melcher.BistableMelcherModel py:class 1 api/BistableMelcherModel.html#climatecritters.BistableMelcherModel climatecritters.BistableMelcherModel +climatecritters.Melcher25.compute_stability_thresholds py:function 1 api/Melcher25.html#climatecritters.Melcher25.compute_stability_thresholds - +climatecritters.model_critters.melcher25.Melcher25.compute_stability_thresholds py:function 1 api/Melcher25.html#climatecritters.Melcher25.compute_stability_thresholds climatecritters.Melcher25.compute_stability_thresholds +climatecritters.Melcher25.dydt py:function 1 api/Melcher25.html#climatecritters.Melcher25.dydt - +climatecritters.model_critters.melcher25.Melcher25.dydt py:function 1 api/Melcher25.html#climatecritters.Melcher25.dydt climatecritters.Melcher25.dydt +climatecritters.Melcher25.populate_diagnostics_from_history py:function 1 api/Melcher25.html#climatecritters.Melcher25.populate_diagnostics_from_history - +climatecritters.model_critters.melcher25.Melcher25.populate_diagnostics_from_history py:function 1 api/Melcher25.html#climatecritters.Melcher25.populate_diagnostics_from_history climatecritters.Melcher25.populate_diagnostics_from_history +climatecritters.Melcher25.sde_noise py:function 1 api/Melcher25.html#climatecritters.Melcher25.sde_noise - +climatecritters.model_critters.melcher25.Melcher25.sde_noise py:function 1 api/Melcher25.html#climatecritters.Melcher25.sde_noise climatecritters.Melcher25.sde_noise +climatecritters.Melcher25 py:class 1 api/Melcher25.html#climatecritters.Melcher25 - +climatecritters.model_critters.melcher25.Melcher25 py:class 1 api/Melcher25.html#climatecritters.Melcher25 climatecritters.Melcher25 climatecritters.utils.noise.from_series py:function 1 api/utils.noise.from_series.html#climatecritters.utils.noise.from_series - climatecritters.utils.noise.from_param py:function 1 api/utils.noise.from_param.html#climatecritters.utils.noise.from_param - climatecritters.utils.resample.downsample py:function 1 api/utils.resample.downsample.html#climatecritters.utils.resample.downsample - diff --git a/docs/setup.md b/docs/setup.md index f0ca502..9df6106 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -21,7 +21,7 @@ quartodoc build quarto render ``` -This will produce a _site folder and you can inspect the built documentation by opening `index.html` in a browser. +This will produce a _site folder, and you can inspect the built documentation by opening `index.html` in a browser. To regenerate the figures: