@@ -783,9 +783,11 @@ def extra_items_repr(extra_keys, mapping, ab_side, kwargs):
783
783
try :
784
784
# compare xarray variable
785
785
if not callable (compat ):
786
- compatible = getattr (a_mapping [k ], compat )(b_mapping [k ])
786
+ compatible = getattr (a_mapping [k ].variable , compat )(
787
+ b_mapping [k ].variable
788
+ )
787
789
else :
788
- compatible = compat (a_mapping [k ], b_mapping [k ])
790
+ compatible = compat (a_mapping [k ]. variable , b_mapping [k ]. variable )
789
791
is_variable = True
790
792
except AttributeError :
791
793
# compare attribute value
@@ -804,18 +806,40 @@ def extra_items_repr(extra_keys, mapping, ab_side, kwargs):
804
806
805
807
if compat == "identical" and is_variable :
806
808
attrs_summary = []
809
+ a_attrs = a_mapping [k ].attrs
810
+ b_attrs = b_mapping [k ].attrs
807
811
812
+ attrs_to_print = set (a_attrs ) ^ set (b_attrs )
813
+ attrs_to_print .update (
814
+ {k for k in set (a_attrs ) & set (b_attrs ) if a_attrs [k ] != b_attrs [k ]}
815
+ )
808
816
for m in (a_mapping , b_mapping ):
809
817
attr_s = "\n " .join (
810
- summarize_attr (ak , av ) for ak , av in m [k ].attrs .items ()
818
+ " " + summarize_attr (ak , av )
819
+ for ak , av in m [k ].attrs .items ()
820
+ if ak in attrs_to_print
811
821
)
822
+ if attr_s :
823
+ attr_s = " Differing variable attributes:\n " + attr_s
812
824
attrs_summary .append (attr_s )
813
825
814
826
temp = [
815
827
"\n " .join ([var_s , attr_s ]) if attr_s else var_s
816
828
for var_s , attr_s in zip (temp , attrs_summary )
817
829
]
818
830
831
+ # TODO: It should be possible recursively use _diff_mapping_repr
832
+ # instead of explicitly handling variable attrs specially.
833
+ # That would require some refactoring.
834
+ # newdiff = _diff_mapping_repr(
835
+ # {k: v for k,v in a_attrs.items() if k in attrs_to_print},
836
+ # {k: v for k,v in b_attrs.items() if k in attrs_to_print},
837
+ # compat=compat,
838
+ # summarizer=summarize_attr,
839
+ # title="Variable Attributes"
840
+ # )
841
+ # temp += [newdiff]
842
+
819
843
diff_items += [ab_side + s [1 :] for ab_side , s in zip (("L" , "R" ), temp )]
820
844
821
845
if diff_items :
0 commit comments