hyhound 1.0.2a1__tar.gz → 1.0.2a2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of hyhound might be problematic. Click here for more details.
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/CMakeLists.txt +1 -1
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/PKG-INFO +1 -1
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/conanfile.py +5 -5
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/python/hyhound/__init__.py +1 -1
- hyhound-1.0.2a2/python/hyhound/_hyhound.pyi +415 -0
- hyhound-1.0.2a2/python/hyhound.py.cpp +642 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/python/test/test_update_cholesky.py +38 -8
- hyhound-1.0.2a2/src/hyhound/include/hyhound/householder-apply-serial.tpp +136 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/householder-updowndate-serial.tpp +43 -17
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/householder-updowndate.hpp +8 -1
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/micro-kernels/householder-updowndate.hpp +3 -0
- hyhound-1.0.2a2/src/hyhound/src/householder-updowndate-serial.cpp.in +56 -0
- hyhound-1.0.2a1/python/hyhound/_hyhound.pyi +0 -235
- hyhound-1.0.2a1/python/hyhound.py.cpp +0 -356
- hyhound-1.0.2a1/src/hyhound/src/householder-updowndate-serial.cpp.in +0 -37
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/LICENSE +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/cmake/Debug.cmake +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/cmake/Develop.cmake +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/cmake/Warnings.cmake +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/pyproject.toml +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/python/CMakeLists.txt +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/python/README.rst +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/python/dispatch.py.cpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/python/hyhound/_hyhound.py +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/python/hyhound/py.typed +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/CMakeLists.txt +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/BuildTime.cmake +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/Config.cmake.in +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/CoreConfig.cmake.in +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/Install.cmake +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/Library.cmake +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/OCPConfig.cmake.in +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/hyhound-build-time.cpp.in +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/hyhound-version.h.in +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/config.hpp.in +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/householder-updowndate-micro-kernels.tpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/micro-kernels/common.hpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/micro-kernels/householder-updowndate-diag.tpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/micro-kernels/householder-updowndate-full.tpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/micro-kernels/householder-updowndate-tail.tpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/micro-kernels/matrix-accessor.hpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/updown.hpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/src/hyhound.cpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/src/micro-kernels/Codegen.cmake +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/src/micro-kernels/householder-updowndate-diag.cpp.in +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/src/micro-kernels/householder-updowndate-full.cpp.in +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/src/micro-kernels/householder-updowndate-tail.cpp.in +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/include/hyhound/ocp/riccati.hpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/include/hyhound/ocp/schur.hpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/src/riccati/factor.cpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/src/riccati/solve.cpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/src/riccati/update.cpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/src/schur/factor.cpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/src/schur/solve.cpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/src/schur/update.cpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/util/include/hyhound/assume.hpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/util/include/hyhound/cneg.hpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/util/include/hyhound/loop.hpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/util/include/hyhound/lut.hpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/util/include/hyhound/unroll.h +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/test/CMakeLists.txt +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/test/test-downdate.cpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/test/test-ocp.cpp +0 -0
- {hyhound-1.0.2a1 → hyhound-1.0.2a2}/test/test-updowndate.cpp +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hyhound
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2a2
|
|
4
4
|
Summary: Hyperbolic Householder transformations for Up- and Downdating Cholesky factorizations.
|
|
5
5
|
Keywords: linear-algebra,cholesky,update,downdate,matrix
|
|
6
6
|
Author-Email: Pieter P <pieter.p.dev@outlook.com>
|
|
@@ -9,7 +9,7 @@ from conan.tools.scm import Git
|
|
|
9
9
|
|
|
10
10
|
class HyhoundRecipe(ConanFile):
|
|
11
11
|
name = "hyhound"
|
|
12
|
-
version = "1.0.2-alpha.
|
|
12
|
+
version = "1.0.2-alpha.2"
|
|
13
13
|
|
|
14
14
|
# Optional metadata
|
|
15
15
|
license = "LGPL-3.0-or-later"
|
|
@@ -63,14 +63,14 @@ class HyhoundRecipe(ConanFile):
|
|
|
63
63
|
|
|
64
64
|
def requirements(self):
|
|
65
65
|
self.requires(
|
|
66
|
-
"guanaqo/1.0.0-alpha.
|
|
66
|
+
"guanaqo/1.0.0-alpha.19", transitive_headers=True, transitive_libs=True
|
|
67
67
|
)
|
|
68
68
|
if self.options.with_ocp:
|
|
69
|
-
self.requires("eigen/
|
|
69
|
+
self.requires("eigen/5.0.0", transitive_headers=True)
|
|
70
70
|
elif self.options.with_benchmarks:
|
|
71
|
-
self.requires("eigen/
|
|
71
|
+
self.requires("eigen/5.0.0")
|
|
72
72
|
else:
|
|
73
|
-
self.test_requires("eigen/
|
|
73
|
+
self.test_requires("eigen/5.0.0")
|
|
74
74
|
if self.options.with_benchmarks:
|
|
75
75
|
self.requires("benchmark/1.9.4")
|
|
76
76
|
if self.options.with_python:
|
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
from typing import Annotated, overload
|
|
2
|
+
|
|
3
|
+
import numpy
|
|
4
|
+
from numpy.typing import NDArray
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
build_time: str = '2025-10-23T15:57:52Z'
|
|
8
|
+
|
|
9
|
+
commit_hash: str = '42a4b5c0c28b2ca237982197d54851054b584a80'
|
|
10
|
+
|
|
11
|
+
@overload
|
|
12
|
+
def update_cholesky_inplace(L: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu')], A: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu')]) -> None:
|
|
13
|
+
"""
|
|
14
|
+
Cholesky factorization update. Overwrites its arguments.
|
|
15
|
+
|
|
16
|
+
L̃L̃ᵀ + ÃÃᵀ = LLᵀ + AAᵀ
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
L : (k × n), lower-trapezoidal, Fortran order
|
|
21
|
+
On entry, the original Cholesky factor L.
|
|
22
|
+
On exit, contains the updated Cholesky factor L̃.
|
|
23
|
+
|
|
24
|
+
A : (k × m), rectangular, Fortran order
|
|
25
|
+
On entry, the update matrix A.
|
|
26
|
+
On exit, contains the k-n bottom rows of the remaining update matrix Ã
|
|
27
|
+
(the top n rows of à are zero).
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
@overload
|
|
31
|
+
def update_cholesky_inplace(L: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu')], A: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu')]) -> None: ...
|
|
32
|
+
|
|
33
|
+
@overload
|
|
34
|
+
def downdate_cholesky_inplace(L: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu')], A: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu')]) -> None:
|
|
35
|
+
"""
|
|
36
|
+
Cholesky factorization downdate. Overwrites its arguments.
|
|
37
|
+
|
|
38
|
+
L̃L̃ᵀ - ÃÃᵀ = LLᵀ - AAᵀ
|
|
39
|
+
|
|
40
|
+
Parameters
|
|
41
|
+
----------
|
|
42
|
+
L : (k × n), lower-trapezoidal, Fortran order
|
|
43
|
+
On entry, the original Cholesky factor L.
|
|
44
|
+
On exit, contains the updated Cholesky factor L̃.
|
|
45
|
+
|
|
46
|
+
A : (k × m), rectangular, Fortran order
|
|
47
|
+
On entry, the downdate matrix A.
|
|
48
|
+
On exit, contains the k-n bottom rows of the remaining downdate matrix Ã
|
|
49
|
+
(the top n rows of à are zero).
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
@overload
|
|
53
|
+
def downdate_cholesky_inplace(L: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu')], A: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu')]) -> None: ...
|
|
54
|
+
|
|
55
|
+
@overload
|
|
56
|
+
def update_cholesky_sign_inplace(L: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu')], A: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu')], signs: Annotated[NDArray[numpy.float64], dict(shape=(None,), order='A', device='cpu', writable=False)]) -> None:
|
|
57
|
+
"""
|
|
58
|
+
Cholesky factorization update with signed columns. Overwrites its arguments.
|
|
59
|
+
|
|
60
|
+
L̃L̃ᵀ + ÃSÃᵀ = LLᵀ + ASAᵀ,
|
|
61
|
+
where S = np.diag(np.copysign(np.ones(m), signs)) and signs contains ±0.
|
|
62
|
+
|
|
63
|
+
Parameters
|
|
64
|
+
----------
|
|
65
|
+
L : (k × n), lower-trapezoidal, Fortran order
|
|
66
|
+
On entry, the original Cholesky factor L.
|
|
67
|
+
On exit, contains the updated Cholesky factor L̃.
|
|
68
|
+
|
|
69
|
+
A : (k × m), rectangular, Fortran order
|
|
70
|
+
On entry, the update matrix A.
|
|
71
|
+
On exit, contains the k-n bottom rows of the remaining update matrix Ã
|
|
72
|
+
(the top n rows of à are zero).
|
|
73
|
+
|
|
74
|
+
signs : m-vector
|
|
75
|
+
Signs that determine whether a column of A is added (+0) or removed (-0).
|
|
76
|
+
Values other than ±0 are not allowed.
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
@overload
|
|
80
|
+
def update_cholesky_sign_inplace(L: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu')], A: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu')], signs: Annotated[NDArray[numpy.float32], dict(shape=(None,), order='A', device='cpu', writable=False)]) -> None: ...
|
|
81
|
+
|
|
82
|
+
@overload
|
|
83
|
+
def update_cholesky_diag_inplace(L: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu')], A: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu')], diag: Annotated[NDArray[numpy.float64], dict(shape=(None,), order='A', device='cpu', writable=False)]) -> None:
|
|
84
|
+
"""
|
|
85
|
+
Cholesky factorization update with diagonal scaling. Overwrites its arguments.
|
|
86
|
+
|
|
87
|
+
L̃L̃ᵀ + ÃDÃᵀ = LLᵀ + ADAᵀ,
|
|
88
|
+
where D = np.diag(diag).
|
|
89
|
+
|
|
90
|
+
Parameters
|
|
91
|
+
----------
|
|
92
|
+
L : (k × n), lower-trapezoidal, Fortran order
|
|
93
|
+
On entry, the original Cholesky factor L.
|
|
94
|
+
On exit, contains the updated Cholesky factor L̃.
|
|
95
|
+
|
|
96
|
+
A : (k × m), rectangular, Fortran order
|
|
97
|
+
On entry, the update matrix A.
|
|
98
|
+
On exit, contains the k-n bottom rows of the remaining update matrix Ã
|
|
99
|
+
(the top n rows of à are zero).
|
|
100
|
+
|
|
101
|
+
diag : m-vector
|
|
102
|
+
Scale factors corresponding to the columns of A.
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
@overload
|
|
106
|
+
def update_cholesky_diag_inplace(L: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu')], A: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu')], diag: Annotated[NDArray[numpy.float32], dict(shape=(None,), order='A', device='cpu', writable=False)]) -> None: ...
|
|
107
|
+
|
|
108
|
+
@overload
|
|
109
|
+
def update_cholesky(L: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')]]:
|
|
110
|
+
"""
|
|
111
|
+
Cholesky factorization update. Returns updated copies.
|
|
112
|
+
|
|
113
|
+
L̃L̃ᵀ + ÃÃᵀ = LLᵀ + AAᵀ
|
|
114
|
+
|
|
115
|
+
Parameters
|
|
116
|
+
----------
|
|
117
|
+
L : (k × n), lower-trapezoidal
|
|
118
|
+
The original Cholesky factor.
|
|
119
|
+
|
|
120
|
+
A : (k × m), rectangular
|
|
121
|
+
The update matrix.
|
|
122
|
+
|
|
123
|
+
Returns
|
|
124
|
+
-------
|
|
125
|
+
L̃ : (k × n)
|
|
126
|
+
The updated Cholesky factor.
|
|
127
|
+
|
|
128
|
+
A_rem : (k × m)
|
|
129
|
+
Contains the k-n bottom rows of the remaining update matrix Ã.
|
|
130
|
+
The top n rows of à are zero (not stored explicitly).
|
|
131
|
+
The top n rows of A_rem contain Householder reflectors.
|
|
132
|
+
|
|
133
|
+
W : (r × n)
|
|
134
|
+
The upper triangular Householder representations generated during the
|
|
135
|
+
Cholesky factorization update. Together with the top n rows of A_rem,
|
|
136
|
+
this can be used to apply the block Householder transformation to other matrices.
|
|
137
|
+
The number of rows depends on the block size and is architecture-dependent.
|
|
138
|
+
"""
|
|
139
|
+
|
|
140
|
+
@overload
|
|
141
|
+
def update_cholesky(L: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')]]: ...
|
|
142
|
+
|
|
143
|
+
@overload
|
|
144
|
+
def downdate_cholesky(L: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')]]:
|
|
145
|
+
"""
|
|
146
|
+
Cholesky factorization downdate. Returns updated copies.
|
|
147
|
+
|
|
148
|
+
L̃L̃ᵀ - ÃÃᵀ = LLᵀ - AAᵀ
|
|
149
|
+
|
|
150
|
+
Parameters
|
|
151
|
+
----------
|
|
152
|
+
L : (k × n), lower-trapezoidal
|
|
153
|
+
The original Cholesky factor.
|
|
154
|
+
|
|
155
|
+
A : (k × m), rectangular
|
|
156
|
+
The downdate matrix.
|
|
157
|
+
|
|
158
|
+
Returns
|
|
159
|
+
-------
|
|
160
|
+
L̃ : (k × n)
|
|
161
|
+
The updated Cholesky factor.
|
|
162
|
+
|
|
163
|
+
A_rem : (k × m)
|
|
164
|
+
Contains the k-n bottom rows of the remaining downdate matrix Ã.
|
|
165
|
+
The top n rows of à are zero (not stored explicitly).
|
|
166
|
+
The top n rows of A_rem contain Householder reflectors.
|
|
167
|
+
|
|
168
|
+
W : (r × n)
|
|
169
|
+
The upper triangular Householder representations generated during the
|
|
170
|
+
Cholesky factorization update. Together with the top n rows of A_rem,
|
|
171
|
+
this can be used to apply the block Householder transformation to other matrices.
|
|
172
|
+
The number of rows depends on the block size and is architecture-dependent.
|
|
173
|
+
"""
|
|
174
|
+
|
|
175
|
+
@overload
|
|
176
|
+
def downdate_cholesky(L: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')]]: ...
|
|
177
|
+
|
|
178
|
+
@overload
|
|
179
|
+
def update_cholesky_sign(L: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)], signs: Annotated[NDArray[numpy.float64], dict(shape=(None,), order='A', device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')]]:
|
|
180
|
+
"""
|
|
181
|
+
Cholesky factorization update with signed columns. Returns updated copies.
|
|
182
|
+
|
|
183
|
+
L̃L̃ᵀ + ÃSÃᵀ = LLᵀ + ASAᵀ,
|
|
184
|
+
where S = np.diag(np.copysign(np.ones(m), signs)) and signs contains ±0.
|
|
185
|
+
|
|
186
|
+
Parameters
|
|
187
|
+
----------
|
|
188
|
+
L : (k × n), lower-trapezoidal
|
|
189
|
+
The original Cholesky factor.
|
|
190
|
+
|
|
191
|
+
A : (k × m), rectangular
|
|
192
|
+
The update matrix.
|
|
193
|
+
|
|
194
|
+
signs : m-vector
|
|
195
|
+
Signs that determine whether a column of A is added (+0) or removed (-0).
|
|
196
|
+
Values other than ±0 are not allowed.
|
|
197
|
+
|
|
198
|
+
Returns
|
|
199
|
+
-------
|
|
200
|
+
L̃ : (k × n)
|
|
201
|
+
The updated Cholesky factor.
|
|
202
|
+
|
|
203
|
+
A_rem : (k × m)
|
|
204
|
+
Contains the k-n bottom rows of the remaining update matrix Ã.
|
|
205
|
+
The top n rows of à are zero (not stored explicitly).
|
|
206
|
+
The top n rows of A_rem contain Householder reflectors.
|
|
207
|
+
|
|
208
|
+
W : (r × n)
|
|
209
|
+
The upper triangular Householder representations generated during the
|
|
210
|
+
Cholesky factorization update. Together with the top n rows of A_rem,
|
|
211
|
+
this can be used to apply the block Householder transformation to other matrices.
|
|
212
|
+
The number of rows depends on the block size and is architecture-dependent.
|
|
213
|
+
"""
|
|
214
|
+
|
|
215
|
+
@overload
|
|
216
|
+
def update_cholesky_sign(L: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)], signs: Annotated[NDArray[numpy.float32], dict(shape=(None,), order='A', device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')]]: ...
|
|
217
|
+
|
|
218
|
+
@overload
|
|
219
|
+
def update_cholesky_diag(L: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)], diag: Annotated[NDArray[numpy.float64], dict(shape=(None,), order='A', device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')]]:
|
|
220
|
+
"""
|
|
221
|
+
Cholesky factorization update with diagonal scaling. Returns updated copies.
|
|
222
|
+
|
|
223
|
+
L̃L̃ᵀ + ÃDÃᵀ = LLᵀ + ADAᵀ,
|
|
224
|
+
where D = np.diag(diag).
|
|
225
|
+
|
|
226
|
+
Parameters
|
|
227
|
+
----------
|
|
228
|
+
L : (k × n), lower-trapezoidal
|
|
229
|
+
The original Cholesky factor.
|
|
230
|
+
|
|
231
|
+
A : (k × m), rectangular
|
|
232
|
+
The update matrix.
|
|
233
|
+
|
|
234
|
+
diag : m-vector
|
|
235
|
+
Scale factors corresponding to the columns of A.
|
|
236
|
+
|
|
237
|
+
Returns
|
|
238
|
+
-------
|
|
239
|
+
L̃ : (k × n)
|
|
240
|
+
The updated Cholesky factor.
|
|
241
|
+
|
|
242
|
+
A_rem : (k × m)
|
|
243
|
+
Contains the k-n bottom rows of the remaining update matrix Ã.
|
|
244
|
+
The top n rows of à are zero (not stored explicitly).
|
|
245
|
+
The top n rows of A_rem contain Householder reflectors.
|
|
246
|
+
|
|
247
|
+
W : (r × n)
|
|
248
|
+
The upper triangular Householder representations generated during the
|
|
249
|
+
Cholesky factorization update. Together with the top n rows of A_rem,
|
|
250
|
+
this can be used to apply the block Householder transformation to other matrices.
|
|
251
|
+
The number of rows depends on the block size and is architecture-dependent.
|
|
252
|
+
"""
|
|
253
|
+
|
|
254
|
+
@overload
|
|
255
|
+
def update_cholesky_diag(L: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)], diag: Annotated[NDArray[numpy.float32], dict(shape=(None,), order='A', device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')]]: ...
|
|
256
|
+
|
|
257
|
+
@overload
|
|
258
|
+
def update_apply_householder(L: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)], W: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu', writable=False)], B: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')]]:
|
|
259
|
+
"""
|
|
260
|
+
Apply a block Householder transformation generated during a Cholesky
|
|
261
|
+
factorization update. Returns updated copies.
|
|
262
|
+
|
|
263
|
+
(L̃ Ã) = (L A) Q
|
|
264
|
+
|
|
265
|
+
where Q is the block Householder transformation represented by W and B.
|
|
266
|
+
|
|
267
|
+
Parameters
|
|
268
|
+
----------
|
|
269
|
+
L : (l × n), rectangular
|
|
270
|
+
Matrix to apply the transformation to.
|
|
271
|
+
|
|
272
|
+
A : (l × m), rectangular
|
|
273
|
+
Matrix to apply the transformation to.
|
|
274
|
+
|
|
275
|
+
W : (r × n)
|
|
276
|
+
The upper triangular Householder representations generated during the
|
|
277
|
+
Cholesky factorization update.
|
|
278
|
+
|
|
279
|
+
B : (k × m), rectangular
|
|
280
|
+
The Householder reflector vectors generated during the Cholesky
|
|
281
|
+
factorization update.
|
|
282
|
+
|
|
283
|
+
Returns
|
|
284
|
+
-------
|
|
285
|
+
L̃ : (l × n)
|
|
286
|
+
The updated matrix L.
|
|
287
|
+
|
|
288
|
+
à : (l × m)
|
|
289
|
+
The updated matrix A.
|
|
290
|
+
"""
|
|
291
|
+
|
|
292
|
+
@overload
|
|
293
|
+
def update_apply_householder(L: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)], W: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu', writable=False)], B: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')]]: ...
|
|
294
|
+
|
|
295
|
+
@overload
|
|
296
|
+
def downdate_apply_householder(L: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)], W: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu', writable=False)], B: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')]]:
|
|
297
|
+
"""
|
|
298
|
+
Apply a block Householder transformation generated during a Cholesky
|
|
299
|
+
factorization downdate. Returns updated copies.
|
|
300
|
+
|
|
301
|
+
(L̃ Ã) = (L A) Q
|
|
302
|
+
|
|
303
|
+
where Q is the block Householder transformation represented by W and B.
|
|
304
|
+
|
|
305
|
+
Parameters
|
|
306
|
+
----------
|
|
307
|
+
L : (l × n), rectangular
|
|
308
|
+
Matrix to apply the transformation to.
|
|
309
|
+
|
|
310
|
+
A : (l × m), rectangular
|
|
311
|
+
Matrix to apply the transformation to.
|
|
312
|
+
|
|
313
|
+
W : (r × n)
|
|
314
|
+
The upper triangular Householder representations generated during the
|
|
315
|
+
Cholesky factorization downdate.
|
|
316
|
+
|
|
317
|
+
B : (k × m), rectangular
|
|
318
|
+
The Householder reflector vectors generated during the Cholesky
|
|
319
|
+
factorization downdate.
|
|
320
|
+
|
|
321
|
+
Returns
|
|
322
|
+
-------
|
|
323
|
+
L̃ : (l × n)
|
|
324
|
+
The updated matrix L.
|
|
325
|
+
|
|
326
|
+
à : (l × m)
|
|
327
|
+
The updated matrix A.
|
|
328
|
+
"""
|
|
329
|
+
|
|
330
|
+
@overload
|
|
331
|
+
def downdate_apply_householder(L: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)], W: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu', writable=False)], B: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')]]: ...
|
|
332
|
+
|
|
333
|
+
@overload
|
|
334
|
+
def update_apply_householder_sign(L: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)], signs: Annotated[NDArray[numpy.float64], dict(shape=(None,), order='A', device='cpu', writable=False)], W: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu', writable=False)], B: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')]]:
|
|
335
|
+
"""
|
|
336
|
+
Apply a block Householder transformation generated during a Cholesky
|
|
337
|
+
factorization update with signed columns. Returns updated copies.
|
|
338
|
+
|
|
339
|
+
(L̃ Ã) = (L A) Q
|
|
340
|
+
|
|
341
|
+
where Q is the block Householder transformation represented by W, B and signs.
|
|
342
|
+
|
|
343
|
+
Parameters
|
|
344
|
+
----------
|
|
345
|
+
L : (l × n), rectangular
|
|
346
|
+
Matrix to apply the transformation to.
|
|
347
|
+
|
|
348
|
+
A : (l × m), rectangular
|
|
349
|
+
Matrix to apply the transformation to.
|
|
350
|
+
|
|
351
|
+
signs : m-vector
|
|
352
|
+
Signs that determine whether a column of A was added (+0) or removed (-0).
|
|
353
|
+
Values other than ±0 are not allowed.
|
|
354
|
+
|
|
355
|
+
W : (r × n)
|
|
356
|
+
The upper triangular Householder representations generated during the
|
|
357
|
+
Cholesky factorization update.
|
|
358
|
+
|
|
359
|
+
B : (k × m), rectangular
|
|
360
|
+
The Householder reflector vectors generated during the Cholesky
|
|
361
|
+
factorization update.
|
|
362
|
+
|
|
363
|
+
Returns
|
|
364
|
+
-------
|
|
365
|
+
L̃ : (l × n)
|
|
366
|
+
The updated matrix L.
|
|
367
|
+
|
|
368
|
+
à : (l × m)
|
|
369
|
+
The updated matrix A.
|
|
370
|
+
"""
|
|
371
|
+
|
|
372
|
+
@overload
|
|
373
|
+
def update_apply_householder_sign(L: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)], signs: Annotated[NDArray[numpy.float32], dict(shape=(None,), order='A', device='cpu', writable=False)], W: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu', writable=False)], B: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')]]: ...
|
|
374
|
+
|
|
375
|
+
@overload
|
|
376
|
+
def update_apply_householder_diag(L: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float64], dict(shape=(None, None), device='cpu', writable=False)], diag: Annotated[NDArray[numpy.float64], dict(shape=(None,), order='A', device='cpu', writable=False)], W: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu', writable=False)], B: Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F', device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float64], dict(shape=(None, None), order='F')]]:
|
|
377
|
+
"""
|
|
378
|
+
Apply a block Householder transformation generated during a Cholesky
|
|
379
|
+
factorization update with diagonal scaling. Returns updated copies.
|
|
380
|
+
|
|
381
|
+
(L̃ Ã) = (L A) Q
|
|
382
|
+
|
|
383
|
+
where Q is the block Householder transformation represented by W, B and diag.
|
|
384
|
+
|
|
385
|
+
Parameters
|
|
386
|
+
----------
|
|
387
|
+
L : (l × n), rectangular
|
|
388
|
+
Matrix to apply the transformation to.
|
|
389
|
+
|
|
390
|
+
A : (l × m), rectangular
|
|
391
|
+
Matrix to apply the transformation to.
|
|
392
|
+
|
|
393
|
+
diag : m-vector
|
|
394
|
+
Scale factors corresponding to the columns of A used when generating the
|
|
395
|
+
Householder transformation.
|
|
396
|
+
|
|
397
|
+
W : (r × n)
|
|
398
|
+
The upper triangular Householder representations generated during the
|
|
399
|
+
Cholesky factorization update.
|
|
400
|
+
|
|
401
|
+
B : (k × m), rectangular
|
|
402
|
+
The Householder reflector vectors generated during the Cholesky
|
|
403
|
+
factorization update.
|
|
404
|
+
|
|
405
|
+
Returns
|
|
406
|
+
-------
|
|
407
|
+
L̃ : (l × n)
|
|
408
|
+
The updated matrix L.
|
|
409
|
+
|
|
410
|
+
à : (l × m)
|
|
411
|
+
The updated matrix A.
|
|
412
|
+
"""
|
|
413
|
+
|
|
414
|
+
@overload
|
|
415
|
+
def update_apply_householder_diag(L: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)], A: Annotated[NDArray[numpy.float32], dict(shape=(None, None), device='cpu', writable=False)], diag: Annotated[NDArray[numpy.float32], dict(shape=(None,), order='A', device='cpu', writable=False)], W: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu', writable=False)], B: Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F', device='cpu', writable=False)]) -> tuple[Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')], Annotated[NDArray[numpy.float32], dict(shape=(None, None), order='F')]]: ...
|