dkist 1.9.2__tar.gz → 1.10.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.
- {dkist-1.9.2 → dkist-1.10.0}/.circleci/config.yml +6 -6
- {dkist-1.9.2 → dkist-1.10.0}/.cruft.json +2 -2
- {dkist-1.9.2 → dkist-1.10.0}/.github/workflows/main.yml +9 -9
- {dkist-1.9.2 → dkist-1.10.0}/.pre-commit-config.yaml +3 -3
- {dkist-1.9.2 → dkist-1.10.0}/.rtd-environment.yml +1 -1
- {dkist-1.9.2 → dkist-1.10.0}/CHANGELOG.rst +44 -2
- {dkist-1.9.2/dkist.egg-info → dkist-1.10.0}/PKG-INFO +19 -19
- {dkist-1.9.2 → dkist-1.10.0}/dkist/_version.py +2 -2
- {dkist-1.9.2 → dkist-1.10.0}/dkist/conftest.py +6 -4
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/api_search_values.json +1 -1
- {dkist-1.9.2 → dkist-1.10.0}/dkist/dataset/loader.py +3 -10
- {dkist-1.9.2 → dkist-1.10.0}/dkist/dataset/tests/test_crop_dataset.py +27 -19
- {dkist-1.9.2 → dkist-1.10.0}/dkist/dataset/tests/test_tiled_dataset.py +83 -4
- {dkist-1.9.2 → dkist-1.10.0}/dkist/dataset/tiled_dataset.py +95 -31
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/converters/dataset.py +6 -1
- dkist-1.10.0/dkist/io/asdf/converters/tiled_dataset.py +32 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/entry_points.py +2 -0
- dkist-1.10.0/dkist/io/asdf/resources/manifests/dkist-1.3.0.yaml +14 -0
- dkist-1.10.0/dkist/io/asdf/resources/schemas/tiled_dataset-1.1.0.yaml +38 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/tests/test_dataset.py +2 -1
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/level_1_dataset_schema.yaml +1 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/loaders.py +13 -13
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/tests/strategies.py +1 -1
- {dkist-1.9.2 → dkist-1.10.0}/dkist/tests/figure_hashes_mpl_391_ft_261_astropy_611_animators_111_ndcube_222.json +6 -2
- {dkist-1.9.2 → dkist-1.10.0}/dkist/tests/figure_hashes_mpl_dev_ft_261_astropy_dev_animators_dev_ndcube_dev.json +6 -2
- {dkist-1.9.2 → dkist-1.10.0/dkist.egg-info}/PKG-INFO +19 -19
- {dkist-1.9.2 → dkist-1.10.0}/dkist.egg-info/SOURCES.txt +8 -2
- {dkist-1.9.2 → dkist-1.10.0}/dkist.egg-info/requires.txt +17 -17
- dkist-1.10.0/docs/examples/index.rst +11 -0
- {dkist-1.9.2/docs/howto_guides → dkist-1.10.0/docs/examples}/reproject_vbi_mosaic.md +17 -43
- dkist-1.10.0/docs/howto_guides/index.rst +13 -0
- dkist-1.10.0/docs/howto_guides/sample_data.rst +43 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/index.rst +13 -3
- dkist-1.10.0/docs/whatsnew/1.10.rst +43 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/whatsnew/index.rst +1 -0
- {dkist-1.9.2 → dkist-1.10.0}/pyproject.toml +20 -20
- {dkist-1.9.2 → dkist-1.10.0}/pytest.ini +4 -24
- dkist-1.10.0/tools/update_sample_data.py +102 -0
- {dkist-1.9.2 → dkist-1.10.0}/tox.ini +7 -6
- dkist-1.9.2/dkist/io/asdf/converters/tiled_dataset.py +0 -20
- dkist-1.9.2/docs/howto_guides/index.rst +0 -11
- {dkist-1.9.2 → dkist-1.10.0}/.circleci/codecov_upload.sh +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.circleci/early_exit.sh +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.codecov.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.codespell-dict.txt +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.codespellrc +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.coveragerc +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.flake8 +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.github/ISSUE_TEMPLATE/BUG_REPORT.md +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.github/dependabot.yml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.github/workflows/build_workshop.yml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.github/workflows/codspeed.yml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.github/workflows/prepare-release.yml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.github/workflows/sub_package_update.yml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.gitignore +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.gitmodules +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.isort.cfg +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.readthedocs.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/.ruff.toml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/CODE_OF_CONDUCT.md +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/CONTRIBUTING.md +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/LICENSE.rst +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/MANIFEST.in +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/README.rst +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/changelog/README.rst +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/conftest.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/config/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/README.rst +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/VISP_HEADER.hdr +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/_sample.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/sample.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/5d_gwcs.asdf +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/AGLKO-inv.ecsv +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/EIT/efz20040301.000010_s.fits +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/EIT/efz20040301.020010_s.fits +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/EIT/efz20040301.030011_s.fits +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/EIT/efz20040301.040010_s.fits +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/EIT/efz20040301.050010_s.fits +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/EIT/efz20040301.060010_s.fits +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/EIT/efz20040301.080010_s.fits +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/EIT/efz20040301.090010_s.fits +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/EIT/efz20040301.100010_s.fits +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/EIT/efz20040301.110010_s.fits +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/EIT/efz20040301.120010_s.fits +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/EIT/eit_test_dataset.asdf +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/croppable_cryo.asdf.gz +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/croppable_visp.asdf.gz +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/eit_dataset-0.1.0.asdf +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/eit_dataset-0.2.0.asdf +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/eit_dataset-0.3.0.asdf +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/eit_dataset-1.0.0.asdf +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/eit_dataset-1.1.0.asdf +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/eit_dataset-1.2.0.asdf +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/globus_operation_ls_response.json +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/globus_search_response.json +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/large_vbi.asdf.gz +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/large_visp.asdf.gz +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/small_visp/0.fits +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/small_visp/1.fits +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/small_visp/2.fits +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/small_visp/test_visp.asdf +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/test_old_wcs_BRMQY.asdf +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/test_tiled_dataset-1.0.0_dataset-1.0.0.asdf +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/test_tiled_dataset-1.0.0_dataset-1.1.0.asdf +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/test_tiled_dataset-1.0.0_dataset-1.2.0.asdf +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/test/visp_no_headers.asdf.gz +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/tests/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/data/tests/test_sample.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/dataset/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/dataset/dataset.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/dataset/tests/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/dataset/tests/test_dataset.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/dataset/tests/test_load_dataset.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/dataset/tests/test_plotting.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/dataset/utils.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/dkist.cfg +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/extern/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/converters/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/converters/file_manager.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/converters/models.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/manifests/dkist-0.9.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/manifests/dkist-1.0.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/manifests/dkist-1.1.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/manifests/dkist-1.2.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/manifests/dkist-wcs-1.0.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/manifests/dkist-wcs-1.1.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/manifests/dkist-wcs-1.2.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/manifests/dkist-wcs-1.3.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/asymmetric_mapping_model-1.0.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/asymmetric_mapping_model-1.1.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/coupled_compound_model-1.0.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/coupled_compound_model-1.1.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/dataset-0.1.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/dataset-0.2.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/dataset-0.3.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/dataset-1.0.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/dataset-1.1.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/file_manager-1.0.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/ravel_model-1.0.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/ravel_model-1.1.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/tiled_dataset-0.1.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/tiled_dataset-1.0.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/varying_celestial_transform-1.0.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/resources/schemas/varying_celestial_transform-1.1.0.yaml +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/tests/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/tests/conftest.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/tests/test_models.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/asdf/tests/test_tiled_dataset.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/dask_utils.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/file_manager.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/tests/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/tests/test_file_manager.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/io/tests/test_fits.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/logger.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/attr_walker.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/attrs.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/attrs_values.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/client.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/globus/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/globus/auth.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/globus/endpoints.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/globus/tests/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/globus/tests/conftest.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/globus/tests/test_auth.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/globus/tests/test_endpoints.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/globus/tests/test_transfer.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/globus/transfer.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/helpers.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/tests/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/tests/conftest.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/tests/test_attr_walker.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/tests/test_attrs.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/tests/test_attrs_values.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/tests/test_client.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/net/tests/test_helpers.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/tests/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/tests/generate_aia_dataset.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/tests/generate_eit_test_dataset.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/tests/generate_eit_tiled_dataset.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/tests/helpers.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/tests/test_benchmarks.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/tests/test_logger.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/utils/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/utils/_model_to_graphviz.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/utils/decorators.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/utils/exceptions.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/utils/inventory.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/utils/sysinfo.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/utils/tests/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/utils/tests/test_inventory.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/utils/tests/test_sysinfo.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/version.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/wcs/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/wcs/models.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/wcs/tests/__init__.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/wcs/tests/test_coupled_compound_model.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist/wcs/tests/test_models.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist.egg-info/dependency_links.txt +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist.egg-info/entry_points.txt +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist.egg-info/not-zip-safe +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/dkist.egg-info/top_level.txt +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/Makefile +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/conf.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/developer.rst +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/installation.rst +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/logo/icon_square.jpg +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/make.bat +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/reference.rst +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/topic_guides/index.rst +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/topic_guides/level1data.rst +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/topic_guides/loading.rst +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/topic_guides/net.rst +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/topic_guides/usertools.rst +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/tutorial/1_astropy_and_sunpy.md +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/tutorial/2_search_and_asdf_download.md +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/tutorial/3_the_dataset.md +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/tutorial/4_more_dataset.md +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/tutorial/5_downloading_data.md +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/tutorial/6_visualization.md +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/tutorial/index.md +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/whatsnew/1.0.rst +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/whatsnew/1.1.rst +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/docs/whatsnew/changelog.rst +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/setup.cfg +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/setup.py +0 -0
- {dkist-1.9.2 → dkist-1.10.0}/tools/build_workshop_materials.py +0 -0
|
@@ -32,7 +32,7 @@ jobs:
|
|
|
32
32
|
jobname:
|
|
33
33
|
type: string
|
|
34
34
|
docker:
|
|
35
|
-
- image: cimg/python:3.
|
|
35
|
+
- image: cimg/python:3.13
|
|
36
36
|
environment:
|
|
37
37
|
TOXENV=<< parameters.jobname >>
|
|
38
38
|
steps:
|
|
@@ -54,7 +54,7 @@ jobs:
|
|
|
54
54
|
jobname:
|
|
55
55
|
type: string
|
|
56
56
|
docker:
|
|
57
|
-
- image: cimg/python:3.
|
|
57
|
+
- image: cimg/python:3.13
|
|
58
58
|
environment:
|
|
59
59
|
TOXENV: << parameters.jobname >>
|
|
60
60
|
GIT_SSH_COMMAND: ssh -i ~/.ssh/id_rsa_7b8fc81c13a3b446ec9aa50d3f626978
|
|
@@ -96,16 +96,16 @@ workflows:
|
|
|
96
96
|
matrix:
|
|
97
97
|
parameters:
|
|
98
98
|
jobname:
|
|
99
|
-
- "
|
|
100
|
-
- "
|
|
99
|
+
- "py313-figure"
|
|
100
|
+
- "py313-figure-devdeps"
|
|
101
101
|
|
|
102
102
|
- deploy-reference-images:
|
|
103
103
|
name: baseline-<< matrix.jobname >>
|
|
104
104
|
matrix:
|
|
105
105
|
parameters:
|
|
106
106
|
jobname:
|
|
107
|
-
- "
|
|
108
|
-
- "
|
|
107
|
+
- "py313-figure"
|
|
108
|
+
- "py313-figure-devdeps"
|
|
109
109
|
requires:
|
|
110
110
|
- << matrix.jobname >>
|
|
111
111
|
filters:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"template": "https://github.com/sunpy/package-template",
|
|
3
|
-
"commit": "
|
|
3
|
+
"commit": "29db3569a215e43fa8c5114d3dbcb98b6a9caac0",
|
|
4
4
|
"checkout": null,
|
|
5
5
|
"context": {
|
|
6
6
|
"cookiecutter": {
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
".github/workflows/sub_package_update.yml"
|
|
33
33
|
],
|
|
34
34
|
"_template": "https://github.com/sunpy/package-template",
|
|
35
|
-
"_commit": "
|
|
35
|
+
"_commit": "29db3569a215e43fa8c5114d3dbcb98b6a9caac0"
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
"directory": null
|
|
@@ -33,22 +33,22 @@ jobs:
|
|
|
33
33
|
tests:
|
|
34
34
|
uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@main
|
|
35
35
|
with:
|
|
36
|
-
default_python: '3.
|
|
36
|
+
default_python: '3.13'
|
|
37
37
|
coverage: 'codecov'
|
|
38
38
|
posargs: '--color=yes'
|
|
39
39
|
envs: |
|
|
40
|
+
- linux: py313
|
|
40
41
|
- linux: py312
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
- linux: py310-oldestdeps
|
|
42
|
+
- windows: py312-online
|
|
43
|
+
- macos: py311
|
|
44
|
+
- linux: py311-oldestdeps
|
|
45
45
|
secrets:
|
|
46
46
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
47
47
|
|
|
48
48
|
docs:
|
|
49
49
|
uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@main
|
|
50
50
|
with:
|
|
51
|
-
default_python: '3.
|
|
51
|
+
default_python: '3.12'
|
|
52
52
|
coverage: 'codecov'
|
|
53
53
|
envs: |
|
|
54
54
|
- linux: build_docs-notebooks
|
|
@@ -65,7 +65,7 @@ jobs:
|
|
|
65
65
|
- uses: actions/checkout@v4
|
|
66
66
|
- uses: actions/setup-python@v5
|
|
67
67
|
with:
|
|
68
|
-
python-version: '3.
|
|
68
|
+
python-version: '3.13'
|
|
69
69
|
- run: python -m pip install -U --user build
|
|
70
70
|
- run: python -m build . --sdist
|
|
71
71
|
- run: python -m pip install -U --user twine
|
|
@@ -77,7 +77,7 @@ jobs:
|
|
|
77
77
|
coverage: 'codecov'
|
|
78
78
|
posargs: '--color=yes'
|
|
79
79
|
envs: |
|
|
80
|
-
- linux:
|
|
80
|
+
- linux: py313-devdeps
|
|
81
81
|
secrets:
|
|
82
82
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
83
83
|
|
|
@@ -90,7 +90,7 @@ jobs:
|
|
|
90
90
|
)
|
|
91
91
|
uses: OpenAstronomy/github-actions-workflows/.github/workflows/publish_pure_python.yml@main
|
|
92
92
|
with:
|
|
93
|
-
python-version: '3.
|
|
93
|
+
python-version: '3.13'
|
|
94
94
|
test_extras: tests
|
|
95
95
|
test_command: pytest --pyargs dkist -k "not test_fail"
|
|
96
96
|
# We have to work around a github runner bug here: https://github.com/actions/runner/issues/2788#issuecomment-2145922705
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
repos:
|
|
2
2
|
# This should be before any formatting hooks like isort
|
|
3
3
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
4
|
-
rev: "v0.
|
|
4
|
+
rev: "v0.9.4"
|
|
5
5
|
hooks:
|
|
6
6
|
- id: ruff
|
|
7
7
|
args: ["--fix"]
|
|
8
8
|
- repo: https://github.com/PyCQA/isort
|
|
9
|
-
rev:
|
|
9
|
+
rev: 6.0.0
|
|
10
10
|
hooks:
|
|
11
11
|
- id: isort
|
|
12
12
|
exclude: ".*(.fits|.fts|.fit|.header|.txt|tca.*|extern.*|dkist/extern)$"
|
|
@@ -26,7 +26,7 @@ repos:
|
|
|
26
26
|
- id: mixed-line-ending
|
|
27
27
|
exclude: ".*(.fits|.fts|.fit|.header|.txt|tca.*|.asdf|.json|.hdr)$"
|
|
28
28
|
- repo: https://github.com/codespell-project/codespell
|
|
29
|
-
rev: v2.
|
|
29
|
+
rev: v2.4.1
|
|
30
30
|
hooks:
|
|
31
31
|
- id: codespell
|
|
32
32
|
args: [ "--write-changes", "-D", "-", "-D", ".codespell-dict.txt"]
|
|
@@ -1,5 +1,39 @@
|
|
|
1
|
-
1.
|
|
2
|
-
|
|
1
|
+
1.10.0 (2025-02-07)
|
|
2
|
+
===================
|
|
3
|
+
|
|
4
|
+
Backwards Incompatible Changes
|
|
5
|
+
------------------------------
|
|
6
|
+
|
|
7
|
+
- This release of ``dkist`` includes both scheduled bumps to our dependencies as well as a special bump of gwcs to version 0.24, and associated dependencies.
|
|
8
|
+
The version upgrade to gwcs 0.24 fixes the inverse transform (world to pixel) for VISP WCSs. (`#507 <https://github.com/DKISTDC/dkist/pull/507>`__)
|
|
9
|
+
|
|
10
|
+
* Python >= 3.11
|
|
11
|
+
* dask >= 2023.2
|
|
12
|
+
* gwcs >= 0.24
|
|
13
|
+
* matplotlib >= 3.7
|
|
14
|
+
* ndcube >= 2.1
|
|
15
|
+
* numpy >= 1.25
|
|
16
|
+
* parfive >= 2.1
|
|
17
|
+
* sunpy >= 5.0.7
|
|
18
|
+
* asdf >= 3.3
|
|
19
|
+
* asdf-astropy >= 0.5
|
|
20
|
+
* asdf-coordinate-schemas >= 0.3
|
|
21
|
+
* asdf-transform-schemas >= 0.5
|
|
22
|
+
* asdf-wcs-schemas >= 0.4
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
Features
|
|
26
|
+
--------
|
|
27
|
+
|
|
28
|
+
- Add a ``figure=`` keyword argument to `TiledDataset.plot` and make it default to the current figure. (`#491 <https://github.com/DKISTDC/dkist/pull/491>`__)
|
|
29
|
+
- Add `swap_tile_limits` kwarg to `TiledDataset.plot`.
|
|
30
|
+
This option allows the user to invert plot limits on either axes to account for WCS values that decrease compared to the pixel axes. (`#504 <https://github.com/DKISTDC/dkist/pull/504>`__)
|
|
31
|
+
- Update grid orientation of `TiledDataset.plot`.
|
|
32
|
+
The grid now has MAXIS1 columns and MAXIS2 rows where MINDEX1 corresponds to column and MINDEX2 corresponds to row.
|
|
33
|
+
Additionally, the origin for the grid is now in the lower-left as opposed to the upper-left. (`#504 <https://github.com/DKISTDC/dkist/pull/504>`__)
|
|
34
|
+
- ``TiledDataset`` now has a ``.meta`` dictionary like that of ``Dataset``. (`#513 <https://github.com/DKISTDC/dkist/pull/513>`__)
|
|
35
|
+
- History of the ADSF file, such as versions of packages and extensions used when writing it are now exposed ``TiledDataset.meta["history"]`` and ``Dataset.meta["history"]``. (`#513 <https://github.com/DKISTDC/dkist/pull/513>`__)
|
|
36
|
+
|
|
3
37
|
|
|
4
38
|
Bug Fixes
|
|
5
39
|
---------
|
|
@@ -7,6 +41,14 @@ Bug Fixes
|
|
|
7
41
|
- Improve the ASDF detection code so out of date ASDF filenames generated by the DKIST data center are skipped if a newer filename is present. (`#503 <https://github.com/DKISTDC/dkist/pull/503>`__)
|
|
8
42
|
|
|
9
43
|
|
|
44
|
+
Improved Documentation
|
|
45
|
+
----------------------
|
|
46
|
+
|
|
47
|
+
- Update the :ref:`dkist:examples:vbi-reproject` example for improvements in ``TiledDataset``. (`#491 <https://github.com/DKISTDC/dkist/pull/491>`__)
|
|
48
|
+
- Add an examples section for tutorial style self-contained examples. (`#491 <https://github.com/DKISTDC/dkist/pull/491>`__)
|
|
49
|
+
- Add a how-to guide on redownloading the sample data with Fido / Globus. (`#491 <https://github.com/DKISTDC/dkist/pull/491>`__)
|
|
50
|
+
|
|
51
|
+
|
|
10
52
|
1.9.1 (2025-01-15)
|
|
11
53
|
==================
|
|
12
54
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: dkist
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.10.0
|
|
4
4
|
Summary: DKIST User Tools
|
|
5
5
|
Author-email: NSO / AURA <stuart@cadair.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/DKISTDC/dkist
|
|
@@ -9,27 +9,27 @@ Project-URL: Download, https://pypi.org/project/dkist
|
|
|
9
9
|
Project-URL: Documentation, https://docs.dkist.nso.edu/projects/python-tools/en/stable/
|
|
10
10
|
Project-URL: Changelog, https://docs.dkist.nso.edu/projects/python-tools/en/stable/whatsnew/changelog.html
|
|
11
11
|
Project-URL: Issue Tracker, https://github.com/DKISTDC/dkist/issues
|
|
12
|
-
Requires-Python: >=3.
|
|
12
|
+
Requires-Python: >=3.11
|
|
13
13
|
Description-Content-Type: text/x-rst
|
|
14
14
|
License-File: LICENSE.rst
|
|
15
|
-
Requires-Dist: aiohttp>=3.
|
|
16
|
-
Requires-Dist: asdf>=
|
|
17
|
-
Requires-Dist: asdf-astropy>=0.
|
|
18
|
-
Requires-Dist: asdf-coordinates-schemas>=0.
|
|
19
|
-
Requires-Dist: asdf-standard>=1.0
|
|
20
|
-
Requires-Dist: asdf-transform-schemas>=0.
|
|
21
|
-
Requires-Dist: asdf-wcs-schemas>=0.
|
|
22
|
-
Requires-Dist: astropy>=
|
|
23
|
-
Requires-Dist: dask[array]>=
|
|
15
|
+
Requires-Dist: aiohttp>=3.9
|
|
16
|
+
Requires-Dist: asdf>=3.3.0
|
|
17
|
+
Requires-Dist: asdf-astropy>=0.5.0
|
|
18
|
+
Requires-Dist: asdf-coordinates-schemas>=0.3.0
|
|
19
|
+
Requires-Dist: asdf-standard>=1.1.0
|
|
20
|
+
Requires-Dist: asdf-transform-schemas>=0.5.0
|
|
21
|
+
Requires-Dist: asdf-wcs-schemas>=0.4.0
|
|
22
|
+
Requires-Dist: astropy>=6.0
|
|
23
|
+
Requires-Dist: dask[array]>=2023.2.0
|
|
24
24
|
Requires-Dist: globus-sdk>=3.0
|
|
25
|
-
Requires-Dist: gwcs>=0.
|
|
26
|
-
Requires-Dist: matplotlib>=3.
|
|
27
|
-
Requires-Dist: ndcube[plotting,reproject]>=2.
|
|
28
|
-
Requires-Dist: numpy>=1.
|
|
29
|
-
Requires-Dist: parfive[ftp]>=1
|
|
25
|
+
Requires-Dist: gwcs>=0.24.0
|
|
26
|
+
Requires-Dist: matplotlib>=3.7
|
|
27
|
+
Requires-Dist: ndcube[plotting,reproject]>=2.1
|
|
28
|
+
Requires-Dist: numpy>=1.25
|
|
29
|
+
Requires-Dist: parfive[ftp]>=2.1
|
|
30
30
|
Requires-Dist: platformdirs>=3.0
|
|
31
|
-
Requires-Dist: sunpy[asdf,net]>=
|
|
32
|
-
Requires-Dist: tqdm>=4.
|
|
31
|
+
Requires-Dist: sunpy[asdf,net]>=5.0.7
|
|
32
|
+
Requires-Dist: tqdm>=4.65
|
|
33
33
|
Provides-Extra: tests
|
|
34
34
|
Requires-Dist: pytest; extra == "tests"
|
|
35
35
|
Requires-Dist: pytest-doctestplus; extra == "tests"
|
|
@@ -54,7 +54,7 @@ Requires-Dist: sphinx-astropy; extra == "docs"
|
|
|
54
54
|
Requires-Dist: sphinx-gallery; extra == "docs"
|
|
55
55
|
Requires-Dist: pytest; extra == "docs"
|
|
56
56
|
Requires-Dist: sphinx_autodoc_typehints; extra == "docs"
|
|
57
|
-
Requires-Dist: dkist-sphinx-theme>=
|
|
57
|
+
Requires-Dist: dkist-sphinx-theme>=2.0; extra == "docs"
|
|
58
58
|
Requires-Dist: sphinx-design; extra == "docs"
|
|
59
59
|
Requires-Dist: myst-nb; extra == "docs"
|
|
60
60
|
Requires-Dist: ipywidgets; extra == "docs"
|
|
@@ -305,7 +305,8 @@ def simple_tiled_dataset(dataset):
|
|
|
305
305
|
for ds in datasets:
|
|
306
306
|
ds.meta["inventory"] = dataset.meta["inventory"]
|
|
307
307
|
dataset_array = np.array(datasets).reshape((2,2))
|
|
308
|
-
|
|
308
|
+
meta = {"inventory": dataset.meta["inventory"]}
|
|
309
|
+
return TiledDataset(dataset_array, meta=meta)
|
|
309
310
|
|
|
310
311
|
|
|
311
312
|
@pytest.fixture
|
|
@@ -420,8 +421,9 @@ def croppable_visp_dataset(tmp_path_factory):
|
|
|
420
421
|
|
|
421
422
|
|
|
422
423
|
@pytest.fixture(scope="session")
|
|
423
|
-
def croppable_cryo_dataset():
|
|
424
|
+
def croppable_cryo_dataset(tmp_path_factory):
|
|
425
|
+
cryodir = tmp_path_factory.mktemp("data")
|
|
424
426
|
with gzip.open(Path(rootdir) / "croppable_cryo.asdf.gz", mode="rb") as gfo:
|
|
425
|
-
with open(
|
|
427
|
+
with open(cryodir / "croppable_cryo.asdf", mode="wb") as afo:
|
|
426
428
|
afo.write(gfo.read())
|
|
427
|
-
return load_dataset(
|
|
429
|
+
return load_dataset(cryodir / "croppable_cryo.asdf")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"parameterValues":[{"parameterName":"createDateMin","values":{"minValue":"2022-12-08T19:07:55.038280","maxValue":"2025-
|
|
1
|
+
{"parameterValues":[{"parameterName":"createDateMin","values":{"minValue":"2022-12-08T19:07:55.038280","maxValue":"2025-02-01T03:44:31.791568"}},{"parameterName":"createDateMax","values":{"minValue":"2022-12-08T19:07:55.038280","maxValue":"2025-02-01T03:44:31.791568"}},{"parameterName":"endTimeMin","values":{"minValue":"2022-02-23T20:48:55.393500","maxValue":"2024-11-08T22:02:14.064417"}},{"parameterName":"endTimeMax","values":{"minValue":"2022-02-23T20:48:55.393500","maxValue":"2024-11-08T22:02:14.064417"}},{"parameterName":"exposureTimeMin","values":{"minValue":0.037,"maxValue":1380.2332394366197}},{"parameterName":"exposureTimeMax","values":{"minValue":0.037,"maxValue":1380.2332394366197}},{"parameterName":"instrumentNames","values":{"categoricalValues":["VBI","CRYO-NIRSP","VISP"]}},{"parameterName":"qualityAverageFriedParameterMin","values":{"minValue":0.01695005847191685,"maxValue":2.6520787500175156e+30}},{"parameterName":"qualityAverageFriedParameterMax","values":{"minValue":0.01695005847191685,"maxValue":2.6520787500175156e+30}},{"parameterName":"qualityAveragePolarimetricAccuracyMin","values":{"minValue":0.14787299538416715,"maxValue":263.313656131021}},{"parameterName":"qualityAveragePolarimetricAccuracyMax","values":{"minValue":0.14787299538416715,"maxValue":263.313656131021}},{"parameterName":"startTimeMin","values":{"minValue":"2022-02-23T19:05:32.338002","maxValue":"2024-11-08T21:40:00.522500"}},{"parameterName":"startTimeMax","values":{"minValue":"2022-02-23T19:05:32.338002","maxValue":"2024-11-08T21:40:00.522500"}},{"parameterName":"targetTypes","values":{"categoricalValues":["coronalhole","activecorona","quietcorona","prominence","sunspot","spicules","quietsun","plages","unknown","filament"]}},{"parameterName":"averageDatasetSpectralSamplingMin","values":{"minValue":0.000540156130946172,"maxValue":0.004605031614270178}},{"parameterName":"averageDatasetSpectralSamplingMax","values":{"minValue":0.000540156130946172,"maxValue":0.004605031614270178}},{"parameterName":"averageDatasetSpatialSamplingMin","values":{"minValue":0.0,"maxValue":12388.04306084}},{"parameterName":"averageDatasetSpatialSamplingMax","values":{"minValue":0.0,"maxValue":12388.04306084}},{"parameterName":"averageDatasetTemporalSamplingMin","values":{"minValue":2.66666599999823,"maxValue":5263.145059399398}},{"parameterName":"averageDatasetTemporalSamplingMax","values":{"minValue":2.66666599999823,"maxValue":5263.145059399398}},{"parameterName":"highLevelSoftwareVersion","values":{"categoricalValues":["Alakai_10-0","Pono_6.1.5","Pono_2.1.0","Alakai_5-1","Pono_3.1.0","Pono_8.0.0","Alakai_11.1.0","Alakai_6-0","Alakai_8-0","Alakai_7-0","Pono_7.0.0","Pono_1.0.0","Alakai_3-0","Alakai_4-0","Pono_9.1.0"]}},{"parameterName":"workflowName","values":{"categoricalValues":["l0_to_l1_visp","l0_to_l1_cryonirsp_sp","l0_to_l1_cryonirsp_ci","l0_to_l1_vbi_summit-calibrated"]}},{"parameterName":"workflowVersion","values":{"categoricalValues":["1.18.6","2.16.7","1.18.0","2.0.2","1.11.1","2.20.9","2.19.5","1.2.1","2.7.5","2.19.4","2.3.1","2.19.3","1.15.0","1.0.0","1.15.1","1.3.5","1.18.4","2.16.0","1.2.0","2.10.2","2.7.4","1.18.8","2.10.3","2.20.8","2.16.4","1.4.15","1.1.7","2.17.0","0.16.0","1.3.2","1.17.5","1.1.10","2.15.0","2.20.7","2.7.2","2.10.15","1.4.9","1.1.2","2.7.0","2.19.1","2.20.5","2.20.10","2.10.1","2.7.3","1.12.1","2.10.12","1.1.5","1.3.3","2.6.1","2.10.13","2.19.2","2.0.1","1.18.5","1.4.8","1.8.2","2.9.0","2.10.7","2.3.0","2.10.0","1.17.1","1.13.0","2.20.6","1.14.7","1.4.11","2.20.3","2.13.1","1.4.1"]}},{"parameterName":"headerDataUnitCreationDateMin","values":{"minValue":"2022-12-08T17:30:30.462000","maxValue":"2025-02-01T03:21:22.091000"}},{"parameterName":"headerDataUnitCreationDateMax","values":{"minValue":"2022-12-08T17:30:30.462000","maxValue":"2025-02-01T03:21:22.091000"}},{"parameterName":"headerVersion","values":{"categoricalValues":["4.3.0","4.6.0","4.0.0","4.1.1","3.4.0","3.9.0","4.7.0","4.10.0","3.5.0","4.2.0","3.6.0","3.3.0","3.0.0","3.7.1","3.8.1","4.5.0"]}},{"parameterName":"spectralLines","values":{"categoricalValues":["Na I D2 (589.0 nm)","Sr I (460.73 nm)","Ca II (854.21 nm)","Fe I (630.15 nm)","Ca II K (393.37 nm)","Ca II H (396.85 nm)","Na I D1 (589.59 nm)","Mg I b1 (517.27 nm)","Fe I (630.25 nm)","Fe XIII (1079.8 nm)","Fe XIII (1074.7 nm)","H epsilon (397.0 nm)","Fe I (525.04 nm)","H beta (486.13 nm)","He I (1083.0 nm)","H alpha (656.28 nm)"]}}]}
|
|
@@ -22,12 +22,6 @@ except ImportError:
|
|
|
22
22
|
ASDF_FILENAME_PATTERN = r"^(?P<instrument>[A-Z-]+)_L1_(?P<timestamp>\d{8}T\d{6})_(?P<datasetid>[A-Z]{5,})(?P<suffix>_user_tools|_metadata)?.asdf$"
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
def asdf_open_memory_mapping_kwarg(memmap: bool) -> dict:
|
|
26
|
-
if asdf.__version__ > "3.1.0":
|
|
27
|
-
return {"memmap": memmap}
|
|
28
|
-
return {"copy_arrays": not memmap}
|
|
29
|
-
|
|
30
|
-
|
|
31
25
|
@singledispatch
|
|
32
26
|
def load_dataset(target):
|
|
33
27
|
"""
|
|
@@ -108,9 +102,7 @@ def _load_from_results(results):
|
|
|
108
102
|
return _load_from_iterable(results)
|
|
109
103
|
|
|
110
104
|
|
|
111
|
-
|
|
112
|
-
@load_dataset.register(list)
|
|
113
|
-
@load_dataset.register(tuple)
|
|
105
|
+
@load_dataset.register(tuple | list)
|
|
114
106
|
def _load_from_iterable(iterable):
|
|
115
107
|
"""
|
|
116
108
|
A list or tuple of valid inputs to ``load_dataset``.
|
|
@@ -243,8 +235,9 @@ def _load_from_asdf(filepath):
|
|
|
243
235
|
try:
|
|
244
236
|
with importlib_resources.as_file(importlib_resources.files("dkist.io") / "level_1_dataset_schema.yaml") as schema_path:
|
|
245
237
|
with asdf.open(filepath, custom_schema=schema_path.as_posix(),
|
|
246
|
-
lazy_load=False,
|
|
238
|
+
lazy_load=False, memmap=False) as ff:
|
|
247
239
|
ds = ff.tree["dataset"]
|
|
240
|
+
ds.meta["history"] = ff.tree["history"]
|
|
248
241
|
if isinstance(ds, TiledDataset):
|
|
249
242
|
for sub in ds.flat:
|
|
250
243
|
sub.files.basepath = base_path
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import numpy as np
|
|
1
2
|
import pytest
|
|
2
3
|
|
|
3
4
|
import astropy.units as u
|
|
@@ -7,6 +8,13 @@ from astropy.time import Time
|
|
|
7
8
|
gwcs = pytest.importorskip("gwcs", "0.22.2a1.dev2")
|
|
8
9
|
|
|
9
10
|
|
|
11
|
+
def assert_skycoord_allclose(coord1, coord2):
|
|
12
|
+
assert coord1.is_equivalent_frame(coord2)
|
|
13
|
+
data1 = coord1.frame.cartesian.xyz
|
|
14
|
+
data2 = coord2.frame.cartesian.xyz
|
|
15
|
+
assert np.allclose(data1, data2)
|
|
16
|
+
|
|
17
|
+
|
|
10
18
|
def test_crop_visp_by_only_stokes(croppable_visp_dataset):
|
|
11
19
|
|
|
12
20
|
cropped = croppable_visp_dataset.crop([
|
|
@@ -52,11 +60,11 @@ def test_crop_visp_by_time(croppable_visp_dataset):
|
|
|
52
60
|
|
|
53
61
|
orig_coords = croppable_visp_dataset.axis_world_coords()
|
|
54
62
|
cropped_coords = cropped.axis_world_coords()
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
assert (cropped_coords[1]
|
|
58
|
-
assert (cropped_coords[2]
|
|
59
|
-
assert (cropped_coords[3]
|
|
63
|
+
assert_skycoord_allclose(cropped_coords[0][0], orig_coords[0][200])
|
|
64
|
+
assert_skycoord_allclose(cropped_coords[0][-1], orig_coords[0][400])
|
|
65
|
+
assert np.allclose(cropped_coords[1], orig_coords[1])
|
|
66
|
+
assert np.allclose(cropped_coords[2].jd, orig_coords[2][200:401].jd)
|
|
67
|
+
assert np.allclose(cropped_coords[3], orig_coords[3])
|
|
60
68
|
|
|
61
69
|
|
|
62
70
|
def test_crop_visp_by_lonlat(croppable_visp_dataset):
|
|
@@ -90,11 +98,11 @@ def test_crop_visp_by_lonlat(croppable_visp_dataset):
|
|
|
90
98
|
|
|
91
99
|
orig_coords = croppable_visp_dataset.axis_world_coords()
|
|
92
100
|
cropped_coords = cropped.axis_world_coords()
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
assert (cropped_coords[1]
|
|
96
|
-
assert (cropped_coords[2]
|
|
97
|
-
assert (cropped_coords[3]
|
|
101
|
+
assert_skycoord_allclose(cropped_coords[0][0], orig_coords[0][200][500:1001])
|
|
102
|
+
assert_skycoord_allclose(cropped_coords[0][-1], orig_coords[0][600][500:1001])
|
|
103
|
+
assert np.allclose(cropped_coords[1], orig_coords[1])
|
|
104
|
+
assert np.allclose(cropped_coords[2].jd, orig_coords[2][200:601].jd)
|
|
105
|
+
assert np.allclose(cropped_coords[3], orig_coords[3])
|
|
98
106
|
|
|
99
107
|
|
|
100
108
|
def test_crop_cryo_by_only_stokes(croppable_cryo_dataset):
|
|
@@ -144,12 +152,12 @@ def test_crop_cryo_by_time(croppable_cryo_dataset):
|
|
|
144
152
|
cropped_coords = cropped.axis_world_coords()
|
|
145
153
|
|
|
146
154
|
# Whole coordinate array is too large to compare, so check just the edges
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
assert (cropped_coords[1]
|
|
152
|
-
assert (cropped_coords[2]
|
|
155
|
+
assert_skycoord_allclose(cropped_coords[0][0, 0, 0, :], orig_coords[0][0, 0, 0, :])
|
|
156
|
+
assert_skycoord_allclose(cropped_coords[0][0, 0, -1, :], orig_coords[0][0, 0, -1, :])
|
|
157
|
+
assert_skycoord_allclose(cropped_coords[0][0, 0, :, 0], orig_coords[0][0, 0, :, 0])
|
|
158
|
+
assert_skycoord_allclose(cropped_coords[0][0, 0, :, -1], orig_coords[0][0, 0, :, -1])
|
|
159
|
+
assert np.allclose(cropped_coords[1].jd, orig_coords[1][:2, :2].jd)
|
|
160
|
+
assert np.allclose(cropped_coords[2], orig_coords[2])
|
|
153
161
|
|
|
154
162
|
|
|
155
163
|
def test_crop_cryo_by_only_lonlat(croppable_cryo_dataset):
|
|
@@ -180,6 +188,6 @@ def test_crop_cryo_by_only_lonlat(croppable_cryo_dataset):
|
|
|
180
188
|
orig_coords = croppable_cryo_dataset.axis_world_coords()
|
|
181
189
|
cropped_coords = cropped.axis_world_coords()
|
|
182
190
|
|
|
183
|
-
|
|
184
|
-
assert (cropped_coords[1]
|
|
185
|
-
assert (cropped_coords[2]
|
|
191
|
+
assert_skycoord_allclose(cropped_coords[0][0, 0], orig_coords[0][0, 0, :201, :201])
|
|
192
|
+
assert np.allclose(cropped_coords[1].jd, orig_coords[1].jd)
|
|
193
|
+
assert np.allclose(cropped_coords[2], orig_coords[2])
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import re
|
|
1
2
|
import copy
|
|
2
3
|
|
|
3
4
|
import matplotlib.pyplot as plt
|
|
@@ -6,6 +7,7 @@ import pytest
|
|
|
6
7
|
|
|
7
8
|
from dkist import Dataset, TiledDataset, load_dataset
|
|
8
9
|
from dkist.tests.helpers import figure_test
|
|
10
|
+
from dkist.utils.exceptions import DKISTUserWarning
|
|
9
11
|
|
|
10
12
|
|
|
11
13
|
def test_tiled_dataset(simple_tiled_dataset, dataset):
|
|
@@ -44,16 +46,17 @@ def test_tiled_dataset_headers(simple_tiled_dataset, dataset):
|
|
|
44
46
|
|
|
45
47
|
|
|
46
48
|
def test_tiled_dataset_invalid_construction(dataset, dataset_4d):
|
|
49
|
+
meta = {"inventory": dataset.meta["inventory"]}
|
|
47
50
|
with pytest.raises(ValueError, match="inventory record of the first dataset"):
|
|
48
51
|
TiledDataset(np.array((dataset, dataset_4d)))
|
|
49
52
|
|
|
50
53
|
with pytest.raises(ValueError, match="physical types do not match"):
|
|
51
|
-
TiledDataset(np.array((dataset, dataset_4d)),
|
|
54
|
+
TiledDataset(np.array((dataset, dataset_4d)), meta=meta)
|
|
52
55
|
|
|
53
56
|
ds2 = copy.deepcopy(dataset)
|
|
54
57
|
ds2.meta["inventory"] = {"hello": "world"}
|
|
55
58
|
with pytest.raises(ValueError, match="inventory records of all the datasets"):
|
|
56
|
-
TiledDataset(np.array((dataset, ds2)),
|
|
59
|
+
TiledDataset(np.array((dataset, ds2)), meta=meta)
|
|
57
60
|
|
|
58
61
|
|
|
59
62
|
def test_tiled_dataset_from_components(dataset):
|
|
@@ -78,6 +81,7 @@ def test_tiled_dataset_from_components(dataset):
|
|
|
78
81
|
def test_tileddataset_plot(share_zscale):
|
|
79
82
|
from dkist.data.sample import VBI_AJQWW
|
|
80
83
|
ori_ds = load_dataset(VBI_AJQWW)
|
|
84
|
+
|
|
81
85
|
newtiles = []
|
|
82
86
|
for tile in ori_ds.flat:
|
|
83
87
|
newtiles.append(tile.rebin((1, 8, 8), operation=np.sum))
|
|
@@ -85,11 +89,86 @@ def test_tileddataset_plot(share_zscale):
|
|
|
85
89
|
# https://github.com/sunpy/ndcube/issues/815
|
|
86
90
|
for tile in newtiles:
|
|
87
91
|
tile.meta["inventory"] = ori_ds.inventory
|
|
88
|
-
ds = TiledDataset(np.array(newtiles).reshape(ori_ds.shape), inventory
|
|
92
|
+
ds = TiledDataset(np.array(newtiles).reshape(ori_ds.shape), meta={"inventory": newtiles[0].inventory})
|
|
93
|
+
|
|
89
94
|
fig = plt.figure(figsize=(12, 15))
|
|
90
|
-
|
|
95
|
+
with pytest.warns(DKISTUserWarning,
|
|
96
|
+
match="The metadata ASDF file that produced this dataset is out of date and will result in "
|
|
97
|
+
"incorrect plots. Please re-download the metadata ASDF file."):
|
|
98
|
+
#TODO: Once sample data have been updated maybe we should test both paths here (old data and new data)
|
|
99
|
+
ds.plot(0, share_zscale=share_zscale, figure=fig)
|
|
100
|
+
|
|
91
101
|
return plt.gcf()
|
|
92
102
|
|
|
103
|
+
@figure_test
|
|
104
|
+
@pytest.mark.parametrize("swap_tile_limits", ["x", "y", "xy", None])
|
|
105
|
+
def test_tileddataset_plot_limit_swapping(swap_tile_limits):
|
|
106
|
+
# Also test that row/column sizes are correct
|
|
107
|
+
|
|
108
|
+
from dkist.data.sample import VBI_AJQWW
|
|
109
|
+
ori_ds = load_dataset(VBI_AJQWW)
|
|
110
|
+
|
|
111
|
+
# Swap WCS to make the `swap_tile_limits` option more natural
|
|
112
|
+
for tile in ori_ds.flat:
|
|
113
|
+
tile.wcs.forward_transform[0].cdelt *= -1
|
|
114
|
+
|
|
115
|
+
newtiles = []
|
|
116
|
+
for tile in ori_ds.flat:
|
|
117
|
+
newtiles.append(tile.rebin((1, 8, 8), operation=np.sum))
|
|
118
|
+
# ndcube 2.3.0 introduced a deepcopy for rebin, this broke our dataset validation
|
|
119
|
+
# https://github.com/sunpy/ndcube/issues/815
|
|
120
|
+
for tile in newtiles:
|
|
121
|
+
tile.meta["inventory"] = ori_ds.inventory
|
|
122
|
+
ds = TiledDataset(np.array(newtiles).reshape(ori_ds.shape), meta={"inventory": newtiles[0].inventory})
|
|
123
|
+
|
|
124
|
+
non_square_ds = ds[:2, :]
|
|
125
|
+
assert non_square_ds.shape[0] != non_square_ds.shape[1] # Just in case the underlying data change for some reason
|
|
126
|
+
|
|
127
|
+
fig = plt.figure(figsize=(12, 15))
|
|
128
|
+
with pytest.warns(DKISTUserWarning,
|
|
129
|
+
match="The metadata ASDF file that produced this dataset is out of date and will result in "
|
|
130
|
+
"incorrect plots. Please re-download the metadata ASDF file."):
|
|
131
|
+
#TODO: Once sample data have been updated maybe we should test both paths here (old data and new data)
|
|
132
|
+
non_square_ds.plot(0, share_zscale=False, swap_tile_limits=swap_tile_limits, figure=fig)
|
|
133
|
+
|
|
134
|
+
assert fig.axes[0].get_gridspec().get_geometry() == non_square_ds.shape[::-1]
|
|
135
|
+
for ax in fig.axes:
|
|
136
|
+
xlims = ax.get_xlim()
|
|
137
|
+
ylims = ax.get_ylim()
|
|
138
|
+
|
|
139
|
+
if swap_tile_limits in ["x", "xy"]:
|
|
140
|
+
assert xlims[0] > xlims[1]
|
|
141
|
+
if swap_tile_limits in ["y", "xy"]:
|
|
142
|
+
assert ylims[0] > ylims[1]
|
|
143
|
+
if swap_tile_limits is None:
|
|
144
|
+
assert xlims[0] < xlims[1]
|
|
145
|
+
assert ylims[0] < ylims[1]
|
|
146
|
+
|
|
147
|
+
return plt.gcf()
|
|
148
|
+
|
|
149
|
+
@pytest.mark.remote_data
|
|
150
|
+
def test_tileddataset_plot_non2d_sliceindex():
|
|
151
|
+
from dkist.data.sample import VBI_AJQWW
|
|
152
|
+
ds = load_dataset(VBI_AJQWW)
|
|
153
|
+
|
|
154
|
+
newtiles = []
|
|
155
|
+
for tile in ds.flat:
|
|
156
|
+
newtiles.append(tile.rebin((1, 8, 8), operation=np.sum))
|
|
157
|
+
# ndcube 2.3.0 introduced a deepcopy for rebin, this broke our dataset validation
|
|
158
|
+
# https://github.com/sunpy/ndcube/issues/815
|
|
159
|
+
for tile in newtiles:
|
|
160
|
+
tile.meta["inventory"] = ds.inventory
|
|
161
|
+
ds = TiledDataset(np.array(newtiles).reshape(ds.shape), meta={"inventory": newtiles[0].inventory})
|
|
162
|
+
|
|
163
|
+
already_sliced_ds = ds.slice_tiles[0]
|
|
164
|
+
|
|
165
|
+
fig = plt.figure(figsize=(12, 15))
|
|
166
|
+
with pytest.warns(DKISTUserWarning,
|
|
167
|
+
match="The metadata ASDF file that produced this dataset is out of date and will result in "
|
|
168
|
+
"incorrect plots. Please re-download the metadata ASDF file."):
|
|
169
|
+
with pytest.raises(ValueError, match=re.escape("Applying slice '(0,)' to this dataset resulted in a 1 "
|
|
170
|
+
"dimensional dataset, you should pass a slice which results in a 2D dataset for each tile.")):
|
|
171
|
+
already_sliced_ds.plot(0, figure=fig)
|
|
93
172
|
|
|
94
173
|
@pytest.mark.accept_cli_tiled_dataset
|
|
95
174
|
def test_repr(simple_tiled_dataset):
|