pycontrails 0.52.3__tar.gz → 0.53.0__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.0}/.github/workflows/doctest.yaml +2 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/.github/workflows/release.yaml +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.0}/.github/workflows/test.yaml +2 -1
- {pycontrails-0.52.3 → pycontrails-0.53.0}/CHANGELOG.md +18 -0
- {pycontrails-0.52.3/pycontrails.egg-info → pycontrails-0.53.0}/PKG-INFO +6 -6
- {pycontrails-0.52.3 → pycontrails-0.53.0}/README.md +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/api.rst +10 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/install.rst +3 -1
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/_version.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/cache.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/flight.py +8 -5
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/flightplan.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/interpolation.py +1 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/met.py +11 -13
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/met_var.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/models.py +5 -5
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/rgi_cython.c +155 -155
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/vector.py +5 -5
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/_leo_utils/vis.py +10 -11
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/_met_utils/metsource.py +13 -11
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/ecmwf/era5.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/ecmwf/era5_model_level.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/ecmwf/hres_model_level.py +3 -3
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/ecmwf/variables.py +3 -3
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/gfs/gfs.py +4 -3
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/landsat.py +10 -9
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/ext/synthetic_flight.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/accf.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/apcemm/apcemm.py +5 -5
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/cocip/cocip.py +3 -3
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/cocip/output_formats.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/cocip/radiative_forcing.py +3 -3
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/cocipgrid/cocip_grid.py +4 -4
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/ps_model/ps_model.py +4 -4
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/sac.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/physics/thermo.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/utils/json.py +16 -18
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/utils/types.py +7 -6
- {pycontrails-0.52.3 → pycontrails-0.53.0/pycontrails.egg-info}/PKG-INFO +6 -6
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails.egg-info/requires.txt +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pyproject.toml +8 -7
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/_deprecated.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_fleet.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_flight.py +3 -1
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_met.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_models.py +3 -3
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_ps_model.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_sac_issr.py +4 -1
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_tau_cirrus.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_units.py +2 -2
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_vector.py +1 -1
- {pycontrails-0.52.3 → pycontrails-0.53.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/.github/dependabot.yaml +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/.github/pull_request_template.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/.github/workflows/docs.yaml +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/.github/workflows/scorecard.yaml +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/.gitignore +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/.pre-commit-config.yaml +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/.zenodo.json +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/CONTRIBUTING.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/LICENSE +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/Makefile +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/NOTICE +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/RELEASE.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/_static/css/style.css +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/_static/img/colab.png +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/_static/img/favicon.png +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/_static/img/logo-dark.png +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/_static/img/logo.png +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/_static/pycontrails.bib +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/changelog.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/conf.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/contributing.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/develop.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/flight.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/index.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/integrations/ACCF.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/integrations/APCEMM.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/literature.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/meteorology.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/models.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/ARCO-ERA5.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/AircraftPerformance.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/Cache.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/CoCiP.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/ECMWF.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/Flight.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/GFS.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/GOES.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/ISSR.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/Landsat.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/Meteorology.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/SAC.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/Sentinel.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/advection.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/airports.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/data/.gitignore +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/data/flight-ap.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/data/flight-cocip.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/data/flight-fdr.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/data/flight-noisy.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/data/flight.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/data/iagos-flight-landsat.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/data/iagos-flight-sentinel.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/flightplan.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/model-levels.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/run-cocip-on-flight.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/run-cocip-with-fdr.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks/specific-humidity-interpolation.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/notebooks.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/observations.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/tutorials.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/docs/utilities.rst +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/aircraft_performance.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/airports.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/coordinates.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/fleet.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/fuel.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/polygon.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/core/rgi_cython.pyx +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/_leo_utils/search.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/_leo_utils/static/bq_roi_query.sql +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/ecmwf/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/ecmwf/arco_era5.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/ecmwf/common.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/ecmwf/hres.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/ecmwf/ifs.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/ecmwf/model_levels.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/gfs/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/gfs/variables.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/goes.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/sentinel.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/datalib/spire.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/ext/bada.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/ext/cirium.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/ext/empirical_grid.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/apcemm/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/apcemm/inputs.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/apcemm/static/apcemm_yaml_template.yaml +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/apcemm/utils.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/cocip/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/cocip/cocip_params.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/cocip/cocip_uncertainty.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/cocip/contrail_properties.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/cocip/radiative_heating.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/cocip/unterstrasser_wake_vortex.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/cocip/wake_vortex.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/cocip/wind_shear.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/cocipgrid/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/cocipgrid/cocip_grid_params.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/dry_advection.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/emissions/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/emissions/black_carbon.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/emissions/emissions.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/emissions/ffm2.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/emissions/static/default-engine-uids.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/humidity_scaling/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/humidity_scaling/humidity_scaling.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/issr.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/pcc.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/pcr.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/ps_model/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/ps_model/ps_aircraft_params.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/ps_model/ps_grid.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/ps_model/ps_operational_limits.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/ps_model/static/ps-aircraft-params-20240524.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/ps_model/static/ps-synonym-list-20240524.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/models/tau_cirrus.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/physics/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/physics/constants.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/physics/geo.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/physics/jet.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/physics/units.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/py.typed +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/utils/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/utils/dependencies.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/utils/iteration.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails/utils/temp.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails.egg-info/SOURCES.txt +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails.egg-info/dependency_links.txt +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/pycontrails.egg-info/top_level.txt +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/setup.cfg +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/setup.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/benchmark/cocip/Makefile +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/benchmark/cocip/README.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/benchmark/cocip/benchmark.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/benchmark/cocip/compare.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/benchmark/cocip/data.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/benchmark/cocip/output.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/benchmark/cocip/review.ipynb +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/benchmark/cocip-fortran/README.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/benchmark/north-atlantic-study/.gcloudignore +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/benchmark/north-atlantic-study/README.md +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/benchmark/north-atlantic-study/support.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/benchmark/north-atlantic-study/validate.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/fixtures/cocip-met.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/fixtures/cocip-met2.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/fixtures/ecmwf-met.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/fixtures/gfs-met.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/__init__.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/conftest.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/NOAA_Solar_Calculations_day.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/cocip-contrail-output.json +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/cocip-contrail-output2.json +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/cocip-flight-output.json +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/cocip-flight-output2.json +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/cocip-output-contrail-edges.json +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/cocip-output-flts-20190101-eu.pq +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/flight-cocip2.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/flight-meridian.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/flight-metadata.json +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/flight-spire-data-cleaning.pq +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/flight.csv +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/flt-wypts-20190101-eu.pq +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/met-20190101-eu.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/met-accf-pl.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/met-accf-sl.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/met-ecmwf-pl.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/met-ecmwf-sl.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/met-era5-cocip1.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/met-era5-cocip2.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/met-gfs.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/polygon-bug.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/rad-20190101-eu.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/rad-era5-cocip1.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/rad-era5-cocip2.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/static/rad-gfs.nc +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_accf.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_airports.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_apcemm.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_cache.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_cocip.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_cocip_grid.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_cocip_grid_parity.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_cocip_radiative_forcing.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_cocip_uncertainty.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_coordinates.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_datalib_metsource.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_dry_advection.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_dtypes.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_ecmwf.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_emissions.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_flightplan.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_fuel.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_geo.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_gfs.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_goes.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_grid_to_netcdf.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_humidity_scaling.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_init.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_interpolation.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_leo.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_met_cache.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_pcc.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_polygons.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_spire.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_thermo_sac.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_unterstrasser_wake_vortex.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/tests/unit/test_utils.py +0 -0
- {pycontrails-0.52.3 → pycontrails-0.53.0}/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,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.53.0
|
|
4
|
+
|
|
5
|
+
### Breaking changes
|
|
6
|
+
|
|
7
|
+
- Drop python 3.9 support per [NEP 29](https://numpy.org/neps/nep-0029-deprecation_policy.html).
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
- 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.)
|
|
12
|
+
|
|
13
|
+
### Fixes
|
|
14
|
+
|
|
15
|
+
- Fix `PycontrailsRegularGridInterpolator` for compatibility with the latest scipy version.
|
|
16
|
+
|
|
17
|
+
### Internals
|
|
18
|
+
|
|
19
|
+
- Defer import of `skimage` and `rasterio`.
|
|
20
|
+
|
|
3
21
|
## v0.52.3
|
|
4
22
|
|
|
5
23
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pycontrails
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.53.0
|
|
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
|
|
|
@@ -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
|
|