wxdata 2.1__tar.gz → 2.3__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 (160) hide show
  1. wxdata-2.3/PKG-INFO +1078 -0
  2. wxdata-2.3/README.md +1046 -0
  3. {wxdata-2.1 → wxdata-2.3}/pyproject.toml +3 -3
  4. {wxdata-2.1 → wxdata-2.3}/src/wxdata/__init__.py +171 -51
  5. wxdata-2.3/src/wxdata/api/airnow_api/__init__.py +1 -0
  6. wxdata-2.3/src/wxdata/api/airnow_api/_errors.py +25 -0
  7. wxdata-2.3/src/wxdata/api/airnow_api/observations.py +450 -0
  8. wxdata-2.3/src/wxdata/api/open_meteo_api/air_quality/__init__.py +1 -0
  9. wxdata-2.3/src/wxdata/api/open_meteo_api/air_quality/cams.py +168 -0
  10. wxdata-2.3/src/wxdata/api/open_meteo_api/climate/__init__.py +1 -0
  11. wxdata-2.3/src/wxdata/api/open_meteo_api/climate/climate_data.py +984 -0
  12. wxdata-2.3/src/wxdata/api/open_meteo_api/marine_forecasts/__init__.py +4 -0
  13. wxdata-2.3/src/wxdata/api/open_meteo_api/marine_forecasts/dwd.py +220 -0
  14. wxdata-2.3/src/wxdata/api/open_meteo_api/marine_forecasts/ecmwf.py +187 -0
  15. wxdata-2.3/src/wxdata/api/open_meteo_api/marine_forecasts/meteo_france.py +205 -0
  16. wxdata-2.3/src/wxdata/api/open_meteo_api/marine_forecasts/noaa.py +235 -0
  17. wxdata-2.3/src/wxdata/api/open_meteo_api/seasonal_forecasts/__init__.py +3 -0
  18. wxdata-2.3/src/wxdata/api/open_meteo_api/seasonal_forecasts/ecmwf_daily.py +1404 -0
  19. wxdata-2.3/src/wxdata/api/open_meteo_api/seasonal_forecasts/ecmwf_monthly.py +263 -0
  20. wxdata-2.3/src/wxdata/api/open_meteo_api/seasonal_forecasts/ecmwf_weekly.py +235 -0
  21. wxdata-2.3/src/wxdata/api/open_meteo_api/solar_radiation/__init__.py +1 -0
  22. wxdata-2.3/src/wxdata/api/open_meteo_api/solar_radiation/models.py +157 -0
  23. wxdata-2.3/src/wxdata/api/open_meteo_api/solar_radiation/solar_radiation.py +265 -0
  24. wxdata-2.3/src/wxdata/api/open_meteo_api/weather_forecasts/__init__.py +9 -0
  25. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/cmc.py +2 -2
  26. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/current_weather.py +1 -1
  27. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/dwd.py +4 -4
  28. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/ecmwf.py +6 -6
  29. wxdata-2.3/src/wxdata/api/open_meteo_api/weather_forecasts/google.py +718 -0
  30. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/jma.py +2 -2
  31. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/meteo_france.py +2 -2
  32. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/noaa.py +6 -6
  33. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/api}/open_meteo_api/weather_forecasts/ukmo.py +2 -2
  34. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/fuels_data}/fems/__init__.py +2 -2
  35. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/fuels_data}/fems/observations.py +1 -1
  36. {wxdata-2.1/src/wxdata/noaa → wxdata-2.3/src/wxdata/gridded_forecasts/noaa/nws}/__init__.py +1 -1
  37. wxdata-2.3/src/wxdata/model_data/cmc/cansips/forecast/__init__.py +1 -0
  38. wxdata-2.3/src/wxdata/model_data/cmc/cansips/forecast/cansips_forecast.py +281 -0
  39. wxdata-2.3/src/wxdata/model_data/cmc/cansips/forecast/url_scanner.py +435 -0
  40. wxdata-2.3/src/wxdata/model_data/cmc/cansips/hindcast/__init__.py +1 -0
  41. wxdata-2.3/src/wxdata/model_data/cmc/cansips/hindcast/cansips_hindcast.py +225 -0
  42. wxdata-2.3/src/wxdata/model_data/cmc/cansips/hindcast/file_sorter.py +91 -0
  43. wxdata-2.3/src/wxdata/model_data/cmc/cansips/hindcast/url_scanner.py +297 -0
  44. wxdata-2.3/src/wxdata/model_data/cmc/gdps/__init__.py +1 -0
  45. wxdata-2.3/src/wxdata/model_data/cmc/gdps/gdps.py +1216 -0
  46. wxdata-2.3/src/wxdata/model_data/cmc/gdps/url_scanner.py +559 -0
  47. wxdata-2.3/src/wxdata/model_data/cmc/geps/__init__.py +1 -0
  48. wxdata-2.3/src/wxdata/model_data/cmc/geps/geps.py +662 -0
  49. wxdata-2.3/src/wxdata/model_data/cmc/geps/url_scanner.py +476 -0
  50. wxdata-2.3/src/wxdata/model_data/cmc/hrdps/__init__.py +1 -0
  51. wxdata-2.3/src/wxdata/model_data/cmc/hrdps/hrdps.py +1244 -0
  52. wxdata-2.3/src/wxdata/model_data/cmc/hrdps/url_scanner.py +673 -0
  53. wxdata-2.3/src/wxdata/model_data/cmc/rdps/__init__.py +1 -0
  54. wxdata-2.3/src/wxdata/model_data/cmc/rdps/rdps.py +1259 -0
  55. wxdata-2.3/src/wxdata/model_data/cmc/rdps/url_scanner.py +709 -0
  56. wxdata-2.3/src/wxdata/model_data/cmc/utils/_exceptions.py +100 -0
  57. wxdata-2.3/src/wxdata/model_data/cmc/utils/cmc_keys.py +608 -0
  58. wxdata-2.3/src/wxdata/model_data/cmc/utils/file_scanner.py +67 -0
  59. wxdata-2.3/src/wxdata/model_data/cmc/utils/filenames.py +35 -0
  60. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data}/ecmwf/__init__.py +1 -1
  61. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data}/ecmwf/ecmwf.py +5 -5
  62. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/aigefs/__init__.py +1 -1
  63. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/aigefs/aigefs.py +2 -2
  64. wxdata-2.3/src/wxdata/model_data/noaa/aigfs/__init__.py +3 -0
  65. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/aigfs/aigfs.py +2 -2
  66. wxdata-2.3/src/wxdata/model_data/noaa/cfs/__init__.py +4 -0
  67. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/cfs/cfs.py +2 -2
  68. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gefs/__init__.py +1 -1
  69. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gefs/gefs.py +2 -2
  70. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gefs/url_scanners.py +1 -1
  71. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gfs/__init__.py +1 -1
  72. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gfs/gfs.py +2 -2
  73. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gfs/url_scanners.py +1 -1
  74. wxdata-2.3/src/wxdata/model_data/noaa/hgefs/__init__.py +1 -0
  75. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/hgefs/hgefs.py +2 -2
  76. wxdata-2.3/src/wxdata/model_data/noaa/rtma/__init__.py +4 -0
  77. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/rtma/rtma.py +3 -3
  78. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/rtma/url_scanners.py +1 -1
  79. wxdata-2.3/src/wxdata/observational_data/metars/__init__.py +3 -0
  80. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/observational_data}/metars/metar_obs.py +1 -1
  81. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/observational_data}/radar/__init__.py +1 -1
  82. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/observational_data}/radar/nexrad2.py +1 -1
  83. wxdata-2.3/src/wxdata/observational_data/soundings/__init__.py +3 -0
  84. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/observational_data}/soundings/wyoming_soundings.py +16 -6
  85. {wxdata-2.1 → wxdata-2.3}/src/wxdata/post_processors/__init__.py +1 -0
  86. wxdata-2.3/src/wxdata/post_processors/cmc_post_processing.py +523 -0
  87. {wxdata-2.1 → wxdata-2.3}/src/wxdata/post_processors/gfs_post_processing.py +9 -1
  88. wxdata-2.1/src/wxdata/open_meteo_api/utils.py → wxdata-2.3/src/wxdata/utils/api.py +24 -2
  89. wxdata-2.3/src/wxdata.egg-info/PKG-INFO +1078 -0
  90. wxdata-2.3/src/wxdata.egg-info/SOURCES.txt +147 -0
  91. wxdata-2.1/PKG-INFO +0 -801
  92. wxdata-2.1/README.md +0 -769
  93. wxdata-2.1/src/wxdata/aigfs/__init__.py +0 -3
  94. wxdata-2.1/src/wxdata/cfs/__init__.py +0 -4
  95. wxdata-2.1/src/wxdata/hgefs/__init__.py +0 -1
  96. wxdata-2.1/src/wxdata/metars/__init__.py +0 -3
  97. wxdata-2.1/src/wxdata/open_meteo_api/weather_forecasts/__init__.py +0 -8
  98. wxdata-2.1/src/wxdata/rtma/__init__.py +0 -4
  99. wxdata-2.1/src/wxdata/soundings/__init__.py +0 -3
  100. wxdata-2.1/src/wxdata.egg-info/PKG-INFO +0 -801
  101. wxdata-2.1/src/wxdata.egg-info/SOURCES.txt +0 -103
  102. {wxdata-2.1 → wxdata-2.3}/LICENSE +0 -0
  103. {wxdata-2.1 → wxdata-2.3}/setup.cfg +0 -0
  104. {wxdata-2.1 → wxdata-2.3}/src/wxdata/calc/__init__.py +0 -0
  105. {wxdata-2.1 → wxdata-2.3}/src/wxdata/calc/derived_fields.py +0 -0
  106. {wxdata-2.1 → wxdata-2.3}/src/wxdata/calc/kinematics.py +0 -0
  107. {wxdata-2.1 → wxdata-2.3}/src/wxdata/calc/thermodynamics.py +0 -0
  108. {wxdata-2.1 → wxdata-2.3}/src/wxdata/calc/unit_conversion.py +0 -0
  109. {wxdata-2.1 → wxdata-2.3}/src/wxdata/client/__init__.py +0 -0
  110. {wxdata-2.1 → wxdata-2.3}/src/wxdata/client/byte_range.py +0 -0
  111. {wxdata-2.1 → wxdata-2.3}/src/wxdata/client/client.py +0 -0
  112. {wxdata-2.1 → wxdata-2.3}/src/wxdata/client/level_coords.py +0 -0
  113. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/fuels_data}/fems/meta_data.py +0 -0
  114. {wxdata-2.1/src/wxdata/noaa → wxdata-2.3/src/wxdata/gridded_forecasts/noaa/nws}/nws.py +0 -0
  115. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data}/ecmwf/file_funcs.py +0 -0
  116. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data}/ecmwf/keys.py +0 -0
  117. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data}/ecmwf/parsers.py +0 -0
  118. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data}/ecmwf/paths.py +0 -0
  119. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data}/ecmwf/url_scanners.py +0 -0
  120. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/aigefs/paths.py +0 -0
  121. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/aigefs/url_scanners.py +0 -0
  122. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/aigfs/paths.py +0 -0
  123. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/aigfs/url_scanners.py +0 -0
  124. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/cfs/file_scanner.py +0 -0
  125. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/cfs/url_scanners.py +0 -0
  126. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gefs/exception_messages.py +0 -0
  127. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gefs/file_funcs.py +0 -0
  128. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gefs/paths.py +0 -0
  129. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gfs/exception_messages.py +0 -0
  130. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/gfs/paths.py +0 -0
  131. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/hgefs/paths.py +0 -0
  132. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/hgefs/url_scanner.py +0 -0
  133. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/rtma/file_funcs.py +0 -0
  134. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/rtma/file_scanner.py +0 -0
  135. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/model_data/noaa}/rtma/keys.py +0 -0
  136. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/observational_data}/metars/_clean_data.py +0 -0
  137. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/observational_data}/radar/url_scanner.py +0 -0
  138. {wxdata-2.1/src/wxdata → wxdata-2.3/src/wxdata/observational_data}/soundings/_exceptions.py +0 -0
  139. {wxdata-2.1 → wxdata-2.3}/src/wxdata/post_processors/aigefs_post_processing.py +0 -0
  140. {wxdata-2.1 → wxdata-2.3}/src/wxdata/post_processors/aigfs_post_processing.py +0 -0
  141. {wxdata-2.1 → wxdata-2.3}/src/wxdata/post_processors/cfs_post_processing.py +0 -0
  142. {wxdata-2.1 → wxdata-2.3}/src/wxdata/post_processors/ecmwf_post_processing.py +0 -0
  143. {wxdata-2.1 → wxdata-2.3}/src/wxdata/post_processors/gefs_post_processing.py +0 -0
  144. {wxdata-2.1 → wxdata-2.3}/src/wxdata/post_processors/hgefs_post_processing.py +0 -0
  145. {wxdata-2.1 → wxdata-2.3}/src/wxdata/post_processors/rtma_post_processing.py +0 -0
  146. {wxdata-2.1 → wxdata-2.3}/src/wxdata/utils/__init__.py +0 -0
  147. {wxdata-2.1 → wxdata-2.3}/src/wxdata/utils/coords.py +0 -0
  148. {wxdata-2.1 → wxdata-2.3}/src/wxdata/utils/exceptions.py +0 -0
  149. {wxdata-2.1 → wxdata-2.3}/src/wxdata/utils/file_funcs.py +0 -0
  150. {wxdata-2.1 → wxdata-2.3}/src/wxdata/utils/file_scanner.py +0 -0
  151. {wxdata-2.1 → wxdata-2.3}/src/wxdata/utils/nomads_gribfilter.py +0 -0
  152. {wxdata-2.1 → wxdata-2.3}/src/wxdata/utils/progress_bar.py +0 -0
  153. {wxdata-2.1 → wxdata-2.3}/src/wxdata/utils/recycle_bin.py +0 -0
  154. {wxdata-2.1 → wxdata-2.3}/src/wxdata/utils/scripts.py +0 -0
  155. {wxdata-2.1 → wxdata-2.3}/src/wxdata/utils/tools.py +0 -0
  156. {wxdata-2.1 → wxdata-2.3}/src/wxdata/utils/warnings.py +0 -0
  157. {wxdata-2.1 → wxdata-2.3}/src/wxdata/utils/xmacis2_cleanup.py +0 -0
  158. {wxdata-2.1 → wxdata-2.3}/src/wxdata.egg-info/dependency_links.txt +0 -0
  159. {wxdata-2.1 → wxdata-2.3}/src/wxdata.egg-info/requires.txt +0 -0
  160. {wxdata-2.1 → wxdata-2.3}/src/wxdata.egg-info/top_level.txt +0 -0
wxdata-2.3/PKG-INFO ADDED
@@ -0,0 +1,1078 @@
1
+ Metadata-Version: 2.4
2
+ Name: wxdata
3
+ Version: 2.3
4
+ Summary: A Python package of end-to-end weather data clients & raw data clients with VPN/Proxy Server 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
+ Author: Eric J. Drewitz
6
+ Project-URL: Documentation, https://github.com/edrewitz/WxData/wiki
7
+ Project-URL: Repository, https://github.com/edrewitz/wxdata/tree/main
8
+ Keywords: meteorology,atmospheric sciences
9
+ Classifier: Programming Language :: Python
10
+ Classifier: Topic :: Scientific/Engineering
11
+ Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
12
+ Classifier: Operating System :: OS Independent
13
+ Requires-Python: >=3.10
14
+ Description-Content-Type: text/markdown
15
+ License-File: LICENSE
16
+ Requires-Dist: metpy>=1.7.1
17
+ Requires-Dist: numpy>=2.2.6
18
+ Requires-Dist: pandas>=2.3.3
19
+ Requires-Dist: cartopy>=0.25.0
20
+ Requires-Dist: xarray>=2025.6.1
21
+ Requires-Dist: netcdf4>=1.7.3
22
+ Requires-Dist: shapeography>=1.2
23
+ Requires-Dist: beautifulsoup4>=4.14.3
24
+ Requires-Dist: requests>=2.32.5
25
+ Requires-Dist: cfgrib>=0.9.15.1
26
+ Requires-Dist: dask>=2025.11.0
27
+ Requires-Dist: tqdm>=4.67.3
28
+ Requires-Dist: ecmwf-opendata>=0.3.26
29
+ Requires-Dist: openpyxl>=3.1.5
30
+ Requires-Dist: arm-pyart>=2.2.0
31
+ Dynamic: license-file
32
+
33
+ <img src="https://github.com/edrewitz/WxData/blob/main/icons/weather%20icon.jpg?raw=true" width="200" alt="Alt text" /> <img src="https://github.com/edrewitz/WxData/blob/1be590e9a16033974a592d8cf99f3cd521f95e0b/icons/python%20logo.png?raw=true" width="200" alt="Alt text" />
34
+
35
+ [![Conda Recipe](https://img.shields.io/badge/recipe-wxdata-green.svg)](https://anaconda.org/conda-forge/wxdata) [![Conda Version](https://img.shields.io/conda/vn/conda-forge/wxdata.svg)](https://anaconda.org/conda-forge/wxdata) [![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/wxdata.svg)](https://anaconda.org/conda-forge/wxdata) ![PyPI](https://img.shields.io/pypi/v/wxdata?label=pypi%20wxdata) [![Anaconda-Server Badge](https://anaconda.org/conda-forge/wxdata/badges/license.svg)](https://anaconda.org/conda-forge/wxdata) [![Anaconda-Server Badge](https://anaconda.org/conda-forge/wxdata/badges/latest_release_date.svg)](https://anaconda.org/conda-forge/wxdata)
36
+
37
+ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17727621.svg)](https://doi.org/10.5281/zenodo.17727621)
38
+
39
+
40
+
41
+ Anaconda Downloads
42
+
43
+ [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/wxdata.svg)](https://anaconda.org/conda-forge/wxdata)
44
+
45
+
46
+ PIP Downloads:
47
+
48
+ [![PyPI Downloads](https://static.pepy.tech/personalized-badge/wxdata?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/wxdata)
49
+
50
+
51
+
52
+ **(C) Eric J. Drewitz 2025-2026**
53
+
54
+ A Python package consisting of the following:
55
+
56
+ 1) End-to-end weather data clients with VPN/PROXY support
57
+ 2) Raw data clients with VPN/PROXY support
58
+ 3) Data processors that decode variable keys from GRIB format into a plain-language format
59
+ 4) Various tools for assisting Python automated workflows, querying meteorological datasets and filling gaps in meteorological data.
60
+ 5) Has interfaces with various weather APIs.
61
+
62
+ # Table of Contents
63
+
64
+ 1) [Installation Instructions](https://github.com/edrewitz/WxData/wiki#installation-instructions)
65
+
66
+ 2) [Server List (For End-To-End Clients That Can Rotate Between Servers)](https://github.com/edrewitz/WxData/wiki#server-list)
67
+
68
+ 3) [Proxy Server Configuration](https://github.com/edrewitz/WxData/wiki#proxy-server-configuration)
69
+
70
+ 4) [What makes WxData unique among various meteorological Python packages?](https://github.com/edrewitz/WxData/wiki#what-makes-wxdata-unique-among-various-meteorological-python-packages)
71
+
72
+ 5) [WxData Tutorials](https://github.com/edrewitz/WxData/wiki#wxdata-tutorials)
73
+
74
+ 6) [WxData Documentation](https://github.com/edrewitz/WxData/wiki#wxdata-documentation)
75
+
76
+ 7) [Importing Functions from WxData](https://github.com/edrewitz/WxData/wiki#importing-functions-from-wxdata)
77
+
78
+ 8) [Citations](https://github.com/edrewitz/WxData/wiki#citations)
79
+
80
+ 9) [Data Sources](https://github.com/edrewitz/WxData/wiki#data-sources)
81
+
82
+
83
+ ## Installation Instructions
84
+
85
+ **How To Install**
86
+
87
+ Copy and paste either command into your terminal or anaconda prompt:
88
+
89
+ *Install via Anaconda*
90
+
91
+ `conda install wxdata`
92
+
93
+ OR
94
+
95
+ `mamba install wxdata`
96
+
97
+ *Install via pip*
98
+
99
+ `pip install wxdata`
100
+
101
+ **How To Update To The Latest Version**
102
+
103
+ Copy and paste either command into your terminal or anaconda prompt:
104
+
105
+ *Update via Anaconda*
106
+
107
+ ***This is for users who initially installed WxData through Anaconda***
108
+
109
+ `conda update wxdata`
110
+
111
+ OR
112
+
113
+ `mamba update wxdata`
114
+
115
+ *Update via pip*
116
+
117
+ ***This is for users who initially installed WxData through pip***
118
+
119
+ `pip install --upgrade wxdata`
120
+
121
+ ***Important Compatibility Information***
122
+
123
+ When a new version of Python comes out, it might not be compatible with the C++ eccodes library immediately (especially on pip/pypi versions).
124
+
125
+ This issue arises when the user is post-processing GRIB data.
126
+
127
+ There are two options to resolve this issue:
128
+
129
+ i) Install wxdata via Anaconda/Miniconda3 --> `conda install wxdata`
130
+
131
+ ii) Set up a new environment with an earlier version of Python (must be Python >= 3.10) and then `pip install wxdata`
132
+
133
+ ---------------------------------------------------------
134
+ ## Server List
135
+
136
+
137
+
138
+ <img src="https://github.com/edrewitz/WxData/blob/main/icons/noaa_rotation.png?raw=true" width="200" alt="Alt text" /> <img src="https://github.com/edrewitz/WxData/blob/main/icons/ecmwf_rotation.png?raw=true" width="200" alt="Alt text" />
139
+
140
+ End-To-End clients with multiple servers to pull data from can find the different options for `source` by the table below
141
+
142
+ `source='noaa' - NOAA/NCEP/NOMADS OR NOAA/NWS/FTP`
143
+
144
+ `source='ecmwf' - ECMWF Open-Data Server`
145
+
146
+ `source='aws' - Amazon Web Services (AWS)`
147
+
148
+ `source='google' - Google Cloud`
149
+
150
+
151
+ | Client | NOAA/NCEP/NOMADS | ECMWF Open-Data | Amazon AWS | Google Cloud | NOAA/NWS/FTP |
152
+ | -------- | -------- | -------- | -------- | -------- | -------- |
153
+ | GFS0P25 |Y|N|Y|Y|N|
154
+ | GFS0P25 SECONDARY PARAMETERS |Y|N|Y|Y|N|
155
+ | GFS0P50 |Y|N|Y|Y|N|
156
+ | GEFS0P50 |Y|N|Y|Y|N|
157
+ | GEFS0P50 SECONDARY PARAMETERS |Y|N|Y|Y|N|
158
+ | GEFS0P25 |Y|N|Y|Y|N|
159
+ | ECMWF IFS |N|Y|Y|Y|N|
160
+ | ECMWF IFS Ensemble |N|Y|Y|Y|N|
161
+ | ECMWF AIFS|N|Y|Y|Y|N|
162
+ | ECMWF AIFS Ensemble|N|Y|Y|Y|N|
163
+ | ECMWF IFS Wave |N|Y|Y|Y|N|
164
+ | ECMWF IFS Wave Ensemble |N|Y|Y|Y|N|
165
+ | Get NDFD Grids |N|N|Y|N|Y|
166
+ | RTMA |Y|N|Y|N|N|
167
+
168
+ ---------------------------------------------------------
169
+
170
+ ## Proxy Server Configuration
171
+
172
+ ***Friendly for users working on VPN/PROXY connections***
173
+
174
+ Depending on which client, the proxy-address:port must be entered as either a dictionary or a string.
175
+
176
+ The clients that use a string for proxies are:
177
+
178
+ 1) All ECMWF clients.
179
+
180
+ 2) METAR Observations Client.
181
+
182
+ 3) `pixel_query()` tool if the user needs to download the airport station codes list.
183
+
184
+ All other clients use proxies as a dictionary
185
+
186
+ Example: We want to download the latest Observed Sounding Data for San Diego, CA (NKX)
187
+
188
+ ```python
189
+ proxies=None ---> proxies={
190
+ 'http':'http://your-proxy-address:port',
191
+ 'https':'http://your-proxy-address:port'
192
+ }
193
+ ```
194
+ ```python
195
+ # Here is our program
196
+ from wxdata import get_observed_sounding_data
197
+
198
+ proxies={
199
+ 'http':'http://your-proxy-address:port',
200
+ 'https':'http://your-proxy-address:port'
201
+ }
202
+
203
+ data = sounding_data = get_observed_sounding_data('nkx', proxies=proxies)
204
+ ```
205
+
206
+ Example: We want to download the ECMWF IFS Data:
207
+
208
+ ```python
209
+ proxies=None ---> proxies="http://your-proxy-address:port" ---> ds = ecmwf_ifs(proxies=proxies)
210
+ ```
211
+ ```python
212
+ # Here is our program
213
+ from wxdata import ecmwf_ifs
214
+
215
+ proxies="https://your-proxy-address:port"
216
+
217
+ data = ecmwf_ifs(proxies=proxies)
218
+ ```
219
+
220
+ <img src="https://github.com/edrewitz/WxData/blob/main/diagrams/proxy.png?raw=true" width="500" alt="Alt text" />
221
+
222
+
223
+ For more information on configuring proxies: https://requests.readthedocs.io/en/latest/user/advanced/#proxies
224
+
225
+ ---------------------------------------------------------------------
226
+
227
+ ## What makes WxData unique among various meteorological Python packages?
228
+
229
+ 1) Converts GRIB variable keys into variable keys that are in plain language.
230
+ - (e.g. 'r2' ---> '2m_relative_humidity')
231
+
232
+ 2) Has a scanner that checks if the data files on your PC are up to date with those on the data server.
233
+ - This is a safeguard to protect newer developers from getting temporary IP address bans from the various data servers.
234
+ - Improves performance by preventing the potential of repetative downloading the same dataset.
235
+
236
+ 3) Preserves system memory via the following methods:
237
+ - Clears out old data files before each new data download.
238
+ - Optional setting `clear_recycle_bin` in all functions.
239
+ - When `clear_recycle_bin=True` the computer's recycle/trash bin is cleared with each run of the script using any WxData function.
240
+ - If a user wishes to not clear out their recycle bin `set clear_recycle_bin=False`.
241
+ - Default: `clear_recycle_bin=False`.
242
+
243
+ 4) Has built-in support for users on VPN/PROXY connections.
244
+
245
+ 5) Consists of both observational and model data.
246
+
247
+ 6) Has additional tools to assist querying data, resolving gaps in data and automating your Python workflow.
248
+
249
+ 7) Utilizes byte-range requests to subset and speed up download times.
250
+
251
+ 8) Several end-to-end clients have the ability to pull from multiple servers (NOAA/NCEP/NOMADS, ECMWF Open-Data, Amazon Web Services (AWS), Google Cloud and NOAA/NWS/FTP).
252
+
253
+ 9) Clients can automatically rotate to a new server when experiencing connectivity issues to the initial server.
254
+
255
+ -----------------------------------------------
256
+
257
+ ## WxData Tutorials
258
+
259
+ ### Regular Users
260
+ 1) [Downloading METAR Data](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/metars.ipynb)
261
+ 2) [Downloading Observed Sounding Data](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/soundings.ipynb)
262
+ 3) [Downloading the first 72 hours of the ECMWF IFS and ECMWF AIFS](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/ecmwf.ipynb)
263
+ 4) [Downloading the GEFS members p01 and p02 for only Temperature](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/gefs.ipynb)
264
+ 5) [Downloading the Real-Time Mesoscale Analysis (RTMA)](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/rtma.ipynb)
265
+ 6) [Downloading the SPC Convective Outlook for CONUS](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/spc.ipynb)
266
+ 7) [Downloading NWS Maximum Temperature Forecast for Hawaii](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/nws_hi.ipynb)
267
+ 8) [Downloading the GFS0P25 then performing pixel and line queries on the data](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/GFS.ipynb)
268
+
269
+ 9) [Downloading various datasets from the Applied Climate Information System (ACIS)](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/xmacis2.ipynb)
270
+
271
+ 10) [Downloading AIGFS Data](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/aigfs.ipynb)
272
+
273
+ 11) [Downloading AIGEFS Data](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/aigefs.ipynb)
274
+
275
+ 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)
276
+
277
+ 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)
278
+
279
+ 14) [Downloading Subsets Of ECMWF IFS Ensemble and AIFS Ensemble Data](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/ecmwf_ens.ipynb)
280
+
281
+ 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)
282
+
283
+ 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)
284
+
285
+ 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)
286
+
287
+ 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)
288
+
289
+ 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)
290
+
291
+ 20) [Downloading NEXRAD II Radar Data and then plotting it in Py-ART](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/NEXRADII.ipynb)
292
+
293
+ 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)
294
+
295
+ 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)
296
+
297
+ 23) [Download Solar Radiation Forecasts Using Open-Meteo API](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/open_meteo_api_solar_radiation.ipynb)
298
+
299
+ 24) [Download Latest Fine Particulates (PM2.5) and Ozone (O3) Observations Using Air Now API](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/air_now_api.ipynb)
300
+
301
+ 25) [Download and plot the first 24 hours of the GDPS 500mb Geopotential Height, Relative Vorticity and Wind Forecast across CONUS & Southern Canada](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/gdps.ipynb)
302
+
303
+ 26) [Download and plot the first 24 hours of the RDPS 2-Meter Temperature & 10-Meter Wind Forecast across CONUS & Southern Canada](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/rdps.ipynb)
304
+
305
+ 27) [Download and plot the first 12 hours of the HRDPS 0-10cm Soil Temperature across British Columbia & Alberta](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/hrdps.ipynb)
306
+
307
+ 28) [Download the first 24 hours of the GEPS 850mb Temperature Forecast, find the ensemble mean and plot the GEPS Ensemble Mean 850mb Temperature Forecast](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/geps.ipynb)
308
+
309
+ 29) [Use the `cansips_forecast()` and `cansips_hindcast()` clients to download and plot the monthly 500mb Geopotential Height & 850mb Temperature Forecasts & Forecast Anomalies](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/cansips.ipynb)
310
+
311
+ ### Advanced Users
312
+
313
+ 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)
314
+
315
+ 2) [Downloading the GFS0P25 for temperature fields and using run_external_scripts() to post-process this GFS0P25 dataset in an external Python script](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/external_scripts.ipynb)
316
+
317
+ 3) [Downloading GFS Data Using Byte-Range Requests](https://github.com/edrewitz/WxData-JupyterLab-Examples/blob/main/bytes_range_request.ipynb)
318
+
319
+ ---------------------------------------------------
320
+
321
+ ## WxData Documentation
322
+
323
+ ### Documentation Sections
324
+
325
+ 1. [End-To-End Data Clients](https://github.com/edrewitz/WxData?tab=readme-ov-file#end-to-end-data-clients)
326
+ 2. [Raw Data Clients](https://github.com/edrewitz/WxData?tab=readme-ov-file#raw-data-clients)
327
+ 3. [Post-Processors](https://github.com/edrewitz/WxData?tab=readme-ov-file#post-processors)
328
+ 4. [Data Querying Tools](https://github.com/edrewitz/WxData?tab=readme-ov-file#data-querying-tools)
329
+ 5. [Data Transformation & Gap Filling Tools](https://github.com/edrewitz/WxData?tab=readme-ov-file#data-transformation--gap-filling-tools)
330
+ 6. [Automated Python Workflow Tools](https://github.com/edrewitz/WxData?tab=readme-ov-file#automated-python-workflow-tools)
331
+ 7. [Open-Meteo API](https://github.com/edrewitz/WxData/blob/main/README.md#open-meteo-api)
332
+
333
+ #### End-To-End Data Clients
334
+
335
+ ##### ***Global Forecast System (GFS)***
336
+ 1. [GFS0P25](https://edrewitz.github.io/WxData/GFS0P25)
337
+ 2. [GFS0P25 SECONDARY PARAMETERS](https://edrewitz.github.io/WxData/GFS0P25%20Secondary%20Parameters)
338
+ 3. [GFS0P50](https://edrewitz.github.io/WxData/GFS0P50)
339
+
340
+ ##### ***AI Global Forecast System (AIGFS)***
341
+ 1. [AIGFS](https://edrewitz.github.io/WxData/aigfs)
342
+
343
+ ##### ***Climate Forecast System (CFS)***
344
+ 1. [CFS Pressure](https://edrewitz.github.io/WxData/cfs_pressure)
345
+ 2. [CFS Flux](https://edrewitz.github.io/WxData/cfs_flux)
346
+
347
+ ##### ***Hybrid Global Ensemble Forecast System (HGEFS)***
348
+ 1. [HGEFS](https://edrewitz.github.io/WxData/hgefs)
349
+
350
+ ##### ***Global Ensemble Forecast System (GEFS)***
351
+ 1. [GEFS0P50](https://edrewitz.github.io/WxData/GEFS0P50)
352
+ 2. [GEFS0P50 SECONDARY PARAMETERS](https://edrewitz.github.io/WxData/GEFS0P50%20Secondary%20Parameters)
353
+ 3. [GEFS0P25](https://edrewitz.github.io/WxData/GEFS0P25)
354
+
355
+ ##### ***AI Global Ensemble Forecast System (AIGEFS)***
356
+ 1. [AIGEFS Members (Pressure Parameters)](https://edrewitz.github.io/WxData/aigefs_pressure_members)
357
+ 2. [AIGEFS Members (Surface Parameters)](https://edrewitz.github.io/WxData/aigefs_surface_members)
358
+ 3. [AIGEFS Ensemble Mean & Ensemble Spread](https://edrewitz.github.io/WxData/aigefs_single)
359
+
360
+ ##### ***Canadian Meteorological Centre***
361
+ 1. [GDPS](https://edrewitz.github.io/WxData/gdps)
362
+ 2. [RDPS](https://edrewitz.github.io/WxData/rdps)
363
+ 3. [HRDPS](https://edrewitz.github.io/WxData/hrdps)
364
+ 4. [GEPS](https://edrewitz.github.io/WxData/geps)
365
+ 5. [CanSIPS](https://edrewitz.github.io/WxData/cansips)
366
+
367
+ ##### ***ECMWF Open Data***
368
+ 1. [ECMWF IFS](https://edrewitz.github.io/WxData/ECMWF_IFS)
369
+ 2. [ECMWF IFS Ensemble](https://edrewitz.github.io/WxData/ECMWF%20IFS%20Ensemble)
370
+ 3. [ECMWF AIFS](https://edrewitz.github.io/WxData/ECMWF_AIFS)
371
+ 4. [ECMWF AIFS Ensemble](https://edrewitz.github.io/WxData/ECMWF%20AIFS%20Ensemble)
372
+ 5. [ECMWF IFS Wave](https://edrewitz.github.io/WxData/ECMWF_IFS_Wave)
373
+ 6. [ECMWF IFS Wave Ensemble](https://edrewitz.github.io/WxData/ECMWF%20IFS%20Wave%20Ensemble)
374
+
375
+ ##### ***Real-Time Mesoscale Analysis (RTMA)***
376
+ 1. [RTMA](https://edrewitz.github.io/WxData/rtma)
377
+ 2. [RTMA Comparison](https://edrewitz.github.io/WxData/rtma%20comparison)
378
+
379
+ ##### ***NOAA Storm Prediction Center Outlooks/Climate Prediction Center Outlooks/National Weather Service Forecasts***
380
+ 1. [Get NDFD Grids](https://edrewitz.github.io/WxData/noaa)
381
+ 2. [Climate Prediction Center Outlooks](https://edrewitz.github.io/WxData/cpc_outlooks)
382
+
383
+ ##### ***METAR Observations***
384
+ 1. [METAR Observations](https://edrewitz.github.io/WxData/metars)
385
+
386
+ ##### ***FEMS RAWS Network***
387
+ 1. [Get Single Station Weather Observations](https://edrewitz.github.io/WxData/single%20raws%20weather%20obs)
388
+ 2. [Get Single Station Fuels Observations](https://edrewitz.github.io/WxData/single%20raws%20fuels%20obs)
389
+ 3. [Get Multi Station Weather Observations](https://edrewitz.github.io/WxData/multi%20raws%20weather%20obs)
390
+ 4. [Get Multi Station Fuels Observations](https://edrewitz.github.io/WxData/multi%20raws%20fuels%20obs)
391
+ 5. [Get Current Multi Station Weather Observations](https://edrewitz.github.io/WxData/current%20multi%20raws%20weather%20obs)
392
+ 6. [Get Current Multi Station Fuels Observations](https://edrewitz.github.io/WxData/current%20multi%20raws%20fuels%20obs)
393
+ 7. [Get Current Multi Station Weather Observations By State](https://edrewitz.github.io/WxData/raws%20weather%20obs%20by%20state)
394
+ 8. [Get Current Multi Station Fuels Observations By State](https://edrewitz.github.io/WxData/raws%20fuels%20obs%20by%20state)
395
+ 9. [Get Single Station Weather Forecast](https://edrewitz.github.io/WxData/single%20raws%20weather%20forecast)
396
+ 10. [Get Single Station NFDRS (Fuels) Forecast](https://edrewitz.github.io/WxData/single%20raws%20nfdrs%20forecast)
397
+ 11. [Get Multi Station Weather Forecast](https://edrewitz.github.io/WxData/multi%20raws%20weather%20forecast)
398
+ 12. [Get Multi Station NFDRS (Fuels) Forecast](https://edrewitz.github.io/WxData/multi%20raws%20nfdrs%20forecast)
399
+ 13. [Get Single Station Meta-Data](https://edrewitz.github.io/WxData/raws%20single%20station%20meta%20data)
400
+ 14. [Get Multi Station Meta-Data](https://edrewitz.github.io/WxData/raws%20multi%20station%20meta%20data)
401
+
402
+ ##### ***Observed Atmospheric Soundings***
403
+ 1. [University Of Wyoming Soundings](https://edrewitz.github.io/WxData/wyoming_soundings)
404
+
405
+ ##### ***NEXRAD II Radar Data***
406
+ 1. [Single Site](https://edrewitz.github.io/WxData/nexrad2_single)
407
+ 2. [Multi-Site](https://edrewitz.github.io/WxData/nexrad2_multi)
408
+
409
+ -----------------------------
410
+
411
+ #### Post-Processors
412
+
413
+ ##### ***GFS Post-Processing***
414
+ 1. [Primary GFS](https://edrewitz.github.io/WxData/Primary%20GFS%20Post%20Processing)
415
+ 2. [Secondary GFS](https://edrewitz.github.io/WxData/Secondary%20GFS%20Post%20Processing)
416
+
417
+ ##### ***AIGFS Post-Processing***
418
+ 1. [AIGFS](https://edrewitz.github.io/WxData/aigfs_post_processing)
419
+
420
+ ##### ***CFS Post-Processing***
421
+ 1. [CFS Pressure](https://edrewitz.github.io/WxData/cfs_pressure_post_processing)
422
+ 2. [CFS Flux](https://edrewitz.github.io/WxData/cfs_flux_post_processing)
423
+
424
+ ##### ***GEFS Post-Processing***
425
+ 1. [Primary GEFS](https://edrewitz.github.io/WxData/Primary%20GEFS%20Post-Processing)
426
+ 2. [Secondary GEFS](https://edrewitz.github.io/WxData/Secondary%20GEFS%20Post%20Processing)
427
+
428
+ ##### ***AIGEFS Post-Processing***
429
+ 1. [AIGEFS Members](https://edrewitz.github.io/WxData/aigefs_members_post_processing)
430
+ 2. [AIGEFS Single](https://edrewitz.github.io/WxData/aigefs_single_post_processing)
431
+
432
+ ##### ***HGEFS Post-Processing***
433
+ 1. [HGEFS](https://edrewitz.github.io/WxData/hgefs_post_processing)
434
+
435
+ ##### ***ECMWF Post-Processing***
436
+ 1. [ECMWF IFS and IFS Ensemble](https://edrewitz.github.io/WxData/ECMWF%20IFS%20Post%20Processing)
437
+ 2. [ECMWF AIFS and AIFS Ensemble](https://edrewitz.github.io/WxData/ECMWF%20AIFS%20Post%20Processing)
438
+ 3. [ECMWF IFS Wave and IFS Wave Ensemble](https://edrewitz.github.io/WxData/ECMWF%20IFS%20Wave%20Post%20Processing)
439
+
440
+ ##### ***Real-Time Mesoscale Analysis Post-Processing***
441
+ 1. [RTMA](https://edrewitz.github.io/WxData/RTMA%20Post%20Processing)
442
+
443
+ ##### ***CMC Post Processing***
444
+ 1. [GDPS](https://edrewitz.github.io/WxData/gdps%20processing)
445
+ 2. [RDPS](https://edrewitz.github.io/WxData/rdps%20processing)
446
+ 3. [HRDPS](https://edrewitz.github.io/WxData/hrdps%20processing)
447
+ 4. [GEPS](https://edrewitz.github.io/WxData/geps%20processing)
448
+ 5. [CanSIPS](https://edrewitz.github.io/WxData/cansips%20processing)
449
+
450
+ -----------------------------------------------
451
+
452
+ #### Raw Data Clients
453
+
454
+ ##### ***xmACIS2 Climate Data***
455
+ 1. [xmACIS2 Client](https://edrewitz.github.io/WxData/xmacis2_client)
456
+
457
+ ##### ***Custom Gridded Data***
458
+ 1. [Gridded Data Client](https://edrewitz.github.io/WxData/get_gridded_data)
459
+
460
+ ##### ***Custom CSV Data***
461
+ 1. [CSV Data Client](https://edrewitz.github.io/WxData/get_csv_data)
462
+
463
+ ##### ***Custom Excel Data***
464
+ 1. [Excel Data Client](https://edrewitz.github.io/WxData/get_excel_data)
465
+
466
+ ##### ***AWS Open Data***
467
+ 1. [AWS Open Data](https://edrewitz.github.io/WxData/get_open_aws_data)
468
+
469
+ ##### ***Byte-Range Requests***
470
+ 1. [Byte-Range Requests](https://edrewitz.github.io/WxData/bytes_range_request)
471
+
472
+ ---------------------------------------------------------------
473
+
474
+ #### Data Querying Tools
475
+
476
+ ##### ***Pixel Query***
477
+ 1. [pixel_query](https://edrewitz.github.io/WxData/pixel_query)
478
+
479
+ ##### ***Line Query***
480
+ 1. [line_query](https://edrewitz.github.io/WxData/line_query)
481
+
482
+ --------------------------------------------------
483
+
484
+ #### Data Transformation & Gap Filling Tools
485
+
486
+ ##### ***Cyclic Points For Hemispheric Plots***
487
+ 1. [Cyclic Points](https://edrewitz.github.io/WxData/cyclic_point)
488
+
489
+ ##### ***Shifting Longitude From 0 to 360 --> -180 to 180***
490
+ 1. [shift_longitude](https://edrewitz.github.io/WxData/shift_longitude)
491
+
492
+ ##### ***Linear Anti-Aliasing Between Two Points***
493
+ 1. [linear_anti_aliasing](https://edrewitz.github.io/WxData/linear_anti_aliasing)
494
+
495
+ ------------------------------------------
496
+
497
+ #### Automated Python Workflow Tools
498
+
499
+ ##### ***Running External Python Scripts In Your Workflow***
500
+
501
+ 1 [run_external_scripts](https://edrewitz.github.io/WxData/run_external_scripts)
502
+
503
+ ---------------------------------------
504
+
505
+ #### Open-Meteo API
506
+
507
+ ##### Weather Forecasts
508
+ ###### ***Current Weather***
509
+ 1. [Current Weather](https://edrewitz.github.io/WxData/open%20meteo%20api%20current%20weather)
510
+
511
+ ###### ***National Oceanic and Atmospheric Administrationn (NOAA)***
512
+ 1. [GFS](https://edrewitz.github.io/WxData/open%20meteo%20api%20noaa%20gfs)
513
+ 2. [GEFS](https://edrewitz.github.io/WxData/open%20meteo%20api%20noaa%20gefs)
514
+ 3. [AIGFS](https://edrewitz.github.io/WxData/open%20meteo%20api%20noaa%20aigfs)
515
+ 4. [AIGEFS](https://edrewitz.github.io/WxData/open%20meteo%20api%20noaa%20aigefs)
516
+ 5. [HGEFS](https://edrewitz.github.io/WxData/open%20meteo%20api%20noaa%20hgefs)
517
+ 6. [NBM](https://edrewitz.github.io/WxData/open%20meteo%20api%20noaa%20nbm)
518
+
519
+ ###### ***European Centre for Medium-Range Weather Forecasts (ECMWF)***
520
+ 1. [IFS](https://edrewitz.github.io/WxData/open%20meteo%20api%20ecmwf%20ifs)
521
+ 2. [AIFS](https://edrewitz.github.io/WxData/open%20meteo%20api%20ecmwf%20aifs)
522
+ 3. [IFS HRES](https://edrewitz.github.io/WxData/open%20meteo%20api%20ecmwf%20ifs%20hres)
523
+ 4. [IFS Ensemble](https://edrewitz.github.io/WxData/open%20meteo%20api%20ecmwf%20ifs%20ens)
524
+ 5. [AIFS Ensemble](https://edrewitz.github.io/WxData/open%20meteo%20api%20ecmwf%20aifs%20ens)
525
+
526
+ ###### ***Canadian Meteorological Centre (CMC)***
527
+ 1. [GEM](https://edrewitz.github.io/WxData/open%20meteo%20api%20cmc%20gem)
528
+ 2. [GEM Ensemble](https://edrewitz.github.io/WxData/open%20meteo%20api%20cmc%20gem%20ens)
529
+
530
+ ###### ***Deutscher Wetterdienst (DWD)***
531
+ 1. [ICON](https://edrewitz.github.io/WxData/open%20meteo%20api%20dwd%20icon)
532
+ 2. [ICON EPS](https://edrewitz.github.io/WxData/open%20meteo%20api%20dwd%20icon%20eps)
533
+
534
+ ###### ***Meteo-France***
535
+ 1. [ARPEGE](https://edrewitz.github.io/WxData/open%20meteo%20api%20meteo%20france%20arpege)
536
+
537
+ ###### ***Japan Meteorological Agency (JMA)***
538
+ 1. [JMA](https://edrewitz.github.io/WxData/open%20meteo%20api%20jma%20jma)
539
+
540
+ ###### ***UK Met Office (UKMO)***
541
+ 1. [UKMO Global Ensemble](https://edrewitz.github.io/WxData/open%20meteo%20api%20ukmo%20global%20ens)
542
+
543
+ ###### ***Google***
544
+ 1. [Weather Next 2 All Ensemble Members](https://edrewitz.github.io/WxData/open%20meteo%20api%20google%20weather%20next%202%20members)
545
+ 2. [Weather Next 2 Ensemble Mean](https://edrewitz.github.io/WxData/open%20meteo%20api%20google%20weather%20next%202%20ensemble%20mean)
546
+
547
+ ##### Marine Forecasts
548
+
549
+ ###### ***National Oceanic and Atmospheric Administrationn (NOAA)***
550
+ 1. [GFS0P25 Wave Forecasts](https://edrewitz.github.io/WxData/open%20meteo%20api%20gfs0p25%20wave)
551
+ 2. [GFS0P16 Wave Forecasts](https://edrewitz.github.io/WxData/open%20meteo%20api%20gfs0p16%20wave)
552
+
553
+ ###### ***European Centre for Medium-Range Weather Forecasts (ECMWF)***
554
+ 1. [ECMWF Wave Model](https://edrewitz.github.io/WxData/open%20meteo%20api%20ecmwf%20wam)
555
+ 2. [ECMWF Wave Model 0.25 Degree](https://edrewitz.github.io/WxData/open%20meteo%20api%20ecmwf%20wam%200p25)
556
+
557
+ ###### ***Meteo-France***
558
+ 1. [Meteo-France Wave Model](https://edrewitz.github.io/WxData/open%20meteo%20api%20meteo%20france%20wave)
559
+ 2. [Meteo-France Ocean Currents Model](https://edrewitz.github.io/WxData/open%20meteo%20api%20meteo%20france%20ocean%20currents)
560
+
561
+ ###### ***Deutscher Wetterdienst (DWD)***
562
+ 1. [European Domain Wave Model](https://edrewitz.github.io/WxData/open%20meteo%20api%20ewam)
563
+ 2. [Global Domian Wave Model](https://edrewitz.github.io/WxData/open%20meteo%20api%20gwam)
564
+
565
+ ##### Seasonal Forecasts
566
+
567
+ ###### ***Daily Forecasts***
568
+ 1. [ECMWF EC46 + SEAS5 Ensemble Members](https://edrewitz.github.io/WxData/open%20meteo%20api%20ec46%20seas5%20daily)
569
+ 2. [ECMWF EC46 Ensemble Members](https://edrewitz.github.io/WxData/open%20meteo%20api%20ec46%20daily)
570
+ 3. [ECMWF SEAS5 Ensemble Members](https://edrewitz.github.io/WxData/open%20meteo%20api%20seas5%20daily)
571
+ 4. [ECMWF EC46 + SEAS5 Ensemble Mean](https://edrewitz.github.io/WxData/open%20meteo%20api%20ec46%20seas5%20daily%20ensemble%20mean)
572
+ 5. [ECMWF EC46 Ensemble Mean](https://edrewitz.github.io/WxData/open%20meteo%20api%20ec46%20daily%20ensemble%20mean)
573
+ 6. [ECMWF SEAS5 Ensemble Mean](https://edrewitz.github.io/WxData/open%20meteo%20api%20seas5%20daily%20ensemble%20mean)
574
+
575
+ ###### ***Weekly Forecasts***
576
+ 1. [ECMWF EC46 Mean & Anomaly](https://edrewitz.github.io/WxData/open%20meteo%20api%20ec46%20weekly%20mean%20anomaly)
577
+
578
+ ###### ***Monthly Forecasts***
579
+ 1. [ECMWF SEAS5 Mean & Anomaly](https://edrewitz.github.io/WxData/open%20meteo%20api%20seas5%20monthly%20mean%20anomaly)
580
+
581
+ ##### Climate Reanalysis & Forecasts
582
+ 1. [CMCC-CM2-VHR4](https://edrewitz.github.io/WxData/open%20meteo%20api%20cmcc_cm2_vhr4%20forecasts)
583
+ 2. [FGOALS_f3_H](https://edrewitz.github.io/WxData/open%20meteo%20api%20fgoals_f3_h%20forecasts)
584
+ 3. [HiRAM_SIT_HR](https://edrewitz.github.io/WxData/open%20meteo%20api%20hiram_sit_hr%20forecasts)
585
+ 4. [MRI_AGCM3_2_S](https://edrewitz.github.io/WxData/open%20meteo%20api%20mri_agcm3_2_s%20forecasts)
586
+ 5. [EC_Earth3P_HR](https://edrewitz.github.io/WxData/open%20meteo%20api%20ec_earth3p_hr%20forecasts)
587
+ 6. [MPI_ESM1_2_XR](https://edrewitz.github.io/WxData/open%20meteo%20api%20mpi_esm1_2_xr%20forecasts)
588
+ 7. [NICAM16_8S](https://edrewitz.github.io/WxData/open%20meteo%20api%20nicam16_8s%20forecasts)
589
+
590
+ ##### Air Quality Forecasts
591
+ 1. [CAMS](https://edrewitz.github.io/WxData/open%20meteo%20api%20air%20quality)
592
+
593
+ ##### Solar Radiation Forecasts
594
+ 1. [Solar Radiation Forecast](https://edrewitz.github.io/WxData/open%20meteo%20api%20solar%20radiation)
595
+
596
+ ---------------------------------------
597
+
598
+ #### Air Now API
599
+
600
+ ##### ***Observations***
601
+ 1. [Get Current Data Bounding Box](https://edrewitz.github.io/WxData/air%20now%20api%20observations)
602
+ 2. [Get Historical Data Bounding Box](https://edrewitz.github.io/WxData/air%20now%20api%20historical%20observations)
603
+
604
+ ---------------------------------------
605
+
606
+ ## Importing Functions from WxData
607
+
608
+ ```python
609
+ """
610
+ This file hosts all of the functions in the WxData Python library that directly interact with the user.
611
+
612
+ (C) Eric J. Drewitz 2025-2026
613
+ """
614
+
615
+
616
+ """
617
+ This section of functions are for users who want full wxdata functionality.
618
+
619
+ These functions do the following:
620
+
621
+ 1) Scan for the latest available data.
622
+ - If the data on your local machine is not up to date, new data will download automatically.
623
+ - If the data on your local machine is up to date, new data download is bypassed.
624
+ - This is a safeguard that prevents excessive requests on the data servers.
625
+
626
+ 2) Builds the wxdata directory to store the weather data files.
627
+ - Scans for the directory branch and builds the branch if it does not exist.
628
+
629
+ 3) Downloads the data.
630
+ - Users can define their VPN/PROXY IP Address as a (dict) in their script and pass their
631
+ VPN/PROXY IP address into the function to avoid SSL Certificate errors when requesting data.
632
+ - Algorithm allows for up to 5 retries with a 30 second break between each retry to resolve connection
633
+ interruptions while not overburdening the data servers.
634
+
635
+ 4) Pre-processes the data via filename formatting and correctly filing in the wxdata directory.
636
+
637
+ 5) Post-processing by doing the following tasks:
638
+ - Remapping GRIB2 variable keys into plain language variable keys.
639
+ - Fixing dataset build errors and grouping all variables together.
640
+ - Transforms longitude from 0 to 360 degrees into -180 to 180 degrees.
641
+ - Subsetting the data to the latitude/longitude boundaries specified by the user.
642
+ - Converting temperature from kelvin to units the user wants (default is Celsius).
643
+ - Returning a post-processed xarray.array to the user.
644
+
645
+ 6) Preserves system memory by doing the following:
646
+ - Deleting old data files before each new download.
647
+ - When clear_recycle_bin=True, the user's recycle bin is also cleared.
648
+ """
649
+
650
+ """
651
+ ********************************************************************************
652
+
653
+
654
+ ************ This section hosts the Model Data Clients. ***********************
655
+
656
+
657
+ ********************************************************************************
658
+ """
659
+
660
+ ##############
661
+ #### NOAA ####
662
+ ##############
663
+ # Global Forecast System (GFS)
664
+ # - GFS 0.25x0.25 Degree Primary Parameters
665
+ # - GFS 0.25x0.25 Degree Secondary Parameters
666
+ # - GFS 0.5x0.5 Degree
667
+ from wxdata.model_data.noaa.gfs.gfs import(
668
+ gfs_0p25,
669
+ gfs_0p25_secondary_parameters,
670
+ gfs_0p50
671
+ )
672
+
673
+ # AI Global Forecast System (AIGFS)
674
+ from wxdata.model_data.noaa.aigfs.aigfs import aigfs
675
+
676
+ # Hybrid Global Ensemble Forecast System (HGEFS)
677
+ from wxdata.model_data.noaa.hgefs.hgefs import hgefs_mean_spread
678
+
679
+ # Global Ensemble Forecast System (GEFS)
680
+ # - GEFS 0.5x0.5 Degree Primary Parameters
681
+ # - GEFS 0.5x0.5 Degree Secondary Parameters
682
+ # - GEFS 0.25x0.25 Degree
683
+ from wxdata.model_data.noaa.gefs.gefs import(
684
+ gefs_0p50,
685
+ gefs_0p50_secondary_parameters,
686
+ gefs_0p25
687
+ )
688
+
689
+ # Climate Forecast System (CFS)
690
+ # - CFS Flux Products
691
+ # - CFS Pressure Products
692
+ from wxdata.model_data.noaa.cfs.cfs import(
693
+ cfs_flux,
694
+ cfs_pressure
695
+ )
696
+
697
+ # AI Global Ensemble Forecast System (AIGEFS)
698
+ # - AIGEFS Pressure Members (Pressure Level Variables)
699
+ # - AIGEFS Surface Members (Surface Level Variables)
700
+ # - AIGEFS Single (AIGEFS Ensemble Mean & AIGEFS Ensemble Spread)
701
+ from wxdata.model_data.noaa.aigefs.aigefs import(
702
+ aigefs_pressure_members,
703
+ aigefs_surface_members,
704
+ aigefs_single
705
+ )
706
+
707
+ # Real-Time Mesoscale Analysis (RTMA)
708
+ # - RTMA Latest
709
+ # - RTMA Comparison Between Two Times
710
+ from wxdata.model_data.noaa.rtma.rtma import(
711
+ rtma,
712
+ rtma_comparison
713
+ )
714
+
715
+ ##############################################################
716
+ # European Centre for Medium-Range Weather Forecasts (ECMWF) #
717
+ ##############################################################
718
+ # - ECMWF IFS
719
+ # - ECMWF IFS Ensemble
720
+ # - ECMWF AIFS
721
+ # - ECMWF AIFS Ensemble
722
+ # - ECMWF IFS Wave
723
+ # - ECMWF IFS Wave Ensemble
724
+ from wxdata.model_data.ecmwf.ecmwf import(
725
+ ecmwf_ifs,
726
+ ecmwf_ifs_ens,
727
+ ecmwf_aifs,
728
+ ecmwf_aifs_ens,
729
+ ecmwf_ifs_wave,
730
+ ecmwf_ifs_wave_ens
731
+ )
732
+
733
+ ##################################
734
+ # Canadian Meteorological Center #
735
+ ##################################
736
+ # - Canadian Global Deterministic Prediction System (GDPS)
737
+ # - Canadian Regional Deterministic Prediction System (RDPS)
738
+ # - Canadian High Resolution Deterministic Prediction System (HRDPS)
739
+ # - Canadian Global Ensemble Prediction System (GEPS)
740
+ # - Canadian Seasonal to Inter-annual Prediction System (CanSIPS) Forecasts
741
+ # - Canadian Seasonal to Inter-annual Prediction System (CanSIPS) Hindcasts
742
+ from wxdata.model_data.cmc.gdps.gdps import gdps
743
+ from wxdata.model_data.cmc.rdps.rdps import rdps
744
+ from wxdata.model_data.cmc.hrdps.hrdps import hrdps
745
+ from wxdata.model_data.cmc.geps.geps import geps
746
+ from wxdata.model_data.cmc.cansips.forecast.cansips_forecast import cansips_forecast
747
+ from wxdata.model_data.cmc.cansips.hindcast.cansips_hindcast import cansips_hindcast
748
+
749
+
750
+
751
+ """
752
+ ********************************************************************************
753
+
754
+
755
+ ************ This section hosts the Fuels Data Clients. **********************
756
+
757
+
758
+ ********************************************************************************
759
+ """
760
+
761
+ # FEMS RAWS Network
762
+ # - Single Station Weather Observations
763
+ # - Single Station Fuels Observations
764
+ # - Multi Station Weather Observations
765
+ # - Multi Station Fuels Observations
766
+ # - Current Weather Observations - Multi Station
767
+ # - Current Fuels Observations - Multi Station
768
+ # - Current Weather Observations - All Stations By State
769
+ # - Current Fuels Observations - All Stations By State
770
+ # - Single Station NFDRS Forecast
771
+ # - Multi Station NFDRS Forecast
772
+ # - Single Station Weather Forecast
773
+ # - Multi Station Weather Forecast
774
+ from wxdata.fuels_data.fems.observations import(
775
+ get_single_raws_station_weather_observations,
776
+ get_single_raws_station_fuels_observations,
777
+ get_multi_raws_station_weather_observations,
778
+ get_multi_raws_station_fuels_observations,
779
+ get_current_multi_raws_station_weather_observations,
780
+ get_current_multi_raws_station_fuels_observations,
781
+ get_current_all_raws_station_weather_observations,
782
+ get_current_all_raws_station_fuels_observations,
783
+ get_single_raws_station_nfdrs_forecast,
784
+ get_multi_raws_station_nfdrs_forecast,
785
+ get_single_raws_station_weather_forecast,
786
+ get_multi_raws_station_weather_forecast
787
+ )
788
+
789
+ # FEMS RAWS Network
790
+ # - Single Station Meta Data
791
+ # - Multi Station Meta Data
792
+ from wxdata.fuels_data.fems.meta_data import(
793
+ get_single_raws_station_meta_data,
794
+ get_multi_raws_station_meta_data
795
+ )
796
+
797
+
798
+ """
799
+ ********************************************************************************
800
+
801
+
802
+ ************ This section hosts the Gridded Forecast Data Clients. ***********
803
+
804
+
805
+ ********************************************************************************
806
+ """
807
+
808
+ # NOAA
809
+ # - Storm Prediction Center Outlooks
810
+ # - Climate Prediction Center Outlooks
811
+ # - National Weather Service Forecasts
812
+ from wxdata.gridded_forecasts.noaa.nws.nws import(
813
+ get_ndfd_grids,
814
+ get_cpc_outlook
815
+ )
816
+
817
+ """
818
+ *****************************************************************************
819
+
820
+
821
+ ************ This section hosts the Observational Data Clients. ************
822
+
823
+
824
+ *****************************************************************************
825
+ """
826
+
827
+ # Observed Upper-Air Soundings
828
+ # (University of Wyoming Database)
829
+ from wxdata.observational_data.soundings.wyoming_soundings import get_observed_sounding_data
830
+
831
+ # METAR Observational Data (From NOAA)
832
+ from wxdata.observational_data.metars.metar_obs import download_metar_data
833
+
834
+ # NEXRAD2 Radar Data
835
+ # - NEXRAD2 Radar Single Station
836
+ # - NEXRAD2 Radar Multi Station
837
+ from wxdata.observational_data.radar.nexrad2 import(
838
+ download_current_single_station_nexrad2_radar_data,
839
+ download_current_multi_station_nexrad2_radar_data
840
+ )
841
+
842
+ """
843
+ *********************************************************************************
844
+
845
+
846
+ ************ This section hosts the Model Data Processors. *********************
847
+
848
+
849
+ *********************************************************************************
850
+ """
851
+
852
+
853
+ # Global Forecast System (GFS)
854
+ import wxdata.post_processors.gfs_post_processing as gfs_post_processing
855
+
856
+ # AI Global Forecast System (AIGFS)
857
+ import wxdata.post_processors.aigfs_post_processing as aigfs_post_processing
858
+
859
+ # Hybrid Global Ensemble Forecast System (HGEFS)
860
+ import wxdata.post_processors.hgefs_post_processing as hgefs_post_processing
861
+
862
+ # Global Ensemble Forecast System (GEFS)
863
+ import wxdata.post_processors.gefs_post_processing as gefs_post_processing
864
+
865
+ # AI Global Ensemble Forecast System (AIGEFS)
866
+ import wxdata.post_processors.aigefs_post_processing as aigefs_post_processing
867
+
868
+ # European Centre for Medium-Range Weather Forecasts (ECMWF)
869
+ import wxdata.post_processors.ecmwf_post_processing as ecmwf_post_processing
870
+
871
+ # Climate Forecast System (CFS)
872
+ import wxdata.post_processors.cfs_post_processing as cfs_post_processing
873
+
874
+ # Canadian Meteorological Center Gridded Models
875
+ # - Canadian Global Deterministic Prediction System (GDPS)
876
+ # - Canadian Regional Deterministic Prediction System (RDPS)
877
+ # - Canadian High Resolution Deterministic Prediction System (HRDPS)
878
+ # - Canadian Global Ensemble Prediction System (GEPS)
879
+ # - Canadian Seasonal to Inter-annual Prediction System (CanSIPS) Forecast
880
+ # - Canadian Seasonal to Inter-annual Prediction System (CanSIPS) Hindcast
881
+ import wxdata.post_processors.cmc_post_processing as cmc_post_processing
882
+
883
+ # Real-Time Mesoscale Analysis (RTMA)
884
+ from wxdata.post_processors.rtma_post_processing import process_rtma_data
885
+
886
+
887
+ """
888
+ ****************************************************************************************************************
889
+
890
+
891
+ ************ This section hosts the Data Querying/Transforming Tools & Automation Tools. **********************
892
+
893
+
894
+ ****************************************************************************************************************
895
+ """
896
+
897
+ # WxData function using cartopy to make cyclic points
898
+ # This is for users who wish to make graphics that cross the -180/180 degree longitude line
899
+ # This is commonly used for Hemispheric graphics
900
+ # Function that converts the longitude dimension in an xarray.array
901
+ # From 0 to 360 to -180 to 180
902
+ from wxdata.utils.coords import(
903
+ cyclic_point,
904
+ shift_longitude
905
+ )
906
+
907
+ # Functions to pixel query and query pixels along a line between points A and B
908
+ # Function to interpolate to n amount of points in between x and y values respectively
909
+ from wxdata.utils.tools import(
910
+ pixel_query,
911
+ line_query,
912
+ linear_anti_aliasing
913
+ )
914
+
915
+ # This function executes a list of Python scripts in the order the user lists them
916
+ from wxdata.utils.scripts import run_external_scripts
917
+
918
+ """
919
+ ***************************************************************************
920
+
921
+
922
+ ************ This section hosts the Raw Data Clients. ********************
923
+
924
+
925
+ ***************************************************************************
926
+ """
927
+
928
+ # These are the wxdata HTTPS Clients with full VPN/PROXY Support
929
+ # Client List:
930
+ # - get_gridded_data()
931
+ # - get_csv_data()
932
+ # - get_excel_data()
933
+ # - get_xmacis_data()
934
+ # - get_aws_open_data()
935
+ # - byte_range_request()
936
+ import wxdata.client.client as client
937
+
938
+ """
939
+ ***********************************************************************************
940
+
941
+
942
+ ************ This section hosts the API Interface Clients. ***********************
943
+
944
+
945
+ ***********************************************************************************
946
+ """
947
+ #######################
948
+ ### Open-Meteo API ###
949
+ #######################
950
+
951
+ # Open-Meteo API: https://open-meteo.com/
952
+
953
+ ### Weather Forecasts ###
954
+
955
+ # - NOAA/NCEP Models
956
+ # - ECMWF Models
957
+ # - Deutscher Wetterdienst (DWD) Models
958
+ # - Meteo-France Models
959
+ # - CMC Models
960
+ # - Japan Meteorological Agency (JMA) Models
961
+ # - UK Met Office (UKMO)
962
+ # - Current Weather (Model Mosaic)
963
+ # - Google (Weather Next 2 Ensemble)
964
+ import wxdata.api.open_meteo_api.weather_forecasts.noaa as open_meteo_api_noaa
965
+ import wxdata.api.open_meteo_api.weather_forecasts.ecmwf as open_meteo_api_ecmwf
966
+ import wxdata.api.open_meteo_api.weather_forecasts.dwd as open_meteo_api_dwd
967
+ import wxdata.api.open_meteo_api.weather_forecasts.meteo_france as open_meteo_api_meteo_france
968
+ import wxdata.api.open_meteo_api.weather_forecasts.cmc as open_meteo_api_cmc
969
+ import wxdata.api.open_meteo_api.weather_forecasts.jma as open_meteo_api_jma
970
+ import wxdata.api.open_meteo_api.weather_forecasts.ukmo as open_meteo_api_ukmo
971
+ import wxdata.api.open_meteo_api.weather_forecasts.current_weather as open_meteo_api_current_weather
972
+ import wxdata.api.open_meteo_api.weather_forecasts.google as open_meteo_api_google
973
+
974
+ ### Seasonal Forecasts (ECMWF EC46 & SEAS5) ###
975
+
976
+ # - Daily Data (EC46 & SEAS5)
977
+ # - Weekly Data (EC46)
978
+ # - Monthly Data (SEAS5)
979
+ import wxdata.api.open_meteo_api.seasonal_forecasts.ecmwf_daily as open_meteo_api_ecmwf_seasonal_forecasts_daily
980
+ import wxdata.api.open_meteo_api.seasonal_forecasts.ecmwf_weekly as open_meteo_api_ecmwf_seasonal_forecasts_weekly
981
+ import wxdata.api.open_meteo_api.seasonal_forecasts.ecmwf_monthly as open_meteo_api_ecmwf_seasonal_forecasts_monthly
982
+
983
+ ### Climate Data ###
984
+ import wxdata.api.open_meteo_api.climate.climate_data as open_meteo_api_climate_data
985
+
986
+ ### Air Quality Information ###
987
+ import wxdata.api.open_meteo_api.air_quality.cams as open_meteo_api_air_quality
988
+
989
+ ### Marine Forecasts ###
990
+ # - Meteo-France
991
+ # - Deutscher Wetterdienst (DWD)
992
+ # - ECMWF
993
+ # - NOAA
994
+ import wxdata.api.open_meteo_api.marine_forecasts.meteo_france as open_meteo_api_meteo_france_marine
995
+ import wxdata.api.open_meteo_api.marine_forecasts.dwd as open_meteo_api_dwd_marine
996
+ import wxdata.api.open_meteo_api.marine_forecasts.ecmwf as open_meteo_api_ecmwf_marine
997
+ import wxdata.api.open_meteo_api.marine_forecasts.noaa as open_meteo_api_noaa_marine
998
+
999
+ ### Solar Radiation Forecasts ###
1000
+ import wxdata.api.open_meteo_api.solar_radiation.solar_radiation as open_meteo_api_solar_radiation
1001
+
1002
+ ###################
1003
+ ### Air-Now API ###
1004
+ ###################
1005
+
1006
+ # Air-Now API: https://docs.airnowapi.org/
1007
+
1008
+ # - Observations
1009
+ import wxdata.api.airnow_api.observations as air_now_observations
1010
+
1011
+ ```
1012
+ -------------------------------------------
1013
+
1014
+ ## Citations
1015
+
1016
+ **MetPy**: May, R. M., Goebbert, K. H., Thielen, J. E., Leeman, J. R., Camron, M. D., Bruick, Z.,
1017
+ Bruning, E. C., Manser, R. P., Arms, S. C., and Marsh, P. T., 2022: MetPy: A
1018
+ Meteorological Python Library for Data Analysis and Visualization. Bull. Amer. Meteor.
1019
+ Soc., 103, E2273-E2284, https://doi.org/10.1175/BAMS-D-21-0125.1.
1020
+
1021
+ **xarray**: Hoyer, S., Hamman, J. (In revision). Xarray: N-D labeled arrays and datasets in Python. Journal of Open Research Software.
1022
+
1023
+ **cartopy**: Phil Elson, Elliott Sales de Andrade, Greg Lucas, Ryan May, Richard Hattersley, Ed Campbell, Andrew Dawson, Bill Little, Stephane Raynaud, scmc72, Alan D. Snow, Ruth Comer, Kevin Donkers, Byron Blay, Peter Killick, Nat Wilson, Patrick Peglar, lgolston, lbdreyer, … Chris Havlin. (2023). SciTools/cartopy: v0.22.0 (v0.22.0). Zenodo. https://doi.org/10.5281/zenodo.8216315
1024
+
1025
+ **NumPy**: Harris, C.R., Millman, K.J., van der Walt, S.J. et al. Array programming with NumPy. Nature 585, 357–362 (2020). DOI: 10.1038/s41586-020-2649-2. (Publisher link).
1026
+
1027
+ **Pandas**: Pandas: McKinney, W., & others. (2010). Data structures for statistical computing in python. In Proceedings of the 9th Python in Science Conference (Vol. 445, pp. 51–56).
1028
+
1029
+ **dask**: Dask Development Team (2016). Dask: Library for dynamic task scheduling. URL http://dask.pydata.org
1030
+
1031
+ **cfgrib**: Author: ECMWF, Year: (2025), Title: cfgrib: A Python interface to map GRIB files to xarray, Source: https://github.com/ecmwf/cfgrib
1032
+
1033
+ **requests**: K. Reitz, "Requests: HTTP for Humans". Available: https://requests.readthedocs.io/.
1034
+
1035
+ **Beautiful Soup**: Richardson, L. (2025). Beautiful Soup (Version 4.14.3) [Computer software]. https://www.crummy.com/software/BeautifulSoup/
1036
+
1037
+ **shapeography**: Eric J. Drewitz. (2026). edrewitz/shapeography: shapeography 1.0 Released (shapeography1.0). Zenodo. https://doi.org/10.5281/zenodo.18676845
1038
+
1039
+ **geopandas**: Kelsey Jordahl, Joris Van den Bossche, Martin Fleischmann, Jacob Wasserman, James McBride, Jeffrey Gerard, … François Leblanc. (2020, July 15). geopandas/geopandas: v0.8.1 (Version v0.8.1). Zenodo. http://doi.org/10.5281/zenodo.3946761
1040
+
1041
+ **tqdm**: da Costa-Luis, (2019). tqdm: A Fast, Extensible Progress Meter for Python and CLI. Journal of Open Source Software, 4(37), 1277, https://doi.org/10.21105/joss.01277
1042
+
1043
+ **ecmwf-opendata**: European Centre for Medium-Range Weather Forecasts (2026). ecmwf-opendata[Computer software]. GitHub. https://github.com/ecmwf/ecmwf-opendata
1044
+
1045
+ **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/
1046
+
1047
+ **pyart**: Helmus, J.J. & Collis, S.M., (2016). The Python ARM Radar Toolkit (Py-ART), a Library for Working with Weather Radar Data in the Python Programming Language. Journal of Open Research Software. 4(1), p.e25. DOI: 10.5334/jors.119.
1048
+
1049
+ ----------------------------------------------------------
1050
+
1051
+ ## Data Sources
1052
+
1053
+ 1) [National Oceanic and Atmospheric Administration/National Center for Environmental Prediction](https://nomads.ncep.noaa.gov/)
1054
+
1055
+ 2) [European Centre for Medium-Range Weather Forecasts](https://data.ecmwf.int/forecasts/)
1056
+
1057
+ 3) [University of Wyoming](http://www.weather.uwyo.edu/upperair/sounding.shtml)
1058
+
1059
+ 4) [National Oceanic and Atmospheric Administration/National Weather Service](https://tgftp.nws.noaa.gov/)
1060
+
1061
+ 5) [National Oceanic and Atmospheric Administration/Aviation Weather Center](https://aviationweather.gov/)
1062
+
1063
+ 6) [National Oceanic and Atmospheric Administration/Climate Prediction Center](https://www.cpc.ncep.noaa.gov/products/GIS/GIS_DATA/us_tempprcpfcst/index.php)
1064
+
1065
+ 7) [Applied Climate Information System (ACIS)](https://www.rcc-acis.org/docs_webservices.html)
1066
+
1067
+ 8) [USDA Fire Environment Mapping System](https://fems.fs2c.usda.gov/download)
1068
+
1069
+ 9) [Amazon AWS Unidata NEXRAD2 Bucket](https://unidata-nexrad-level2.s3.amazonaws.com/index.html)
1070
+
1071
+ 10) [Open-Meteo API](https://open-meteo.com/)
1072
+
1073
+ 11) [Air Now API](https://docs.airnowapi.org/webservices)
1074
+
1075
+ 12) [Canadian Meteorological Centre](https://dd.weather.gc.ca/)
1076
+
1077
+
1078
+