fouriax.OpticalModule#

class OpticalModule(layers, sensor=None)#

Bases: OpticalLayer

Sequential container for optical layers and monitor checkpoints.

Parameters:
__init__(layers, sensor=None)#
Parameters:
Return type:

None

Methods

__init__(layers[, sensor])

forward(field)

Apply this layer's optical transformation to field.

measure(field, *[, key])

observe(field)

parameters()

Return trainable or configurable layer parameters.

trace(field[, include_input])

validate_for(field)

Check that field is compatible with this layer.

Attributes

layers: tuple[OpticalLayer | Monitor, ...]#
sensor: Sensor | None = None#
forward(field)#

Apply this layer’s optical transformation to field.

Parameters:

field (Field) – Input optical field to transform.

Returns:

Transformed field. Subclasses should preserve batch axes, wavelength axes, and metadata unless the layer explicitly changes them.

Return type:

Field

measure(field, *, key=None)#
Parameters:
  • field (Field)

  • key (Array | None)

Return type:

Array

observe(field)#
Parameters:

field (Field)

Return type:

tuple[Field, tuple[Array, …]]

trace(field, include_input=True)#
Parameters:
  • field (Field)

  • include_input (bool)

Return type:

list[Field]

parameters()#

Return trainable or configurable layer parameters.

Returns an empty dict by default. Subclasses override this to expose arrays that should be updated during optimisation.

Return type:

dict[str, Array]