pycontrails 0.54.1__tar.gz → 0.54.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.

Potentially problematic release.


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

Files changed (277) hide show
  1. {pycontrails-0.54.1 → pycontrails-0.54.3}/.github/workflows/docs.yaml +17 -17
  2. {pycontrails-0.54.1 → pycontrails-0.54.3}/.github/workflows/doctest.yaml +12 -14
  3. {pycontrails-0.54.1 → pycontrails-0.54.3}/.github/workflows/release.yaml +29 -15
  4. {pycontrails-0.54.1 → pycontrails-0.54.3}/.github/workflows/test.yaml +13 -32
  5. {pycontrails-0.54.1 → pycontrails-0.54.3}/CHANGELOG.md +50 -0
  6. {pycontrails-0.54.1 → pycontrails-0.54.3}/Makefile +2 -2
  7. {pycontrails-0.54.1/pycontrails.egg-info → pycontrails-0.54.3}/PKG-INFO +5 -4
  8. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/_static/pycontrails.bib +106 -17
  9. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/api.rst +1 -1
  10. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/conf.py +2 -1
  11. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/install.rst +31 -6
  12. pycontrails-0.54.3/docs/integrations/ACCF.ipynb +826 -0
  13. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/literature.rst +7 -2
  14. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/ECMWF.ipynb +2 -2
  15. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/_version.py +2 -2
  16. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/aircraft_performance.py +24 -5
  17. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/cache.py +14 -10
  18. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/fleet.py +22 -12
  19. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/flight.py +25 -15
  20. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/met.py +34 -22
  21. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/rgi_cython.c +155 -155
  22. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/vector.py +38 -38
  23. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/ecmwf/arco_era5.py +10 -5
  24. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/ecmwf/common.py +7 -2
  25. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/ecmwf/era5.py +9 -4
  26. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/ecmwf/era5_model_level.py +9 -5
  27. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/ecmwf/hres.py +12 -7
  28. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/ecmwf/hres_model_level.py +10 -5
  29. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/ecmwf/ifs.py +11 -6
  30. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/ecmwf/variables.py +1 -0
  31. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/gfs/gfs.py +52 -34
  32. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/gfs/variables.py +6 -2
  33. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/landsat.py +5 -8
  34. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/sentinel.py +7 -11
  35. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/ext/bada.py +3 -2
  36. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/ext/synthetic_flight.py +3 -2
  37. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/accf.py +40 -19
  38. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/apcemm/apcemm.py +2 -1
  39. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/cocip/cocip.py +8 -4
  40. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/cocipgrid/cocip_grid.py +25 -20
  41. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/dry_advection.py +50 -54
  42. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/humidity_scaling/humidity_scaling.py +12 -7
  43. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/ps_model/__init__.py +2 -1
  44. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/ps_model/ps_aircraft_params.py +3 -2
  45. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/ps_model/ps_grid.py +187 -1
  46. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/ps_model/ps_model.py +12 -10
  47. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/ps_model/ps_operational_limits.py +39 -52
  48. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/physics/geo.py +149 -0
  49. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/physics/jet.py +141 -11
  50. pycontrails-0.54.3/pycontrails/physics/static/iata-cargo-load-factors-20241115.csv +71 -0
  51. pycontrails-0.54.3/pycontrails/physics/static/iata-passenger-load-factors-20241115.csv +71 -0
  52. {pycontrails-0.54.1 → pycontrails-0.54.3/pycontrails.egg-info}/PKG-INFO +5 -4
  53. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails.egg-info/SOURCES.txt +2 -0
  54. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails.egg-info/requires.txt +6 -3
  55. {pycontrails-0.54.1 → pycontrails-0.54.3}/pyproject.toml +10 -13
  56. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_accf.py +15 -1
  57. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_cocip.py +1 -1
  58. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_cocip_grid.py +4 -15
  59. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_flight.py +56 -5
  60. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_geo.py +43 -0
  61. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_humidity_scaling.py +7 -2
  62. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_ps_model.py +63 -2
  63. pycontrails-0.54.1/docs/integrations/ACCF.ipynb +0 -832
  64. {pycontrails-0.54.1 → pycontrails-0.54.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  65. {pycontrails-0.54.1 → pycontrails-0.54.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  66. {pycontrails-0.54.1 → pycontrails-0.54.3}/.github/dependabot.yaml +0 -0
  67. {pycontrails-0.54.1 → pycontrails-0.54.3}/.github/pull_request_template.md +0 -0
  68. {pycontrails-0.54.1 → pycontrails-0.54.3}/.github/workflows/scorecard.yaml +0 -0
  69. {pycontrails-0.54.1 → pycontrails-0.54.3}/.gitignore +0 -0
  70. {pycontrails-0.54.1 → pycontrails-0.54.3}/.pre-commit-config.yaml +0 -0
  71. {pycontrails-0.54.1 → pycontrails-0.54.3}/.zenodo.json +0 -0
  72. {pycontrails-0.54.1 → pycontrails-0.54.3}/CONTRIBUTING.md +0 -0
  73. {pycontrails-0.54.1 → pycontrails-0.54.3}/LICENSE +0 -0
  74. {pycontrails-0.54.1 → pycontrails-0.54.3}/NOTICE +0 -0
  75. {pycontrails-0.54.1 → pycontrails-0.54.3}/README.md +0 -0
  76. {pycontrails-0.54.1 → pycontrails-0.54.3}/RELEASE.md +0 -0
  77. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/_static/css/style.css +0 -0
  78. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/_static/img/colab.png +0 -0
  79. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/_static/img/favicon.png +0 -0
  80. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/_static/img/logo-dark.png +0 -0
  81. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/_static/img/logo.png +0 -0
  82. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/changelog.rst +0 -0
  83. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/contributing.rst +0 -0
  84. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/develop.rst +0 -0
  85. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/flight.rst +0 -0
  86. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/index.rst +0 -0
  87. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/integrations/APCEMM.ipynb +0 -0
  88. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/meteorology.rst +0 -0
  89. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/models.rst +0 -0
  90. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/ARCO-ERA5.ipynb +0 -0
  91. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/AircraftPerformance.ipynb +0 -0
  92. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/Cache.ipynb +0 -0
  93. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/CoCiP.ipynb +0 -0
  94. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/CoCiPGrid.ipynb +0 -0
  95. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/Flight.ipynb +0 -0
  96. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/GFS.ipynb +0 -0
  97. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/GOES.ipynb +0 -0
  98. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/ISSR.ipynb +0 -0
  99. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/Landsat.ipynb +0 -0
  100. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/Meteorology.ipynb +0 -0
  101. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/SAC.ipynb +0 -0
  102. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/Sentinel.ipynb +0 -0
  103. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/advection.ipynb +0 -0
  104. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/airports.ipynb +0 -0
  105. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/data/.gitignore +0 -0
  106. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/data/flight-ap.csv +0 -0
  107. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/data/flight-cocip.csv +0 -0
  108. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/data/flight-fdr.csv +0 -0
  109. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/data/flight-noisy.csv +0 -0
  110. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/data/flight.csv +0 -0
  111. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/data/iagos-flight-landsat.csv +0 -0
  112. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/data/iagos-flight-sentinel.csv +0 -0
  113. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/flightplan.ipynb +0 -0
  114. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/model-levels.ipynb +0 -0
  115. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/run-cocip-on-flight.ipynb +0 -0
  116. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/run-cocip-with-fdr.ipynb +0 -0
  117. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks/specific-humidity-interpolation.ipynb +0 -0
  118. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/notebooks.rst +0 -0
  119. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/observations.rst +0 -0
  120. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/tutorials.rst +0 -0
  121. {pycontrails-0.54.1 → pycontrails-0.54.3}/docs/utilities.rst +0 -0
  122. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/__init__.py +0 -0
  123. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/__init__.py +0 -0
  124. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/airports.py +0 -0
  125. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/coordinates.py +0 -0
  126. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/flightplan.py +0 -0
  127. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/fuel.py +0 -0
  128. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/interpolation.py +0 -0
  129. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/met_var.py +0 -0
  130. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/models.py +0 -0
  131. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/polygon.py +0 -0
  132. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/core/rgi_cython.pyx +0 -0
  133. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/__init__.py +0 -0
  134. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/_leo_utils/search.py +0 -0
  135. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/_leo_utils/static/bq_roi_query.sql +0 -0
  136. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/_leo_utils/vis.py +0 -0
  137. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/_met_utils/metsource.py +0 -0
  138. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/ecmwf/__init__.py +0 -0
  139. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/ecmwf/model_levels.py +0 -0
  140. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv +0 -0
  141. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/gfs/__init__.py +0 -0
  142. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/goes.py +0 -0
  143. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/datalib/spire.py +0 -0
  144. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/ext/cirium.py +0 -0
  145. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/ext/empirical_grid.py +0 -0
  146. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/__init__.py +0 -0
  147. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/apcemm/__init__.py +0 -0
  148. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/apcemm/inputs.py +0 -0
  149. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/apcemm/static/apcemm_yaml_template.yaml +0 -0
  150. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/apcemm/utils.py +0 -0
  151. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/cocip/__init__.py +0 -0
  152. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/cocip/cocip_params.py +0 -0
  153. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/cocip/cocip_uncertainty.py +0 -0
  154. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/cocip/contrail_properties.py +0 -0
  155. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/cocip/output_formats.py +0 -0
  156. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/cocip/radiative_forcing.py +0 -0
  157. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/cocip/radiative_heating.py +0 -0
  158. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/cocip/unterstrasser_wake_vortex.py +0 -0
  159. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/cocip/wake_vortex.py +0 -0
  160. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/cocip/wind_shear.py +0 -0
  161. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/cocipgrid/__init__.py +0 -0
  162. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/cocipgrid/cocip_grid_params.py +0 -0
  163. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/emissions/__init__.py +0 -0
  164. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/emissions/black_carbon.py +0 -0
  165. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/emissions/emissions.py +0 -0
  166. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/emissions/ffm2.py +0 -0
  167. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/emissions/static/default-engine-uids.csv +0 -0
  168. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv +0 -0
  169. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv +0 -0
  170. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/humidity_scaling/__init__.py +0 -0
  171. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq +0 -0
  172. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq +0 -0
  173. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/issr.py +0 -0
  174. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/pcc.py +0 -0
  175. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/pcr.py +0 -0
  176. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/ps_model/static/ps-aircraft-params-20240524.csv +0 -0
  177. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/ps_model/static/ps-synonym-list-20240524.csv +0 -0
  178. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/sac.py +0 -0
  179. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/models/tau_cirrus.py +0 -0
  180. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/physics/__init__.py +0 -0
  181. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/physics/constants.py +0 -0
  182. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/physics/thermo.py +0 -0
  183. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/physics/units.py +0 -0
  184. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/py.typed +0 -0
  185. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/utils/__init__.py +0 -0
  186. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/utils/dependencies.py +0 -0
  187. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/utils/iteration.py +0 -0
  188. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/utils/json.py +0 -0
  189. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/utils/temp.py +0 -0
  190. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails/utils/types.py +0 -0
  191. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails.egg-info/dependency_links.txt +0 -0
  192. {pycontrails-0.54.1 → pycontrails-0.54.3}/pycontrails.egg-info/top_level.txt +0 -0
  193. {pycontrails-0.54.1 → pycontrails-0.54.3}/setup.cfg +0 -0
  194. {pycontrails-0.54.1 → pycontrails-0.54.3}/setup.py +0 -0
  195. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/__init__.py +0 -0
  196. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/_deprecated.py +0 -0
  197. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/benchmark/cocip/Makefile +0 -0
  198. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/benchmark/cocip/README.md +0 -0
  199. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/benchmark/cocip/benchmark.py +0 -0
  200. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/benchmark/cocip/compare.py +0 -0
  201. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/benchmark/cocip/data.md +0 -0
  202. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/benchmark/cocip/output.py +0 -0
  203. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/benchmark/cocip/review.ipynb +0 -0
  204. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/benchmark/cocip-fortran/README.md +0 -0
  205. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/benchmark/north-atlantic-study/.gcloudignore +0 -0
  206. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/benchmark/north-atlantic-study/README.md +0 -0
  207. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/benchmark/north-atlantic-study/support.py +0 -0
  208. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/benchmark/north-atlantic-study/validate.py +0 -0
  209. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/fixtures/cocip-met.py +0 -0
  210. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/fixtures/cocip-met2.py +0 -0
  211. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/fixtures/ecmwf-met.py +0 -0
  212. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/fixtures/gfs-met.py +0 -0
  213. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/__init__.py +0 -0
  214. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/conftest.py +0 -0
  215. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/NOAA_Solar_Calculations_day.csv +0 -0
  216. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/cocip-contrail-output.json +0 -0
  217. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/cocip-contrail-output2.json +0 -0
  218. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/cocip-flight-output.json +0 -0
  219. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/cocip-flight-output2.json +0 -0
  220. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/cocip-output-contrail-edges.json +0 -0
  221. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/cocip-output-flts-20190101-eu.pq +0 -0
  222. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/flight-cocip2.csv +0 -0
  223. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/flight-meridian.csv +0 -0
  224. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/flight-metadata.json +0 -0
  225. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/flight-spire-data-cleaning.pq +0 -0
  226. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/flight.csv +0 -0
  227. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/flt-wypts-20190101-eu.pq +0 -0
  228. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/met-20190101-eu.nc +0 -0
  229. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/met-accf-pl.nc +0 -0
  230. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/met-accf-sl.nc +0 -0
  231. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/met-ecmwf-lnsp.nc +0 -0
  232. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/met-ecmwf-ml.nc +0 -0
  233. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/met-ecmwf-pl.nc +0 -0
  234. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/met-ecmwf-sl.nc +0 -0
  235. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/met-era5-cocip1.nc +0 -0
  236. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/met-era5-cocip2.nc +0 -0
  237. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/met-gfs.nc +0 -0
  238. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/polygon-bug.nc +0 -0
  239. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/rad-20190101-eu.nc +0 -0
  240. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/rad-era5-cocip1.nc +0 -0
  241. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/rad-era5-cocip2.nc +0 -0
  242. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/static/rad-gfs.nc +0 -0
  243. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_airports.py +0 -0
  244. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_apcemm.py +0 -0
  245. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_cache.py +0 -0
  246. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_cocip_grid_parity.py +0 -0
  247. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_cocip_radiative_forcing.py +0 -0
  248. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_cocip_uncertainty.py +0 -0
  249. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_coordinates.py +0 -0
  250. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_datalib_metsource.py +0 -0
  251. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_dry_advection.py +0 -0
  252. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_dtypes.py +0 -0
  253. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_ecmwf.py +0 -0
  254. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_emissions.py +0 -0
  255. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_fleet.py +0 -0
  256. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_flightplan.py +0 -0
  257. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_fuel.py +0 -0
  258. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_gfs.py +0 -0
  259. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_goes.py +0 -0
  260. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_grid_to_netcdf.py +0 -0
  261. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_init.py +0 -0
  262. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_interpolation.py +0 -0
  263. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_leo.py +0 -0
  264. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_met.py +0 -0
  265. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_met_cache.py +0 -0
  266. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_models.py +0 -0
  267. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_pcc.py +0 -0
  268. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_polygons.py +0 -0
  269. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_sac_issr.py +0 -0
  270. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_spire.py +0 -0
  271. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_tau_cirrus.py +0 -0
  272. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_thermo_sac.py +0 -0
  273. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_units.py +0 -0
  274. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_unterstrasser_wake_vortex.py +0 -0
  275. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_utils.py +0 -0
  276. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_vector.py +0 -0
  277. {pycontrails-0.54.1 → pycontrails-0.54.3}/tests/unit/test_zarr.py +0 -0
@@ -14,10 +14,6 @@ on:
14
14
  # Allows run manually from the Actions tab
15
15
  workflow_dispatch:
16
16
 
17
- # Global variables
18
- env:
19
- PYCONTRAILS_CACHE_DIR: '${{ github.workspace }}/.cache/pycontrails'
20
-
21
17
  # disable all permissions at the top level
22
18
  # https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs
23
19
  permissions: {}
@@ -39,29 +35,33 @@ jobs:
39
35
  with:
40
36
  fetch-depth: 0
41
37
 
38
+ # Remove any .dev suffix from the version
39
+ # This is useful when running between tags from a workflow-dispatch
40
+ - name: Get the pycontrails version
41
+ id: get_version
42
+ run: echo "version=$(git describe --tags --abbrev=0)" >> $GITHUB_OUTPUT
43
+
42
44
  - uses: actions/setup-python@v5
43
45
  with:
44
- python-version: '3.12'
45
- cache: 'pip'
46
+ python-version: '3.13'
47
+ cache: pip
46
48
  cache-dependency-path: pyproject.toml
47
49
 
48
- - name: 'Authenticate to Google Cloud'
49
- uses: 'google-github-actions/auth@v2'
50
+ - name: Authenticate to Google Cloud
51
+ uses: google-github-actions/auth@v2
50
52
  with:
51
- credentials_json: '${{ secrets.GCP_SERVICE_ACCOUNT }}'
52
-
53
- - name: 'Set up Cloud SDK'
54
- uses: 'google-github-actions/setup-gcloud@v2'
53
+ credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT }}
55
54
 
56
55
  - name: Install pycontrails (dev)
57
56
  run: make dev-install
57
+ env:
58
+ SETUPTOOLS_SCM_PRETEND_VERSION_FOR_PYCONTRAILS: ${{ steps.get_version.outputs.version }}
58
59
 
59
- - name: Install pycontrails-bada extension
60
+ # https://cloud.google.com/artifact-registry/docs/python/authentication
61
+ - name: Install latest pycontrails-bada
60
62
  run: |
61
- mkdir -p ~/.ssh/ && ssh-keyscan github.com > ~/.ssh/known_hosts
62
- gcloud secrets versions access latest --secret="contrails-301217-github-ssh-key" > ~/.ssh/id_rsa
63
- chmod 600 ~/.ssh/id_rsa
64
- pip install "pycontrails-bada @ git+ssh://git@github.com/contrailcirrus/pycontrails-bada.git"
63
+ pip install keyring keyrings.google-artifactregistry-auth
64
+ pip install -U -i https://us-central1-python.pkg.dev/contrails-301217/pycontrails/simple pycontrails-bada
65
65
 
66
66
  # TODO: Execute notebooks for docs
67
67
  # - name: Execute notebooks
@@ -41,17 +41,17 @@ jobs:
41
41
 
42
42
  - uses: actions/setup-python@v5
43
43
  with:
44
- python-version: '3.12'
45
- cache: 'pip'
44
+ python-version: '3.13'
45
+ cache: pip
46
46
  cache-dependency-path: pyproject.toml
47
47
 
48
- - name: 'Authenticate to Google Cloud'
49
- uses: 'google-github-actions/auth@v2'
48
+ - name: Authenticate to Google Cloud
49
+ uses: google-github-actions/auth@v2
50
50
  with:
51
- credentials_json: '${{ secrets.GCP_SERVICE_ACCOUNT }}'
51
+ credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT }}
52
52
 
53
- - name: 'Set up Cloud SDK'
54
- uses: 'google-github-actions/setup-gcloud@v2'
53
+ - name: Set up Cloud SDK
54
+ uses: google-github-actions/setup-gcloud@v2
55
55
 
56
56
  # put bada files in the default location
57
57
  - name: BADA files
@@ -69,16 +69,14 @@ jobs:
69
69
  - name: Install pycontrails (dev)
70
70
  run: make dev-install
71
71
 
72
- - name: Install pycontrails-bada extension
72
+ # https://cloud.google.com/artifact-registry/docs/python/authentication
73
+ - name: Install pycontrails-bada
73
74
  run: |
74
- mkdir -p ~/.ssh/ && ssh-keyscan github.com > ~/.ssh/known_hosts
75
- gcloud secrets versions access latest --secret="contrails-301217-github-ssh-key" > ~/.ssh/id_rsa
76
- chmod 600 ~/.ssh/id_rsa
77
- pip install "pycontrails-bada @ git+ssh://git@github.com/contrailcirrus/pycontrails-bada.git"
75
+ pip install keyring keyrings.google-artifactregistry-auth
76
+ pip install -U -i https://us-central1-python.pkg.dev/contrails-301217/pycontrails/simple pycontrails-bada
78
77
 
79
78
  - name: Test notebooks
80
- run: |
81
- make nb-test
79
+ run: make nb-test
82
80
 
83
81
  # The doctests require numpy 2.0 or higher
84
82
  - name: Test docstrings
@@ -25,7 +25,7 @@ jobs:
25
25
  - name: Check main test status
26
26
  run: make main-test-status
27
27
 
28
- build_wheels:
28
+ build-wheels:
29
29
  name: Build wheels on ${{ matrix.os }}
30
30
  runs-on: ${{ matrix.os }}
31
31
  strategy:
@@ -46,7 +46,7 @@ jobs:
46
46
  CIBW_SKIP: '*-win32 *-manylinux_i686 *-musllinux*'
47
47
  CIBW_BUILD_VERBOSITY: 3
48
48
  CIBW_ARCHS_MACOS: x86_64 arm64
49
- CIBW_TEST_SKIP: '*-macosx_arm64 cp313-*'
49
+ CIBW_TEST_SKIP: '*-macosx_arm64'
50
50
  # Completely isolate tests to prevent cibuildwheel from importing the
51
51
  # source instead of the wheel. This happens when tests/__init__.py is read.
52
52
  CIBW_TEST_EXTRAS: "complete,dev"
@@ -65,7 +65,7 @@ jobs:
65
65
  name: wheels-${{ matrix.os }}-artifact
66
66
  path: ./wheelhouse/*.whl
67
67
 
68
- build_sdist:
68
+ build-sdist:
69
69
  name: Build source distribution
70
70
  runs-on: ubuntu-latest
71
71
  steps:
@@ -82,9 +82,21 @@ jobs:
82
82
  name: sdist-artifact
83
83
  path: dist/*.tar.gz
84
84
 
85
- upload_pypi_test:
86
- needs: [build_wheels, build_sdist]
85
+ # Publish using PyPI trusted publishing
86
+ # https://docs.pypi.org/trusted-publishers/using-a-publisher/
87
+ # https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/
88
+ publish-to-testpypi:
89
+ needs:
90
+ - build-wheels
91
+ - build-sdist
87
92
  runs-on: ubuntu-latest
93
+
94
+ environment:
95
+ name: testpypi
96
+ url: https://test.pypi.org/p/pycontrails
97
+ permissions:
98
+ id-token: write
99
+
88
100
  steps:
89
101
  - name: Download artifacts
90
102
  uses: actions/download-artifact@v4
@@ -101,16 +113,23 @@ jobs:
101
113
  - name: Publish distribution 📦 to Test PyPI
102
114
  uses: pypa/gh-action-pypi-publish@release/v1
103
115
  with:
104
- user: __token__
105
- password: ${{ secrets.TEST_PYPI_API_TOKEN }}
106
116
  repository-url: https://test.pypi.org/legacy/
107
117
  verbose: true
108
- verify-metadata: true
109
118
 
110
- upload_pypi:
119
+ publish-to-pypi:
111
120
  if: ${{ github.event_name == 'release'}}
112
- needs: [build_wheels, build_sdist, check-main-test-status]
121
+ needs:
122
+ - build-wheels
123
+ - build-sdist
124
+ - check-main-test-status
113
125
  runs-on: ubuntu-latest
126
+
127
+ environment:
128
+ name: pypi
129
+ url: https://pypi.org/p/pycontrails
130
+ permissions:
131
+ id-token: write
132
+
114
133
  steps:
115
134
  - name: Download artifacts
116
135
  uses: actions/download-artifact@v4
@@ -126,8 +145,3 @@ jobs:
126
145
 
127
146
  - name: Publish distribution 📦 to PyPI
128
147
  uses: pypa/gh-action-pypi-publish@release/v1
129
- with:
130
- user: __token__
131
- password: ${{ secrets.PYPI_API_TOKEN }}
132
- verbose: true
133
- verify-metadata: true
@@ -38,8 +38,7 @@ jobs:
38
38
  fail-fast: false
39
39
  matrix:
40
40
  os: [ubuntu-latest, windows-latest]
41
- # TODO(Fall 2024): Add 3.13 once all dependencies are available
42
- pyversion: ['3.10', '3.11', '3.12']
41
+ pyversion: ['3.10', '3.11', '3.12', '3.13']
43
42
  runs-on: ${{ matrix.os }}
44
43
 
45
44
  steps:
@@ -50,11 +49,10 @@ jobs:
50
49
  - uses: actions/setup-python@v5
51
50
  with:
52
51
  python-version: ${{ matrix.pyversion }}
53
- cache: 'pip'
52
+ cache: pip
54
53
  cache-dependency-path: pyproject.toml
55
54
 
56
55
  - name: Cache mypy and pytest
57
- id: cache-test
58
56
  uses: actions/cache@v4
59
57
  with:
60
58
  # Note the caches are specific to branches, so we don't need to specify here
@@ -64,13 +62,13 @@ jobs:
64
62
  ${{ github.workspace }}/.mypy_cache
65
63
  ${{ github.workspace }}/.pytest_cache
66
64
 
67
- - name: 'Authenticate to Google Cloud'
68
- uses: 'google-github-actions/auth@v2'
65
+ - name: Authenticate to Google Cloud
66
+ uses: google-github-actions/auth@v2
69
67
  with:
70
- credentials_json: '${{ secrets.GCP_SERVICE_ACCOUNT }}'
68
+ credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT }}
71
69
 
72
- - name: 'Set up Cloud SDK'
73
- uses: 'google-github-actions/setup-gcloud@v2'
70
+ - name: Set up Cloud SDK
71
+ uses: google-github-actions/setup-gcloud@v2
74
72
 
75
73
  # download BADA files for testing
76
74
  - name: BADA files
@@ -82,33 +80,16 @@ jobs:
82
80
 
83
81
  - name: Install make - windows
84
82
  if: ${{ matrix.os == 'windows-latest' }}
85
- run: |
86
- choco install make
83
+ run: choco install make
87
84
 
88
85
  - name: Install pycontrails (dev)
89
- run: |
90
- make dev-install
86
+ run: make dev-install
91
87
 
92
- # In latest-windows, redirecting stdout to a file uses utf-16 encoding
93
- # This gives an error when ssh tries to read the key
94
- # Instead don't pre-create the known_hosts file
95
- - name: Install pycontrails-bada - windows
96
- if: ${{ matrix.os == 'windows-latest' }}
97
- run: |
98
- mkdir -p $HOME/.ssh/
99
- gcloud secrets versions access latest --secret="contrails-301217-github-ssh-key" --out-file="$HOME/.ssh/id_rsa"
100
- pip install "pycontrails-bada @ git+ssh://git@github.com/contrailcirrus/pycontrails-bada.git"
101
- env:
102
- GIT_SSH_COMMAND: "ssh -o StrictHostKeyChecking=no"
103
-
104
- - name: Install pycontrails-bada - linux
105
- if: ${{ matrix.os == 'ubuntu-latest' }}
88
+ # https://cloud.google.com/artifact-registry/docs/python/authentication
89
+ - name: Install pycontrails-bada
106
90
  run: |
107
- mkdir -p $HOME/.ssh/
108
- ssh-keyscan github.com > $HOME/.ssh/known_hosts
109
- gcloud secrets versions access latest --secret="contrails-301217-github-ssh-key" > $HOME/.ssh/id_rsa
110
- chmod 600 $HOME/.ssh/id_rsa
111
- pip install "pycontrails-bada @ git+ssh://git@github.com/contrailcirrus/pycontrails-bada.git"
91
+ pip install keyring keyrings.google-artifactregistry-auth
92
+ pip install -U -i https://us-central1-python.pkg.dev/contrails-301217/pycontrails/simple pycontrails-bada
112
93
 
113
94
  - name: Show environment
114
95
  run: |
@@ -1,5 +1,55 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.54.3
4
+
5
+ ### Breaking changes
6
+
7
+ - Update the default load factor from 70% to 83% to be consistent with historical data. This is used whenever an aircraft performance model is run without a specified load factor.
8
+ - By default, the `CocipGrid.create_source` static method will return latitude values from -90 to 90 degrees. This change is motivated by the new advection scheme used near the poles. Previously, this method returned latitude values from -80 to 80 degrees.
9
+
10
+ ### Features
11
+
12
+ - Create new function `ps_grid.ps_nominal_optimize_mach` which computes the optimal mach number given a set of operating conditions.
13
+ - Add a new `jet.aircraft_load_factor` function to estimate aircraft (passenger/cargo) load factor based on historical monthly and regional load factors provided by IATA. This improves upon the default load factor assumption. Historical load factor databases will be continuously updated as new data is released.
14
+ - Use a 2D Cartesian-like plane to advect particles near the poles (>80° in latitude) to avoid numerical instabilities and singularities caused by convergence of meridians. This new advection scheme is used for contrail advection in the `Cocip`, `CocipGrid`, and `DryAdvection` models. See the `geo.advect_horizontal` function for more details.
15
+
16
+ ### Fixes
17
+
18
+ - Ensure the fuel type is preserved when calling `Flight.resample_and_fill`.
19
+ - Update the CLIMaCCF dependency to pull the head of the main branch in [CLIMaCCF](https://github.com/dlr-pa/climaccf). Update the installation instructions.
20
+ - Update the `ACCFParams.forecast_step` to None, which allows CLIMaCCF to automatically determine the forecast step based on the `met` data.
21
+ - Update the `ACCF` NOx parameter for the latest CLIMaCCF version.
22
+ - Ensure a custom "horizontal_resolution" param passed into `ACCF` is not overwritten.
23
+ - Remove duplicated variable in `ACCF.met_variables`.
24
+ - Allow the `ACCF` model to accept relative humidity as a percentage or as a proportion.
25
+ - Include `ecmwf.RelativeHumidity` in `ACCF.met_variables` so that `ERA5(..., variables=ACCF.met_variables)` no longer raises an error.
26
+
27
+ ### Internals
28
+
29
+ - Improve computation of mach limits to accept vectorized input/output.
30
+ - Test against python 3.13 in the GitHub Actions CI. Use python 3.13 in the docs and doctest workflows.
31
+ - Publish to PyPI using [trusted publishing](https://docs.pypi.org/trusted-publishers/using-a-publisher/).
32
+ - Update `pycontrails-bada` installation instructions. Install `pycontrails-bada` from GCP artifact repository in the test workflow.
33
+ - Floor the pycontrails version when running the docs workflow. This ensures that the [hosted documentation](https://py.contrails.org) references the last stable release.
34
+ - Update literature and bibliography in the documentation.
35
+ - Move the `engine_deterioration_factor` from `PSFlightParams` to `AircraftPerformanceParams` so it can be used by both the PS model and BADA.
36
+ - Include `engine_deterioration_factor` in `AircraftPerformanceGridParams`.
37
+
38
+ ## v0.54.2
39
+
40
+ ### Features
41
+
42
+ - Add `cache_download` parameter to the `GFSForecast` interface. When set to `True`, downloaded grib data is cached locally. This is consistent with the behavior of the `ERA5ModelLevel` and `HRESModelLevel` interfaces.
43
+
44
+ ### Fixes
45
+
46
+ - Update GFS variable names "uswrf" -> "suswrf" and "ulwrf" -> "sulwrf". This accommodates a breaking change introduced in [eccodes 2.38](https://confluence.ecmwf.int/display/MTG2US/Changes+in+ecCodes+version+2.38.0+compared+to+the+previous+version#ChangesinecCodesversion2.38.0comparedtothepreviousversion-Changedshortnames).
47
+
48
+ ### Internals
49
+
50
+ - Remove `overrides` dependency. Require `typing-extensions` for python < 3.12.
51
+ - Upgrade some type hints for more modern python language features.
52
+
3
53
  ## v0.54.1
4
54
 
5
55
  ### Features
@@ -24,8 +24,8 @@ pip-install:
24
24
  python -m pip install -U pip wheel
25
25
  python -m pip install -e ".[complete]"
26
26
 
27
- # these still must be installed manually for Python < 3.10
28
- # -pip install -e ".[open3d]"
27
+ # open3d wheels not available for latest python versions; install manually
28
+ # pip install -e ".[open3d]"
29
29
 
30
30
  # development installation
31
31
  dev-install: pip-install
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycontrails
3
- Version: 0.54.1
3
+ Version: 0.54.3
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
@@ -29,9 +29,9 @@ License-File: LICENSE
29
29
  License-File: NOTICE
30
30
  Requires-Dist: dask>=2022.3
31
31
  Requires-Dist: numpy>=1.22
32
- Requires-Dist: overrides>=6.1
33
32
  Requires-Dist: pandas>=2.2
34
33
  Requires-Dist: scipy>=1.10
34
+ Requires-Dist: typing-extensions>=4.5; python_version < "3.12"
35
35
  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"
@@ -67,7 +67,7 @@ Requires-Dist: sphinxext.opengraph>=0.8; extra == "docs"
67
67
  Provides-Extra: ecmwf
68
68
  Requires-Dist: cdsapi>=0.4; extra == "ecmwf"
69
69
  Requires-Dist: cfgrib>=0.9; extra == "ecmwf"
70
- Requires-Dist: eccodes>=1.4; extra == "ecmwf"
70
+ Requires-Dist: eccodes>=2.38; extra == "ecmwf"
71
71
  Requires-Dist: ecmwf-api-client>=1.6; extra == "ecmwf"
72
72
  Requires-Dist: netcdf4>=1.6.1; extra == "ecmwf"
73
73
  Requires-Dist: platformdirs>=3.0; extra == "ecmwf"
@@ -79,7 +79,8 @@ Requires-Dist: tqdm>=4.61; extra == "gcp"
79
79
  Provides-Extra: gfs
80
80
  Requires-Dist: boto3>=1.20; extra == "gfs"
81
81
  Requires-Dist: cfgrib>=0.9; extra == "gfs"
82
- Requires-Dist: eccodes>=1.4; extra == "gfs"
82
+ Requires-Dist: eccodes>=2.38; extra == "gfs"
83
+ Requires-Dist: netcdf4>=1.6.1; extra == "gfs"
83
84
  Requires-Dist: platformdirs>=3.0; extra == "gfs"
84
85
  Requires-Dist: tqdm>=4.61; extra == "gfs"
85
86
  Provides-Extra: jupyter
@@ -197,6 +197,18 @@
197
197
  langid = {english}
198
198
  }
199
199
 
200
+ @misc{engbergForecastingContrailClimate2024,
201
+ title = {Forecasting Contrail Climate Forcing for Flight Planning and Air Traffic Management Applications: {{The CocipGrid}} Model in Pycontrails 0.51.0},
202
+ shorttitle = {Forecasting Contrail Climate Forcing for Flight Planning and Air Traffic Management Applications},
203
+ author = {Engberg, Zebediah and Teoh, Roger and Dean, Thomas and Stettler, Marc E. J. and Shapiro, Marc L.},
204
+ year = {2024},
205
+ month = jun,
206
+ doi = {10.5194/egusphere-2024-1361},
207
+ urldate = {2024-07-10},
208
+ abstract = {Abstract. The global annual mean contrail net radiative forcing may exceed that of aviation's cumulative CO2 emissions by at least two-fold. As only around 2--3 \% of all flights are likely responsible for 80 \% of the global annual contrail climate forcing, re-routing these flights could reduce the formation of strongly warming contrails. Here, we develop a contrail forecasting model that produces global predictions of persistent contrail formation and their associated climate forcing. This model builds on the methods of the existing contrail cirrus prediction model (CoCiP) to efficiently evaluate infinitesimal contrail segments initialized at each point in a regular 4D spatiotemporal grid until their end-of-life. Outputs are reported in a concise meteorology data format that integrates with existing flight planning and air traffic management workflows. This ``grid-based'' CoCiP is used to conduct a global contrail simulation for 2019 to compare with previous work and analyze spatial trends related to strongly warming/cooling contrails. We explore two approaches for integrating contrail forecasts into existing flight planning and air traffic management systems: (i) using contrail forcing as an additional cost parameter within a flight trajectory optimizer; or (ii) constructing polygons of airspace volumes with strongly-warming contrails to avoid. We demonstrate a probabilistic formulation of the grid-based model by running a Monte Carlo simulation with ensemble meteorology to mask grid cells with significant uncertainties in the simulated contrail climate forcing. This study establishes a working standard for incorporating contrail mitigation within existing flight planning and management workflows and demonstrates how forecasting uncertainty can be incorporated to minimize unintended consequences associated with increased CO2 emissions of avoidance.},
209
+ copyright = {https://creativecommons.org/licenses/by/4.0/}
210
+ }
211
+
200
212
  @misc{eurocontrolUSERMANUALBASE2010,
201
213
  title = {{{USER MANUAL FOR THE BASE OF Aircraft DATA}} ({{BADA}}) {{REVISION}} 3.8},
202
214
  author = {Eurocontrol},
@@ -209,12 +221,21 @@
209
221
  langid = {english}
210
222
  }
211
223
 
212
- @inproceedings{friasEnhancingEnvironmentalSustainability2023,
213
- title = {Enhancing Environmental Sustainability in Aviation: An Implementation of Contrail Mitigation Strategies in Commercial Flight Dispatching.},
214
- booktitle = {{{ATM Seminar}}},
215
- author = {Fr{\'i}as, Alejandra Mart{\'i}n and GmbH, {\relax FLIGHTKEYS} and Soler, Manuel},
216
- year = {2023},
217
- abstract = {Aviation condensation trails, also known as contrails, have a significant impact on anthropogenic climate change. One promising solution to mitigate this impact is eco-efficient flight planning that avoids contrail-prone regions with only minimal deviations in aircraft trajectories. There exist several contrail prediction models aimed at identifying these sensitive regions. Previous studies have evaluated these models in laboratory simulations, forecasting contrail probability areas and re-routing flights to circumvent them. This study advances the simulation one step further by using the real commercial flight dispatch optimization algorithm FLIGHTKEYS 5D, developed by the aviation software company Flightkeys GmbH, in combination with the contrail cirrus prediction model (CoCip), to evaluate the impact of contrails over two full operational days of a commercial airline. The results of this research provide strong evidence for the feasibility of integrating contrail mitigation techniques into commercial flight planning tools. The analysis of deviations in both the vertical and horizontal dimensions shows that a significant, even complete reduction in contrail energy forcing can be achieved with only a minimal increase in cost and fuel consumption. The study underscores the need for the aviation industry to incorporate contrail mitigation strategies into its standard operating procedures to prioritize environmental sustainability and gather valuable data and insights for ecofriendly flight planning.},
224
+ @article{friasFeasibilityContrailAvoidance2024,
225
+ title = {Feasibility of Contrail Avoidance in a Commercial Flight Planning System: An Operational Analysis},
226
+ shorttitle = {Feasibility of Contrail Avoidance in a Commercial Flight Planning System},
227
+ author = {Frias, A. Martin and Shapiro, M. L. and Engberg, Z. and Zopp, R. and Soler, M. and Stettler, M. E. J.},
228
+ year = {2024},
229
+ month = mar,
230
+ journal = {Environmental Research: Infrastructure and Sustainability},
231
+ volume = {4},
232
+ number = {1},
233
+ pages = {015013},
234
+ publisher = {IOP Publishing},
235
+ issn = {2634-4505},
236
+ doi = {10.1088/2634-4505/ad310c},
237
+ urldate = {2024-05-19},
238
+ abstract = {Aircraft condensation trails, also known as contrails, contribute a substantial portion of aviation's overall climate footprint. Contrail impacts can be reduced through smart flight planning that avoids contrail-forming regions of the atmosphere. While previous studies have explored the operational impacts of contrail avoidance in simulated environments, this paper aims to characterize the feasibility and cost of contrail avoidance precisely within a commercial flight planning system. This study leverages the commercial Flightkeys 5D algorithm, developed by Flightkeys GmbH, with a prototypical contrail forecast model based on the Contrail Cirrus Prediction (CoCiP) model to simulate contrail avoidance on 49 411 flights during the first two weeks of June 2023, and 35 429 flights during the first two weeks of January 2024. The utilization of a commercial flight planning system enables high-accuracy estimates of additional cost and fuel investments by operators to achieve estimated reductions in contrail-energy forcing and overall flight global warming potential. The results show that navigational contrail avoidance will require minimal additional cost (0.08\%) and fuel (0.11\%) investments to achieve notable reductions in contrail climate forcing (-73.0\%). This simulation provides evidence that contrail mitigation entails very low operational risks, even regarding fuel. This study aims to serve as an incentive for operators and air traffic controllers to initiate contrail mitigation testing as soon as possible and begin reducing aviation's non- emissions.},
218
239
  langid = {english}
219
240
  }
220
241
 
@@ -235,19 +256,21 @@
235
256
  langid = {english}
236
257
  }
237
258
 
238
- @misc{geraedtsScalableSystemMeasure2023,
259
+ @article{geraedtsScalableSystemMeasure2024,
239
260
  title = {A Scalable System to Measure Contrail Formation on a Per-Flight Basis},
240
261
  author = {Geraedts, Scott and Brand, Erica and Dean, Thomas R. and Eastham, Sebastian and Elkin, Carl and Engberg, Zebediah and Hager, Ulrike and Langmore, Ian and McCloskey, Kevin and Ng, Joe Yue-Hei and Platt, John C. and Sankar, Tharun and Sarna, Aaron and Shapiro, Marc and Goyal, Nita},
241
- year = {2023},
242
- month = aug,
243
- number = {arXiv:2308.02707},
244
- eprint = {2308.02707},
245
- primaryclass = {physics},
246
- publisher = {arXiv},
247
- urldate = {2023-08-25},
248
- abstract = {Persistent contrails make up a large fraction of aviation's contribution to global warming. We describe a scalable, automated detection and matching (ADM) system to determine from satellite data whether a flight has made a persistent contrail. The ADM system compares flight segments to contrails detected by a computer vision algorithm running on images from the GOES-16 Advanced Baseline Imager. We develop a 'flight matching' algorithm and use it to label each flight segment as a 'match' or 'non-match'. We perform this analysis on 1.6 million flight segments. The result is an analysis of which flights make persistent contrails several orders of magnitude larger than any previous work. We assess the agreement between our labels and available prediction models based on weather forecasts. Shifting air traffic to avoid regions of contrail formation has been proposed as a possible mitigation with the potential for very low cost/ton-CO2e. Our findings suggest that imperfections in these prediction models increase this cost/ton by about an order of magnitude. Contrail avoidance is a cost-effective climate change mitigation even with this factor taken into account, but our results quantify the need for more accurate contrail prediction methods and establish a benchmark for future development.},
249
- archiveprefix = {arxiv},
250
- keywords = {Physics - Atmospheric and Oceanic Physics}
262
+ year = {2024},
263
+ month = jan,
264
+ journal = {Environmental Research Communications},
265
+ volume = {6},
266
+ number = {1},
267
+ pages = {015008},
268
+ publisher = {IOP Publishing},
269
+ issn = {2515-7620},
270
+ doi = {10.1088/2515-7620/ad11ab},
271
+ urldate = {2024-04-12},
272
+ abstract = {Persistent contrails make up a large fraction of aviation's contribution to global warming. We describe a scalable, automated detection and matching (ADM) system to determine from satellite data whether a flight has made a persistent contrail. The ADM system compares flight segments to contrails detected by a computer vision algorithm running on images from the GOES-16 Advanced Baseline Imager. We develop a flight matching algorithm and use it to label each flight segment as a match or non-match. We perform this analysis on 1.6 million flight segments. The result is an analysis of which flights make persistent contrails several orders of magnitude larger than any previous work. We assess the agreement between our labels and available prediction models based on weather forecasts. Shifting air traffic to avoid regions of contrail formation has been proposed as a possible mitigation with the potential for very low cost/ton-CO2e. Our findings suggest that imperfections in these prediction models increase this cost/ton by about an order of magnitude. Contrail avoidance is a cost-effective climate change mitigation even with this factor taken into account, but our results quantify the need for more accurate contrail prediction methods and establish a benchmark for future development.},
273
+ langid = {english}
251
274
  }
252
275
 
253
276
  @article{holzapfelProbabilisticTwoPhaseWake2003,
@@ -338,6 +361,21 @@
338
361
  langid = {english}
339
362
  }
340
363
 
364
+ @article{lowGroundbasedContrailObservations2024,
365
+ title = {Ground-Based Contrail Observations: Comparisons with Flight Telemetry and Contrail Model Estimates},
366
+ shorttitle = {Ground-Based Contrail Observations},
367
+ author = {Low, Jade and Teoh, Roger and Ponsonby, Joel and Gryspeerdt, Edward and Shapiro, Marc and Stettler, Marc},
368
+ year = {2024},
369
+ month = jun,
370
+ journal = {EGUsphere},
371
+ pages = {1--25},
372
+ publisher = {Copernicus GmbH},
373
+ doi = {10.5194/egusphere-2024-1458},
374
+ urldate = {2024-07-09},
375
+ abstract = {{$<$}p{$><$}strong class="journal-contentHeaderColor"{$>$}Abstract.{$<$}/strong{$>$} Observations of contrail are vital for improving understanding of contrail formation and lifecycle, informing models, and assessing contrail mitigation strategies. Ground-based cameras offer a cost-effective means to observe the formation and evolution of young contrails and can be used to assess the accuracy of existing models. Here, we develop a methodology to track and analyse contrails from ground-based cameras, comparing these observations against simulations from the contrail cirrus prediction model (CoCiP) with actual flight trajectories. The ground-based contrail observations consist of 14 h of video footage recorded on five different days over Central London, capturing a total of 1,619 flight waypoints from 283 unique flights. Our results suggest that the best agreement between the observed and simulated contrail formation occurs at around 35,000\&ndash;40,000 feet and at temperatures at least 10 K below the Schmidt-Appleman Criterion threshold temperature ({$<$}em{$>$}T{$<$}/em{$>$}\textsubscript{SAC}). Conversely, the largest discrepancies occurred when contrails are formed below 30,000 feet and at temperatures within 2.5 K of {$<$}em{$>$}T{$<$}/em{$>$}\textsubscript{SAC}. On average, the simulated contrail width is 17.5 \% smaller than the observed geometric width. This discrepancy could be caused by the underestimation of sub-grid scale wind shear and turbulent mixing in the simulation, and model representation of the contrail cross-sectional shape. Overall, these findings demonstrate the capability of ground-based cameras to inform weather and contrail model development when combined with flight telemetry.{$<$}/p{$>$}},
376
+ langid = {english}
377
+ }
378
+
341
379
  @inproceedings{mccloskeyHumanlabeledLandsatContrails2021,
342
380
  title = {A Human-Labeled {{Landsat}} Contrails Dataset},
343
381
  booktitle = {{{ICML}} 2021 {{Workshop}}: {{Tackling Climate Change}} with {{Machine Learning}}},
@@ -390,6 +428,23 @@
390
428
  langid = {english}
391
429
  }
392
430
 
431
+ @article{plattEffectUncertaintyHumidity2024,
432
+ title = {The Effect of Uncertainty in Humidity and Model Parameters on the Prediction of Contrail Energy Forcing},
433
+ author = {Platt, John C. and Shapiro, Marc L. and Engberg, Zebediah and McCloskey, Kevin and Geraedts, Scott and Sankar, Tharun and Stettler, Marc E. J. and Teoh, Roger and Schumann, Ulrich and Rohs, Susanne and Brand, Erica and Arsdale, Christopher Van},
434
+ year = {2024},
435
+ month = sep,
436
+ journal = {Environmental Research Communications},
437
+ volume = {6},
438
+ number = {9},
439
+ pages = {095015},
440
+ publisher = {IOP Publishing},
441
+ issn = {2515-7620},
442
+ doi = {10.1088/2515-7620/ad6ee5},
443
+ urldate = {2024-09-17},
444
+ abstract = {Previous work has shown that while the net effect of aircraft condensation trails (contrails) on the climate is warming, the exact magnitude of the energy forcing per meter of contrail remains uncertain. In this paper, we explore the skill of a Lagrangian contrail model (CoCiP) in identifying flight segments with high contrail energy forcing. We find that skill is greater than climatological predictions alone, even accounting for uncertainty in weather fields and model parameters. We estimate the uncertainty due to humidity by using the ensemble ERA5 weather reanalysis from the European Centre for Medium-Range Weather Forecasts (ECMWF) as Monte Carlo inputs to CoCiP. We unbias and correct under-dispersion on the ERA5 humidity data by forcing a match to the distribution of in situ humidity measurements taken at cruising altitude. We take CoCiP energy forcing estimates calculated using one of the ensemble members as a proxy for ground truth, and report the skill of CoCiP in identifying segments with large positive proxy energy forcing. We further estimate the uncertainty due to model parameters in CoCiP by performing Monte Carlo simulations with CoCiP model parameters drawn from uncertainty distributions consistent with the literature. When CoCiP outputs are averaged over seasons to form climatological predictions, the skill in predicting the proxy is 44\%, while the skill of per-flight CoCiP outputs is 84\%. If these results carry over to the true (unknown) contrail EF, they indicate that per-flight energy forcing predictions can reduce the number of potential contrail avoidance route adjustments by 2x, hence reducing both the cost and fuel impact of contrail avoidance.},
445
+ langid = {english}
446
+ }
447
+
393
448
  @article{pollEstimationMethodFuel2021,
394
449
  title = {An Estimation Method for the Fuel Burn and Other Performance Characteristics of Civil Transport Aircraft in the Cruise. {{Part}} 1 Fundamental Quantities and Governing Relations for a General Atmosphere},
395
450
  author = {Poll, D.I.A. and Schumann, U.},
@@ -838,6 +893,23 @@
838
893
  langid = {english}
839
894
  }
840
895
 
896
+ @article{teohGlobalAviationContrail2024,
897
+ title = {Global Aviation Contrail Climate Effects from 2019 to 2021},
898
+ author = {Teoh, Roger and Engberg, Zebediah and Schumann, Ulrich and Voigt, Christiane and Shapiro, Marc and Rohs, Susanne and Stettler, Marc E. J.},
899
+ year = {2024},
900
+ month = may,
901
+ journal = {Atmospheric Chemistry and Physics},
902
+ volume = {24},
903
+ number = {10},
904
+ pages = {6071--6093},
905
+ publisher = {Copernicus GmbH},
906
+ issn = {1680-7316},
907
+ doi = {10.5194/acp-24-6071-2024},
908
+ urldate = {2024-05-28},
909
+ abstract = {The current best-estimate of the global annual mean radiative forcing (RF) attributable to contrail cirrus is thought to be 3 times larger than the RF from aviation's cumulative CO2 emissions. Here, we simulate the global contrail RF for 2019--2021 using reanalysis weather data and improved engine emission estimates along actual flight trajectories derived from Automatic Dependent Surveillance--Broadcast telemetry. Our 2019 global annual mean contrail net RF (62.1 mW m-2) is 44 \% lower than current best estimates for 2018 (111 [33, 189] mW m-2, 95 \% confidence interval). Regionally, the contrail net RF is largest over Europe (876 mW m-2) and the USA (414 mW m-2), while the RF values over East Asia (64 mW m-2) and China (62 mW m-2) are close to the global average, because fewer flights in these regions form persistent contrails resulting from lower cruise altitudes and limited ice supersaturated regions in the subtropics due to the Hadley Circulation. Globally, COVID-19 reduced the flight distance flown and contrail net RF in 2020 (-43 \% and -56 \%, respectively, relative to 2019) and 2021 (-31 \% and -49 \%, respectively) with significant regional variations. Around 14 \% of all flights in 2019 formed a contrail with a net warming effect, yet only 2 \% of all flights caused 80 \% of the annual contrail energy forcing. The spatiotemporal patterns of the most strongly warming and cooling contrail segments can be attributed to flight scheduling, engine particle number emissions, tropopause height, and background radiation fields. Our contrail RF estimates are most sensitive to corrections applied to the global humidity fields, followed by assumptions on the engine particle number emissions, and are least sensitive to radiative heating effects on the contrail plume and contrail--contrail overlapping. Using this sensitivity analysis, we estimate that the 2019 global contrail net RF could range between 34.8 and 74.8 mW m-2.},
910
+ langid = {english}
911
+ }
912
+
841
913
  @article{teohHighresolutionGlobalAviation2023,
842
914
  title = {A High-Resolution {{Global Aviation}} Emissions {{Inventory}} Based on {{ADS-B}} ({{GAIA}}) for 2019-2021},
843
915
  author = {Teoh, Roger and Engberg, Zebediah and Shapiro, Marc and Dray, Lynnette and Stettler, Marc},
@@ -852,6 +924,23 @@
852
924
  langid = {english}
853
925
  }
854
926
 
927
+ @article{teohHighresolutionGlobalAviation2024,
928
+ title = {The High-Resolution {{Global Aviation}} Emissions {{Inventory}} Based on {{ADS-B}} ({{GAIA}}) for 2019--2021},
929
+ author = {Teoh, Roger and Engberg, Zebediah and Shapiro, Marc and Dray, Lynnette and Stettler, Marc E. J.},
930
+ year = {2024},
931
+ month = jan,
932
+ journal = {Atmospheric Chemistry and Physics},
933
+ volume = {24},
934
+ number = {1},
935
+ pages = {725--744},
936
+ publisher = {Copernicus GmbH},
937
+ issn = {1680-7316},
938
+ doi = {10.5194/acp-24-725-2024},
939
+ urldate = {2024-01-24},
940
+ abstract = {Aviation emissions that are dispersed into the Earth's atmosphere affect the climate and air pollution, with significant spatiotemporal variation owing to heterogeneous aircraft activity. In this paper, we use historical flight trajectories derived from Automatic Dependent Surveillance--Broadcast (ADS-B) telemetry and reanalysis weather data for 2019--2021 to develop the Global Aviation emissions Inventory based on ADS-B (GAIA). In 2019, 40.2 million flights collectively travelled 61 billion kilometres using 283 Tg of fuel, leading to CO2, NOX and non-volatile particulate matter (nvPM) mass and number emissions of 893 Tg, 4.49 Tg, 21.4 Gg and 2.8 {\texttimes} 1026 respectively. Global responses to COVID-19 led to reductions in the annual flight distance flown and CO2 and NOX emissions in 2020 (-43 \%, -48 \% and -50 \% respectively relative to 2019) and 2021 (-31 \%, -41 \% and -43 \% respectively), with significant regional variability. Short-haul flights with durations \&lt; 3 h accounted for 83 \% of all flights but only for 35 \% of the 2019 CO2 emissions, while long-haul flights with durations \&gt; 6 h (5 \% of all flights) were responsible for 43 \% of CO2 and 49 \% of NOX emissions. Globally, the actual flight trajectories flown are, on average, {$\sim$} 5 \% greater than the great circle path between the origin and destination airports, but this varies by region and flight distance. An evaluation of 8705 unique flights between London and Singapore showed large variabilities in the flight trajectory profile, fuel consumption and emission indices. GAIA captures the spatiotemporal distribution of aviation activity and emissions and is provided for use in future studies to evaluate the negative externalities arising from global aviation.},
941
+ langid = {english}
942
+ }
943
+
855
944
  @article{teohMethodologyRelateBlack2019,
856
945
  title = {A Methodology to Relate Black Carbon Particle Number and Mass Emissions},
857
946
  author = {Teoh, Roger and Stettler, Marc E.J. and Majumdar, Arnab and Schumann, Ulrich and Graves, Brian and Boies, Adam M.},
@@ -164,7 +164,7 @@ Dry Advection
164
164
  ACCF
165
165
  """"
166
166
 
167
- This model is a this interface over the DLR / UMadrid `climaccf <https://github.com/dlr-pa/climaccf>`__ package.
167
+ This model is an interface over the DLR / UMadrid `climaccf <https://github.com/dlr-pa/climaccf>`__ package.
168
168
  See :ref:`accf-install` for more information.
169
169
 
170
170
  .. autosummary::
@@ -78,6 +78,7 @@ suppress_warnings = ["myst.header"]
78
78
  # Set up mapping for other projects' docs
79
79
  intersphinx_mapping = {
80
80
  "numpy": ("https://numpy.org/doc/stable/", None),
81
+ "open3d": ("https://www.open3d.org/docs/release/", None),
81
82
  "pandas": ("https://pandas.pydata.org/pandas-docs/dev/", None),
82
83
  "pyproj": ("https://pyproj4.github.io/pyproj/stable/", None),
83
84
  "python": ("https://docs.python.org/3/", None),
@@ -170,7 +171,7 @@ autodoc_typehints = "none"
170
171
 
171
172
  # autodoc options
172
173
  autoclass_content = "class" # only include docstring from Class (not __init__ method)
173
- autodoc_inherit_docstrings = False
174
+ autodoc_inherit_docstrings = True
174
175
  autodoc_default_options = {
175
176
  "members": None, # means yes/true/on
176
177
  "undoc-members": None,