pycontrails 0.52.3__tar.gz → 0.53.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.
- {pycontrails-0.52.3 → pycontrails-0.53.1}/.github/workflows/doctest.yaml +2 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/.github/workflows/release.yaml +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.1}/.github/workflows/test.yaml +2 -1
- {pycontrails-0.52.3 → pycontrails-0.53.1}/CHANGELOG.md +28 -4
- {pycontrails-0.52.3/pycontrails.egg-info → pycontrails-0.53.1}/PKG-INFO +6 -6
- {pycontrails-0.52.3 → pycontrails-0.53.1}/README.md +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/api.rst +10 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/install.rst +3 -1
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/ECMWF.ipynb +7 -7
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/_version.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/cache.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/flight.py +8 -5
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/flightplan.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/interpolation.py +1 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/met.py +11 -13
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/met_var.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/models.py +5 -5
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/rgi_cython.c +187 -187
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/vector.py +5 -5
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/_leo_utils/vis.py +10 -11
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/_met_utils/metsource.py +20 -15
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/ecmwf/common.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/ecmwf/era5.py +21 -10
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/ecmwf/era5_model_level.py +15 -8
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/ecmwf/hres_model_level.py +3 -3
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/ecmwf/variables.py +3 -3
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/gfs/gfs.py +4 -3
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/landsat.py +10 -9
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/ext/synthetic_flight.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/accf.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/apcemm/apcemm.py +5 -5
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/cocip/cocip.py +3 -3
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/cocip/output_formats.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/cocip/radiative_forcing.py +3 -3
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/cocipgrid/cocip_grid.py +8 -8
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/ps_model/ps_model.py +4 -4
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/sac.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/physics/thermo.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/utils/json.py +16 -18
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/utils/types.py +7 -6
- {pycontrails-0.52.3 → pycontrails-0.53.1/pycontrails.egg-info}/PKG-INFO +6 -6
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails.egg-info/requires.txt +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pyproject.toml +13 -10
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/_deprecated.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/benchmark/cocip/review.ipynb +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_fleet.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_flight.py +3 -1
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_met.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_models.py +3 -3
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_ps_model.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_sac_issr.py +4 -1
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_tau_cirrus.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_units.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_vector.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/.github/dependabot.yaml +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/.github/pull_request_template.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/.github/workflows/docs.yaml +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/.github/workflows/scorecard.yaml +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/.gitignore +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/.pre-commit-config.yaml +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/.zenodo.json +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/CONTRIBUTING.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/LICENSE +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/Makefile +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/NOTICE +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/RELEASE.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/_static/css/style.css +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/_static/img/colab.png +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/_static/img/favicon.png +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/_static/img/logo-dark.png +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/_static/img/logo.png +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/_static/pycontrails.bib +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/changelog.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/conf.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/contributing.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/develop.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/flight.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/index.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/integrations/ACCF.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/integrations/APCEMM.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/literature.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/meteorology.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/models.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/ARCO-ERA5.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/AircraftPerformance.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/Cache.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/CoCiP.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/Flight.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/GFS.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/GOES.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/ISSR.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/Landsat.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/Meteorology.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/SAC.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/Sentinel.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/advection.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/airports.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/data/.gitignore +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/data/flight-ap.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/data/flight-cocip.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/data/flight-fdr.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/data/flight-noisy.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/data/flight.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/data/iagos-flight-landsat.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/data/iagos-flight-sentinel.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/flightplan.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/model-levels.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/run-cocip-on-flight.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/run-cocip-with-fdr.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks/specific-humidity-interpolation.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/notebooks.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/observations.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/tutorials.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/docs/utilities.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/aircraft_performance.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/airports.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/coordinates.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/fleet.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/fuel.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/polygon.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/core/rgi_cython.pyx +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/_leo_utils/search.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/_leo_utils/static/bq_roi_query.sql +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/ecmwf/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/ecmwf/arco_era5.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/ecmwf/hres.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/ecmwf/ifs.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/ecmwf/model_levels.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/gfs/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/gfs/variables.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/goes.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/sentinel.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/datalib/spire.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/ext/bada.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/ext/cirium.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/ext/empirical_grid.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/apcemm/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/apcemm/inputs.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/apcemm/static/apcemm_yaml_template.yaml +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/apcemm/utils.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/cocip/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/cocip/cocip_params.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/cocip/cocip_uncertainty.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/cocip/contrail_properties.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/cocip/radiative_heating.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/cocip/unterstrasser_wake_vortex.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/cocip/wake_vortex.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/cocip/wind_shear.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/cocipgrid/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/cocipgrid/cocip_grid_params.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/dry_advection.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/emissions/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/emissions/black_carbon.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/emissions/emissions.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/emissions/ffm2.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/emissions/static/default-engine-uids.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/humidity_scaling/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/humidity_scaling/humidity_scaling.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/issr.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/pcc.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/pcr.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/ps_model/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/ps_model/ps_aircraft_params.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/ps_model/ps_grid.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/ps_model/ps_operational_limits.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/ps_model/static/ps-aircraft-params-20240524.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/ps_model/static/ps-synonym-list-20240524.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/models/tau_cirrus.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/physics/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/physics/constants.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/physics/geo.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/physics/jet.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/physics/units.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/py.typed +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/utils/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/utils/dependencies.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/utils/iteration.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails/utils/temp.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails.egg-info/SOURCES.txt +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails.egg-info/dependency_links.txt +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/pycontrails.egg-info/top_level.txt +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/setup.cfg +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/setup.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/benchmark/cocip/Makefile +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/benchmark/cocip/README.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/benchmark/cocip/benchmark.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/benchmark/cocip/compare.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/benchmark/cocip/data.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/benchmark/cocip/output.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/benchmark/cocip-fortran/README.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/benchmark/north-atlantic-study/.gcloudignore +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/benchmark/north-atlantic-study/README.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/benchmark/north-atlantic-study/support.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/benchmark/north-atlantic-study/validate.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/fixtures/cocip-met.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/fixtures/cocip-met2.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/fixtures/ecmwf-met.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/fixtures/gfs-met.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/conftest.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/NOAA_Solar_Calculations_day.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/cocip-contrail-output.json +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/cocip-contrail-output2.json +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/cocip-flight-output.json +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/cocip-flight-output2.json +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/cocip-output-contrail-edges.json +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/cocip-output-flts-20190101-eu.pq +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/flight-cocip2.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/flight-meridian.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/flight-metadata.json +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/flight-spire-data-cleaning.pq +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/flight.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/flt-wypts-20190101-eu.pq +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/met-20190101-eu.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/met-accf-pl.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/met-accf-sl.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/met-ecmwf-pl.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/met-ecmwf-sl.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/met-era5-cocip1.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/met-era5-cocip2.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/met-gfs.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/polygon-bug.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/rad-20190101-eu.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/rad-era5-cocip1.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/rad-era5-cocip2.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/static/rad-gfs.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_accf.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_airports.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_apcemm.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_cache.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_cocip.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_cocip_grid.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_cocip_grid_parity.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_cocip_radiative_forcing.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_cocip_uncertainty.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_coordinates.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_datalib_metsource.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_dry_advection.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_dtypes.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_ecmwf.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_emissions.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_flightplan.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_fuel.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_geo.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_gfs.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_goes.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_grid_to_netcdf.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_humidity_scaling.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_init.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_interpolation.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_leo.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_met_cache.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_pcc.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_polygons.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_spire.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_thermo_sac.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_unterstrasser_wake_vortex.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_utils.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.1}/tests/unit/test_zarr.py +0 -0
|
@@ -42,11 +42,11 @@ jobs:
|
|
|
42
42
|
- name: Build wheels
|
|
43
43
|
uses: pypa/cibuildwheel@v2.20
|
|
44
44
|
env:
|
|
45
|
-
CIBW_BUILD:
|
|
45
|
+
CIBW_BUILD: cp310-* cp311-* cp312-* cp313-*
|
|
46
46
|
CIBW_SKIP: '*-win32 *-manylinux_i686 *-musllinux*'
|
|
47
47
|
CIBW_BUILD_VERBOSITY: 3
|
|
48
48
|
CIBW_ARCHS_MACOS: x86_64 arm64
|
|
49
|
-
CIBW_TEST_SKIP: '*-macosx_arm64'
|
|
49
|
+
CIBW_TEST_SKIP: '*-macosx_arm64 cp313-*'
|
|
50
50
|
# Completely isolate tests to prevent cibuildwheel from importing the
|
|
51
51
|
# source instead of the wheel. This happens when tests/__init__.py is read.
|
|
52
52
|
CIBW_TEST_EXTRAS: "complete,dev"
|
|
@@ -38,7 +38,8 @@ jobs:
|
|
|
38
38
|
fail-fast: false
|
|
39
39
|
matrix:
|
|
40
40
|
os: [ubuntu-latest, windows-latest]
|
|
41
|
-
|
|
41
|
+
# TODO(Fall 2024): Add 3.13 once all dependencies are available
|
|
42
|
+
pyversion: ['3.10', '3.11', '3.12']
|
|
42
43
|
runs-on: ${{ matrix.os }}
|
|
43
44
|
|
|
44
45
|
steps:
|
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.53.1
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- Support `ERA5` downloads from [CDS-Beta](https://cds-beta.climate.copernicus.eu/). The updated interface is backwards compatible with the legacy CDS server. The choice of CDS server is governed by the `url` parameter in the `ERA5` constructor.
|
|
8
|
+
|
|
9
|
+
## v0.53.0
|
|
10
|
+
|
|
11
|
+
### Breaking changes
|
|
12
|
+
|
|
13
|
+
- Drop python 3.9 support per [NEP 29](https://numpy.org/neps/nep-0029-deprecation_policy.html).
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
- Build wheels for [python 3.13](https://peps.python.org/pep-0719/). (These wheels are available on PyPI, but other pycontrails dependencies may not yet support python 3.13.)
|
|
18
|
+
|
|
19
|
+
### Fixes
|
|
20
|
+
|
|
21
|
+
- Fix `PycontrailsRegularGridInterpolator` for compatibility with the latest scipy version.
|
|
22
|
+
|
|
23
|
+
### Internals
|
|
24
|
+
|
|
25
|
+
- Defer import of `skimage` and `rasterio`.
|
|
26
|
+
|
|
3
27
|
## v0.52.3
|
|
4
28
|
|
|
5
29
|
### Features
|
|
@@ -70,13 +94,13 @@
|
|
|
70
94
|
### Features
|
|
71
95
|
|
|
72
96
|
- Add tools for running [APCEMM](https://github.com/MIT-LAE/APCEMM) from within pycontrails. This includes:
|
|
73
|
-
|
|
74
|
-
|
|
97
|
+
- utilities for generating APCEMM input files and running APCEMM (`pycontrails.models.apcemm.utils`)
|
|
98
|
+
- an interface (`pycontrails.models.apcemm.apcemm`) that allows users to run APCEMM as a pycontrails `Model`.
|
|
75
99
|
- Add [APCEMM tutorial notebook](https://py.contrails.org/integrations/APCEMM.html).
|
|
76
100
|
- Add prescribed sedimentation rate to `DryAdvection` model.
|
|
77
101
|
- Add `Landsat` and `Sentinel` datalibs for searching, retrieving, and visualizing Landsat 8-9 and Sentinel-2 imagery. The datalibs include:
|
|
78
|
-
|
|
79
|
-
|
|
102
|
+
- Tools for querying Landsat and Sentinel-2 imagery for intersections with user-defined regions (`landsat.query`, `sentinel.query`) or flights (`landsat.intersect`, `sentinel.intersect`). These tools use BigQuery tables and require a Google Cloud Platform account with access to the BigQuery API.
|
|
103
|
+
- Tools for downloading and visualizing imagery from Landsat (`Landsat`) and Sentinel-2 (`Sentinel`). These tools retrieve data anonymously from Google Cloud Platform storage buckets and can be used without a Google Cloud Platform account.
|
|
80
104
|
- Add tutorial notebooks demonstrating how to use `Landsat` and `Sentinel` datalibs to find flights in high-resolution satellite imagery.
|
|
81
105
|
- Modify `Flight.to_geojson_multilinestring` to make grouping key optional and to support multiple antimeridian crossings.
|
|
82
106
|
- Update the `pycontrails` build system to require `numpy 2.0` per the [official numpy guidelines](https://numpy.org/devdocs/dev/depending_on_numpy.html#numpy-2-0-specific-advice). Note that the runtime requirement for `pycontrails` remains `numpy>=1.22`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pycontrails
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.53.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
|
|
@@ -14,16 +14,16 @@ Classifier: Intended Audience :: Science/Research
|
|
|
14
14
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
15
|
Classifier: Operating System :: OS Independent
|
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.10
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
21
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
22
22
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
23
23
|
Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
|
|
24
24
|
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
25
25
|
Classifier: Typing :: Typed
|
|
26
|
-
Requires-Python: >=3.
|
|
26
|
+
Requires-Python: >=3.10
|
|
27
27
|
Description-Content-Type: text/markdown
|
|
28
28
|
License-File: LICENSE
|
|
29
29
|
License-File: NOTICE
|
|
@@ -36,7 +36,7 @@ Requires-Dist: xarray>=2022.3
|
|
|
36
36
|
Provides-Extra: complete
|
|
37
37
|
Requires-Dist: pycontrails[ecmwf,gcp,gfs,jupyter,pyproj,sat,vis,zarr]; extra == "complete"
|
|
38
38
|
Provides-Extra: dev
|
|
39
|
-
Requires-Dist: black[jupyter]==24.
|
|
39
|
+
Requires-Dist: black[jupyter]==24.8.0; extra == "dev"
|
|
40
40
|
Requires-Dist: dep_license; extra == "dev"
|
|
41
41
|
Requires-Dist: fastparquet>=0.8; extra == "dev"
|
|
42
42
|
Requires-Dist: ipdb>=0.13; extra == "dev"
|
|
@@ -50,7 +50,7 @@ Requires-Dist: pyarrow>=5.0; extra == "dev"
|
|
|
50
50
|
Requires-Dist: pytest>=8.2; extra == "dev"
|
|
51
51
|
Requires-Dist: pytest-cov>=2.11; extra == "dev"
|
|
52
52
|
Requires-Dist: requests>=2.25; extra == "dev"
|
|
53
|
-
Requires-Dist: ruff==0.5.
|
|
53
|
+
Requires-Dist: ruff==0.5.7; extra == "dev"
|
|
54
54
|
Requires-Dist: setuptools; extra == "dev"
|
|
55
55
|
Provides-Extra: docs
|
|
56
56
|
Requires-Dist: doc8>=1.1; extra == "docs"
|
|
@@ -141,7 +141,7 @@ Documentation and examples available at [py.contrails.org](https://py.contrails.
|
|
|
141
141
|
|
|
142
142
|
### Install with pip
|
|
143
143
|
|
|
144
|
-
You can install pycontrails from PyPI with `pip` (Python 3.
|
|
144
|
+
You can install pycontrails from PyPI with `pip` (Python 3.10 or later required):
|
|
145
145
|
|
|
146
146
|
```bash
|
|
147
147
|
$ pip install pycontrails
|
|
@@ -25,7 +25,7 @@ Documentation and examples available at [py.contrails.org](https://py.contrails.
|
|
|
25
25
|
|
|
26
26
|
### Install with pip
|
|
27
27
|
|
|
28
|
-
You can install pycontrails from PyPI with `pip` (Python 3.
|
|
28
|
+
You can install pycontrails from PyPI with `pip` (Python 3.10 or later required):
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
31
|
$ pip install pycontrails
|
|
@@ -151,6 +151,16 @@ Gridded CoCiP
|
|
|
151
151
|
models.cocipgrid.CocipGridParams
|
|
152
152
|
|
|
153
153
|
|
|
154
|
+
Dry Advection
|
|
155
|
+
"""""""""""""
|
|
156
|
+
|
|
157
|
+
.. autosummary::
|
|
158
|
+
:toctree: api/
|
|
159
|
+
|
|
160
|
+
models.dry_advection.DryAdvection
|
|
161
|
+
models.dry_advection.DryAdvectionParams
|
|
162
|
+
|
|
163
|
+
|
|
154
164
|
ACCF
|
|
155
165
|
""""
|
|
156
166
|
|
|
@@ -17,7 +17,7 @@ The conda-forge package includes all optional runtime dependencies.
|
|
|
17
17
|
pip install
|
|
18
18
|
-----------
|
|
19
19
|
|
|
20
|
-
With Python 3.
|
|
20
|
+
With Python 3.10 or later, install the latest release from PyPI using ``pip``:
|
|
21
21
|
|
|
22
22
|
.. code-block:: bash
|
|
23
23
|
|
|
@@ -27,6 +27,8 @@ With Python 3.9 or later, install the latest release from PyPI using ``pip``:
|
|
|
27
27
|
# install with all optional dependencies
|
|
28
28
|
$ pip install "pycontrails[complete]"
|
|
29
29
|
|
|
30
|
+
Wheels are currently built for python 3.10 - 3.13 on Linux, macOS, and Windows. The python 3.13
|
|
31
|
+
wheels are not yet tested in CI/CD and not all runtime dependencies are available for python 3.13.
|
|
30
32
|
|
|
31
33
|
Install the latest development version directly from GitHub:
|
|
32
34
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"\n",
|
|
17
17
|
"Support provided for:\n",
|
|
18
18
|
"\n",
|
|
19
|
-
"- [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",
|
|
19
|
+
"- [ERA5](https://www.ecmwf.int/en/forecasts/dataset/ecmwf-reanalysis-v5) via the [Copernicus Data Store (CDS-Beta)](https://cds-beta.climate.copernicus.eu/) using [cdsapi](https://github.com/ecmwf/cdsapi) or user provided files\n",
|
|
20
20
|
"- [HRES](https://confluence.ecmwf.int/display/FUG/Section+2.1.1.2+Rationale+for+High+Resolution) and [ENS](https://confluence.ecmwf.int/display/FUG/Section+2.1.2.1+ENS+-+Ensemble+Forecasts) 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.\n",
|
|
21
21
|
"\n",
|
|
22
22
|
"For both ERA5 and HRES, we provide interfaces for accessing \"pressure-level data\" (fields pre-interpolated to a fixed set of pressure levels) or \"model-level data\" (fields retrieved on the native vertical grid and [interpolated after retrieval to an arbitrary set of pressure levels](model-levels.ipynb)). We recommend using model-level data when possible, as the resolution of pressure-level data is coarse relative to the vertical scale of ice-supersaturated regions.\n",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"\n",
|
|
33
33
|
"### Access\n",
|
|
34
34
|
"\n",
|
|
35
|
-
"- Requires account with [Copernicus Data Portal](https://cds.climate.copernicus.eu/
|
|
36
|
-
"- Provide `url` and `key` credentials on input, or refer to the [CDS API Documentation](https://
|
|
35
|
+
"- Requires account with [Copernicus Data Portal](https://cds-beta.climate.copernicus.eu/)\n",
|
|
36
|
+
"- Provide `url` and `key` credentials on input, or refer to the [CDS API Documentation](https://cds-beta.climate.copernicus.eu/how-to-api) for how to create `~/.cdsapirc` file to configure access.\n",
|
|
37
37
|
"\n",
|
|
38
38
|
"### Reference\n",
|
|
39
39
|
"\n",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
" time=\"2022-03-01 00:00:00\",\n",
|
|
88
88
|
" variables=[\"t\", \"q\", \"u\", \"v\", \"w\", \"ciwc\", \"z\", \"cc\"], # supports CF name or short names\n",
|
|
89
89
|
" pressure_levels=[200, 250, 300],\n",
|
|
90
|
-
" # url=\"https://cds.climate.copernicus.eu/api
|
|
90
|
+
" # url=\"https://cds-beta.climate.copernicus.eu/api\",\n",
|
|
91
91
|
" # key=\"<key>\"\n",
|
|
92
92
|
")\n",
|
|
93
93
|
"era5"
|
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
" \"cc\",\n",
|
|
133
133
|
" ], # supports CF name or short names\n",
|
|
134
134
|
" pressure_levels=[300, 250, 200],\n",
|
|
135
|
-
" # url=\"https://cds.climate.copernicus.eu/api
|
|
135
|
+
" # url=\"https://cds-beta.climate.copernicus.eu/api\",\n",
|
|
136
136
|
" # key=\"<key>\"\n",
|
|
137
137
|
")\n",
|
|
138
138
|
"era5"
|
|
@@ -1429,7 +1429,7 @@
|
|
|
1429
1429
|
"era5 = ERA5(\n",
|
|
1430
1430
|
" time=(\"2022-03-01 00:00:00\", \"2022-03-01 03:00:00\"),\n",
|
|
1431
1431
|
" variables=[\"tsr\", \"ttr\"],\n",
|
|
1432
|
-
" # url=\"https://cds.climate.copernicus.eu/api
|
|
1432
|
+
" # url=\"https://cds-beta.climate.copernicus.eu/api\",\n",
|
|
1433
1433
|
" # key=\"<key>\"\n",
|
|
1434
1434
|
")\n",
|
|
1435
1435
|
"era5"
|
|
@@ -6072,7 +6072,7 @@
|
|
|
6072
6072
|
" variables=variables,\n",
|
|
6073
6073
|
" pressure_levels=[300, 250, 150],\n",
|
|
6074
6074
|
" cachestore=gcp,\n",
|
|
6075
|
-
" # url=\"https://cds.climate.copernicus.eu/api
|
|
6075
|
+
" # url=\"https://cds-beta.climate.copernicus.eu/api\",\n",
|
|
6076
6076
|
" # key=\"<key>\"\n",
|
|
6077
6077
|
")"
|
|
6078
6078
|
]
|
|
@@ -146,7 +146,7 @@ class CacheStore(ABC):
|
|
|
146
146
|
"""
|
|
147
147
|
|
|
148
148
|
# TODO: run in parallel?
|
|
149
|
-
return [self.put(d, cp) for d, cp in zip(data_path, cache_path)]
|
|
149
|
+
return [self.put(d, cp) for d, cp in zip(data_path, cache_path, strict=True)]
|
|
150
150
|
|
|
151
151
|
# In the three methods below, child classes have a complete docstring.
|
|
152
152
|
|
|
@@ -1356,7 +1356,7 @@ class Flight(GeoVectorDataset):
|
|
|
1356
1356
|
# NOTE: geod.npts does not return the initial or terminal points
|
|
1357
1357
|
lonlats: list[tuple[float, float]] = geod.npts(lon0, lat0, lon1, lat1, n_steps)
|
|
1358
1358
|
|
|
1359
|
-
lons, lats = zip(*lonlats)
|
|
1359
|
+
lons, lats = zip(*lonlats, strict=True)
|
|
1360
1360
|
longitudes.extend(lons)
|
|
1361
1361
|
latitudes.extend(lats)
|
|
1362
1362
|
|
|
@@ -1657,10 +1657,11 @@ def _return_linestring(data: dict[str, npt.NDArray[np.float64]]) -> list[list[fl
|
|
|
1657
1657
|
The list of coordinates
|
|
1658
1658
|
"""
|
|
1659
1659
|
# rounding to reduce the size of resultant json arrays
|
|
1660
|
-
points = zip(
|
|
1660
|
+
points = zip(
|
|
1661
1661
|
np.round(data["longitude"], decimals=4),
|
|
1662
1662
|
np.round(data["latitude"], decimals=4),
|
|
1663
1663
|
np.round(data["altitude"], decimals=4),
|
|
1664
|
+
strict=True,
|
|
1664
1665
|
)
|
|
1665
1666
|
return [list(p) for p in points]
|
|
1666
1667
|
|
|
@@ -1949,7 +1950,9 @@ def _altitude_interpolation_climb_descend_middle(
|
|
|
1949
1950
|
# Form array of cumulative altitude values if the flight were to climb
|
|
1950
1951
|
# at nominal_rocd over each group of nan
|
|
1951
1952
|
cumalt_list = []
|
|
1952
|
-
for start_na_idx, end_na_idx, size in zip(
|
|
1953
|
+
for start_na_idx, end_na_idx, size in zip(
|
|
1954
|
+
start_na_idxs, end_na_idxs, na_group_size, strict=True
|
|
1955
|
+
):
|
|
1953
1956
|
if s[start_na_idx] <= s[end_na_idx]:
|
|
1954
1957
|
cumalt_list.append(np.arange(1, size, dtype=float))
|
|
1955
1958
|
else:
|
|
@@ -2053,7 +2056,7 @@ def filter_altitude(
|
|
|
2053
2056
|
--------
|
|
2054
2057
|
:meth:`traffic.core.flight.Flight.filter`
|
|
2055
2058
|
:func:`scipy.signal.medfilt`
|
|
2056
|
-
"""
|
|
2059
|
+
"""
|
|
2057
2060
|
if not len(altitude_ft):
|
|
2058
2061
|
raise ValueError("Altitude must have non-zero length to filter")
|
|
2059
2062
|
|
|
@@ -2114,7 +2117,7 @@ def filter_altitude(
|
|
|
2114
2117
|
|
|
2115
2118
|
result = np.copy(altitude_ft)
|
|
2116
2119
|
if np.any(start_idxs):
|
|
2117
|
-
for i0, i1 in zip(start_idxs, end_idxs):
|
|
2120
|
+
for i0, i1 in zip(start_idxs, end_idxs, strict=True):
|
|
2118
2121
|
result[i0:i1] = altitude_filt[i0:i1]
|
|
2119
2122
|
|
|
2120
2123
|
# reapply Savitzky-Golay filter to smooth climb and descent
|
|
@@ -76,6 +76,7 @@ class PycontrailsRegularGridInterpolator(scipy.interpolate.RegularGridInterpolat
|
|
|
76
76
|
self.method = _pick_method(scipy.__version__, method)
|
|
77
77
|
self.bounds_error = bounds_error
|
|
78
78
|
self.fill_value = fill_value
|
|
79
|
+
self._spline = None
|
|
79
80
|
|
|
80
81
|
def _prepare_xi_simple(self, xi: npt.NDArray[np.float64]) -> npt.NDArray[np.bool_]:
|
|
81
82
|
"""Run looser version of :meth:`_prepare_xi`.
|
|
@@ -70,12 +70,12 @@ class MetBase(ABC, Generic[XArrayType]):
|
|
|
70
70
|
cachestore: CacheStore | None
|
|
71
71
|
|
|
72
72
|
#: Default dimension order for DataArray or Dataset (x, y, z, t)
|
|
73
|
-
dim_order:
|
|
73
|
+
dim_order: tuple[Hashable, Hashable, Hashable, Hashable] = (
|
|
74
74
|
"longitude",
|
|
75
75
|
"latitude",
|
|
76
76
|
"level",
|
|
77
77
|
"time",
|
|
78
|
-
|
|
78
|
+
)
|
|
79
79
|
|
|
80
80
|
def __repr__(self) -> str:
|
|
81
81
|
data = getattr(self, "data", None)
|
|
@@ -200,10 +200,8 @@ class MetBase(ABC, Generic[XArrayType]):
|
|
|
200
200
|
def _validate_transpose(self) -> None:
|
|
201
201
|
"""Check that data is transposed according to :attr:`dim_order`."""
|
|
202
202
|
|
|
203
|
-
dims_tuple = tuple(self.dim_order)
|
|
204
|
-
|
|
205
203
|
def _check_da(da: xr.DataArray, key: Hashable | None = None) -> None:
|
|
206
|
-
if da.dims !=
|
|
204
|
+
if da.dims != self.dim_order:
|
|
207
205
|
if key is not None:
|
|
208
206
|
msg = (
|
|
209
207
|
f"Data dimension not transposed on variable '{key}'. Initiate with"
|
|
@@ -271,7 +269,7 @@ class MetBase(ABC, Generic[XArrayType]):
|
|
|
271
269
|
self.data["time"] = self.data["time"].astype("datetime64[ns]", copy=False)
|
|
272
270
|
|
|
273
271
|
# sortby to ensure each coordinate has ascending order
|
|
274
|
-
self.data = self.data.sortby(self.dim_order, ascending=True)
|
|
272
|
+
self.data = self.data.sortby(list(self.dim_order), ascending=True)
|
|
275
273
|
|
|
276
274
|
if not self.is_wrapped:
|
|
277
275
|
# Ensure longitude is contained in interval [-180, 180)
|
|
@@ -293,7 +291,7 @@ class MetBase(ABC, Generic[XArrayType]):
|
|
|
293
291
|
self._validate_latitude()
|
|
294
292
|
|
|
295
293
|
# transpose to have ordering (x, y, z, t, ...)
|
|
296
|
-
dim_order = self.dim_order
|
|
294
|
+
dim_order = [*self.dim_order, *(d for d in self.data.dims if d not in self.dim_order)]
|
|
297
295
|
self.data = self.data.transpose(*dim_order)
|
|
298
296
|
|
|
299
297
|
# single level data
|
|
@@ -489,7 +487,7 @@ class MetBase(ABC, Generic[XArrayType]):
|
|
|
489
487
|
self.cachestore = self.cachestore or DiskCacheStore()
|
|
490
488
|
|
|
491
489
|
# group by hour and save one dataset for each hour to temp file
|
|
492
|
-
times, datasets = zip(*dataset.groupby("time", squeeze=False))
|
|
490
|
+
times, datasets = zip(*dataset.groupby("time", squeeze=False), strict=True)
|
|
493
491
|
|
|
494
492
|
# Open ExitStack to control temp_file context manager
|
|
495
493
|
with ExitStack() as stack:
|
|
@@ -920,7 +918,7 @@ class MetDataset(MetBase):
|
|
|
920
918
|
KeyError
|
|
921
919
|
Raises when dataset does not contain variable in ``vars``
|
|
922
920
|
"""
|
|
923
|
-
if isinstance(vars,
|
|
921
|
+
if isinstance(vars, MetVariable | str):
|
|
924
922
|
vars = (vars,)
|
|
925
923
|
|
|
926
924
|
met_keys: list[str] = []
|
|
@@ -1022,7 +1020,7 @@ class MetDataset(MetBase):
|
|
|
1022
1020
|
|
|
1023
1021
|
@overrides
|
|
1024
1022
|
def broadcast_coords(self, name: str) -> xr.DataArray:
|
|
1025
|
-
da = xr.ones_like(self.data[
|
|
1023
|
+
da = xr.ones_like(self.data[next(iter(self.data.keys()))]) * self.data[name]
|
|
1026
1024
|
da.name = name
|
|
1027
1025
|
|
|
1028
1026
|
return da
|
|
@@ -1074,7 +1072,7 @@ class MetDataset(MetBase):
|
|
|
1074
1072
|
coords_vals = [indexes[key].values for key in coords_keys]
|
|
1075
1073
|
coords_meshes = np.meshgrid(*coords_vals, indexing="ij")
|
|
1076
1074
|
raveled_coords = (mesh.ravel() for mesh in coords_meshes)
|
|
1077
|
-
data = dict(zip(coords_keys, raveled_coords))
|
|
1075
|
+
data = dict(zip(coords_keys, raveled_coords, strict=True))
|
|
1078
1076
|
|
|
1079
1077
|
out = vector_module.GeoVectorDataset(data, copy=False)
|
|
1080
1078
|
for key, da in self.data.items():
|
|
@@ -1865,7 +1863,7 @@ class MetDataArray(MetBase):
|
|
|
1865
1863
|
cachestore = cachestore or DiskCacheStore()
|
|
1866
1864
|
chunks = chunks or {}
|
|
1867
1865
|
data = _load(hash, cachestore, chunks)
|
|
1868
|
-
return cls(data[
|
|
1866
|
+
return cls(data[next(iter(data.data_vars))])
|
|
1869
1867
|
|
|
1870
1868
|
@property
|
|
1871
1869
|
def proportion(self) -> float:
|
|
@@ -2258,7 +2256,7 @@ class MetDataArray(MetBase):
|
|
|
2258
2256
|
-----
|
|
2259
2257
|
Uses the `scikit-image Marching Cubes <https://scikit-image.org/docs/dev/auto_examples/edges/plot_marching_cubes.html>`_
|
|
2260
2258
|
algorithm to reconstruct a surface from the point-cloud like arrays.
|
|
2261
|
-
"""
|
|
2259
|
+
"""
|
|
2262
2260
|
try:
|
|
2263
2261
|
from skimage import measure
|
|
2264
2262
|
except ModuleNotFoundError as e:
|
|
@@ -22,7 +22,7 @@ class MetVariable:
|
|
|
22
22
|
- `NCEP Grib v2 Code Table <https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_table4-2.shtml>`_
|
|
23
23
|
|
|
24
24
|
Used for defining support parameters in a grib-like fashion.
|
|
25
|
-
"""
|
|
25
|
+
"""
|
|
26
26
|
|
|
27
27
|
#: Short variable name.
|
|
28
28
|
#: Chosen for greatest consistency between data sources.
|
|
@@ -11,7 +11,7 @@ import warnings
|
|
|
11
11
|
from abc import ABC, abstractmethod
|
|
12
12
|
from collections.abc import Sequence
|
|
13
13
|
from dataclasses import dataclass, fields
|
|
14
|
-
from typing import Any, NoReturn, TypeVar,
|
|
14
|
+
from typing import Any, NoReturn, TypeVar, overload
|
|
15
15
|
|
|
16
16
|
import numpy as np
|
|
17
17
|
import numpy.typing as npt
|
|
@@ -30,13 +30,13 @@ from pycontrails.utils.types import type_guard
|
|
|
30
30
|
logger = logging.getLogger(__name__)
|
|
31
31
|
|
|
32
32
|
#: Model input source types
|
|
33
|
-
ModelInput =
|
|
33
|
+
ModelInput = MetDataset | GeoVectorDataset | Flight | Sequence[Flight] | None
|
|
34
34
|
|
|
35
35
|
#: Model output source types
|
|
36
|
-
ModelOutput =
|
|
36
|
+
ModelOutput = MetDataArray | MetDataset | GeoVectorDataset | Flight | list[Flight]
|
|
37
37
|
|
|
38
38
|
#: Model attribute source types
|
|
39
|
-
SourceType =
|
|
39
|
+
SourceType = MetDataset | GeoVectorDataset | Flight | Fleet
|
|
40
40
|
|
|
41
41
|
_Source = TypeVar("_Source")
|
|
42
42
|
|
|
@@ -453,7 +453,7 @@ class Model(ABC):
|
|
|
453
453
|
return Fleet.from_seq(source)
|
|
454
454
|
|
|
455
455
|
# Raise error if source is not a MetDataset or GeoVectorDataset
|
|
456
|
-
if not isinstance(source,
|
|
456
|
+
if not isinstance(source, MetDataset | GeoVectorDataset):
|
|
457
457
|
msg = f"Unknown source type: {type(source)}"
|
|
458
458
|
raise TypeError(msg)
|
|
459
459
|
|