wxdata 2.0.4__tar.gz → 2.1__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 (105) hide show
  1. {wxdata-2.0.4/src/wxdata.egg-info → wxdata-2.1}/PKG-INFO +326 -254
  2. {wxdata-2.0.4 → wxdata-2.1}/README.md +325 -253
  3. {wxdata-2.0.4 → wxdata-2.1}/pyproject.toml +1 -1
  4. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/__init__.py +29 -1
  5. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/aigefs/aigefs.py +3 -0
  6. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/aigfs/aigfs.py +2 -0
  7. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/cfs/cfs.py +3 -0
  8. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/ecmwf/ecmwf.py +24 -1
  9. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/gefs/gefs.py +9 -0
  10. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/gfs/gfs.py +8 -0
  11. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/hgefs/hgefs.py +3 -0
  12. wxdata-2.1/src/wxdata/open_meteo_api/utils.py +127 -0
  13. wxdata-2.1/src/wxdata/open_meteo_api/weather_forecasts/__init__.py +8 -0
  14. wxdata-2.1/src/wxdata/open_meteo_api/weather_forecasts/cmc.py +557 -0
  15. wxdata-2.1/src/wxdata/open_meteo_api/weather_forecasts/current_weather.py +126 -0
  16. wxdata-2.1/src/wxdata/open_meteo_api/weather_forecasts/dwd.py +576 -0
  17. wxdata-2.1/src/wxdata/open_meteo_api/weather_forecasts/ecmwf.py +1869 -0
  18. wxdata-2.1/src/wxdata/open_meteo_api/weather_forecasts/jma.py +415 -0
  19. wxdata-2.1/src/wxdata/open_meteo_api/weather_forecasts/meteo_france.py +596 -0
  20. wxdata-2.1/src/wxdata/open_meteo_api/weather_forecasts/noaa.py +1931 -0
  21. wxdata-2.1/src/wxdata/open_meteo_api/weather_forecasts/ukmo.py +156 -0
  22. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/post_processors/aigefs_post_processing.py +3 -0
  23. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/post_processors/aigfs_post_processing.py +2 -0
  24. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/post_processors/cfs_post_processing.py +2 -0
  25. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/post_processors/ecmwf_post_processing.py +2 -0
  26. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/post_processors/gefs_post_processing.py +2 -0
  27. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/post_processors/gfs_post_processing.py +3 -0
  28. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/post_processors/hgefs_post_processing.py +2 -0
  29. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/post_processors/rtma_post_processing.py +2 -0
  30. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/rtma/rtma.py +3 -0
  31. wxdata-2.1/src/wxdata/utils/warnings.py +45 -0
  32. {wxdata-2.0.4 → wxdata-2.1/src/wxdata.egg-info}/PKG-INFO +326 -254
  33. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata.egg-info/SOURCES.txt +11 -0
  34. {wxdata-2.0.4 → wxdata-2.1}/LICENSE +0 -0
  35. {wxdata-2.0.4 → wxdata-2.1}/setup.cfg +0 -0
  36. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/aigefs/__init__.py +0 -0
  37. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/aigefs/paths.py +0 -0
  38. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/aigefs/url_scanners.py +0 -0
  39. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/aigfs/__init__.py +0 -0
  40. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/aigfs/paths.py +0 -0
  41. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/aigfs/url_scanners.py +0 -0
  42. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/calc/__init__.py +0 -0
  43. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/calc/derived_fields.py +0 -0
  44. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/calc/kinematics.py +0 -0
  45. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/calc/thermodynamics.py +0 -0
  46. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/calc/unit_conversion.py +0 -0
  47. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/cfs/__init__.py +0 -0
  48. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/cfs/file_scanner.py +0 -0
  49. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/cfs/url_scanners.py +0 -0
  50. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/client/__init__.py +0 -0
  51. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/client/byte_range.py +0 -0
  52. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/client/client.py +0 -0
  53. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/client/level_coords.py +0 -0
  54. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/ecmwf/__init__.py +0 -0
  55. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/ecmwf/file_funcs.py +0 -0
  56. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/ecmwf/keys.py +0 -0
  57. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/ecmwf/parsers.py +0 -0
  58. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/ecmwf/paths.py +0 -0
  59. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/ecmwf/url_scanners.py +0 -0
  60. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/fems/__init__.py +0 -0
  61. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/fems/meta_data.py +0 -0
  62. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/fems/observations.py +0 -0
  63. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/gefs/__init__.py +0 -0
  64. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/gefs/exception_messages.py +0 -0
  65. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/gefs/file_funcs.py +0 -0
  66. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/gefs/paths.py +0 -0
  67. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/gefs/url_scanners.py +0 -0
  68. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/gfs/__init__.py +0 -0
  69. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/gfs/exception_messages.py +0 -0
  70. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/gfs/paths.py +0 -0
  71. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/gfs/url_scanners.py +0 -0
  72. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/hgefs/__init__.py +0 -0
  73. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/hgefs/paths.py +0 -0
  74. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/hgefs/url_scanner.py +0 -0
  75. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/metars/__init__.py +0 -0
  76. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/metars/_clean_data.py +0 -0
  77. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/metars/metar_obs.py +0 -0
  78. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/noaa/__init__.py +0 -0
  79. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/noaa/nws.py +0 -0
  80. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/post_processors/__init__.py +0 -0
  81. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/radar/__init__.py +0 -0
  82. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/radar/nexrad2.py +0 -0
  83. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/radar/url_scanner.py +0 -0
  84. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/rtma/__init__.py +0 -0
  85. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/rtma/file_funcs.py +0 -0
  86. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/rtma/file_scanner.py +0 -0
  87. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/rtma/keys.py +0 -0
  88. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/rtma/url_scanners.py +0 -0
  89. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/soundings/__init__.py +0 -0
  90. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/soundings/_exceptions.py +0 -0
  91. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/soundings/wyoming_soundings.py +0 -0
  92. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/utils/__init__.py +0 -0
  93. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/utils/coords.py +0 -0
  94. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/utils/exceptions.py +0 -0
  95. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/utils/file_funcs.py +0 -0
  96. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/utils/file_scanner.py +0 -0
  97. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/utils/nomads_gribfilter.py +0 -0
  98. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/utils/progress_bar.py +0 -0
  99. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/utils/recycle_bin.py +0 -0
  100. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/utils/scripts.py +0 -0
  101. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/utils/tools.py +0 -0
  102. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata/utils/xmacis2_cleanup.py +0 -0
  103. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata.egg-info/dependency_links.txt +0 -0
  104. {wxdata-2.0.4 → wxdata-2.1}/src/wxdata.egg-info/requires.txt +0 -0
  105. {wxdata-2.0.4 → wxdata-2.1}/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: 2.0.4
3
+ Version: 2.1
4
4
  Summary: A Python package of end-to-end weather data clients & raw data clients with VPN/PROXY support, data processors that decode variable keys from GRIB format into a plain-language format & various tools for assisting Python automated workflows, querying meteorological datasets and filling gaps in meteorological data.
5
5
  Author: Eric J. Drewitz
6
6
  Project-URL: Documentation, https://github.com/edrewitz/wxdata/blob/main/Documentation/Landing%20Page.md
@@ -242,6 +242,7 @@ End-To-End clients with multiple servers to pull data from can find the differen
242
242
  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)
243
243
  20) [Downloading NEXRAD II Radar Data and then plotting it in Py-ART](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/NEXRADII.ipynb)
244
244
  21) [Downloading 30 Days of 6hrly CFS Data and plotting the 30-Day time-mean for mean sea level pressure across the Northern Hemisphere](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/cfs.ipynb)
245
+ 22) [Download all 50 Ensemble Members of the ECMWF IFS Ensemble for 2-Meter Temperature Using the Open-Meteo API and Make an Ensemble Spaghetti Plot](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/ecmwf_ifs_ens_spaghetti.ipynb)
245
246
 
246
247
  *Advanced Users*
247
248
  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)
@@ -260,6 +261,7 @@ End-To-End clients with multiple servers to pull data from can find the differen
260
261
  4. [Data Querying Tools](https://github.com/edrewitz/WxData?tab=readme-ov-file#data-querying-tools)
261
262
  5. [Data Transformation & Gap Filling Tools](https://github.com/edrewitz/WxData?tab=readme-ov-file#data-transformation--gap-filling-tools)
262
263
  6. [Automated Python Workflow Tools](https://github.com/edrewitz/WxData?tab=readme-ov-file#automated-python-workflow-tools)
264
+ 7. [Open-Meteo API](https://github.com/edrewitz/WxData/blob/main/README.md#open-meteo-api)
263
265
 
264
266
  ### End-To-End Data Clients
265
267
 
@@ -419,262 +421,331 @@ End-To-End clients with multiple servers to pull data from can find the differen
419
421
 
420
422
  ---------------------------------------
421
423
 
424
+ ### Open-Meteo API
425
+
426
+ ***Current Weather***
427
+ 1. [Current Weather](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20current%20weather.md#open-meteo-api-current-weather)
428
+
429
+ ***National Oceanic and Atmospheric Administrationn (NOAA)***
430
+ 1. [GFS](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20noaa%20gfs.md#open-meteo-api-gfs)
431
+ 2. [GEFS](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20noaa%20gefs.md#open-meteo-api-gefs)
432
+ 3. [AIGFS](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20noaa%20aigfs.md#open-meteo-api-aigfs)
433
+ 4. [AIGEFS](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20noaa%20aigefs.md#open-meteo-api-aigefs)
434
+ 5. [HGEFS](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20noaa%20hgefs.md#open-meteo-api-hgefs)
435
+ 6. [NBM](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20noaa%20nbm.md#open-meteo-api-nbm)
436
+
437
+ ***European Centre for Medium-Range Weather Forecasts (ECMWF)***
438
+ 1. [IFS](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20ecmwf%20ifs.md#open-meteo-api-ecmwf-ifs)
439
+ 2. [AIFS](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20ecmwf%20aifs.md#open-meteo-api-ecmwf-aifs)
440
+ 3. [IFS HRES](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20ecmwf%20ifs%20hres.md#open-meteo-api-ecmwf-ifs-hres)
441
+ 4. [IFS Ensemble](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20ecmwf%20ifs%20ens.md#open-meteo-api-ecmwf-ifs-ensemble)
442
+ 5. [AIFS Ensemble](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20ecmwf%20aifs%20ens.md#open-meteo-api-ecmwf-aifs-ensemble)
443
+
444
+ ***Canadian Meteorological Centre (CMC)***
445
+ 1. [GEM](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20cmc%20gem.md#open-meteo-api-cmc-gem)
446
+ 2. [GEM Ensemble](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20cmc%20gem%20ens.md#open-meteo-api-gem-ensemble)
447
+
448
+ ***Deutscher Wetterdienst (DWD)***
449
+ 1. [ICON](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20dwd%20icon.md#open-meteo-api-dwd-icon)
450
+ 2. [ICON EPS](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20dwd%20icon%20eps.md#open-meteo-api-dwd-icon-eps)
451
+
452
+ ***Meteo-France***
453
+ 1. [ARPEGE](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20meteo%20france%20arpege.md#open-meteo-api-meteo-france-arpege)
454
+
455
+ ***Japan Meteorological Agency (JMA)***
456
+ 1. [JMA](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20jma%20jma.md#open-meteo-api-jma)
457
+
458
+ ***UK Met Office (UKMO)***
459
+ 1. [UKMO Global Ensemble](https://github.com/edrewitz/WxData/blob/main/Documentation/open%20meteo%20api%20ukmo%20global%20ens.md#open-meteo-api-ukmo-global-ensemble)
460
+
461
+ ---------------------------------------
462
+
422
463
  ## Importing Functions from WxData
423
464
 
424
- """
425
- This file hosts all of the functions in the WxData Python library that directly interact with the user.
426
-
427
- (C) Eric J. Drewitz 2025-2026
428
- """
429
-
430
-
431
- """
432
- This section of functions are for users who want full wxdata functionality.
433
-
434
- These functions do the following:
435
-
436
- 1) Scan for the latest available data.
437
- - If the data on your local machine is not up to date, new data will download automatically.
438
- - If the data on your local machine is up to date, new data download is bypassed.
439
- - This is a safeguard that prevents excessive requests on the data servers.
440
-
441
- 2) Builds the wxdata directory to store the weather data files.
442
- - Scans for the directory branch and builds the branch if it does not exist.
443
-
444
- 3) Downloads the data.
445
- - Users can define their VPN/PROXY IP Address as a (dict) in their script and pass their
446
- VPN/PROXY IP address into the function to avoid SSL Certificate errors when requesting data.
447
- - Algorithm allows for up to 5 retries with a 30 second break between each retry to resolve connection
448
- interruptions while not overburdening the data servers.
449
-
450
- 4) Pre-processes the data via filename formatting and correctly filing in the wxdata directory.
451
-
452
- 5) Post-processing by doing the following tasks:
453
- - Remapping GRIB2 variable keys into plain language variable keys.
454
- - Fixing dataset build errors and grouping all variables together.
455
- - Transforms longitude from 0 to 360 degrees into -180 to 180 degrees.
456
- - Subsetting the data to the latitude/longitude boundaries specified by the user.
457
- - Converting temperature from kelvin to units the user wants (default is Celsius).
458
- - Returning a post-processed xarray.array to the user.
459
-
460
- 6) Preserves system memory by doing the following:
461
- - Deleting old data files before each new download.
462
- - When clear_recycle_bin=True, the user's recycle bin is also cleared.
463
- """
464
-
465
- # Global Forecast System (GFS)
466
- # - GFS 0.25x0.25 Degree Primary Parameters
467
- # - GFS 0.25x0.25 Degree Secondary Parameters
468
- # - GFS 0.5x0.5 Degree
469
- from wxdata.gfs.gfs import(
470
- gfs_0p25,
471
- gfs_0p25_secondary_parameters,
472
- gfs_0p50
473
- )
474
-
475
- # AI Global Forecast System (AIGFS)
476
- from wxdata.aigfs.aigfs import aigfs
477
-
478
- # Hybrid Global Ensemble Forecast System (HGEFS)
479
- from wxdata.hgefs.hgefs import hgefs_mean_spread
480
-
481
- # Global Ensemble Forecast System (GEFS)
482
- # - GEFS 0.5x0.5 Degree Primary Parameters
483
- # - GEFS 0.5x0.5 Degree Secondary Parameters
484
- # - GEFS 0.25x0.25 Degree
485
- from wxdata.gefs.gefs import(
486
- gefs_0p50,
487
- gefs_0p50_secondary_parameters,
488
- gefs_0p25
489
- )
490
-
491
- # Climate Forecast System (CFS)
492
- # - CFS Flux Products
493
- # - CFS Pressure Products
494
- from wxdata.cfs.cfs import(
495
- cfs_flux,
496
- cfs_pressure
497
- )
498
-
499
- # AI Global Ensemble Forecast System (AIGEFS)
500
- # - AIGEFS Pressure Members (Pressure Level Variables)
501
- # - AIGEFS Surface Members (Surface Level Variables)
502
- # - AIGEFS Single (AIGEFS Ensemble Mean & AIGEFS Ensemble Spread)
503
- from wxdata.aigefs.aigefs import(
504
- aigefs_pressure_members,
505
- aigefs_surface_members,
506
- aigefs_single
507
- )
508
-
509
- # European Centre for Medium-Range Weather Forecasts (ECMWF)
510
- # - ECMWF IFS
511
- # - ECMWF IFS Ensemble
512
- # - ECMWF AIFS
513
- # - ECMWF AIFS Ensemble
514
- # - ECMWF IFS Wave
515
- # - ECMWF IFS Wave Ensemble
516
- from wxdata.ecmwf.ecmwf import(
517
- ecmwf_ifs,
518
- ecmwf_ifs_ens,
519
- ecmwf_aifs,
520
- ecmwf_aifs_ens,
521
- ecmwf_ifs_wave,
522
- ecmwf_ifs_wave_ens
523
- )
524
-
525
- # FEMS RAWS Network
526
- # - Single Station Weather Observations
527
- # - Single Station Fuels Observations
528
- # - Multi Station Weather Observations
529
- # - Multi Station Fuels Observations
530
- # - Current Weather Observations - Multi Station
531
- # - Current Fuels Observations - Multi Station
532
- # - Current Weather Observations - All Stations By State
533
- # - Current Fuels Observations - All Stations By State
534
- # - Single Station NFDRS Forecast
535
- # - Multi Station NFDRS Forecast
536
- # - Single Station Weather Forecast
537
- # - Multi Station Weather Forecast
538
- from wxdata.fems.observations import(
539
- get_single_raws_station_weather_observations,
540
- get_single_raws_station_fuels_observations,
541
- get_multi_raws_station_weather_observations,
542
- get_multi_raws_station_fuels_observations,
543
- get_current_multi_raws_station_weather_observations,
544
- get_current_multi_raws_station_fuels_observations,
545
- get_current_all_raws_station_weather_observations,
546
- get_current_all_raws_station_fuels_observations,
547
- get_single_raws_station_nfdrs_forecast,
548
- get_multi_raws_station_nfdrs_forecast,
549
- get_single_raws_station_weather_forecast,
550
- get_multi_raws_station_weather_forecast
551
- )
552
-
553
- # FEMS RAWS Network
554
- # - Single Station Meta Data
555
- # - Multi Station Meta Data
556
- from wxdata.fems.meta_data import(
557
- get_single_raws_station_meta_data,
558
- get_multi_raws_station_meta_data
559
- )
560
-
561
- # Real-Time Mesoscale Analysis (RTMA)
562
- # - RTMA Latest
563
- # - RTMA Comparison Between Two Times
564
- from wxdata.rtma.rtma import(
565
- rtma,
566
- rtma_comparison
567
- )
568
-
569
- # NOAA
570
- # - Storm Prediction Center Outlooks
571
- # - Climate Prediction Center Outlooks
572
- # - National Weather Service Forecasts
573
- from wxdata.noaa.nws import(
574
- get_ndfd_grids,
575
- get_cpc_outlook
576
- )
577
-
578
- # Observed Upper-Air Soundings
579
- # (University of Wyoming Database)
580
- from wxdata.soundings.wyoming_soundings import get_observed_sounding_data
581
-
582
- # METAR Observational Data (From NOAA)
583
- from wxdata.metars.metar_obs import download_metar_data
584
-
585
- # NEXRAD2 Radar Data
586
- # - NEXRAD2 Radar Single Station
587
- # - NEXRAD2 Radar Multi Station
588
- from wxdata.radar.nexrad2 import(
589
- download_current_single_station_nexrad2_radar_data,
590
- download_current_multi_station_nexrad2_radar_data
591
- )
592
-
593
- """
594
- This section hosts all the functions and modules that involve post-processing the data.
595
- These are the functions and modules that:
596
-
597
- 1) Re-map the GRIB2 Variable Keys into Plain Language Keys
598
- 2) Build the xarray.array of the various datasets.
599
-
600
- """
601
-
602
-
603
- # Global Forecast System (GFS)
604
- import wxdata.post_processors.gfs_post_processing as gfs_post_processing
605
-
606
- # AI Global Forecast System (AIGFS)
607
- import wxdata.post_processors.aigfs_post_processing as aigfs_post_processing
608
-
609
- # Hybrid Global Ensemble Forecast System (HGEFS)
610
- import wxdata.post_processors.hgefs_post_processing as hgefs_post_processing
611
-
612
- # Global Ensemble Forecast System (GEFS)
613
- import wxdata.post_processors.gefs_post_processing as gefs_post_processing
614
-
615
- # AI Global Ensemble Forecast System (AIGEFS)
616
- import wxdata.post_processors.aigefs_post_processing as aigefs_post_processing
617
-
618
- # European Centre for Medium-Range Weather Forecasts (ECMWF)
619
- import wxdata.post_processors.ecmwf_post_processing as ecmwf_post_processing
620
-
621
- # Climate Forecast System (CFS)
622
- import wxdata.post_processors.cfs_post_processing as cfs_post_processing
623
-
624
- # Real-Time Mesoscale Analysis (RTMA)
625
- from wxdata.post_processors.rtma_post_processing import process_rtma_data
626
-
627
-
628
- """
629
- This section hosts the utility functions accessable to the user.
630
-
631
- These functions provide helpful utilities when analyzing weather data.
632
-
633
- Utility functions are geared towards the following types of users:
634
-
635
- 1) Users who want to use their own scripts to download the data however, they
636
- would like to use the wxdata post-processing capabilities.
637
-
638
- 2) Users who want to make hemispheric graphics or any graphics where cyclic points
639
- resolve missing data along the prime meridian or international dateline.
640
- """
641
- # WxData function using cartopy to make cyclic points
642
- # This is for users who wish to make graphics that cross the -180/180 degree longitude line
643
- # This is commonly used for Hemispheric graphics
644
- # Function that converts the longitude dimension in an xarray.array
645
- # From 0 to 360 to -180 to 180
646
- from wxdata.utils.coords import(
647
- cyclic_point,
648
- shift_longitude
649
- )
650
-
651
- # Functions to pixel query and query pixels along a line between points A and B
652
- # Function to interpolate to n amount of points in between x and y values respectively
653
- from wxdata.utils.tools import(
654
- pixel_query,
655
- line_query,
656
- linear_anti_aliasing
657
- )
658
-
659
- # This function executes a list of Python scripts in the order the user lists them
660
- from wxdata.utils.scripts import run_external_scripts
661
-
662
- """
663
- This section hosts the various data clients that retrieve various types of data.
664
-
665
- These clients can be easily configured to work on VPN/PROXY connections.
666
- """
667
-
668
- # These are the wxdata HTTPS Clients with full VPN/PROXY Support
669
- # Client List:
670
- # - get_gridded_data()
671
- # - get_csv_data()
672
- # - get_excel_data()
673
- # - get_xmacis_data()
674
- # - get_aws_open_data()
675
- # - byte_range_request()
676
- import wxdata.client.client as client
465
+ ```Python
466
+ """
467
+ This file hosts all of the functions in the WxData Python library that directly interact with the user.
468
+
469
+ (C) Eric J. Drewitz 2025-2026
470
+ """
471
+
472
+
473
+ """
474
+ This section of functions are for users who want full wxdata functionality.
677
475
 
476
+ These functions do the following:
477
+
478
+ 1) Scan for the latest available data.
479
+ - If the data on your local machine is not up to date, new data will download automatically.
480
+ - If the data on your local machine is up to date, new data download is bypassed.
481
+ - This is a safeguard that prevents excessive requests on the data servers.
482
+
483
+ 2) Builds the wxdata directory to store the weather data files.
484
+ - Scans for the directory branch and builds the branch if it does not exist.
485
+
486
+ 3) Downloads the data.
487
+ - Users can define their VPN/PROXY IP Address as a (dict) in their script and pass their
488
+ VPN/PROXY IP address into the function to avoid SSL Certificate errors when requesting data.
489
+ - Algorithm allows for up to 5 retries with a 30 second break between each retry to resolve connection
490
+ interruptions while not overburdening the data servers.
491
+
492
+ 4) Pre-processes the data via filename formatting and correctly filing in the wxdata directory.
493
+
494
+ 5) Post-processing by doing the following tasks:
495
+ - Remapping GRIB2 variable keys into plain language variable keys.
496
+ - Fixing dataset build errors and grouping all variables together.
497
+ - Transforms longitude from 0 to 360 degrees into -180 to 180 degrees.
498
+ - Subsetting the data to the latitude/longitude boundaries specified by the user.
499
+ - Converting temperature from kelvin to units the user wants (default is Celsius).
500
+ - Returning a post-processed xarray.array to the user.
501
+
502
+ 6) Preserves system memory by doing the following:
503
+ - Deleting old data files before each new download.
504
+ - When clear_recycle_bin=True, the user's recycle bin is also cleared.
505
+ """
506
+
507
+ # Global Forecast System (GFS)
508
+ # - GFS 0.25x0.25 Degree Primary Parameters
509
+ # - GFS 0.25x0.25 Degree Secondary Parameters
510
+ # - GFS 0.5x0.5 Degree
511
+ from wxdata.gfs.gfs import(
512
+ gfs_0p25,
513
+ gfs_0p25_secondary_parameters,
514
+ gfs_0p50
515
+ )
516
+
517
+ # AI Global Forecast System (AIGFS)
518
+ from wxdata.aigfs.aigfs import aigfs
519
+
520
+ # Hybrid Global Ensemble Forecast System (HGEFS)
521
+ from wxdata.hgefs.hgefs import hgefs_mean_spread
522
+
523
+ # Global Ensemble Forecast System (GEFS)
524
+ # - GEFS 0.5x0.5 Degree Primary Parameters
525
+ # - GEFS 0.5x0.5 Degree Secondary Parameters
526
+ # - GEFS 0.25x0.25 Degree
527
+ from wxdata.gefs.gefs import(
528
+ gefs_0p50,
529
+ gefs_0p50_secondary_parameters,
530
+ gefs_0p25
531
+ )
532
+
533
+ # Climate Forecast System (CFS)
534
+ # - CFS Flux Products
535
+ # - CFS Pressure Products
536
+ from wxdata.cfs.cfs import(
537
+ cfs_flux,
538
+ cfs_pressure
539
+ )
540
+
541
+ # AI Global Ensemble Forecast System (AIGEFS)
542
+ # - AIGEFS Pressure Members (Pressure Level Variables)
543
+ # - AIGEFS Surface Members (Surface Level Variables)
544
+ # - AIGEFS Single (AIGEFS Ensemble Mean & AIGEFS Ensemble Spread)
545
+ from wxdata.aigefs.aigefs import(
546
+ aigefs_pressure_members,
547
+ aigefs_surface_members,
548
+ aigefs_single
549
+ )
550
+
551
+ # European Centre for Medium-Range Weather Forecasts (ECMWF)
552
+ # - ECMWF IFS
553
+ # - ECMWF IFS Ensemble
554
+ # - ECMWF AIFS
555
+ # - ECMWF AIFS Ensemble
556
+ # - ECMWF IFS Wave
557
+ # - ECMWF IFS Wave Ensemble
558
+ from wxdata.ecmwf.ecmwf import(
559
+ ecmwf_ifs,
560
+ ecmwf_ifs_ens,
561
+ ecmwf_aifs,
562
+ ecmwf_aifs_ens,
563
+ ecmwf_ifs_wave,
564
+ ecmwf_ifs_wave_ens
565
+ )
566
+
567
+ # FEMS RAWS Network
568
+ # - Single Station Weather Observations
569
+ # - Single Station Fuels Observations
570
+ # - Multi Station Weather Observations
571
+ # - Multi Station Fuels Observations
572
+ # - Current Weather Observations - Multi Station
573
+ # - Current Fuels Observations - Multi Station
574
+ # - Current Weather Observations - All Stations By State
575
+ # - Current Fuels Observations - All Stations By State
576
+ # - Single Station NFDRS Forecast
577
+ # - Multi Station NFDRS Forecast
578
+ # - Single Station Weather Forecast
579
+ # - Multi Station Weather Forecast
580
+ from wxdata.fems.observations import(
581
+ get_single_raws_station_weather_observations,
582
+ get_single_raws_station_fuels_observations,
583
+ get_multi_raws_station_weather_observations,
584
+ get_multi_raws_station_fuels_observations,
585
+ get_current_multi_raws_station_weather_observations,
586
+ get_current_multi_raws_station_fuels_observations,
587
+ get_current_all_raws_station_weather_observations,
588
+ get_current_all_raws_station_fuels_observations,
589
+ get_single_raws_station_nfdrs_forecast,
590
+ get_multi_raws_station_nfdrs_forecast,
591
+ get_single_raws_station_weather_forecast,
592
+ get_multi_raws_station_weather_forecast
593
+ )
594
+
595
+ # FEMS RAWS Network
596
+ # - Single Station Meta Data
597
+ # - Multi Station Meta Data
598
+ from wxdata.fems.meta_data import(
599
+ get_single_raws_station_meta_data,
600
+ get_multi_raws_station_meta_data
601
+ )
602
+
603
+ # Real-Time Mesoscale Analysis (RTMA)
604
+ # - RTMA Latest
605
+ # - RTMA Comparison Between Two Times
606
+ from wxdata.rtma.rtma import(
607
+ rtma,
608
+ rtma_comparison
609
+ )
610
+
611
+ # NOAA
612
+ # - Storm Prediction Center Outlooks
613
+ # - Climate Prediction Center Outlooks
614
+ # - National Weather Service Forecasts
615
+ from wxdata.noaa.nws import(
616
+ get_ndfd_grids,
617
+ get_cpc_outlook
618
+ )
619
+
620
+ # Observed Upper-Air Soundings
621
+ # (University of Wyoming Database)
622
+ from wxdata.soundings.wyoming_soundings import get_observed_sounding_data
623
+
624
+ # METAR Observational Data (From NOAA)
625
+ from wxdata.metars.metar_obs import download_metar_data
626
+
627
+ # NEXRAD2 Radar Data
628
+ # - NEXRAD2 Radar Single Station
629
+ # - NEXRAD2 Radar Multi Station
630
+ from wxdata.radar.nexrad2 import(
631
+ download_current_single_station_nexrad2_radar_data,
632
+ download_current_multi_station_nexrad2_radar_data
633
+ )
634
+
635
+ """
636
+ This section hosts all the functions and modules that involve post-processing the data.
637
+ These are the functions and modules that:
638
+
639
+ 1) Re-map the GRIB2 Variable Keys into Plain Language Keys
640
+ 2) Build the xarray.array of the various datasets.
641
+
642
+ """
643
+
644
+
645
+ # Global Forecast System (GFS)
646
+ import wxdata.post_processors.gfs_post_processing as gfs_post_processing
647
+
648
+ # AI Global Forecast System (AIGFS)
649
+ import wxdata.post_processors.aigfs_post_processing as aigfs_post_processing
650
+
651
+ # Hybrid Global Ensemble Forecast System (HGEFS)
652
+ import wxdata.post_processors.hgefs_post_processing as hgefs_post_processing
653
+
654
+ # Global Ensemble Forecast System (GEFS)
655
+ import wxdata.post_processors.gefs_post_processing as gefs_post_processing
656
+
657
+ # AI Global Ensemble Forecast System (AIGEFS)
658
+ import wxdata.post_processors.aigefs_post_processing as aigefs_post_processing
659
+
660
+ # European Centre for Medium-Range Weather Forecasts (ECMWF)
661
+ import wxdata.post_processors.ecmwf_post_processing as ecmwf_post_processing
662
+
663
+ # Climate Forecast System (CFS)
664
+ import wxdata.post_processors.cfs_post_processing as cfs_post_processing
665
+
666
+ # Real-Time Mesoscale Analysis (RTMA)
667
+ from wxdata.post_processors.rtma_post_processing import process_rtma_data
668
+
669
+
670
+ """
671
+ This section hosts the utility functions accessable to the user.
672
+
673
+ These functions provide helpful utilities when analyzing weather data.
674
+
675
+ Utility functions are geared towards the following types of users:
676
+
677
+ 1) Users who want to use their own scripts to download the data however, they
678
+ would like to use the wxdata post-processing capabilities.
679
+
680
+ 2) Users who want to make hemispheric graphics or any graphics where cyclic points
681
+ resolve missing data along the prime meridian or international dateline.
682
+ """
683
+ # WxData function using cartopy to make cyclic points
684
+ # This is for users who wish to make graphics that cross the -180/180 degree longitude line
685
+ # This is commonly used for Hemispheric graphics
686
+ # Function that converts the longitude dimension in an xarray.array
687
+ # From 0 to 360 to -180 to 180
688
+ from wxdata.utils.coords import(
689
+ cyclic_point,
690
+ shift_longitude
691
+ )
692
+
693
+ # Functions to pixel query and query pixels along a line between points A and B
694
+ # Function to interpolate to n amount of points in between x and y values respectively
695
+ from wxdata.utils.tools import(
696
+ pixel_query,
697
+ line_query,
698
+ linear_anti_aliasing
699
+ )
700
+
701
+ # This function executes a list of Python scripts in the order the user lists them
702
+ from wxdata.utils.scripts import run_external_scripts
703
+
704
+ """
705
+ This section hosts the various data clients that retrieve various types of data.
706
+
707
+ These clients can be easily configured to work on VPN/PROXY connections.
708
+ """
709
+
710
+ # These are the wxdata HTTPS Clients with full VPN/PROXY Support
711
+ # Client List:
712
+ # - get_gridded_data()
713
+ # - get_csv_data()
714
+ # - get_excel_data()
715
+ # - get_xmacis_data()
716
+ # - get_aws_open_data()
717
+ # - byte_range_request()
718
+ import wxdata.client.client as client
719
+
720
+ """
721
+ ***************************************************************************
722
+ This section hosts the various Python interfaces for the Open-Meteo API.
723
+
724
+ This API can be found at: https://open-meteo.com/
725
+ ***************************************************************************
726
+ """
727
+ #############################
728
+ ### Weather Forecast Data ###
729
+ #############################
730
+
731
+ # - NOAA/NCEP Models
732
+ # - ECMWF Models
733
+ # - DWD Models
734
+ # - Meteo-France Models
735
+ # - CMC Models
736
+ # - Japan Meteorological Agency (JMA) Models
737
+ # - UK Met Office (UKMO)
738
+ # - Current Weather (Model Mosaic)
739
+ import wxdata.open_meteo_api.weather_forecasts.noaa as open_meteo_api_noaa
740
+ import wxdata.open_meteo_api.weather_forecasts.ecmwf as open_meteo_api_ecmwf
741
+ import wxdata.open_meteo_api.weather_forecasts.dwd as open_meteo_api_dwd
742
+ import wxdata.open_meteo_api.weather_forecasts.meteo_france as open_meteo_api_meteo_france
743
+ import wxdata.open_meteo_api.weather_forecasts.cmc as open_meteo_api_cmc
744
+ import wxdata.open_meteo_api.weather_forecasts.jma as open_meteo_api_jma
745
+ import wxdata.open_meteo_api.weather_forecasts.ukmo as open_meteo_api_ukmo
746
+ import wxdata.open_meteo_api.weather_forecasts.current_weather as open_meteo_api_current_weather
747
+
748
+ ```
678
749
  -------------------------------------------
679
750
 
680
751
  ## Citations
@@ -725,5 +796,6 @@ End-To-End clients with multiple servers to pull data from can find the differen
725
796
  7) [Applied Climate Information System (ACIS)](https://www.rcc-acis.org/docs_webservices.html)
726
797
  8) [USDA Fire Environment Mapping System](https://fems.fs2c.usda.gov/download)
727
798
  9) [Amazon AWS Unidata NEXRAD2 Bucket](https://unidata-nexrad-level2.s3.amazonaws.com/index.html)
799
+ 10) [Open-Meteo API](https://open-meteo.com/)
728
800
 
729
801