pycontrails 0.51.0__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 (256) hide show
  1. {pycontrails-0.51.0 → pycontrails-0.51.1}/CHANGELOG.md +18 -1
  2. {pycontrails-0.51.0 → pycontrails-0.51.1}/PKG-INFO +1 -1
  3. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/_version.py +2 -2
  4. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/flight.py +44 -6
  5. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/rgi_cython.c +125 -125
  6. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/ps_model/ps_aircraft_params.py +19 -3
  7. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/ps_model/ps_grid.py +21 -21
  8. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/ps_model/ps_model.py +41 -6
  9. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/ps_model/ps_operational_limits.py +15 -6
  10. pycontrails-0.51.0/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
  11. pycontrails-0.51.1/pycontrails/models/ps_model/static/ps-synonym-list-20240524.csv +103 -0
  12. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails.egg-info/PKG-INFO +1 -1
  13. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails.egg-info/SOURCES.txt +2 -1
  14. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_flight.py +19 -0
  15. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_ps_model.py +31 -18
  16. {pycontrails-0.51.0 → pycontrails-0.51.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {pycontrails-0.51.0 → pycontrails-0.51.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  18. {pycontrails-0.51.0 → pycontrails-0.51.1}/.github/dependabot.yaml +0 -0
  19. {pycontrails-0.51.0 → pycontrails-0.51.1}/.github/pull_request_template.md +0 -0
  20. {pycontrails-0.51.0 → pycontrails-0.51.1}/.github/workflows/benchmark.yaml +0 -0
  21. {pycontrails-0.51.0 → pycontrails-0.51.1}/.github/workflows/docs.yaml +0 -0
  22. {pycontrails-0.51.0 → pycontrails-0.51.1}/.github/workflows/doctest.yaml +0 -0
  23. {pycontrails-0.51.0 → pycontrails-0.51.1}/.github/workflows/release.yaml +0 -0
  24. {pycontrails-0.51.0 → pycontrails-0.51.1}/.github/workflows/scorecard.yaml +0 -0
  25. {pycontrails-0.51.0 → pycontrails-0.51.1}/.github/workflows/test.yaml +0 -0
  26. {pycontrails-0.51.0 → pycontrails-0.51.1}/.gitignore +0 -0
  27. {pycontrails-0.51.0 → pycontrails-0.51.1}/.pre-commit-config.yaml +0 -0
  28. {pycontrails-0.51.0 → pycontrails-0.51.1}/.zenodo.json +0 -0
  29. {pycontrails-0.51.0 → pycontrails-0.51.1}/CONTRIBUTING.md +0 -0
  30. {pycontrails-0.51.0 → pycontrails-0.51.1}/LICENSE +0 -0
  31. {pycontrails-0.51.0 → pycontrails-0.51.1}/Makefile +0 -0
  32. {pycontrails-0.51.0 → pycontrails-0.51.1}/NOTICE +0 -0
  33. {pycontrails-0.51.0 → pycontrails-0.51.1}/README.md +0 -0
  34. {pycontrails-0.51.0 → pycontrails-0.51.1}/RELEASE.md +0 -0
  35. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/_static/css/style.css +0 -0
  36. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/_static/img/colab.png +0 -0
  37. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/_static/img/favicon.png +0 -0
  38. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/_static/img/logo-dark.png +0 -0
  39. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/_static/img/logo.png +0 -0
  40. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/_static/pycontrails.bib +0 -0
  41. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/api.rst +0 -0
  42. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/changelog.rst +0 -0
  43. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/conf.py +0 -0
  44. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/contributing.rst +0 -0
  45. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/develop.rst +0 -0
  46. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/flight.rst +0 -0
  47. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/index.rst +0 -0
  48. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/install.rst +0 -0
  49. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/integrations/ACCF.ipynb +0 -0
  50. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/literature.rst +0 -0
  51. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/meteorology.rst +0 -0
  52. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/models.rst +0 -0
  53. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/ARCO-ERA5.ipynb +0 -0
  54. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/AircraftPerformance.ipynb +0 -0
  55. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/Cache.ipynb +0 -0
  56. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/CoCiP.ipynb +0 -0
  57. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/ECMWF.ipynb +0 -0
  58. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/Flight.ipynb +0 -0
  59. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/GFS.ipynb +0 -0
  60. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/GOES.ipynb +0 -0
  61. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/ISSR.ipynb +0 -0
  62. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/Meteorology.ipynb +0 -0
  63. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/SAC.ipynb +0 -0
  64. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/advection.ipynb +0 -0
  65. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/airports.ipynb +0 -0
  66. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/data/.gitignore +0 -0
  67. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/data/flight-ap.csv +0 -0
  68. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/data/flight-cocip.csv +0 -0
  69. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/data/flight-fdr.csv +0 -0
  70. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/data/flight-noisy.csv +0 -0
  71. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/data/flight.csv +0 -0
  72. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/flightplan.ipynb +0 -0
  73. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/model-levels.ipynb +0 -0
  74. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/run-cocip-on-flight.ipynb +0 -0
  75. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/run-cocip-with-fdr.ipynb +0 -0
  76. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks/specific-humidity-interpolation.ipynb +0 -0
  77. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/notebooks.rst +0 -0
  78. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/observations.rst +0 -0
  79. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/tutorials.rst +0 -0
  80. {pycontrails-0.51.0 → pycontrails-0.51.1}/docs/utilities.rst +0 -0
  81. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/__init__.py +0 -0
  82. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/__init__.py +0 -0
  83. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/aircraft_performance.py +0 -0
  84. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/airports.py +0 -0
  85. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/cache.py +0 -0
  86. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/coordinates.py +0 -0
  87. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/datalib.py +0 -0
  88. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/fleet.py +0 -0
  89. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/flightplan.py +0 -0
  90. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/fuel.py +0 -0
  91. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/interpolation.py +0 -0
  92. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/met.py +0 -0
  93. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/met_var.py +0 -0
  94. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/models.py +0 -0
  95. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/polygon.py +0 -0
  96. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/rgi_cython.pyx +0 -0
  97. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/core/vector.py +0 -0
  98. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/__init__.py +0 -0
  99. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/__init__.py +0 -0
  100. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/arco_era5.py +0 -0
  101. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/common.py +0 -0
  102. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/era5.py +0 -0
  103. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/era5_model_level.py +0 -0
  104. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/hres.py +0 -0
  105. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/hres_model_level.py +0 -0
  106. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/ifs.py +0 -0
  107. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/model_levels.py +0 -0
  108. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv +0 -0
  109. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/ecmwf/variables.py +0 -0
  110. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/gfs/__init__.py +0 -0
  111. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/gfs/gfs.py +0 -0
  112. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/gfs/variables.py +0 -0
  113. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/goes.py +0 -0
  114. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/spire/__init__.py +0 -0
  115. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/datalib/spire/spire.py +0 -0
  116. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/ext/bada.py +0 -0
  117. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/ext/cirium.py +0 -0
  118. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/ext/empirical_grid.py +0 -0
  119. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/ext/synthetic_flight.py +0 -0
  120. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/__init__.py +0 -0
  121. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/accf.py +0 -0
  122. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/cocip/__init__.py +0 -0
  123. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/cocip/cocip.py +0 -0
  124. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/cocip/cocip_params.py +0 -0
  125. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/cocip/cocip_uncertainty.py +0 -0
  126. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/cocip/contrail_properties.py +0 -0
  127. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/cocip/output_formats.py +0 -0
  128. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/cocip/radiative_forcing.py +0 -0
  129. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/cocip/radiative_heating.py +0 -0
  130. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/cocip/unterstrasser_wake_vortex.py +0 -0
  131. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/cocip/wake_vortex.py +0 -0
  132. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/cocip/wind_shear.py +0 -0
  133. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/cocipgrid/__init__.py +0 -0
  134. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/cocipgrid/cocip_grid.py +0 -0
  135. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/cocipgrid/cocip_grid_params.py +0 -0
  136. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/dry_advection.py +0 -0
  137. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/emissions/__init__.py +0 -0
  138. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/emissions/black_carbon.py +0 -0
  139. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/emissions/emissions.py +0 -0
  140. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/emissions/ffm2.py +0 -0
  141. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/emissions/static/default-engine-uids.csv +0 -0
  142. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv +0 -0
  143. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv +0 -0
  144. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/humidity_scaling/__init__.py +0 -0
  145. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/humidity_scaling/humidity_scaling.py +0 -0
  146. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq +0 -0
  147. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq +0 -0
  148. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/issr.py +0 -0
  149. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/pcc.py +0 -0
  150. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/pcr.py +0 -0
  151. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/ps_model/__init__.py +0 -0
  152. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/sac.py +0 -0
  153. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/models/tau_cirrus.py +0 -0
  154. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/physics/__init__.py +0 -0
  155. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/physics/constants.py +0 -0
  156. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/physics/geo.py +0 -0
  157. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/physics/jet.py +0 -0
  158. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/physics/thermo.py +0 -0
  159. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/physics/units.py +0 -0
  160. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/py.typed +0 -0
  161. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/utils/__init__.py +0 -0
  162. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/utils/dependencies.py +0 -0
  163. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/utils/iteration.py +0 -0
  164. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/utils/json.py +0 -0
  165. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/utils/temp.py +0 -0
  166. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails/utils/types.py +0 -0
  167. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails.egg-info/dependency_links.txt +0 -0
  168. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails.egg-info/requires.txt +0 -0
  169. {pycontrails-0.51.0 → pycontrails-0.51.1}/pycontrails.egg-info/top_level.txt +0 -0
  170. {pycontrails-0.51.0 → pycontrails-0.51.1}/pyproject.toml +0 -0
  171. {pycontrails-0.51.0 → pycontrails-0.51.1}/setup.cfg +0 -0
  172. {pycontrails-0.51.0 → pycontrails-0.51.1}/setup.py +0 -0
  173. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/__init__.py +0 -0
  174. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/_deprecated.py +0 -0
  175. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/benchmark/cocip/Makefile +0 -0
  176. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/benchmark/cocip/README.md +0 -0
  177. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/benchmark/cocip/benchmark.py +0 -0
  178. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/benchmark/cocip/compare.py +0 -0
  179. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/benchmark/cocip/data.md +0 -0
  180. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/benchmark/cocip/output.py +0 -0
  181. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/benchmark/cocip/review.ipynb +0 -0
  182. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/benchmark/cocip-fortran/README.md +0 -0
  183. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/benchmark/north-atlantic-study/.gcloudignore +0 -0
  184. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/benchmark/north-atlantic-study/README.md +0 -0
  185. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/benchmark/north-atlantic-study/support.py +0 -0
  186. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/benchmark/north-atlantic-study/validate.py +0 -0
  187. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/fixtures/cocip-met.py +0 -0
  188. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/fixtures/cocip-met2.py +0 -0
  189. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/fixtures/ecmwf-met.py +0 -0
  190. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/fixtures/gfs-met.py +0 -0
  191. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/__init__.py +0 -0
  192. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/conftest.py +0 -0
  193. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/NOAA_Solar_Calculations_day.csv +0 -0
  194. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/cocip-contrail-output.json +0 -0
  195. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/cocip-contrail-output2.json +0 -0
  196. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/cocip-flight-output.json +0 -0
  197. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/cocip-flight-output2.json +0 -0
  198. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/cocip-output-contrail-edges.json +0 -0
  199. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/cocip-output-flts-20190101-eu.pq +0 -0
  200. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/flight-cocip2.csv +0 -0
  201. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/flight-meridian.csv +0 -0
  202. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/flight-metadata.json +0 -0
  203. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/flight-spire-data-cleaning.pq +0 -0
  204. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/flight.csv +0 -0
  205. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/flt-wypts-20190101-eu.pq +0 -0
  206. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/met-20190101-eu.nc +0 -0
  207. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/met-accf-pl.nc +0 -0
  208. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/met-accf-sl.nc +0 -0
  209. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/met-ecmwf-pl.nc +0 -0
  210. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/met-ecmwf-sl.nc +0 -0
  211. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/met-era5-cocip1.nc +0 -0
  212. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/met-era5-cocip2.nc +0 -0
  213. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/met-gfs.nc +0 -0
  214. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/polygon-bug.nc +0 -0
  215. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/rad-20190101-eu.nc +0 -0
  216. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/rad-era5-cocip1.nc +0 -0
  217. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/rad-era5-cocip2.nc +0 -0
  218. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/static/rad-gfs.nc +0 -0
  219. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_accf.py +0 -0
  220. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_airports.py +0 -0
  221. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_cache.py +0 -0
  222. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_cocip.py +0 -0
  223. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_cocip_grid.py +0 -0
  224. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_cocip_grid_parity.py +0 -0
  225. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_cocip_radiative_forcing.py +0 -0
  226. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_cocip_uncertainty.py +0 -0
  227. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_coordinates.py +0 -0
  228. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_datalib.py +0 -0
  229. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_dry_advection.py +0 -0
  230. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_dtypes.py +0 -0
  231. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_ecmwf.py +0 -0
  232. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_emissions.py +0 -0
  233. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_fleet.py +0 -0
  234. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_flightplan.py +0 -0
  235. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_fuel.py +0 -0
  236. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_geo.py +0 -0
  237. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_gfs.py +0 -0
  238. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_goes.py +0 -0
  239. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_grid_to_netcdf.py +0 -0
  240. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_humidity_scaling.py +0 -0
  241. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_init.py +0 -0
  242. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_interpolation.py +0 -0
  243. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_met.py +0 -0
  244. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_met_cache.py +0 -0
  245. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_models.py +0 -0
  246. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_pcc.py +0 -0
  247. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_polygons.py +0 -0
  248. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_sac_issr.py +0 -0
  249. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_spire.py +0 -0
  250. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_tau_cirrus.py +0 -0
  251. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_thermo_sac.py +0 -0
  252. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_units.py +0 -0
  253. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_unterstrasser_wake_vortex.py +0 -0
  254. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_utils.py +0 -0
  255. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_vector.py +0 -0
  256. {pycontrails-0.51.0 → pycontrails-0.51.1}/tests/unit/test_zarr.py +0 -0
@@ -1,6 +1,23 @@
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
+
4
21
  ## v0.51.0
5
22
 
6
23
  ### Breaking changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycontrails
3
- Version: 0.51.0
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
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.51.0'
16
- __version_tuple__ = version_tuple = (0, 51, 0)
15
+ __version__ = version = '0.51.1'
16
+ __version_tuple__ = version_tuple = (0, 51, 1)
@@ -728,9 +728,17 @@ class Flight(GeoVectorDataset):
728
728
  """
729
729
  return units.tas_to_mach_number(true_airspeed, air_temperature)
730
730
 
731
- def segment_rocd(self) -> npt.NDArray[np.float64]:
731
+ def segment_rocd(
732
+ self,
733
+ air_temperature: None | npt.NDArray[np.float64] = None,
734
+ ) -> npt.NDArray[np.float64]:
732
735
  """Calculate the rate of climb and descent (ROCD).
733
736
 
737
+ Parameters
738
+ ----------
739
+ air_temperature: None | npt.NDArray[np.float64]
740
+ Air temperature of each flight waypoint, [:math:`K`]
741
+
734
742
  Returns
735
743
  -------
736
744
  npt.NDArray[np.float64]
@@ -740,12 +748,13 @@ class Flight(GeoVectorDataset):
740
748
  --------
741
749
  :func:`segment_rocd`
742
750
  """
743
- return segment_rocd(self.segment_duration(), self.altitude_ft)
751
+ return segment_rocd(self.segment_duration(), self.altitude_ft, air_temperature)
744
752
 
745
753
  def segment_phase(
746
754
  self,
747
755
  threshold_rocd: float = 250.0,
748
756
  min_cruise_altitude_ft: float = 20000.0,
757
+ air_temperature: None | npt.NDArray[np.float64] = None,
749
758
  ) -> npt.NDArray[np.uint8]:
750
759
  """Identify the phase of flight (climb, cruise, descent) for each segment.
751
760
 
@@ -759,6 +768,8 @@ class Flight(GeoVectorDataset):
759
768
  This is specific for each aircraft type,
760
769
  and can be approximated as 50% of the altitude ceiling.
761
770
  Defaults to 20000 ft.
771
+ air_temperature: None | npt.NDArray[np.float64]
772
+ Air temperature of each flight waypoint, [:math:`K`]
762
773
 
763
774
  Returns
764
775
  -------
@@ -773,7 +784,7 @@ class Flight(GeoVectorDataset):
773
784
  :func:`segment_rocd`
774
785
  """
775
786
  return segment_phase(
776
- self.segment_rocd(),
787
+ self.segment_rocd(air_temperature),
777
788
  self.altitude_ft,
778
789
  threshold_rocd=threshold_rocd,
779
790
  min_cruise_altitude_ft=min_cruise_altitude_ft,
@@ -1952,6 +1963,7 @@ def filter_altitude(
1952
1963
  altitude_ft: npt.NDArray[np.float64],
1953
1964
  kernel_size: int = 17,
1954
1965
  cruise_threshold: float = 120,
1966
+ air_temperature: None | npt.NDArray[np.float64] = None,
1955
1967
  ) -> npt.NDArray[np.float64]:
1956
1968
  """
1957
1969
  Filter noisy altitude on a single flight.
@@ -1971,6 +1983,8 @@ def filter_altitude(
1971
1983
  Passed also to :func:`scipy.signal.medfilt`
1972
1984
  cruise_theshold : int, optional
1973
1985
  Minimal length of time, in seconds, for a flight to be in cruise to apply median filter
1986
+ air_temperature: None | npt.NDArray[np.float64]
1987
+ Air temperature of each flight waypoint, [:math:`K`]
1974
1988
 
1975
1989
  Returns
1976
1990
  -------
@@ -2017,7 +2031,7 @@ def filter_altitude(
2017
2031
 
2018
2032
  # Find cruise phase in filtered profile
2019
2033
  seg_duration = segment_duration(time)
2020
- seg_rocd = segment_rocd(seg_duration, altitude_filt)
2034
+ seg_rocd = segment_rocd(seg_duration, altitude_filt, air_temperature)
2021
2035
  seg_phase = segment_phase(seg_rocd, altitude_filt)
2022
2036
  is_cruise = seg_phase == FlightPhase.CRUISE
2023
2037
 
@@ -2153,7 +2167,9 @@ def segment_phase(
2153
2167
 
2154
2168
 
2155
2169
  def segment_rocd(
2156
- segment_duration: npt.NDArray[np.float64], altitude_ft: npt.NDArray[np.float64]
2170
+ segment_duration: npt.NDArray[np.float64],
2171
+ altitude_ft: npt.NDArray[np.float64],
2172
+ air_temperature: None | npt.NDArray[np.float64] = None,
2157
2173
  ) -> npt.NDArray[np.float64]:
2158
2174
  """Calculate the rate of climb and descent (ROCD).
2159
2175
 
@@ -2165,12 +2181,22 @@ def segment_rocd(
2165
2181
  See output from :func:`segment_duration`.
2166
2182
  altitude_ft: npt.NDArray[np.float64]
2167
2183
  Altitude of each waypoint, [:math:`ft`]
2184
+ air_temperature: None | npt.NDArray[np.float64]
2185
+ Air temperature of each flight waypoint, [:math:`K`]
2168
2186
 
2169
2187
  Returns
2170
2188
  -------
2171
2189
  npt.NDArray[np.float64]
2172
2190
  Rate of climb and descent over segment, [:math:`ft min^{-1}`]
2173
2191
 
2192
+ Notes
2193
+ -----
2194
+ The hydrostatic equation will be used to estimate the ROCD if `air_temperature` is provided.
2195
+ This will improve the accuracy of the estimated ROCD with a temperature correction. The
2196
+ estimated ROCD with the temperature correction are expected to differ by up to +-5% compared to
2197
+ those without the correction. These differences are important when the ROCD estimates are used
2198
+ as inputs to aircraft performance models.
2199
+
2174
2200
  See Also
2175
2201
  --------
2176
2202
  :func:`segment_duration`
@@ -2181,7 +2207,19 @@ def segment_rocd(
2181
2207
  out[:-1] = np.diff(altitude_ft) / dt_min[:-1]
2182
2208
  out[-1] = np.nan
2183
2209
 
2184
- return out
2210
+ if air_temperature is None:
2211
+ return out
2212
+
2213
+ else:
2214
+ altitude_m = units.ft_to_m(altitude_ft)
2215
+ T_isa = units.m_to_T_isa(altitude_m)
2216
+
2217
+ T_correction = np.empty_like(altitude_ft)
2218
+ T_correction[:-1] = (0.5 * (air_temperature[:-1] + air_temperature[1:])) / (
2219
+ 0.5 * (T_isa[:-1] + T_isa[1:])
2220
+ )
2221
+ T_correction[-1] = np.nan
2222
+ return T_correction * out
2185
2223
 
2186
2224
 
2187
2225
  def _resample_to_freq(df: pd.DataFrame, freq: str) -> tuple[pd.DataFrame, pd.DatetimeIndex]: