Objectives
Objectives convert raw equation streams into stable named scalar losses. They do not combine weighted losses; that policy belongs to a separately selected balancer.
Contracts
The protocols are structural and runtime-checkable. Custom implementations do not need to inherit them.
ObjectiveTerm
[source]
Bases: Protocol
Define one independently configurable group of named objective losses.
loss_names
property
Return names produced by this term.
Returns:
| Type | Description |
|---|---|
Sequence[str]
|
Ordered unique loss names. |
batch_keys
property
Return batch names required by this objective term.
Returns:
| Type | Description |
|---|---|
Sequence[str]
|
Ordered unique batch names. |
losses
[source]
losses(
model_apply: ModelApply,
model_state: Any,
batches: NamedBatches,
) -> Mapping[str, jax.Array]
Evaluate this term's named scalar losses.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model_apply
|
ModelApply
|
Pure explicit-state model application callable. |
required |
model_state
|
Any
|
Differentiable model parameter PyTree. |
required |
batches
|
NamedBatches
|
Fixed-structure named input batches. |
required |
Returns:
| Type | Description |
|---|---|
Mapping[str, Array]
|
Scalar losses keyed by :attr: |
residual_stream
[source]
residual_stream(
name: str,
model_apply: ModelApply,
model_state: Any,
batches: NamedBatches,
) -> jax.Array
Evaluate one raw stream for derivative-based balancing.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
One entry from :attr: |
required |
model_apply
|
ModelApply
|
Pure explicit-state model application callable. |
required |
model_state
|
Any
|
Differentiable model parameter PyTree. |
required |
batches
|
NamedBatches
|
Fixed-structure named residual batches. |
required |
Returns:
| Type | Description |
|---|---|
Array
|
Raw output or equation residual array. |
Objective
[source]
Bases: Protocol
Define the scalar-loss contract consumed by compiled training steps.
loss_names
property
Return the stable names used to align losses and balancer weights.
Returns:
| Type | Description |
|---|---|
Sequence[str]
|
Ordered unique loss names. |
batch_keys
property
Return batch names required by the complete objective.
Returns:
| Type | Description |
|---|---|
Sequence[str]
|
Ordered unique batch names. |
losses
[source]
losses(
model_apply: ModelApply,
model_state: Any,
batches: NamedBatches,
) -> Mapping[str, jax.Array]
Evaluate named scalar losses.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model_apply
|
ModelApply
|
Pure explicit-state model application callable. |
required |
model_state
|
Any
|
Differentiable model parameter PyTree. |
required |
batches
|
NamedBatches
|
Fixed-structure named input batches. |
required |
Returns:
| Type | Description |
|---|---|
Mapping[str, Array]
|
Scalar loss arrays keyed by :attr: |
ResidualObjective
[source]
Bases: Objective, Protocol
Extend an objective with one-at-a-time residual streams for derivative-based balancing.
residual_stream
[source]
residual_stream(
name: str,
model_apply: ModelApply,
model_state: Any,
batches: NamedBatches,
) -> jax.Array
Evaluate one raw residual stream.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
One entry from :attr: |
required |
model_apply
|
ModelApply
|
Pure explicit-state model application callable. |
required |
model_state
|
Any
|
Differentiable model parameter PyTree. |
required |
batches
|
NamedBatches
|
Fixed-structure named residual batches. |
required |
Returns:
| Type | Description |
|---|---|
Array
|
Residual array whose parameter Jacobian defines the stream's empirical NTK diagnostics. |
Residual terms
Each outer residual group becomes one scalar loss. ResidualTerm sums the mean square of every array in the group.
For example, one phase-wrapped loss can combine cosine and sine residuals without a custom objective class.
If names is absent, metadata attached by residual_equation produces names such as pde/continuity.
from functools import partial
import math
from phijax.equations import burgers_1d
from phijax.objectives import ResidualTerm
pde_term = ResidualTerm(
partial(burgers_1d, viscosity_coefficient=0.01 / math.pi),
batch_key="pde",
)
ResidualTerm
[source]
ResidualTerm(
residual_fn: ResidualFunction,
*,
batch_key: str,
names: Sequence[str] | None = None,
ntk_stream: ResidualStream | None = None,
)
Reduce one configured grouped-residual function into named scalar losses.
One outer residual group corresponds to one entry in :attr:loss_names. When explicit names are omitted, the
equation's static local residual names are prefixed with :attr:batch_key. Every array inside a group contributes
its own mean-squared value to that scalar loss. This preserves composite residuals such as phase-wrapped cosine
and sine errors without requiring an equation-specific objective class.
Attributes:
| Name | Type | Description |
|---|---|---|
loss_names |
Stable names aligned with the residual groups returned by |
Initialize a generic residual term.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
residual_fn
|
ResidualFunction
|
Configured equation callable returning one residual group per name. |
required |
batch_key
|
str
|
Key selecting the equation batch from the named training batches. |
required |
names
|
Sequence[str] | None
|
Optional non-empty unique scalar loss names ordered like the equation's residual groups. When
omitted, names are formed as |
None
|
ntk_stream
|
ResidualStream | None
|
Optional stream override. When omitted, the equation metadata selects |
None
|
Raises:
| Type | Description |
|---|---|
TypeError
|
If |
ValueError
|
If names, inferred equation metadata, |
losses
[source]
Evaluate and reduce the configured equation residual groups.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model_apply
|
ModelApply
|
Pure explicit-state model application callable. |
required |
model_state
|
Any
|
Differentiable model parameter PyTree. |
required |
batches
|
NamedBatches
|
Mapping containing :attr: |
required |
Returns:
| Type | Description |
|---|---|
dict[str, Array]
|
Scalar |
residual_stream
[source]
residual_stream(
name: str,
model_apply: ModelApply,
model_state: Any,
batches: NamedBatches,
) -> jax.Array
Return one two-dimensional stream for derivative-based balancing.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
One configured scalar loss name. |
required |
model_apply
|
ModelApply
|
Pure explicit-state model application callable. |
required |
model_state
|
Any
|
Differentiable model parameter PyTree. |
required |
batches
|
NamedBatches
|
Mapping containing :attr: |
required |
Returns:
| Type | Description |
|---|---|
Array
|
Residual matrix with samples on axis zero and flattened residual features on axis one. |
Raises:
| Type | Description |
|---|---|
KeyError
|
If |
Composite objectives
The term mapping establishes stable composition names and preserves declaration order. Loss names must be globally unique across terms.
Use from_equations() when each equation consumes the batch with the same mapping key. Equation metadata supplies
local loss names and the default exact-NTK stream:
from phijax.equations import base_data_fidelity, burgers_1d
from phijax.objectives import CompositeObjective
objective = CompositeObjective.from_equations(
{
"initial": base_data_fidelity,
"boundary": base_data_fidelity,
"pde": burgers_1d,
}
)
Use explicit terms when loss names, batch routing, or streams require overrides:
from phijax.objectives import CompositeObjective
objective = CompositeObjective(
terms={
"initial": initial_term,
"boundary": boundary_term,
"pde": pde_term,
}
)
CompositeObjective
[source]
Compose an ordered mapping of independently configured objective terms.
The term mapping and loss names are resolved on the host before JAX traces a training step. Mapping keys provide stable Hydra override paths, while each value may produce one or more scalar losses and raw residual streams.
Attributes:
| Name | Type | Description |
|---|---|---|
loss_names |
Flattened stable loss-name ordering across every term. |
|
batch_keys |
Required DataModule batch names in first-declaration order. |
Initialize a composite objective.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
terms
|
Mapping[str, ObjectiveTerm]
|
Non-empty ordered objective terms keyed by stable configuration names. |
required |
Raises:
| Type | Description |
|---|---|
TypeError
|
If an entry does not implement :class: |
ValueError
|
If no terms are supplied or loss names are empty or duplicated. |
from_equations
[source]
classmethod
Create one residual term per named equation.
Mapping keys route DataModule batches and prefix equation-local loss names. Equation metadata selects the default derivative-balancing stream.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
equations
|
Mapping[str, ResidualFunction]
|
Non-empty ordered mapping from batch names to decorated residual equations. |
required |
Returns:
| Type | Description |
|---|---|
CompositeObjective
|
Composite objective with inferred names, batch routing, and balancing streams. |
losses
[source]
Evaluate and merge scalar losses from every configured term.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model_apply
|
ModelApply
|
Pure explicit-state model application callable. |
required |
model_state
|
Any
|
Differentiable model parameter PyTree. |
required |
batches
|
NamedBatches
|
Fixed-structure named input batches. |
required |
Returns:
| Type | Description |
|---|---|
dict[str, Array]
|
Scalar losses in :attr: |
residual_stream
[source]
residual_stream(
name: str,
model_apply: ModelApply,
model_state: Any,
batches: NamedBatches,
) -> jax.Array
Dispatch one named residual stream to its owning term.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
One entry from :attr: |
required |
model_apply
|
ModelApply
|
Pure explicit-state model application callable. |
required |
model_state
|
Any
|
Differentiable model parameter PyTree. |
required |
batches
|
NamedBatches
|
Fixed-structure named residual batches. |
required |
Returns:
| Type | Description |
|---|---|
Array
|
Raw output or equation residual array for |
Raises:
| Type | Description |
|---|---|
KeyError
|
If no configured term owns |
residual_streams
[source]
residual_streams(
model_apply: ModelApply,
model_state: Any,
batches: NamedBatches,
) -> dict[str, jax.Array]
Evaluate every configured raw residual stream.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
model_apply
|
ModelApply
|
Pure explicit-state model application callable. |
required |
model_state
|
Any
|
Differentiable model parameter PyTree. |
required |
batches
|
NamedBatches
|
Fixed-structure named residual batches. |
required |
Returns:
| Type | Description |
|---|---|
dict[str, Array]
|
Raw arrays in :attr: |
components
[source]
Stack scalar losses in stable configured order.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
losses
|
Mapping[str, Array]
|
Scalar loss arrays keyed by every name in :attr: |
required |
Returns:
| Type | Description |
|---|---|
Array
|
|
Raises:
| Type | Description |
|---|---|
KeyError
|
If a required loss is absent. |
See Building equations and objectives for a complete custom equation composition.