This is the first major release of Tropycal. From this point onward, following semantic versioning, major releases (e.g., v2.0, v3.0) will consist of non-backwards compatible changes.
Key Highlights
- Non-backwards compatible changes include changing `date` to `time`, and changing numerous function arguments
- Added new module to read and analyze SHIPS data
- Added new standalone Cartopy plotting functionality
- Numerous major bug fixes, including NHC's new 7-day tropical weather outlooks and improved handling of IBTrACS data
Contributors
tomerburg contributed code to this release. splillo contributed code reviews to this release. Additional thanks to Jack Beven of the National Hurricane Center for feedback used to prepare this release, and to Matthew Onderlinde for help with the updated Tropical Weather Outlook (TWO) archive.
Additional thanks to those that opened issues that were resolved with this release: Justin5999, bmaschino, lpulmano, kylejgillett
Non-backwards compatible changes
- All attributes and function arguments of `date` have been changed to `time`. For example, `storm.date` is now `storm.time`.
- Numerous functions have arguments such as `year_range`. These have been changed to `climo_bounds`.
- Plotting functions in `tracks.TrackDataset` no longer have a `plot=True` argument, instead returning the axes by default.
New module
A new `ships.Ships` class was added, aiding in storing and analyzing SHIPS data. These can be retrieved from Storm objects, which now have two new methods to assist with this:
- `tracks.Storm.search_ships()` - search for all available initialization times SHIPS is available.
- `tracks.Storm.get_ships()` - retrieve instance of Ships for the requested initialization time.
New functionality
- The new HAFS-A and HAFS-B models became operational in June 2023. These models are now available in the `tracks.TrackDataset.plot_models()` function.
- `tracks.TrackDataset.ace_climo()` plots can now be subset by month ranges.
- Attributes are now available for `tracks.TrackDataset` objects.
- Several new functions were added:
- `tracks.TrackDataset.search_time()` - search for all storms that existed at a requested time.
- `utils.plot_two()` - standalone Cartopy functionality now allows for plotting Tropical Weather Outlooks (TWOs) on an axes instance.
- `utils.plot_cone()` - standalone Cartopy functionality to plot a cone of uncertainty.
- `utils.ships_parser()` - parse SHIPS text into formatted dictionaries.
Functionality Improvements
- By default, `tracks.TrackDataset` now automatically searches for the latest HURDATv2 dataset published on NHC's website, replacing the HRD version as the default HURDATv2 dataset.
- Acceptable storm types now include 'TY' and 'ST', which are used in place of 'HU' outside of NHC's area of responsibility.
- Applied a fix to TrackDataset to attempt to objectively determine potential tropical cyclones that never became TCs.
Underlying Code Improvements
- Overhauled test scripts and added sample data to be used for tests.
- Consolidated duplicated functionality such as ACE calculations and custom storm dictionaries to use functions in the `utils` module.
- Removed unused imports, deprecated imports, and applied basic autoformatting.
- Moved custom storm tracks such as Cyclone Catarina to a standalone text file format, allowing for potential future additions of custom storm data.
Major Bug Fixes
- A change to NHC's website in 2023 resulted in a change in where archived TWOs are stored. Tropycal code now uses their new locations on the website.
- NHC added new 7-day TWOs operationally in 2023. Summary plots now use these instead of expecting a 5-day TWO.
- `tracks.Season.summary()` now displays the correct number of overall storms that formed. Count of named storms, hurricanes and major hurricanes were not affected by this bug.
- South Hemisphere basin handling was added for obtaining `tracks.Season` objects, as well as the following functions:
- `tracks.TrackDataset.ace_climo()`
- `tracks.TrackDataset.hurricane_days_climo()`
- `tracks.TrackDataset.climatology()`
- `tracks.TrackDataset.season_composite()`
- `tracks.TrackDataset.ace_climo()` now correctly calculates global ACE per calendar year.
- Corrected the current basin for realtime storms in JTWC's area of responsibility.
- Corrected IBTrACS parsing which in rare instances read duplicate entries, incorrectly merged storms and displayed incorrect storm IDs.
- `tracks.TrackDataset.plot_summary()` now works for IBTrACS datasets, and fixed a bug in cross-dateline storms.
- Removed outdated references that caused plots in the `rain` module to fail.
- Fixed an intermittent bug in parsing realtime JTWC forecasts.
- Analog functions now correctly use inclusive date ranges.
- `tracks.TrackDataset.rank_storm()` now correctly returns only the ACE for the requested date range and domain.
Minor Bug Fixes
- `tracks.Storm.plot_ensembles()` now works for times before a tropical cyclone officially formed.
- Removed references to recently deprecated `np.int` that caused bugs with newer version of numpy.
- Fixed a bug in plotting storms that completely lack sustained wind data.
- Fixed a bug in plotting cross-dateline storms.
- Fixed a bug in plotting `tracks.TrackDataset.wind_pres_relationship()` that had syntax deprecated in Python 3.11.
- Using the `basin='both'` argument when creating an instance of `tracks.TrackDataset` now correctly recognizes it as a basin in NHC's area of responsibility.
- Correctly retrieve the most recent NHC discussion in `tracks.TrackDataset.get_nhc_discussion()`.