@@ -69,7 +69,7 @@ def dicts_to_dataset(
6969 return xr .Dataset (data_vars = darrs , coords = coords , attrs = attrs )
7070
7171
72- def merge_dicttrees (vals : dict , fvals : dict , mode : str ) -> dict :
72+ def merge_dicttrees (vals : dict , fvals : dict , strict_merge : bool ) -> dict :
7373 """
7474 A helper function that merges two ``DataTree.to_dict()`` objects by concatenating
7575 the new values in ``fvals`` to the existing ones in ``vals``.
@@ -79,8 +79,16 @@ def merge_dicttrees(vals: dict, fvals: dict, mode: str) -> dict:
7979 return fvals
8080 for k in fvals .keys ():
8181 try :
82- vals [k ] = xr .concat ([vals [k ], fvals [k ]], dim = "uts" , combine_attrs = mode )
83- except xr .MergeError :
82+ # vals[k] = xr.concat([vals[k], fvals[k]], dim="uts", combine_attrs=mode)
83+ vals [k ] = xr .concat (
84+ [vals [k ], fvals [k ]],
85+ dim = "uts" ,
86+ data_vars = "different" ,
87+ compat = "identical" if strict_merge else "equals" ,
88+ join = "outer" ,
89+ combine_attrs = "identical" if strict_merge else "drop_conflicts" ,
90+ )
91+ except (xr .MergeError , ValueError ) as e :
8492 raise RuntimeError (
8593 "Merging metadata from multiple files has failed, as some of the "
8694 "values differ between files. This might be caused by trying to "
@@ -89,7 +97,7 @@ def merge_dicttrees(vals: dict, fvals: dict, mode: str) -> dict:
8997 "yadg with the '--ignore-merge-errors' option."
9098 f"\n { vals [k ].attrs = } "
9199 f"\n { fvals [k ].attrs = } "
92- )
100+ ) from e
93101 return vals
94102
95103
0 commit comments