Update tc_tracks.py #1241
GitHub Actions / Core / Unit Test Results (3.11)
failed
Feb 18, 2025 in 0s
1 fail, 716 pass in 7m 4s
Annotations
Check warning on line 0 in climada.hazard.test.test_tc_tracks.TestFuncs
github-actions / Core / Unit Test Results (3.11)
test_compute_density_tracks (climada.hazard.test.test_tc_tracks.TestFuncs) failed
tests_xml/tests.xml [took 0s]
Raw output
TypeError: float() argument must be a string or a real number, not 'datetime.timedelta'
self = <climada.hazard.test.test_tc_tracks.TestFuncs testMethod=test_compute_density_tracks>
def test_compute_density_tracks(self):
"""Test `compute_track_density` to ensure proper density count."""
# create track
track = xr.Dataset(
{
"time_step": ("time", np.timedelta64(1, "h") * np.arange(4)),
"max_sustained_wind": ("time", [10, 20, 30, 20]),
"central_pressure": ("time", [1, 1, 1, 1]),
"radius_max_wind": ("time", [1, 1, 1, 1]),
"environnmental_pressure": ("time", [1, 1, 1, 1]),
"basin": ("time", ["NA", "NA", "NA", "NA"]),
},
coords={
"time": ("time", pd.date_range("2025-01-01", periods=4, freq="12H")),
"lat": ("time", [-90, -90, -90, -90]),
"lon": ("time", [-179, -169, -159, -149]),
},
attrs={
"max_sustained_wind_unit": "m/s",
"central_pressure_unit": "hPa",
"name": "storm_0",
"sid": "0",
"orig_event_flag": True,
"data_provider": "FAST",
"id_no": "0",
"category": "1",
},
)
tc_tracks = tc.TCTracks([track])
> hist_abs, *_ = tc.compute_track_density(
tc_tracks,
res=10,
density=False,
)
climada/hazard/test/test_tc_tracks.py:1282:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tc_track = <climada.hazard.tc_tracks.TCTracks object at 0x7fc19478da50>
res = 10, density = False, filter_tracks = True, wind_min = None
wind_max = None
def compute_track_density(
tc_track: TCTracks,
res: int = 5,
density: bool = False,
filter_tracks: bool = True,
wind_min: float = None,
wind_max: float = None,
) -> tuple[np.ndarray, tuple]:
"""Compute absolute and normalized tropical cyclone track density. Before using this function,
apply the same temporal resolution to all tracks by calling :py:meth:`equal_timestep` on the
TCTrack object. Due to the computational cost of the this function, it is not recommended to
use a grid resolution higher tha 0.1°. This function it creates 2D bins of the specified
resolution (e.g. 1° x 1°). Second, since tracks are not lines but a series of points, it counts
the number of points per bin. Lastly, it returns the absolute or normalized count per bin.
To plot the output of this function use :py:meth:`plot_track_density`.
Parameters:
----------
res: int (optional) Default: 5°
resolution in degrees of the grid bins in which the density will be computed
density: bool (optional) default: False
If False it returns the number of samples in each bin. If True, returns the
probability density function at each bin computed as count_bin / grid_area.
filter_tracks: bool (optional) default: True
If True the track density is computed as the number of different tracks crossing a grid
cell. If False, the track density takes into account how long the track stayed in each
grid cell. Hence slower tracks increase the density if the parameter is set to False.
wind_min: float (optional) default: None
Minimum wind speed above which to select tracks.
wind_max: float (optional) default: None
Maximal wind speed below which to select tracks.
Returns:
-------
hist: 2D np.ndwind_speeday
2D matrix containing the track density
Example:
--------
>>> tc_tracks = TCTrack.from_ibtracs_netcdf("path_to_file")
>>> tc_tracks.equal_timestep(time_steph_h = 1)
>>> hist_count = compute_track_density(res = 1)
>>> plot_track_density(hist_count)
"""
limit_ratio = 1.12 * 1.1 # record tc speed 112km/h -> 1.12°/h + 10% margin
> if float(tc_track.data[0].time_step[0].item()) > res / limit_ratio:
E TypeError: float() argument must be a string or a real number, not 'datetime.timedelta'
climada/hazard/tc_tracks.py:3032: TypeError
Loading