eulerpi.examples.simple_models module

class Exponential(central_param: ndarray = array([1., 1.]), param_limits: ndarray = array([[1., 2.], [1., 2.]]), name: str | None = None, **kwargs)[source]

Bases: JaxModel

bw()

Jacobian of forward with respect to positional argument(s) 0. Takes the same arguments as forward but returns the jacobian of the output with respect to the arguments at positions 0.

classmethod forward(param)[source]

Executed the forward pass of the model to obtain data from a parameter.

Parameters:

param (np.ndarray) – The parameter for which the data should be generated.

Returns:

The data generated from the parameter.

Return type:

np.ndarray

Examples:

import numpy as np
from eulerpi.examples.heat import Heat
from eulerpi.core.model import JaxModel
from jax import vmap

# instantiate the heat model
model = Heat()

# define a 3D example parameter for the heat model
example_param = np.array([1.4, 1.6, 0.5])

# the forward simulation is achieved by using the forward method of the model
sim_result = model.forward(example_param)

# in a more realistic scenario, we would like to perform the forward pass on multiple parameters at once
multiple_params = np.array([[1.5, 1.5, 0.5],
                            [1.4, 1.4, 0.6],
                            [1.6, 1.6, 0.4],
                            model.central_param,
                            [1.5, 1.4, 0.4]])

# try to use jax vmap to perform the forward pass on multiple parameters at once
if isinstance(model, JaxModel):
    multiple_sim_results = vmap(model.forward, in_axes=0)(multiple_params)

# if the model is not a jax model, we can use numpy vectorize to perform the forward pass
else:
    multiple_sim_results = np.vectorize(model.forward, signature="(n)->(m)")(multiple_params)
fw()
vj()
Parameters:

x (jnp.ndarray) – The input to the function

Returns:

The value and the jacobian of the passed function using reverse mode AD.

Return type:

Tuple[jnp.ndarray, jnp.ndarray]

CENTRAL_PARAM = array([1., 1.])
PARAM_LIMITS = array([[1., 2.],        [1., 2.]])
data_dim: int | None = 2
param_dim: int | None = 2
class Linear(central_param: ndarray = array([0.5, 0.5]), param_limits: ndarray = array([[-0.2, 1.2], [-0.2, 1.2]]), name: str | None = None, **kwargs)[source]

Bases: JaxModel, ArtificialModelInterface

bw()

Jacobian of forward with respect to positional argument(s) 0. Takes the same arguments as forward but returns the jacobian of the output with respect to the arguments at positions 0.

classmethod forward(param)[source]

Executed the forward pass of the model to obtain data from a parameter.

Parameters:

param (np.ndarray) – The parameter for which the data should be generated.

Returns:

The data generated from the parameter.

Return type:

np.ndarray

Examples:

import numpy as np
from eulerpi.examples.heat import Heat
from eulerpi.core.model import JaxModel
from jax import vmap

# instantiate the heat model
model = Heat()

# define a 3D example parameter for the heat model
example_param = np.array([1.4, 1.6, 0.5])

# the forward simulation is achieved by using the forward method of the model
sim_result = model.forward(example_param)

# in a more realistic scenario, we would like to perform the forward pass on multiple parameters at once
multiple_params = np.array([[1.5, 1.5, 0.5],
                            [1.4, 1.4, 0.6],
                            [1.6, 1.6, 0.4],
                            model.central_param,
                            [1.5, 1.4, 0.4]])

# try to use jax vmap to perform the forward pass on multiple parameters at once
if isinstance(model, JaxModel):
    multiple_sim_results = vmap(model.forward, in_axes=0)(multiple_params)

# if the model is not a jax model, we can use numpy vectorize to perform the forward pass
else:
    multiple_sim_results = np.vectorize(model.forward, signature="(n)->(m)")(multiple_params)
fw()
generate_artificial_params(num_samples: int)[source]

This method must be overwritten an return an numpy array of num_samples parameters.

Parameters:

num_samples (int) – The number of parameters to generate.

Returns:

The generated parameters.

Return type:

np.ndarray

Raises:

NotImplementedError – If the method is not overwritten in a subclass.

vj()
Parameters:

x (jnp.ndarray) – The input to the function

Returns:

The value and the jacobian of the passed function using reverse mode AD.

Return type:

Tuple[jnp.ndarray, jnp.ndarray]

CENTRAL_PARAM = array([0.5, 0.5])
PARAM_LIMITS = array([[-0.2,  1.2],        [-0.2,  1.2]])
data_dim: int | None = 2
param_dim: int | None = 2
class LinearODE(central_param: ndarray = array([1.5, 1.5]), param_limits: ndarray = array([[-2., 4.], [-2., 4.]]), name: str | None = None, **kwargs)[source]

Bases: JaxModel, ArtificialModelInterface

bw()

Jacobian of forward with respect to positional argument(s) 0. Takes the same arguments as forward but returns the jacobian of the output with respect to the arguments at positions 0.

classmethod forward(param)[source]

Executed the forward pass of the model to obtain data from a parameter.

Parameters:

param (np.ndarray) – The parameter for which the data should be generated.

Returns:

The data generated from the parameter.

Return type:

np.ndarray

Examples:

import numpy as np
from eulerpi.examples.heat import Heat
from eulerpi.core.model import JaxModel
from jax import vmap

# instantiate the heat model
model = Heat()

# define a 3D example parameter for the heat model
example_param = np.array([1.4, 1.6, 0.5])

# the forward simulation is achieved by using the forward method of the model
sim_result = model.forward(example_param)

# in a more realistic scenario, we would like to perform the forward pass on multiple parameters at once
multiple_params = np.array([[1.5, 1.5, 0.5],
                            [1.4, 1.4, 0.6],
                            [1.6, 1.6, 0.4],
                            model.central_param,
                            [1.5, 1.4, 0.4]])

# try to use jax vmap to perform the forward pass on multiple parameters at once
if isinstance(model, JaxModel):
    multiple_sim_results = vmap(model.forward, in_axes=0)(multiple_params)

# if the model is not a jax model, we can use numpy vectorize to perform the forward pass
else:
    multiple_sim_results = np.vectorize(model.forward, signature="(n)->(m)")(multiple_params)
fw()
generate_artificial_params(num_samples: int)[source]

This method must be overwritten an return an numpy array of num_samples parameters.

Parameters:

num_samples (int) – The number of parameters to generate.

Returns:

The generated parameters.

Return type:

np.ndarray

Raises:

NotImplementedError – If the method is not overwritten in a subclass.

vj()
Parameters:

x (jnp.ndarray) – The input to the function

Returns:

The value and the jacobian of the passed function using reverse mode AD.

Return type:

Tuple[jnp.ndarray, jnp.ndarray]

CENTRAL_PARAM = array([1.5, 1.5])
PARAM_LIMITS = array([[-2.,  4.],        [-2.,  4.]])
TRUE_PARAM_LIMITS = array([[1., 2.],        [1., 2.]])
data_dim: int | None = 2
param_dim: int | None = 2