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.

Files changed (64) hide show
  1. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/CMakeLists.txt +1 -1
  2. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/PKG-INFO +1 -1
  3. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/conanfile.py +5 -5
  4. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/python/hyhound/__init__.py +1 -1
  5. hyhound-1.0.2a2/python/hyhound/_hyhound.pyi +415 -0
  6. hyhound-1.0.2a2/python/hyhound.py.cpp +642 -0
  7. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/python/test/test_update_cholesky.py +38 -8
  8. hyhound-1.0.2a2/src/hyhound/include/hyhound/householder-apply-serial.tpp +136 -0
  9. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/householder-updowndate-serial.tpp +43 -17
  10. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/householder-updowndate.hpp +8 -1
  11. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/micro-kernels/householder-updowndate.hpp +3 -0
  12. hyhound-1.0.2a2/src/hyhound/src/householder-updowndate-serial.cpp.in +56 -0
  13. hyhound-1.0.2a1/python/hyhound/_hyhound.pyi +0 -235
  14. hyhound-1.0.2a1/python/hyhound.py.cpp +0 -356
  15. hyhound-1.0.2a1/src/hyhound/src/householder-updowndate-serial.cpp.in +0 -37
  16. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/LICENSE +0 -0
  17. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/cmake/Debug.cmake +0 -0
  18. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/cmake/Develop.cmake +0 -0
  19. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/cmake/Warnings.cmake +0 -0
  20. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/pyproject.toml +0 -0
  21. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/python/CMakeLists.txt +0 -0
  22. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/python/README.rst +0 -0
  23. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/python/dispatch.py.cpp +0 -0
  24. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/python/hyhound/_hyhound.py +0 -0
  25. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/python/hyhound/py.typed +0 -0
  26. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/CMakeLists.txt +0 -0
  27. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/BuildTime.cmake +0 -0
  28. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/Config.cmake.in +0 -0
  29. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/CoreConfig.cmake.in +0 -0
  30. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/Install.cmake +0 -0
  31. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/Library.cmake +0 -0
  32. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/OCPConfig.cmake.in +0 -0
  33. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/hyhound-build-time.cpp.in +0 -0
  34. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/cmake/hyhound-version.h.in +0 -0
  35. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/config.hpp.in +0 -0
  36. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/householder-updowndate-micro-kernels.tpp +0 -0
  37. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/micro-kernels/common.hpp +0 -0
  38. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/micro-kernels/householder-updowndate-diag.tpp +0 -0
  39. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/micro-kernels/householder-updowndate-full.tpp +0 -0
  40. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/micro-kernels/householder-updowndate-tail.tpp +0 -0
  41. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/micro-kernels/matrix-accessor.hpp +0 -0
  42. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/include/hyhound/updown.hpp +0 -0
  43. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/src/hyhound.cpp +0 -0
  44. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/src/micro-kernels/Codegen.cmake +0 -0
  45. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/src/micro-kernels/householder-updowndate-diag.cpp.in +0 -0
  46. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/src/micro-kernels/householder-updowndate-full.cpp.in +0 -0
  47. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/hyhound/src/micro-kernels/householder-updowndate-tail.cpp.in +0 -0
  48. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/include/hyhound/ocp/riccati.hpp +0 -0
  49. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/include/hyhound/ocp/schur.hpp +0 -0
  50. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/src/riccati/factor.cpp +0 -0
  51. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/src/riccati/solve.cpp +0 -0
  52. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/src/riccati/update.cpp +0 -0
  53. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/src/schur/factor.cpp +0 -0
  54. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/src/schur/solve.cpp +0 -0
  55. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/ocp/src/schur/update.cpp +0 -0
  56. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/util/include/hyhound/assume.hpp +0 -0
  57. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/util/include/hyhound/cneg.hpp +0 -0
  58. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/util/include/hyhound/loop.hpp +0 -0
  59. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/util/include/hyhound/lut.hpp +0 -0
  60. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/src/util/include/hyhound/unroll.h +0 -0
  61. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/test/CMakeLists.txt +0 -0
  62. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/test/test-downdate.cpp +0 -0
  63. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/test/test-ocp.cpp +0 -0
  64. {hyhound-1.0.2a1 → hyhound-1.0.2a2}/test/test-updowndate.cpp +0 -0
@@ -7,7 +7,7 @@ project(hyhound
7
7
  LANGUAGES CXX
8
8
  )
9
9
  include(CTest)
10
- set(PY_VERSION_SUFFIX "a1")
10
+ set(PY_VERSION_SUFFIX "a2")
11
11
 
12
12
  # Make sure that the Python and CMake versions match
13
13
  set(PY_FULL_VERSION ${PROJECT_VERSION}${PY_VERSION_SUFFIX})
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hyhound
3
- Version: 1.0.2a1
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.1"
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.17", transitive_headers=True, transitive_libs=True
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/3.4.0", transitive_headers=True)
69
+ self.requires("eigen/5.0.0", transitive_headers=True)
70
70
  elif self.options.with_benchmarks:
71
- self.requires("eigen/3.4.0")
71
+ self.requires("eigen/5.0.0")
72
72
  else:
73
- self.test_requires("eigen/3.4.0")
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:
@@ -2,7 +2,7 @@
2
2
  Hyperbolic Householder transformations for Up- and Downdating Cholesky factorizations.
3
3
  """
4
4
 
5
- __version__ = "1.0.2a1"
5
+ __version__ = "1.0.2a2"
6
6
 
7
7
  from ._hyhound import * # noqa: F403
8
8
  from ._hyhound import __version__ as __c_version__ # noqa: F401
@@ -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')]]: ...