Skip to content

laser.measles.components.utils

laser.measles.components.utils

Component utilities for the laser-measles package.

This module provides utilities for creating and managing components in the laser-measles package. The main feature is a decorator that makes it easier to create components with parameters.

laser.measles.components.utils.component(cls=None, **default_params)

Decorator that adds a create factory to a component class.

Use this at set parameters time to bake default parameter values into a component class. The decorated class gains a create(model, **overrides) static method that merges defaults with caller-supplied overrides.

Can be applied with or without arguments:

Parameters:

Name Type Description Default
cls type[T] | None

The component class to decorate. When None, the decorator returns a wrapper that accepts keyword defaults.

None
**default_params

Default parameter values passed through to the component constructor.

{}

Returns:

Type Description

The decorated class (with create attached), or a decorator function if cls is None.

Example:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
```python
@component
class MyProcess(BaseComponent):
    def __init__(self, model, verbose=False, beta=0.3):
        super().__init__(model, verbose)
        self.beta = beta

# With defaults baked in:
@component(beta=0.8)
class HighBetaProcess(BaseComponent): ...

# Use the factory:
model.add_component(HighBetaProcess.create(model, beta=0.9))
```

laser.measles.components.utils.create_component(component_class, params=None)

Wrap a component class and its parameters into a single callable.

Use this at set parameters time when a component requires a custom Pydantic parameter object. The returned factory is callable with the same (model, verbose) signature that BaseLaserModel.components expects, so it can be placed directly in the component list.

Parameters:

Name Type Description Default
component_class type[T]

The component class to instantiate.

required
params type[B] | None

A Pydantic parameter object (or None for defaults).

None

Returns:

Type Description
Callable[[Any, Any], T]

A callable that creates the component when invoked by the model.

Example:

1
2
3
4
5
6
7
8
```python
from laser.measles import create_component
from laser.measles.compartmental.components import InfectionProcess, InfectionParams

model.components = [
    create_component(InfectionProcess, InfectionParams(beta=0.8)),
]
```