pycontrails 0.57.0__tar.gz → 0.59.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.57.0 → pycontrails-0.59.0}/.github/workflows/release.yaml +2 -2
- {pycontrails-0.57.0 → pycontrails-0.59.0}/.github/workflows/scorecard.yaml +2 -2
- {pycontrails-0.57.0 → pycontrails-0.59.0}/.github/workflows/test.yaml +1 -1
- {pycontrails-0.57.0 → pycontrails-0.59.0}/CHANGELOG.md +30 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/Makefile +1 -0
- {pycontrails-0.57.0/pycontrails.egg-info → pycontrails-0.59.0}/PKG-INFO +5 -6
- {pycontrails-0.57.0 → pycontrails-0.59.0}/README.md +1 -1
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/api.rst +12 -2
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/install.rst +3 -2
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/GOES.ipynb +4 -4
- pycontrails-0.59.0/docs/notebooks/GRUAN.ipynb +1054 -0
- pycontrails-0.59.0/docs/notebooks/run-cocip-on-flight.ipynb +1539 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/observations.rst +5 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/_version.py +3 -3
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/aircraft_performance.py +1 -1
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/cache.py +2 -2
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/fleet.py +2 -7
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/flight.py +2 -7
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/interpolation.py +45 -67
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/met.py +62 -37
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/polygon.py +3 -3
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/rgi_cython.c +624 -2170
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/rgi_cython.pyx +0 -144
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/vector.py +3 -8
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/_met_utils/metsource.py +4 -7
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/ecmwf/common.py +2 -2
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/ecmwf/hres.py +2 -2
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/ecmwf/ifs.py +1 -1
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/gfs/gfs.py +1 -1
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/goes.py +10 -3
- pycontrails-0.59.0/pycontrails/datalib/gruan.py +343 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/himawari/header_struct.py +1 -1
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/himawari/himawari.py +24 -7
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/leo_utils/sentinel_metadata.py +9 -9
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/ext/synthetic_flight.py +2 -2
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/cocip/cocip_uncertainty.py +1 -1
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/cocip/contrail_properties.py +1 -1
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/cocip/output_formats.py +1 -1
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/cocipgrid/cocip_grid.py +3 -3
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/dry_advection.py +1 -1
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/extended_k15.py +4 -4
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/humidity_scaling/humidity_scaling.py +2 -2
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/ps_model/ps_grid.py +2 -2
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/sac.py +1 -1
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/tau_cirrus.py +1 -1
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/physics/thermo.py +4 -4
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/utils/iteration.py +1 -1
- {pycontrails-0.57.0 → pycontrails-0.59.0/pycontrails.egg-info}/PKG-INFO +5 -6
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails.egg-info/SOURCES.txt +3 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails.egg-info/requires.txt +1 -2
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pyproject.toml +23 -9
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_cocip.py +13 -27
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_dtypes.py +2 -2
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_goes.py +23 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_grid_to_netcdf.py +1 -1
- pycontrails-0.59.0/tests/unit/test_gruan.py +143 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_interpolation.py +7 -9
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_met.py +20 -0
- pycontrails-0.57.0/docs/notebooks/run-cocip-on-flight.ipynb +0 -1532
- {pycontrails-0.57.0 → pycontrails-0.59.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/.github/dependabot.yaml +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/.github/pull_request_template.md +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/.github/workflows/docs.yaml +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/.github/workflows/doctest.yaml +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/.gitignore +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/.pre-commit-config.yaml +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/.zenodo.json +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/CONTRIBUTING.md +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/LICENSE +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/NOTICE +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/RELEASE.md +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/_static/css/style.css +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/_static/img/colab.png +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/_static/img/favicon.png +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/_static/img/logo-dark.png +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/_static/img/logo.png +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/_static/pycontrails.bib +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/changelog.rst +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/conf.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/contributing.rst +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/develop.rst +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/flight.rst +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/index.rst +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/integrations/ACCF.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/integrations/APCEMM.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/literature.rst +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/meteorology.rst +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/models.rst +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/ARCO-ERA5.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/AircraftPerformance.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/Cache.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/CoCiP.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/CoCiPGrid.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/ECMWF.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/Flight.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/GFS.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/Himawari.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/ISSR.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/Landsat.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/Meteorology.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/SAC.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/Sentinel.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/advection.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/airports.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/data/.gitignore +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/data/flight-ap.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/data/flight-cocip.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/data/flight-fdr.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/data/flight-noisy.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/data/flight.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/data/iagos-flight-landsat.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/data/iagos-flight-sentinel.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/flightplan.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/model-levels.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/run-cocip-with-fdr.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks/specific-humidity-interpolation.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/notebooks.rst +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/tutorials.rst +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/docs/utilities.rst +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/airports.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/coordinates.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/flightplan.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/fuel.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/met_var.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/core/models.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/ecmwf/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/ecmwf/arco_era5.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/ecmwf/era5.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/ecmwf/era5_model_level.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/ecmwf/hres_model_level.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/ecmwf/model_levels.py +1 -1
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/ecmwf/static/model_level_dataframe_v20240418.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/ecmwf/variables.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/geo_utils.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/gfs/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/gfs/variables.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/himawari/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/landsat.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/leo_utils/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/leo_utils/correction.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/leo_utils/landsat_metadata.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/leo_utils/search.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/leo_utils/static/bq_roi_query.sql +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/leo_utils/vis.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/sentinel.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/spire/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/spire/exceptions.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/datalib/spire/spire.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/ext/bada.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/ext/cirium.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/ext/empirical_grid.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/accf.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/apcemm/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/apcemm/apcemm.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/apcemm/inputs.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/apcemm/static/apcemm_yaml_template.yaml +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/apcemm/utils.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/cocip/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/cocip/cocip.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/cocip/cocip_params.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/cocip/radiative_forcing.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/cocip/radiative_heating.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/cocip/unterstrasser_wake_vortex.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/cocip/wake_vortex.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/cocip/wind_shear.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/cocipgrid/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/cocipgrid/cocip_grid_params.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/emissions/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/emissions/black_carbon.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/emissions/emissions.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/emissions/ffm2.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/emissions/static/default-engine-uids.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/emissions/static/edb-gaseous-v29b-engines.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/emissions/static/edb-nvpm-v29b-engines.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/humidity_scaling/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/humidity_scaling/quantiles/era5-model-level-quantiles.pq +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/humidity_scaling/quantiles/era5-pressure-level-quantiles.pq +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/issr.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/pcc.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/pcr.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/ps_model/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/ps_model/ps_aircraft_params.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/ps_model/ps_model.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/ps_model/ps_operational_limits.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/ps_model/static/ps-aircraft-params-20250328.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/models/ps_model/static/ps-synonym-list-20250328.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/physics/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/physics/constants.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/physics/geo.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/physics/jet.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/physics/static/iata-cargo-load-factors-20250221.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/physics/static/iata-passenger-load-factors-20250221.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/physics/units.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/py.typed +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/utils/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/utils/dependencies.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/utils/json.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/utils/temp.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails/utils/types.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails.egg-info/dependency_links.txt +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/pycontrails.egg-info/top_level.txt +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/setup.cfg +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/setup.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/_deprecated.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/benchmark/cocip/Makefile +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/benchmark/cocip/README.md +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/benchmark/cocip/benchmark.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/benchmark/cocip/compare.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/benchmark/cocip/data.md +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/benchmark/cocip/output.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/benchmark/cocip/review.ipynb +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/benchmark/cocip-fortran/README.md +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/benchmark/north-atlantic-study/.gcloudignore +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/benchmark/north-atlantic-study/README.md +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/benchmark/north-atlantic-study/support.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/benchmark/north-atlantic-study/validate.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/fixtures/cocip-met.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/fixtures/cocip-met2.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/fixtures/ecmwf-met.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/fixtures/gfs-met.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/__init__.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/conftest.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/NOAA_Solar_Calculations_day.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/cocip-contrail-output.json +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/cocip-contrail-output2.json +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/cocip-flight-output.json +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/cocip-flight-output2.json +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/cocip-output-contrail-edges.json +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/cocip-output-flts-20190101-eu.pq +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/flight-cocip2.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/flight-meridian.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/flight-metadata.json +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/flight-spire-data-cleaning.pq +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/flight.csv +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/flt-wypts-20190101-eu.pq +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/met-20190101-eu.nc +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/met-accf-pl.nc +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/met-accf-sl.nc +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/met-ecmwf-lnsp.nc +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/met-ecmwf-ml.nc +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/met-ecmwf-pl.nc +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/met-ecmwf-sl.nc +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/met-era5-cocip1.nc +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/met-era5-cocip2.nc +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/met-gfs.nc +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/polygon-bug.nc +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/rad-20190101-eu.nc +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/rad-era5-cocip1.nc +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/rad-era5-cocip2.nc +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/static/rad-gfs.nc +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_accf.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_airports.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_apcemm.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_cache.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_cocip_grid.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_cocip_grid_parity.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_cocip_radiative_forcing.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_cocip_uncertainty.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_coordinates.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_datalib_metsource.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_dry_advection.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_ecmwf.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_emissions.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_fleet.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_flight.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_flightplan.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_fuel.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_geo.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_gfs.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_himawari.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_humidity_scaling.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_init.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_leo.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_met_cache.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_models.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_pcc.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_polygons.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_ps_model.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_sac_issr.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_spire.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_tau_cirrus.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_thermo_sac.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_units.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_unterstrasser_wake_vortex.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_utils.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_vector.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_vpm.py +0 -0
- {pycontrails-0.57.0 → pycontrails-0.59.0}/tests/unit/test_zarr.py +0 -0
|
@@ -42,11 +42,11 @@ jobs:
|
|
|
42
42
|
- name: Build wheels
|
|
43
43
|
uses: pypa/cibuildwheel@v3.2
|
|
44
44
|
env:
|
|
45
|
-
CIBW_BUILD:
|
|
45
|
+
CIBW_BUILD: cp311-* cp312-* cp313-* cp314-*
|
|
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 cp314-*'
|
|
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"
|
|
@@ -30,7 +30,7 @@ jobs:
|
|
|
30
30
|
- uses: actions/checkout@v5
|
|
31
31
|
|
|
32
32
|
- name: Run OpenSSF Security Scorecard
|
|
33
|
-
uses: ossf/scorecard-action@v2.4.
|
|
33
|
+
uses: ossf/scorecard-action@v2.4.3
|
|
34
34
|
with:
|
|
35
35
|
results_file: results.sarif
|
|
36
36
|
results_format: sarif
|
|
@@ -38,6 +38,6 @@ jobs:
|
|
|
38
38
|
|
|
39
39
|
# required for Code scanning alerts
|
|
40
40
|
- name: "Upload SARIF results to code scanning"
|
|
41
|
-
uses: github/codeql-action/upload-sarif@
|
|
41
|
+
uses: github/codeql-action/upload-sarif@v4
|
|
42
42
|
with:
|
|
43
43
|
sarif_file: results.sarif
|
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.59.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- Add lightweight `GRUAN` datalib for accessing GRUAN radiosonde data via FTP. See the [GRUAN notebook](https://py.contrails.org/notebooks/GRUAN.html) for usage examples.
|
|
8
|
+
|
|
9
|
+
### Breaking changes
|
|
10
|
+
|
|
11
|
+
- Updated error handling in `goes.gcs_goes_path` to raise a `FileNotFoundError` if any of the requested bands are not available. Previous versions raised a `RuntimeError` only in cases where no requested bands were available.
|
|
12
|
+
|
|
13
|
+
### Fixes
|
|
14
|
+
|
|
15
|
+
- Ensure call to `np.clip` in `contrail_properties.initial_ice_particle_number` is backwards compatible with numpy < 2.1.
|
|
16
|
+
|
|
17
|
+
## 0.58.0
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
- Build wheels for python 3.14. These are not yet tested in the CI (not all dependencies support python 3.14 yet).
|
|
22
|
+
|
|
23
|
+
### Breaking changes
|
|
24
|
+
|
|
25
|
+
- Drop support for python 3.10 per [NEP 29](https://numpy.org/neps/nep-0029-deprecation_policy.html).
|
|
26
|
+
- Require scipy >= 1.12 to better support the `PycontrailsRegularGridInterpolator` interface.
|
|
27
|
+
|
|
28
|
+
### Fixes
|
|
29
|
+
|
|
30
|
+
- When instantiated with `copy=True`, `MetDataset` and `MetDataArray` now remove duplicate dimension values, preserving only the first occurrence of each. Previously, duplicates were silently retained (such duplicates are not expected with typical gridded weather data). With `copy=False`, a `ValueError` is raised if duplicate dimension values are present.
|
|
31
|
+
- Update `PycontrailsRegularGridInterpolator` for improved compatibility with `scipy.interpolate.RegularGridInterpolator`. All methods now delegate to SciPy’s implementation, except for `method="linear"`, which retains a fast-path optimized in `PycontrailsRegularGridInterpolator`.
|
|
32
|
+
|
|
3
33
|
## 0.57.0
|
|
4
34
|
|
|
5
35
|
### Features
|
|
@@ -205,6 +205,7 @@ nb-test: ensure-era5-cached nb-clean-check nb-format-check nb-check-links
|
|
|
205
205
|
--ignore=docs/notebooks/model-levels.ipynb \
|
|
206
206
|
--ignore=docs/notebooks/ARCO-ERA5.ipynb \
|
|
207
207
|
--ignore=docs/notebooks/Sentinel.ipynb \
|
|
208
|
+
--ignore=docs/notebooks/GRUAN.ipynb \
|
|
208
209
|
docs/notebooks docs/integrations
|
|
209
210
|
|
|
210
211
|
# Check for broken links in notebooks
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pycontrails
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.59.0
|
|
4
4
|
Summary: Python library for modeling aviation climate impacts
|
|
5
5
|
Author-email: "Contrails.org" <py@contrails.org>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -13,29 +13,28 @@ Classifier: Development Status :: 4 - Beta
|
|
|
13
13
|
Classifier: Intended Audience :: Science/Research
|
|
14
14
|
Classifier: Operating System :: OS Independent
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
17
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.12
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
20
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
21
21
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
22
|
Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
|
|
23
23
|
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
24
24
|
Classifier: Typing :: Typed
|
|
25
|
-
Requires-Python: >=3.
|
|
25
|
+
Requires-Python: >=3.11
|
|
26
26
|
Description-Content-Type: text/markdown
|
|
27
27
|
License-File: LICENSE
|
|
28
28
|
License-File: NOTICE
|
|
29
29
|
Requires-Dist: dask>=2022.3
|
|
30
30
|
Requires-Dist: numpy>=1.22
|
|
31
31
|
Requires-Dist: pandas>=2.0
|
|
32
|
-
Requires-Dist: scipy>=1.
|
|
32
|
+
Requires-Dist: scipy>=1.12
|
|
33
33
|
Requires-Dist: typing-extensions>=4.5; python_version < "3.12"
|
|
34
34
|
Requires-Dist: xarray>=2022.3
|
|
35
35
|
Provides-Extra: complete
|
|
36
36
|
Requires-Dist: pycontrails[ecmwf,gcp,gfs,jupyter,pyproj,sat,vis,zarr]; extra == "complete"
|
|
37
37
|
Provides-Extra: dev
|
|
38
|
-
Requires-Dist: fastparquet>=0.8; extra == "dev"
|
|
39
38
|
Requires-Dist: ipdb>=0.13; extra == "dev"
|
|
40
39
|
Requires-Dist: memory_profiler; extra == "dev"
|
|
41
40
|
Requires-Dist: mypy>=1.8; extra == "dev"
|
|
@@ -140,7 +139,7 @@ Documentation and examples available at [py.contrails.org](https://py.contrails.
|
|
|
140
139
|
|
|
141
140
|
### Install with pip
|
|
142
141
|
|
|
143
|
-
You can install pycontrails from PyPI with `pip` (Python 3.
|
|
142
|
+
You can install pycontrails from PyPI with `pip` (Python 3.11 or later required):
|
|
144
143
|
|
|
145
144
|
```bash
|
|
146
145
|
$ 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.11 or later required):
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
31
|
$ pip install pycontrails
|
|
@@ -83,13 +83,15 @@ ARCO ERA5
|
|
|
83
83
|
datalib.ecmwf.arco_era5
|
|
84
84
|
|
|
85
85
|
|
|
86
|
-
|
|
87
|
-
""""
|
|
86
|
+
Geostationary Satellites
|
|
87
|
+
""""""""""""""""""""""""
|
|
88
88
|
|
|
89
89
|
.. autosummary::
|
|
90
90
|
:toctree: api/
|
|
91
91
|
|
|
92
92
|
datalib.goes
|
|
93
|
+
datalib.himawari
|
|
94
|
+
datalib.geo_utils
|
|
93
95
|
|
|
94
96
|
|
|
95
97
|
Low Earth Orbit Satellites
|
|
@@ -105,6 +107,14 @@ Low Earth Orbit Satellites
|
|
|
105
107
|
datalib.leo_utils.sentinel_metadata
|
|
106
108
|
|
|
107
109
|
|
|
110
|
+
GRUAN Radiosondes
|
|
111
|
+
"""""""""""""""""
|
|
112
|
+
.. autosummary::
|
|
113
|
+
:toctree: api/
|
|
114
|
+
|
|
115
|
+
datalib.gruan.GRUAN
|
|
116
|
+
|
|
117
|
+
|
|
108
118
|
Models
|
|
109
119
|
------
|
|
110
120
|
|
|
@@ -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.11 or later, install the latest release from PyPI using ``pip``:
|
|
21
21
|
|
|
22
22
|
.. code-block:: bash
|
|
23
23
|
|
|
@@ -27,7 +27,8 @@ With Python 3.10 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
|
|
30
|
+
Wheels are currently built for python 3.11 - 3.14 and tested for
|
|
31
|
+
python 3.11 - 3.13 on Linux, macOS, and Windows.
|
|
31
32
|
|
|
32
33
|
Install the latest development version directly from GitHub:
|
|
33
34
|
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"\n",
|
|
31
31
|
"By default, any GOES data will be cached on disk. Set `cachestore=None` to disable caching when defining the `GOES` object.\n",
|
|
32
32
|
"\n",
|
|
33
|
-
"We download data for
|
|
33
|
+
"We download data for bands 1, 2, and 3. These are needed for creating a true color image."
|
|
34
34
|
]
|
|
35
35
|
},
|
|
36
36
|
{
|
|
@@ -692,7 +692,7 @@
|
|
|
692
692
|
}
|
|
693
693
|
],
|
|
694
694
|
"source": [
|
|
695
|
-
"handler = goes.GOES(region=\"conus\",
|
|
695
|
+
"handler = goes.GOES(region=\"conus\", bands=(\"C01\", \"C02\", \"C03\"))\n",
|
|
696
696
|
"\n",
|
|
697
697
|
"# Download the data\n",
|
|
698
698
|
"da = handler.get(\"2023-02-05T18:00:00\")\n",
|
|
@@ -3849,7 +3849,7 @@
|
|
|
3849
3849
|
"\n",
|
|
3850
3850
|
"The ash color scheme was originally developed to visualize volcanic ash. It is also useful for visualizing contrails.\n",
|
|
3851
3851
|
"\n",
|
|
3852
|
-
"We download data for
|
|
3852
|
+
"We download data for bands 11, 14, and 15 to create an ash color image."
|
|
3853
3853
|
]
|
|
3854
3854
|
},
|
|
3855
3855
|
{
|
|
@@ -3858,7 +3858,7 @@
|
|
|
3858
3858
|
"metadata": {},
|
|
3859
3859
|
"outputs": [],
|
|
3860
3860
|
"source": [
|
|
3861
|
-
"handler = goes.GOES(region=\"conus\",
|
|
3861
|
+
"handler = goes.GOES(region=\"conus\", bands=(\"C11\", \"C14\", \"C15\"))\n",
|
|
3862
3862
|
"da = handler.get(\"2023-02-09T18:00:00\")\n",
|
|
3863
3863
|
"\n",
|
|
3864
3864
|
"rgb, src_crs, src_extent = goes.extract_visualization(da, color_scheme=\"ash\")"
|