systems.base.utils.stochastic.NoiseCharacterizer
systems.base.utils.stochastic.NoiseCharacterizer(
diffusion_expr,
state_vars,
control_vars,
time_var=None,
)Analyzes symbolic diffusion expressions to determine noise structure.
This is PURE ANALYSIS using only SymPy - no code generation, no numerical evaluation, no backend dependencies.
The analysis results enable: - Automatic selection of efficient specialized solvers - Validation of noise type claims - Optimization opportunities identification
Examples
>>> # Additive noise (constant)
>>> diffusion = sp.Matrix([[0.1], [0.2]])
>>> char = NoiseCharacterizer(diffusion, [x1, x2], [u])
>>> results = char.analyze()
>>> print(results.noise_type)
NoiseType.ADDITIVE
>>>
>>> # Multiplicative noise (state-dependent, non-diagonal)
>>> diffusion = sp.Matrix([[0.1 * x1, 0.05 * x2]])
>>> char = NoiseCharacterizer(diffusion, [x1, x2], [u])
>>> results = char.analyze()
>>> print(results.noise_type)
NoiseType.MULTIPLICATIVE
>>> print(results.is_multiplicative)
TrueAttributes
| Name | Description |
|---|---|
| characteristics | Get noise characteristics (cached after first analysis). |
Methods
| Name | Description |
|---|---|
| analyze | Analyze diffusion expression structure. |
| from_dict | Create NoiseCharacterizer from configuration dictionary. |
| get_optimization_hints | Provide optimization hints based on noise structure. |
| validate_noise_type_claim | Validate that a claimed noise_type matches actual structure. |
analyze
systems.base.utils.stochastic.NoiseCharacterizer.analyze()Analyze diffusion expression structure.
Returns
| Name | Type | Description |
|---|---|---|
| NoiseCharacteristics | Complete analysis of noise structure |
Examples
>>> char = NoiseCharacterizer(diffusion, states, controls)
>>> results = char.analyze()
>>> if results.is_additive:
... print("Use specialized additive-noise solver!")from_dict
systems.base.utils.stochastic.NoiseCharacterizer.from_dict(config)Create NoiseCharacterizer from configuration dictionary.
This is a convenience factory method for creating characterizers from dictionaries, such as test fixtures or saved configurations.
Parameters
| Name | Type | Description | Default |
|---|---|---|---|
| config | Dict | Configuration dictionary with keys: - “diffusion” or “diffusion_expr”: Symbolic diffusion matrix - “state_vars”: List of state symbols - “control_vars”: List of control symbols - “time_var” (optional): Time symbol | required |
Returns
| Name | Type | Description |
|---|---|---|
| NoiseCharacterizer | Initialized characterizer |
Examples
>>> config = {
... "diffusion": sp.Matrix([[0.1*x]]),
... "state_vars": [x],
... "control_vars": [u]
... }
>>> char = NoiseCharacterizer.from_dict(config)
>>> result = char.analyze()With test fixtures:
>>> @pytest.fixture
... def my_noise():
... return {"diffusion": ..., "state_vars": ..., "control_vars": ...}
>>>
>>> def test_something(my_noise):
... char = NoiseCharacterizer.from_dict(my_noise)
... # or equivalently:
... char = NoiseCharacterizer(**my_noise) # Now works!get_optimization_hints
systems.base.utils.stochastic.NoiseCharacterizer.get_optimization_hints()Provide optimization hints based on noise structure.
Returns
| Name | Type | Description |
|---|---|---|
| Dict[str, any] | Optimization opportunities and recommendations |
Examples
>>> hints = char.get_optimization_hints()
>>> if hints['can_precompute']:
... print("Can precompute constant noise!")validate_noise_type_claim
systems.base.utils.stochastic.NoiseCharacterizer.validate_noise_type_claim(
claimed_type,
)Validate that a claimed noise_type matches actual structure.
Parameters
| Name | Type | Description | Default |
|---|---|---|---|
| claimed_type | str | User’s claim about noise type (‘additive’, ‘diagonal’, etc.) | required |
Returns
| Name | Type | Description |
|---|---|---|
| bool | True if claim matches analysis |
Raises
| Name | Type | Description |
|---|---|---|
| ValueError | If claimed type contradicts analysis |
Examples
>>> char = NoiseCharacterizer(diffusion, states, controls)
>>> char.validate_noise_type_claim('additive') # Validates