dkist-processing-math 2.1.0rc1__tar.gz → 2.1.1__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-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/CHANGELOG.rst +19 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/PKG-INFO +24 -6
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/README.rst +0 -1
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/bitbucket-pipelines.yml +21 -3
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/linear_algebra.py +29 -14
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/tests/test_linear_algebra.py +87 -14
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math.egg-info/PKG-INFO +24 -6
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math.egg-info/SOURCES.txt +0 -3
- dkist_processing_math-2.1.1/dkist_processing_math.egg-info/top_level.txt +5 -0
- dkist_processing_math-2.1.1/pyproject.toml +100 -0
- dkist_processing_math-2.1.1/setup.cfg +4 -0
- dkist-processing-math-2.1.0rc1/changelog/14.feature.rst +0 -1
- dkist-processing-math-2.1.0rc1/dkist_processing_math.egg-info/top_level.txt +0 -1
- dkist-processing-math-2.1.0rc1/pyproject.toml +0 -31
- dkist-processing-math-2.1.0rc1/setup.cfg +0 -60
- dkist-processing-math-2.1.0rc1/setup.py +0 -4
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/.gitignore +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/.pre-commit-config.yaml +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/.readthedocs.yml +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/changelog/.gitempty +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/check_changelog_updated.sh +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/__init__.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/arithmetic.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/feature.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/statistics.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/tests/__init__.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/tests/conftest.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/tests/test_arithmetic.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/tests/test_feature.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/tests/test_statistics.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/tests/test_transform.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/transform/__init__.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/transform/affine.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/transform/binary.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/transform/binning.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/transform/hough.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math.egg-info/dependency_links.txt +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math.egg-info/requires.txt +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/docs/Makefile +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/docs/changelog.rst +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/docs/conf.py +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/docs/index.rst +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/docs/make.bat +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/docs/requirements.txt +0 -0
- {dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/licenses/LICENSE.rst +0 -0
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
v2.1.1 (2024-10-14)
|
|
2
|
+
===================
|
|
3
|
+
|
|
4
|
+
Misc
|
|
5
|
+
----
|
|
6
|
+
|
|
7
|
+
- Make and publish wheels at code push in build pipeline (`#15 <https://bitbucket.org/dkistdc/dkist-processing-math/pull-requests/15>`__)
|
|
8
|
+
- Switch from setup.cfg to pyproject.toml for build configuration (`#15 <https://bitbucket.org/dkistdc/dkist-processing-math/pull-requests/15>`__)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
v2.1.0 (2023-11-28)
|
|
12
|
+
===================
|
|
13
|
+
|
|
14
|
+
Features
|
|
15
|
+
--------
|
|
16
|
+
|
|
17
|
+
- Add functions to broadcast matrix multiplication over extra array dimensions. (`#14 <https://bitbucket.org/dkistdc/dkist-processing-math/pull-requests/14>`__)
|
|
18
|
+
|
|
19
|
+
|
|
1
20
|
v2.0.0 (2023-06-29)
|
|
2
21
|
===================
|
|
3
22
|
|
|
@@ -1,25 +1,43 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dkist-processing-math
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.1
|
|
4
4
|
Summary: Common math functionality used in the DKIST calibrations suite
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
Author-email: NSO / AURA <dkistdc@nso.edu>
|
|
6
|
+
License: BSD-3-Clause
|
|
7
|
+
Project-URL: Homepage, https://nso.edu/dkist/data-center/
|
|
8
|
+
Project-URL: Repository, https://bitbucket.org/dkistdc/dkist-processing-math/
|
|
9
9
|
Project-URL: Documentation, https://docs.dkist.nso.edu/projects/math
|
|
10
|
+
Project-URL: Help, https://nso.atlassian.net/servicedesk/customer/portal/5
|
|
10
11
|
Classifier: Programming Language :: Python
|
|
11
12
|
Classifier: Programming Language :: Python :: 3
|
|
12
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
13
14
|
Requires-Python: >=3.11
|
|
15
|
+
Description-Content-Type: text/x-rst
|
|
16
|
+
Requires-Dist: dkist-processing-common>=4.0.0
|
|
17
|
+
Requires-Dist: numpy>=1.24.0
|
|
18
|
+
Requires-Dist: scikit-image>=0.21.0
|
|
19
|
+
Requires-Dist: scipy>=1.11.0
|
|
20
|
+
Requires-Dist: peakutils>=1.3.3
|
|
14
21
|
Provides-Extra: test
|
|
22
|
+
Requires-Dist: pytest; extra == "test"
|
|
23
|
+
Requires-Dist: pytest-cov; extra == "test"
|
|
24
|
+
Requires-Dist: pytest-mock; extra == "test"
|
|
25
|
+
Requires-Dist: hypothesis; extra == "test"
|
|
26
|
+
Requires-Dist: towncrier; extra == "test"
|
|
15
27
|
Provides-Extra: docs
|
|
28
|
+
Requires-Dist: sphinx; extra == "docs"
|
|
29
|
+
Requires-Dist: sphinx-astropy; extra == "docs"
|
|
30
|
+
Requires-Dist: sphinx-changelog; extra == "docs"
|
|
31
|
+
Requires-Dist: sphinx-autoapi; extra == "docs"
|
|
32
|
+
Requires-Dist: pytest; extra == "docs"
|
|
33
|
+
Requires-Dist: towncrier; extra == "docs"
|
|
34
|
+
Requires-Dist: dkist-sphinx-theme; extra == "docs"
|
|
16
35
|
|
|
17
36
|
dkist-processing-math
|
|
18
37
|
=====================
|
|
19
38
|
|
|
20
39
|
dkist-processing-math contains the math functions used throughout the DKIST data processing software stack.
|
|
21
40
|
|
|
22
|
-
* DKIST: https://nso.edu/telescopes/dki-solar-telescope/
|
|
23
41
|
|
|
24
42
|
Development
|
|
25
43
|
-----------
|
|
@@ -60,9 +60,10 @@ definitions:
|
|
|
60
60
|
- pip
|
|
61
61
|
name: Push
|
|
62
62
|
script:
|
|
63
|
-
-
|
|
64
|
-
- pip install twine
|
|
65
|
-
-
|
|
63
|
+
- pip install -U pip
|
|
64
|
+
- pip install build twine
|
|
65
|
+
- python -m build --outdir wheelhouse .
|
|
66
|
+
- python -m twine upload --skip-existing wheelhouse/*
|
|
66
67
|
|
|
67
68
|
pipelines:
|
|
68
69
|
default:
|
|
@@ -73,6 +74,23 @@ pipelines:
|
|
|
73
74
|
- step: *scan
|
|
74
75
|
- step: *test
|
|
75
76
|
- step: *docs
|
|
77
|
+
custom:
|
|
78
|
+
build_rc: # I.e. skip the doc check (because we might have rc dependencies)
|
|
79
|
+
- variables:
|
|
80
|
+
- name: BITBUCKET_TAG
|
|
81
|
+
description: "Tag version to build (e.g., 'vX.Y.ZrcR')"
|
|
82
|
+
- step:
|
|
83
|
+
name: Validate Bitbucket pipeline input
|
|
84
|
+
script:
|
|
85
|
+
- git tag | grep -q ${BITBUCKET_TAG} || { echo Tag ${BITBUCKET_TAG} not found!; exit 1; }
|
|
86
|
+
- echo ${BITBUCKET_TAG} | grep -q "rc[0-9]\+$" || { echo Tag ${BITBUCKET_TAG} is not an rc. SHAME!; exit 1; }
|
|
87
|
+
- parallel:
|
|
88
|
+
- step: *lint
|
|
89
|
+
- step: *changelog
|
|
90
|
+
- parallel:
|
|
91
|
+
- step: *scan
|
|
92
|
+
- step: *test
|
|
93
|
+
- step: *push
|
|
76
94
|
tags:
|
|
77
95
|
'v*':
|
|
78
96
|
- parallel:
|
|
@@ -14,6 +14,11 @@ def nd_left_matrix_multiply(*, vector_stack: np.ndarray, matrix_stack: np.ndarra
|
|
|
14
14
|
and v is a vector with dimensions ([n1, ...nn], D2).
|
|
15
15
|
|
|
16
16
|
The higher-order dimensions (n1, ...nn) can be anything (or nothing), but they must be the same for M and v.
|
|
17
|
+
A special case where either the matrix or vector has NO higher-order dimensions is also allowed; the result will be
|
|
18
|
+
the single matrix/vector broadcast over the higher-order dimensionality of the other element.
|
|
19
|
+
|
|
20
|
+
Processing inputs with different numbers of higher-order dummy dimensions (i.e., dimension of length 1), while
|
|
21
|
+
technically possible, is not supported because it would be unclear which input should set the output shape.
|
|
17
22
|
|
|
18
23
|
Parameters
|
|
19
24
|
----------
|
|
@@ -29,13 +34,7 @@ def nd_left_matrix_multiply(*, vector_stack: np.ndarray, matrix_stack: np.ndarra
|
|
|
29
34
|
np.ndarray
|
|
30
35
|
([n1, ...nn], D1) ND stack of vectors with length D1
|
|
31
36
|
"""
|
|
32
|
-
|
|
33
|
-
vector_ND_shape = vector_stack.shape[:-1]
|
|
34
|
-
if matrix_ND_shape != vector_ND_shape:
|
|
35
|
-
raise ValueError(
|
|
36
|
-
f"Inputs must have the same shape for all but the last dimensions. "
|
|
37
|
-
f"{matrix_ND_shape} != {vector_ND_shape}"
|
|
38
|
-
)
|
|
37
|
+
_check_nd_dimensionality(matrix_stack=matrix_stack, vector_stack=vector_stack)
|
|
39
38
|
|
|
40
39
|
matrix_shape = matrix_stack.shape[-2:]
|
|
41
40
|
vector_size = vector_stack.shape[-1]
|
|
@@ -60,6 +59,11 @@ def nd_right_matrix_multiply(*, vector_stack: np.ndarray, matrix_stack: np.ndarr
|
|
|
60
59
|
and v is a vector with dimensions ([n1, ...nn], D1).
|
|
61
60
|
|
|
62
61
|
The higher-order dimensions (n1, ...nn) can be anything (or nothing), but they must be the same for M and v.
|
|
62
|
+
A special case where either the matrix or vector has NO higher-order dimensions is also allowed; the result will be
|
|
63
|
+
the single matrix/vector broadcast over the higher-order dimensionality of the other element.
|
|
64
|
+
|
|
65
|
+
Processing inputs with different numbers of higher-order dummy dimensions (i.e., dimension of length 1), while
|
|
66
|
+
technically possible, is not supported because it would be unclear which input should set the output shape.
|
|
63
67
|
|
|
64
68
|
Parameters
|
|
65
69
|
----------
|
|
@@ -75,13 +79,7 @@ def nd_right_matrix_multiply(*, vector_stack: np.ndarray, matrix_stack: np.ndarr
|
|
|
75
79
|
np.ndarray
|
|
76
80
|
([n1, ...nn], D1) ND stack of vectors with length D2
|
|
77
81
|
"""
|
|
78
|
-
|
|
79
|
-
vector_ND_shape = vector_stack.shape[:-1]
|
|
80
|
-
if matrix_ND_shape != vector_ND_shape:
|
|
81
|
-
raise ValueError(
|
|
82
|
-
f"Inputs must have the same shape for all but the last dimensions. "
|
|
83
|
-
f"{matrix_ND_shape} != {vector_ND_shape}"
|
|
84
|
-
)
|
|
82
|
+
_check_nd_dimensionality(matrix_stack=matrix_stack, vector_stack=vector_stack)
|
|
85
83
|
|
|
86
84
|
matrix_shape = matrix_stack.shape[-2:]
|
|
87
85
|
vector_size = vector_stack.shape[-1]
|
|
@@ -92,3 +90,20 @@ def nd_right_matrix_multiply(*, vector_stack: np.ndarray, matrix_stack: np.ndarr
|
|
|
92
90
|
|
|
93
91
|
result = np.sum(matrix_stack * vector_stack[..., :, None], axis=-2)
|
|
94
92
|
return result
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def _check_nd_dimensionality(matrix_stack, vector_stack):
|
|
96
|
+
"""
|
|
97
|
+
Check that the matrix and vector stacks have higher-order dimensions that can be broadcast together.
|
|
98
|
+
|
|
99
|
+
Enforces matrix stack shape[:-2] equals vector stack shape[:-1]. Raises a ValueError if the condition is not met.
|
|
100
|
+
|
|
101
|
+
A special case of a matrix or vector with no higher-order dimensions is allowed.
|
|
102
|
+
"""
|
|
103
|
+
matrix_ND_shape = matrix_stack.shape[:-2]
|
|
104
|
+
vector_ND_shape = vector_stack.shape[:-1]
|
|
105
|
+
if matrix_ND_shape and vector_ND_shape and matrix_ND_shape != vector_ND_shape:
|
|
106
|
+
raise ValueError(
|
|
107
|
+
f"Inputs must have the same shape for all but the last dimensions. "
|
|
108
|
+
f"{matrix_ND_shape} != {vector_ND_shape}"
|
|
109
|
+
)
|
|
@@ -22,23 +22,52 @@ def extra_dims(num_dims) -> tuple[int]:
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
@pytest.fixture
|
|
25
|
-
def matrix_stack(extra_dims, D1, D2) -> np.ndarray:
|
|
26
|
-
|
|
25
|
+
def matrix_stack(extra_dims: tuple[int, ...], single_matrix: bool, D1: int, D2: int) -> np.ndarray:
|
|
26
|
+
full_shape = extra_dims + (D1, D2)
|
|
27
|
+
if single_matrix:
|
|
28
|
+
full_shape = (D1, D2)
|
|
29
|
+
return np.random.random(full_shape)
|
|
27
30
|
|
|
28
31
|
|
|
29
32
|
@pytest.fixture
|
|
30
|
-
def left_vector_stack(extra_dims, D2) -> np.ndarray:
|
|
31
|
-
|
|
33
|
+
def left_vector_stack(extra_dims: tuple[int, ...], single_vector: bool, D2: int) -> np.ndarray:
|
|
34
|
+
full_shape = extra_dims + (D2,)
|
|
35
|
+
if single_vector:
|
|
36
|
+
full_shape = (D2,)
|
|
37
|
+
return np.random.random(full_shape)
|
|
32
38
|
|
|
33
39
|
|
|
34
40
|
@pytest.fixture
|
|
35
|
-
def right_vector_stack(extra_dims, D1) -> np.ndarray:
|
|
36
|
-
|
|
41
|
+
def right_vector_stack(extra_dims: tuple[int, ...], single_vector: bool, D1: int) -> np.ndarray:
|
|
42
|
+
full_shape = extra_dims + (D1,)
|
|
43
|
+
if single_vector:
|
|
44
|
+
full_shape = (D1,)
|
|
45
|
+
return np.random.random(full_shape)
|
|
37
46
|
|
|
38
47
|
|
|
39
48
|
# Stopping at 7 for no real reason. We need 0 and 2 for sure and then others to confirm generality.
|
|
40
|
-
|
|
41
|
-
|
|
49
|
+
# single_matrix = True tests the case where the matrix has no higher dimensions. Probably only need to test it once
|
|
50
|
+
# but we do it twice just because.
|
|
51
|
+
@pytest.mark.parametrize(
|
|
52
|
+
"num_dims, single_matrix, single_vector",
|
|
53
|
+
[
|
|
54
|
+
(0, False, False),
|
|
55
|
+
(1, False, False),
|
|
56
|
+
(2, False, False),
|
|
57
|
+
(2, True, False),
|
|
58
|
+
(2, False, True),
|
|
59
|
+
(3, False, False),
|
|
60
|
+
(4, False, False),
|
|
61
|
+
(4, False, True),
|
|
62
|
+
(5, False, False),
|
|
63
|
+
(5, True, False),
|
|
64
|
+
(6, False, False),
|
|
65
|
+
(7, False, False),
|
|
66
|
+
],
|
|
67
|
+
)
|
|
68
|
+
def test_nd_left_matrix_multiply(
|
|
69
|
+
matrix_stack, left_vector_stack, extra_dims, single_matrix, single_vector, D1, D2, num_dims
|
|
70
|
+
):
|
|
42
71
|
"""
|
|
43
72
|
Given: Matrix and vector stacks with arbitrary higher dimensions
|
|
44
73
|
When: Left matrix multiplying them
|
|
@@ -48,8 +77,19 @@ def test_nd_left_matrix_multiply(matrix_stack, left_vector_stack, extra_dims, D1
|
|
|
48
77
|
expected = matrix_stack @ left_vector_stack
|
|
49
78
|
else:
|
|
50
79
|
flattened_size = np.prod(extra_dims)
|
|
51
|
-
|
|
52
|
-
|
|
80
|
+
|
|
81
|
+
# If single_* is True then just tile it out to match the flattened size so the loop below works
|
|
82
|
+
flat_matrix = (
|
|
83
|
+
np.reshape(matrix_stack, (flattened_size, D1, D2))
|
|
84
|
+
if not single_matrix
|
|
85
|
+
else np.tile(matrix_stack[None, ...], (flattened_size, 1, 1))
|
|
86
|
+
)
|
|
87
|
+
flat_vector = (
|
|
88
|
+
np.reshape(left_vector_stack, (flattened_size, D2))
|
|
89
|
+
if not single_vector
|
|
90
|
+
else np.tile(left_vector_stack[None, ...], (flattened_size, 1))
|
|
91
|
+
)
|
|
92
|
+
|
|
53
93
|
flat_expected = np.empty((flattened_size, D1))
|
|
54
94
|
for i in range(flattened_size):
|
|
55
95
|
flat_expected[i, :] = flat_matrix[i, :, :] @ flat_vector[i, :]
|
|
@@ -77,8 +117,29 @@ def test_nd_left_matrix_multiply_errors():
|
|
|
77
117
|
)
|
|
78
118
|
|
|
79
119
|
|
|
80
|
-
|
|
81
|
-
|
|
120
|
+
# Stopping at 7 for no real reason. We need 0 and 2 for sure and then others to confirm generality.
|
|
121
|
+
# single_matrix = True tests the case where the matrix has no higher dimensions. Probably only need to test it once
|
|
122
|
+
# but we do it twice just because.
|
|
123
|
+
@pytest.mark.parametrize(
|
|
124
|
+
"num_dims, single_matrix, single_vector",
|
|
125
|
+
[
|
|
126
|
+
(0, False, False),
|
|
127
|
+
(1, False, False),
|
|
128
|
+
(2, False, False),
|
|
129
|
+
(2, True, False),
|
|
130
|
+
(2, False, True),
|
|
131
|
+
(3, False, False),
|
|
132
|
+
(3, True, False),
|
|
133
|
+
(4, False, False),
|
|
134
|
+
(5, False, False),
|
|
135
|
+
(5, False, True),
|
|
136
|
+
(6, False, False),
|
|
137
|
+
(7, False, False),
|
|
138
|
+
],
|
|
139
|
+
)
|
|
140
|
+
def test_nd_right_matrix_multiply(
|
|
141
|
+
matrix_stack, right_vector_stack, extra_dims, single_matrix, single_vector, D1, D2, num_dims
|
|
142
|
+
):
|
|
82
143
|
"""
|
|
83
144
|
Given: Matrix and vector stacks with arbitrary higher dimensions
|
|
84
145
|
When: Right matrix multiplying them
|
|
@@ -88,8 +149,20 @@ def test_nd_right_matrix_multiply(matrix_stack, right_vector_stack, extra_dims,
|
|
|
88
149
|
expected = right_vector_stack @ matrix_stack
|
|
89
150
|
else:
|
|
90
151
|
flattened_size = np.prod(extra_dims)
|
|
91
|
-
|
|
92
|
-
|
|
152
|
+
|
|
153
|
+
# If single_* is True then just tile it out to match the flattened size so the loop below works
|
|
154
|
+
flat_matrix = (
|
|
155
|
+
np.reshape(matrix_stack, (flattened_size, D1, D2))
|
|
156
|
+
if not single_matrix
|
|
157
|
+
else np.tile(matrix_stack[None, ...], (flattened_size, 1, 1))
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
flat_vector = (
|
|
161
|
+
np.reshape(right_vector_stack, (flattened_size, D1))
|
|
162
|
+
if not single_vector
|
|
163
|
+
else np.tile(right_vector_stack[None, ...], (flattened_size, 1))
|
|
164
|
+
)
|
|
165
|
+
|
|
93
166
|
flat_expected = np.empty((flattened_size, D2))
|
|
94
167
|
for i in range(flattened_size):
|
|
95
168
|
flat_expected[i, :] = flat_vector[i, :] @ flat_matrix[i, :, :]
|
|
@@ -1,25 +1,43 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dkist-processing-math
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.1
|
|
4
4
|
Summary: Common math functionality used in the DKIST calibrations suite
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
Author-email: NSO / AURA <dkistdc@nso.edu>
|
|
6
|
+
License: BSD-3-Clause
|
|
7
|
+
Project-URL: Homepage, https://nso.edu/dkist/data-center/
|
|
8
|
+
Project-URL: Repository, https://bitbucket.org/dkistdc/dkist-processing-math/
|
|
9
9
|
Project-URL: Documentation, https://docs.dkist.nso.edu/projects/math
|
|
10
|
+
Project-URL: Help, https://nso.atlassian.net/servicedesk/customer/portal/5
|
|
10
11
|
Classifier: Programming Language :: Python
|
|
11
12
|
Classifier: Programming Language :: Python :: 3
|
|
12
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
13
14
|
Requires-Python: >=3.11
|
|
15
|
+
Description-Content-Type: text/x-rst
|
|
16
|
+
Requires-Dist: dkist-processing-common>=4.0.0
|
|
17
|
+
Requires-Dist: numpy>=1.24.0
|
|
18
|
+
Requires-Dist: scikit-image>=0.21.0
|
|
19
|
+
Requires-Dist: scipy>=1.11.0
|
|
20
|
+
Requires-Dist: peakutils>=1.3.3
|
|
14
21
|
Provides-Extra: test
|
|
22
|
+
Requires-Dist: pytest; extra == "test"
|
|
23
|
+
Requires-Dist: pytest-cov; extra == "test"
|
|
24
|
+
Requires-Dist: pytest-mock; extra == "test"
|
|
25
|
+
Requires-Dist: hypothesis; extra == "test"
|
|
26
|
+
Requires-Dist: towncrier; extra == "test"
|
|
15
27
|
Provides-Extra: docs
|
|
28
|
+
Requires-Dist: sphinx; extra == "docs"
|
|
29
|
+
Requires-Dist: sphinx-astropy; extra == "docs"
|
|
30
|
+
Requires-Dist: sphinx-changelog; extra == "docs"
|
|
31
|
+
Requires-Dist: sphinx-autoapi; extra == "docs"
|
|
32
|
+
Requires-Dist: pytest; extra == "docs"
|
|
33
|
+
Requires-Dist: towncrier; extra == "docs"
|
|
34
|
+
Requires-Dist: dkist-sphinx-theme; extra == "docs"
|
|
16
35
|
|
|
17
36
|
dkist-processing-math
|
|
18
37
|
=====================
|
|
19
38
|
|
|
20
39
|
dkist-processing-math contains the math functions used throughout the DKIST data processing software stack.
|
|
21
40
|
|
|
22
|
-
* DKIST: https://nso.edu/telescopes/dki-solar-telescope/
|
|
23
41
|
|
|
24
42
|
Development
|
|
25
43
|
-----------
|
|
@@ -6,10 +6,7 @@ README.rst
|
|
|
6
6
|
bitbucket-pipelines.yml
|
|
7
7
|
check_changelog_updated.sh
|
|
8
8
|
pyproject.toml
|
|
9
|
-
setup.cfg
|
|
10
|
-
setup.py
|
|
11
9
|
changelog/.gitempty
|
|
12
|
-
changelog/14.feature.rst
|
|
13
10
|
dkist_processing_math/__init__.py
|
|
14
11
|
dkist_processing_math/arithmetic.py
|
|
15
12
|
dkist_processing_math/feature.py
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=64", "setuptools_scm>=8"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[tool.setuptools.packages]
|
|
6
|
+
find = {}
|
|
7
|
+
|
|
8
|
+
[tool.setuptools_scm]
|
|
9
|
+
|
|
10
|
+
[project]
|
|
11
|
+
dynamic = ["version"]
|
|
12
|
+
name = "dkist-processing-math"
|
|
13
|
+
requires-python = ">=3.11"
|
|
14
|
+
description = "Common math functionality used in the DKIST calibrations suite"
|
|
15
|
+
readme = "README.rst"
|
|
16
|
+
authors = [ {name = "NSO / AURA", email = "dkistdc@nso.edu"} ]
|
|
17
|
+
license = {text = "BSD-3-Clause"}
|
|
18
|
+
classifiers = [
|
|
19
|
+
"Programming Language :: Python",
|
|
20
|
+
"Programming Language :: Python :: 3",
|
|
21
|
+
"Programming Language :: Python :: 3.11",
|
|
22
|
+
]
|
|
23
|
+
dependencies = [
|
|
24
|
+
"dkist-processing-common >= 4.0.0",
|
|
25
|
+
"numpy >= 1.24.0",
|
|
26
|
+
"scikit-image >= 0.21.0",
|
|
27
|
+
"scipy >= 1.11.0",
|
|
28
|
+
"peakutils >= 1.3.3",
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
[project.urls]
|
|
32
|
+
Homepage = "https://nso.edu/dkist/data-center/"
|
|
33
|
+
Repository = "https://bitbucket.org/dkistdc/dkist-processing-math/"
|
|
34
|
+
Documentation = "https://docs.dkist.nso.edu/projects/math"
|
|
35
|
+
Help = "https://nso.atlassian.net/servicedesk/customer/portal/5"
|
|
36
|
+
|
|
37
|
+
[project.optional-dependencies]
|
|
38
|
+
test = [
|
|
39
|
+
"pytest",
|
|
40
|
+
"pytest-cov",
|
|
41
|
+
"pytest-mock",
|
|
42
|
+
"hypothesis",
|
|
43
|
+
"towncrier",
|
|
44
|
+
]
|
|
45
|
+
docs = [
|
|
46
|
+
"sphinx",
|
|
47
|
+
"sphinx-astropy",
|
|
48
|
+
"sphinx-changelog",
|
|
49
|
+
"sphinx-autoapi",
|
|
50
|
+
"pytest",
|
|
51
|
+
"towncrier",
|
|
52
|
+
"dkist-sphinx-theme",
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
[tool.pytest.ini_options]
|
|
56
|
+
markers = [
|
|
57
|
+
"development: For tests that can only be run while developing with a sidecar proxy (as opposed to in bitbucket pipelines)"
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
[tool.coverage.run]
|
|
61
|
+
omit = [
|
|
62
|
+
"dkist_processing_math/tests/*",
|
|
63
|
+
"dkist_processing_math/__init__.py",
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
[tool.coverage.report]
|
|
67
|
+
show_missing = true
|
|
68
|
+
|
|
69
|
+
[tool.towncrier]
|
|
70
|
+
package = "dkist_processing_math"
|
|
71
|
+
filename = "CHANGELOG.rst"
|
|
72
|
+
directory = "changelog/"
|
|
73
|
+
issue_format = "`#{issue} <https://bitbucket.org/dkistdc/dkist-processing-math/pull-requests/{issue}>`__"
|
|
74
|
+
title_format = "{version} ({project_date})"
|
|
75
|
+
ignore = [".gitempty"]
|
|
76
|
+
|
|
77
|
+
[[tool.towncrier.type]]
|
|
78
|
+
directory = "feature"
|
|
79
|
+
name = "Features"
|
|
80
|
+
showcontent = true
|
|
81
|
+
|
|
82
|
+
[[tool.towncrier.type]]
|
|
83
|
+
directory = "bugfix"
|
|
84
|
+
name = "Bugfixes"
|
|
85
|
+
showcontent = true
|
|
86
|
+
|
|
87
|
+
[[tool.towncrier.type]]
|
|
88
|
+
directory = "removal"
|
|
89
|
+
name = "Removals"
|
|
90
|
+
showcontent = true
|
|
91
|
+
|
|
92
|
+
[[tool.towncrier.type]]
|
|
93
|
+
directory = "misc"
|
|
94
|
+
name = "Misc"
|
|
95
|
+
showcontent = true
|
|
96
|
+
|
|
97
|
+
[[tool.towncrier.type]]
|
|
98
|
+
directory = "doc"
|
|
99
|
+
name = "Documentation"
|
|
100
|
+
showcontent = true
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Add functions to broadcast matrix multiplication over extra array dimensions.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
dkist_processing_math
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
[tool.towncrier]
|
|
2
|
-
package = "dkist_processing_math"
|
|
3
|
-
filename = "CHANGELOG.rst"
|
|
4
|
-
directory = "changelog/"
|
|
5
|
-
issue_format = "`#{issue} <https://bitbucket.org/dkistdc/dkist-processing-math/pull-requests/{issue}>`__"
|
|
6
|
-
title_format = "{version} ({project_date})"
|
|
7
|
-
|
|
8
|
-
[[tool.towncrier.type]]
|
|
9
|
-
directory = "feature"
|
|
10
|
-
name = "Features"
|
|
11
|
-
showcontent = true
|
|
12
|
-
|
|
13
|
-
[[tool.towncrier.type]]
|
|
14
|
-
directory = "bugfix"
|
|
15
|
-
name = "Bugfixes"
|
|
16
|
-
showcontent = true
|
|
17
|
-
|
|
18
|
-
[[tool.towncrier.type]]
|
|
19
|
-
directory = "removal"
|
|
20
|
-
name = "Removals"
|
|
21
|
-
showcontent = true
|
|
22
|
-
|
|
23
|
-
[[tool.towncrier.type]]
|
|
24
|
-
directory = "misc"
|
|
25
|
-
name = "Misc"
|
|
26
|
-
showcontent = true
|
|
27
|
-
|
|
28
|
-
[[tool.towncrier.type]]
|
|
29
|
-
directory = "doc"
|
|
30
|
-
name = "Documentation"
|
|
31
|
-
showcontent = true
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
[metadata]
|
|
2
|
-
name = dkist-processing-math
|
|
3
|
-
description = Common math functionality used in the DKIST calibrations suite
|
|
4
|
-
long_description = file: README.rst
|
|
5
|
-
author = NSO / AURA
|
|
6
|
-
author_email = "dkistdc@nso.edu"
|
|
7
|
-
license = MIT
|
|
8
|
-
url = https://bitbucket.org/dkistdc/dkist_processing_math/src/master/
|
|
9
|
-
project_urls =
|
|
10
|
-
Documentation = https://docs.dkist.nso.edu/projects/math
|
|
11
|
-
classifiers =
|
|
12
|
-
Programming Language :: Python
|
|
13
|
-
Programming Language :: Python :: 3
|
|
14
|
-
Programming Language :: Python :: 3.11
|
|
15
|
-
|
|
16
|
-
[options]
|
|
17
|
-
python_requires = >=3.11
|
|
18
|
-
setup_requires = setuptools_scm
|
|
19
|
-
packages = find:
|
|
20
|
-
include_package_data = True
|
|
21
|
-
install_requires =
|
|
22
|
-
dkist-processing-common >= 4.0.0
|
|
23
|
-
numpy >= 1.24.0
|
|
24
|
-
scikit-image >= 0.21.0
|
|
25
|
-
scipy >= 1.11.0
|
|
26
|
-
peakutils >= 1.3.3
|
|
27
|
-
|
|
28
|
-
[options.extras_require]
|
|
29
|
-
test =
|
|
30
|
-
pytest
|
|
31
|
-
pytest-cov
|
|
32
|
-
pytest-mock
|
|
33
|
-
hypothesis
|
|
34
|
-
towncrier
|
|
35
|
-
docs =
|
|
36
|
-
sphinx
|
|
37
|
-
sphinx-astropy
|
|
38
|
-
sphinx-changelog
|
|
39
|
-
sphinx-autoapi
|
|
40
|
-
pytest
|
|
41
|
-
towncrier
|
|
42
|
-
dkist-sphinx-theme
|
|
43
|
-
|
|
44
|
-
[build_docs]
|
|
45
|
-
source-dir = docs
|
|
46
|
-
build-dir = docs/_build
|
|
47
|
-
all_files = 1
|
|
48
|
-
|
|
49
|
-
[upload_docs]
|
|
50
|
-
upload-dir = docs/_build/html
|
|
51
|
-
show-response = 1
|
|
52
|
-
|
|
53
|
-
[tool:pytest]
|
|
54
|
-
markers =
|
|
55
|
-
development: For tests that can only be run while developing with a sidecar proxy (as opposed to in bitbucket pipelines)
|
|
56
|
-
|
|
57
|
-
[egg_info]
|
|
58
|
-
tag_build =
|
|
59
|
-
tag_date = 0
|
|
60
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/__init__.py
RENAMED
|
File without changes
|
{dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/arithmetic.py
RENAMED
|
File without changes
|
{dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/feature.py
RENAMED
|
File without changes
|
{dkist-processing-math-2.1.0rc1 → dkist_processing_math-2.1.1}/dkist_processing_math/statistics.py
RENAMED
|
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
|