Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 49 additions & 40 deletions lib/iris/tests/unit/concatenate/test__CubeSignature.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,76 +6,85 @@

# import iris tests first so that some things can be initialised
# before importing anything else.
import iris.tests as tests # isort:skip
from dataclasses import dataclass

from cf_units import Unit
import numpy as np
import pytest

from iris._concatenate import _CubeSignature as CubeSignature
from iris.coords import DimCoord
from iris.cube import Cube
from iris.util import new_axis


class Test__coordinate_dim_metadata_equality(tests.IrisTest):
def setUp(self):
class Test__coordinate_dim_metadata_equality:
@pytest.fixture
def sample_data(self):
# Return a standard set of test items, wrapped in a data object
@dataclass
class SampleData:
series_inc: CubeSignature = None
series_inc_cube: Cube = None
series_dec: CubeSignature = None
series_dec_cube: Cube = None
scalar_cube: Cube = None

data = SampleData()

nt = 10
data = np.arange(nt, dtype=np.float32)
cube = Cube(data, standard_name="air_temperature", units="K")
cube_data = np.arange(nt, dtype=np.float32)
cube = Cube(cube_data, standard_name="air_temperature", units="K")
# Temporal coordinate.
t_units = Unit("hours since 1970-01-01 00:00:00", calendar="standard")
t_coord = DimCoord(points=np.arange(nt), standard_name="time", units=t_units)
cube.add_dim_coord(t_coord, 0)

# Increasing 1D time-series cube.
self.series_inc_cube = cube
self.series_inc = CubeSignature(self.series_inc_cube)
data.series_inc_cube = cube
data.series_inc = CubeSignature(data.series_inc_cube)

# Decreasing 1D time-series cube.
self.series_dec_cube = self.series_inc_cube.copy()
self.series_dec_cube.remove_coord("time")
data.series_dec_cube = data.series_inc_cube.copy()
data.series_dec_cube.remove_coord("time")
t_tmp = DimCoord(
points=t_coord.points[::-1], standard_name="time", units=t_units
)
self.series_dec_cube.add_dim_coord(t_tmp, 0)
self.series_dec = CubeSignature(self.series_dec_cube)
data.series_dec_cube.add_dim_coord(t_tmp, 0)
data.series_dec = CubeSignature(data.series_dec_cube)

# Scalar 0D time-series cube with scalar time coordinate.
cube = Cube(0, standard_name="air_temperature", units="K")
cube.add_aux_coord(DimCoord(points=nt, standard_name="time", units=t_units))
self.scalar_cube = cube
data.scalar_cube = cube
return data

def test_scalar_non_common_axis(self):
scalar = CubeSignature(self.scalar_cube)
self.assertNotEqual(self.series_inc.dim_metadata, scalar.dim_metadata)
self.assertNotEqual(self.series_dec.dim_metadata, scalar.dim_metadata)
def test_scalar_non_common_axis(self, sample_data):
scalar = CubeSignature(sample_data.scalar_cube)
assert sample_data.series_inc.dim_metadata != scalar.dim_metadata
assert sample_data.series_dec.dim_metadata != scalar.dim_metadata

def test_1d_single_value_common_axis(self):
def test_1d_single_value_common_axis(self, sample_data):
# Manually promote scalar time cube to be a 1d cube.
single = CubeSignature(new_axis(self.scalar_cube, "time"))
self.assertEqual(self.series_inc.dim_metadata, single.dim_metadata)
self.assertEqual(self.series_dec.dim_metadata, single.dim_metadata)
single = CubeSignature(new_axis(sample_data.scalar_cube, "time"))
assert sample_data.series_inc.dim_metadata == single.dim_metadata
assert sample_data.series_dec.dim_metadata == single.dim_metadata

def test_increasing_common_axis(self):
series_inc = self.series_inc
series_dec = self.series_dec
self.assertEqual(series_inc.dim_metadata, series_inc.dim_metadata)
self.assertNotEqual(series_inc.dim_metadata, series_dec.dim_metadata)
def test_increasing_common_axis(self, sample_data):
series_inc = sample_data.series_inc
series_dec = sample_data.series_dec
assert series_inc.dim_metadata == series_inc.dim_metadata
assert series_inc.dim_metadata != series_dec.dim_metadata

def test_decreasing_common_axis(self):
series_inc = self.series_inc
series_dec = self.series_dec
self.assertNotEqual(series_dec.dim_metadata, series_inc.dim_metadata)
self.assertEqual(series_dec.dim_metadata, series_dec.dim_metadata)
def test_decreasing_common_axis(self, sample_data):
series_inc = sample_data.series_inc
series_dec = sample_data.series_dec
assert series_dec.dim_metadata != series_inc.dim_metadata
assert series_dec.dim_metadata == series_dec.dim_metadata

def test_circular(self):
series_inc = self.series_inc
circular_cube = self.series_inc_cube.copy()
def test_circular(self, sample_data):
series_inc = sample_data.series_inc
circular_cube = sample_data.series_inc_cube.copy()
circular_cube.coord("time").circular = True
circular = CubeSignature(circular_cube)
self.assertNotEqual(circular.dim_metadata, series_inc.dim_metadata)
self.assertEqual(circular.dim_metadata, circular.dim_metadata)


if __name__ == "__main__":
tests.main()
assert circular.dim_metadata != series_inc.dim_metadata
assert circular.dim_metadata == circular.dim_metadata