pycontrails 0.52.0__tar.gz → 0.52.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 (271) hide show
  1. {pycontrails-0.52.0 → pycontrails-0.52.1}/.pre-commit-config.yaml +1 -1
  2. {pycontrails-0.52.0 → pycontrails-0.52.1}/CHANGELOG.md +19 -0
  3. {pycontrails-0.52.0 → pycontrails-0.52.1}/Makefile +8 -1
  4. {pycontrails-0.52.0/pycontrails.egg-info → pycontrails-0.52.1}/PKG-INFO +18 -7
  5. {pycontrails-0.52.0 → pycontrails-0.52.1}/README.md +15 -3
  6. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/index.rst +10 -2
  7. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/install.rst +16 -9
  8. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/_version.py +2 -2
  9. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/coordinates.py +5 -5
  10. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/flight.py +4 -4
  11. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/interpolation.py +2 -2
  12. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/met.py +23 -14
  13. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/polygon.py +1 -1
  14. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/rgi_cython.c +155 -155
  15. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/vector.py +1 -1
  16. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/_met_utils/metsource.py +0 -4
  17. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/goes.py +10 -3
  18. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/cocip/cocip_uncertainty.py +9 -9
  19. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/cocip/output_formats.py +3 -2
  20. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/physics/geo.py +1 -1
  21. {pycontrails-0.52.0 → pycontrails-0.52.1/pycontrails.egg-info}/PKG-INFO +18 -7
  22. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails.egg-info/requires.txt +2 -3
  23. {pycontrails-0.52.0 → pycontrails-0.52.1}/pyproject.toml +3 -4
  24. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/conftest.py +13 -0
  25. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_cocip.py +5 -0
  26. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_ecmwf.py +8 -2
  27. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_met.py +24 -0
  28. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_sac_issr.py +10 -1
  29. {pycontrails-0.52.0 → pycontrails-0.52.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  30. {pycontrails-0.52.0 → pycontrails-0.52.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  31. {pycontrails-0.52.0 → pycontrails-0.52.1}/.github/dependabot.yaml +0 -0
  32. {pycontrails-0.52.0 → pycontrails-0.52.1}/.github/pull_request_template.md +0 -0
  33. {pycontrails-0.52.0 → pycontrails-0.52.1}/.github/workflows/docs.yaml +0 -0
  34. {pycontrails-0.52.0 → pycontrails-0.52.1}/.github/workflows/doctest.yaml +0 -0
  35. {pycontrails-0.52.0 → pycontrails-0.52.1}/.github/workflows/release.yaml +0 -0
  36. {pycontrails-0.52.0 → pycontrails-0.52.1}/.github/workflows/scorecard.yaml +0 -0
  37. {pycontrails-0.52.0 → pycontrails-0.52.1}/.github/workflows/test.yaml +0 -0
  38. {pycontrails-0.52.0 → pycontrails-0.52.1}/.gitignore +0 -0
  39. {pycontrails-0.52.0 → pycontrails-0.52.1}/.zenodo.json +0 -0
  40. {pycontrails-0.52.0 → pycontrails-0.52.1}/CONTRIBUTING.md +0 -0
  41. {pycontrails-0.52.0 → pycontrails-0.52.1}/LICENSE +0 -0
  42. {pycontrails-0.52.0 → pycontrails-0.52.1}/NOTICE +0 -0
  43. {pycontrails-0.52.0 → pycontrails-0.52.1}/RELEASE.md +0 -0
  44. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/_static/css/style.css +0 -0
  45. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/_static/img/colab.png +0 -0
  46. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/_static/img/favicon.png +0 -0
  47. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/_static/img/logo-dark.png +0 -0
  48. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/_static/img/logo.png +0 -0
  49. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/_static/pycontrails.bib +0 -0
  50. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/api.rst +0 -0
  51. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/changelog.rst +0 -0
  52. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/conf.py +0 -0
  53. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/contributing.rst +0 -0
  54. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/develop.rst +0 -0
  55. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/flight.rst +0 -0
  56. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/integrations/ACCF.ipynb +0 -0
  57. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/integrations/APCEMM.ipynb +0 -0
  58. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/literature.rst +0 -0
  59. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/meteorology.rst +0 -0
  60. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/models.rst +0 -0
  61. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/ARCO-ERA5.ipynb +0 -0
  62. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/AircraftPerformance.ipynb +0 -0
  63. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/Cache.ipynb +0 -0
  64. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/CoCiP.ipynb +0 -0
  65. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/ECMWF.ipynb +0 -0
  66. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/Flight.ipynb +0 -0
  67. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/GFS.ipynb +0 -0
  68. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/GOES.ipynb +0 -0
  69. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/ISSR.ipynb +0 -0
  70. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/Landsat.ipynb +0 -0
  71. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/Meteorology.ipynb +0 -0
  72. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/SAC.ipynb +0 -0
  73. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/Sentinel.ipynb +0 -0
  74. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/advection.ipynb +0 -0
  75. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/airports.ipynb +0 -0
  76. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/data/.gitignore +0 -0
  77. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/data/flight-ap.csv +0 -0
  78. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/data/flight-cocip.csv +0 -0
  79. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/data/flight-fdr.csv +0 -0
  80. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/data/flight-noisy.csv +0 -0
  81. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/data/flight.csv +0 -0
  82. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/data/iagos-flight-landsat.csv +0 -0
  83. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/data/iagos-flight-sentinel.csv +0 -0
  84. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/flightplan.ipynb +0 -0
  85. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/model-levels.ipynb +0 -0
  86. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/run-cocip-on-flight.ipynb +0 -0
  87. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/run-cocip-with-fdr.ipynb +0 -0
  88. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks/specific-humidity-interpolation.ipynb +0 -0
  89. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/notebooks.rst +0 -0
  90. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/observations.rst +0 -0
  91. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/tutorials.rst +0 -0
  92. {pycontrails-0.52.0 → pycontrails-0.52.1}/docs/utilities.rst +0 -0
  93. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/__init__.py +0 -0
  94. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/__init__.py +0 -0
  95. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/aircraft_performance.py +0 -0
  96. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/airports.py +0 -0
  97. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/cache.py +0 -0
  98. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/fleet.py +0 -0
  99. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/flightplan.py +0 -0
  100. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/fuel.py +0 -0
  101. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/met_var.py +0 -0
  102. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/models.py +0 -0
  103. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/core/rgi_cython.pyx +0 -0
  104. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/__init__.py +0 -0
  105. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/_leo_utils/search.py +0 -0
  106. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/_leo_utils/static/bq_roi_query.sql +0 -0
  107. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/_leo_utils/vis.py +0 -0
  108. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/ecmwf/__init__.py +0 -0
  109. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/ecmwf/arco_era5.py +0 -0
  110. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/ecmwf/common.py +0 -0
  111. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/ecmwf/era5.py +0 -0
  112. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/ecmwf/era5_model_level.py +0 -0
  113. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/ecmwf/hres.py +0 -0
  114. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/ecmwf/hres_model_level.py +0 -0
  115. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/ecmwf/ifs.py +0 -0
  116. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/ecmwf/model_levels.py +0 -0
  117. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv +0 -0
  118. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/ecmwf/variables.py +0 -0
  119. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/gfs/__init__.py +0 -0
  120. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/gfs/gfs.py +0 -0
  121. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/gfs/variables.py +0 -0
  122. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/landsat.py +0 -0
  123. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/sentinel.py +0 -0
  124. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/datalib/spire.py +0 -0
  125. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/ext/bada.py +0 -0
  126. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/ext/cirium.py +0 -0
  127. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/ext/empirical_grid.py +0 -0
  128. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/ext/synthetic_flight.py +0 -0
  129. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/__init__.py +0 -0
  130. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/accf.py +0 -0
  131. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/apcemm/__init__.py +0 -0
  132. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/apcemm/apcemm.py +0 -0
  133. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/apcemm/inputs.py +0 -0
  134. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/apcemm/static/apcemm_yaml_template.yaml +0 -0
  135. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/apcemm/utils.py +0 -0
  136. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/cocip/__init__.py +0 -0
  137. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/cocip/cocip.py +0 -0
  138. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/cocip/cocip_params.py +0 -0
  139. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/cocip/contrail_properties.py +0 -0
  140. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/cocip/radiative_forcing.py +0 -0
  141. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/cocip/radiative_heating.py +0 -0
  142. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/cocip/unterstrasser_wake_vortex.py +0 -0
  143. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/cocip/wake_vortex.py +0 -0
  144. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/cocip/wind_shear.py +0 -0
  145. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/cocipgrid/__init__.py +0 -0
  146. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/cocipgrid/cocip_grid.py +0 -0
  147. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/cocipgrid/cocip_grid_params.py +0 -0
  148. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/dry_advection.py +0 -0
  149. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/emissions/__init__.py +0 -0
  150. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/emissions/black_carbon.py +0 -0
  151. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/emissions/emissions.py +0 -0
  152. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/emissions/ffm2.py +0 -0
  153. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/emissions/static/default-engine-uids.csv +0 -0
  154. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv +0 -0
  155. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv +0 -0
  156. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/humidity_scaling/__init__.py +0 -0
  157. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/humidity_scaling/humidity_scaling.py +0 -0
  158. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq +0 -0
  159. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq +0 -0
  160. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/issr.py +0 -0
  161. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/pcc.py +0 -0
  162. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/pcr.py +0 -0
  163. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/ps_model/__init__.py +0 -0
  164. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/ps_model/ps_aircraft_params.py +0 -0
  165. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/ps_model/ps_grid.py +0 -0
  166. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/ps_model/ps_model.py +0 -0
  167. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/ps_model/ps_operational_limits.py +0 -0
  168. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/ps_model/static/ps-aircraft-params-20240524.csv +0 -0
  169. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/ps_model/static/ps-synonym-list-20240524.csv +0 -0
  170. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/sac.py +0 -0
  171. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/models/tau_cirrus.py +0 -0
  172. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/physics/__init__.py +0 -0
  173. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/physics/constants.py +0 -0
  174. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/physics/jet.py +0 -0
  175. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/physics/thermo.py +0 -0
  176. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/physics/units.py +0 -0
  177. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/py.typed +0 -0
  178. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/utils/__init__.py +0 -0
  179. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/utils/dependencies.py +0 -0
  180. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/utils/iteration.py +0 -0
  181. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/utils/json.py +0 -0
  182. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/utils/temp.py +0 -0
  183. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails/utils/types.py +0 -0
  184. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails.egg-info/SOURCES.txt +0 -0
  185. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails.egg-info/dependency_links.txt +0 -0
  186. {pycontrails-0.52.0 → pycontrails-0.52.1}/pycontrails.egg-info/top_level.txt +0 -0
  187. {pycontrails-0.52.0 → pycontrails-0.52.1}/setup.cfg +0 -0
  188. {pycontrails-0.52.0 → pycontrails-0.52.1}/setup.py +0 -0
  189. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/__init__.py +0 -0
  190. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/_deprecated.py +0 -0
  191. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/benchmark/cocip/Makefile +0 -0
  192. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/benchmark/cocip/README.md +0 -0
  193. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/benchmark/cocip/benchmark.py +0 -0
  194. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/benchmark/cocip/compare.py +0 -0
  195. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/benchmark/cocip/data.md +0 -0
  196. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/benchmark/cocip/output.py +0 -0
  197. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/benchmark/cocip/review.ipynb +0 -0
  198. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/benchmark/cocip-fortran/README.md +0 -0
  199. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/benchmark/north-atlantic-study/.gcloudignore +0 -0
  200. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/benchmark/north-atlantic-study/README.md +0 -0
  201. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/benchmark/north-atlantic-study/support.py +0 -0
  202. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/benchmark/north-atlantic-study/validate.py +0 -0
  203. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/fixtures/cocip-met.py +0 -0
  204. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/fixtures/cocip-met2.py +0 -0
  205. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/fixtures/ecmwf-met.py +0 -0
  206. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/fixtures/gfs-met.py +0 -0
  207. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/__init__.py +0 -0
  208. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/NOAA_Solar_Calculations_day.csv +0 -0
  209. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/cocip-contrail-output.json +0 -0
  210. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/cocip-contrail-output2.json +0 -0
  211. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/cocip-flight-output.json +0 -0
  212. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/cocip-flight-output2.json +0 -0
  213. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/cocip-output-contrail-edges.json +0 -0
  214. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/cocip-output-flts-20190101-eu.pq +0 -0
  215. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/flight-cocip2.csv +0 -0
  216. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/flight-meridian.csv +0 -0
  217. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/flight-metadata.json +0 -0
  218. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/flight-spire-data-cleaning.pq +0 -0
  219. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/flight.csv +0 -0
  220. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/flt-wypts-20190101-eu.pq +0 -0
  221. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/met-20190101-eu.nc +0 -0
  222. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/met-accf-pl.nc +0 -0
  223. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/met-accf-sl.nc +0 -0
  224. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/met-ecmwf-pl.nc +0 -0
  225. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/met-ecmwf-sl.nc +0 -0
  226. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/met-era5-cocip1.nc +0 -0
  227. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/met-era5-cocip2.nc +0 -0
  228. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/met-gfs.nc +0 -0
  229. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/polygon-bug.nc +0 -0
  230. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/rad-20190101-eu.nc +0 -0
  231. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/rad-era5-cocip1.nc +0 -0
  232. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/rad-era5-cocip2.nc +0 -0
  233. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/static/rad-gfs.nc +0 -0
  234. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_accf.py +0 -0
  235. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_airports.py +0 -0
  236. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_apcemm.py +0 -0
  237. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_cache.py +0 -0
  238. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_cocip_grid.py +0 -0
  239. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_cocip_grid_parity.py +0 -0
  240. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_cocip_radiative_forcing.py +0 -0
  241. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_cocip_uncertainty.py +0 -0
  242. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_coordinates.py +0 -0
  243. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_datalib_metsource.py +0 -0
  244. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_dry_advection.py +0 -0
  245. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_dtypes.py +0 -0
  246. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_emissions.py +0 -0
  247. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_fleet.py +0 -0
  248. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_flight.py +0 -0
  249. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_flightplan.py +0 -0
  250. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_fuel.py +0 -0
  251. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_geo.py +0 -0
  252. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_gfs.py +0 -0
  253. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_goes.py +0 -0
  254. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_grid_to_netcdf.py +0 -0
  255. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_humidity_scaling.py +0 -0
  256. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_init.py +0 -0
  257. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_interpolation.py +0 -0
  258. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_leo.py +0 -0
  259. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_met_cache.py +0 -0
  260. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_models.py +0 -0
  261. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_pcc.py +0 -0
  262. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_polygons.py +0 -0
  263. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_ps_model.py +0 -0
  264. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_spire.py +0 -0
  265. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_tau_cirrus.py +0 -0
  266. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_thermo_sac.py +0 -0
  267. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_units.py +0 -0
  268. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_unterstrasser_wake_vortex.py +0 -0
  269. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_utils.py +0 -0
  270. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_vector.py +0 -0
  271. {pycontrails-0.52.0 → pycontrails-0.52.1}/tests/unit/test_zarr.py +0 -0
@@ -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,24 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.52.1
4
+
5
+ ### Breaking changes
6
+
7
+ - 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).
8
+ - GOES imagery is now loaded from a temporary file on disk rather than directly from memory when using `GOES.get` without a cachestore.
9
+
10
+ ### Internals
11
+
12
+ - Remove upper limits on netCDF4 and numpy versions.
13
+ - Remove h5netcdf dependency.
14
+ - 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.
15
+ - 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.)
16
+ - Document pycontrails installation from conda-forge.
17
+
18
+ ### Fixes
19
+
20
+ - Ensure the `MetDataset` vertical coordinates `"air_pressure"` and `"altitude"` have the correct dtype.
21
+
3
22
  ## v0.52.0
4
23
 
5
24
  ### Breaking changes
@@ -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.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
@@ -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
@@ -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,7 +120,7 @@ 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
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)](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) |
@@ -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,7 +4,7 @@
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
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)|
10
10
  | **License** | [![Apache License 2.0](https://img.shields.io/pypi/l/pycontrails.svg)](https://github.com/contrailcirrus/pycontrails/blob/main/LICENSE) |
@@ -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
 
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.52.0'
16
- __version_tuple__ = version_tuple = (0, 52, 0)
15
+ __version__ = version = '0.52.1'
16
+ __version_tuple__ = version_tuple = (0, 52, 1)
@@ -59,27 +59,27 @@ def slice_domain(
59
59
  >>> # Call with request as np.array
60
60
  >>> request = np.linspace(-20, 20, 100)
61
61
  >>> slice_domain(domain, request)
62
- slice(640, 801, None)
62
+ slice(np.int64(640), np.int64(801), None)
63
63
 
64
64
  >>> # Call with request as tuple
65
65
  >>> request = -20, 20
66
66
  >>> slice_domain(domain, request)
67
- slice(640, 801, None)
67
+ slice(np.int64(640), np.int64(801), None)
68
68
 
69
69
  >>> # Call with a buffer
70
70
  >>> request = -16, 13
71
71
  >>> buffer = 4, 7
72
72
  >>> slice_domain(domain, request, buffer)
73
- slice(640, 801, None)
73
+ slice(np.int64(640), np.int64(801), None)
74
74
 
75
75
  >>> # Call with request as a single number
76
76
  >>> request = -20
77
77
  >>> slice_domain(domain, request)
78
- slice(640, 641, None)
78
+ slice(np.int64(640), np.int64(641), None)
79
79
 
80
80
  >>> request = -19.9
81
81
  >>> slice_domain(domain, request)
82
- slice(640, 642, None)
82
+ slice(np.int64(640), np.int64(642), None)
83
83
 
84
84
  """
85
85
  # if the length of domain coordinates is <= 2, return the whole domain
@@ -384,7 +384,7 @@ class Flight(GeoVectorDataset):
384
384
  ... time=pd.date_range('2021-01-01T12', '2021-01-01T14', periods=200),
385
385
  ... )
386
386
  >>> fl.max_distance_gap
387
- 7391.27...
387
+ np.float64(7391.27...)
388
388
  """
389
389
  if self.attrs["crs"] != "EPSG:4326":
390
390
  raise NotImplementedError("Only implemented for EPSG:4326 CRS.")
@@ -415,7 +415,7 @@ class Flight(GeoVectorDataset):
415
415
  ... time=pd.date_range('2021-01-01T12', '2021-01-01T14', periods=200),
416
416
  ... )
417
417
  >>> fl.length
418
- 1436924.67...
418
+ np.float64(1436924.67...)
419
419
  """
420
420
  if self.attrs["crs"] != "EPSG:4326":
421
421
  raise NotImplementedError("Only implemented for EPSG:4326 CRS.")
@@ -1520,11 +1520,11 @@ class Flight(GeoVectorDataset):
1520
1520
 
1521
1521
  >>> # Length (in meters) of waypoints whose temperature exceeds 236K
1522
1522
  >>> fl.length_met("air_temperature", threshold=236)
1523
- 4132178.159...
1523
+ np.float64(4132178.159...)
1524
1524
 
1525
1525
  >>> # Proportion (with respect to distance) of waypoints whose temperature exceeds 236K
1526
1526
  >>> fl.proportion_met("air_temperature", threshold=236)
1527
- 0.663552...
1527
+ np.float64(0.663552...)
1528
1528
  """
1529
1529
  if key not in self.data:
1530
1530
  raise KeyError(f"Column {key} does not exist in data.")
@@ -621,11 +621,11 @@ class EmissionsProfileInterpolator:
621
621
  >>> epi = EmissionsProfileInterpolator(xp, fp)
622
622
  >>> # Interpolate a single value
623
623
  >>> epi.interp(5)
624
- 0.150000...
624
+ np.float64(0.150000...)
625
625
 
626
626
  >>> # Interpolate a single value on a logarithmic scale
627
627
  >>> epi.log_interp(5)
628
- 1.105171...
628
+ np.float64(1.105171...)
629
629
 
630
630
  >>> # Demonstrate speed up compared with xarray.DataArray interpolation
631
631
  >>> import time, xarray as xr
@@ -1375,9 +1375,10 @@ class MetDataArray(MetBase):
1375
1375
 
1376
1376
  # try to create DataArray out of input data and **kwargs
1377
1377
  if not isinstance(data, xr.DataArray):
1378
- DeprecationWarning(
1378
+ warnings.warn(
1379
1379
  "Input 'data' must be an xarray DataArray. "
1380
- "Passing arbitrary kwargs will be removed in future versions."
1380
+ "Passing arbitrary kwargs will be removed in future versions.",
1381
+ DeprecationWarning,
1381
1382
  )
1382
1383
  data = xr.DataArray(data, **kwargs)
1383
1384
 
@@ -2609,13 +2610,14 @@ def _load(hash: str, cachestore: CacheStore, chunks: dict[str, int]) -> xr.Datas
2609
2610
 
2610
2611
 
2611
2612
  def _add_vertical_coords(data: XArrayType) -> XArrayType:
2612
- """Add "air_pressure" and "altitude" coordinates to data."""
2613
+ """Add "air_pressure" and "altitude" coordinates to data.
2613
2614
 
2614
- data["level"].attrs.update(units="hPa", long_name="Pressure", positive="down")
2615
+ .. versionchanged:: 0.52.1
2616
+ Ensure that the ``dtype`` of the additional vertical coordinates agree
2617
+ with the ``dtype`` of the underlying gridded data.
2618
+ """
2615
2619
 
2616
- coords = data.coords
2617
- if "air_pressure" in coords and "altitude" in coords:
2618
- return data
2620
+ data["level"].attrs.update(units="hPa", long_name="Pressure", positive="down")
2619
2621
 
2620
2622
  # XXX: use the dtype of the data to determine the precision of these coordinates
2621
2623
  # There are two competing conventions here:
@@ -2625,25 +2627,32 @@ def _add_vertical_coords(data: XArrayType) -> XArrayType:
2625
2627
  # It is more important for air_pressure and altitude to be grid-aligned than to be
2626
2628
  # coordinate-aligned, so we use the dtype of the data to determine the precision of
2627
2629
  # these coordinates
2628
- if isinstance(data, xr.Dataset):
2629
- dtype = np.result_type(*data.data_vars.values(), np.float32)
2630
- else:
2631
- dtype = data.dtype
2632
- level = data["level"].values.astype(dtype, copy=False)
2630
+ dtype = (
2631
+ np.result_type(*data.data_vars.values(), np.float32)
2632
+ if isinstance(data, xr.Dataset)
2633
+ else data.dtype
2634
+ )
2633
2635
 
2634
- if "air_pressure" not in coords:
2636
+ level = data["level"].values
2637
+
2638
+ if "air_pressure" not in data.coords:
2635
2639
  data = data.assign_coords(air_pressure=("level", level * 100.0))
2636
2640
  data.coords["air_pressure"].attrs.update(
2637
2641
  standard_name=AirPressure.standard_name,
2638
2642
  long_name=AirPressure.long_name,
2639
2643
  units=AirPressure.units,
2640
2644
  )
2641
- if "altitude" not in coords:
2645
+ if data.coords["air_pressure"].dtype != dtype:
2646
+ data.coords["air_pressure"] = data.coords["air_pressure"].astype(dtype, copy=False)
2647
+
2648
+ if "altitude" not in data.coords:
2642
2649
  data = data.assign_coords(altitude=("level", units.pl_to_m(level)))
2643
2650
  data.coords["altitude"].attrs.update(
2644
2651
  standard_name=Altitude.standard_name,
2645
2652
  long_name=Altitude.long_name,
2646
2653
  units=Altitude.units,
2647
2654
  )
2655
+ if data.coords["altitude"].dtype != dtype:
2656
+ data.coords["altitude"] = data.coords["altitude"].astype(dtype, copy=False)
2648
2657
 
2649
2658
  return data
@@ -536,7 +536,7 @@ def multipolygon_to_geojson(
536
536
  else:
537
537
  shape = len(ring.coords), 3
538
538
  coords = np.empty(shape)
539
- coords[:, :2] = ring.coords
539
+ coords[:, :2] = np.asarray(ring.coords)
540
540
  coords[:, 2] = altitude
541
541
 
542
542
  poly_coords.append(coords.tolist())