@@ -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