pycontrails 0.50.1__tar.gz → 0.50.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pycontrails might be problematic. Click here for more details.
- {pycontrails-0.50.1 → pycontrails-0.50.2}/CHANGELOG.md +19 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/PKG-INFO +1 -1
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/GFS.ipynb +1 -1
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/_version.py +2 -2
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/flight.py +97 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/rgi_cython.c +125 -125
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/emissions/emissions.py +2 -2
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/emissions/static/default-engine-uids.csv +1 -1
- pycontrails-0.50.1/pycontrails/models/emissions/static/edb-gaseous-v28c-engines.csv → pycontrails-0.50.2/pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv +49 -11
- pycontrails-0.50.1/pycontrails/models/emissions/static/edb-nvpm-v28c-engines.csv → pycontrails-0.50.2/pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv +90 -54
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/ps_model/ps_aircraft_params.py +13 -1
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/ps_model/ps_grid.py +20 -20
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/ps_model/ps_model.py +1 -1
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/ps_model/ps_operational_limits.py +202 -1
- pycontrails-0.50.2/pycontrails/models/ps_model/static/ps-aircraft-params-20240417.csv +64 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/physics/units.py +2 -2
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/utils/types.py +3 -1
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails.egg-info/PKG-INFO +1 -1
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails.egg-info/SOURCES.txt +3 -3
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_cocip_grid.py +1 -1
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_emissions.py +2 -2
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_flight.py +14 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_ps_model.py +33 -17
- pycontrails-0.50.1/pycontrails/models/ps_model/static/ps-aircraft-params-20240209.csv +0 -63
- {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/dependabot.yaml +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/pull_request_template.md +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/workflows/benchmark.yaml +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/workflows/docs.yaml +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/workflows/doctest.yaml +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/workflows/release.yaml +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/workflows/scorecard.yaml +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/.github/workflows/test.yaml +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/.gitignore +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/.pre-commit-config.yaml +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/.zenodo.json +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/CONTRIBUTING.md +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/LICENSE +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/Makefile +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/NOTICE +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/README.md +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/RELEASE.md +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/_static/css/style.css +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/_static/img/colab.png +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/_static/img/favicon.png +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/_static/img/logo-dark.png +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/_static/img/logo.png +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/_static/pycontrails.bib +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/api.rst +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/changelog.rst +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/conf.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/contributing.rst +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/develop.rst +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/flight.rst +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/index.rst +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/install.rst +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/integrations/ACCF.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/literature.rst +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/meteorology.rst +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/models.rst +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/ARCO-ERA5.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/AircraftPerformance.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/Cache.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/CoCiP.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/ECMWF.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/Flight.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/GOES.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/ISSR.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/Meteorology.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/SAC.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/advection.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/airports.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/data/.gitignore +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/data/flight-ap.csv +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/data/flight-cocip.csv +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/data/flight-fdr.csv +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/data/flight-noisy.csv +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/data/flight.csv +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/flightplan.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/model-levels.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/run-cocip-on-flight.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/run-cocip-with-fdr.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks/specific-humidity-interpolation.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/notebooks.rst +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/observations.rst +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/tutorials.rst +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/docs/utilities.rst +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/aircraft_performance.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/airports.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/cache.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/coordinates.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/datalib.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/fleet.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/flightplan.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/fuel.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/interpolation.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/met.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/met_var.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/models.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/polygon.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/rgi_cython.pyx +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/core/vector.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/ecmwf/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/ecmwf/arco_era5.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/ecmwf/common.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/ecmwf/era5.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/ecmwf/hres.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/ecmwf/ifs.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/ecmwf/variables.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/gfs/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/gfs/gfs.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/gfs/variables.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/goes.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/spire/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/datalib/spire/spire.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/ext/bada.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/ext/cirium.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/ext/empirical_grid.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/ext/synthetic_flight.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/accf.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/cocip.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/cocip_params.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/cocip_uncertainty.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/contrail_properties.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/output_formats.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/radiative_forcing.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/radiative_heating.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/unterstrasser_wake_vortex.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/wake_vortex.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocip/wind_shear.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocipgrid/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocipgrid/cocip_grid.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/cocipgrid/cocip_grid_params.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/dry_advection.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/emissions/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/emissions/black_carbon.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/emissions/ffm2.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/humidity_scaling/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/humidity_scaling/humidity_scaling.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/humidity_scaling/quantiles/era5-quantiles.pq +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/issr.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/pcc.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/pcr.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/ps_model/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/sac.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/models/tau_cirrus.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/physics/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/physics/constants.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/physics/geo.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/physics/jet.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/physics/thermo.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/py.typed +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/utils/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/utils/dependencies.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/utils/iteration.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/utils/json.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails/utils/temp.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails.egg-info/dependency_links.txt +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails.egg-info/requires.txt +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pycontrails.egg-info/top_level.txt +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/pyproject.toml +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/setup.cfg +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/setup.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/_deprecated.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip/Makefile +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip/README.md +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip/benchmark.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip/compare.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip/data.md +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip/output.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip/review.ipynb +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/cocip-fortran/README.md +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/north-atlantic-study/.gcloudignore +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/north-atlantic-study/README.md +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/north-atlantic-study/support.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/benchmark/north-atlantic-study/validate.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/fixtures/cocip-met.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/fixtures/cocip-met2.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/fixtures/ecmwf-met.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/fixtures/gfs-met.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/__init__.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/conftest.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/NOAA_Solar_Calculations_day.csv +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/cocip-contrail-output.json +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/cocip-contrail-output2.json +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/cocip-flight-output.json +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/cocip-flight-output2.json +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/cocip-output-contrail-edges.json +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/cocip-output-flts-20190101-eu.pq +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/flight-cocip2.csv +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/flight-meridian.csv +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/flight-metadata.json +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/flight-spire-data-cleaning.pq +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/flight.csv +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/flt-wypts-20190101-eu.pq +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-20190101-eu.nc +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-accf-pl.nc +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-accf-sl.nc +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-ecmwf-pl.nc +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-ecmwf-sl.nc +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-era5-cocip1.nc +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-era5-cocip2.nc +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/met-gfs.nc +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/polygon-bug.nc +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/rad-20190101-eu.nc +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/rad-era5-cocip1.nc +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/rad-era5-cocip2.nc +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/static/rad-gfs.nc +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_accf.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_airports.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_cache.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_cocip.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_cocip_grid_parity.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_cocip_radiative_forcing.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_cocip_uncertainty.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_coordinates.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_datalib.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_dry_advection.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_dtypes.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_ecmwf.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_fleet.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_flightplan.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_fuel.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_geo.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_gfs.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_goes.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_grid_to_netcdf.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_humidity_scaling.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_init.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_interpolation.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_met.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_met_cache.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_models.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_pcc.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_polygons.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_sac_issr.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_spire.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_tau_cirrus.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_thermo_sac.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_units.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_unterstrasser_wake_vortex.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_utils.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_vector.py +0 -0
- {pycontrails-0.50.1 → pycontrails-0.50.2}/tests/unit/test_zarr.py +0 -0
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
|
|
2
2
|
# Changelog
|
|
3
3
|
|
|
4
|
+
## v0.50.2
|
|
5
|
+
|
|
6
|
+
### Breaking changes
|
|
7
|
+
|
|
8
|
+
- Replaces engine-uid `01P10IA024` with `04P10IA027` (superseded in the IACO EDB).
|
|
9
|
+
|
|
10
|
+
### Features
|
|
11
|
+
|
|
12
|
+
- Adds support for the `E190` aircraft type in the PS model
|
|
13
|
+
- Adds `Flight.distance_to_coords` which takes in a distance along a flight trajectory in meters and returns geodesic coordinates.
|
|
14
|
+
- Adds methods to `ps_operational_limits` to find the maximum and minimum mach numbers for a given set of operating conditions.
|
|
15
|
+
- Updates ICAO aircraft engine emissions databank (EDB) from v28c to v29b.
|
|
16
|
+
|
|
17
|
+
### Internals
|
|
18
|
+
|
|
19
|
+
- New data for gaseous and nvPM emissions for PW812D, PW812GA, RR Trent 7000 with improved nvPM combustor
|
|
20
|
+
- Update nvPM emissions for IAE V2530-A5, PW1500G and PW1900G
|
|
21
|
+
- Update PS model coeffiencts to match the latest version provided by Ian Poll
|
|
22
|
+
|
|
4
23
|
## v0.50.1
|
|
5
24
|
|
|
6
25
|
### Breaking changes
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"\n",
|
|
20
20
|
"- [NOAA GFS](https://registry.opendata.aws/noaa-gfs-bdp-pds/) - AWS Open Data Registry\n",
|
|
21
21
|
"- [NCEI GFS Documentation](https://www.ncei.noaa.gov/products/weather-climate-models/global-forecast)\n",
|
|
22
|
-
"- [NOAA GFS Documentation](https://
|
|
22
|
+
"- [NOAA GFS Documentation](https://vlab.noaa.gov/web/gfs/documentation)\n",
|
|
23
23
|
"- [Parameter definitions](https://www.nco.ncep.noaa.gov/pmb/products/gfs/)\n",
|
|
24
24
|
" \n",
|
|
25
25
|
"See [API Reference](https://py.contrails.org/api.html#gfs) for usage."
|
|
@@ -17,6 +17,7 @@ from pycontrails.core.fuel import Fuel, JetA
|
|
|
17
17
|
from pycontrails.core.vector import AttrDict, GeoVectorDataset, VectorDataDict, VectorDataset
|
|
18
18
|
from pycontrails.physics import constants, geo, units
|
|
19
19
|
from pycontrails.utils import dependencies
|
|
20
|
+
from pycontrails.utils.types import ArrayOrFloat
|
|
20
21
|
|
|
21
22
|
logger = logging.getLogger(__name__)
|
|
22
23
|
|
|
@@ -1112,6 +1113,102 @@ class Flight(GeoVectorDataset):
|
|
|
1112
1113
|
out.data.pop("level", None) # avoid any ambiguity
|
|
1113
1114
|
return out
|
|
1114
1115
|
|
|
1116
|
+
def distance_to_coords(self: Flight, distance: ArrayOrFloat) -> tuple[
|
|
1117
|
+
ArrayOrFloat,
|
|
1118
|
+
ArrayOrFloat,
|
|
1119
|
+
np.intp | npt.NDArray[np.intp],
|
|
1120
|
+
]:
|
|
1121
|
+
"""
|
|
1122
|
+
Convert distance along flight path to geodesic coordinates.
|
|
1123
|
+
|
|
1124
|
+
Will return a tuple containing `(lat, lon, index)`, where index indicates which flight
|
|
1125
|
+
segment contains the returned coordinate.
|
|
1126
|
+
|
|
1127
|
+
Parameters
|
|
1128
|
+
----------
|
|
1129
|
+
distance : ArrayOrFloat
|
|
1130
|
+
Distance along flight path, [:math:`m`]
|
|
1131
|
+
|
|
1132
|
+
Returns
|
|
1133
|
+
-------
|
|
1134
|
+
(ArrayOrFloat, ArrayOrFloat, int | npt.NDArray[int])
|
|
1135
|
+
latitude, longitude, and segment index cooresponding to distance.
|
|
1136
|
+
"""
|
|
1137
|
+
|
|
1138
|
+
# Check if flight crosses antimeridian line
|
|
1139
|
+
lon_ = self["longitude"]
|
|
1140
|
+
lat_ = self["latitude"]
|
|
1141
|
+
sign_ = np.sign(lon_)
|
|
1142
|
+
min_pos = np.min(lon_[sign_ == 1.0], initial=np.inf)
|
|
1143
|
+
max_neg = np.max(lon_[sign_ == -1.0], initial=-np.inf)
|
|
1144
|
+
|
|
1145
|
+
if (180.0 - min_pos) + (180.0 + max_neg) < 180.0 and min_pos < np.inf and max_neg > -np.inf:
|
|
1146
|
+
# In this case, we believe the flight crosses the antimeridian
|
|
1147
|
+
shift = min_pos
|
|
1148
|
+
# So we shift the longitude "chart"
|
|
1149
|
+
lon_ = (lon_ - shift) % 360.0
|
|
1150
|
+
else:
|
|
1151
|
+
shift = None
|
|
1152
|
+
|
|
1153
|
+
# Make a fake flight that flies at constant height so distance is just
|
|
1154
|
+
# distance traveled across groud
|
|
1155
|
+
flat_dataset = Flight(
|
|
1156
|
+
longitude=self.coords["longitude"],
|
|
1157
|
+
latitude=self.coords["latitude"],
|
|
1158
|
+
time=self.coords["time"],
|
|
1159
|
+
level=[self.coords["level"][0] for _ in range(self.size)],
|
|
1160
|
+
)
|
|
1161
|
+
|
|
1162
|
+
lengths = flat_dataset.segment_length()
|
|
1163
|
+
cumulative_lengths = np.nancumsum(lengths)
|
|
1164
|
+
cumulative_lengths = np.insert(cumulative_lengths[:-1], 0, 0)
|
|
1165
|
+
seg_idx: np.intp | npt.NDArray[np.intp]
|
|
1166
|
+
|
|
1167
|
+
if isinstance(distance, float):
|
|
1168
|
+
seg_idx = np.argmax(cumulative_lengths > distance)
|
|
1169
|
+
else:
|
|
1170
|
+
seg_idx = np.argmax(cumulative_lengths > distance.reshape((distance.size, 1)), axis=1)
|
|
1171
|
+
|
|
1172
|
+
# If in the last segment (which has length 0), then just return the last waypoint
|
|
1173
|
+
seg_idx -= 1
|
|
1174
|
+
|
|
1175
|
+
# linear interpolation in lat/lon - assuming the way points are within 100-200km so this
|
|
1176
|
+
# should be accurate enough without needed to reproject or use spherical distance
|
|
1177
|
+
lat1: ArrayOrFloat = lat_[seg_idx]
|
|
1178
|
+
lon1: ArrayOrFloat = lon_[seg_idx]
|
|
1179
|
+
lat2: ArrayOrFloat = lat_[seg_idx + 1]
|
|
1180
|
+
lon2: ArrayOrFloat = lon_[seg_idx + 1]
|
|
1181
|
+
|
|
1182
|
+
dx = distance - cumulative_lengths[seg_idx]
|
|
1183
|
+
fx = dx / lengths[seg_idx]
|
|
1184
|
+
lat = (1 - fx) * lat1 + fx * lat2
|
|
1185
|
+
lon = (1 - fx) * lon1 + fx * lon2
|
|
1186
|
+
|
|
1187
|
+
if isinstance(distance, float):
|
|
1188
|
+
if distance < 0:
|
|
1189
|
+
lat = np.nan
|
|
1190
|
+
lon = np.nan
|
|
1191
|
+
seg_idx = np.intp(0)
|
|
1192
|
+
elif distance >= cumulative_lengths[-1]:
|
|
1193
|
+
lat = lat_[-1]
|
|
1194
|
+
lon = lon_[-1]
|
|
1195
|
+
seg_idx = np.intp(self.size - 1)
|
|
1196
|
+
else:
|
|
1197
|
+
lat[distance < 0] = np.nan
|
|
1198
|
+
lon[distance < 0] = np.nan
|
|
1199
|
+
seg_idx[distance < 0] = 0 # type: ignore
|
|
1200
|
+
|
|
1201
|
+
lat[distance >= cumulative_lengths[-1]] = lat_[-1]
|
|
1202
|
+
lon[distance >= cumulative_lengths[-1]] = lon_[-1]
|
|
1203
|
+
seg_idx[distance >= cumulative_lengths[-1]] = self.size - 1 # type: ignore
|
|
1204
|
+
|
|
1205
|
+
if shift is not None:
|
|
1206
|
+
# We need to translate back to the original chart here
|
|
1207
|
+
lon += shift
|
|
1208
|
+
lon = ((lon + 180.0) % 360.0) - 180.0
|
|
1209
|
+
|
|
1210
|
+
return lat, lon, seg_idx
|
|
1211
|
+
|
|
1115
1212
|
def _geodesic_interpolation(self, geodesic_threshold: float) -> pd.DataFrame | None:
|
|
1116
1213
|
"""Geodesic interpolate between large gaps between waypoints.
|
|
1117
1214
|
|