pycontrails 0.50.2__tar.gz → 0.51.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (258) hide show
  1. {pycontrails-0.50.2 → pycontrails-0.51.1}/.zenodo.json +5 -1
  2. {pycontrails-0.50.2 → pycontrails-0.51.1}/CHANGELOG.md +50 -1
  3. {pycontrails-0.50.2 → pycontrails-0.51.1}/Makefile +11 -3
  4. {pycontrails-0.50.2 → pycontrails-0.51.1}/PKG-INFO +4 -4
  5. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/api.rst +3 -0
  6. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/conf.py +5 -0
  7. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/ECMWF.ipynb +2439 -526
  8. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/_version.py +2 -2
  9. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/datalib.py +22 -0
  10. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/flight.py +87 -7
  11. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/met.py +33 -5
  12. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/polygon.py +10 -3
  13. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/rgi_cython.c +125 -125
  14. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/__init__.py +6 -0
  15. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/arco_era5.py +2 -53
  16. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/common.py +4 -0
  17. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/era5.py +2 -6
  18. pycontrails-0.51.1/pycontrails/datalib/ecmwf/era5_model_level.py +481 -0
  19. pycontrails-0.51.1/pycontrails/datalib/ecmwf/hres_model_level.py +494 -0
  20. pycontrails-0.51.1/pycontrails/datalib/ecmwf/model_levels.py +79 -0
  21. pycontrails-0.51.1/pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv +139 -0
  22. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/variables.py +12 -0
  23. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/humidity_scaling/humidity_scaling.py +55 -8
  24. pycontrails-0.51.1/pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq +0 -0
  25. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/ps_model/ps_aircraft_params.py +19 -3
  26. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/ps_model/ps_grid.py +21 -21
  27. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/ps_model/ps_model.py +41 -6
  28. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/ps_model/ps_operational_limits.py +15 -6
  29. pycontrails-0.50.2/pycontrails/models/ps_model/static/ps-aircraft-params-20240417.csv → pycontrails-0.51.1/pycontrails/models/ps_model/static/ps-aircraft-params-20240524.csv +16 -12
  30. pycontrails-0.51.1/pycontrails/models/ps_model/static/ps-synonym-list-20240524.csv +103 -0
  31. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/physics/thermo.py +1 -1
  32. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/utils/types.py +3 -2
  33. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails.egg-info/PKG-INFO +4 -4
  34. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails.egg-info/SOURCES.txt +8 -2
  35. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails.egg-info/requires.txt +3 -3
  36. {pycontrails-0.50.2 → pycontrails-0.51.1}/pyproject.toml +7 -5
  37. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/conftest.py +2 -2
  38. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/cocip-contrail-output.json +983 -983
  39. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/cocip-contrail-output2.json +4118 -4118
  40. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/cocip-flight-output.json +241 -241
  41. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/cocip-flight-output2.json +1394 -1394
  42. pycontrails-0.51.1/tests/unit/static/cocip-output-contrail-edges.json +242 -0
  43. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_cocip_grid.py +3 -1
  44. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_cocip_grid_parity.py +3 -1
  45. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_datalib.py +18 -0
  46. pycontrails-0.51.1/tests/unit/test_ecmwf.py +1145 -0
  47. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_flight.py +32 -0
  48. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_humidity_scaling.py +99 -1
  49. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_met.py +98 -4
  50. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_polygons.py +31 -0
  51. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_ps_model.py +31 -18
  52. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_thermo_sac.py +14 -1
  53. pycontrails-0.50.2/tests/unit/static/cocip-output-contrail-edges.json +0 -242
  54. pycontrails-0.50.2/tests/unit/test_ecmwf.py +0 -596
  55. {pycontrails-0.50.2 → pycontrails-0.51.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  56. {pycontrails-0.50.2 → pycontrails-0.51.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  57. {pycontrails-0.50.2 → pycontrails-0.51.1}/.github/dependabot.yaml +0 -0
  58. {pycontrails-0.50.2 → pycontrails-0.51.1}/.github/pull_request_template.md +0 -0
  59. {pycontrails-0.50.2 → pycontrails-0.51.1}/.github/workflows/benchmark.yaml +0 -0
  60. {pycontrails-0.50.2 → pycontrails-0.51.1}/.github/workflows/docs.yaml +0 -0
  61. {pycontrails-0.50.2 → pycontrails-0.51.1}/.github/workflows/doctest.yaml +0 -0
  62. {pycontrails-0.50.2 → pycontrails-0.51.1}/.github/workflows/release.yaml +0 -0
  63. {pycontrails-0.50.2 → pycontrails-0.51.1}/.github/workflows/scorecard.yaml +0 -0
  64. {pycontrails-0.50.2 → pycontrails-0.51.1}/.github/workflows/test.yaml +0 -0
  65. {pycontrails-0.50.2 → pycontrails-0.51.1}/.gitignore +0 -0
  66. {pycontrails-0.50.2 → pycontrails-0.51.1}/.pre-commit-config.yaml +0 -0
  67. {pycontrails-0.50.2 → pycontrails-0.51.1}/CONTRIBUTING.md +0 -0
  68. {pycontrails-0.50.2 → pycontrails-0.51.1}/LICENSE +0 -0
  69. {pycontrails-0.50.2 → pycontrails-0.51.1}/NOTICE +0 -0
  70. {pycontrails-0.50.2 → pycontrails-0.51.1}/README.md +0 -0
  71. {pycontrails-0.50.2 → pycontrails-0.51.1}/RELEASE.md +0 -0
  72. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/_static/css/style.css +0 -0
  73. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/_static/img/colab.png +0 -0
  74. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/_static/img/favicon.png +0 -0
  75. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/_static/img/logo-dark.png +0 -0
  76. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/_static/img/logo.png +0 -0
  77. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/_static/pycontrails.bib +0 -0
  78. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/changelog.rst +0 -0
  79. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/contributing.rst +0 -0
  80. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/develop.rst +0 -0
  81. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/flight.rst +0 -0
  82. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/index.rst +0 -0
  83. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/install.rst +0 -0
  84. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/integrations/ACCF.ipynb +0 -0
  85. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/literature.rst +0 -0
  86. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/meteorology.rst +0 -0
  87. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/models.rst +0 -0
  88. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/ARCO-ERA5.ipynb +0 -0
  89. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/AircraftPerformance.ipynb +0 -0
  90. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/Cache.ipynb +0 -0
  91. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/CoCiP.ipynb +0 -0
  92. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/Flight.ipynb +0 -0
  93. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/GFS.ipynb +0 -0
  94. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/GOES.ipynb +0 -0
  95. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/ISSR.ipynb +0 -0
  96. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/Meteorology.ipynb +0 -0
  97. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/SAC.ipynb +0 -0
  98. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/advection.ipynb +0 -0
  99. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/airports.ipynb +0 -0
  100. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/data/.gitignore +0 -0
  101. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/data/flight-ap.csv +0 -0
  102. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/data/flight-cocip.csv +0 -0
  103. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/data/flight-fdr.csv +0 -0
  104. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/data/flight-noisy.csv +0 -0
  105. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/data/flight.csv +0 -0
  106. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/flightplan.ipynb +0 -0
  107. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/model-levels.ipynb +0 -0
  108. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/run-cocip-on-flight.ipynb +0 -0
  109. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/run-cocip-with-fdr.ipynb +0 -0
  110. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks/specific-humidity-interpolation.ipynb +0 -0
  111. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/notebooks.rst +0 -0
  112. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/observations.rst +0 -0
  113. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/tutorials.rst +0 -0
  114. {pycontrails-0.50.2 → pycontrails-0.51.1}/docs/utilities.rst +0 -0
  115. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/__init__.py +0 -0
  116. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/__init__.py +0 -0
  117. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/aircraft_performance.py +0 -0
  118. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/airports.py +0 -0
  119. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/cache.py +0 -0
  120. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/coordinates.py +0 -0
  121. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/fleet.py +0 -0
  122. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/flightplan.py +0 -0
  123. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/fuel.py +0 -0
  124. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/interpolation.py +0 -0
  125. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/met_var.py +0 -0
  126. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/models.py +0 -0
  127. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/rgi_cython.pyx +0 -0
  128. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/core/vector.py +0 -0
  129. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/datalib/__init__.py +0 -0
  130. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/hres.py +0 -0
  131. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/ifs.py +0 -0
  132. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/datalib/gfs/__init__.py +0 -0
  133. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/datalib/gfs/gfs.py +0 -0
  134. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/datalib/gfs/variables.py +0 -0
  135. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/datalib/goes.py +0 -0
  136. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/datalib/spire/__init__.py +0 -0
  137. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/datalib/spire/spire.py +0 -0
  138. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/ext/bada.py +0 -0
  139. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/ext/cirium.py +0 -0
  140. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/ext/empirical_grid.py +0 -0
  141. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/ext/synthetic_flight.py +0 -0
  142. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/__init__.py +0 -0
  143. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/accf.py +0 -0
  144. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/cocip/__init__.py +0 -0
  145. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/cocip/cocip.py +0 -0
  146. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/cocip/cocip_params.py +0 -0
  147. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/cocip/cocip_uncertainty.py +0 -0
  148. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/cocip/contrail_properties.py +0 -0
  149. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/cocip/output_formats.py +0 -0
  150. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/cocip/radiative_forcing.py +0 -0
  151. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/cocip/radiative_heating.py +0 -0
  152. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/cocip/unterstrasser_wake_vortex.py +0 -0
  153. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/cocip/wake_vortex.py +0 -0
  154. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/cocip/wind_shear.py +0 -0
  155. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/cocipgrid/__init__.py +0 -0
  156. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/cocipgrid/cocip_grid.py +0 -0
  157. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/cocipgrid/cocip_grid_params.py +0 -0
  158. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/dry_advection.py +0 -0
  159. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/emissions/__init__.py +0 -0
  160. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/emissions/black_carbon.py +0 -0
  161. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/emissions/emissions.py +0 -0
  162. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/emissions/ffm2.py +0 -0
  163. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/emissions/static/default-engine-uids.csv +0 -0
  164. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv +0 -0
  165. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv +0 -0
  166. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/humidity_scaling/__init__.py +0 -0
  167. /pycontrails-0.50.2/pycontrails/models/humidity_scaling/quantiles/era5-quantiles.pq → /pycontrails-0.51.1/pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq +0 -0
  168. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/issr.py +0 -0
  169. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/pcc.py +0 -0
  170. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/pcr.py +0 -0
  171. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/ps_model/__init__.py +0 -0
  172. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/sac.py +0 -0
  173. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/models/tau_cirrus.py +0 -0
  174. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/physics/__init__.py +0 -0
  175. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/physics/constants.py +0 -0
  176. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/physics/geo.py +0 -0
  177. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/physics/jet.py +0 -0
  178. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/physics/units.py +0 -0
  179. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/py.typed +0 -0
  180. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/utils/__init__.py +0 -0
  181. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/utils/dependencies.py +0 -0
  182. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/utils/iteration.py +0 -0
  183. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/utils/json.py +0 -0
  184. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails/utils/temp.py +0 -0
  185. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails.egg-info/dependency_links.txt +0 -0
  186. {pycontrails-0.50.2 → pycontrails-0.51.1}/pycontrails.egg-info/top_level.txt +0 -0
  187. {pycontrails-0.50.2 → pycontrails-0.51.1}/setup.cfg +0 -0
  188. {pycontrails-0.50.2 → pycontrails-0.51.1}/setup.py +0 -0
  189. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/__init__.py +0 -0
  190. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/_deprecated.py +0 -0
  191. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/benchmark/cocip/Makefile +0 -0
  192. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/benchmark/cocip/README.md +0 -0
  193. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/benchmark/cocip/benchmark.py +0 -0
  194. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/benchmark/cocip/compare.py +0 -0
  195. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/benchmark/cocip/data.md +0 -0
  196. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/benchmark/cocip/output.py +0 -0
  197. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/benchmark/cocip/review.ipynb +0 -0
  198. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/benchmark/cocip-fortran/README.md +0 -0
  199. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/benchmark/north-atlantic-study/.gcloudignore +0 -0
  200. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/benchmark/north-atlantic-study/README.md +0 -0
  201. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/benchmark/north-atlantic-study/support.py +0 -0
  202. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/benchmark/north-atlantic-study/validate.py +0 -0
  203. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/fixtures/cocip-met.py +0 -0
  204. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/fixtures/cocip-met2.py +0 -0
  205. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/fixtures/ecmwf-met.py +0 -0
  206. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/fixtures/gfs-met.py +0 -0
  207. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/__init__.py +0 -0
  208. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/NOAA_Solar_Calculations_day.csv +0 -0
  209. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/cocip-output-flts-20190101-eu.pq +0 -0
  210. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/flight-cocip2.csv +0 -0
  211. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/flight-meridian.csv +0 -0
  212. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/flight-metadata.json +0 -0
  213. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/flight-spire-data-cleaning.pq +0 -0
  214. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/flight.csv +0 -0
  215. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/flt-wypts-20190101-eu.pq +0 -0
  216. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/met-20190101-eu.nc +0 -0
  217. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/met-accf-pl.nc +0 -0
  218. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/met-accf-sl.nc +0 -0
  219. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/met-ecmwf-pl.nc +0 -0
  220. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/met-ecmwf-sl.nc +0 -0
  221. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/met-era5-cocip1.nc +0 -0
  222. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/met-era5-cocip2.nc +0 -0
  223. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/met-gfs.nc +0 -0
  224. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/polygon-bug.nc +0 -0
  225. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/rad-20190101-eu.nc +0 -0
  226. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/rad-era5-cocip1.nc +0 -0
  227. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/rad-era5-cocip2.nc +0 -0
  228. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/static/rad-gfs.nc +0 -0
  229. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_accf.py +0 -0
  230. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_airports.py +0 -0
  231. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_cache.py +0 -0
  232. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_cocip.py +0 -0
  233. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_cocip_radiative_forcing.py +0 -0
  234. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_cocip_uncertainty.py +0 -0
  235. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_coordinates.py +0 -0
  236. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_dry_advection.py +0 -0
  237. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_dtypes.py +0 -0
  238. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_emissions.py +0 -0
  239. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_fleet.py +0 -0
  240. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_flightplan.py +0 -0
  241. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_fuel.py +0 -0
  242. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_geo.py +0 -0
  243. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_gfs.py +0 -0
  244. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_goes.py +0 -0
  245. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_grid_to_netcdf.py +0 -0
  246. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_init.py +0 -0
  247. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_interpolation.py +0 -0
  248. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_met_cache.py +0 -0
  249. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_models.py +0 -0
  250. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_pcc.py +0 -0
  251. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_sac_issr.py +0 -0
  252. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_spire.py +0 -0
  253. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_tau_cirrus.py +0 -0
  254. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_units.py +0 -0
  255. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_unterstrasser_wake_vortex.py +0 -0
  256. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_utils.py +0 -0
  257. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_vector.py +0 -0
  258. {pycontrails-0.50.2 → pycontrails-0.51.1}/tests/unit/test_zarr.py +0 -0
@@ -20,6 +20,10 @@
20
20
  {
21
21
  "name": "Tom Dean",
22
22
  "affiliation": "Breakthrough Energy"
23
+ },
24
+ {
25
+ "name": "Tristan Abbott",
26
+ "affiliation": "Breakthrough Energy"
23
27
  }
24
28
  ],
25
29
  "license": "Apache-2.0",
@@ -42,4 +46,4 @@
42
46
  "type": "Researcher"
43
47
  }
44
48
  ]
45
- }
49
+ }
@@ -1,6 +1,55 @@
1
-
2
1
  # Changelog
3
2
 
3
+ ## v0.51.1
4
+
5
+ ### Breaking changes
6
+
7
+ - Average fuel burn in the PS model is increased by 2.5\% unless `engine_deterioration_factor` is overriden.
8
+
9
+ ### Features
10
+
11
+ - PS model: Support four aircraft types, including `E75L`, `E75S`, `E290`, and `E295`
12
+ - PS model: Integrate `ps_synonym_list` to increase PS model aircraft type coverage to 102
13
+ - PS model: Account for increase in fuel consumption due to engine deterioration between maintenance cycle
14
+
15
+ ### Internals
16
+
17
+ - Calculate rate of climb and descent (ROCD) using hydrostatic equation to improve accuracy.
18
+ - PS model: Move engine performance buffer from `c_t_available` to `tr_max`.
19
+ - Set `tr_max` buffer to +20%, as recommended by Ian Poll.
20
+
21
+ ## v0.51.0
22
+
23
+ ### Breaking changes
24
+
25
+ - Geodesic interpolation is now used in `Flight.resample_and_fill` when the great circle distance between waypoints (rather than the total segment length including vertical displacement) exceeds a threshold. This may change the interpolation method used when resampling flight segments with lengths close to the geodesic interpolation threshold.
26
+ - Fixed typo in `thermo.c_pm` will decrease computed values of moist heat capacity with non-zero specific humidity. We expect the downstream impact on contrail predictions by `ISSR`, `SAC`, `PCR`, and `Cocip` models to be minimal.
27
+ - `np.nan` is now used as the default `fill_value` in `MetDataArray.to_polygon_feature` and `MetDataArray.to_polygon_feature_collection`. This ensures that NaN values are never included in polygon interiors unless a non-NaN `fill_value` is explicitly passed as a keyword argument.
28
+
29
+ ### Features
30
+
31
+ - Add `ERA5ModelLevel` and `HRESModelLevel` interfaces for accessing ERA5 and HRES data on model levels.
32
+ - Update [ECMWF tutorial notebook](https://py.contrails.org/notebooks/ECMWF.html) with instructions for using model-level datalibs.
33
+ - Add `HistogramMatching` humidity scaling calibrated for model-level ERA5 data.
34
+ - Modify `polygon.find_multipolygon`, `MetDataArray.to_polygon_feature`, `MetDataArray.to_polygon_feature_collection`, and `MetDataArray.to_polyhedra` to permit finding regions with values above or below a threshold.
35
+
36
+ ### Fixes
37
+
38
+ - Use horizontal great circle distance to determine whether geodesic interpolation is used in `Flight.resample_and_fill`. This ensures geodesic interpolation is used between sufficiently distant waypoints even when one or both waypoints contain NaN altitude data.
39
+ - Fix typo in moist heat capacity equation `thermo.c_pm`.
40
+
41
+ ### Internals
42
+
43
+ - Create static copy of dataframe for determining pressure at ECMWF model levels.
44
+ - Extract model-level utilities in `ARCOERA5` to their own module for reuse in `ERA5ModelLevel` and `HRESModelLevel`.
45
+ - Update Makefile so `make ensure-era5-cached` uses default cache directory when run locally.
46
+ - Bump pinned black and ruff versions.
47
+ - Disable mypy type checking on `functools.wraps` in `support_arraylike` decorator to avoid error that appears starting on mypy 1.10.0.
48
+ - Update pinned `Cocip` test output values after moist heat capacity bugfix.
49
+ - Add static files with ECMWF model levels and model-level ERA5 RHI quantiles to packaged data.
50
+ - Pass `exc_type=ImportError` to `pytest.importorskip` in test fixtures that use pycontrails extensions to suppress pytest warning when extensions are not installed.
51
+ - Bump minimum pytest version 8.2 to ensure the `exc_type` kwarg is available.
52
+
4
53
  ## v0.50.2
5
54
 
6
55
  ### Breaking changes
@@ -142,12 +142,11 @@ ensure-gcp-credentials:
142
142
  "See https://cloud.google.com/docs/authentication/application-default-credentials$(END_COLOR)"; \
143
143
  exit 1)
144
144
 
145
-
146
- # Cache common ERA5 data for nb-tests and doctests in DiskCacheStore(cache_dir=".doc-test-cache")
145
+ # Cache common ERA5 data for nb-tests and doctests in DiskCacheStore
147
146
  ensure-era5-cached:
148
147
  python -c 'from pycontrails.datalib.ecmwf import ERA5; \
149
148
  from pycontrails import DiskCacheStore; \
150
- cache = DiskCacheStore(cache_dir=".doc-test-cache"); \
149
+ cache = DiskCacheStore(); \
151
150
  time = "2022-03-01", "2022-03-01T23"; \
152
151
  lev = [300, 250, 200]; \
153
152
  met_vars = ["t", "q", "u", "v", "w", "ciwc", "z", "cc"]; \
@@ -250,4 +249,13 @@ docs-serve: doc8
250
249
 
251
250
  docs-pdf: doc8
252
251
  sphinx-build -b latex $(DOCS_DIR) $(DOCS_BUILD_DIR)/latex
252
+
253
+ # GIF in notebooks/advection.ipynb kills the pdflatex process
254
+ # If advection notebook changes, this will have to get updated
255
+ rm docs/_build/latex/notebooks_advection_20_0.png
256
+
257
+ # this needs to get run twice
253
258
  cd $(DOCS_BUILD_DIR)/latex && make
259
+ cd $(DOCS_BUILD_DIR)/latex && make
260
+
261
+ echo "PDF exported to $(DOCS_BUILD_DIR)/latex/pycontrails.pdf"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycontrails
3
- Version: 0.50.2
3
+ Version: 0.51.1
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,7 @@ Requires-Dist: xarray>=2022.3
36
36
  Provides-Extra: complete
37
37
  Requires-Dist: pycontrails[ecmwf,gcp,gfs,goes,jupyter,pyproj,vis,zarr]; extra == "complete"
38
38
  Provides-Extra: dev
39
- Requires-Dist: black[jupyter]==24.2.0; extra == "dev"
39
+ Requires-Dist: black[jupyter]==24.4.1; extra == "dev"
40
40
  Requires-Dist: dep_license; extra == "dev"
41
41
  Requires-Dist: fastparquet>=0.8; extra == "dev"
42
42
  Requires-Dist: ipdb>=0.13; extra == "dev"
@@ -47,10 +47,10 @@ Requires-Dist: platformdirs>=3.0; extra == "dev"
47
47
  Requires-Dist: pre-commit>=2.10; extra == "dev"
48
48
  Requires-Dist: psutil; extra == "dev"
49
49
  Requires-Dist: pyarrow>=5.0; extra == "dev"
50
- Requires-Dist: pytest>=8.1; extra == "dev"
50
+ Requires-Dist: pytest>=8.2; extra == "dev"
51
51
  Requires-Dist: pytest-cov>=2.11; extra == "dev"
52
52
  Requires-Dist: requests>=2.25; extra == "dev"
53
- Requires-Dist: ruff==0.1.15; extra == "dev"
53
+ Requires-Dist: ruff==0.4.1; extra == "dev"
54
54
  Provides-Extra: docs
55
55
  Requires-Dist: doc8>=1.1; extra == "docs"
56
56
  Requires-Dist: furo>=2023.3; extra == "docs"
@@ -55,8 +55,11 @@ ECMWF
55
55
  :toctree: api/
56
56
 
57
57
  datalib.ecmwf.ERA5
58
+ datalib.ecmwf.era5_model_level
58
59
  datalib.ecmwf.HRES
60
+ datalib.ecmwf.hres_model_level
59
61
  datalib.ecmwf.hres.get_forecast_filename
62
+ datalib.ecmwf.model_levels
60
63
  datalib.ecmwf.IFS
61
64
  datalib.ecmwf.variables
62
65
 
@@ -37,6 +37,7 @@ extensions = [
37
37
  "sphinx.ext.autosummary",
38
38
  "sphinx.ext.todo",
39
39
  "sphinx.ext.intersphinx",
40
+ "sphinx.ext.imgconverter",
40
41
  "sphinx.ext.mathjax",
41
42
  "sphinx.ext.napoleon",
42
43
  "sphinx.ext.extlinks",
@@ -269,3 +270,7 @@ html_sourcelink_suffix = ""
269
270
  html_js_files = [
270
271
  ("https://plausible.io/js/script.js", {"data-domain": "py.contrails.org", "defer": "defer"}),
271
272
  ]
273
+
274
+ # -- Options for Latex output -------------------------------------------------
275
+
276
+ latex_logo = "_static/img/logo.png"