@@ -86,31 +86,32 @@ def _dicts_equal(d1, d2):
8686def 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- 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 )
89+ def verbose_print (* args , ** kwargs ):
90+ if verbose :
91+ print (* args , ** kwargs )
92+
93+ verbose_print ("Dataset Attributes Comparison:" )
94+ if ds1 .attrs == ds2 .attrs :
95+ verbose_print (" Dataset attributes are identical." )
96+ else :
97+ print (" Dataset attributes differ." )
98+ for attr_name in set (ds1 .attrs .keys ()) | set (ds2 .attrs .keys ()):
99+ if attr_name not in ds1 .attrs :
100+ print (f" Attribute '{ attr_name } ' only in { ds2_name } " )
101+ elif attr_name not in ds2 .attrs :
102+ print (f" Attribute '{ attr_name } ' only in { ds1_name } " )
103+ elif ds1 .attrs [attr_name ] != ds2 .attrs [attr_name ]:
104+ print (f" Attribute '{ attr_name } ' differs:" )
105+ print (f" { ds1_name } : { ds1 .attrs [attr_name ]} " )
106+ print (f" { ds2_name } : { ds2 .attrs [attr_name ]} " )
107+ verbose_print ("-" * 30 )
105108
106109 # Compare dimensions
107- if verbose :
108- print ("Dimensions Comparison:" )
110+ verbose_print ("Dimensions Comparison:" )
109111 ds1_dims = set (ds1 .dims )
110112 ds2_dims = set (ds2 .dims )
111113 if ds1_dims == ds2_dims :
112- if verbose :
113- print (" Dimension names are identical." )
114+ verbose_print (" Dimension names are identical." )
114115 else :
115116 print (" Dimension names differ:" )
116117 print (f" { ds1_name } dims: { sorted (list (ds1_dims ))} " )
@@ -119,11 +120,9 @@ def compare_datasets(ds1, ds2, ds1_name="Dataset 1", ds2_name="Dataset 2", verbo
119120 # For common dimensions, compare order (implicit by comparing coordinate values for sortedness)
120121 # and size (though size is parameterized and expected to be different)
121122 for dim_name in ds1_dims .intersection (ds2_dims ):
122- if verbose :
123- print (f" Dimension '{ dim_name } ':" )
123+ verbose_print (f" Dimension '{ dim_name } ':" )
124124 # Sizes will differ due to DIM_SIZE, so we don't strictly compare them.
125- if verbose :
126- print (f" { ds1_name } size: { ds1 .dims [dim_name ]} , { ds2_name } size: { ds2 .dims [dim_name ]} " )
125+ verbose_print (f" { ds1_name } size: { ds1 .dims [dim_name ]} , { ds2_name } size: { ds2 .dims [dim_name ]} " )
127126 # Check if coordinates associated with dimensions are sorted (increasing)
128127 if dim_name in ds1 .coords and dim_name in ds2 .coords :
129128 check_val = (
@@ -136,40 +135,34 @@ def compare_datasets(ds1, ds2, ds1_name="Dataset 1", ds2_name="Dataset 2", verbo
136135 np .all (np .diff (ds2 [dim_name ].values ) >= check_val ) if len (ds2 [dim_name ].values ) > 1 else True
137136 )
138137 if is_ds1_sorted == is_ds2_sorted :
139- if verbose :
140- print (f" Order for '{ dim_name } ' is consistent (both sorted: { is_ds1_sorted } )" )
138+ verbose_print (f" Order for '{ dim_name } ' is consistent (both sorted: { is_ds1_sorted } )" )
141139 else :
142140 print (
143141 f" Order for '{ dim_name } ' differs: { ds1_name } sorted: { is_ds1_sorted } , { ds2_name } sorted: { is_ds2_sorted } "
144142 )
145- if verbose :
146- print ("-" * 30 )
143+ verbose_print ("-" * 30 )
147144
148145 # Compare variables (name, attributes, dimensions used)
149- if verbose :
150- print ("Variables Comparison:" )
146+ verbose_print ("Variables Comparison:" )
151147 ds1_vars = set (ds1 .variables .keys ())
152148 ds2_vars = set (ds2 .variables .keys ())
153149
154150 if ds1_vars == ds2_vars :
155- if verbose :
156- print (" Variable names are identical." )
151+ verbose_print (" Variable names are identical." )
157152 else :
158153 print (" Variable names differ:" )
159154 print (f" { ds1_name } vars: { sorted (list (ds1_vars - ds2_vars ))} " )
160155 print (f" { ds2_name } vars: { sorted (list (ds2_vars - ds1_vars ))} " )
161156 print (f" Common vars: { sorted (list (ds1_vars .intersection (ds2_vars )))} " )
162157
163158 for var_name in ds1_vars .intersection (ds2_vars ):
164- if verbose :
165- print (f" Variable '{ var_name } ':" )
159+ verbose_print (f" Variable '{ var_name } ':" )
166160 var1 = ds1 [var_name ]
167161 var2 = ds2 [var_name ]
168162
169163 # Compare attributes
170164 if _dicts_equal (var1 .attrs , var2 .attrs ):
171- if verbose :
172- print (" Attributes are identical." )
165+ verbose_print (" Attributes are identical." )
173166 else :
174167 print (" Attributes differ." )
175168 for attr_name in set (var1 .attrs .keys ()) | set (var2 .attrs .keys ()):
@@ -184,11 +177,9 @@ def compare_datasets(ds1, ds2, ds1_name="Dataset 1", ds2_name="Dataset 2", verbo
184177
185178 # Compare dimensions used by the variable
186179 if var1 .dims == var2 .dims :
187- if verbose :
188- print (f" Dimensions used are identical: { var1 .dims } " )
180+ verbose_print (f" Dimensions used are identical: { var1 .dims } " )
189181 else :
190182 print (" Dimensions used differ:" )
191183 print (f" { ds1_name } : { var1 .dims } " )
192184 print (f" { ds2_name } : { var2 .dims } " )
193- if verbose :
194- print ("=" * 30 + " End of Comparison " + "=" * 30 )
185+ verbose_print ("=" * 30 + " End of Comparison " + "=" * 30 )
0 commit comments