# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## v1.4.0 ### Added - `huracanpy.info.beaufort_category` - `huracanpy.calc.corral_radius` - Load SuperBT from github file - Load IBTrACS from a netCDF file - Allow `huracanpy.load` to load non-ragged netCDF files. Essentially just calls `xarray.load` without modification - Add optional keywords to `huracanpy.save` to allow them to be passed to pandas `to_csv` or xarray `to_netcdf` - Add option to `assess.match` to only match tracks if the number of matching points needed are consecutive - `assess.match` now uses `calc.distance` for the separation distance, so can use geodesic distance (as well as haversine) - `info.timestep` gives the best guess of timestep given a set of tracks - Centring options for delta-like functions (`delta`, `rate`, `azimuth`, `distance`, `translation_speed`) - `centering="centre"` - Centred difference, NaN at the start and end of tracks - `centering="adaptive"` - Centered difference. Forward difference at the start of tracks. Backward difference at the end of tracks - Basin definitions from [Knutson et al. (2020)](https://doi.org/10.1175/BAMS-D-18-0194.1) (`"Knutson2020"`) - Add `spherical` option to `calc.density`. Divides by area of gridboxes for `method="histogram"` and implements haversine weighting with scikit-learn for `method="kde"` - Add `info.landfall_points` which returns each point where a track crosses a coastline - New module `convert` and function `convert.to_geodataframe` to convert tracks to a geodataframe of points or linestrings (if track_id is given) - `tc.pressure_wind_relation` to get/apply the model for a pressure wind relation without having to use `tc.pace`. The return model is als wrapped so that the fitting and predicting of the model uses units. - `plot.pressure_wind_relation` - `tc.saffir_simpson_category` has the option to use thresholds for 10-minute or 1-minute sustained winds. Previously it was only 10-minute by default - Optional mean distance (instead of default maximum distance) when matching tracks with `assess.match` ### Changed - Speed up `huracanpy.save` for netCDF files - Remove NaN only variables when loading online IBTrACS data. - Add a cyclic point when using `plot.density` so that the dateline doesn't show up as empty - `huracanpy.calc.apex_vals` always gives the first point when there a multiple minima/maxima with the same values. Consistent with the behaviour of argmin/argmax ### Fixed - -180 and 180 no longer treated as different longitudes. -180 is always used instead - When a point is exactly on the boundary of basin, give the first basin in the list rather than no basin ## v1.3.1 ### Fixed - `calc.density` with `crop=True` will only crop the region outside of where there are tracks rather than all empty longitudes/latitudes ## v1.3.0 ### Added - Include missing accessor functions - `get_beta_drift` and `add_beta_drift` - `plot_fancyline` - `plot.tracks` and `plot.density` can be placed on existing axes if they are explicitly passed to the function - Load tracks from the Imperial College Storm Model (IRIS) - `huracanpy.infer_track_id` to generate a track ID from unique combinations of variables. e.g. "year" and "storm number in year". - Also add as an option to `huracanpy.load` - Can use `huracanpy.load` with a list of files - `huracanpy.concat_tracks` to concatenate tracks while keeping the track_id as a unique identifier ### Changed - Reduced unnecessary warning messages - Always use `var_name` as the accessor keyword for choosing a specific variable. Previously some functions used `varname` - track density kde function integrates to the total number of points being passed, so that numbers are reasonable. ### Fixed - Consistent use of track_id in `delta` calculations - Correctly convert units in `category` functions - Always do the `beta_drift` calculation with wind speed in metres per second - Allow requesting other time components than year/month/day/hour from `add_time_components`, consistent with `info.time_components` - `get_azimuth` was calling the wrong function - Correctly use wind in "knots" and pressure in "hPa" when using pre-calculated pressure-wind relations ("holland", "z2021") in `tc.pace` - Use a lower precision `datetime64` when times are outside the default representable range ## v1.2.0 ### Added - Modify `huracanpy.load` to load TRACK files with timesteps instead of dates (e.g. `track_calendar=("1940-01-01", 6)` to specify start time and timestep length in hours) - Add "Old HURDAT"/ECMWF track data reader - Add function to compute azimuth - Allow `huracanpy.sel_id` to be used to select multiple track IDs ### Changed - Update python versions supported (python 3.9-3.13, changed from 3.8-3.12) ## v1.1.0 ### Added - Support for WiTRACK text files in huracanpy.load - Beta-drift computation (along with RMW support within distance function) - Full documentation incuding new examples - kde option for densities - Reference track set option for matching - Basin definitions from E. Sainsbury's papers ### Fixes - Accessor was not behaving in the right way when the object was modified after the accessor's first call; - Allow for ISO time to be called "isotime" in csv/parquet ## v1.0.0 ### Added - xarray Dataset accessor (`hrcn`) - Extra keyword arguments to `huracanpy.load` - `rename` - `units` - `baselon` - `sel_id` function to select a single track by track_id from a `Dataset` but faster than using `groupby` ### Changed - Simplified module namespaces - `utils.{module}.{function}` -> `info.{function}` - `diags.{module}.{function}` -> `calc.{function}` or `tc.{function}` - `subset.trackswhere` -> `trackswhere` - Simplified function naming - `plot_` prefix removed functions in `plot` module - Modified arguments to `load` - keyword `tracker` renamed `source` to reflect not all tracks are from trackers, e.g. IBTrACS or statistical-dynamical downscaling models - Use `ibtracs_subset` to determine whether the subset is online or not, removing `ibtracs_online` keyword - When `filename` is specified for an online IBTrACS dataset, save the downloaded data to that file, rather than using `ibtracs_clean=False` and a default filename - Use a single matching function `assess.match` for 2 or more datasets instead of `assess.match_pair` and `assess.match_multiple` - Remove `get_` from functions in `info`. Instead this syntax is used to differentiate `get_` and `add_` functions in the `hrcn` accessor - Split `info.get_land_or_ocean` into `is_land` and `is_ocean` - Renamed `tc.sshs_cat` to `tc.saffir_simpson_category` and `tc.pres_cat` to `tc.pressure_category` - Improved support for calculations with units (using metpy style functions) - Updated IBTrACS data ### Removed - `add_info` argument from `huracanpy.load` - `add_all_info` function. Instead use `add_` functions on `hrcn` accessor - `get_time`. Functionality already covered by `pandas.to_datetime` ### Fixed - `huracanpy.info.season` now works with `cftime.datetime`