@@ -90,6 +90,27 @@ def _as_xarray_dataarray(data: Union[str, Path, xarray.DataArray]) -> xarray.Dat
9090 return data
9191
9292
93+ def ascii_art (diff_data : DataArray ) -> str :
94+ scale : int = max (1 , (diff_data .sizes ["x" ] / 100 ))
95+ data_max = diff_data .max ().item ()
96+ if data_max == 0 :
97+ data_max = 1
98+ grayscale_characters = "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\" ^`'. "
99+ coarsened = diff_data .coarsen (dim = {"x" : scale , "y" : scale }, boundary = "pad" ).all ()
100+ top = "┌" + "─" * coarsened .sizes ["x" ] + "┐\n "
101+ bottom = "\n └" + "─" * coarsened .sizes ["x" ] + "┘"
102+ return (
103+ top
104+ + "\n " .join (
105+ [
106+ "│" + "" .join ([grayscale_characters [70 - int (v * 70 / data_max )] for v in row ]) + "│"
107+ for row in coarsened .transpose ()
108+ ]
109+ )
110+ + bottom
111+ )
112+
113+
93114def _compare_xarray_dataarray_xy (
94115 actual : Union [xarray .DataArray , str , Path ],
95116 expected : Union [xarray .DataArray , str , Path ],
@@ -155,6 +176,9 @@ def _compare_xarray_dataarray_xy(
155176 f"{ key } : value difference min:{ diff_data .min ().data } , max: { diff_data .max ().data } , mean: { diff_mean } , var: { diff_var } "
156177 )
157178
179+ print (f"Difference ascii art for { key } " )
180+ print (ascii_art (diff_data ))
181+
158182 coord_grid = np .meshgrid (diff_data .coords ["y" ], diff_data .coords ["x" ])
159183 mask = diff_data .notnull ()
160184 c1 = coord_grid [0 ][mask ]
0 commit comments