wxdata 1.4.2__tar.gz → 1.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. {wxdata-1.4.2/src/wxdata.egg-info → wxdata-1.5}/PKG-INFO +268 -226
  2. {wxdata-1.4.2 → wxdata-1.5}/README.md +266 -225
  3. {wxdata-1.4.2 → wxdata-1.5}/pyproject.toml +2 -1
  4. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/__init__.py +33 -6
  5. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/aigefs/aigefs.py +14 -9
  6. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/aigfs/aigfs.py +2 -0
  7. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/client/client.py +150 -3
  8. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/ecmwf/ecmwf.py +7 -0
  9. wxdata-1.5/src/wxdata/fems/__init__.py +20 -0
  10. wxdata-1.5/src/wxdata/fems/fems.py +1352 -0
  11. wxdata-1.5/src/wxdata/fems/meta_data.py +128 -0
  12. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/gefs/gefs.py +5 -1
  13. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/gfs/gfs.py +4 -0
  14. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/gfs/url_scanners.py +30 -57
  15. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/hgefs/hgefs.py +2 -0
  16. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/metars/metar_obs.py +2 -0
  17. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/noaa/nws.py +3 -0
  18. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/rtma/rtma.py +3 -0
  19. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/soundings/wyoming_soundings.py +2 -0
  20. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/utils/nomads_gribfilter.py +27 -3
  21. {wxdata-1.4.2 → wxdata-1.5/src/wxdata.egg-info}/PKG-INFO +268 -226
  22. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata.egg-info/SOURCES.txt +1 -1
  23. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata.egg-info/requires.txt +1 -0
  24. wxdata-1.4.2/src/wxdata/fems/__init__.py +0 -9
  25. wxdata-1.4.2/src/wxdata/fems/fems.py +0 -701
  26. wxdata-1.4.2/src/wxdata/fems/raws_sigs.py +0 -1789
  27. {wxdata-1.4.2 → wxdata-1.5}/LICENSE +0 -0
  28. {wxdata-1.4.2 → wxdata-1.5}/setup.cfg +0 -0
  29. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/aigefs/__init__.py +0 -0
  30. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/aigefs/paths.py +0 -0
  31. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/aigefs/url_scanners.py +0 -0
  32. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/aigfs/__init__.py +0 -0
  33. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/aigfs/paths.py +0 -0
  34. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/aigfs/url_scanners.py +0 -0
  35. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/calc/__init__.py +0 -0
  36. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/calc/derived_fields.py +0 -0
  37. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/calc/kinematics.py +0 -0
  38. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/calc/thermodynamics.py +0 -0
  39. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/calc/unit_conversion.py +0 -0
  40. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/client/__init__.py +0 -0
  41. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/ecmwf/__init__.py +0 -0
  42. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/ecmwf/file_funcs.py +0 -0
  43. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/ecmwf/keys.py +0 -0
  44. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/ecmwf/parsers.py +0 -0
  45. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/ecmwf/paths.py +0 -0
  46. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/ecmwf/url_scanners.py +0 -0
  47. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/gefs/__init__.py +0 -0
  48. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/gefs/exception_messages.py +0 -0
  49. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/gefs/file_funcs.py +0 -0
  50. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/gefs/paths.py +0 -0
  51. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/gefs/process.py +0 -0
  52. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/gefs/url_scanners.py +0 -0
  53. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/gfs/__init__.py +0 -0
  54. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/gfs/exception_messages.py +0 -0
  55. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/gfs/paths.py +0 -0
  56. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/hgefs/__init__.py +0 -0
  57. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/hgefs/paths.py +0 -0
  58. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/hgefs/url_scanner.py +0 -0
  59. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/metars/__init__.py +0 -0
  60. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/metars/_clean_data.py +0 -0
  61. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/noaa/__init__.py +0 -0
  62. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/post_processors/__init__.py +0 -0
  63. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/post_processors/aigefs_post_processing.py +0 -0
  64. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/post_processors/aigfs_post_processing.py +0 -0
  65. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/post_processors/ecmwf_post_processing.py +0 -0
  66. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/post_processors/gefs_post_processing.py +0 -0
  67. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/post_processors/gfs_post_processing.py +0 -0
  68. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/post_processors/hgefs_post_processing.py +0 -0
  69. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/post_processors/rtma_post_processing.py +0 -0
  70. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/rtma/__init__.py +0 -0
  71. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/rtma/file_funcs.py +0 -0
  72. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/rtma/keys.py +0 -0
  73. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/rtma/process.py +0 -0
  74. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/rtma/url_scanners.py +0 -0
  75. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/soundings/__init__.py +0 -0
  76. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/soundings/_exceptions.py +0 -0
  77. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/utils/__init__.py +0 -0
  78. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/utils/coords.py +0 -0
  79. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/utils/exceptions.py +0 -0
  80. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/utils/file_funcs.py +0 -0
  81. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/utils/file_scanner.py +0 -0
  82. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/utils/progress_bar.py +0 -0
  83. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/utils/recycle_bin.py +0 -0
  84. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/utils/scripts.py +0 -0
  85. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/utils/tools.py +0 -0
  86. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata/utils/xmacis2_cleanup.py +0 -0
  87. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata.egg-info/dependency_links.txt +0 -0
  88. {wxdata-1.4.2 → wxdata-1.5}/src/wxdata.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wxdata
3
- Version: 1.4.2
3
+ Version: 1.5
4
4
  Summary: A Python library that acts as a client to download, pre-process and post-process weather data. Friendly for users on VPN/PROXY connections.
5
5
  Author: Eric J. Drewitz
6
6
  Project-URL: Documentation, https://github.com/edrewitz/wxdata/blob/main/Documentation/Landing%20Page.md
@@ -25,6 +25,7 @@ Requires-Dist: cfgrib>=0.9.10.4
25
25
  Requires-Dist: dask>=2025.5.1
26
26
  Requires-Dist: tqdm>=4.67.3
27
27
  Requires-Dist: ecmwf-opendata>=0.3.26
28
+ Requires-Dist: openpyxl>=3.1.5
28
29
  Dynamic: license-file
29
30
 
30
31
  # WxData
@@ -150,17 +151,20 @@ ii) Set up a new environment with an earlier version of Python (must be Python >
150
151
  3) [Downloading the first 72 hours of the ECMWF IFS and ECMWF AIFS](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/ecmwf.ipynb)
151
152
  4) [Downloading the GEFS members p01 and p02 for only Temperature](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/gefs.ipynb)
152
153
  5) [Downloading the Real-Time Mesoscale Analysis (RTMA)](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/rtma.ipynb)
153
- 6) [Downloading the RAWS SIG Group Fuels Data and the NFDRS Forecast for the RAWS SIG Groups for the South Ops Geographic Area Coordination Center](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/fems.ipynb)
154
- 7) [Downloading the SPC Convective Outlook for CONUS](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/spc.ipynb)
155
- 8) [Downloading NWS Maximum Temperature Forecast for Hawaii](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/nws_hi.ipynb)
156
- 9) [Downloading the GFS0P25 then performing pixel and line queries on the data](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/GFS.ipynb)
157
- 10) [Downloading various datasets from the Applied Climate Information System (ACIS)](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/xmacis2.ipynb)
158
- 11) [Downloading AIGFS Data](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/aigfs.ipynb)
159
- 12) [Downloading AIGEFS Data](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/aigefs.ipynb)
160
- 13) [Downloading and plotting the Climate Prediction Center 6-10 Day Precipitation Outlook](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/cpc_precip_outlook.ipynb)
161
- 14) [Downloading OUN Sounding Data and Using The WxData Linear Anti Aliasing Tool To Interpolate 100 Points Between Each Observed Data Point And Visualize Both Data Sets](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/linear_anti_aliasing.ipynb)
162
- 15) [Downloading Subsets Of ECMWF IFS Ensemble and AIFS Ensemble Data](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/ecmwf_ens.ipynb)
163
- 16) [Downloading the ECMWF IFS 500 mb Geopotential Height Initial Analysis And Plot A North Pole Stereographic Resolving The Meridian With The WxData Cyclic Point Tool](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/cyclic.ipynb)
154
+ 6) [Downloading the SPC Convective Outlook for CONUS](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/spc.ipynb)
155
+ 7) [Downloading NWS Maximum Temperature Forecast for Hawaii](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/nws_hi.ipynb)
156
+ 8) [Downloading the GFS0P25 then performing pixel and line queries on the data](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/GFS.ipynb)
157
+ 9) [Downloading various datasets from the Applied Climate Information System (ACIS)](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/xmacis2.ipynb)
158
+ 10) [Downloading AIGFS Data](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/aigfs.ipynb)
159
+ 11) [Downloading AIGEFS Data](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/aigefs.ipynb)
160
+ 12) [Downloading and plotting the Climate Prediction Center 6-10 Day Precipitation Outlook](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/cpc_precip_outlook.ipynb)
161
+ 13) [Downloading OUN Sounding Data and Using The WxData Linear Anti Aliasing Tool To Interpolate 100 Points Between Each Observed Data Point And Visualize Both Data Sets](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/linear_anti_aliasing.ipynb)
162
+ 14) [Downloading Subsets Of ECMWF IFS Ensemble and AIFS Ensemble Data](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/ecmwf_ens.ipynb)
163
+ 15) [Downloading the ECMWF IFS 500 mb Geopotential Height Initial Analysis And Plot A North Pole Stereographic Resolving The Meridian With The WxData Cyclic Point Tool](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/cyclic.ipynb)
164
+ 16) [Downloading Observed Fuels Data For The Past Year For Acton RAWS and Plotting 1000-HR Dead Fuel Moisture](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/acton_raws.ipynb)
165
+ 17) [Downloading the 7-Day NFDRS Forecast for Acton RAWS and Plotting Forecast 100-HR Dead Fuel Moisture](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/acton_raws_forecast.ipynb)
166
+ 18) [Downloading Current RAWS and METAR Data and Plotting Current Relative Humidity Observations Across California and Nevada](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/metar_raws_observed_rh.ipynb)
167
+ 19) [Downloading Current RAWS Data and Plotting Current Energy Release Components (ERCs) Observations Across California and Nevada](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/observed_erc_map.ipynb)
164
168
 
165
169
  *Advanced Users*
166
170
  1) [Using the `client` module to download the latest HadCRUT5 Analysis netCDF file and open this dataset in xarray](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/hadcrut5.ipynb)
@@ -209,9 +213,20 @@ ii) Set up a new environment with an earlier version of Python (must be Python >
209
213
  1. [METAR Observations](https://github.com/edrewitz/wxdata/blob/main/Documentation/metars.md#metar-observations)
210
214
 
211
215
  ***FEMS RAWS Network***
212
- 1. [Get Single Station RAWS Data](https://github.com/edrewitz/wxdata/blob/main/Documentation/single_raws.md#fems-get-single-raws-station-data)
213
- 2. [Get Each SIG of RAWS Data for a Geographic Area Coordination Center](https://github.com/edrewitz/wxdata/blob/main/Documentation/raws%20sig.md#fems-get-raws-sig-data-for-a-geographic-area-coordination-center-region)
214
- 3. [Get NFDRS Forecast Data for Each SIG for a Geographic Area Coordination Center](https://github.com/edrewitz/wxdata/blob/main/Documentation/nfdrs%20forecast.md#fems-get-nfdrs-forecast-data-for-a-raws-sig-for-a-geographic-area-coordination-center-region)
216
+ 1. [Get Single Station Weather Observations](https://github.com/edrewitz/WxData/blob/main/Documentation/single%20raws%20weather%20obs.md#fems-single-raws-station-weather-observations)
217
+ 2. [Get Single Station Fuels Observations](https://github.com/edrewitz/WxData/blob/main/Documentation/single%20raws%20fuels%20obs.md#fems-single-raws-station-fuels-observations)
218
+ 3. [Get Multi Station Weather Observations](https://github.com/edrewitz/WxData/blob/main/Documentation/multi%20raws%20weather%20obs.md#fems-multi-raws-station-weather-observations)
219
+ 4. [Get Multi Station Fuels Observations](https://github.com/edrewitz/WxData/blob/main/Documentation/multi%20raws%20fuels%20obs.md#fems-multi-raws-station-fuels-observations)
220
+ 5. [Get Current Multi Station Weather Observations](https://github.com/edrewitz/WxData/blob/main/Documentation/current%20multi%20raws%20weather%20obs.md#fems-multi-raws-station-current-weather-observations)
221
+ 6. [Get Current Multi Station Fuels Observations](https://github.com/edrewitz/WxData/blob/main/Documentation/current%20multi%20raws%20fuels%20obs.md#fems-multi-raws-station-current-fuels-observations)
222
+ 7. [Get Current Multi Station Weather Observations By State](https://github.com/edrewitz/WxData/blob/main/Documentation/raws%20weather%20obs%20by%20state.md#fems-raws-station-current-weather-observations-by-state)
223
+ 8. [Get Current Multi Station Fuels Observations By State](https://github.com/edrewitz/WxData/blob/main/Documentation/raws%20fuels%20obs%20by%20state.md#fems-raws-station-current-fuels-observations-by-state)
224
+ 9. [Get Single Station Weather Forecast](https://github.com/edrewitz/WxData/blob/main/Documentation/single%20raws%20weather%20forecast.md#fems-single-raws-station-weather-forecast)
225
+ 10. [Get Single Station NFDRS (Fuels) Forecast](https://github.com/edrewitz/WxData/blob/main/Documentation/single%20raws%20nfdrs%20forecast.md#fems-single-raws-station-nfdrs-fuels-forecast)
226
+ 11. [Get Multi Station Weather Forecast](https://github.com/edrewitz/WxData/blob/main/Documentation/multi%20raws%20weather%20forecast.md#fems-multi-raws-station-weather-forecast)
227
+ 12. [Get Multi Station NFDRS (Fuels) Forecast](https://github.com/edrewitz/WxData/blob/main/Documentation/multi%20raws%20nfdrs%20forecast.md#fems-multi-raws-station-nfdrs-fuels-forecast)
228
+ 13. [Get Single Station Meta-Data](https://github.com/edrewitz/WxData/blob/main/Documentation/raws%20single%20station%20meta%20data.md#fems-single-raws-station-meta-data)
229
+ 14. [Get Multi Station Meta-Data](https://github.com/edrewitz/WxData/blob/main/Documentation/raws%20multi%20station%20meta%20data.md#fems-multi-raws-station-meta-data)
215
230
 
216
231
  ***Observed Atmospheric Soundings***
217
232
  1. [University Of Wyoming Soundings](https://github.com/edrewitz/wxdata/blob/main/Documentation/wyoming_soundings.md)
@@ -251,6 +266,9 @@ ii) Set up a new environment with an earlier version of Python (must be Python >
251
266
  ***Custom CSV Data***
252
267
  1. [CSV Data Client](https://github.com/edrewitz/WxData/blob/main/Documentation/get_csv_data.md#get-csv-data)
253
268
 
269
+ ***Custom Excel Data***
270
+ 1. [Excel Data Client](https://github.com/edrewitz/WxData/blob/main/Documentation/get_excel_data.md#get-excel-data)
271
+
254
272
  ***Cyclic Points For Hemispheric Plots***
255
273
  1. [Cyclic Points](https://github.com/edrewitz/wxdata/blob/main/Documentation/cyclic_point.md#using-wxdata-to-add-cyclic-points-for-hemispheric-plots)
256
274
 
@@ -272,217 +290,238 @@ ii) Set up a new environment with an earlier version of Python (must be Python >
272
290
 
273
291
  ## Importing Functions from WxData
274
292
 
275
- """
276
- This file hosts all of the functions in the WxData Python library that directly interact with the user.
277
-
278
- (C) Eric J. Drewitz 2025-2026
279
- """
280
-
281
-
282
- """
283
- This section of functions are for users who want full wxdata functionality.
284
-
285
- These functions do the following:
286
-
287
- 1) Scan for the latest available data.
288
- - If the data on your local machine is not up to date, new data will download automatically.
289
- - If the data on your local machine is up to date, new data download is bypassed.
290
- - This is a safeguard that prevents excessive requests on the data servers.
291
-
292
- 2) Builds the wxdata directory to store the weather data files.
293
- - Scans for the directory branch and builds the branch if it does not exist.
294
-
295
- 3) Downloads the data.
296
- - Users can define their VPN/PROXY IP Address as a (dict) in their script and pass their
297
- VPN/PROXY IP address into the function to avoid SSL Certificate errors when requesting data.
298
- - Algorithm allows for up to 5 retries with a 30 second break between each retry to resolve connection
299
- interruptions while not overburdening the data servers.
300
-
301
- 4) Pre-processes the data via filename formatting and correctly filing in the wxdata directory.
302
-
303
- 5) Post-processing by doing the following tasks:
304
- - Remapping GRIB2 variable keys into plain language variable keys.
305
- - Fixing dataset build errors and grouping all variables together.
306
- - Transforms longitude from 0 to 360 degrees into -180 to 180 degrees.
307
- - Subsetting the data to the latitude/longitude boundaries specified by the user.
308
- - Converting temperature from kelvin to units the user wants (default is Celsius).
309
- - Returning a post-processed xarray.array to the user.
310
-
311
- 6) Preserves system memory by doing the following:
312
- - Deleting old data files before each new download.
313
- - When clear_recycle_bin=True, the user's recycle bin is also cleared.
314
- """
315
-
316
- # Global Forecast System (GFS)
317
- # - GFS 0.25x0.25 Degree Primary Parameters
318
- # - GFS 0.25x0.25 Degree Secondary Parameters
319
- # - GFS 0.5x0.5 Degree
320
- from wxdata.gfs.gfs import(
321
- gfs_0p25,
322
- gfs_0p25_secondary_parameters,
323
- gfs_0p50
324
- )
325
-
326
- # AI Global Forecast System (AIGFS)
327
- from wxdata.aigfs.aigfs import aigfs
328
-
329
- # Hybrid Global Ensemble Forecast System (HGEFS)
330
- from wxdata.hgefs.hgefs import hgefs_mean_spread
331
-
332
- # Global Ensemble Forecast System (GEFS)
333
- # - GEFS 0.5x0.5 Degree Primary Parameters
334
- # - GEFS 0.5x0.5 Degree Secondary Parameters
335
- # - GEFS 0.25x0.25 Degree
336
- from wxdata.gefs.gefs import(
337
- gefs_0p50,
338
- gefs_0p50_secondary_parameters,
339
- gefs_0p25
340
- )
341
-
342
- # AI Global Ensemble Forecast System (AIGEFS)
343
- # - AIGEFS Pressure Members (Pressure Level Variables)
344
- # - AIGEFS Surface Members (Surface Level Variables)
345
- # - AIGEFS Single (AIGEFS Ensemble Mean & AIGEFS Ensemble Spread)
346
- from wxdata.aigefs.aigefs import(
347
- aigefs_pressure_members,
348
- aigefs_surface_members,
349
- aigefs_single
350
- )
351
-
352
- # European Centre for Medium-Range Weather Forecasts (ECMWF)
353
- # - ECMWF IFS
354
- # - ECMWF IFS Ensemble
355
- # - ECMWF AIFS
356
- # - ECMWF AIFS Ensemble
357
- # - ECMWF IFS Wave
358
- # - ECMWF IFS Wave Ensemble
359
- from wxdata.ecmwf.ecmwf import(
360
- ecmwf_ifs,
361
- ecmwf_ifs_ens,
362
- ecmwf_aifs,
363
- ecmwf_aifs_ens,
364
- ecmwf_ifs_wave,
365
- ecmwf_ifs_wave_ens
366
- )
367
-
368
- # FEMS RAWS Network
369
- # - Single RAWS Station Data
370
- # - A SIG Group of RAWS Data by GACC
371
- # - NFDRS Forecast Data For a RAWS Station
372
- from wxdata.fems.fems import(
373
- get_single_station_data,
374
- get_raws_sig_data,
375
- get_nfdrs_forecast_data
376
- )
377
-
378
- # Real-Time Mesoscale Analysis (RTMA)
379
- # - RTMA Latest
380
- # - RTMA Comparison Between Two Times
381
- from wxdata.rtma.rtma import(
382
- rtma,
383
- rtma_comparison
384
- )
385
-
386
- # NOAA
387
- # - Storm Prediction Center Outlooks
388
- # - Climate Prediction Center Outlooks
389
- # - National Weather Service Forecasts
390
- from wxdata.noaa.nws import(
391
- get_ndfd_grids,
392
- get_cpc_outlook
393
- )
394
-
395
- # Observed Upper-Air Soundings
396
- # (University of Wyoming Database)
397
- from wxdata.soundings.wyoming_soundings import get_observed_sounding_data
398
-
399
- # METAR Observational Data (From NOAA)
400
- from wxdata.metars.metar_obs import download_metar_data
401
-
402
- """
403
- This section hosts all the functions and modules that involve post-processing the data.
404
- These are the functions and modules that:
405
-
406
- 1) Re-map the GRIB2 Variable Keys into Plain Language Keys
407
- 2) Build the xarray.array of the various datasets.
408
-
409
- """
410
-
411
-
412
- # Global Forecast System (GFS)
413
- import wxdata.post_processors.gfs_post_processing as gfs_post_processing
414
-
415
- # AI Global Forecast System (AIGFS)
416
- import wxdata.post_processors.aigfs_post_processing as aigfs_post_processing
417
-
418
- # Hybrid Global Ensemble Forecast System (HGEFS)
419
- import wxdata.post_processors.hgefs_post_processing as hgefs_post_processing
420
-
421
- # Global Ensemble Forecast System (GEFS)
422
- import wxdata.post_processors.gefs_post_processing as gefs_post_processing
423
-
424
- # AI Global Ensemble Forecast System (AIGEFS)
425
- import wxdata.post_processors.aigefs_post_processing as aigefs_post_processing
426
-
427
- # European Centre for Medium-Range Weather Forecasts (ECMWF)
428
- import wxdata.post_processors.ecmwf_post_processing as ecmwf_post_processing
429
-
430
- # Real-Time Mesoscale Analysis (RTMA)
431
- from wxdata.post_processors.rtma_post_processing import process_rtma_data
432
-
433
-
434
- """
435
- This section hosts the utility functions accessable to the user.
436
-
437
- These functions provide helpful utilities when analyzing weather data.
438
-
439
- Utility functions are geared towards the following types of users:
440
-
441
- 1) Users who want to use their own scripts to download the data however, they
442
- would like to use the wxdata post-processing capabilities.
443
-
444
- 2) Users who want to make hemispheric graphics or any graphics where cyclic points
445
- resolve missing data along the prime meridian or international dateline.
446
- """
447
- # WxData function using cartopy to make cyclic points
448
- # This is for users who wish to make graphics that cross the -180/180 degree longitude line
449
- # This is commonly used for Hemispheric graphics
450
- # Function that converts the longitude dimension in an xarray.array
451
- # From 0 to 360 to -180 to 180
452
- from wxdata.utils.coords import(
453
- cyclic_point,
454
- shift_longitude
455
- )
456
-
457
- # Functions to pixel query and query pixels along a line between points A and B
458
- # Function to interpolate to n amount of points in between x and y values respectively
459
- from wxdata.utils.tools import(
460
- pixel_query,
461
- line_query,
462
- linear_anti_aliasing
463
- )
464
-
465
- """
466
- This section hosts the various data clients that retrieve various types of data.
467
-
468
- These clients can be easily configured to work on VPN/PROXY connections.
469
- """
470
-
471
- # These are the wxdata HTTPS Clients with full VPN/PROXY Support
472
- # Client List:
473
- # - get_gridded_data()
474
- # - get_csv_data()
475
- # - get_xmacis_data()
476
- import wxdata.client.client as client
477
-
478
- # This function executes a list of Python scripts in the order the user lists them
479
- from wxdata.utils.scripts import run_external_scripts
480
-
481
-
482
-
483
-
484
-
485
-
293
+ """
294
+ This file hosts all of the functions in the WxData Python library that directly interact with the user.
295
+
296
+ (C) Eric J. Drewitz 2025-2026
297
+ """
298
+
299
+
300
+ """
301
+ This section of functions are for users who want full wxdata functionality.
302
+
303
+ These functions do the following:
304
+
305
+ 1) Scan for the latest available data.
306
+ - If the data on your local machine is not up to date, new data will download automatically.
307
+ - If the data on your local machine is up to date, new data download is bypassed.
308
+ - This is a safeguard that prevents excessive requests on the data servers.
309
+
310
+ 2) Builds the wxdata directory to store the weather data files.
311
+ - Scans for the directory branch and builds the branch if it does not exist.
312
+
313
+ 3) Downloads the data.
314
+ - Users can define their VPN/PROXY IP Address as a (dict) in their script and pass their
315
+ VPN/PROXY IP address into the function to avoid SSL Certificate errors when requesting data.
316
+ - Algorithm allows for up to 5 retries with a 30 second break between each retry to resolve connection
317
+ interruptions while not overburdening the data servers.
318
+
319
+ 4) Pre-processes the data via filename formatting and correctly filing in the wxdata directory.
320
+
321
+ 5) Post-processing by doing the following tasks:
322
+ - Remapping GRIB2 variable keys into plain language variable keys.
323
+ - Fixing dataset build errors and grouping all variables together.
324
+ - Transforms longitude from 0 to 360 degrees into -180 to 180 degrees.
325
+ - Subsetting the data to the latitude/longitude boundaries specified by the user.
326
+ - Converting temperature from kelvin to units the user wants (default is Celsius).
327
+ - Returning a post-processed xarray.array to the user.
328
+
329
+ 6) Preserves system memory by doing the following:
330
+ - Deleting old data files before each new download.
331
+ - When clear_recycle_bin=True, the user's recycle bin is also cleared.
332
+ """
333
+
334
+ # Global Forecast System (GFS)
335
+ # - GFS 0.25x0.25 Degree Primary Parameters
336
+ # - GFS 0.25x0.25 Degree Secondary Parameters
337
+ # - GFS 0.5x0.5 Degree
338
+ from wxdata.gfs.gfs import(
339
+ gfs_0p25,
340
+ gfs_0p25_secondary_parameters,
341
+ gfs_0p50
342
+ )
343
+
344
+ # AI Global Forecast System (AIGFS)
345
+ from wxdata.aigfs.aigfs import aigfs
346
+
347
+ # Hybrid Global Ensemble Forecast System (HGEFS)
348
+ from wxdata.hgefs.hgefs import hgefs_mean_spread
349
+
350
+ # Global Ensemble Forecast System (GEFS)
351
+ # - GEFS 0.5x0.5 Degree Primary Parameters
352
+ # - GEFS 0.5x0.5 Degree Secondary Parameters
353
+ # - GEFS 0.25x0.25 Degree
354
+ from wxdata.gefs.gefs import(
355
+ gefs_0p50,
356
+ gefs_0p50_secondary_parameters,
357
+ gefs_0p25
358
+ )
359
+
360
+ # AI Global Ensemble Forecast System (AIGEFS)
361
+ # - AIGEFS Pressure Members (Pressure Level Variables)
362
+ # - AIGEFS Surface Members (Surface Level Variables)
363
+ # - AIGEFS Single (AIGEFS Ensemble Mean & AIGEFS Ensemble Spread)
364
+ from wxdata.aigefs.aigefs import(
365
+ aigefs_pressure_members,
366
+ aigefs_surface_members,
367
+ aigefs_single
368
+ )
369
+
370
+ # European Centre for Medium-Range Weather Forecasts (ECMWF)
371
+ # - ECMWF IFS
372
+ # - ECMWF IFS Ensemble
373
+ # - ECMWF AIFS
374
+ # - ECMWF AIFS Ensemble
375
+ # - ECMWF IFS Wave
376
+ # - ECMWF IFS Wave Ensemble
377
+ from wxdata.ecmwf.ecmwf import(
378
+ ecmwf_ifs,
379
+ ecmwf_ifs_ens,
380
+ ecmwf_aifs,
381
+ ecmwf_aifs_ens,
382
+ ecmwf_ifs_wave,
383
+ ecmwf_ifs_wave_ens
384
+ )
385
+
386
+ # FEMS RAWS Network
387
+ # - Single Station Weather Observations
388
+ # - Single Station Fuels Observations
389
+ # - Multi Station Weather Observations
390
+ # - Multi Station Fuels Observations
391
+ # - Current Weather Observations - Multi Station
392
+ # - Current Fuels Observations - Multi Station
393
+ # - Current Weather Observations - All Stations By State
394
+ # - Current Fuels Observations - All Stations By State
395
+ # - Single Station NFDRS Forecast
396
+ # - Multi Station NFDRS Forecast
397
+ # - Single Station Weather Forecast
398
+ # - Multi Station Weather Forecast
399
+ from wxdata.fems.fems import(
400
+ get_single_raws_station_weather_observations,
401
+ get_single_raws_station_fuels_observations,
402
+ get_multi_raws_station_weather_observations,
403
+ get_multi_raws_station_fuels_observations,
404
+ get_current_multi_raws_station_weather_observations,
405
+ get_current_multi_raws_station_fuels_observations,
406
+ get_current_all_raws_station_weather_observations,
407
+ get_current_all_raws_station_fuels_observations,
408
+ get_single_raws_station_nfdrs_forecast,
409
+ get_multi_raws_station_nfdrs_forecast,
410
+ get_single_raws_station_weather_forecast,
411
+ get_multi_raws_station_weather_forecast
412
+ )
413
+
414
+ # FEMS RAWS Network
415
+ # - Single Station Meta Data
416
+ # - Multi Station Meta Data
417
+ from wxdata.fems.meta_data import(
418
+ get_single_raws_station_meta_data,
419
+ get_multi_raws_station_meta_data
420
+ )
421
+
422
+ # Real-Time Mesoscale Analysis (RTMA)
423
+ # - RTMA Latest
424
+ # - RTMA Comparison Between Two Times
425
+ from wxdata.rtma.rtma import(
426
+ rtma,
427
+ rtma_comparison
428
+ )
429
+
430
+ # NOAA
431
+ # - Storm Prediction Center Outlooks
432
+ # - Climate Prediction Center Outlooks
433
+ # - National Weather Service Forecasts
434
+ from wxdata.noaa.nws import(
435
+ get_ndfd_grids,
436
+ get_cpc_outlook
437
+ )
438
+
439
+ # Observed Upper-Air Soundings
440
+ # (University of Wyoming Database)
441
+ from wxdata.soundings.wyoming_soundings import get_observed_sounding_data
442
+
443
+ # METAR Observational Data (From NOAA)
444
+ from wxdata.metars.metar_obs import download_metar_data
445
+
446
+ """
447
+ This section hosts all the functions and modules that involve post-processing the data.
448
+ These are the functions and modules that:
449
+
450
+ 1) Re-map the GRIB2 Variable Keys into Plain Language Keys
451
+ 2) Build the xarray.array of the various datasets.
452
+
453
+ """
454
+
455
+
456
+ # Global Forecast System (GFS)
457
+ import wxdata.post_processors.gfs_post_processing as gfs_post_processing
458
+
459
+ # AI Global Forecast System (AIGFS)
460
+ import wxdata.post_processors.aigfs_post_processing as aigfs_post_processing
461
+
462
+ # Hybrid Global Ensemble Forecast System (HGEFS)
463
+ import wxdata.post_processors.hgefs_post_processing as hgefs_post_processing
464
+
465
+ # Global Ensemble Forecast System (GEFS)
466
+ import wxdata.post_processors.gefs_post_processing as gefs_post_processing
467
+
468
+ # AI Global Ensemble Forecast System (AIGEFS)
469
+ import wxdata.post_processors.aigefs_post_processing as aigefs_post_processing
470
+
471
+ # European Centre for Medium-Range Weather Forecasts (ECMWF)
472
+ import wxdata.post_processors.ecmwf_post_processing as ecmwf_post_processing
473
+
474
+ # Real-Time Mesoscale Analysis (RTMA)
475
+ from wxdata.post_processors.rtma_post_processing import process_rtma_data
476
+
477
+
478
+ """
479
+ This section hosts the utility functions accessable to the user.
480
+
481
+ These functions provide helpful utilities when analyzing weather data.
482
+
483
+ Utility functions are geared towards the following types of users:
484
+
485
+ 1) Users who want to use their own scripts to download the data however, they
486
+ would like to use the wxdata post-processing capabilities.
487
+
488
+ 2) Users who want to make hemispheric graphics or any graphics where cyclic points
489
+ resolve missing data along the prime meridian or international dateline.
490
+ """
491
+ # WxData function using cartopy to make cyclic points
492
+ # This is for users who wish to make graphics that cross the -180/180 degree longitude line
493
+ # This is commonly used for Hemispheric graphics
494
+ # Function that converts the longitude dimension in an xarray.array
495
+ # From 0 to 360 to -180 to 180
496
+ from wxdata.utils.coords import(
497
+ cyclic_point,
498
+ shift_longitude
499
+ )
500
+
501
+ # Functions to pixel query and query pixels along a line between points A and B
502
+ # Function to interpolate to n amount of points in between x and y values respectively
503
+ from wxdata.utils.tools import(
504
+ pixel_query,
505
+ line_query,
506
+ linear_anti_aliasing
507
+ )
508
+
509
+ """
510
+ This section hosts the various data clients that retrieve various types of data.
511
+
512
+ These clients can be easily configured to work on VPN/PROXY connections.
513
+ """
514
+
515
+ # These are the wxdata HTTPS Clients with full VPN/PROXY Support
516
+ # Client List:
517
+ # - get_gridded_data()
518
+ # - get_csv_data()
519
+ # - get_excel_data()
520
+ # - get_xmacis_data()
521
+ import wxdata.client.client as client
522
+
523
+ # This function executes a list of Python scripts in the order the user lists them
524
+ from wxdata.utils.scripts import run_external_scripts
486
525
 
487
526
  ## Citations
488
527
 
@@ -513,6 +552,8 @@ ii) Set up a new environment with an earlier version of Python (must be Python >
513
552
 
514
553
  **ecmwf-opendata**: European Centre for Medium-Range Weather Forecasts (2026). ecmwf-opendata[Computer software]. GitHub. https://github.com/ecmwf/ecmwf-opendata
515
554
 
555
+ **openpyxl**: Gazoni, E., & Clark, C. (2024). openpyxl: A Python library to read/write Excel 2010 xlsx/xlsm/xltx/xltm files (Version 3.1.5) [Computer software]. https://openpyxl.readthedocs.io/
556
+
516
557
  ## Data Sources
517
558
 
518
559
  1) [National Oceanic and Atmospheric Administration/National Center for Environmental Prediction](https://nomads.ncep.noaa.gov/)
@@ -522,5 +563,6 @@ ii) Set up a new environment with an earlier version of Python (must be Python >
522
563
  5) [National Oceanic and Atmospheric Administration/Aviation Weather Center](https://aviationweather.gov/)
523
564
  6) [National Oceanic and Atmospheric Administration/Climate Prediction Center](https://www.cpc.ncep.noaa.gov/products/GIS/GIS_DATA/us_tempprcpfcst/index.php)
524
565
  7) [Applied Climate Information System (ACIS)](https://www.rcc-acis.org/docs_webservices.html)
566
+ 8) [USDA Fire Environment Mapping System](https://fems.fs2c.usda.gov/download)
525
567
 
526
568