diff --git a/optika/materials/_layers.py b/optika/materials/_layers.py index 661253a..f68d382 100644 --- a/optika/materials/_layers.py +++ b/optika/materials/_layers.py @@ -39,6 +39,13 @@ def thickness(self) -> u.Quantity | na.AbstractScalar: def _thickness_plot(self) -> u.Quantity | na.AbstractScalar: """The thickness of the layer when plotted.""" + @property + @abc.abstractmethod + def layer_sequence(self) -> LayerSequence: + """ + This object interpreted as an instance of :class:`LayerSequence`. + """ + @abc.abstractmethod def transfer( self, @@ -180,6 +187,10 @@ def n( else: return self._chemical.n(wavelength) + @property + def layer_sequence(self) -> LayerSequence: + return LayerSequence([self]) + def transfer( self, wavelength: u.Quantity | na.AbstractScalar, @@ -382,6 +393,10 @@ def thickness(self) -> u.Quantity | na.AbstractScalar: def _thickness_plot(self) -> u.Quantity | na.AbstractScalar: return self.thickness + @property + def layer_sequence(self) -> LayerSequence: + return self + def transfer( self, wavelength: u.Quantity | na.AbstractScalar, @@ -493,6 +508,10 @@ def thickness(self) -> u.Quantity | na.AbstractScalar: def _thickness_plot(self) -> u.Quantity | na.AbstractScalar: return LayerSequence(self.layers).thickness + @property + def layer_sequence(self) -> LayerSequence: + return LayerSequence(self.layers * self.num_periods) + def transfer( self, wavelength: u.Quantity | na.AbstractScalar, diff --git a/optika/materials/_tests/test_layers.py b/optika/materials/_tests/test_layers.py index 69946ba..ae2a8e2 100644 --- a/optika/materials/_tests/test_layers.py +++ b/optika/materials/_tests/test_layers.py @@ -18,6 +18,15 @@ def test_thickness( result = a.thickness assert np.all(result >= 0 * u.nm) + def test_layer_sequence( + self, + a: optika.materials.AbstractLayer, + ): + result = a.layer_sequence + assert isinstance(result, optika.materials.LayerSequence) + for layer in result.layers: + assert isinstance(layer, optika.materials.AbstractLayer) + @pytest.mark.parametrize( argnames="wavelength", argvalues=[