pycontrails 0.53.1__tar.gz → 0.54.0__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.

Potentially problematic release.


This version of pycontrails might be problematic. Click here for more details.

Files changed (278) hide show
  1. {pycontrails-0.53.1 → pycontrails-0.54.0}/.github/workflows/release.yaml +1 -1
  2. {pycontrails-0.53.1 → pycontrails-0.54.0}/.github/workflows/test.yaml +1 -2
  3. {pycontrails-0.53.1 → pycontrails-0.54.0}/.pre-commit-config.yaml +11 -10
  4. {pycontrails-0.53.1 → pycontrails-0.54.0}/CHANGELOG.md +29 -0
  5. {pycontrails-0.53.1 → pycontrails-0.54.0}/Makefile +10 -15
  6. {pycontrails-0.53.1/pycontrails.egg-info → pycontrails-0.54.0}/PKG-INFO +2 -4
  7. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/develop.rst +7 -7
  8. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/integrations/APCEMM.ipynb +4 -12
  9. pycontrails-0.54.0/docs/notebooks/ARCO-ERA5.ipynb +389 -0
  10. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/CoCiP.ipynb +2 -2
  11. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/GFS.ipynb +4 -5
  12. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/Landsat.ipynb +1 -1
  13. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/Meteorology.ipynb +2 -2
  14. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/Sentinel.ipynb +1 -1
  15. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/advection.ipynb +2 -2
  16. pycontrails-0.54.0/docs/notebooks/model-levels.ipynb +651 -0
  17. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/run-cocip-on-flight.ipynb +0 -1
  18. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/run-cocip-with-fdr.ipynb +2 -5
  19. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/_version.py +2 -2
  20. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/flight.py +3 -1
  21. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/rgi_cython.c +155 -155
  22. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/vector.py +0 -1
  23. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/_met_utils/metsource.py +1 -1
  24. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/ecmwf/__init__.py +22 -2
  25. pycontrails-0.54.0/pycontrails/datalib/ecmwf/arco_era5.py +340 -0
  26. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/ecmwf/era5.py +1 -0
  27. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/ecmwf/era5_model_level.py +112 -114
  28. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/ecmwf/hres_model_level.py +38 -74
  29. pycontrails-0.54.0/pycontrails/datalib/ecmwf/model_levels.py +434 -0
  30. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/ecmwf/variables.py +11 -0
  31. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/landsat.py +3 -2
  32. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/sentinel.py +0 -1
  33. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/ext/synthetic_flight.py +5 -1
  34. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/apcemm/apcemm.py +0 -1
  35. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/cocip/cocip.py +0 -1
  36. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/dry_advection.py +11 -3
  37. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/issr.py +2 -2
  38. {pycontrails-0.53.1 → pycontrails-0.54.0/pycontrails.egg-info}/PKG-INFO +2 -4
  39. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails.egg-info/SOURCES.txt +2 -0
  40. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails.egg-info/requires.txt +1 -3
  41. {pycontrails-0.53.1 → pycontrails-0.54.0}/pyproject.toml +2 -10
  42. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/benchmark/cocip/review.ipynb +1 -10
  43. pycontrails-0.54.0/tests/fixtures/ecmwf-met.py +95 -0
  44. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/conftest.py +14 -0
  45. pycontrails-0.54.0/tests/unit/static/met-ecmwf-lnsp.nc +0 -0
  46. pycontrails-0.54.0/tests/unit/static/met-ecmwf-ml.nc +0 -0
  47. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_ecmwf.py +116 -15
  48. pycontrails-0.53.1/docs/notebooks/ARCO-ERA5.ipynb +0 -370
  49. pycontrails-0.53.1/docs/notebooks/model-levels.ipynb +0 -2019
  50. pycontrails-0.53.1/pycontrails/datalib/ecmwf/arco_era5.py +0 -527
  51. pycontrails-0.53.1/pycontrails/datalib/ecmwf/model_levels.py +0 -79
  52. pycontrails-0.53.1/tests/fixtures/ecmwf-met.py +0 -65
  53. {pycontrails-0.53.1 → pycontrails-0.54.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  54. {pycontrails-0.53.1 → pycontrails-0.54.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  55. {pycontrails-0.53.1 → pycontrails-0.54.0}/.github/dependabot.yaml +0 -0
  56. {pycontrails-0.53.1 → pycontrails-0.54.0}/.github/pull_request_template.md +0 -0
  57. {pycontrails-0.53.1 → pycontrails-0.54.0}/.github/workflows/docs.yaml +0 -0
  58. {pycontrails-0.53.1 → pycontrails-0.54.0}/.github/workflows/doctest.yaml +0 -0
  59. {pycontrails-0.53.1 → pycontrails-0.54.0}/.github/workflows/scorecard.yaml +0 -0
  60. {pycontrails-0.53.1 → pycontrails-0.54.0}/.gitignore +0 -0
  61. {pycontrails-0.53.1 → pycontrails-0.54.0}/.zenodo.json +0 -0
  62. {pycontrails-0.53.1 → pycontrails-0.54.0}/CONTRIBUTING.md +0 -0
  63. {pycontrails-0.53.1 → pycontrails-0.54.0}/LICENSE +0 -0
  64. {pycontrails-0.53.1 → pycontrails-0.54.0}/NOTICE +0 -0
  65. {pycontrails-0.53.1 → pycontrails-0.54.0}/README.md +0 -0
  66. {pycontrails-0.53.1 → pycontrails-0.54.0}/RELEASE.md +0 -0
  67. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/_static/css/style.css +0 -0
  68. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/_static/img/colab.png +0 -0
  69. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/_static/img/favicon.png +0 -0
  70. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/_static/img/logo-dark.png +0 -0
  71. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/_static/img/logo.png +0 -0
  72. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/_static/pycontrails.bib +0 -0
  73. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/api.rst +0 -0
  74. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/changelog.rst +0 -0
  75. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/conf.py +0 -0
  76. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/contributing.rst +0 -0
  77. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/flight.rst +0 -0
  78. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/index.rst +0 -0
  79. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/install.rst +0 -0
  80. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/integrations/ACCF.ipynb +1 -1
  81. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/literature.rst +0 -0
  82. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/meteorology.rst +0 -0
  83. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/models.rst +0 -0
  84. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/AircraftPerformance.ipynb +0 -0
  85. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/Cache.ipynb +0 -0
  86. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/ECMWF.ipynb +0 -0
  87. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/Flight.ipynb +1 -1
  88. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/GOES.ipynb +0 -0
  89. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/ISSR.ipynb +3 -3
  90. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/SAC.ipynb +3 -3
  91. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/airports.ipynb +0 -0
  92. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/data/.gitignore +0 -0
  93. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/data/flight-ap.csv +0 -0
  94. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/data/flight-cocip.csv +0 -0
  95. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/data/flight-fdr.csv +0 -0
  96. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/data/flight-noisy.csv +0 -0
  97. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/data/flight.csv +0 -0
  98. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/data/iagos-flight-landsat.csv +0 -0
  99. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/data/iagos-flight-sentinel.csv +0 -0
  100. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/flightplan.ipynb +0 -0
  101. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks/specific-humidity-interpolation.ipynb +0 -0
  102. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/notebooks.rst +0 -0
  103. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/observations.rst +0 -0
  104. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/tutorials.rst +0 -0
  105. {pycontrails-0.53.1 → pycontrails-0.54.0}/docs/utilities.rst +0 -0
  106. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/__init__.py +0 -0
  107. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/__init__.py +0 -0
  108. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/aircraft_performance.py +0 -0
  109. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/airports.py +0 -0
  110. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/cache.py +0 -0
  111. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/coordinates.py +0 -0
  112. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/fleet.py +0 -0
  113. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/flightplan.py +0 -0
  114. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/fuel.py +0 -0
  115. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/interpolation.py +0 -0
  116. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/met.py +0 -0
  117. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/met_var.py +0 -0
  118. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/models.py +0 -0
  119. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/polygon.py +0 -0
  120. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/core/rgi_cython.pyx +0 -0
  121. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/__init__.py +0 -0
  122. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/_leo_utils/search.py +0 -0
  123. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/_leo_utils/static/bq_roi_query.sql +0 -0
  124. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/_leo_utils/vis.py +0 -0
  125. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/ecmwf/common.py +0 -0
  126. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/ecmwf/hres.py +0 -0
  127. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/ecmwf/ifs.py +0 -0
  128. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv +0 -0
  129. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/gfs/__init__.py +0 -0
  130. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/gfs/gfs.py +0 -0
  131. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/gfs/variables.py +0 -0
  132. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/goes.py +0 -0
  133. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/datalib/spire.py +0 -0
  134. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/ext/bada.py +0 -0
  135. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/ext/cirium.py +0 -0
  136. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/ext/empirical_grid.py +0 -0
  137. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/__init__.py +0 -0
  138. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/accf.py +0 -0
  139. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/apcemm/__init__.py +0 -0
  140. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/apcemm/inputs.py +0 -0
  141. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/apcemm/static/apcemm_yaml_template.yaml +0 -0
  142. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/apcemm/utils.py +0 -0
  143. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/cocip/__init__.py +0 -0
  144. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/cocip/cocip_params.py +0 -0
  145. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/cocip/cocip_uncertainty.py +0 -0
  146. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/cocip/contrail_properties.py +0 -0
  147. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/cocip/output_formats.py +0 -0
  148. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/cocip/radiative_forcing.py +0 -0
  149. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/cocip/radiative_heating.py +0 -0
  150. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/cocip/unterstrasser_wake_vortex.py +0 -0
  151. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/cocip/wake_vortex.py +0 -0
  152. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/cocip/wind_shear.py +0 -0
  153. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/cocipgrid/__init__.py +0 -0
  154. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/cocipgrid/cocip_grid.py +0 -0
  155. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/cocipgrid/cocip_grid_params.py +0 -0
  156. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/emissions/__init__.py +0 -0
  157. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/emissions/black_carbon.py +0 -0
  158. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/emissions/emissions.py +0 -0
  159. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/emissions/ffm2.py +0 -0
  160. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/emissions/static/default-engine-uids.csv +0 -0
  161. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv +0 -0
  162. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv +0 -0
  163. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/humidity_scaling/__init__.py +0 -0
  164. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/humidity_scaling/humidity_scaling.py +0 -0
  165. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq +0 -0
  166. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq +0 -0
  167. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/pcc.py +0 -0
  168. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/pcr.py +0 -0
  169. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/ps_model/__init__.py +0 -0
  170. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/ps_model/ps_aircraft_params.py +0 -0
  171. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/ps_model/ps_grid.py +0 -0
  172. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/ps_model/ps_model.py +0 -0
  173. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/ps_model/ps_operational_limits.py +0 -0
  174. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/ps_model/static/ps-aircraft-params-20240524.csv +0 -0
  175. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/ps_model/static/ps-synonym-list-20240524.csv +0 -0
  176. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/sac.py +0 -0
  177. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/models/tau_cirrus.py +0 -0
  178. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/physics/__init__.py +0 -0
  179. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/physics/constants.py +0 -0
  180. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/physics/geo.py +0 -0
  181. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/physics/jet.py +0 -0
  182. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/physics/thermo.py +0 -0
  183. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/physics/units.py +0 -0
  184. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/py.typed +0 -0
  185. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/utils/__init__.py +0 -0
  186. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/utils/dependencies.py +0 -0
  187. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/utils/iteration.py +0 -0
  188. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/utils/json.py +0 -0
  189. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/utils/temp.py +0 -0
  190. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails/utils/types.py +0 -0
  191. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails.egg-info/dependency_links.txt +0 -0
  192. {pycontrails-0.53.1 → pycontrails-0.54.0}/pycontrails.egg-info/top_level.txt +0 -0
  193. {pycontrails-0.53.1 → pycontrails-0.54.0}/setup.cfg +0 -0
  194. {pycontrails-0.53.1 → pycontrails-0.54.0}/setup.py +0 -0
  195. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/__init__.py +0 -0
  196. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/_deprecated.py +0 -0
  197. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/benchmark/cocip/Makefile +0 -0
  198. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/benchmark/cocip/README.md +0 -0
  199. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/benchmark/cocip/benchmark.py +0 -0
  200. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/benchmark/cocip/compare.py +0 -0
  201. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/benchmark/cocip/data.md +0 -0
  202. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/benchmark/cocip/output.py +0 -0
  203. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/benchmark/cocip-fortran/README.md +0 -0
  204. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/benchmark/north-atlantic-study/.gcloudignore +0 -0
  205. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/benchmark/north-atlantic-study/README.md +0 -0
  206. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/benchmark/north-atlantic-study/support.py +0 -0
  207. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/benchmark/north-atlantic-study/validate.py +0 -0
  208. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/fixtures/cocip-met.py +0 -0
  209. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/fixtures/cocip-met2.py +0 -0
  210. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/fixtures/gfs-met.py +0 -0
  211. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/__init__.py +0 -0
  212. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/NOAA_Solar_Calculations_day.csv +0 -0
  213. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/cocip-contrail-output.json +0 -0
  214. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/cocip-contrail-output2.json +0 -0
  215. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/cocip-flight-output.json +0 -0
  216. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/cocip-flight-output2.json +0 -0
  217. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/cocip-output-contrail-edges.json +0 -0
  218. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/cocip-output-flts-20190101-eu.pq +0 -0
  219. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/flight-cocip2.csv +0 -0
  220. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/flight-meridian.csv +0 -0
  221. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/flight-metadata.json +0 -0
  222. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/flight-spire-data-cleaning.pq +0 -0
  223. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/flight.csv +0 -0
  224. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/flt-wypts-20190101-eu.pq +0 -0
  225. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/met-20190101-eu.nc +0 -0
  226. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/met-accf-pl.nc +0 -0
  227. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/met-accf-sl.nc +0 -0
  228. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/met-ecmwf-pl.nc +0 -0
  229. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/met-ecmwf-sl.nc +0 -0
  230. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/met-era5-cocip1.nc +0 -0
  231. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/met-era5-cocip2.nc +0 -0
  232. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/met-gfs.nc +0 -0
  233. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/polygon-bug.nc +0 -0
  234. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/rad-20190101-eu.nc +0 -0
  235. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/rad-era5-cocip1.nc +0 -0
  236. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/rad-era5-cocip2.nc +0 -0
  237. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/static/rad-gfs.nc +0 -0
  238. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_accf.py +0 -0
  239. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_airports.py +0 -0
  240. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_apcemm.py +0 -0
  241. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_cache.py +0 -0
  242. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_cocip.py +0 -0
  243. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_cocip_grid.py +0 -0
  244. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_cocip_grid_parity.py +0 -0
  245. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_cocip_radiative_forcing.py +0 -0
  246. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_cocip_uncertainty.py +0 -0
  247. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_coordinates.py +0 -0
  248. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_datalib_metsource.py +0 -0
  249. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_dry_advection.py +0 -0
  250. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_dtypes.py +0 -0
  251. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_emissions.py +0 -0
  252. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_fleet.py +0 -0
  253. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_flight.py +0 -0
  254. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_flightplan.py +0 -0
  255. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_fuel.py +0 -0
  256. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_geo.py +0 -0
  257. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_gfs.py +0 -0
  258. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_goes.py +0 -0
  259. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_grid_to_netcdf.py +0 -0
  260. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_humidity_scaling.py +0 -0
  261. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_init.py +0 -0
  262. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_interpolation.py +0 -0
  263. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_leo.py +0 -0
  264. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_met.py +0 -0
  265. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_met_cache.py +0 -0
  266. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_models.py +0 -0
  267. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_pcc.py +0 -0
  268. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_polygons.py +0 -0
  269. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_ps_model.py +0 -0
  270. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_sac_issr.py +0 -0
  271. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_spire.py +0 -0
  272. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_tau_cirrus.py +0 -0
  273. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_thermo_sac.py +0 -0
  274. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_units.py +0 -0
  275. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_unterstrasser_wake_vortex.py +0 -0
  276. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_utils.py +0 -0
  277. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_vector.py +0 -0
  278. {pycontrails-0.53.1 → pycontrails-0.54.0}/tests/unit/test_zarr.py +0 -0
@@ -40,7 +40,7 @@ jobs:
40
40
 
41
41
  # https://cibuildwheel.readthedocs.io/en/stable/options/#testing
42
42
  - name: Build wheels
43
- uses: pypa/cibuildwheel@v2.20
43
+ uses: pypa/cibuildwheel@v2.21
44
44
  env:
45
45
  CIBW_BUILD: cp310-* cp311-* cp312-* cp313-*
46
46
  CIBW_SKIP: '*-win32 *-manylinux_i686 *-musllinux*'
@@ -123,7 +123,6 @@ jobs:
123
123
  shell: bash
124
124
  run: |
125
125
  pip check
126
- make black-check
127
- make ruff
126
+ make lint
128
127
  make mypy
129
128
  make pytest
@@ -1,13 +1,21 @@
1
1
  repos:
2
2
  - repo: local
3
3
  hooks:
4
- - id: ruff
5
- name: ruff
4
+ - id: ruff-format
5
+ name: ruff format
6
+ language_version: python3
7
+ language: python
8
+ entry: ruff format
9
+ types: [file]
10
+ files: \.(py|ipynb)$
11
+ - id: ruff-lint
12
+ name: ruff lint
6
13
  language_version: python3
7
14
  language: python
8
15
  entry: ruff check
9
16
  args: [--fix, --exit-non-zero-on-fix]
10
- types: [python]
17
+ types: [file]
18
+ files: \.(py|ipynb)$
11
19
  - id: doc8
12
20
  name: doc8
13
21
  language_version: python3
@@ -15,13 +23,6 @@ repos:
15
23
  entry: doc8
16
24
  types: [file]
17
25
  files: \.(rst)$
18
- - id: black
19
- name: black
20
- language_version: python3
21
- language: python
22
- entry: black
23
- types: [file]
24
- files: \.(py|ipynb)$
25
26
  - id: nb-clean
26
27
  name: nb-clean
27
28
  language_version: python3
@@ -1,5 +1,34 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.54.0
4
+
5
+ ### Features
6
+
7
+ - Perform model-level to pressure-level conversion in-house instead of relying on `metview`. This update has several advantages:
8
+ - The `ARCOERA5` and `ERA5ModelLevel` interfaces no longer require `metview` to be installed. Similarly, grib files and the associated tooling can also largely be avoided.
9
+ - The computation is performed using `xarray` and `dask` tooling, which means the result can be computed lazily if desired.
10
+ - The computation is defined using `numpy` operations (some of which release the GIL) and can be parallelized using threading through `dask` (this is the default behavior).
11
+ - The computation is generally a bit faster than the `metview` implementation (this depends on the exact chunking of the model level meteorology data). This chunking can be tuned by the user to optimize runtime performance or memory usage.
12
+
13
+ See the `ml_to_pl` function for low-level details.
14
+
15
+ - Update the `ARCOERA5` and `ERA5ModelLevel` interfaces to use the new model-level to pressure-level conversion. The ERA5 model level data is now downloaded as the netcdf format instead of grib. This format change decreases the download size.
16
+
17
+ ### Breaking changes
18
+
19
+ - Rename `levels` -> `model_levels` in the `ARCOERA5` and `ERA5ModelLevel` constructors. Rename `cache_grib` -> `cache_download`.
20
+ - Rename `pressure_levels_at_model_levels` -> `model_level_reference_pressure`. Add a new `model_level_pressure` method that requires surface pressure data.
21
+
22
+ ### Fixes
23
+
24
+ - Update `ERA5ModelLevel` for the new CDS-Beta server.
25
+
26
+ ### Internals
27
+
28
+ - Use `ruff` to format the codebase in place of `black`.
29
+ - Run `ruff` linting and formatting over the notebook examples in the documentation.
30
+ - Update development documentation with new links.
31
+
3
32
  ## v0.53.1
4
33
 
5
34
  ### Features
@@ -71,14 +71,12 @@ dev-pycontrails-bada:
71
71
  # QC, Test
72
72
  # -----------
73
73
 
74
- ruff: black-check
75
- ruff check pycontrails tests
74
+ lint:
75
+ ruff check pycontrails tests docs
76
+ ruff format --check pycontrails tests docs
76
77
 
77
- black:
78
- black pycontrails tests
79
-
80
- black-check:
81
- black pycontrails tests --check
78
+ format:
79
+ ruff format pycontrails tests docs
82
80
 
83
81
  # https://taplo.tamasfe.dev/
84
82
  taplo:
@@ -107,7 +105,7 @@ pytest-cov:
107
105
  --ignore=tests/unit/test_zarr.py \
108
106
  tests/unit
109
107
 
110
- test: ruff mypy black-check nb-black-check pytest doctest nb-test
108
+ test: lint mypy pytest doctest nb-test
111
109
 
112
110
  profile:
113
111
  python -m cProfile -o $(script).prof $(script)
@@ -178,11 +176,8 @@ doctest: ensure-numpy-2 ensure-era5-cached ensure-gcp-credentials
178
176
  doc8:
179
177
  doc8 docs
180
178
 
181
- nb-black:
182
- black docs/**/*.ipynb
183
-
184
- nb-black-check:
185
- black docs/**/*.ipynb --check
179
+ nb-format-check:
180
+ ruff format --check docs/**/*.ipynb
186
181
 
187
182
  # Note must be kept in sync with
188
183
  # `.pre-commit-config.yaml` and `make nb-clean-check`
@@ -206,7 +201,7 @@ nb-clean-check:
206
201
  # TODO:
207
202
  # - Install eccodes on Github Action so GFS notebook can run
208
203
  # - Provide meteorology data for `run-cocip-on-flight` tutorial
209
- nb-test: ensure-era5-cached nb-clean-check nb-black-check nb-check-links
204
+ nb-test: ensure-era5-cached nb-clean-check nb-format-check nb-check-links
210
205
  python -m pytest --nbval-lax \
211
206
  --ignore=docs/integrations/ACCF.ipynb \
212
207
  --ignore=docs/integrations/APCEMM.ipynb \
@@ -231,7 +226,7 @@ nb-check-links:
231
226
  # NOTE notebooks from docs/integrations/ manually
232
227
  # Add `skip-execution` cell tag if you want to skip a cell
233
228
  # Add `raises-exception` cell tag if you know the cell raises exception
234
- nb-execute: ensure-era5-cached nb-black-check nb-check-links
229
+ nb-execute: ensure-era5-cached nb-format-check nb-check-links
235
230
  jupyter nbconvert --inplace \
236
231
  --to notebook \
237
232
  --execute \
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycontrails
3
- Version: 0.53.1
3
+ Version: 0.54.0
4
4
  Summary: Python library for modeling aviation climate impacts
5
5
  Author-email: Breakthrough Energy <py@contrails.org>
6
6
  License: Apache-2.0
@@ -36,7 +36,6 @@ Requires-Dist: xarray>=2022.3
36
36
  Provides-Extra: complete
37
37
  Requires-Dist: pycontrails[ecmwf,gcp,gfs,jupyter,pyproj,sat,vis,zarr]; extra == "complete"
38
38
  Provides-Extra: dev
39
- Requires-Dist: black[jupyter]==24.8.0; extra == "dev"
40
39
  Requires-Dist: dep_license; extra == "dev"
41
40
  Requires-Dist: fastparquet>=0.8; extra == "dev"
42
41
  Requires-Dist: ipdb>=0.13; extra == "dev"
@@ -50,7 +49,7 @@ Requires-Dist: pyarrow>=5.0; extra == "dev"
50
49
  Requires-Dist: pytest>=8.2; extra == "dev"
51
50
  Requires-Dist: pytest-cov>=2.11; extra == "dev"
52
51
  Requires-Dist: requests>=2.25; extra == "dev"
53
- Requires-Dist: ruff==0.5.7; extra == "dev"
52
+ Requires-Dist: ruff==0.6.2; extra == "dev"
54
53
  Requires-Dist: setuptools; extra == "dev"
55
54
  Provides-Extra: docs
56
55
  Requires-Dist: doc8>=1.1; extra == "docs"
@@ -73,7 +72,6 @@ Requires-Dist: ecmwf-api-client>=1.6; extra == "ecmwf"
73
72
  Requires-Dist: netcdf4>=1.6.1; extra == "ecmwf"
74
73
  Requires-Dist: platformdirs>=3.0; extra == "ecmwf"
75
74
  Requires-Dist: requests>=2.25; extra == "ecmwf"
76
- Requires-Dist: lxml>=5.1.0; extra == "ecmwf"
77
75
  Provides-Extra: gcp
78
76
  Requires-Dist: google-cloud-storage>=2.1; extra == "gcp"
79
77
  Requires-Dist: platformdirs>=3.0; extra == "gcp"
@@ -91,17 +91,17 @@ but should also be run locally before submitting PRs:
91
91
 
92
92
  $ make test
93
93
 
94
- Lint the repository with `ruff <https://beta.ruff.rs/docs/>`__:
94
+ Lint the repository with `ruff <https://docs.astral.sh/ruff/>`__:
95
95
 
96
96
  .. code-block:: bash
97
97
 
98
- $ make ruff
98
+ $ make lint
99
99
 
100
- Autoformat the repository with `black <https://black.readthedocs.io/en/stable/>`__:
100
+ Autoformat the repository with `ruff <https://docs.astral.sh/ruff/formatter/>`__:
101
101
 
102
102
  .. code-block:: bash
103
103
 
104
- $ make black
104
+ $ make format
105
105
 
106
106
  Run type checking with `mypy <https://www.mypy-lang.org/>`__:
107
107
 
@@ -109,7 +109,7 @@ Run type checking with `mypy <https://www.mypy-lang.org/>`__:
109
109
 
110
110
  $ make mypy
111
111
 
112
- Run unit tests with `pytest <https://docs.pytest.org/en/7.2.x/>`__:
112
+ Run unit tests with `pytest <https://docs.pytest.org/en/latest/>`__:
113
113
 
114
114
  .. code-block:: bash
115
115
 
@@ -121,7 +121,7 @@ Run notebook validation with `nbval <https://github.com/computationalmodelling/n
121
121
 
122
122
  $ make nb-test
123
123
 
124
- Run doctests with `pytest <https://docs.pytest.org/en/7.2.x/>`__:
124
+ Run doctests with `pytest <https://docs.pytest.org/en/latest/>`__:
125
125
 
126
126
  .. code-block:: bash
127
127
 
@@ -294,7 +294,7 @@ The project uses `Black <https://black.readthedocs.io/en/stable/>`__,
294
294
  standardize code-formatting. These tools are run automatically in a
295
295
  pre-commit hook.
296
296
 
297
- The project uses `pytest <https://docs.pytest.org/en/7.2.x/>`__ to run
297
+ The project uses `pytest <https://docs.pytest.org/en/latest/>`__ to run
298
298
  unit tests. New code should include clear unit tests for implementation
299
299
  and output values. New test files should be included in the
300
300
  `/tests/unit/ directory <https://github.com/contrailcirrus/pycontrails/tree/main/tests/unit>`__.
@@ -26,17 +26,16 @@
26
26
  "import os\n",
27
27
  "\n",
28
28
  "import cartopy.crs as ccrs\n",
29
+ "import matplotlib.pyplot as plt\n",
29
30
  "import numpy as np\n",
30
31
  "import pandas as pd\n",
31
- "import matplotlib.colors as colors\n",
32
- "import matplotlib.pyplot as plt\n",
33
32
  "import xarray as xr\n",
33
+ "from matplotlib import colors\n",
34
34
  "\n",
35
- "from pycontrails import Flight, MetDataset, MetVariable\n",
35
+ "from pycontrails import Flight, MetVariable\n",
36
36
  "from pycontrails.core.met_var import Geopotential\n",
37
37
  "from pycontrails.datalib.ecmwf import ARCOERA5\n",
38
38
  "from pycontrails.models.apcemm.apcemm import APCEMM\n",
39
- "from pycontrails.models.apcemm.inputs import APCEMMInput\n",
40
39
  "from pycontrails.models.humidity_scaling import HistogramMatching\n",
41
40
  "from pycontrails.models.issr import ISSR\n",
42
41
  "from pycontrails.models.ps_model import PSFlight\n",
@@ -54,14 +53,7 @@
54
53
  "\n",
55
54
  "This demo uses model-level [ERA5](https://www.ecmwf.int/en/forecasts/dataset/ecmwf-reanalysis-v5) data from the [ARCO ERA5 dataset](https://github.com/google-research/arco-era5) for met data. \n",
56
55
  "\n",
57
- "> Note this will download ~3 GB of meteorology data to your computer\n",
58
- "\n",
59
- "Processing ARCO ERA5 data requires [metview](https://metview.readthedocs.io/en/latest/) binaries and python bindings. If pycontrails is installed in a conda environment, metview can be installed by running\n",
60
- "```bash\n",
61
- "conda install -c conda-forge metview\n",
62
- "conda install -c conda-forge metview-python\n",
63
- "python -m metview selfcheck\n",
64
- "```"
56
+ "> Note this will download ~3 GB of meteorology data to your computer"
65
57
  ]
66
58
  },
67
59
  {