Skip to content

Commit 84b7cc6

Browse files
Add option to suppress verbose output
To only show differences
1 parent ce26277 commit 84b7cc6

1 file changed

Lines changed: 41 additions & 29 deletions

File tree

parcels/_datasets/utils.py

Lines changed: 41 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -83,32 +83,34 @@ def _dicts_equal(d1, d2):
8383
return True
8484

8585

86-
def compare_datasets(ds1, ds2, ds1_name="Dataset 1", ds2_name="Dataset 2"):
86+
def compare_datasets(ds1, ds2, ds1_name="Dataset 1", ds2_name="Dataset 2", verbose=True):
8787
print(f"Comparing {ds1_name} and {ds2_name}\n")
8888

89-
# Compare dataset attributes
90-
print("Dataset Attributes Comparison:")
91-
if ds1.attrs == ds2.attrs:
92-
print(" Dataset attributes are identical.")
93-
else:
94-
print(" Dataset attributes differ.")
95-
for attr_name in set(ds1.attrs.keys()) | set(ds2.attrs.keys()):
96-
if attr_name not in ds1.attrs:
97-
print(f" Attribute '{attr_name}' only in {ds2_name}")
98-
elif attr_name not in ds2.attrs:
99-
print(f" Attribute '{attr_name}' only in {ds1_name}")
100-
elif ds1.attrs[attr_name] != ds2.attrs[attr_name]:
101-
print(f" Attribute '{attr_name}' differs:")
102-
print(f" {ds1_name}: {ds1.attrs[attr_name]}")
103-
print(f" {ds2_name}: {ds2.attrs[attr_name]}")
104-
print("-" * 30)
89+
if verbose:
90+
print("Dataset Attributes Comparison:")
91+
if ds1.attrs == ds2.attrs:
92+
print(" Dataset attributes are identical.")
93+
else:
94+
print(" Dataset attributes differ.")
95+
for attr_name in set(ds1.attrs.keys()) | set(ds2.attrs.keys()):
96+
if attr_name not in ds1.attrs:
97+
print(f" Attribute '{attr_name}' only in {ds2_name}")
98+
elif attr_name not in ds2.attrs:
99+
print(f" Attribute '{attr_name}' only in {ds1_name}")
100+
elif ds1.attrs[attr_name] != ds2.attrs[attr_name]:
101+
print(f" Attribute '{attr_name}' differs:")
102+
print(f" {ds1_name}: {ds1.attrs[attr_name]}")
103+
print(f" {ds2_name}: {ds2.attrs[attr_name]}")
104+
print("-" * 30)
105105

106106
# Compare dimensions
107-
print("Dimensions Comparison:")
107+
if verbose:
108+
print("Dimensions Comparison:")
108109
ds1_dims = set(ds1.dims)
109110
ds2_dims = set(ds2.dims)
110111
if ds1_dims == ds2_dims:
111-
print(" Dimension names are identical.")
112+
if verbose:
113+
print(" Dimension names are identical.")
112114
else:
113115
print(" Dimension names differ:")
114116
print(f" {ds1_name} dims: {sorted(list(ds1_dims))}")
@@ -117,9 +119,11 @@ def compare_datasets(ds1, ds2, ds1_name="Dataset 1", ds2_name="Dataset 2"):
117119
# For common dimensions, compare order (implicit by comparing coordinate values for sortedness)
118120
# and size (though size is parameterized and expected to be different)
119121
for dim_name in ds1_dims.intersection(ds2_dims):
120-
print(f" Dimension '{dim_name}':")
122+
if verbose:
123+
print(f" Dimension '{dim_name}':")
121124
# Sizes will differ due to DIM_SIZE, so we don't strictly compare them.
122-
print(f" {ds1_name} size: {ds1.dims[dim_name]}, {ds2_name} size: {ds2.dims[dim_name]}")
125+
if verbose:
126+
print(f" {ds1_name} size: {ds1.dims[dim_name]}, {ds2_name} size: {ds2.dims[dim_name]}")
123127
# Check if coordinates associated with dimensions are sorted (increasing)
124128
if dim_name in ds1.coords and dim_name in ds2.coords:
125129
check_val = np.timedelta64(0, "s") if isinstance(ds1[dim_name].values[0], np.datetime64) else 0.0
@@ -130,34 +134,40 @@ def compare_datasets(ds1, ds2, ds1_name="Dataset 1", ds2_name="Dataset 2"):
130134
np.all(np.diff(ds2[dim_name].values) >= check_val) if len(ds2[dim_name].values) > 1 else True
131135
)
132136
if is_ds1_sorted == is_ds2_sorted:
133-
print(f" Order for '{dim_name}' is consistent (both sorted: {is_ds1_sorted})")
137+
if verbose:
138+
print(f" Order for '{dim_name}' is consistent (both sorted: {is_ds1_sorted})")
134139
else:
135140
print(
136141
f" Order for '{dim_name}' differs: {ds1_name} sorted: {is_ds1_sorted}, {ds2_name} sorted: {is_ds2_sorted}"
137142
)
138-
print("-" * 30)
143+
if verbose:
144+
print("-" * 30)
139145

140146
# Compare variables (name, attributes, dimensions used)
141-
print("Variables Comparison:")
147+
if verbose:
148+
print("Variables Comparison:")
142149
ds1_vars = set(ds1.variables.keys())
143150
ds2_vars = set(ds2.variables.keys())
144151

145152
if ds1_vars == ds2_vars:
146-
print(" Variable names are identical.")
153+
if verbose:
154+
print(" Variable names are identical.")
147155
else:
148156
print(" Variable names differ:")
149157
print(f" {ds1_name} vars: {sorted(list(ds1_vars - ds2_vars))}")
150158
print(f" {ds2_name} vars: {sorted(list(ds2_vars - ds1_vars))}")
151159
print(f" Common vars: {sorted(list(ds1_vars.intersection(ds2_vars)))}")
152160

153161
for var_name in ds1_vars.intersection(ds2_vars):
154-
print(f" Variable '{var_name}':")
162+
if verbose:
163+
print(f" Variable '{var_name}':")
155164
var1 = ds1[var_name]
156165
var2 = ds2[var_name]
157166

158167
# Compare attributes
159168
if _dicts_equal(var1.attrs, var2.attrs):
160-
print(" Attributes are identical.")
169+
if verbose:
170+
print(" Attributes are identical.")
161171
else:
162172
print(" Attributes differ.")
163173
for attr_name in set(var1.attrs.keys()) | set(var2.attrs.keys()):
@@ -172,9 +182,11 @@ def compare_datasets(ds1, ds2, ds1_name="Dataset 1", ds2_name="Dataset 2"):
172182

173183
# Compare dimensions used by the variable
174184
if var1.dims == var2.dims:
175-
print(f" Dimensions used are identical: {var1.dims}")
185+
if verbose:
186+
print(f" Dimensions used are identical: {var1.dims}")
176187
else:
177188
print(" Dimensions used differ:")
178189
print(f" {ds1_name}: {var1.dims}")
179190
print(f" {ds2_name}: {var2.dims}")
180-
print("=" * 30 + " End of Comparison " + "=" * 30)
191+
if verbose:
192+
print("=" * 30 + " End of Comparison " + "=" * 30)

0 commit comments

Comments
 (0)