pycontrails 0.39.6__tar.gz → 0.40.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 (202) hide show
  1. {pycontrails-0.39.6 → pycontrails-0.40.1}/.github/workflows/docs.yaml +17 -10
  2. pycontrails-0.40.1/.github/workflows/release.yaml +109 -0
  3. {pycontrails-0.39.6 → pycontrails-0.40.1}/.github/workflows/test.yaml +32 -18
  4. {pycontrails-0.39.6 → pycontrails-0.40.1}/.gitignore +3 -0
  5. {pycontrails-0.39.6 → pycontrails-0.40.1}/CHANGELOG.md +42 -3
  6. {pycontrails-0.39.6 → pycontrails-0.40.1}/Makefile +2 -1
  7. {pycontrails-0.39.6/pycontrails.egg-info → pycontrails-0.40.1}/PKG-INFO +1 -1
  8. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/_static/pycontrails.bib +63 -0
  9. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/conf.py +1 -0
  10. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/CoCiP.ipynb +4 -1
  11. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/ECMWF.ipynb +33 -8
  12. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/Flight.ipynb +1 -1
  13. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/install.rst +12 -0
  14. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/_version.py +2 -2
  15. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/flight.py +2 -2
  16. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/interpolation.py +259 -169
  17. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/met.py +177 -137
  18. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/models.py +5 -4
  19. pycontrails-0.40.1/pycontrails/core/rgi_cython.c +30759 -0
  20. pycontrails-0.40.1/pycontrails/core/rgi_cython.pyx +184 -0
  21. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/vector.py +60 -61
  22. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/ecmwf/era5.py +24 -5
  23. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/ecmwf/hres.py +29 -5
  24. pycontrails-0.40.1/pycontrails/models/__init__.py +1 -0
  25. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/accf.py +1 -2
  26. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/aircraft_performance.py +2 -2
  27. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/cocip.py +68 -6
  28. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocipgrid/cocip_grid.py +9 -3
  29. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocipgrid/cocip_time_handling.py +3 -2
  30. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/humidity_scaling.py +5 -0
  31. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/sac.py +1 -1
  32. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/utils/temp.py +4 -0
  33. {pycontrails-0.39.6 → pycontrails-0.40.1/pycontrails.egg-info}/PKG-INFO +1 -1
  34. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails.egg-info/SOURCES.txt +3 -0
  35. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails.egg-info/requires.txt +1 -1
  36. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails.egg-info/top_level.txt +0 -1
  37. {pycontrails-0.39.6 → pycontrails-0.40.1}/pyproject.toml +3 -2
  38. pycontrails-0.40.1/setup.py +18 -0
  39. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/__init__.py +3 -4
  40. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/conftest.py +4 -2
  41. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_cache.py +8 -3
  42. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_cocip.py +22 -17
  43. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_cocip_grid.py +16 -10
  44. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_cocip_grid_parity.py +5 -1
  45. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_dtypes.py +50 -112
  46. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_fleet.py +5 -1
  47. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_grid_to_netcdf.py +16 -7
  48. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_interpolation.py +161 -58
  49. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_met.py +2 -2
  50. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_models.py +2 -2
  51. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_sac_issr.py +37 -21
  52. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_utils.py +11 -1
  53. pycontrails-0.39.6/.github/workflows/release.yaml +0 -113
  54. pycontrails-0.39.6/tests/unit/__init__.py +0 -0
  55. {pycontrails-0.39.6 → pycontrails-0.40.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  56. {pycontrails-0.39.6 → pycontrails-0.40.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  57. {pycontrails-0.39.6 → pycontrails-0.40.1}/.github/pull_request_template.md +0 -0
  58. {pycontrails-0.39.6 → pycontrails-0.40.1}/.github/workflows/benchmark.yaml +0 -0
  59. {pycontrails-0.39.6 → pycontrails-0.40.1}/.github/workflows/doctest.yaml +0 -0
  60. {pycontrails-0.39.6 → pycontrails-0.40.1}/.pre-commit-config.yaml +0 -0
  61. {pycontrails-0.39.6 → pycontrails-0.40.1}/.zenodo.json +0 -0
  62. {pycontrails-0.39.6 → pycontrails-0.40.1}/CONTRIBUTING.md +0 -0
  63. {pycontrails-0.39.6 → pycontrails-0.40.1}/LICENSE +0 -0
  64. {pycontrails-0.39.6 → pycontrails-0.40.1}/NOTICE +0 -0
  65. {pycontrails-0.39.6 → pycontrails-0.40.1}/README.md +0 -0
  66. {pycontrails-0.39.6 → pycontrails-0.40.1}/RELEASE.md +0 -0
  67. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/_static/css/style.css +0 -0
  68. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/_static/img/favicon.png +0 -0
  69. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/api.rst +0 -0
  70. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/changelog.rst +0 -0
  71. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/contributing.rst +0 -0
  72. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/develop.rst +0 -0
  73. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/ACCF.ipynb +0 -0
  74. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/Cache.ipynb +0 -0
  75. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/ISSR.ipynb +0 -0
  76. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/Meteorology.ipynb +0 -0
  77. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/SAC.ipynb +0 -0
  78. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples/flight.csv +0 -0
  79. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/examples.rst +0 -0
  80. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/index.rst +0 -0
  81. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/literature.rst +0 -0
  82. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/tutorials/CoCiP.ipynb +0 -0
  83. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/tutorials/flight.csv +0 -0
  84. {pycontrails-0.39.6 → pycontrails-0.40.1}/docs/tutorials.rst +0 -0
  85. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/__init__.py +0 -0
  86. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/__init__.py +0 -0
  87. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/cache.py +0 -0
  88. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/coordinates.py +0 -0
  89. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/datalib.py +0 -0
  90. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/fleet.py +0 -0
  91. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/fuel.py +0 -0
  92. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/met_var.py +0 -0
  93. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/core/polygon.py +0 -0
  94. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/__init__.py +0 -0
  95. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/ecmwf/__init__.py +0 -0
  96. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/ecmwf/common.py +0 -0
  97. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/ecmwf/ifs.py +0 -0
  98. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/ecmwf/variables.py +0 -0
  99. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/gfs/__init__.py +0 -0
  100. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/gfs/gfs.py +0 -0
  101. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/datalib/gfs/variables.py +0 -0
  102. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/ext/bada/__init__.py +0 -0
  103. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/ext/cirium/__init__.py +0 -0
  104. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/__init__.py +0 -0
  105. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/cocip_params.py +0 -0
  106. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/cocip_uncertainty.py +0 -0
  107. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/contrail_properties.py +0 -0
  108. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/output/__init__.py +0 -0
  109. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/output/flight_summary.py +0 -0
  110. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/output/grid_cirrus.py +0 -0
  111. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/radiative_forcing.py +0 -0
  112. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/radiative_heating.py +0 -0
  113. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/wake_vortex.py +0 -0
  114. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocip/wind_shear.py +0 -0
  115. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocipgrid/__init__.py +0 -0
  116. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/cocipgrid/cocip_grid_params.py +0 -0
  117. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/emissions/__init__.py +0 -0
  118. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/emissions/black_carbon.py +0 -0
  119. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/emissions/emissions.py +0 -0
  120. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/emissions/ffm2.py +0 -0
  121. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/emissions/static/edb-gaseous-v28c-engines.csv +0 -0
  122. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/emissions/static/edb-nvpm-v28c-engines.csv +0 -0
  123. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/issr.py +0 -0
  124. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/pcc.py +0 -0
  125. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/pcr.py +0 -0
  126. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/models/tau_cirrus.py +0 -0
  127. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/physics/__init__.py +0 -0
  128. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/physics/constants.py +0 -0
  129. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/physics/geo.py +0 -0
  130. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/physics/jet.py +0 -0
  131. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/physics/thermo.py +0 -0
  132. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/physics/units.py +0 -0
  133. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/py.typed +0 -0
  134. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/utils/__init__.py +0 -0
  135. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/utils/iteration.py +0 -0
  136. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/utils/json.py +0 -0
  137. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/utils/synthetic_flight.py +0 -0
  138. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails/utils/types.py +0 -0
  139. {pycontrails-0.39.6 → pycontrails-0.40.1}/pycontrails.egg-info/dependency_links.txt +0 -0
  140. {pycontrails-0.39.6 → pycontrails-0.40.1}/setup.cfg +0 -0
  141. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/_deprecated.py +0 -0
  142. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip/Makefile +0 -0
  143. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip/README.md +0 -0
  144. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip/benchmark.py +0 -0
  145. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip/compare.py +0 -0
  146. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip/data.md +0 -0
  147. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip/output.py +0 -0
  148. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip/review.ipynb +0 -0
  149. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/cocip-fortran/README.md +0 -0
  150. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/north-atlantic-study/.gcloudignore +0 -0
  151. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/north-atlantic-study/README.md +0 -0
  152. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/north-atlantic-study/support.py +0 -0
  153. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/benchmark/north-atlantic-study/validate.py +0 -0
  154. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/fixtures/cocip-met.py +0 -0
  155. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/fixtures/cocip-met2.py +0 -0
  156. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/fixtures/ecmwf-met.py +0 -0
  157. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/fixtures/gfs-met.py +0 -0
  158. {pycontrails-0.39.6/pycontrails/models → pycontrails-0.40.1/tests/unit}/__init__.py +0 -0
  159. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/NOAA_Solar_Calculations_day.csv +0 -0
  160. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/cocip-contrail-output.json +0 -0
  161. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/cocip-contrail-output2.json +0 -0
  162. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/cocip-flight-output.json +0 -0
  163. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/cocip-flight-output2.json +0 -0
  164. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/cocip-flight-statistics.json +0 -0
  165. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/cocip-output-contrail-edges.json +0 -0
  166. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/cocip-output-grid-cirrus-summary.json +0 -0
  167. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/flight-cocip2.csv +0 -0
  168. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/flight-meridian.csv +0 -0
  169. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/flight-metadata.json +0 -0
  170. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/flight.csv +0 -0
  171. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/met-accf-pl.nc +0 -0
  172. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/met-accf-sl.nc +0 -0
  173. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/met-ecmwf-pl.nc +0 -0
  174. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/met-ecmwf-sl.nc +0 -0
  175. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/met-era5-cocip1.nc +0 -0
  176. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/met-era5-cocip2.nc +0 -0
  177. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/met-gfs.nc +0 -0
  178. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/polygon-bug.nc +0 -0
  179. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/rad-era5-cocip1.nc +0 -0
  180. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/rad-era5-cocip2.nc +0 -0
  181. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/static/rad-gfs.nc +0 -0
  182. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_accf.py +0 -0
  183. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_cocip_radiative_forcing.py +0 -0
  184. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_cocip_uncertainty.py +0 -0
  185. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_coordinates.py +0 -0
  186. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_datalib.py +0 -0
  187. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_ecmwf.py +0 -0
  188. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_emissions.py +0 -0
  189. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_flight.py +0 -0
  190. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_fuel.py +0 -0
  191. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_geo.py +0 -0
  192. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_gfs.py +0 -0
  193. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_humidity_scaling.py +0 -0
  194. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_init.py +0 -0
  195. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_met_cache.py +0 -0
  196. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_pcc.py +0 -0
  197. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_polygons.py +0 -0
  198. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_tau_cirrus.py +0 -0
  199. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_thermo_sac.py +0 -0
  200. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_units.py +0 -0
  201. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_vector.py +0 -0
  202. {pycontrails-0.39.6 → pycontrails-0.40.1}/tests/unit/test_zarr.py +0 -0
@@ -18,23 +18,15 @@ on:
18
18
  env:
19
19
  PYCONTRAILS_CACHE_DIR: '${{ github.workspace }}/.cache/pycontrails'
20
20
 
21
- # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
22
- permissions:
23
- contents: read
24
- pages: write
25
- id-token: write
26
-
27
21
  # Allow one concurrent deployment
28
22
  concurrency:
29
23
  group: "pages"
30
24
  cancel-in-progress: true
31
25
 
26
+
32
27
  jobs:
33
28
  build:
34
29
  runs-on: ubuntu-latest
35
- environment:
36
- name: github-pages
37
- url: ${{ steps.deployment.outputs.page_url }}
38
30
 
39
31
  steps:
40
32
  - name: OS Dependencies
@@ -83,6 +75,21 @@ jobs:
83
75
  with:
84
76
  path: 'docs/_build/html/'
85
77
 
78
+ deploy:
79
+ needs: build
80
+ runs-on: ubuntu-latest
81
+
82
+ environment:
83
+ name: github-pages
84
+ url: ${{ steps.deployment.outputs.page_url }}
85
+
86
+ # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
87
+ permissions:
88
+ contents: read
89
+ pages: write
90
+ id-token: write
91
+
92
+ steps:
86
93
  - name: Deploy to GitHub Pages
87
94
  id: deployment
88
- uses: actions/deploy-pages@v1
95
+ uses: actions/deploy-pages@v2
@@ -0,0 +1,109 @@
1
+ # https://github.com/pypa/cibuildwheel/blob/main/examples/github-deploy.yml
2
+
3
+ name: Release
4
+
5
+ on:
6
+ release:
7
+ types:
8
+ - published
9
+ branches:
10
+ - main
11
+
12
+ workflow_dispatch:
13
+
14
+ jobs:
15
+ check-main-test-status:
16
+ runs-on: ubuntu-latest
17
+ steps:
18
+ - name: OS Dependencies
19
+ run: sudo apt-get install -y curl jq
20
+
21
+ - uses: actions/checkout@v3
22
+
23
+ - name: Check main test status
24
+ run: make main-test-status
25
+
26
+ build_wheels:
27
+ name: Build wheels on ${{ matrix.os }}
28
+ runs-on: ${{ matrix.os }}
29
+ strategy:
30
+ fail-fast: false
31
+ matrix:
32
+ os: [ubuntu-latest, windows-latest, macos-latest]
33
+
34
+ steps:
35
+ - uses: actions/checkout@v3
36
+ with:
37
+ fetch-depth: 0
38
+
39
+ # https://cibuildwheel.readthedocs.io/en/stable/options/#testing
40
+ - name: Build wheels
41
+ uses: pypa/cibuildwheel@v2.12.1
42
+ env:
43
+ CIBW_BUILD: cp39-* cp310-* cp311-*
44
+ CIBW_SKIP: '*-win32 *-manylinux_i686 *-musllinux*'
45
+ CIBW_BUILD_VERBOSITY: 3
46
+ CIBW_ARCHS_MACOS: x86_64 arm64
47
+ CIBW_TEST_SKIP: '*-macosx_arm64'
48
+ # Completely isolate tests to prevent cibuildwheel from importing the
49
+ # source instead of the wheel. This happens when tests/__init__.py is read.
50
+ CIBW_TEST_EXTRAS: "complete,dev"
51
+ CIBW_TEST_COMMAND: >
52
+ mv {project}/pycontrails {project}/pycontrails-bak &&
53
+ python -m pytest {project}/tests -vv &&
54
+ mv {project}/pycontrails-bak {project}/pycontrails
55
+
56
+ - uses: actions/upload-artifact@v3
57
+ with:
58
+ path: ./wheelhouse/*.whl
59
+
60
+ build_sdist:
61
+ name: Build source distribution
62
+ runs-on: ubuntu-latest
63
+ steps:
64
+ - uses: actions/checkout@v3
65
+ with:
66
+ fetch-depth: 0
67
+
68
+ - name: Build sdist
69
+ run: pipx run build --sdist
70
+
71
+ - uses: actions/upload-artifact@v3
72
+ with:
73
+ path: dist/*.tar.gz
74
+
75
+ upload_pypi_test:
76
+ needs: [build_wheels, build_sdist]
77
+ runs-on: ubuntu-latest
78
+ steps:
79
+ - uses: actions/download-artifact@v3
80
+ with:
81
+ name: artifact
82
+ path: dist
83
+
84
+ - name: Publish distribution 📦 to Test PyPI
85
+ uses: pypa/gh-action-pypi-publish@release/v1
86
+ with:
87
+ user: __token__
88
+ password: ${{ secrets.TEST_PYPI_API_TOKEN }}
89
+ repository-url: https://test.pypi.org/legacy/
90
+ verbose: true
91
+ verify-metadata: true
92
+
93
+ upload_pypi:
94
+ if: ${{ github.event_name == 'release' }}
95
+ needs: [build_wheels, build_sdist, check-main-test-status]
96
+ runs-on: ubuntu-latest
97
+ steps:
98
+ - uses: actions/download-artifact@v3
99
+ with:
100
+ name: artifact
101
+ path: dist
102
+
103
+ - name: Publish distribution 📦 to PyPI
104
+ uses: pypa/gh-action-pypi-publish@release/v1
105
+ with:
106
+ user: __token__
107
+ password: ${{ secrets.PYPI_API_TOKEN }}
108
+ verbose: true
109
+ verify-metadata: true
@@ -37,7 +37,7 @@ jobs:
37
37
  strategy:
38
38
  fail-fast: false
39
39
  matrix:
40
- os: [ubuntu-latest] # add 'windows-latest'
40
+ os: [ubuntu-latest, windows-latest]
41
41
  pyversion: ['3.9', '3.10', '3.11']
42
42
  runs-on: ${{ matrix.os }}
43
43
 
@@ -82,34 +82,48 @@ jobs:
82
82
  mkdir -p ${{ env.BADA_CACHE_DIR }}
83
83
  gcloud storage cp -r gs://contrails-301217-bada/bada/bada3 ${{ env.BADA_CACHE_DIR }}
84
84
  gcloud storage cp -r gs://contrails-301217-bada/bada/bada4 ${{ env.BADA_CACHE_DIR }}
85
- ls -la ${{ env.BADA_CACHE_DIR }}
85
+ ls -l ${{ env.BADA_CACHE_DIR }}
86
86
 
87
87
  - name: Install pycontrails (dev)
88
- run: make dev-install
88
+ run: |
89
+ pip install -U pip wheel
90
+ pip install -e .[dev,docs,ecmwf,gcp,gfs,jupyter,vis,zarr] --verbose
91
+
92
+ # In latest-windows, redirecting stdout to a file uses utf-16 encoding
93
+ # This gives an error when ssh tries to read the key
94
+ # Instead don't pre-create the known_hosts file
95
+ - name: Install pycontrails-bada - windows
96
+ if: ${{ matrix.os == 'windows-latest' }}
97
+ run: |
98
+ mkdir -p $HOME/.ssh/
99
+ gcloud secrets versions access latest --secret="contrails-301217-github-ssh-key" --out-file="$HOME/.ssh/id_rsa"
100
+ pip install "pycontrails-bada @ git+ssh://git@github.com/contrailcirrus/pycontrails-bada.git"
101
+ env:
102
+ GIT_SSH_COMMAND: "ssh -o StrictHostKeyChecking=no"
89
103
 
90
- - name: Install pycontrails-bada extension
104
+ - name: Install pycontrails-bada - linux
105
+ if: ${{ matrix.os == 'ubuntu-latest' }}
91
106
  run: |
92
- mkdir -p ~/.ssh/ && ssh-keyscan github.com > ~/.ssh/known_hosts
93
- gcloud secrets versions access latest --secret="contrails-301217-github-ssh-key" > ~/.ssh/id_rsa
94
- chmod 600 ~/.ssh/id_rsa
107
+ mkdir -p $HOME/.ssh/
108
+ ssh-keyscan github.com > $HOME/.ssh/known_hosts
109
+ gcloud secrets versions access latest --secret="contrails-301217-github-ssh-key" > $HOME/.ssh/id_rsa
110
+ chmod 600 $HOME/.ssh/id_rsa
95
111
  pip install "pycontrails-bada @ git+ssh://git@github.com/contrailcirrus/pycontrails-bada.git"
96
112
 
97
113
  - name: Show environment
98
114
  run: |
99
115
  pwd
100
- ls -la
101
- which python
116
+ ls -l .
117
+ ls -l pycontrails
102
118
  python --version
103
- which mypy
104
119
  mypy --version
105
- python -m pip list
106
- python -m pip check
120
+ pip list
107
121
 
108
122
  - name: QC & Test
109
123
  run: |
110
- make ruff
111
- make mypy
112
- make black-check
113
- make pydocstyle
114
- make pytest
115
-
124
+ pip check
125
+ black pycontrails --check
126
+ ruff pycontrails tests
127
+ mypy pycontrails
128
+ pydocstyle pycontrails --verbose
129
+ pytest tests/unit -vv
@@ -22,6 +22,9 @@ sdist
22
22
  .eggs
23
23
  venv
24
24
  _version.py
25
+ rgi_cython.c
26
+ rgi_cython*.so
27
+ rgi_cython*.pyd
25
28
 
26
29
  # test
27
30
  .mypy_cache
@@ -1,13 +1,52 @@
1
1
 
2
2
  # Changelog
3
3
 
4
+ ## v0.40.1
5
+
6
+ #### Fixes
7
+
8
+ - Use [oldest-supported-numpy](https://pypi.org/project/oldest-supported-numpy/) for building pycontrails wheels. This allows pycontrails to be compatible with environments that use old versions of numpy. The [pycontrails v0.40.0 wheels](https://pypi.org/project/pycontrails/0.40.0/#files) are not compatible with numpy 1.22.
9
+ - Fix a unit test (`test_dtypes.py::test_issr_sac_grid_output`) that occasionally hangs.
10
+
11
+ ## v0.40.0
12
+
13
+ Support scipy 1.10, improve interpolation performance, and fix many windows issues.
14
+
15
+ #### Features
16
+
17
+ - Improve interpolation performance by cythonizing linear interpolation. This extends the approach taken in [scipy 1.10](https://github.com/scipy/scipy/pull/17291). The pycontrails [cython routines](pycontrails/core/rgi_cython.pyx) allow for both float64 and float32 grids via cython fused types (the current scipy implementation assumes float64). In addition, interpolation up to dimension 4 is supported (the scipy implementation supports dimension 1 and 2).
18
+ - Officially support [scipy 1.10](https://scipy.github.io/devdocs/release/1.10.0-notes.html).
19
+ - Officially test on windows in the GitHub Actions CI.
20
+ - Build custom wheels for python 3.9, 3.10, and 3.11 for the following platforms:
21
+ - Linux (x86_64)
22
+ - macOS (arm64 and x86_64)
23
+ - Windows (x86_64)
24
+
25
+ #### Breaking changes
26
+
27
+ - Change `MetDataset` and `MetDataArray` conventions: underlying dimension coordinates are automatically promoted to float64.
28
+ - Change how datetime arrays are converted to floating values for interpolation. The new approach introduces small differences compared with the previous implementation. These differences are significant enough to see relative differences in CoCiP predictions on the order of 1e-4.
29
+
30
+ #### Fixes
31
+
32
+ - Unit tests no longer raise errors when the `pycontrails-bada` package is not installed. Instead, some tests are skipped.
33
+ - Fix many numpy casting issues encountered on windows.
34
+ - Fix temp file issues encountered on windows.
35
+ - Officially support changes in `xarray` 2023.04 and `pandas` 2.0.
36
+
37
+ #### Internals
38
+
39
+ - Make the `interpolation` module more aligned with [scipy 1.10 enhancements](https://docs.scipy.org/doc/scipy/release.1.10.0.html#scipy-interpolate-improvements) to the `RegularGridInterpolator`. In particular, grid coordinates now must be float64.
40
+ - Use [cibuildwheel](https://cibuildwheel.readthedocs.io/en/stable/) to build wheels for Linux, macOS (arm64 and x86_64), and Windows on [release](.github/workflows/release.yaml) in Github Actions. Allow this workflow to be triggered manually to test the release process without actually publishing to PyPI.
41
+ - Simplify interpolation with pre-computed indices (invoked with the model parameter `interpolation_use_indices`) via a `RGIArtifacts` interface.
42
+ - Overhaul much of the interpolation module to improve performance.
43
+ - Slight performance enhancements to the `met` module.
44
+
4
45
  ## v0.39.6
5
46
 
6
47
  #### Features
7
48
 
8
- - Add `geo.azimuth` and `geo.segment_azimuth` functions to calculate the azimuth
9
- between coordinates.
10
- Azimuth is the angle between coordinates relative to true north on the range [0, 360].
49
+ - Add `geo.azimuth` and `geo.segment_azimuth` functions to calculate the azimuth between coordinates. Azimuth is the angle between coordinates relative to true north on the interval `[0, 360)`.
11
50
 
12
51
  #### Fixes
13
52
 
@@ -81,7 +81,7 @@ pytest:
81
81
  pytest tests/unit
82
82
 
83
83
  pydocstyle:
84
- pydocstyle pycontrails --match='[^_deprecated].*.py' --verbose
84
+ pydocstyle pycontrails --verbose
85
85
 
86
86
  pytest-cov:
87
87
  pytest \
@@ -172,6 +172,7 @@ nb-execute: nb-black-check
172
172
  nb-check-links:
173
173
  python -m pytest --check-links \
174
174
  --check-links-ignore "https://doi.org/10.1021/acs.est.9b05608" \
175
+ --check-links-ignore "https://doi.org/10.1021/acs.est.2c05781" \
175
176
  --check-links-ignore "https://github.com/contrailcirrus/pycontrails-bada" \
176
177
  docs/examples docs/tutorials
177
178
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pycontrails
3
- Version: 0.39.6
3
+ Version: 0.40.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
@@ -382,6 +382,22 @@
382
382
  langid = {english}
383
383
  }
384
384
 
385
+ @inproceedings{schumannContrailCirrusPrediction2010,
386
+ title = {A Contrail Cirrus Prediction Tool},
387
+ booktitle = {Proceedings of the 2nd {{International Conference}} on {{Transport}}, {{Atmosphere}} and {{Climate}} ({{TAC-2}})},
388
+ author = {Schumann, Ulrich},
389
+ editor = {Sausen, Robert and van Velthoven, Peter F. J. and Br{\"u}ning, Claus and Blum, Anja},
390
+ year = {2010},
391
+ volume = {2010--10},
392
+ pages = {69--74},
393
+ publisher = {{DLR}},
394
+ address = {{Aachen, Germany and Maastricht, The Netherlands}},
395
+ issn = {1434-8454},
396
+ urldate = {2023-04-16},
397
+ abstract = {An new ``Contrail Cirrus Prediction Tool'' (CoCiP) has been developed to simulate contrail cirrus resulting from a single flight as well as from a fleet of cruising aircraft, flight by flight, regionally or globally. The method predicts contrail cirrus for given air traffic and weather prediction data. The method describes the life cycle of each contrail individually using a Lagrangian Gaussian plume model with simple bulk contrail ice properties, without feedback to meteorology. Contrails are initiated when the Schmidt-Appleman criterion is satisfied and when the ambient atmosphere is humid enough to allow for contrail persistence. The initial plume properties reflect properties of the originating aircraft. The evolution of individual contrails of cruising aircraft is computed using wind, temperature, humidity, and ice water content from numerical weather prediction (NWP) output. The plume trajectory follows horizontal and vertical wind. The model simulates shear and turbulence driven spreading, ice water content as a function of ice supersaturation, and some ice particle loss processes (turbulent mixing, aggregation and sedimentation). Radiative cloud forcing is estimated for the sum of all contrails using radiative fluxes without contrails from NWP output. The tool is kept simple to allow for efficient contrail simulations. The method has been tested for case studies with some comparisons to observations. The most critical input parameter is the NWP humidity field. The results compare favourably with observations and support interpretations of insitu, satellite and lidar observed aviation impact on cirrus clouds. CoCiP can be used to predict and minimize the climate impact of contrails.},
398
+ langid = {english}
399
+ }
400
+
385
401
  @article{schumannContrailCirrusPrediction2012,
386
402
  title = {A Contrail Cirrus Prediction Model},
387
403
  author = {Schumann, U.},
@@ -431,6 +447,23 @@
431
447
  langid = {english}
432
448
  }
433
449
 
450
+ @inproceedings{schumannDeterminationContrailsSatellite1990,
451
+ title = {Determination of {{Contrails}} from {{Satellite Data}} and {{Observational Results}}},
452
+ booktitle = {Air {{Traffic}} and the {{Environment}} \textemdash{} {{Background}}, {{Tendencies}} and {{Potential Global Atmospheric Effects}}},
453
+ author = {Schumann, U. and Wendling, P.},
454
+ editor = {Schumann, U.},
455
+ year = {1990},
456
+ series = {Lecture {{Notes}} in {{Engineering}}},
457
+ pages = {138--153},
458
+ publisher = {{Springer}},
459
+ address = {{Berlin, Heidelberg}},
460
+ doi = {10.1007/978-3-642-51686-3_9},
461
+ abstract = {Condensation trails (contrails) from air traffic in the upper troposphere may have an effect on the earth's climate. We first discuss the state of knowledge. Then some results of radiation transfer calculations are reported which help to estimate the order of magnitude of the effects of cirrus clouds and water vapour in comparison to doubling of the concentration of CO2. The main part of the paper describes the analysis of contrails from satellite data. Based on NOAA-AVHRR data we present results for a specific case where contrails covered a few percent of a region including southern Germany and the Alps. Preliminary results are reported for 99 further cases. A pattern recognition method is described to identify contrails and the related cloud cover automatically. Laser observations reflect contrail cross-sections which are several km in width and about 700 m thick. The optical thickness reaches values up to 1.},
462
+ isbn = {978-3-642-51686-3},
463
+ langid = {english},
464
+ keywords = {Advanced Very High Resolution Radiometer,Cloud Cover,Optical Thickness,Sunshine Duration}
465
+ }
466
+
434
467
  @article{schumannEffectiveRadiusIce2011,
435
468
  title = {Effective {{Radius}} of {{Ice Particles}} in {{Cirrus}} and {{Contrails}}},
436
469
  author = {Schumann, U. and Mayer, B. and Gierens, K. and Unterstrasser, S. and Jessberger, P. and Petzold, A. and Voigt, C. and Gayet, J.-F.},
@@ -496,6 +529,19 @@
496
529
  langid = {english}
497
530
  }
498
531
 
532
+ @incollection{schumannPotentialReduceClimate2011a,
533
+ title = {Potential to Reduce the Climate Impact of Aviation by Flight Level Changes},
534
+ booktitle = {3rd {{AIAA Atmospheric Space Environments Conference}}},
535
+ author = {Schumann, Ulrich and Graf, Kaspar and Mannstein, Hermann},
536
+ year = {2011},
537
+ month = jun,
538
+ series = {Fluid {{Dynamics}} and {{Co-located Conferences}}},
539
+ publisher = {{American Institute of Aeronautics and Astronautics}},
540
+ doi = {10.2514/6.2011-3376},
541
+ urldate = {2023-04-16},
542
+ keywords = {Aviation,Base of Aircraft Data,Contrails,Cruise Altitude,Earth,Earth Atmosphere,Fuel Consumption,Greenhouse Effect,Numerical Weather Prediction,Optical Depth}
543
+ }
544
+
499
545
  @article{schumannPropertiesIndividualContrails2017,
500
546
  title = {Properties of Individual Contrails: A Compilation of Observations and Some Comparisons},
501
547
  shorttitle = {Properties of Individual Contrails},
@@ -678,6 +724,23 @@
678
724
  howpublished = {http://solardat.uoregon.edu/SolarRadiationBasics.html}
679
725
  }
680
726
 
727
+ @article{voigtInsituObservationsYoung2010,
728
+ title = {In-Situ Observations of Young Contrails \textendash{} Overview and Selected Results from the {{CONCERT}} Campaign},
729
+ author = {Voigt, C. and Schumann, U. and Jurkat, T. and Sch{\"a}uble, D. and Schlager, H. and Petzold, A. and Gayet, J.-F. and Kr{\"a}mer, M. and Schneider, J. and Borrmann, S. and Schmale, J. and Jessberger, P. and Hamburger, T. and Lichtenstern, M. and Scheibe, M. and Gourbeyre, C. and Meyer, J. and K{\"u}bbeler, M. and Frey, W. and Kalesse, H. and Butler, T. and Lawrence, M. G. and Holz{\"a}pfel, F. and Arnold, F. and Wendisch, M. and D{\"o}pelheuer, A. and Gottschaldt, K. and Baumann, R. and Z{\"o}ger, M. and S{\"o}lch, I. and Rautenhaus, M. and D{\"o}rnbrack, A.},
730
+ year = {2010},
731
+ month = sep,
732
+ journal = {Atmospheric Chemistry and Physics},
733
+ volume = {10},
734
+ number = {18},
735
+ pages = {9039--9056},
736
+ publisher = {{Copernicus GmbH}},
737
+ issn = {1680-7316},
738
+ doi = {10.5194/acp-10-9039-2010},
739
+ urldate = {2023-04-16},
740
+ abstract = {Lineshaped contrails were detected with the research aircraft Falcon during the CONCERT \textendash{} CONtrail and Cirrus ExpeRimenT \textendash{} campaign in October/November 2008. The Falcon was equipped with a set of instruments to measure the particle size distribution, shape, extinction and chemical composition as well as trace gas mixing ratios of sulfur dioxide (SO2), reactive nitrogen and halogen species (NO, NOy, HNO3, HONO, HCl), ozone (O3) and carbon monoxide (CO). During 12 mission flights over Europe, numerous contrails, cirrus clouds and a volcanic aerosol layer were probed at altitudes between 8.5 and 11.6 km and at temperatures above 213 K. 22 contrails from 11 different aircraft were observed near and below ice saturation. The observed NO mixing ratios, ice crystal and soot number densities are compared to a process based contrail model. On 19 November 2008 the contrail from a CRJ-2 aircraft was penetrated in 10.1 km altitude at a temperature of 221 K. The contrail had mean ice crystal number densities of 125 cm-3 with effective radii reff of 2.6 {$\mu$}m. The presence of particles with r{$>$}50 {$\mu$}m in the less than 2 min old contrail suggests that natural cirrus crystals were entrained in the contrail. Mean HONO/NO (HONO/NOy) ratios of 0.037 (0.024) and the fuel sulfur conversion efficiency to H2SO4 (\&epsilon;S{$\downarrow$}) of 2.9 \% observed in the CRJ-2 contrail are in the range of previous measurements in the gaseous aircraft exhaust. On 31 October 2010 aviation NO emissions could have contributed by more than 40\% to the regional scale NO levels in the mid-latitude lowest stratosphere. The CONCERT observations help to better quantify the climate impact from contrails and will be used to investigate the chemical processing of trace gases on contrails.},
741
+ langid = {english}
742
+ }
743
+
681
744
  @article{wasiukAircraftPerformanceModel2015,
682
745
  title = {An Aircraft Performance Model Implementation for the Estimation of Global and Regional Commercial Aviation Fuel Burn and Emissions},
683
746
  author = {Wasiuk, D. K. and Lowenberg, M. H. and Shallcross, D. E.},
@@ -182,6 +182,7 @@ autodoc_default_options = {
182
182
  bibtex_bibfiles = ["_static/pycontrails.bib"]
183
183
  bibtex_reference_style = "author_year"
184
184
  bibtex_default_style = "unsrt"
185
+ bibtex_cite_id = "cite-{key}"
185
186
 
186
187
  nbsphinx_timeout = 600
187
188
  nbsphinx_execute = "never"
@@ -12,8 +12,11 @@
12
12
  "\n",
13
13
  "- Schumann, U. “A Contrail Cirrus Prediction Model.” Geoscientific Model Development 5, no. 3 (May 3, 2012): 543–80. https://doi.org/10.5194/gmd-5-543-2012.\n",
14
14
  "- Schumann, U., B. Mayer, K. Graf, and H. Mannstein. “A Parametric Radiative Forcing Model for Contrail Cirrus.” Journal of Applied Meteorology and Climatology 51, no. 7 (July 2012): 1391–1406. https://doi.org/10.1175/JAMC-D-11-0242.1.\n",
15
+ "- Schumann, Ulrich, Robert Baumann, Darrel Baumgardner, Sarah T. Bedka, David P. Duda, Volker Freudenthaler, Jean-Francois Gayet, et al. 2017. “Properties of Individual Contrails: A Compilation of Observations and Some Comparisons.” Atmospheric Chemistry and Physics 17 (1): 403–38. https://doi.org/10.5194/acp-17-403-2017.\n",
15
16
  "- Teoh, Roger, Ulrich Schumann, Arnab Majumdar, and Marc E. J. Stettler. “Mitigating the Climate Forcing of Aircraft Contrails by Small-Scale Diversions and Technology Adoption.” Environmental Science & Technology 54, no. 5 (March 3, 2020): 2941–50. https://doi.org/10.1021/acs.est.9b05608.\n",
16
- "- Teoh, Roger, Ulrich Schumann, Edward Gryspeerdt, Marc Shapiro, Jarlath Molloy, George Koudis, Christiane Voigt, and Marc Stettler. “Aviation Contrail Climate Effects in the North Atlantic from 2016&ndash;2021.” Atmospheric Chemistry and Physics Discussions, March 30, 2022, 127. https://doi.org/10.5194/acp-2022-169.\n"
17
+ "- Teoh, Roger, Ulrich Schumann, Edward Gryspeerdt, Marc Shapiro, Jarlath Molloy, George Koudis, Christiane Voigt, and Marc E. J. Stettler. 2022. “Aviation Contrail Climate Effects in the North Atlantic from 2016 to 2021.” Atmospheric Chemistry and Physics 22 (16): 1091935. https://doi.org/10.5194/acp-22-10919-2022.\n",
18
+ "- Teoh, Roger, Ulrich Schumann, Christiane Voigt, Tobias Schripp, Marc Shapiro, Zebediah Engberg, Jarlath Molloy, George Koudis, and Marc E. J. Stettler. 2022. “Targeted Use of Sustainable Aviation Fuel to Maximize Climate Benefits.” Environmental Science & Technology, November. https://doi.org/10.1021/acs.est.2c05781.\n",
19
+ "\n"
17
20
  ]
18
21
  },
19
22
  {
@@ -14,9 +14,8 @@
14
14
  "\n",
15
15
  "Support provided for:\n",
16
16
  "\n",
17
- "- [ERA5](https://www.ecmwf.int/en/forecasts/dataset/ecmwf-reanalysis-v5) via the [Copernicus Data Store (CDS)](https://cds.climate.copernicus.eu/) and locally downloaded files\n",
18
- "- [HRES](https://confluence.ecmwf.int/display/FUG/HRES+-+High-Resolution+Forecast) and [ENS](https://confluence.ecmwf.int/display/FUG/ENS+-+Ensemble+Forecasts?src=contextnavpagetreemode) via [MARS](https://confluence.ecmwf.int/display/UDOC/MARS+user+documentation) and locally downloaded files\n",
19
- "- [IFS](https://www.ecmwf.int/en/publications/ifs-documentation) for locally downloaded files\n"
17
+ "- [ERA5](https://www.ecmwf.int/en/forecasts/dataset/ecmwf-reanalysis-v5) via the [Copernicus Data Store (CDS)](https://cds.climate.copernicus.eu/) using [cdsapi](https://github.com/ecmwf/cdsapi) or user provided files\n",
18
+ "- [HRES](https://confluence.ecmwf.int/display/FUG/HRES+-+High-Resolution+Forecast) and [ENS](https://confluence.ecmwf.int/display/FUG/ENS+-+Ensemble+Forecasts?src=contextnavpagetreemode) via [MARS](https://confluence.ecmwf.int/display/UDOC/MARS+user+documentation) using [ecmwf-api-client](https://github.com/ecmwf/ecmwf-api-client) or user provided files"
20
19
  ]
21
20
  },
22
21
  {
@@ -28,7 +27,7 @@
28
27
  "### Access\n",
29
28
  "\n",
30
29
  "- Requires account with [Copernicus Data Portal](https://cds.climate.copernicus.eu/cdsapp#!/home)\n",
31
- "- Refer to the [CDS API Documentation](https://github.com/ecmwf/cdsapi#configure) for how to create `~/.cdsapirc` file to configure access to CDS.\n",
30
+ "- Provide `url` and `key` credentials on input, or refer to the [CDS API Documentation](https://github.com/ecmwf/cdsapi#configure) for how to create `~/.cdsapirc` file to configure access.\n",
32
31
  "\n",
33
32
  "### Reference\n",
34
33
  "\n",
@@ -82,6 +81,8 @@
82
81
  " time=\"2022-03-01 00:00:00\",\n",
83
82
  " variables=[\"t\", \"q\", \"u\", \"v\", \"w\", \"ciwc\", \"z\", \"cc\"], # supports CF name or short names\n",
84
83
  " pressure_levels=[300, 250, 200],\n",
84
+ " # url=\"https://cds.climate.copernicus.eu/api/v2\",\n",
85
+ " # key=\"<key>\"\n",
85
86
  ")\n",
86
87
  "era5"
87
88
  ]
@@ -123,6 +124,8 @@
123
124
  " \"cc\",\n",
124
125
  " ], # supports CF name or short names\n",
125
126
  " pressure_levels=[300, 250, 200],\n",
127
+ " # url=\"https://cds.climate.copernicus.eu/api/v2\",\n",
128
+ " # key=\"<key>\"\n",
126
129
  ")\n",
127
130
  "era5"
128
131
  ]
@@ -1412,7 +1415,12 @@
1412
1415
  }
1413
1416
  ],
1414
1417
  "source": [
1415
- "era5 = ERA5(time=(\"2022-03-01 00:00:00\", \"2022-03-01 03:00:00\"), variables=[\"tsr\", \"ttr\"])\n",
1418
+ "era5 = ERA5(\n",
1419
+ " time=(\"2022-03-01 00:00:00\", \"2022-03-01 03:00:00\"),\n",
1420
+ " variables=[\"tsr\", \"ttr\"],\n",
1421
+ " # url=\"https://cds.climate.copernicus.eu/api/v2\",\n",
1422
+ " # key=\"<key>\"\n",
1423
+ ")\n",
1416
1424
  "era5"
1417
1425
  ]
1418
1426
  },
@@ -2061,7 +2069,7 @@
2061
2069
  "Users within ECMWF Member and Co-operating States may contact their Computing Representative to obtain access to MARS. \n",
2062
2070
  "All other users may [request a username and password](https://accounts.ecmwf.int/auth/realms/ecmwf/protocol/openid-connect/registrations?client_id=apps&response_type=code&scope=openid%20email&redirect_uri=https://www.ecmwf.int) and then [get an api key](https://api.ecmwf.int/v1/key/).\n",
2063
2071
  "\n",
2064
- "- See [ECMWF API Client documentatino](https://github.com/ecmwf/ecmwf-api-client#configure) to configure local `~/.ecmwfapirc` file:\n",
2072
+ "Provide `url`, `key`, and `email` credentials on input, or see [ECMWF API Client documentation](https://github.com/ecmwf/ecmwf-api-client#configure) to configure local `~/.ecmwfapirc` file:\n",
2065
2073
  "\n",
2066
2074
  "```json\n",
2067
2075
  "{\n",
@@ -2073,7 +2081,7 @@
2073
2081
  "\n",
2074
2082
  "### Reference\n",
2075
2083
  "\n",
2076
- "- [HRES](https://confluence.ecmwf.int/display/FUG/HRES+-+High-Resolution+Forecast) Hi-res forecast\n",
2084
+ "- [HRES](https://confluence.ecmwf.int/display/FUG/HRES+-+High-Resolution+Forecast) High resolution forecast\n",
2077
2085
  "- [ENS](https://confluence.ecmwf.int/display/FUG/ENS+-+Ensemble+Forecasts?src=contextnavpagetreemode) Ensemble forecast"
2078
2086
  ]
2079
2087
  },
@@ -2127,6 +2135,9 @@
2127
2135
  " variables=[\"t\", \"q\", \"u\", \"v\", \"w\", \"z\"],\n",
2128
2136
  " pressure_levels=[300, 250, 200],\n",
2129
2137
  " grid=1,\n",
2138
+ " # url=\"https://api.ecmwf.int/v1\",\n",
2139
+ " # key=\"<key>\"\n",
2140
+ " # email=\"<email>\"\n",
2130
2141
  ")\n",
2131
2142
  "hres"
2132
2143
  ]
@@ -3240,7 +3251,14 @@
3240
3251
  "metadata": {},
3241
3252
  "outputs": [],
3242
3253
  "source": [
3243
- "hres = HRES(time=time, variables=[\"tsr\", \"ttr\"], grid=1)"
3254
+ "hres = HRES(\n",
3255
+ " time=time,\n",
3256
+ " variables=[\"tsr\", \"ttr\"],\n",
3257
+ " grid=1,\n",
3258
+ " # url=\"https://api.ecmwf.int/v1\",\n",
3259
+ " # key=\"<key>\"\n",
3260
+ " # email=\"<email>\"\n",
3261
+ ")"
3244
3262
  ]
3245
3263
  },
3246
3264
  {
@@ -3934,6 +3952,9 @@
3934
3952
  " variables=[\"t\", \"q\"],\n",
3935
3953
  " pressure_levels=[300, 250, 200],\n",
3936
3954
  " forecast_time=\"2022-03-25 12:00:00\",\n",
3955
+ " # url=\"https://api.ecmwf.int/v1\",\n",
3956
+ " # key=\"<key>\"\n",
3957
+ " # email=\"<email>\"\n",
3937
3958
  ")\n",
3938
3959
  "hres"
3939
3960
  ]
@@ -3944,6 +3965,8 @@
3944
3965
  "source": [
3945
3966
  "## IFS\n",
3946
3967
  "\n",
3968
+ "> In development\n",
3969
+ "\n",
3947
3970
  "Integrated Forecasting System from ECMWF\n",
3948
3971
  "\n",
3949
3972
  "- [IFS Documentation](https://www.ecmwf.int/en/publications/ifs-documentation)\n",
@@ -4118,6 +4141,8 @@
4118
4141
  " variables=variables,\n",
4119
4142
  " pressure_levels=[300, 250, 150],\n",
4120
4143
  " cachestore=gcp,\n",
4144
+ " # url=\"https://cds.climate.copernicus.eu/api/v2\",\n",
4145
+ " # key=\"<key>\"\n",
4121
4146
  ")"
4122
4147
  ]
4123
4148
  },
@@ -723,7 +723,7 @@
723
723
  }
724
724
  ],
725
725
  "source": [
726
- "# Air pressure at waypoint, in Pa\n",
726
+ "# Altitude, in ft\n",
727
727
  "fl.altitude_ft"
728
728
  ]
729
729
  },
@@ -56,6 +56,18 @@ See ``[project.optional-dependencies]`` in `pyproject.toml <https://github.com/c
56
56
  for the latest optional dependencies.
57
57
 
58
58
 
59
+ Pre-built wheels
60
+ -----------------
61
+
62
+ Wheels for common platforms are available on `PyPI <https://pypi.org/project/pycontrails/>`__. Currently, wheels are available for:
63
+
64
+ - Linux (x86_64)
65
+ - macOS (x86_64 and arm64)
66
+ - Windows (x86_64)
67
+
68
+ It's possible to build the wheels from source using `Cython <https://cython.org/>`__ and a C compiler with the usual ``pip install`` process. The source distribution on PyPI includes the C files, so it's not necessary to have Cython installed to build from source.
69
+
70
+
59
71
  Extensions
60
72
  ----------
61
73
 
@@ -1,4 +1,4 @@
1
1
  # file generated by setuptools_scm
2
2
  # don't change, don't track in version control
3
- __version__ = version = '0.39.6'
4
- __version_tuple__ = version_tuple = (0, 39, 6)
3
+ __version__ = version = '0.40.1'
4
+ __version_tuple__ = version_tuple = (0, 40, 1)
@@ -1088,8 +1088,8 @@ class Flight(GeoVectorDataset):
1088
1088
  >>> # Intersect and attach
1089
1089
  >>> fl["air_temperature"] = fl.intersect_met(met['air_temperature'])
1090
1090
  >>> fl["air_temperature"]
1091
- array([235.94657215, 235.55773934, 235.56765885, ..., 234.59956144,
1092
- 234.60406387, 234.60845904])
1091
+ array([235.94658, 235.55774, 235.56766, ..., 234.59956, 234.60406,
1092
+ 234.60846], dtype=float32)
1093
1093
 
1094
1094
  >>> # Length (in meters) of waypoints whose temperature exceeds 236K
1095
1095
  >>> fl.length_met("air_temperature", threshold=236)