Skip to content

Poincare

  • Example
    import numpy as np
    from poincare import *
    
    class LotkaVolterra(System):
        prey: Variable = initial(default=10)
        predator: Variable = initial(default=1)
    
        prey_eq = prey.derive() << prey * (1 - predator)
        predator_eq = predator.derive() << predator * (prey - 1)
    
    sim = Simulator(LotkaVolterra)
    sim.solve(save_at=np.linspace(0, 100, 1000)).plot()
    
Lokta-Volterra predator-prey model implemeneted in Poincare.

Poincare is a python library for declaring and simulating dynamical systems. It's designed around:

  • Modularity: poincare creates a layer to separate the actual declaration and simulation of models, allowing to easily switch between methods and compile to different backends (including NumPy, Numba and JAX).
  • Composability: models are composable, allowing for the combination of smaller systems to create larger ones; complex models can be broken up into more manageable parts.
  • Reproducibility: it intends to be a centralized place for all information concerning models, making it easy to extract data (equations, parameters, etc...) and encouraging consistency between analytical formulations and numerical implementations.
  • Utility: poincare includes a number of utilities to make model analysis more convenient, including searching for steady states, bistability or limit cycles across a range of parameter values.

Installation

It can be installed from PyPI:

pip install -U poincare

or conda-forge:

conda install -c conda-forge poincare

Documentation

Documentation is structured as a series of interactive notebooks which cover basic and advanced topics.

Basics

  • Getting started with Poincare: the essentials necessary to simulate models.
  • Composition: how to combine smaller models to create more complex ones, one of Poincare's key features.
  • Simulators: more on how configure the simulation, including switching methods and backends.

Topic guides