pycontrails 0.52.0__tar.gz → 0.52.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 (272) hide show
  1. {pycontrails-0.52.0 → pycontrails-0.52.2}/.github/workflows/scorecard.yaml +1 -1
  2. {pycontrails-0.52.0 → pycontrails-0.52.2}/.pre-commit-config.yaml +1 -1
  3. {pycontrails-0.52.0 → pycontrails-0.52.2}/CHANGELOG.md +47 -2
  4. {pycontrails-0.52.0 → pycontrails-0.52.2}/Makefile +8 -1
  5. {pycontrails-0.52.0/pycontrails.egg-info → pycontrails-0.52.2}/PKG-INFO +21 -10
  6. {pycontrails-0.52.0 → pycontrails-0.52.2}/README.md +16 -4
  7. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/index.rst +10 -2
  8. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/install.rst +16 -9
  9. pycontrails-0.52.2/docs/notebooks/AircraftPerformance.ipynb +256 -0
  10. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/_version.py +2 -2
  11. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/aircraft_performance.py +115 -19
  12. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/coordinates.py +5 -5
  13. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/fleet.py +11 -10
  14. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/flight.py +100 -59
  15. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/interpolation.py +2 -2
  16. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/met.py +23 -14
  17. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/models.py +25 -16
  18. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/polygon.py +1 -1
  19. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/rgi_cython.c +155 -155
  20. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/vector.py +26 -29
  21. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/_met_utils/metsource.py +0 -4
  22. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/goes.py +10 -3
  23. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/cocip/cocip.py +20 -26
  24. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/cocip/cocip_uncertainty.py +9 -9
  25. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/cocip/output_formats.py +14 -6
  26. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv +1 -1
  27. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/physics/geo.py +1 -1
  28. {pycontrails-0.52.0 → pycontrails-0.52.2/pycontrails.egg-info}/PKG-INFO +21 -10
  29. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails.egg-info/requires.txt +4 -5
  30. {pycontrails-0.52.0 → pycontrails-0.52.2}/pyproject.toml +6 -7
  31. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/conftest.py +13 -0
  32. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_airports.py +4 -4
  33. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_cocip.py +5 -0
  34. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_ecmwf.py +8 -2
  35. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_fleet.py +7 -1
  36. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_flight.py +156 -1
  37. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_leo.py +16 -10
  38. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_met.py +24 -0
  39. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_models.py +13 -12
  40. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_ps_model.py +45 -1
  41. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_sac_issr.py +10 -1
  42. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_vector.py +2 -2
  43. pycontrails-0.52.0/docs/notebooks/AircraftPerformance.ipynb +0 -281
  44. {pycontrails-0.52.0 → pycontrails-0.52.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  45. {pycontrails-0.52.0 → pycontrails-0.52.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  46. {pycontrails-0.52.0 → pycontrails-0.52.2}/.github/dependabot.yaml +0 -0
  47. {pycontrails-0.52.0 → pycontrails-0.52.2}/.github/pull_request_template.md +0 -0
  48. {pycontrails-0.52.0 → pycontrails-0.52.2}/.github/workflows/docs.yaml +0 -0
  49. {pycontrails-0.52.0 → pycontrails-0.52.2}/.github/workflows/doctest.yaml +0 -0
  50. {pycontrails-0.52.0 → pycontrails-0.52.2}/.github/workflows/release.yaml +0 -0
  51. {pycontrails-0.52.0 → pycontrails-0.52.2}/.github/workflows/test.yaml +0 -0
  52. {pycontrails-0.52.0 → pycontrails-0.52.2}/.gitignore +0 -0
  53. {pycontrails-0.52.0 → pycontrails-0.52.2}/.zenodo.json +0 -0
  54. {pycontrails-0.52.0 → pycontrails-0.52.2}/CONTRIBUTING.md +0 -0
  55. {pycontrails-0.52.0 → pycontrails-0.52.2}/LICENSE +0 -0
  56. {pycontrails-0.52.0 → pycontrails-0.52.2}/NOTICE +0 -0
  57. {pycontrails-0.52.0 → pycontrails-0.52.2}/RELEASE.md +0 -0
  58. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/_static/css/style.css +0 -0
  59. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/_static/img/colab.png +0 -0
  60. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/_static/img/favicon.png +0 -0
  61. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/_static/img/logo-dark.png +0 -0
  62. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/_static/img/logo.png +0 -0
  63. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/_static/pycontrails.bib +0 -0
  64. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/api.rst +0 -0
  65. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/changelog.rst +0 -0
  66. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/conf.py +0 -0
  67. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/contributing.rst +0 -0
  68. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/develop.rst +0 -0
  69. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/flight.rst +0 -0
  70. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/integrations/ACCF.ipynb +0 -0
  71. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/integrations/APCEMM.ipynb +0 -0
  72. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/literature.rst +0 -0
  73. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/meteorology.rst +0 -0
  74. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/models.rst +0 -0
  75. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/ARCO-ERA5.ipynb +0 -0
  76. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/Cache.ipynb +0 -0
  77. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/CoCiP.ipynb +0 -0
  78. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/ECMWF.ipynb +0 -0
  79. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/Flight.ipynb +0 -0
  80. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/GFS.ipynb +0 -0
  81. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/GOES.ipynb +0 -0
  82. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/ISSR.ipynb +0 -0
  83. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/Landsat.ipynb +0 -0
  84. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/Meteorology.ipynb +0 -0
  85. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/SAC.ipynb +0 -0
  86. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/Sentinel.ipynb +0 -0
  87. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/advection.ipynb +0 -0
  88. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/airports.ipynb +0 -0
  89. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/data/.gitignore +0 -0
  90. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/data/flight-ap.csv +0 -0
  91. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/data/flight-cocip.csv +0 -0
  92. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/data/flight-fdr.csv +0 -0
  93. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/data/flight-noisy.csv +0 -0
  94. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/data/flight.csv +0 -0
  95. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/data/iagos-flight-landsat.csv +0 -0
  96. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/data/iagos-flight-sentinel.csv +0 -0
  97. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/flightplan.ipynb +0 -0
  98. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/model-levels.ipynb +0 -0
  99. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/run-cocip-on-flight.ipynb +0 -0
  100. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/run-cocip-with-fdr.ipynb +0 -0
  101. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks/specific-humidity-interpolation.ipynb +0 -0
  102. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/notebooks.rst +0 -0
  103. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/observations.rst +0 -0
  104. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/tutorials.rst +0 -0
  105. {pycontrails-0.52.0 → pycontrails-0.52.2}/docs/utilities.rst +0 -0
  106. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/__init__.py +0 -0
  107. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/__init__.py +0 -0
  108. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/airports.py +0 -0
  109. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/cache.py +0 -0
  110. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/flightplan.py +0 -0
  111. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/fuel.py +0 -0
  112. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/met_var.py +0 -0
  113. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/core/rgi_cython.pyx +0 -0
  114. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/__init__.py +0 -0
  115. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/_leo_utils/search.py +0 -0
  116. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/_leo_utils/static/bq_roi_query.sql +0 -0
  117. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/_leo_utils/vis.py +0 -0
  118. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/ecmwf/__init__.py +0 -0
  119. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/ecmwf/arco_era5.py +0 -0
  120. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/ecmwf/common.py +0 -0
  121. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/ecmwf/era5.py +0 -0
  122. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/ecmwf/era5_model_level.py +0 -0
  123. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/ecmwf/hres.py +0 -0
  124. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/ecmwf/hres_model_level.py +0 -0
  125. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/ecmwf/ifs.py +0 -0
  126. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/ecmwf/model_levels.py +0 -0
  127. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv +0 -0
  128. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/ecmwf/variables.py +0 -0
  129. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/gfs/__init__.py +0 -0
  130. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/gfs/gfs.py +0 -0
  131. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/gfs/variables.py +0 -0
  132. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/landsat.py +0 -0
  133. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/sentinel.py +0 -0
  134. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/datalib/spire.py +0 -0
  135. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/ext/bada.py +0 -0
  136. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/ext/cirium.py +0 -0
  137. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/ext/empirical_grid.py +0 -0
  138. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/ext/synthetic_flight.py +0 -0
  139. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/__init__.py +0 -0
  140. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/accf.py +0 -0
  141. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/apcemm/__init__.py +0 -0
  142. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/apcemm/apcemm.py +0 -0
  143. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/apcemm/inputs.py +0 -0
  144. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/apcemm/static/apcemm_yaml_template.yaml +0 -0
  145. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/apcemm/utils.py +0 -0
  146. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/cocip/__init__.py +0 -0
  147. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/cocip/cocip_params.py +0 -0
  148. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/cocip/contrail_properties.py +0 -0
  149. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/cocip/radiative_forcing.py +0 -0
  150. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/cocip/radiative_heating.py +0 -0
  151. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/cocip/unterstrasser_wake_vortex.py +0 -0
  152. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/cocip/wake_vortex.py +0 -0
  153. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/cocip/wind_shear.py +0 -0
  154. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/cocipgrid/__init__.py +0 -0
  155. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/cocipgrid/cocip_grid.py +0 -0
  156. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/cocipgrid/cocip_grid_params.py +0 -0
  157. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/dry_advection.py +0 -0
  158. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/emissions/__init__.py +0 -0
  159. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/emissions/black_carbon.py +0 -0
  160. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/emissions/emissions.py +0 -0
  161. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/emissions/ffm2.py +0 -0
  162. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/emissions/static/default-engine-uids.csv +0 -0
  163. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv +0 -0
  164. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/humidity_scaling/__init__.py +0 -0
  165. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/humidity_scaling/humidity_scaling.py +0 -0
  166. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq +0 -0
  167. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq +0 -0
  168. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/issr.py +0 -0
  169. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/pcc.py +0 -0
  170. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/pcr.py +0 -0
  171. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/ps_model/__init__.py +0 -0
  172. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/ps_model/ps_aircraft_params.py +0 -0
  173. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/ps_model/ps_grid.py +0 -0
  174. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/ps_model/ps_model.py +0 -0
  175. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/ps_model/ps_operational_limits.py +0 -0
  176. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/ps_model/static/ps-aircraft-params-20240524.csv +0 -0
  177. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/ps_model/static/ps-synonym-list-20240524.csv +0 -0
  178. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/sac.py +0 -0
  179. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/models/tau_cirrus.py +0 -0
  180. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/physics/__init__.py +0 -0
  181. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/physics/constants.py +0 -0
  182. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/physics/jet.py +0 -0
  183. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/physics/thermo.py +0 -0
  184. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/physics/units.py +0 -0
  185. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/py.typed +0 -0
  186. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/utils/__init__.py +0 -0
  187. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/utils/dependencies.py +0 -0
  188. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/utils/iteration.py +0 -0
  189. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/utils/json.py +0 -0
  190. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/utils/temp.py +0 -0
  191. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails/utils/types.py +0 -0
  192. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails.egg-info/SOURCES.txt +0 -0
  193. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails.egg-info/dependency_links.txt +0 -0
  194. {pycontrails-0.52.0 → pycontrails-0.52.2}/pycontrails.egg-info/top_level.txt +0 -0
  195. {pycontrails-0.52.0 → pycontrails-0.52.2}/setup.cfg +0 -0
  196. {pycontrails-0.52.0 → pycontrails-0.52.2}/setup.py +0 -0
  197. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/__init__.py +0 -0
  198. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/_deprecated.py +0 -0
  199. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/benchmark/cocip/Makefile +0 -0
  200. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/benchmark/cocip/README.md +0 -0
  201. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/benchmark/cocip/benchmark.py +0 -0
  202. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/benchmark/cocip/compare.py +0 -0
  203. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/benchmark/cocip/data.md +0 -0
  204. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/benchmark/cocip/output.py +0 -0
  205. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/benchmark/cocip/review.ipynb +0 -0
  206. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/benchmark/cocip-fortran/README.md +0 -0
  207. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/benchmark/north-atlantic-study/.gcloudignore +0 -0
  208. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/benchmark/north-atlantic-study/README.md +0 -0
  209. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/benchmark/north-atlantic-study/support.py +0 -0
  210. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/benchmark/north-atlantic-study/validate.py +0 -0
  211. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/fixtures/cocip-met.py +0 -0
  212. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/fixtures/cocip-met2.py +0 -0
  213. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/fixtures/ecmwf-met.py +0 -0
  214. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/fixtures/gfs-met.py +0 -0
  215. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/__init__.py +0 -0
  216. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/NOAA_Solar_Calculations_day.csv +0 -0
  217. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/cocip-contrail-output.json +0 -0
  218. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/cocip-contrail-output2.json +0 -0
  219. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/cocip-flight-output.json +0 -0
  220. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/cocip-flight-output2.json +0 -0
  221. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/cocip-output-contrail-edges.json +0 -0
  222. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/cocip-output-flts-20190101-eu.pq +0 -0
  223. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/flight-cocip2.csv +0 -0
  224. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/flight-meridian.csv +0 -0
  225. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/flight-metadata.json +0 -0
  226. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/flight-spire-data-cleaning.pq +0 -0
  227. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/flight.csv +0 -0
  228. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/flt-wypts-20190101-eu.pq +0 -0
  229. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/met-20190101-eu.nc +0 -0
  230. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/met-accf-pl.nc +0 -0
  231. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/met-accf-sl.nc +0 -0
  232. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/met-ecmwf-pl.nc +0 -0
  233. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/met-ecmwf-sl.nc +0 -0
  234. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/met-era5-cocip1.nc +0 -0
  235. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/met-era5-cocip2.nc +0 -0
  236. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/met-gfs.nc +0 -0
  237. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/polygon-bug.nc +0 -0
  238. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/rad-20190101-eu.nc +0 -0
  239. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/rad-era5-cocip1.nc +0 -0
  240. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/rad-era5-cocip2.nc +0 -0
  241. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/static/rad-gfs.nc +0 -0
  242. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_accf.py +0 -0
  243. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_apcemm.py +0 -0
  244. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_cache.py +0 -0
  245. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_cocip_grid.py +0 -0
  246. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_cocip_grid_parity.py +0 -0
  247. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_cocip_radiative_forcing.py +0 -0
  248. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_cocip_uncertainty.py +0 -0
  249. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_coordinates.py +0 -0
  250. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_datalib_metsource.py +0 -0
  251. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_dry_advection.py +0 -0
  252. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_dtypes.py +0 -0
  253. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_emissions.py +0 -0
  254. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_flightplan.py +0 -0
  255. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_fuel.py +0 -0
  256. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_geo.py +0 -0
  257. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_gfs.py +0 -0
  258. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_goes.py +0 -0
  259. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_grid_to_netcdf.py +0 -0
  260. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_humidity_scaling.py +0 -0
  261. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_init.py +0 -0
  262. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_interpolation.py +0 -0
  263. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_met_cache.py +0 -0
  264. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_pcc.py +0 -0
  265. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_polygons.py +0 -0
  266. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_spire.py +0 -0
  267. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_tau_cirrus.py +0 -0
  268. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_thermo_sac.py +0 -0
  269. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_units.py +0 -0
  270. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_unterstrasser_wake_vortex.py +0 -0
  271. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_utils.py +0 -0
  272. {pycontrails-0.52.0 → pycontrails-0.52.2}/tests/unit/test_zarr.py +0 -0
@@ -30,7 +30,7 @@ jobs:
30
30
  - uses: actions/checkout@v4
31
31
 
32
32
  - name: Run OpenSSF Security Scorecard
33
- uses: ossf/scorecard-action@v2.3.3
33
+ uses: ossf/scorecard-action@v2.4.0
34
34
  with:
35
35
  results_file: results.sarif
36
36
  results_format: sarif
@@ -5,7 +5,7 @@ repos:
5
5
  name: ruff
6
6
  language_version: python3
7
7
  language: python
8
- entry: ruff
8
+ entry: ruff check
9
9
  args: [--fix, --exit-non-zero-on-fix]
10
10
  types: [python]
11
11
  - id: doc8
@@ -1,5 +1,50 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.52.2
4
+
5
+ ### Breaking changes
6
+
7
+ - Flight antimeridian crossings are now detected based on individual flight segments rather than minimum and maximum longitude values. This allows for correct detection of antimeridian crossings for flights that span more than 180 degrees longitude, and may change the output of `Flight.resample_and_fill` for such flights.
8
+
9
+ ### Features
10
+
11
+ - Add experimental `fill_low_alt_with_isa_temperature` parameter on the `AircraftPerformance` base class. When set to `True`, aircraft performance models with `Flight` sources will fill points below the lowest altitude in the ``met["air_temperature]`` data with the ISA temperature. This is useful when the met data does not extend to the surface. In this case, we can still estimate fuel flow and other performance metrics through the entire climb phase. By default, this parameter is set to `False`.
12
+ - Add experimental `fill_low_altitude_with_zero_wind` parameter on the `AircraftPerformance` base class. When set to `True`, aircraft performance models will estimate the true airspeed at low altitudes by assuming the wind speed is zero.
13
+ - Add convenience `Flight.plot_profile` method.
14
+
15
+ ### Fixes
16
+
17
+ - Fix missing `Fuel Flow Idle (kg/sec)` value in the `1ZM001` engine in the `edb-gaseous-v29b-engines.csv`.
18
+ - Fix the `step_threshold` in `Flight._altitude_interpolation`. This correction is only relevant when passing in a non-default value for `freq` in `Flight.resample_and_fill`.
19
+ - Fix the `VectorDataset.__eq__` method to check for the same keys. Previously, if the other dataset had a superset of the instance keys, the method may still return `True`.
20
+ - Fix minor bug in `cocip.output_formats.radiation_time_slice_statistics` in which the function previously threw an error if `t_end` did not directly align with the time index in the `rad` dataset.
21
+ - Remove the residual constraint in `cocip.output_formats.contrails_to_hi_res_grid` used during debugging.
22
+ - Improve detection of antimeridian crossings for flights that span more than 180 degrees longitude.
23
+
24
+ ### Internals
25
+
26
+ - Improve the runtime performance of `Fleet.to_flight_list`. For a large `Fleet`, this method is now 5x faster.
27
+ - Improve the runtime performance and memory footprint of `Cocip._bundle_results`. When running `Cocip` with a large `Fleet` source, `Cocip.eval` is now slightly faster and uses much less memory.
28
+
29
+ ## v0.52.1
30
+
31
+ ### Breaking changes
32
+
33
+ - Remove `lock=False` as a default keyword argument to `xr.open_mfdataset` in the `MetDataSource.open_dataset` method. This reverts a change from [v0.44.1](https://github.com/contrailcirrus/pycontrails/releases/tag/v0.44.1) and prevents segmentation faults when using recent versions of [netCDF4](https://pypi.org/project/netCDF4/) (1.7.0 and above).
34
+ - GOES imagery is now loaded from a temporary file on disk rather than directly from memory when using `GOES.get` without a cachestore.
35
+
36
+ ### Internals
37
+
38
+ - Remove upper limits on netCDF4 and numpy versions.
39
+ - Remove h5netcdf dependency.
40
+ - Update doctests with numpy 2 scalar representation (see [NEP 51](https://numpy.org/neps/nep-0051-scalar-representation.html)). Doctests will now fail when run with numpy 1.
41
+ - Run certain tests in `test_ecmwf.py` and `test_met.py` using the single-threaded dask scheduler to prevent tests from hanging while waiting for a lock that is never released. (This issue was [encountered previously](https://github.com/contrailcirrus/pycontrails/pull/68), and removing `lock=False` in `MetDataSource.open_dataset` reverts the fix.)
42
+ - Document pycontrails installation from conda-forge.
43
+
44
+ ### Fixes
45
+
46
+ - Ensure the `MetDataset` vertical coordinates `"air_pressure"` and `"altitude"` have the correct dtype.
47
+
3
48
  ## v0.52.0
4
49
 
5
50
  ### Breaking changes
@@ -138,7 +183,7 @@ The Unterstrasser (2016) parameterization can be used in CoCiP by setting a new
138
183
  - Update flight resampling logic to align with expected behavior for very short flights, which is now detailed in the `Flight.resample_and_fill` docstring.
139
184
 
140
185
  ### Internals
141
-
186
+
142
187
  - Adds a parameter to `CoCipParams`, `unterstrasser_ice_survival_fraction`, that activates the Unterstrasser (2016) survival parameterization when set to `True`. This is disabled by default, and only implemented for `CoCiP`. `CoCiPGrid` will produce an error if run with `unterstrasser_ice_surival_fraction=True`.
143
188
  - Modifies `CoCiPGrid` so that setting `compute_atr_20` (defined in `CoCipParams`) to `True` adds `global_yearly_mean_rf` and `atr20` to CoCiP-grid output.
144
189
  - Replaces `pycontrails.datalib.GOES` ash convention label "MIT" with "SEVIRI"
@@ -169,7 +214,7 @@ The Unterstrasser (2016) parameterization can be used in CoCiP by setting a new
169
214
  - Add new `MetDataSource.is_single_level` property.
170
215
  - Add `ecmwf.Divergence` (a subclass of `MetVariable`) for accessing ERA5 divergence data.
171
216
  - Update the [specific humidity interpolation notebook](https://py.contrails.org/notebooks/specific-humidity-interpolation.html) to use the new `ARCOERA5` interface.
172
- - Adds two parameters to `CoCipParams`, `compute_atr20` and `global_rf_to_atr20_factor`. Setting the former to `True` will add both `global_yearly_mean_rf` and `atr20` to the CoCiP output.
217
+ - Adds two parameters to `CoCipParams`, `compute_atr20` and `global_rf_to_atr20_factor`. Setting the former to `True` will add both `global_yearly_mean_rf` and `atr20` to the CoCiP output.
173
218
  - Bump minimum pytest version to 8.1 to avoid failures in release workflow.
174
219
 
175
220
  ## v0.49.5
@@ -133,6 +133,13 @@ main-test-status:
133
133
  DOCS_DIR = docs
134
134
  DOCS_BUILD_DIR = docs/_build
135
135
 
136
+ # Check that numpy 2 is being used
137
+ ensure-numpy-2:
138
+ [[ $$(python -c 'import numpy as np; print(np.__version__)') == 2.* ]] \
139
+ || ( \
140
+ echo -e "$(COLOR_YELLOW)NumPy 2 required for doctests$(END_COLOR)"; \
141
+ exit 1)
142
+
136
143
  # Check for GCP credentials
137
144
  ensure-gcp-credentials:
138
145
  python -c 'from google.cloud import storage; storage.Client()' \
@@ -163,7 +170,7 @@ ensure-era5-cached:
163
170
  cache-era5-gcp: ensure-era5-cached
164
171
  gcloud storage cp -r -n .doc-test-cache/* gs://contrails-301217-unit-test/doc-test-cache/
165
172
 
166
- doctest: ensure-era5-cached ensure-gcp-credentials
173
+ doctest: ensure-numpy-2 ensure-era5-cached ensure-gcp-credentials
167
174
  pytest --doctest-modules \
168
175
  --ignore-glob=pycontrails/ext/* \
169
176
  pycontrails -vv
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycontrails
3
- Version: 0.52.0
3
+ Version: 0.52.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
@@ -28,7 +28,7 @@ Description-Content-Type: text/markdown
28
28
  License-File: LICENSE
29
29
  License-File: NOTICE
30
30
  Requires-Dist: dask>=2022.3
31
- Requires-Dist: numpy<2.0.0,>=1.22
31
+ Requires-Dist: numpy>=1.22
32
32
  Requires-Dist: overrides>=6.1
33
33
  Requires-Dist: pandas>=2.2
34
34
  Requires-Dist: scipy>=1.10
@@ -36,7 +36,7 @@ Requires-Dist: xarray>=2022.3
36
36
  Provides-Extra: complete
37
37
  Requires-Dist: pycontrails[ecmwf,gcp,gfs,jupyter,pyproj,sat,vis,zarr]; extra == "complete"
38
38
  Provides-Extra: dev
39
- Requires-Dist: black[jupyter]==24.4.1; extra == "dev"
39
+ Requires-Dist: black[jupyter]==24.4.2; extra == "dev"
40
40
  Requires-Dist: dep_license; extra == "dev"
41
41
  Requires-Dist: fastparquet>=0.8; extra == "dev"
42
42
  Requires-Dist: ipdb>=0.13; extra == "dev"
@@ -50,7 +50,7 @@ Requires-Dist: pyarrow>=5.0; extra == "dev"
50
50
  Requires-Dist: pytest>=8.2; extra == "dev"
51
51
  Requires-Dist: pytest-cov>=2.11; extra == "dev"
52
52
  Requires-Dist: requests>=2.25; extra == "dev"
53
- Requires-Dist: ruff==0.4.1; extra == "dev"
53
+ Requires-Dist: ruff==0.5.3; extra == "dev"
54
54
  Requires-Dist: setuptools; extra == "dev"
55
55
  Provides-Extra: docs
56
56
  Requires-Dist: doc8>=1.1; extra == "docs"
@@ -70,7 +70,7 @@ Requires-Dist: cdsapi>=0.4; extra == "ecmwf"
70
70
  Requires-Dist: cfgrib>=0.9; extra == "ecmwf"
71
71
  Requires-Dist: eccodes>=1.4; extra == "ecmwf"
72
72
  Requires-Dist: ecmwf-api-client>=1.6; extra == "ecmwf"
73
- Requires-Dist: netcdf4<1.7.0,>=1.6.1; extra == "ecmwf"
73
+ Requires-Dist: netcdf4>=1.6.1; extra == "ecmwf"
74
74
  Requires-Dist: platformdirs>=3.0; extra == "ecmwf"
75
75
  Requires-Dist: requests>=2.25; extra == "ecmwf"
76
76
  Requires-Dist: lxml>=5.1.0; extra == "ecmwf"
@@ -94,7 +94,6 @@ Requires-Dist: gcsfs>=2022.3; extra == "sat"
94
94
  Requires-Dist: geojson>=3.1; extra == "sat"
95
95
  Requires-Dist: google-cloud-bigquery>=3.23; extra == "sat"
96
96
  Requires-Dist: google-cloud-bigquery-storage>=2.25; extra == "sat"
97
- Requires-Dist: h5netcdf>=1.2; extra == "sat"
98
97
  Requires-Dist: pillow>=10.3; extra == "sat"
99
98
  Requires-Dist: pyproj>=3.5; extra == "sat"
100
99
  Requires-Dist: rasterio>=1.3; extra == "sat"
@@ -121,9 +120,9 @@ Requires-Dist: zarr>=2.12; extra == "zarr"
121
120
 
122
121
  | | |
123
122
  |---------------|-------------------------------------------------------------------|
124
- | **Version** | [![PyPI version](https://img.shields.io/pypi/v/pycontrails.svg)](https://pypi.python.org/pypi/pycontrails) [![Supported python versions](https://img.shields.io/pypi/pyversions/pycontrails.svg)](https://pypi.python.org/pypi/pycontrails) |
123
+ | **Version** | [![PyPI version](https://img.shields.io/pypi/v/pycontrails.svg)](https://pypi.python.org/pypi/pycontrails) [![conda-forge version](https://anaconda.org/conda-forge/pycontrails/badges/version.svg)](https://anaconda.org/conda-forge/pycontrails) [![Supported python versions](https://img.shields.io/pypi/pyversions/pycontrails.svg)](https://pypi.python.org/pypi/pycontrails) |
125
124
  | **Citation** | [![DOI](https://zenodo.org/badge/617248930.svg)](https://zenodo.org/badge/latestdoi/617248930) |
126
- | **Tests** | [![Unit test](https://github.com/contrailcirrus/pycontrails/actions/workflows/test.yaml/badge.svg)](https://github.com/contrailcirrus/pycontrails/actions/workflows/test.yaml) [![Docs](https://github.com/contrailcirrus/pycontrails/actions/workflows/docs.yaml/badge.svg)](https://github.com/contrailcirrus/pycontrails/actions/workflows/docs.yaml) [![Release](https://github.com/contrailcirrus/pycontrails/actions/workflows/release.yaml/badge.svg)](https://github.com/contrailcirrus/pycontrails/actions/workflows/release.yaml) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/contrailcirrus/pycontrails/badge)](https://securityscorecards.dev/viewer?uri=github.com/contrailcirrus/pycontrails)|
125
+ | **Tests** | [![Unit test](https://github.com/contrailcirrus/pycontrails/actions/workflows/test.yaml/badge.svg)](https://github.com/contrailcirrus/pycontrails/actions/workflows/test.yaml) [![Docs](https://github.com/contrailcirrus/pycontrails/actions/workflows/docs.yaml/badge.svg?event=push)](https://github.com/contrailcirrus/pycontrails/actions/workflows/docs.yaml) [![Release](https://github.com/contrailcirrus/pycontrails/actions/workflows/release.yaml/badge.svg)](https://github.com/contrailcirrus/pycontrails/actions/workflows/release.yaml) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/contrailcirrus/pycontrails/badge)](https://securityscorecards.dev/viewer?uri=github.com/contrailcirrus/pycontrails)|
127
126
  | **License** | [![Apache License 2.0](https://img.shields.io/pypi/l/pycontrails.svg)](https://github.com/contrailcirrus/pycontrails/blob/main/LICENSE) |
128
127
  | **Community** | [![Github Discussions](https://img.shields.io/github/discussions/contrailcirrus/pycontrails)](https://github.com/contrailcirrus/pycontrails/discussions) [![Github Issues](https://img.shields.io/github/issues/contrailcirrus/pycontrails)](https://github.com/contrailcirrus/pycontrails/issues) [![Github PRs](https://img.shields.io/github/issues-pr/contrailcirrus/pycontrails)](https://github.com/contrailcirrus/pycontrails/pulls) |
129
128
 
@@ -140,7 +139,9 @@ Documentation and examples available at [py.contrails.org](https://py.contrails.
140
139
 
141
140
  ## Install
142
141
 
143
- Requires Python (3.9 or later)
142
+ ### Install with pip
143
+
144
+ You can install pycontrails from PyPI with `pip` (Python 3.9 or later required):
144
145
 
145
146
  ```bash
146
147
  $ pip install pycontrails
@@ -155,7 +156,17 @@ Install the latest development version directly from GitHub:
155
156
  pip install git+https://github.com/contrailcirrus/pycontrails.git
156
157
  ```
157
158
 
158
- See more options in the [install documentation](https://py.contrails.org/install).
159
+ ### Install with conda
160
+
161
+ You can install pycontrails from the [conda-forge](https://conda-forge.org/) channel with `conda` (or other `conda`-like package managers such as `mamba`):
162
+
163
+ ```bash
164
+ conda install -c conda-forge pycontrails
165
+ ```
166
+
167
+ The conda-forge package includes all optional runtime dependencies.
168
+
169
+ See more installation options in the [install documentation](https://py.contrails.org/install).
159
170
 
160
171
  ## Get Involved
161
172
 
@@ -4,9 +4,9 @@
4
4
 
5
5
  | | |
6
6
  |---------------|-------------------------------------------------------------------|
7
- | **Version** | [![PyPI version](https://img.shields.io/pypi/v/pycontrails.svg)](https://pypi.python.org/pypi/pycontrails) [![Supported python versions](https://img.shields.io/pypi/pyversions/pycontrails.svg)](https://pypi.python.org/pypi/pycontrails) |
7
+ | **Version** | [![PyPI version](https://img.shields.io/pypi/v/pycontrails.svg)](https://pypi.python.org/pypi/pycontrails) [![conda-forge version](https://anaconda.org/conda-forge/pycontrails/badges/version.svg)](https://anaconda.org/conda-forge/pycontrails) [![Supported python versions](https://img.shields.io/pypi/pyversions/pycontrails.svg)](https://pypi.python.org/pypi/pycontrails) |
8
8
  | **Citation** | [![DOI](https://zenodo.org/badge/617248930.svg)](https://zenodo.org/badge/latestdoi/617248930) |
9
- | **Tests** | [![Unit test](https://github.com/contrailcirrus/pycontrails/actions/workflows/test.yaml/badge.svg)](https://github.com/contrailcirrus/pycontrails/actions/workflows/test.yaml) [![Docs](https://github.com/contrailcirrus/pycontrails/actions/workflows/docs.yaml/badge.svg)](https://github.com/contrailcirrus/pycontrails/actions/workflows/docs.yaml) [![Release](https://github.com/contrailcirrus/pycontrails/actions/workflows/release.yaml/badge.svg)](https://github.com/contrailcirrus/pycontrails/actions/workflows/release.yaml) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/contrailcirrus/pycontrails/badge)](https://securityscorecards.dev/viewer?uri=github.com/contrailcirrus/pycontrails)|
9
+ | **Tests** | [![Unit test](https://github.com/contrailcirrus/pycontrails/actions/workflows/test.yaml/badge.svg)](https://github.com/contrailcirrus/pycontrails/actions/workflows/test.yaml) [![Docs](https://github.com/contrailcirrus/pycontrails/actions/workflows/docs.yaml/badge.svg?event=push)](https://github.com/contrailcirrus/pycontrails/actions/workflows/docs.yaml) [![Release](https://github.com/contrailcirrus/pycontrails/actions/workflows/release.yaml/badge.svg)](https://github.com/contrailcirrus/pycontrails/actions/workflows/release.yaml) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/contrailcirrus/pycontrails/badge)](https://securityscorecards.dev/viewer?uri=github.com/contrailcirrus/pycontrails)|
10
10
  | **License** | [![Apache License 2.0](https://img.shields.io/pypi/l/pycontrails.svg)](https://github.com/contrailcirrus/pycontrails/blob/main/LICENSE) |
11
11
  | **Community** | [![Github Discussions](https://img.shields.io/github/discussions/contrailcirrus/pycontrails)](https://github.com/contrailcirrus/pycontrails/discussions) [![Github Issues](https://img.shields.io/github/issues/contrailcirrus/pycontrails)](https://github.com/contrailcirrus/pycontrails/issues) [![Github PRs](https://img.shields.io/github/issues-pr/contrailcirrus/pycontrails)](https://github.com/contrailcirrus/pycontrails/pulls) |
12
12
 
@@ -23,7 +23,9 @@ Documentation and examples available at [py.contrails.org](https://py.contrails.
23
23
 
24
24
  ## Install
25
25
 
26
- Requires Python (3.9 or later)
26
+ ### Install with pip
27
+
28
+ You can install pycontrails from PyPI with `pip` (Python 3.9 or later required):
27
29
 
28
30
  ```bash
29
31
  $ pip install pycontrails
@@ -38,7 +40,17 @@ Install the latest development version directly from GitHub:
38
40
  pip install git+https://github.com/contrailcirrus/pycontrails.git
39
41
  ```
40
42
 
41
- See more options in the [install documentation](https://py.contrails.org/install).
43
+ ### Install with conda
44
+
45
+ You can install pycontrails from the [conda-forge](https://conda-forge.org/) channel with `conda` (or other `conda`-like package managers such as `mamba`):
46
+
47
+ ```bash
48
+ conda install -c conda-forge pycontrails
49
+ ```
50
+
51
+ The conda-forge package includes all optional runtime dependencies.
52
+
53
+ See more installation options in the [install documentation](https://py.contrails.org/install).
42
54
 
43
55
  ## Get Involved
44
56
 
@@ -11,11 +11,11 @@ Learn more on `contrails.org <https://contrails.org>`_.
11
11
  :header-rows: 0
12
12
 
13
13
  * - **Version**
14
- - |PyPI version| |Supported python versions|
14
+ - |PyPI version| |conda-forge version| |Supported python versions|
15
15
  * - **Citation**
16
16
  - |DOI|
17
17
  * - **Tests**
18
- - |Unit test| |Docs| |Release|
18
+ - |Unit test| |Docs| |Release| |OpenSSF scorecard|
19
19
  * - **License**
20
20
  - |Apache License 2.0|
21
21
  * - **Community**
@@ -80,6 +80,10 @@ Learn more on `contrails.org <https://contrails.org>`_.
80
80
  :alt: Supported python versions
81
81
  :target: https://pypi.python.org/pypi/pycontrails
82
82
 
83
+ .. |conda-forge version| image:: https://anaconda.org/conda-forge/pycontrails/badges/version.svg
84
+ :alt: conda-forge version
85
+ :target: https://anaconda.org/conda-forge/pycontrails
86
+
83
87
  .. |DOI| image:: https://zenodo.org/badge/617248930.svg
84
88
  :alt: DOI
85
89
  :target: https://zenodo.org/badge/latestdoi/617248930
@@ -96,6 +100,10 @@ Learn more on `contrails.org <https://contrails.org>`_.
96
100
  :alt: Release
97
101
  :target: https://github.com/contrailcirrus/pycontrails/actions/workflows/release.yaml
98
102
 
103
+ .. |OpenSSF scorecard| image:: https://api.securityscorecards.dev/projects/github.com/contrailcirrus/pycontrails/badge
104
+ :alt: OpenSSF scorecard
105
+ :target: https://securityscorecards.dev/viewer?uri=github.com/contrailcirrus/pycontrails
106
+
99
107
  .. |Apache License 2.0| image:: https://img.shields.io/pypi/l/pycontrails.svg
100
108
  :alt: Apache License 2.0
101
109
  :target: https://github.com/contrailcirrus/pycontrails/blob/main/LICENSE
@@ -2,15 +2,22 @@
2
2
  Install
3
3
  =======
4
4
 
5
- Requires
6
- --------
5
+ conda install
6
+ -------------
7
7
 
8
- - Python (3.9 or later)
8
+ Install the latest release from `conda-forge <https://conda-forge.org>`__ using ``conda``:
9
9
 
10
- Core
11
- ----
10
+ .. code-block:: bash
11
+
12
+ $ conda install -c conda-forge pycontrails
13
+
14
+
15
+ The conda-forge package includes all optional runtime dependencies.
16
+
17
+ pip install
18
+ -----------
12
19
 
13
- Install the latest release using ``pip``:
20
+ With Python 3.9 or later, install the latest release from PyPI using ``pip``:
14
21
 
15
22
  .. code-block:: bash
16
23
 
@@ -29,13 +36,13 @@ Install the latest development version directly from GitHub:
29
36
 
30
37
 
31
38
  Optional Dependencies
32
- ---------------------
39
+ ~~~~~~~~~~~~~~~~~~~~~
33
40
 
34
41
  The ``pycontrails`` package uses optional dependencies for specific features:
35
42
 
36
43
  .. code-block:: bash
37
44
 
38
- # install all non-development optional dependencies
45
+ # install all optional runtime dependencies
39
46
  $ pip install "pycontrails[complete]"
40
47
 
41
48
  # install specific optional dependencies
@@ -57,7 +64,7 @@ for the latest optional dependencies.
57
64
 
58
65
 
59
66
  Pre-built wheels
60
- -----------------
67
+ ~~~~~~~~~~~~~~~~
61
68
 
62
69
  Wheels for common platforms are available on `PyPI <https://pypi.org/project/pycontrails/>`__. Currently, wheels are available for:
63
70