acstools 3.8.0__tar.gz → 3.8.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.
- acstools-3.8.2/.github/workflows/build.yml +72 -0
- {acstools-3.8.0 → acstools-3.8.2}/.github/workflows/ci_workflows.yml +5 -4
- {acstools-3.8.0 → acstools-3.8.2}/.github/workflows/open_actions.yml +1 -1
- {acstools-3.8.0 → acstools-3.8.2}/.github/workflows/predeps_workflows.yml +1 -1
- {acstools-3.8.0 → acstools-3.8.2}/PKG-INFO +2 -2
- {acstools-3.8.0 → acstools-3.8.2}/acstools/acsphotcte.py +1 -1
- {acstools-3.8.0 → acstools-3.8.2}/acstools/satdet.py +11 -9
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/test_wfc_satdet.py +14 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/utils_findsat_mrt.py +10 -2
- {acstools-3.8.0 → acstools-3.8.2}/acstools/version.py +3 -3
- {acstools-3.8.0 → acstools-3.8.2}/acstools.egg-info/PKG-INFO +2 -2
- {acstools-3.8.0 → acstools-3.8.2}/acstools.egg-info/SOURCES.txt +3 -1
- {acstools-3.8.0 → acstools-3.8.2}/acstools.egg-info/requires.txt +1 -1
- acstools-3.8.2/acstools.egg-info/scm_file_list.json +88 -0
- acstools-3.8.2/acstools.egg-info/scm_version.json +8 -0
- {acstools-3.8.0 → acstools-3.8.2}/conftest.py +2 -2
- {acstools-3.8.0 → acstools-3.8.2}/pyproject.toml +5 -4
- acstools-3.8.0/.github/workflows/publish-to-pypi.yml +0 -64
- {acstools-3.8.0 → acstools-3.8.2}/.bandit.yaml +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/.flake8 +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/.github/dependabot.yml +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/.github/labeler.yml +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/.github/workflows/codeql-analysis.yml +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/.gitignore +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/.readthedocs.yaml +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/CHANGES.rst +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/CITATION.md +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/CODE_OF_CONDUCT.md +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/LICENSE.md +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/MANIFEST.in +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/README.rst +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/__init__.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/acs2d.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/acs_destripe.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/acs_destripe_plus.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/acsccd.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/acscte.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/acscteforwardmodel.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/acsrej.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/acssum.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/acszpt.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/calacs.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/data/polarizer_tables.yaml +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/data/rt_line_kernel_width15.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/data/rt_line_kernel_width3.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/data/rt_line_kernel_width7.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/findsat_mrt.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/focus_diverse_epsfs.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/polarization_tools.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/.gitattributes +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/__init__.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/input/ja0x03ojq_flt.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/input/jb5g05ubq_flt.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/input/jc2z03cvq_blv_tmp.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/input/jc5001soq_flt.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/input/jc8m10syq_flc.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/input/jc8m32j5q_flc.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/input/jc8o04ghq_flt.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/input/jc8o04ghq_mask1.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/input/jc8o04ghq_mask2.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/truth/ja0x03ojq_flt_ref.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/truth/jb5g05ubq_flt_ref.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/truth/jc2z03cvq_blv_tmp_ref.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/truth/jc5001soq_flt_ref.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/truth/jc8m10syq_flc_ref.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/truth/jc8m32j5q_flc_mask_ref.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/data/truth/jc8o04ghq_flt_ref.fits +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/helpers.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/test_polarization.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/test_wfc_destripe.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/tests/test_wfc_findsat_mrt.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools/utils_calib.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools.egg-info/dependency_links.txt +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools.egg-info/entry_points.txt +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools.egg-info/not-zip-safe +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/acstools.egg-info/top_level.txt +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/doc/Makefile +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/doc/make.bat +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/doc/source/_static/stsci_pri_combo_mark_white.png +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/doc/source/_templates/.gitignore +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/doc/source/acs_destripe.rst +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/doc/source/acsphotcte.rst +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/doc/source/acszpt.rst +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/doc/source/calacs.rst +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/doc/source/conf.py +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/doc/source/findsat_mrt.rst +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/doc/source/focus_diverse_epsfs.rst +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/doc/source/index.rst +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/doc/source/polarization_tools.rst +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/doc/source/satdet.rst +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/doc/source/utils_calib.rst +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/setup.cfg +0 -0
- {acstools-3.8.0 → acstools-3.8.2}/tox.ini +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
name: build
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
# We also want this workflow triggered if the 'Build wheels'
|
|
6
|
+
# label is added or present when PR is updated
|
|
7
|
+
types:
|
|
8
|
+
- synchronize
|
|
9
|
+
- labeled
|
|
10
|
+
release:
|
|
11
|
+
types:
|
|
12
|
+
- released
|
|
13
|
+
workflow_dispatch:
|
|
14
|
+
|
|
15
|
+
concurrency:
|
|
16
|
+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
17
|
+
cancel-in-progress: true
|
|
18
|
+
|
|
19
|
+
permissions: {}
|
|
20
|
+
|
|
21
|
+
# NOTE: Cannot use OpenAstronomy workflow due to
|
|
22
|
+
# https://github.com/OpenAstronomy/github-actions-workflows/issues/168
|
|
23
|
+
jobs:
|
|
24
|
+
build:
|
|
25
|
+
if: (github.repository == 'spacetelescope/acstools' && (github.event_name == 'release' || github.event_name == 'workflow_dispatch' || contains(github.event.pull_request.labels.*.name, 'Build wheels')))
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
29
|
+
with:
|
|
30
|
+
fetch-tags: true
|
|
31
|
+
fetch-depth: 0
|
|
32
|
+
lfs: false
|
|
33
|
+
persist-credentials: false
|
|
34
|
+
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
|
35
|
+
with:
|
|
36
|
+
python-version: "3.11"
|
|
37
|
+
- name: Build the package
|
|
38
|
+
run: |
|
|
39
|
+
python -m pip install build twine
|
|
40
|
+
python -m build --sdist --wheel .
|
|
41
|
+
ls -lh dist
|
|
42
|
+
python -m twine check --strict dist/*
|
|
43
|
+
- name: Upload build artifacts
|
|
44
|
+
if: (github.event_name == 'release' || github.event_name == 'workflow_dispatch')
|
|
45
|
+
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
|
46
|
+
with:
|
|
47
|
+
name: additional-pylons
|
|
48
|
+
path: ./dist/
|
|
49
|
+
publish:
|
|
50
|
+
if: (github.repository == 'spacetelescope/acstools') && (github.event_name == 'release') && (github.event.action == 'released')
|
|
51
|
+
needs: [build]
|
|
52
|
+
runs-on: ubuntu-latest
|
|
53
|
+
permissions:
|
|
54
|
+
id-token: write
|
|
55
|
+
attestations: write
|
|
56
|
+
# To add required reviewers before deployment,
|
|
57
|
+
# edit the protection rules in GitHub Settings:
|
|
58
|
+
# Settings > Environments > pypi > Add required reviewers
|
|
59
|
+
environment:
|
|
60
|
+
name: pypi
|
|
61
|
+
url: https://pypi.org/p/acstools
|
|
62
|
+
steps:
|
|
63
|
+
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
|
64
|
+
with:
|
|
65
|
+
pattern: additional-pylons*
|
|
66
|
+
path: dist/
|
|
67
|
+
merge-multiple: true
|
|
68
|
+
- uses: actions/attest-build-provenance@96278af6caaf10aea03fd8d33a09a777ca52d62f # v3.2.0
|
|
69
|
+
with:
|
|
70
|
+
subject-path: "dist/*"
|
|
71
|
+
# To upload to PyPI without a token, add this workflow file as a Trusted Publisher in the project settings on the PyPI website
|
|
72
|
+
- uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
|
|
@@ -3,6 +3,7 @@ name: CI
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
5
|
pull_request:
|
|
6
|
+
workflow_dispatch:
|
|
6
7
|
schedule:
|
|
7
8
|
# Weekly Tuesday 6 AM build
|
|
8
9
|
# * is a special character in YAML so you have to quote this string
|
|
@@ -21,7 +22,7 @@ jobs:
|
|
|
21
22
|
runs-on: ubuntu-latest
|
|
22
23
|
steps:
|
|
23
24
|
- name: Check base branch
|
|
24
|
-
uses: actions/github-script@
|
|
25
|
+
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
|
25
26
|
if: github.event_name == 'pull_request'
|
|
26
27
|
with:
|
|
27
28
|
script: |
|
|
@@ -35,7 +36,7 @@ jobs:
|
|
|
35
36
|
|
|
36
37
|
tests:
|
|
37
38
|
needs: initial_checks
|
|
38
|
-
uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@
|
|
39
|
+
uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@2835f0cacddf3f8de198db9afdb5354a5cebe0ef # v2.6.3
|
|
39
40
|
with:
|
|
40
41
|
setenv: |
|
|
41
42
|
jref: "https://ssb.stsci.edu/trds_open/jref"
|
|
@@ -57,8 +58,8 @@ jobs:
|
|
|
57
58
|
|
|
58
59
|
- name: Python 3.10 with remote data and all dependencies
|
|
59
60
|
linux: py310-test-alldeps
|
|
60
|
-
posargs: --remote-data -v
|
|
61
|
+
posargs: --remote-data -v --durations=0
|
|
61
62
|
|
|
62
63
|
- name: Python 3.14 with remote data and dev dependencies
|
|
63
64
|
linux: py314-test-devdeps
|
|
64
|
-
posargs: --remote-data -v
|
|
65
|
+
posargs: --remote-data -v --durations=0
|
|
@@ -17,7 +17,7 @@ jobs:
|
|
|
17
17
|
runs-on: ubuntu-latest
|
|
18
18
|
steps:
|
|
19
19
|
- name: Label PR
|
|
20
|
-
uses: actions/labeler@
|
|
20
|
+
uses: actions/labeler@f27b608878404679385c85cfa523b85ccb86e213 # v6.1.0
|
|
21
21
|
if: github.event_name == 'pull_request_target' || github.event_name == 'pull_request'
|
|
22
22
|
with:
|
|
23
23
|
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
|
@@ -12,7 +12,7 @@ permissions:
|
|
|
12
12
|
|
|
13
13
|
jobs:
|
|
14
14
|
rc_tests:
|
|
15
|
-
uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@
|
|
15
|
+
uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@2835f0cacddf3f8de198db9afdb5354a5cebe0ef # v2.6.3
|
|
16
16
|
with:
|
|
17
17
|
setenv: |
|
|
18
18
|
jref: "https://ssb.stsci.edu/trds_open/jref"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: acstools
|
|
3
|
-
Version: 3.8.
|
|
3
|
+
Version: 3.8.2
|
|
4
4
|
Summary: Python Tools for HST ACS
|
|
5
5
|
Author: Matt Davis, Warren Hack, Norman Grogin, Pey Lian Lim, Sara Ogaz, Leonardo Ubeda, Mihai Cara, David Borncamp, Nathan Miles, Tyler Desjardins, Jenna Ryon, David Stark, Gagandeep Anand, Yotam Cohen
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -26,7 +26,7 @@ Requires-Dist: PyYAML
|
|
|
26
26
|
Provides-Extra: all
|
|
27
27
|
Requires-Dist: matplotlib; extra == "all"
|
|
28
28
|
Requires-Dist: scipy; extra == "all"
|
|
29
|
-
Requires-Dist: scikit-image; extra == "all"
|
|
29
|
+
Requires-Dist: scikit-image>=0.11; extra == "all"
|
|
30
30
|
Requires-Dist: stsci.tools; extra == "all"
|
|
31
31
|
Requires-Dist: stsci.imagestats; extra == "all"
|
|
32
32
|
Requires-Dist: photutils; extra == "all"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
"""
|
|
3
3
|
The ACS Photometric CTE API is a programmatic interface for the
|
|
4
|
-
ACS Photometric CTE Webtool
|
|
4
|
+
`ACS Photometric CTE Webtool <https://acsphotometriccte.stsci.edu>`_.
|
|
5
5
|
The API is a cloud-based service that employs a serverless approach on AWS
|
|
6
6
|
with API Gateway and Lambda to compute the photometric CTE corrections
|
|
7
7
|
using the model described in `ACS ISR 2022-06 <https://ui.adsabs.harvard.edu/abs/2022acs..rept....6C/abstract>`_.
|
|
@@ -157,11 +157,10 @@ try:
|
|
|
157
157
|
from skimage.feature import canny
|
|
158
158
|
except ImportError:
|
|
159
159
|
HAS_OPDEP = False
|
|
160
|
+
SKIMAGE_LT_0_26 = True
|
|
160
161
|
else:
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
else:
|
|
164
|
-
HAS_OPDEP = False
|
|
162
|
+
HAS_OPDEP = True
|
|
163
|
+
SKIMAGE_LT_0_26 = not minversion(skimage, "0.26.0")
|
|
165
164
|
|
|
166
165
|
try:
|
|
167
166
|
import matplotlib.pyplot as plt
|
|
@@ -170,8 +169,8 @@ except ImportError:
|
|
|
170
169
|
warnings.warn('matplotlib not found, plotting is disabled',
|
|
171
170
|
AstropyUserWarning)
|
|
172
171
|
|
|
173
|
-
__version__ = '0.3.
|
|
174
|
-
__vdate__ = '
|
|
172
|
+
__version__ = '0.3.4'
|
|
173
|
+
__vdate__ = '12-May-2026'
|
|
175
174
|
__author__ = 'David Borncamp, Pey Lian Lim'
|
|
176
175
|
__all__ = ['detsat', 'make_mask']
|
|
177
176
|
|
|
@@ -209,13 +208,16 @@ def _detsat_one(filename, ext, sigma=2.0, low_thresh=0.1, h_thresh=0.5,
|
|
|
209
208
|
|
|
210
209
|
# get the edges
|
|
211
210
|
immax = np.max(image)
|
|
212
|
-
edge = canny(image, sigma=sigma,
|
|
211
|
+
edge = canny(image, sigma=sigma, mode='constant',
|
|
213
212
|
low_threshold=immax * low_thresh,
|
|
214
213
|
high_threshold=immax * h_thresh)
|
|
215
214
|
|
|
216
215
|
# clean up the small objects, will make less noise
|
|
217
|
-
|
|
218
|
-
|
|
216
|
+
if SKIMAGE_LT_0_26:
|
|
217
|
+
rso_kwargs = {"min_size": small_edge}
|
|
218
|
+
else:
|
|
219
|
+
rso_kwargs = {"max_size": small_edge - 1}
|
|
220
|
+
morph.remove_small_objects(edge, connectivity=8, out=edge, **rso_kwargs)
|
|
219
221
|
|
|
220
222
|
# create an array of angles from 0 to 180, exactly 0 will get bad columns
|
|
221
223
|
# but it is unlikely that a satellite will be exactly at 0 degrees, so
|
|
@@ -15,6 +15,20 @@ pytest.importorskip("skimage")
|
|
|
15
15
|
class TestSatDet(BaseACSTOOLS):
|
|
16
16
|
detector = 'wfc'
|
|
17
17
|
|
|
18
|
+
def test_detsat_runs(self):
|
|
19
|
+
"""Test that satellite trail detection runs without error."""
|
|
20
|
+
rootname = 'jc8m10syq'
|
|
21
|
+
inputfile = rootname + '_flc.fits' # This is modified in-place
|
|
22
|
+
|
|
23
|
+
# Prepare input file.
|
|
24
|
+
self.get_input_file(inputfile, skip_ref=True)
|
|
25
|
+
|
|
26
|
+
# Run detsat without multiprocessing but
|
|
27
|
+
# output is non-deterministic, so we just check roughly.
|
|
28
|
+
res, err = satdet.detsat(inputfile, chips=[1, 4], n_processes=1, verbose=False)
|
|
29
|
+
assert list(err) == [], err[('jc8m10syq_flc.fits', 1)]
|
|
30
|
+
assert sorted(res) == [('jc8m10syq_flc.fits', 1), ('jc8m10syq_flc.fits', 4)]
|
|
31
|
+
|
|
18
32
|
def test_trail_mask(self):
|
|
19
33
|
"""Mask satellite trail on WFC EXT 6."""
|
|
20
34
|
|
|
@@ -14,12 +14,20 @@ from astropy.nddata import Cutout2D, block_replicate
|
|
|
14
14
|
from astropy.stats import sigma_clip
|
|
15
15
|
from astropy.table import Table, vstack
|
|
16
16
|
from astropy.utils.exceptions import AstropyUserWarning
|
|
17
|
+
from astropy.utils.introspection import minversion
|
|
17
18
|
|
|
18
19
|
# check for scikit-image
|
|
19
20
|
try:
|
|
21
|
+
import skimage
|
|
22
|
+
|
|
23
|
+
SKIMAGE_LT_0_27 = not minversion(skimage, "0.26.1.dev") # 0.27
|
|
24
|
+
|
|
20
25
|
from skimage import transform
|
|
21
26
|
from skimage.transform._warps import warp
|
|
22
|
-
|
|
27
|
+
if SKIMAGE_LT_0_27:
|
|
28
|
+
from skimage._shared.utils import convert_to_float
|
|
29
|
+
else:
|
|
30
|
+
from _skimage2._shared.utils import convert_to_float
|
|
23
31
|
except ImportError as e:
|
|
24
32
|
warnings.warn(f'skimage not installed. MRT calculation will not work: {repr(e)}') # noqa
|
|
25
33
|
|
|
@@ -1366,7 +1374,7 @@ def create_mrt_line_kernel(width, sigma, outfile=None, shape=(1024, 2048),
|
|
|
1366
1374
|
ax.set_title('model image')
|
|
1367
1375
|
|
|
1368
1376
|
# calculate the RT for this model
|
|
1369
|
-
rt = radon(image, circle=False, median=True, fill_value=np.nan,
|
|
1377
|
+
rt = radon(image, theta=theta, circle=False, median=True, fill_value=np.nan,
|
|
1370
1378
|
processes=processes, return_length=False)
|
|
1371
1379
|
|
|
1372
1380
|
# plot the MRT
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '3.8.
|
|
22
|
-
__version_tuple__ = version_tuple = (3, 8,
|
|
21
|
+
__version__ = version = '3.8.2'
|
|
22
|
+
__version_tuple__ = version_tuple = (3, 8, 2)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gb8a25088d'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: acstools
|
|
3
|
-
Version: 3.8.
|
|
3
|
+
Version: 3.8.2
|
|
4
4
|
Summary: Python Tools for HST ACS
|
|
5
5
|
Author: Matt Davis, Warren Hack, Norman Grogin, Pey Lian Lim, Sara Ogaz, Leonardo Ubeda, Mihai Cara, David Borncamp, Nathan Miles, Tyler Desjardins, Jenna Ryon, David Stark, Gagandeep Anand, Yotam Cohen
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -26,7 +26,7 @@ Requires-Dist: PyYAML
|
|
|
26
26
|
Provides-Extra: all
|
|
27
27
|
Requires-Dist: matplotlib; extra == "all"
|
|
28
28
|
Requires-Dist: scipy; extra == "all"
|
|
29
|
-
Requires-Dist: scikit-image; extra == "all"
|
|
29
|
+
Requires-Dist: scikit-image>=0.11; extra == "all"
|
|
30
30
|
Requires-Dist: stsci.tools; extra == "all"
|
|
31
31
|
Requires-Dist: stsci.imagestats; extra == "all"
|
|
32
32
|
Requires-Dist: photutils; extra == "all"
|
|
@@ -17,11 +17,11 @@ tox.ini
|
|
|
17
17
|
.github/ISSUE_TEMPLATE/bug_report.md
|
|
18
18
|
.github/ISSUE_TEMPLATE/feature_request.md
|
|
19
19
|
.github/ISSUE_TEMPLATE/question.md
|
|
20
|
+
.github/workflows/build.yml
|
|
20
21
|
.github/workflows/ci_workflows.yml
|
|
21
22
|
.github/workflows/codeql-analysis.yml
|
|
22
23
|
.github/workflows/open_actions.yml
|
|
23
24
|
.github/workflows/predeps_workflows.yml
|
|
24
|
-
.github/workflows/publish-to-pypi.yml
|
|
25
25
|
acstools/__init__.py
|
|
26
26
|
acstools/acs2d.py
|
|
27
27
|
acstools/acs_destripe.py
|
|
@@ -47,6 +47,8 @@ acstools.egg-info/dependency_links.txt
|
|
|
47
47
|
acstools.egg-info/entry_points.txt
|
|
48
48
|
acstools.egg-info/not-zip-safe
|
|
49
49
|
acstools.egg-info/requires.txt
|
|
50
|
+
acstools.egg-info/scm_file_list.json
|
|
51
|
+
acstools.egg-info/scm_version.json
|
|
50
52
|
acstools.egg-info/top_level.txt
|
|
51
53
|
acstools/data/polarizer_tables.yaml
|
|
52
54
|
acstools/data/rt_line_kernel_width15.fits
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"files": [
|
|
3
|
+
"CHANGES.rst",
|
|
4
|
+
"tox.ini",
|
|
5
|
+
"pyproject.toml",
|
|
6
|
+
"LICENSE.md",
|
|
7
|
+
"README.rst",
|
|
8
|
+
"CITATION.md",
|
|
9
|
+
".bandit.yaml",
|
|
10
|
+
"MANIFEST.in",
|
|
11
|
+
"conftest.py",
|
|
12
|
+
".gitignore",
|
|
13
|
+
".flake8",
|
|
14
|
+
".readthedocs.yaml",
|
|
15
|
+
"CODE_OF_CONDUCT.md",
|
|
16
|
+
"acstools/findsat_mrt.py",
|
|
17
|
+
"acstools/__init__.py",
|
|
18
|
+
"acstools/satdet.py",
|
|
19
|
+
"acstools/acsphotcte.py",
|
|
20
|
+
"acstools/acs_destripe.py",
|
|
21
|
+
"acstools/acsccd.py",
|
|
22
|
+
"acstools/focus_diverse_epsfs.py",
|
|
23
|
+
"acstools/utils_findsat_mrt.py",
|
|
24
|
+
"acstools/acszpt.py",
|
|
25
|
+
"acstools/acscteforwardmodel.py",
|
|
26
|
+
"acstools/utils_calib.py",
|
|
27
|
+
"acstools/acs_destripe_plus.py",
|
|
28
|
+
"acstools/acssum.py",
|
|
29
|
+
"acstools/acs2d.py",
|
|
30
|
+
"acstools/polarization_tools.py",
|
|
31
|
+
"acstools/acsrej.py",
|
|
32
|
+
"acstools/calacs.py",
|
|
33
|
+
"acstools/acscte.py",
|
|
34
|
+
"acstools/tests/test_wfc_satdet.py",
|
|
35
|
+
"acstools/tests/helpers.py",
|
|
36
|
+
"acstools/tests/test_wfc_destripe.py",
|
|
37
|
+
"acstools/tests/__init__.py",
|
|
38
|
+
"acstools/tests/test_polarization.py",
|
|
39
|
+
"acstools/tests/test_wfc_findsat_mrt.py",
|
|
40
|
+
"acstools/tests/.gitattributes",
|
|
41
|
+
"acstools/tests/data/truth/ja0x03ojq_flt_ref.fits",
|
|
42
|
+
"acstools/tests/data/truth/jb5g05ubq_flt_ref.fits",
|
|
43
|
+
"acstools/tests/data/truth/jc8m32j5q_flc_mask_ref.fits",
|
|
44
|
+
"acstools/tests/data/truth/jc8m10syq_flc_ref.fits",
|
|
45
|
+
"acstools/tests/data/truth/jc5001soq_flt_ref.fits",
|
|
46
|
+
"acstools/tests/data/truth/jc8o04ghq_flt_ref.fits",
|
|
47
|
+
"acstools/tests/data/truth/jc2z03cvq_blv_tmp_ref.fits",
|
|
48
|
+
"acstools/tests/data/input/jc8m32j5q_flc.fits",
|
|
49
|
+
"acstools/tests/data/input/jc8o04ghq_mask2.fits",
|
|
50
|
+
"acstools/tests/data/input/jc8o04ghq_flt.fits",
|
|
51
|
+
"acstools/tests/data/input/jc8m10syq_flc.fits",
|
|
52
|
+
"acstools/tests/data/input/ja0x03ojq_flt.fits",
|
|
53
|
+
"acstools/tests/data/input/jb5g05ubq_flt.fits",
|
|
54
|
+
"acstools/tests/data/input/jc8o04ghq_mask1.fits",
|
|
55
|
+
"acstools/tests/data/input/jc5001soq_flt.fits",
|
|
56
|
+
"acstools/tests/data/input/jc2z03cvq_blv_tmp.fits",
|
|
57
|
+
"acstools/data/rt_line_kernel_width3.fits",
|
|
58
|
+
"acstools/data/rt_line_kernel_width15.fits",
|
|
59
|
+
"acstools/data/polarizer_tables.yaml",
|
|
60
|
+
"acstools/data/rt_line_kernel_width7.fits",
|
|
61
|
+
"doc/Makefile",
|
|
62
|
+
"doc/make.bat",
|
|
63
|
+
"doc/source/findsat_mrt.rst",
|
|
64
|
+
"doc/source/acszpt.rst",
|
|
65
|
+
"doc/source/acs_destripe.rst",
|
|
66
|
+
"doc/source/index.rst",
|
|
67
|
+
"doc/source/calacs.rst",
|
|
68
|
+
"doc/source/acsphotcte.rst",
|
|
69
|
+
"doc/source/satdet.rst",
|
|
70
|
+
"doc/source/focus_diverse_epsfs.rst",
|
|
71
|
+
"doc/source/polarization_tools.rst",
|
|
72
|
+
"doc/source/conf.py",
|
|
73
|
+
"doc/source/utils_calib.rst",
|
|
74
|
+
"doc/source/_static/stsci_pri_combo_mark_white.png",
|
|
75
|
+
"doc/source/_templates/.gitignore",
|
|
76
|
+
".github/PULL_REQUEST_TEMPLATE.md",
|
|
77
|
+
".github/labeler.yml",
|
|
78
|
+
".github/dependabot.yml",
|
|
79
|
+
".github/ISSUE_TEMPLATE/question.md",
|
|
80
|
+
".github/ISSUE_TEMPLATE/bug_report.md",
|
|
81
|
+
".github/ISSUE_TEMPLATE/feature_request.md",
|
|
82
|
+
".github/workflows/codeql-analysis.yml",
|
|
83
|
+
".github/workflows/build.yml",
|
|
84
|
+
".github/workflows/predeps_workflows.yml",
|
|
85
|
+
".github/workflows/open_actions.yml",
|
|
86
|
+
".github/workflows/ci_workflows.yml"
|
|
87
|
+
]
|
|
88
|
+
}
|
|
@@ -14,9 +14,9 @@ except ImportError:
|
|
|
14
14
|
# Uncomment and customize the following lines to add/remove entries
|
|
15
15
|
# from the list of packages for which version numbers are displayed
|
|
16
16
|
# when running the tests.
|
|
17
|
-
PYTEST_HEADER_MODULES['
|
|
18
|
-
PYTEST_HEADER_MODULES['beautifulsoup4'] = 'bs4'
|
|
17
|
+
PYTEST_HEADER_MODULES['astropy'] = 'astropy'
|
|
19
18
|
PYTEST_HEADER_MODULES['requests'] = 'requests'
|
|
19
|
+
PYTEST_HEADER_MODULES['scikit-image'] = 'skimage'
|
|
20
20
|
PYTEST_HEADER_MODULES['stsci.tools'] = 'stsci.tools'
|
|
21
21
|
PYTEST_HEADER_MODULES.pop('Pandas', None)
|
|
22
22
|
PYTEST_HEADER_MODULES.pop('h5py', None)
|
|
@@ -51,7 +51,7 @@ Documentation = "https://acstools.readthedocs.io"
|
|
|
51
51
|
all = [
|
|
52
52
|
"matplotlib",
|
|
53
53
|
"scipy",
|
|
54
|
-
"scikit-image",
|
|
54
|
+
"scikit-image>=0.11",
|
|
55
55
|
"stsci.tools",
|
|
56
56
|
"stsci.imagestats",
|
|
57
57
|
"photutils",
|
|
@@ -99,8 +99,8 @@ build-backend = "setuptools.build_meta"
|
|
|
99
99
|
[tool.setuptools_scm]
|
|
100
100
|
version_file = "acstools/version.py"
|
|
101
101
|
|
|
102
|
-
[tool.pytest
|
|
103
|
-
minversion = "
|
|
102
|
+
[tool.pytest]
|
|
103
|
+
minversion = "9"
|
|
104
104
|
norecursedirs = [
|
|
105
105
|
"build",
|
|
106
106
|
"doc/build",
|
|
@@ -115,4 +115,5 @@ filterwarnings = [
|
|
|
115
115
|
"error",
|
|
116
116
|
"ignore:numpy\\.ndarray size changed:RuntimeWarning",
|
|
117
117
|
"ignore:unclosed file:ResourceWarning",
|
|
118
|
-
|
|
118
|
+
"ignore:.*skimage\\.feature\\.canny.* is deprecated",
|
|
119
|
+
]
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
name: Wheel building
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
pull_request:
|
|
5
|
-
# We also want this workflow triggered if the 'Build wheels'
|
|
6
|
-
# label is added or present when PR is updated
|
|
7
|
-
types:
|
|
8
|
-
- synchronize
|
|
9
|
-
- labeled
|
|
10
|
-
push:
|
|
11
|
-
branches:
|
|
12
|
-
- master
|
|
13
|
-
tags:
|
|
14
|
-
- '*'
|
|
15
|
-
|
|
16
|
-
concurrency:
|
|
17
|
-
group: ${{ github.workflow }}-${{ github.ref }}
|
|
18
|
-
cancel-in-progress: true
|
|
19
|
-
|
|
20
|
-
# NOTE: Cannot use OpenAstronomy workflow due to
|
|
21
|
-
# https://github.com/OpenAstronomy/github-actions-workflows/issues/168
|
|
22
|
-
jobs:
|
|
23
|
-
build_and_publish:
|
|
24
|
-
# This job builds the wheels and publishes them to PyPI for all
|
|
25
|
-
# tags. For PRs with the "Build wheels" label, wheels are built,
|
|
26
|
-
# but are not uploaded to PyPI.
|
|
27
|
-
|
|
28
|
-
permissions:
|
|
29
|
-
contents: none
|
|
30
|
-
|
|
31
|
-
runs-on: ubuntu-latest
|
|
32
|
-
if: (github.repository == 'spacetelescope/acstools' && (github.event_name == 'push' || contains(github.event.pull_request.labels.*.name, 'Build wheels')))
|
|
33
|
-
|
|
34
|
-
steps:
|
|
35
|
-
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
36
|
-
with:
|
|
37
|
-
fetch-depth: 0
|
|
38
|
-
|
|
39
|
-
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
|
40
|
-
with:
|
|
41
|
-
python-version: '3.11'
|
|
42
|
-
|
|
43
|
-
- name: Install python-build and twine
|
|
44
|
-
run: python -m pip install build "twine>=3.3"
|
|
45
|
-
|
|
46
|
-
- name: Build package
|
|
47
|
-
run: python -m build --sdist --wheel .
|
|
48
|
-
|
|
49
|
-
- name: List result
|
|
50
|
-
run: ls -l dist
|
|
51
|
-
|
|
52
|
-
- name: Check dist
|
|
53
|
-
run: python -m twine check --strict dist/*
|
|
54
|
-
|
|
55
|
-
# FOR DEBUGGING ONLY: repository_url (TestPyPI) and verbose;
|
|
56
|
-
# Use appropriate token if debugging with TestPyPI
|
|
57
|
-
- name: Publish distribution 📦 to PyPI
|
|
58
|
-
if: (startsWith(github.ref, 'refs/tags/') && github.event_name == 'push')
|
|
59
|
-
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
|
|
60
|
-
with:
|
|
61
|
-
user: __token__
|
|
62
|
-
password: ${{ secrets.PYPI_TOKEN }}
|
|
63
|
-
#repository_url: https://test.pypi.org/legacy/
|
|
64
|
-
#verbose: true
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|