Skip to content

Commit 3942968

Browse files
committed
Replaced _CubeFilterCollection.merged() with combined(); replace uses in load;load_cube/load_cubes.
1 parent e52e20b commit 3942968

File tree

2 files changed

+20
-10
lines changed

2 files changed

+20
-10
lines changed

lib/iris/__init__.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -405,15 +405,15 @@ def _current_effective_policy():
405405
return policy
406406

407407

408-
def _apply_loading_policy(cubes, policy=None):
408+
def _combine_with_loading_policy(cubes, policy=None, merge_require_unique=False):
409409
if not policy:
410410
policy = _current_effective_policy()
411411
while True:
412412
n_original_cubes = len(cubes)
413413
if policy.use_concatenate and policy.cat_before_merge:
414414
cubes = cubes.concatenate()
415415
if policy.use_merge:
416-
cubes = cubes.merge()
416+
cubes = cubes.merge(unique=merge_require_unique)
417417
if policy.use_concatenate and not policy.cat_before_merge:
418418
cubes = cubes.concatenate()
419419
n_new_cubes = len(cubes)
@@ -447,8 +447,7 @@ def load(uris, constraints=None, callback=None, policy=None):
447447
were random.
448448
449449
"""
450-
cubes = _load_collection(uris, constraints, callback).cubes()
451-
cubes = _apply_loading_policy(cubes)
450+
cubes = _load_collection(uris, constraints, callback).combined().cubes()
452451
return cubes
453452

454453

@@ -477,9 +476,11 @@ def load_cube(uris, constraint=None, callback=None):
477476
if len(constraints) != 1:
478477
raise ValueError("only a single constraint is allowed")
479478

480-
cubes = _load_collection(uris, constraints, callback).cubes()
479+
cubes = _load_collection(uris, constraints, callback).combined(unique=False)
481480

482481
try:
482+
# NOTE: this call currently retained to preserve the legacy exceptions
483+
# TODO: replace with simple testing to duplicate the relevant error cases
483484
cube = cubes.merge_cube()
484485
except iris.exceptions.MergeError as e:
485486
raise iris.exceptions.ConstraintMismatchError(str(e))
@@ -514,7 +515,7 @@ def load_cubes(uris, constraints=None, callback=None):
514515
515516
"""
516517
# Merge the incoming cubes
517-
collection = _load_collection(uris, constraints, callback).merged()
518+
collection = _load_collection(uris, constraints, callback).combined()
518519

519520
# Make sure we have exactly one merged cube per constraint
520521
bad_pairs = [pair for pair in collection.pairs if len(pair) != 1]

lib/iris/cube.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ class _CubeFilter:
6464
"""A constraint, paired with a list of cubes matching that constraint."""
6565

6666
def __init__(self, constraint, cubes=None):
67+
from iris.cube import CubeList
68+
6769
self.constraint = constraint
6870
if cubes is None:
6971
cubes = CubeList()
@@ -78,7 +80,7 @@ def add(self, cube):
7880
if sub_cube is not None:
7981
self.cubes.append(sub_cube)
8082

81-
def merged(self, unique=False):
83+
def combined(self, unique=False):
8284
"""Return a new :class:`_CubeFilter` by merging the list of cubes.
8385
8486
Parameters
@@ -88,7 +90,12 @@ def merged(self, unique=False):
8890
duplicate cubes are detected.
8991
9092
"""
91-
return _CubeFilter(self.constraint, self.cubes.merge(unique))
93+
from iris import _combine_with_loading_policy
94+
95+
return _CubeFilter(
96+
self.constraint,
97+
_combine_with_loading_policy(self.cubes, merge_require_unique=unique),
98+
)
9299

93100

94101
class _CubeFilterCollection:
@@ -114,12 +121,14 @@ def add_cube(self, cube):
114121

115122
def cubes(self):
116123
"""Return all the cubes in this collection in a single :class:`CubeList`."""
124+
from iris.cube import CubeList
125+
117126
result = CubeList()
118127
for pair in self.pairs:
119128
result.extend(pair.cubes)
120129
return result
121130

122-
def merged(self, unique=False):
131+
def combined(self, unique=False):
123132
"""Return a new :class:`_CubeFilterCollection` by merging all the cube lists of this collection.
124133
125134
Parameters
@@ -129,7 +138,7 @@ def merged(self, unique=False):
129138
duplicate cubes are detected.
130139
131140
"""
132-
return _CubeFilterCollection([pair.merged(unique) for pair in self.pairs])
141+
return _CubeFilterCollection([pair.combined(unique) for pair in self.pairs])
133142

134143

135144
class CubeList(list):

0 commit comments

Comments
 (0)