Trajectree 0.0.1__py3-none-any.whl → 0.0.3__py3-none-any.whl
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.
- trajectree/__init__.py +0 -3
- trajectree/fock_optics/devices.py +1 -1
- trajectree/fock_optics/light_sources.py +2 -2
- trajectree/fock_optics/measurement.py +9 -9
- trajectree/fock_optics/outputs.py +10 -6
- trajectree/fock_optics/utils.py +9 -6
- trajectree/sequence/swap.py +5 -4
- trajectree/trajectory.py +5 -4
- {trajectree-0.0.1.dist-info → trajectree-0.0.3.dist-info}/METADATA +2 -3
- trajectree-0.0.3.dist-info/RECORD +16 -0
- trajectree/quimb/docs/_pygments/_pygments_dark.py +0 -118
- trajectree/quimb/docs/_pygments/_pygments_light.py +0 -118
- trajectree/quimb/docs/conf.py +0 -158
- trajectree/quimb/docs/examples/ex_mpi_expm_evo.py +0 -62
- trajectree/quimb/quimb/__init__.py +0 -507
- trajectree/quimb/quimb/calc.py +0 -1491
- trajectree/quimb/quimb/core.py +0 -2279
- trajectree/quimb/quimb/evo.py +0 -712
- trajectree/quimb/quimb/experimental/__init__.py +0 -0
- trajectree/quimb/quimb/experimental/autojittn.py +0 -129
- trajectree/quimb/quimb/experimental/belief_propagation/__init__.py +0 -109
- trajectree/quimb/quimb/experimental/belief_propagation/bp_common.py +0 -397
- trajectree/quimb/quimb/experimental/belief_propagation/d1bp.py +0 -316
- trajectree/quimb/quimb/experimental/belief_propagation/d2bp.py +0 -653
- trajectree/quimb/quimb/experimental/belief_propagation/hd1bp.py +0 -571
- trajectree/quimb/quimb/experimental/belief_propagation/hv1bp.py +0 -775
- trajectree/quimb/quimb/experimental/belief_propagation/l1bp.py +0 -316
- trajectree/quimb/quimb/experimental/belief_propagation/l2bp.py +0 -537
- trajectree/quimb/quimb/experimental/belief_propagation/regions.py +0 -194
- trajectree/quimb/quimb/experimental/cluster_update.py +0 -286
- trajectree/quimb/quimb/experimental/merabuilder.py +0 -865
- trajectree/quimb/quimb/experimental/operatorbuilder/__init__.py +0 -15
- trajectree/quimb/quimb/experimental/operatorbuilder/operatorbuilder.py +0 -1631
- trajectree/quimb/quimb/experimental/schematic.py +0 -7
- trajectree/quimb/quimb/experimental/tn_marginals.py +0 -130
- trajectree/quimb/quimb/experimental/tnvmc.py +0 -1483
- trajectree/quimb/quimb/gates.py +0 -36
- trajectree/quimb/quimb/gen/__init__.py +0 -2
- trajectree/quimb/quimb/gen/operators.py +0 -1167
- trajectree/quimb/quimb/gen/rand.py +0 -713
- trajectree/quimb/quimb/gen/states.py +0 -479
- trajectree/quimb/quimb/linalg/__init__.py +0 -6
- trajectree/quimb/quimb/linalg/approx_spectral.py +0 -1109
- trajectree/quimb/quimb/linalg/autoblock.py +0 -258
- trajectree/quimb/quimb/linalg/base_linalg.py +0 -719
- trajectree/quimb/quimb/linalg/mpi_launcher.py +0 -397
- trajectree/quimb/quimb/linalg/numpy_linalg.py +0 -244
- trajectree/quimb/quimb/linalg/rand_linalg.py +0 -514
- trajectree/quimb/quimb/linalg/scipy_linalg.py +0 -293
- trajectree/quimb/quimb/linalg/slepc_linalg.py +0 -892
- trajectree/quimb/quimb/schematic.py +0 -1518
- trajectree/quimb/quimb/tensor/__init__.py +0 -401
- trajectree/quimb/quimb/tensor/array_ops.py +0 -610
- trajectree/quimb/quimb/tensor/circuit.py +0 -4824
- trajectree/quimb/quimb/tensor/circuit_gen.py +0 -411
- trajectree/quimb/quimb/tensor/contraction.py +0 -336
- trajectree/quimb/quimb/tensor/decomp.py +0 -1255
- trajectree/quimb/quimb/tensor/drawing.py +0 -1646
- trajectree/quimb/quimb/tensor/fitting.py +0 -385
- trajectree/quimb/quimb/tensor/geometry.py +0 -583
- trajectree/quimb/quimb/tensor/interface.py +0 -114
- trajectree/quimb/quimb/tensor/networking.py +0 -1058
- trajectree/quimb/quimb/tensor/optimize.py +0 -1818
- trajectree/quimb/quimb/tensor/tensor_1d.py +0 -4778
- trajectree/quimb/quimb/tensor/tensor_1d_compress.py +0 -1854
- trajectree/quimb/quimb/tensor/tensor_1d_tebd.py +0 -662
- trajectree/quimb/quimb/tensor/tensor_2d.py +0 -5954
- trajectree/quimb/quimb/tensor/tensor_2d_compress.py +0 -96
- trajectree/quimb/quimb/tensor/tensor_2d_tebd.py +0 -1230
- trajectree/quimb/quimb/tensor/tensor_3d.py +0 -2869
- trajectree/quimb/quimb/tensor/tensor_3d_tebd.py +0 -46
- trajectree/quimb/quimb/tensor/tensor_approx_spectral.py +0 -60
- trajectree/quimb/quimb/tensor/tensor_arbgeom.py +0 -3237
- trajectree/quimb/quimb/tensor/tensor_arbgeom_compress.py +0 -565
- trajectree/quimb/quimb/tensor/tensor_arbgeom_tebd.py +0 -1138
- trajectree/quimb/quimb/tensor/tensor_builder.py +0 -5411
- trajectree/quimb/quimb/tensor/tensor_core.py +0 -11179
- trajectree/quimb/quimb/tensor/tensor_dmrg.py +0 -1472
- trajectree/quimb/quimb/tensor/tensor_mera.py +0 -204
- trajectree/quimb/quimb/utils.py +0 -892
- trajectree/quimb/tests/__init__.py +0 -0
- trajectree/quimb/tests/test_accel.py +0 -501
- trajectree/quimb/tests/test_calc.py +0 -788
- trajectree/quimb/tests/test_core.py +0 -847
- trajectree/quimb/tests/test_evo.py +0 -565
- trajectree/quimb/tests/test_gen/__init__.py +0 -0
- trajectree/quimb/tests/test_gen/test_operators.py +0 -361
- trajectree/quimb/tests/test_gen/test_rand.py +0 -296
- trajectree/quimb/tests/test_gen/test_states.py +0 -261
- trajectree/quimb/tests/test_linalg/__init__.py +0 -0
- trajectree/quimb/tests/test_linalg/test_approx_spectral.py +0 -368
- trajectree/quimb/tests/test_linalg/test_base_linalg.py +0 -351
- trajectree/quimb/tests/test_linalg/test_mpi_linalg.py +0 -127
- trajectree/quimb/tests/test_linalg/test_numpy_linalg.py +0 -84
- trajectree/quimb/tests/test_linalg/test_rand_linalg.py +0 -134
- trajectree/quimb/tests/test_linalg/test_slepc_linalg.py +0 -283
- trajectree/quimb/tests/test_tensor/__init__.py +0 -0
- trajectree/quimb/tests/test_tensor/test_belief_propagation/__init__.py +0 -0
- trajectree/quimb/tests/test_tensor/test_belief_propagation/test_d1bp.py +0 -39
- trajectree/quimb/tests/test_tensor/test_belief_propagation/test_d2bp.py +0 -67
- trajectree/quimb/tests/test_tensor/test_belief_propagation/test_hd1bp.py +0 -64
- trajectree/quimb/tests/test_tensor/test_belief_propagation/test_hv1bp.py +0 -51
- trajectree/quimb/tests/test_tensor/test_belief_propagation/test_l1bp.py +0 -142
- trajectree/quimb/tests/test_tensor/test_belief_propagation/test_l2bp.py +0 -101
- trajectree/quimb/tests/test_tensor/test_circuit.py +0 -816
- trajectree/quimb/tests/test_tensor/test_contract.py +0 -67
- trajectree/quimb/tests/test_tensor/test_decomp.py +0 -40
- trajectree/quimb/tests/test_tensor/test_mera.py +0 -52
- trajectree/quimb/tests/test_tensor/test_optimizers.py +0 -488
- trajectree/quimb/tests/test_tensor/test_tensor_1d.py +0 -1171
- trajectree/quimb/tests/test_tensor/test_tensor_2d.py +0 -606
- trajectree/quimb/tests/test_tensor/test_tensor_2d_tebd.py +0 -144
- trajectree/quimb/tests/test_tensor/test_tensor_3d.py +0 -123
- trajectree/quimb/tests/test_tensor/test_tensor_arbgeom.py +0 -226
- trajectree/quimb/tests/test_tensor/test_tensor_builder.py +0 -441
- trajectree/quimb/tests/test_tensor/test_tensor_core.py +0 -2066
- trajectree/quimb/tests/test_tensor/test_tensor_dmrg.py +0 -388
- trajectree/quimb/tests/test_tensor/test_tensor_spectral_approx.py +0 -63
- trajectree/quimb/tests/test_tensor/test_tensor_tebd.py +0 -270
- trajectree/quimb/tests/test_utils.py +0 -85
- trajectree-0.0.1.dist-info/RECORD +0 -126
- {trajectree-0.0.1.dist-info → trajectree-0.0.3.dist-info}/WHEEL +0 -0
- {trajectree-0.0.1.dist-info → trajectree-0.0.3.dist-info}/licenses/LICENSE +0 -0
- {trajectree-0.0.1.dist-info → trajectree-0.0.3.dist-info}/top_level.txt +0 -0
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
"""Scipy based linear algebra.
|
|
2
|
-
"""
|
|
3
|
-
import functools
|
|
4
|
-
|
|
5
|
-
import numpy as np
|
|
6
|
-
import scipy.sparse.linalg as spla
|
|
7
|
-
|
|
8
|
-
import quimb as qu
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def maybe_sort_and_project(lk, vk, P, sort=True):
|
|
12
|
-
if sort:
|
|
13
|
-
sortinds = np.argsort(lk)
|
|
14
|
-
lk, vk = lk[sortinds], vk[:, sortinds]
|
|
15
|
-
|
|
16
|
-
# map eigenvectors out of subspace
|
|
17
|
-
if P is not None:
|
|
18
|
-
vk = P @ vk
|
|
19
|
-
|
|
20
|
-
return lk, qu.qarray(vk)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
def eigs_scipy(
|
|
24
|
-
A,
|
|
25
|
-
k,
|
|
26
|
-
*,
|
|
27
|
-
B=None,
|
|
28
|
-
which=None,
|
|
29
|
-
return_vecs=True,
|
|
30
|
-
sigma=None,
|
|
31
|
-
isherm=True,
|
|
32
|
-
sort=True,
|
|
33
|
-
P=None,
|
|
34
|
-
tol=None,
|
|
35
|
-
backend=None,
|
|
36
|
-
**eigs_opts,
|
|
37
|
-
):
|
|
38
|
-
"""Returns a few eigenpairs from a possibly sparse hermitian operator
|
|
39
|
-
|
|
40
|
-
Parameters
|
|
41
|
-
----------
|
|
42
|
-
A : array_like, sparse_matrix, LinearOperator or quimb.Lazy
|
|
43
|
-
The operator to solve for.
|
|
44
|
-
k : int
|
|
45
|
-
Number of eigenpairs to return
|
|
46
|
-
B : array_like, sparse_matrix, LinearOperator or quimb.Lazy, optional
|
|
47
|
-
If given, the RHS operator (which should be positive) defining a
|
|
48
|
-
generalized eigen problem.
|
|
49
|
-
which : str, optional
|
|
50
|
-
where in spectrum to take eigenvalues from (see
|
|
51
|
-
:func:`scipy.sparse.linalg.eigsh`).
|
|
52
|
-
return_vecs : bool, optional
|
|
53
|
-
Whether to return the eigenvectors as well.
|
|
54
|
-
sigma : float, optional
|
|
55
|
-
Shift, if targeting interior eigenpairs.
|
|
56
|
-
isherm : bool, optional
|
|
57
|
-
Whether ``A`` is hermitian.
|
|
58
|
-
P : array_like, sparse_matrix, LinearOperator or quimb.Lazy, optional
|
|
59
|
-
Perform the eigensolve in the subspace defined by this projector.
|
|
60
|
-
sort : bool, optional
|
|
61
|
-
Whether to ensure the eigenvalues are sorted in ascending value.
|
|
62
|
-
backend : None or 'primme', optional
|
|
63
|
-
Which backend to use.
|
|
64
|
-
eigs_opts
|
|
65
|
-
Supplied to :func:`scipy.sparse.linalg.eigsh` or
|
|
66
|
-
:func:`scipy.sparse.linalg.eigs`.
|
|
67
|
-
|
|
68
|
-
Returns
|
|
69
|
-
-------
|
|
70
|
-
lk : (k,) array
|
|
71
|
-
The eigenvalues.
|
|
72
|
-
vk : (m, k) array
|
|
73
|
-
Corresponding eigenvectors (if ``return_vecs=True``).
|
|
74
|
-
"""
|
|
75
|
-
if isinstance(A, qu.Lazy):
|
|
76
|
-
A = A()
|
|
77
|
-
if isinstance(B, qu.Lazy):
|
|
78
|
-
B = B()
|
|
79
|
-
if isinstance(P, qu.Lazy):
|
|
80
|
-
P = P()
|
|
81
|
-
|
|
82
|
-
# avoid matrix like behaviour
|
|
83
|
-
if isinstance(A, qu.qarray):
|
|
84
|
-
A = A.toarray()
|
|
85
|
-
|
|
86
|
-
# project into subspace
|
|
87
|
-
if P is not None:
|
|
88
|
-
A = qu.dag(P) @ (A @ P)
|
|
89
|
-
|
|
90
|
-
# Options that might get passed that scipy doesn't support
|
|
91
|
-
eigs_opts.pop("EPSType", None)
|
|
92
|
-
|
|
93
|
-
# convert certain options for scipy
|
|
94
|
-
settings = {
|
|
95
|
-
"k": k,
|
|
96
|
-
"M": B,
|
|
97
|
-
"which": (
|
|
98
|
-
"SA"
|
|
99
|
-
if (which is None) and (sigma is None)
|
|
100
|
-
else "LM"
|
|
101
|
-
if (which is None) and (sigma is not None)
|
|
102
|
-
# For target using shift-invert scipy requires 'LM' ->
|
|
103
|
-
else "LM"
|
|
104
|
-
if ("T" in which.upper()) and (sigma is not None)
|
|
105
|
-
else which
|
|
106
|
-
),
|
|
107
|
-
"sigma": sigma,
|
|
108
|
-
"return_eigenvectors": return_vecs,
|
|
109
|
-
"tol": 0 if tol is None else tol,
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
if backend is None:
|
|
113
|
-
eigs = spla.eigsh if isherm else spla.eigs
|
|
114
|
-
elif backend == "primme":
|
|
115
|
-
import primme
|
|
116
|
-
|
|
117
|
-
if isherm:
|
|
118
|
-
eigs = primme.eigsh
|
|
119
|
-
else:
|
|
120
|
-
raise ValueError("Primme only for hermitian problems.")
|
|
121
|
-
|
|
122
|
-
# primme requires a N * k initial space even if k == 1
|
|
123
|
-
v0 = eigs_opts.get("v0", None)
|
|
124
|
-
if (v0 is not None) and (v0.ndim == 1):
|
|
125
|
-
eigs_opts["v0"] = v0.reshape(-1, 1)
|
|
126
|
-
|
|
127
|
-
if return_vecs:
|
|
128
|
-
lk, vk = eigs(A, **settings, **eigs_opts)
|
|
129
|
-
vk = qu.qarray(vk)
|
|
130
|
-
return maybe_sort_and_project(lk, vk, P, sort)
|
|
131
|
-
else:
|
|
132
|
-
lk = eigs(A, **settings, **eigs_opts)
|
|
133
|
-
return np.sort(lk) if sort else lk
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
def eigs_lobpcg(
|
|
137
|
-
A,
|
|
138
|
-
k,
|
|
139
|
-
*,
|
|
140
|
-
B=None,
|
|
141
|
-
v0=None,
|
|
142
|
-
which=None,
|
|
143
|
-
return_vecs=True,
|
|
144
|
-
sigma=None,
|
|
145
|
-
isherm=True,
|
|
146
|
-
P=None,
|
|
147
|
-
sort=True,
|
|
148
|
-
**lobpcg_opts,
|
|
149
|
-
):
|
|
150
|
-
"""Interface to scipy's lobpcg eigensolver, which can be good for
|
|
151
|
-
generalized eigenproblems with matrix-free operators. Seems to a be a bit
|
|
152
|
-
innacurate though (e.g. on the order of ~ 1e-6 for eigenvalues). Also only
|
|
153
|
-
takes real, symmetric problems, targeting smallest eigenvalues (though
|
|
154
|
-
scipy will soon have complex support, and its easy to add oneself).
|
|
155
|
-
|
|
156
|
-
Note that the slepc eigensolver also has a lobpcg backend
|
|
157
|
-
(``EPSType='lobpcg'``) which accepts complex input and is more accurate -
|
|
158
|
-
though seems slower.
|
|
159
|
-
|
|
160
|
-
Parameters
|
|
161
|
-
----------
|
|
162
|
-
A : array_like, sparse_matrix, LinearOperator or callable
|
|
163
|
-
The operator to solve for.
|
|
164
|
-
k : int
|
|
165
|
-
Number of eigenpairs to return
|
|
166
|
-
B : array_like, sparse_matrix, LinearOperator or callable, optional
|
|
167
|
-
If given, the RHS operator (which should be positive) defining a
|
|
168
|
-
generalized eigen problem.
|
|
169
|
-
v0 : array_like (d, k), optional
|
|
170
|
-
The initial subspace to iterate with.
|
|
171
|
-
which : {'SA', 'LA'}, optional
|
|
172
|
-
Find the smallest or largest eigenvalues.
|
|
173
|
-
return_vecs : bool, optional
|
|
174
|
-
Whether to return the eigenvectors found.
|
|
175
|
-
P : array_like, sparse_matrix, LinearOperator or callable, optional
|
|
176
|
-
Perform the eigensolve in the subspace defined by this projector.
|
|
177
|
-
sort : bool, optional
|
|
178
|
-
Whether to ensure the eigenvalues are sorted in ascending value.
|
|
179
|
-
lobpcg_opts
|
|
180
|
-
Supplied to :func:`scipy.sparse.linagl.lobpcg`.
|
|
181
|
-
|
|
182
|
-
Returns
|
|
183
|
-
-------
|
|
184
|
-
lk : array_like (k,)
|
|
185
|
-
The eigenvalues.
|
|
186
|
-
vk : array_like (d, k)
|
|
187
|
-
The eigenvectors, if `return_vecs=True`.
|
|
188
|
-
|
|
189
|
-
See Also
|
|
190
|
-
--------
|
|
191
|
-
eigs_scipy, eigs_numpy, eigs_slepc
|
|
192
|
-
"""
|
|
193
|
-
if not isherm:
|
|
194
|
-
raise ValueError("lobpcg can only solve symmetric problems.")
|
|
195
|
-
|
|
196
|
-
if sigma is not None:
|
|
197
|
-
raise ValueError("lobpcg can only solve extremal eigenvalues.")
|
|
198
|
-
|
|
199
|
-
# remove invalid options for lobpcg
|
|
200
|
-
lobpcg_opts.pop("ncv", None)
|
|
201
|
-
lobpcg_opts.pop("EPSType", None)
|
|
202
|
-
|
|
203
|
-
# convert some arguments and defaults
|
|
204
|
-
lobpcg_opts.setdefault("maxiter", 30)
|
|
205
|
-
if lobpcg_opts["maxiter"] is None:
|
|
206
|
-
lobpcg_opts["maxiter"] = 30
|
|
207
|
-
largest = {"SA": False, "LA": True}[which]
|
|
208
|
-
|
|
209
|
-
if isinstance(A, qu.Lazy):
|
|
210
|
-
A = A()
|
|
211
|
-
if isinstance(B, qu.Lazy):
|
|
212
|
-
B = B()
|
|
213
|
-
if isinstance(P, qu.Lazy):
|
|
214
|
-
P = P()
|
|
215
|
-
|
|
216
|
-
# project into subspace
|
|
217
|
-
if P is not None:
|
|
218
|
-
A = qu.dag(P) @ (A @ P)
|
|
219
|
-
|
|
220
|
-
# avoid matrix like behaviour
|
|
221
|
-
if isinstance(A, qu.qarray):
|
|
222
|
-
A = A.toarray()
|
|
223
|
-
|
|
224
|
-
d = A.shape[0]
|
|
225
|
-
|
|
226
|
-
# set up the initial subsspace to iterate with
|
|
227
|
-
if v0 is None:
|
|
228
|
-
v0 = qu.randn((d, k), dtype=A.dtype)
|
|
229
|
-
else:
|
|
230
|
-
# check if intial space should be projected too
|
|
231
|
-
if P is not None and v0.shape[0] != d:
|
|
232
|
-
v0 = qu.dag(P) @ v0
|
|
233
|
-
|
|
234
|
-
v0 = v0.reshape(d, -1)
|
|
235
|
-
|
|
236
|
-
# if not enough initial states given, flesh out with random
|
|
237
|
-
if v0.shape[1] != k:
|
|
238
|
-
v0 = np.hstack(v0, qu.randn((d, k - v0.shape[1]), dtype=A.dtype))
|
|
239
|
-
|
|
240
|
-
lk, vk = spla.lobpcg(A=A, X=v0, B=B, largest=largest, **lobpcg_opts)
|
|
241
|
-
|
|
242
|
-
if return_vecs:
|
|
243
|
-
vk = qu.qarray(vk)
|
|
244
|
-
return maybe_sort_and_project(lk, vk, P, sort)
|
|
245
|
-
else:
|
|
246
|
-
return np.sort(lk) if sort else lk
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
def svds_scipy(A, k=6, *, return_vecs=True, backend=None, **svds_opts):
|
|
250
|
-
"""Compute a number of singular value pairs
|
|
251
|
-
|
|
252
|
-
Parameters
|
|
253
|
-
----------
|
|
254
|
-
A : (m, n) dense, sparse or linear operator.
|
|
255
|
-
The operator to solve.
|
|
256
|
-
k : int
|
|
257
|
-
Number of requested singular values.
|
|
258
|
-
return_vecs : bool, optional
|
|
259
|
-
Whether to return the singular vectors.
|
|
260
|
-
|
|
261
|
-
Returns
|
|
262
|
-
-------
|
|
263
|
-
U : (m, k) array
|
|
264
|
-
Left singular vectors (if ``return_vecs=True``) as columns.
|
|
265
|
-
s : (k,) array
|
|
266
|
-
Singular values.
|
|
267
|
-
VH : (k, n) array
|
|
268
|
-
Right singular vectors (if ``return_vecs=True``) as rows.
|
|
269
|
-
"""
|
|
270
|
-
settings = {"k": k, "return_singular_vectors": return_vecs, **svds_opts}
|
|
271
|
-
|
|
272
|
-
# avoid matrix like behaviour
|
|
273
|
-
if isinstance(A, qu.qarray):
|
|
274
|
-
A = A.toarray()
|
|
275
|
-
|
|
276
|
-
if backend is None:
|
|
277
|
-
svds = spla.svds
|
|
278
|
-
elif backend == "primme":
|
|
279
|
-
import primme
|
|
280
|
-
|
|
281
|
-
svds = primme.svds
|
|
282
|
-
|
|
283
|
-
if return_vecs:
|
|
284
|
-
uk, sk, vtk = svds(A, **settings)
|
|
285
|
-
so = np.argsort(-sk)
|
|
286
|
-
return qu.qarray(uk[:, so]), sk[so], qu.qarray(vtk[so, :])
|
|
287
|
-
else:
|
|
288
|
-
sk = svds(A, **settings)
|
|
289
|
-
return sk[np.argsort(-sk)]
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
eigs_primme = functools.partial(eigs_scipy, backend="primme")
|
|
293
|
-
svds_primme = functools.partial(svds_scipy, backend="primme")
|