pycontrails 0.50.1__tar.gz → 0.50.2__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 (251) hide show
  1. {pycontrails-0.50.1 → pycontrails-0.50.2}/CHANGELOG.md +19 -0
  2. {pycontrails-0.50.1 → pycontrails-0.50.2}/PKG-INFO +1 -1
  3. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/GFS.ipynb +1 -1
  4. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/_version.py +2 -2
  5. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/flight.py +97 -0
  6. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/rgi_cython.c +125 -125
  7. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/emissions/emissions.py +2 -2
  8. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/emissions/static/default-engine-uids.csv +1 -1
  9. pycontrails-0.50.1/pycontrails/models/emissions/static/edb-gaseous-v28c-engines.csv → pycontrails-0.50.2/pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv +49 -11
  10. pycontrails-0.50.1/pycontrails/models/emissions/static/edb-nvpm-v28c-engines.csv → pycontrails-0.50.2/pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv +90 -54
  11. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/ps_model/ps_aircraft_params.py +13 -1
  12. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/ps_model/ps_grid.py +20 -20
  13. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/ps_model/ps_model.py +1 -1
  14. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/ps_model/ps_operational_limits.py +202 -1
  15. pycontrails-0.50.2/pycontrails/models/ps_model/static/ps-aircraft-params-20240417.csv +64 -0
  16. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/physics/units.py +2 -2
  17. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/utils/types.py +3 -1
  18. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails.egg-info/PKG-INFO +1 -1
  19. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails.egg-info/SOURCES.txt +3 -3
  20. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_cocip_grid.py +1 -1
  21. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_emissions.py +2 -2
  22. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_flight.py +14 -0
  23. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_ps_model.py +33 -17
  24. pycontrails-0.50.1/pycontrails/models/ps_model/static/ps-aircraft-params-20240209.csv +0 -63
  25. {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  26. {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  27. {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/dependabot.yaml +0 -0
  28. {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/pull_request_template.md +0 -0
  29. {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/workflows/benchmark.yaml +0 -0
  30. {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/workflows/docs.yaml +0 -0
  31. {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/workflows/doctest.yaml +0 -0
  32. {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/workflows/release.yaml +0 -0
  33. {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/workflows/scorecard.yaml +0 -0
  34. {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/workflows/test.yaml +0 -0
  35. {pycontrails-0.50.1 → pycontrails-0.50.2}/.gitignore +0 -0
  36. {pycontrails-0.50.1 → pycontrails-0.50.2}/.pre-commit-config.yaml +0 -0
  37. {pycontrails-0.50.1 → pycontrails-0.50.2}/.zenodo.json +0 -0
  38. {pycontrails-0.50.1 → pycontrails-0.50.2}/CONTRIBUTING.md +0 -0
  39. {pycontrails-0.50.1 → pycontrails-0.50.2}/LICENSE +0 -0
  40. {pycontrails-0.50.1 → pycontrails-0.50.2}/Makefile +0 -0
  41. {pycontrails-0.50.1 → pycontrails-0.50.2}/NOTICE +0 -0
  42. {pycontrails-0.50.1 → pycontrails-0.50.2}/README.md +0 -0
  43. {pycontrails-0.50.1 → pycontrails-0.50.2}/RELEASE.md +0 -0
  44. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/_static/css/style.css +0 -0
  45. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/_static/img/colab.png +0 -0
  46. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/_static/img/favicon.png +0 -0
  47. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/_static/img/logo-dark.png +0 -0
  48. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/_static/img/logo.png +0 -0
  49. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/_static/pycontrails.bib +0 -0
  50. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/api.rst +0 -0
  51. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/changelog.rst +0 -0
  52. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/conf.py +0 -0
  53. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/contributing.rst +0 -0
  54. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/develop.rst +0 -0
  55. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/flight.rst +0 -0
  56. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/index.rst +0 -0
  57. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/install.rst +0 -0
  58. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/integrations/ACCF.ipynb +0 -0
  59. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/literature.rst +0 -0
  60. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/meteorology.rst +0 -0
  61. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/models.rst +0 -0
  62. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/ARCO-ERA5.ipynb +0 -0
  63. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/AircraftPerformance.ipynb +0 -0
  64. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/Cache.ipynb +0 -0
  65. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/CoCiP.ipynb +0 -0
  66. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/ECMWF.ipynb +0 -0
  67. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/Flight.ipynb +0 -0
  68. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/GOES.ipynb +0 -0
  69. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/ISSR.ipynb +0 -0
  70. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/Meteorology.ipynb +0 -0
  71. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/SAC.ipynb +0 -0
  72. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/advection.ipynb +0 -0
  73. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/airports.ipynb +0 -0
  74. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/data/.gitignore +0 -0
  75. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/data/flight-ap.csv +0 -0
  76. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/data/flight-cocip.csv +0 -0
  77. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/data/flight-fdr.csv +0 -0
  78. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/data/flight-noisy.csv +0 -0
  79. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/data/flight.csv +0 -0
  80. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/flightplan.ipynb +0 -0
  81. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/model-levels.ipynb +0 -0
  82. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/run-cocip-on-flight.ipynb +0 -0
  83. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/run-cocip-with-fdr.ipynb +0 -0
  84. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/specific-humidity-interpolation.ipynb +0 -0
  85. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks.rst +0 -0
  86. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/observations.rst +0 -0
  87. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/tutorials.rst +0 -0
  88. {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/utilities.rst +0 -0
  89. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/__init__.py +0 -0
  90. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/__init__.py +0 -0
  91. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/aircraft_performance.py +0 -0
  92. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/airports.py +0 -0
  93. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/cache.py +0 -0
  94. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/coordinates.py +0 -0
  95. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/datalib.py +0 -0
  96. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/fleet.py +0 -0
  97. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/flightplan.py +0 -0
  98. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/fuel.py +0 -0
  99. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/interpolation.py +0 -0
  100. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/met.py +0 -0
  101. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/met_var.py +0 -0
  102. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/models.py +0 -0
  103. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/polygon.py +0 -0
  104. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/rgi_cython.pyx +0 -0
  105. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/vector.py +0 -0
  106. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/__init__.py +0 -0
  107. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/ecmwf/__init__.py +0 -0
  108. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/ecmwf/arco_era5.py +0 -0
  109. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/ecmwf/common.py +0 -0
  110. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/ecmwf/era5.py +0 -0
  111. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/ecmwf/hres.py +0 -0
  112. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/ecmwf/ifs.py +0 -0
  113. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/ecmwf/variables.py +0 -0
  114. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/gfs/__init__.py +0 -0
  115. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/gfs/gfs.py +0 -0
  116. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/gfs/variables.py +0 -0
  117. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/goes.py +0 -0
  118. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/spire/__init__.py +0 -0
  119. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/spire/spire.py +0 -0
  120. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/ext/bada.py +0 -0
  121. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/ext/cirium.py +0 -0
  122. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/ext/empirical_grid.py +0 -0
  123. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/ext/synthetic_flight.py +0 -0
  124. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/__init__.py +0 -0
  125. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/accf.py +0 -0
  126. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/__init__.py +0 -0
  127. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/cocip.py +0 -0
  128. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/cocip_params.py +0 -0
  129. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/cocip_uncertainty.py +0 -0
  130. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/contrail_properties.py +0 -0
  131. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/output_formats.py +0 -0
  132. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/radiative_forcing.py +0 -0
  133. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/radiative_heating.py +0 -0
  134. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/unterstrasser_wake_vortex.py +0 -0
  135. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/wake_vortex.py +0 -0
  136. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/wind_shear.py +0 -0
  137. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocipgrid/__init__.py +0 -0
  138. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocipgrid/cocip_grid.py +0 -0
  139. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocipgrid/cocip_grid_params.py +0 -0
  140. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/dry_advection.py +0 -0
  141. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/emissions/__init__.py +0 -0
  142. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/emissions/black_carbon.py +0 -0
  143. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/emissions/ffm2.py +0 -0
  144. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/humidity_scaling/__init__.py +0 -0
  145. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/humidity_scaling/humidity_scaling.py +0 -0
  146. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/humidity_scaling/quantiles/era5-quantiles.pq +0 -0
  147. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/issr.py +0 -0
  148. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/pcc.py +0 -0
  149. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/pcr.py +0 -0
  150. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/ps_model/__init__.py +0 -0
  151. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/sac.py +0 -0
  152. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/tau_cirrus.py +0 -0
  153. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/physics/__init__.py +0 -0
  154. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/physics/constants.py +0 -0
  155. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/physics/geo.py +0 -0
  156. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/physics/jet.py +0 -0
  157. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/physics/thermo.py +0 -0
  158. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/py.typed +0 -0
  159. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/utils/__init__.py +0 -0
  160. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/utils/dependencies.py +0 -0
  161. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/utils/iteration.py +0 -0
  162. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/utils/json.py +0 -0
  163. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/utils/temp.py +0 -0
  164. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails.egg-info/dependency_links.txt +0 -0
  165. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails.egg-info/requires.txt +0 -0
  166. {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails.egg-info/top_level.txt +0 -0
  167. {pycontrails-0.50.1 → pycontrails-0.50.2}/pyproject.toml +0 -0
  168. {pycontrails-0.50.1 → pycontrails-0.50.2}/setup.cfg +0 -0
  169. {pycontrails-0.50.1 → pycontrails-0.50.2}/setup.py +0 -0
  170. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/__init__.py +0 -0
  171. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/_deprecated.py +0 -0
  172. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip/Makefile +0 -0
  173. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip/README.md +0 -0
  174. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip/benchmark.py +0 -0
  175. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip/compare.py +0 -0
  176. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip/data.md +0 -0
  177. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip/output.py +0 -0
  178. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip/review.ipynb +0 -0
  179. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip-fortran/README.md +0 -0
  180. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/north-atlantic-study/.gcloudignore +0 -0
  181. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/north-atlantic-study/README.md +0 -0
  182. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/north-atlantic-study/support.py +0 -0
  183. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/north-atlantic-study/validate.py +0 -0
  184. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/fixtures/cocip-met.py +0 -0
  185. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/fixtures/cocip-met2.py +0 -0
  186. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/fixtures/ecmwf-met.py +0 -0
  187. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/fixtures/gfs-met.py +0 -0
  188. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/__init__.py +0 -0
  189. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/conftest.py +0 -0
  190. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/NOAA_Solar_Calculations_day.csv +0 -0
  191. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/cocip-contrail-output.json +0 -0
  192. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/cocip-contrail-output2.json +0 -0
  193. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/cocip-flight-output.json +0 -0
  194. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/cocip-flight-output2.json +0 -0
  195. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/cocip-output-contrail-edges.json +0 -0
  196. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/cocip-output-flts-20190101-eu.pq +0 -0
  197. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/flight-cocip2.csv +0 -0
  198. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/flight-meridian.csv +0 -0
  199. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/flight-metadata.json +0 -0
  200. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/flight-spire-data-cleaning.pq +0 -0
  201. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/flight.csv +0 -0
  202. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/flt-wypts-20190101-eu.pq +0 -0
  203. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-20190101-eu.nc +0 -0
  204. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-accf-pl.nc +0 -0
  205. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-accf-sl.nc +0 -0
  206. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-ecmwf-pl.nc +0 -0
  207. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-ecmwf-sl.nc +0 -0
  208. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-era5-cocip1.nc +0 -0
  209. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-era5-cocip2.nc +0 -0
  210. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-gfs.nc +0 -0
  211. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/polygon-bug.nc +0 -0
  212. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/rad-20190101-eu.nc +0 -0
  213. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/rad-era5-cocip1.nc +0 -0
  214. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/rad-era5-cocip2.nc +0 -0
  215. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/rad-gfs.nc +0 -0
  216. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_accf.py +0 -0
  217. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_airports.py +0 -0
  218. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_cache.py +0 -0
  219. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_cocip.py +0 -0
  220. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_cocip_grid_parity.py +0 -0
  221. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_cocip_radiative_forcing.py +0 -0
  222. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_cocip_uncertainty.py +0 -0
  223. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_coordinates.py +0 -0
  224. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_datalib.py +0 -0
  225. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_dry_advection.py +0 -0
  226. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_dtypes.py +0 -0
  227. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_ecmwf.py +0 -0
  228. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_fleet.py +0 -0
  229. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_flightplan.py +0 -0
  230. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_fuel.py +0 -0
  231. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_geo.py +0 -0
  232. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_gfs.py +0 -0
  233. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_goes.py +0 -0
  234. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_grid_to_netcdf.py +0 -0
  235. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_humidity_scaling.py +0 -0
  236. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_init.py +0 -0
  237. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_interpolation.py +0 -0
  238. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_met.py +0 -0
  239. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_met_cache.py +0 -0
  240. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_models.py +0 -0
  241. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_pcc.py +0 -0
  242. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_polygons.py +0 -0
  243. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_sac_issr.py +0 -0
  244. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_spire.py +0 -0
  245. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_tau_cirrus.py +0 -0
  246. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_thermo_sac.py +0 -0
  247. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_units.py +0 -0
  248. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_unterstrasser_wake_vortex.py +0 -0
  249. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_utils.py +0 -0
  250. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_vector.py +0 -0
  251. {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_zarr.py +0 -0
@@ -1,6 +1,25 @@
1
1
 
2
2
  # Changelog
3
3
 
4
+ ## v0.50.2
5
+
6
+ ### Breaking changes
7
+
8
+ - Replaces engine-uid `01P10IA024` with `04P10IA027` (superseded in the IACO EDB).
9
+
10
+ ### Features
11
+
12
+ - Adds support for the `E190` aircraft type in the PS model
13
+ - Adds `Flight.distance_to_coords` which takes in a distance along a flight trajectory in meters and returns geodesic coordinates.
14
+ - Adds methods to `ps_operational_limits` to find the maximum and minimum mach numbers for a given set of operating conditions.
15
+ - Updates ICAO aircraft engine emissions databank (EDB) from v28c to v29b.
16
+
17
+ ### Internals
18
+
19
+ - New data for gaseous and nvPM emissions for PW812D, PW812GA, RR Trent 7000 with improved nvPM combustor
20
+ - Update nvPM emissions for IAE V2530-A5, PW1500G and PW1900G
21
+ - Update PS model coeffiencts to match the latest version provided by Ian Poll
22
+
4
23
  ## v0.50.1
5
24
 
6
25
  ### Breaking changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycontrails
3
- Version: 0.50.1
3
+ Version: 0.50.2
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
@@ -19,7 +19,7 @@
19
19
  "\n",
20
20
  "- [NOAA GFS](https://registry.opendata.aws/noaa-gfs-bdp-pds/) - AWS Open Data Registry\n",
21
21
  "- [NCEI GFS Documentation](https://www.ncei.noaa.gov/products/weather-climate-models/global-forecast)\n",
22
- "- [NOAA GFS Documentation](https://www.emc.ncep.noaa.gov/emc/pages/numerical_forecast_systems/gfs/documentation.php)\n",
22
+ "- [NOAA GFS Documentation](https://vlab.noaa.gov/web/gfs/documentation)\n",
23
23
  "- [Parameter definitions](https://www.nco.ncep.noaa.gov/pmb/products/gfs/)\n",
24
24
  " \n",
25
25
  "See [API Reference](https://py.contrails.org/api.html#gfs) for usage."
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.50.1'
16
- __version_tuple__ = version_tuple = (0, 50, 1)
15
+ __version__ = version = '0.50.2'
16
+ __version_tuple__ = version_tuple = (0, 50, 2)
@@ -17,6 +17,7 @@ from pycontrails.core.fuel import Fuel, JetA
17
17
  from pycontrails.core.vector import AttrDict, GeoVectorDataset, VectorDataDict, VectorDataset
18
18
  from pycontrails.physics import constants, geo, units
19
19
  from pycontrails.utils import dependencies
20
+ from pycontrails.utils.types import ArrayOrFloat
20
21
 
21
22
  logger = logging.getLogger(__name__)
22
23
 
@@ -1112,6 +1113,102 @@ class Flight(GeoVectorDataset):
1112
1113
  out.data.pop("level", None) # avoid any ambiguity
1113
1114
  return out
1114
1115
 
1116
+ def distance_to_coords(self: Flight, distance: ArrayOrFloat) -> tuple[
1117
+ ArrayOrFloat,
1118
+ ArrayOrFloat,
1119
+ np.intp | npt.NDArray[np.intp],
1120
+ ]:
1121
+ """
1122
+ Convert distance along flight path to geodesic coordinates.
1123
+
1124
+ Will return a tuple containing `(lat, lon, index)`, where index indicates which flight
1125
+ segment contains the returned coordinate.
1126
+
1127
+ Parameters
1128
+ ----------
1129
+ distance : ArrayOrFloat
1130
+ Distance along flight path, [:math:`m`]
1131
+
1132
+ Returns
1133
+ -------
1134
+ (ArrayOrFloat, ArrayOrFloat, int | npt.NDArray[int])
1135
+ latitude, longitude, and segment index cooresponding to distance.
1136
+ """
1137
+
1138
+ # Check if flight crosses antimeridian line
1139
+ lon_ = self["longitude"]
1140
+ lat_ = self["latitude"]
1141
+ sign_ = np.sign(lon_)
1142
+ min_pos = np.min(lon_[sign_ == 1.0], initial=np.inf)
1143
+ max_neg = np.max(lon_[sign_ == -1.0], initial=-np.inf)
1144
+
1145
+ if (180.0 - min_pos) + (180.0 + max_neg) < 180.0 and min_pos < np.inf and max_neg > -np.inf:
1146
+ # In this case, we believe the flight crosses the antimeridian
1147
+ shift = min_pos
1148
+ # So we shift the longitude "chart"
1149
+ lon_ = (lon_ - shift) % 360.0
1150
+ else:
1151
+ shift = None
1152
+
1153
+ # Make a fake flight that flies at constant height so distance is just
1154
+ # distance traveled across groud
1155
+ flat_dataset = Flight(
1156
+ longitude=self.coords["longitude"],
1157
+ latitude=self.coords["latitude"],
1158
+ time=self.coords["time"],
1159
+ level=[self.coords["level"][0] for _ in range(self.size)],
1160
+ )
1161
+
1162
+ lengths = flat_dataset.segment_length()
1163
+ cumulative_lengths = np.nancumsum(lengths)
1164
+ cumulative_lengths = np.insert(cumulative_lengths[:-1], 0, 0)
1165
+ seg_idx: np.intp | npt.NDArray[np.intp]
1166
+
1167
+ if isinstance(distance, float):
1168
+ seg_idx = np.argmax(cumulative_lengths > distance)
1169
+ else:
1170
+ seg_idx = np.argmax(cumulative_lengths > distance.reshape((distance.size, 1)), axis=1)
1171
+
1172
+ # If in the last segment (which has length 0), then just return the last waypoint
1173
+ seg_idx -= 1
1174
+
1175
+ # linear interpolation in lat/lon - assuming the way points are within 100-200km so this
1176
+ # should be accurate enough without needed to reproject or use spherical distance
1177
+ lat1: ArrayOrFloat = lat_[seg_idx]
1178
+ lon1: ArrayOrFloat = lon_[seg_idx]
1179
+ lat2: ArrayOrFloat = lat_[seg_idx + 1]
1180
+ lon2: ArrayOrFloat = lon_[seg_idx + 1]
1181
+
1182
+ dx = distance - cumulative_lengths[seg_idx]
1183
+ fx = dx / lengths[seg_idx]
1184
+ lat = (1 - fx) * lat1 + fx * lat2
1185
+ lon = (1 - fx) * lon1 + fx * lon2
1186
+
1187
+ if isinstance(distance, float):
1188
+ if distance < 0:
1189
+ lat = np.nan
1190
+ lon = np.nan
1191
+ seg_idx = np.intp(0)
1192
+ elif distance >= cumulative_lengths[-1]:
1193
+ lat = lat_[-1]
1194
+ lon = lon_[-1]
1195
+ seg_idx = np.intp(self.size - 1)
1196
+ else:
1197
+ lat[distance < 0] = np.nan
1198
+ lon[distance < 0] = np.nan
1199
+ seg_idx[distance < 0] = 0 # type: ignore
1200
+
1201
+ lat[distance >= cumulative_lengths[-1]] = lat_[-1]
1202
+ lon[distance >= cumulative_lengths[-1]] = lon_[-1]
1203
+ seg_idx[distance >= cumulative_lengths[-1]] = self.size - 1 # type: ignore
1204
+
1205
+ if shift is not None:
1206
+ # We need to translate back to the original chart here
1207
+ lon += shift
1208
+ lon = ((lon + 180.0) % 360.0) - 180.0
1209
+
1210
+ return lat, lon, seg_idx
1211
+
1115
1212
  def _geodesic_interpolation(self, geodesic_threshold: float) -> pd.DataFrame | None:
1116
1213
  """Geodesic interpolate between large gaps between waypoints.
1117
1214