From ebcf03141b438c74882a8b0eee6e4fd7ac600884 Mon Sep 17 00:00:00 2001 From: syedhamidali Date: Fri, 30 Aug 2024 00:17:23 -0400 Subject: [PATCH] FIX: Fixed some tests and to_xarray() function --- pyart/core/grid.py | 49 +++++++++++++++++++------------------- tests/core/test_grid.py | 2 +- tests/retrieve/test_qvp.py | 4 +++- 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/pyart/core/grid.py b/pyart/core/grid.py index 3fc0ca562f..cf8da27be1 100644 --- a/pyart/core/grid.py +++ b/pyart/core/grid.py @@ -329,7 +329,7 @@ def to_xarray(self): def _process_radar_name(radar_name): """Process radar_name to handle different formats.""" if radar_name.dtype.kind in {"S", "U"} and radar_name.ndim > 1: - return np.array([b"".join(radar_name.flatten())]) + return radar_name.flatten() return radar_name lon, lat = self.get_point_longitude_latitude() @@ -388,10 +388,22 @@ def _process_radar_name(radar_name): attrs=projection, ) + # Handle origin and radar attributes with appropriate dimensions for attr_name in [ "origin_latitude", "origin_longitude", "origin_altitude", + ]: + if hasattr(self, attr_name): + attr_data = getattr(self, attr_name) + if attr_data is not None: + attr_value = np.ma.expand_dims(attr_data["data"][0], 0) + ds.coords[attr_name] = xarray.DataArray( + attr_value, dims=("time",), attrs=get_metadata(attr_name) + ) + + # Radar-specific attributes that should have the nradar dimension + for attr_name in [ "radar_altitude", "radar_latitude", "radar_longitude", @@ -400,41 +412,30 @@ def _process_radar_name(radar_name): if hasattr(self, attr_name): attr_data = getattr(self, attr_name) if attr_data is not None: - dims = ("time",) if "origin_" in attr_name else ("nradar",) - attr_value = ( - np.ma.expand_dims(attr_data["data"][0], 0) - if "radar_time" not in attr_name - else [ - np.array( - num2date( - attr_data["data"][0], units=attr_data["units"] - ), - dtype="datetime64[ns]", - ) - ] - ) ds.coords[attr_name] = xarray.DataArray( - attr_value, dims=dims, attrs=get_metadata(attr_name) + attr_data["data"], + dims=("nradar",), + attrs=get_metadata(attr_name), ) if "radar_time" in ds.variables: ds.radar_time.attrs.pop("calendar") + # Handle radar_name and ensure it has the correct dimension if self.radar_name is not None: radar_name = _process_radar_name(self.radar_name["data"]) ds.coords["radar_name"] = xarray.DataArray( - radar_name, dims=("nradar"), attrs=get_metadata("radar_name") + radar_name, dims=("nradar",), attrs=get_metadata("radar_name") ) else: - radar_name = np.array( - ["ExampleRadar"], dtype="S" - ) # or use 'U' for unicode strings + radar_name = np.array(["ExampleRadar"], dtype="U") + ds.coords["radar_name"] = xarray.DataArray( + radar_name, dims=("nradar",), attrs=get_metadata("radar_name") + ) - # Add radar_name to attributes, defaulting to 'ExampleRadar' if radar_name doesn't exist or is empty - ds.attrs["radar_name"] = ( - radar_name.item() if radar_name.size > 0 else "ExampleRadar" - ) - ds.attrs["nradar"] = self.nradar + # Add radar_name to attributes + ds.attrs["radar_name"] = radar_name if radar_name.size > 0 else "ExampleRadar" + ds.attrs["nradar"] = radar_name.size ds.attrs.update(self.metadata) for key in ds.attrs: try: diff --git a/tests/core/test_grid.py b/tests/core/test_grid.py index 0fedbe0450..8ea9c58b47 100644 --- a/tests/core/test_grid.py +++ b/tests/core/test_grid.py @@ -104,7 +104,7 @@ def test_grid_to_xarray(): # Check radar-specific attributes assert ds.attrs["nradar"] == 1 - assert ds.attrs["radar_name"] == "ExampleRadar" + assert ds.attrs["radar_name"][0] == "ExampleRadar" def _check_dicts_similar(dic1, dic2): diff --git a/tests/retrieve/test_qvp.py b/tests/retrieve/test_qvp.py index 2293ae56f7..7991fe8b45 100644 --- a/tests/retrieve/test_qvp.py +++ b/tests/retrieve/test_qvp.py @@ -498,7 +498,9 @@ def test_find_nearest_gate(test_radar): assert ind_ray == 141.0 assert ind_rng == 145.0 assert azi == 141.0 - assert rng == 14514.514 + assert ( + abs(rng - 14514.514) < 1e-3 + ) # Allow for a small tolerance in floating-point comparison def test_find_neighbour_gates(test_radar):