diff --git a/named_arrays/_vectors/tests/test_vectors_temporal_spectral_positional.py b/named_arrays/_vectors/tests/test_vectors_temporal_spectral_positional.py index cccfa39..77680ea 100644 --- a/named_arrays/_vectors/tests/test_vectors_temporal_spectral_positional.py +++ b/named_arrays/_vectors/tests/test_vectors_temporal_spectral_positional.py @@ -202,6 +202,41 @@ class TestTemporalSpectralPositionalVectorLinearSpace( pass +@pytest.mark.parametrize( + argnames="array", + argvalues=[ + na.ExplicitTemporalSpectralWcsPositionalVectorArray( + time=10 * u.s, + wavelength=500 * u.nm, + crval=na.PositionalVectorArray( + position=na.Cartesian2dVectorArray(1, 1) * u.deg, + ), + crpix=na.CartesianNdVectorArray( + dict( + x=2, + y=3, + ) + ), + cdelt=na.PositionalVectorArray( + position=na.Cartesian2dVectorArray(1, 1) * u.arcsec, + ), + pc=na.PositionalMatrixArray( + position=na.Cartesian2dMatrixArray( + x=na.CartesianNdVectorArray(dict(x=1, y=0)), + y=na.CartesianNdVectorArray(dict(x=0, y=1)), + ), + ), + shape_wcs=dict(x=_num_x, y=_num_y), + ), + ], +) +class TestExplicitTemporalSpectralWcsPositionalVectorArray( + AbstractTestAbstractImplicitTemporalSpectralPositionalVectorArray, + test_vectors.AbstractTestAbstractWcsVector, +): + pass + + @pytest.mark.parametrize( argnames="array", argvalues=[ diff --git a/named_arrays/_vectors/vectors_temporal_spectral_positional.py b/named_arrays/_vectors/vectors_temporal_spectral_positional.py index 4a2c6e2..a92fda9 100644 --- a/named_arrays/_vectors/vectors_temporal_spectral_positional.py +++ b/named_arrays/_vectors/vectors_temporal_spectral_positional.py @@ -11,6 +11,7 @@ 'AbstractParameterizedTemporalSpectralPositionalVectorArray', 'AbstractTemporalSpectralPositionalVectorSpace', 'TemporalSpectralPositionalVectorLinearSpace', + 'ExplicitTemporalSpectralWcsPositionalVectorArray', 'ExplicitTemporalWcsSpectralPositionalVectorArray', ] @@ -94,6 +95,27 @@ class TemporalSpectralPositionalVectorLinearSpace( pass +@dataclasses.dataclass(eq=False, repr=False) +class ExplicitTemporalSpectralWcsPositionalVectorArray( + AbstractImplicitTemporalSpectralPositionalVectorArray, + na.AbstractWcsVector, +): + time: na.AbstractScalar = dataclasses.MISSING + wavelength: na.AbstractScalar = dataclasses.MISSING + crval: na.AbstractSpectralPositionalVectorArray = dataclasses.MISSING + crpix: na.AbstractCartesianNdVectorArray = dataclasses.MISSING + cdelt: na.AbstractSpectralPositionalVectorArray = dataclasses.MISSING + pc: na.AbstractSpectralPositionalMatrixArray = dataclasses.MISSING + shape_wcs: dict[str, int] = dataclasses.MISSING + + @property + def _components_explicit(self) -> dict[str, na.ArrayLike]: + return dict( + time=self.time, + wavelength=self.wavelength, + ) + + @dataclasses.dataclass(eq=False, repr=False) class ExplicitTemporalWcsSpectralPositionalVectorArray( AbstractImplicitTemporalSpectralPositionalVectorArray,