@@ -132,16 +132,14 @@ __all__ = ['idd_estrank', 'idd_ldiv', 'idd_poweroftwo', 'idd_reconid', 'iddp_aid
132
132
]
133
133
134
134
135
- def idd_diffsnorm (A: LinearOperator , B: LinearOperator , int its = 20 , rng = None ):
135
+ def idd_diffsnorm (A: LinearOperator , B: LinearOperator , *, rng , int its = 20 ):
136
136
cdef int n = A.shape[1 ], j = 0 , intone = 1
137
137
cdef cnp.float64_t snorm = 0.0
138
138
cdef cnp.ndarray[cnp.float64_t, mode= ' c' , ndim= 1 ] v1
139
139
cdef cnp.ndarray[cnp.float64_t, mode= ' c' , ndim= 1 ] v2
140
140
cdef cnp.ndarray[cnp.float64_t, mode= ' c' , ndim= 1 ] u1
141
141
cdef cnp.ndarray[cnp.float64_t, mode= ' c' , ndim= 1 ] u2
142
142
143
- if not rng:
144
- rng = np.random.default_rng()
145
143
v1 = rng.uniform(low = - 1. , high = 1. , size = n)
146
144
v1 /= dnrm2(& n, & v1[0 ], & intone)
147
145
@@ -162,8 +160,8 @@ def idd_diffsnorm(A: LinearOperator, B: LinearOperator, int its=20, rng=None):
162
160
return snorm
163
161
164
162
165
- def idd_estrank (cnp.ndarray[cnp.float64_t , mode = " c" , ndim = 2 ] a: NDArray , eps: float ,
166
- rng = None ):
163
+ def idd_estrank (cnp.ndarray[cnp.float64_t , mode = " c" , ndim = 2 ] a: NDArray , eps: float , *,
164
+ rng ):
167
165
cdef int m = a.shape[0 ], n = a.shape[1 ]
168
166
cdef int intone = 1 , n2, nsteps = 3 , row, r, nstep, cols, k, nulls
169
167
cdef cnp.float64_t h, alpha, beta
@@ -178,9 +176,6 @@ def idd_estrank(cnp.ndarray[cnp.float64_t, mode="c", ndim=2] a: NDArray, eps: fl
178
176
cdef cnp.ndarray[cnp.complex128_t, mode= ' c' , ndim= 2 ] Fc
179
177
cdef cnp.ndarray[cnp.float64_t, mode= ' c' , ndim= 2 ] F
180
178
181
- if not rng:
182
- rng = np.random.default_rng()
183
-
184
179
n2 = idd_poweroftwo(m)
185
180
186
181
# This part is the initialization that is done via idd_frmi
@@ -281,7 +276,7 @@ def idd_estrank(cnp.ndarray[cnp.float64_t, mode="c", ndim=2] a: NDArray, eps: fl
281
276
return k, Fcopy
282
277
283
278
284
- def idd_findrank (A: LinearOperator , cnp.float64_t eps , rng = None ):
279
+ def idd_findrank (A: LinearOperator , cnp.float64_t eps , *, rng ):
285
280
# Estimate the rank of A by repeatedly using A.rmatvec(random vec)
286
281
287
282
cdef int m = A.shape[0 ], n = A.shape[1 ], k = 0 , kk = 0 ,r = n, krank
@@ -312,9 +307,6 @@ def idd_findrank(A: LinearOperator, cnp.float64_t eps, rng=None):
312
307
" 'scipy.linalg.interpolative.idd_findrank()' "
313
308
" function." )
314
309
315
- if not rng:
316
- rng = np.random.default_rng()
317
-
318
310
krank = 0
319
311
try :
320
312
while True :
@@ -464,15 +456,13 @@ def idd_reconid(B, idx, proj):
464
456
return approx
465
457
466
458
467
- def idd_snorm (A: LinearOperator , int its = 20 , rng = None ):
459
+ def idd_snorm (A: LinearOperator , *, rng , int its = 20 ):
468
460
cdef int n = A.shape[1 ]
469
461
cdef int j = 0 , intone = 1
470
462
cdef cnp.float64_t snorm = 0.0
471
463
cdef cnp.ndarray[cnp.float64_t, mode= ' c' , ndim= 1 ] v
472
464
cdef cnp.ndarray[cnp.float64_t, mode= ' c' , ndim= 1 ] u
473
465
474
- if not rng:
475
- rng = np.random.default_rng()
476
466
v = rng.uniform(low = - 1. , high = 1. , size = n)
477
467
v /= dnrm2(& n, & v[0 ], & intone)
478
468
@@ -488,7 +478,7 @@ def idd_snorm(A: LinearOperator, int its=20, rng=None):
488
478
return snorm
489
479
490
480
491
- def iddp_aid (cnp.ndarray[cnp.float64_t , ndim = 2 ] a: NDArray , eps: float , rng = None ):
481
+ def iddp_aid (cnp.ndarray[cnp.float64_t , ndim = 2 ] a: NDArray , eps: float , *, rng ):
492
482
krank, proj = idd_estrank(a, eps, rng = rng)
493
483
if krank != 0 :
494
484
proj = proj[:krank, :]
@@ -497,7 +487,7 @@ def iddp_aid(cnp.ndarray[cnp.float64_t, ndim=2] a: NDArray, eps: float, rng=None
497
487
return iddp_id(a, eps = eps)
498
488
499
489
500
- def iddp_asvd (cnp.ndarray[cnp.float64_t , ndim = 2 ] a: NDArray , eps: float , rng = None ):
490
+ def iddp_asvd (cnp.ndarray[cnp.float64_t , ndim = 2 ] a: NDArray , eps: float , *, rng ):
501
491
cdef int m = a.shape[0 ], n = a.shape[1 ]
502
492
cdef int krank, info, ci
503
493
cdef cnp.ndarray[cnp.float64_t, mode= ' fortran' , ndim= 2 ] C
@@ -680,20 +670,20 @@ def iddp_qrpiv(cnp.ndarray[cnp.float64_t, mode="c", ndim=2] a, cnp.float64_t eps
680
670
return k + 1 , taus, ind
681
671
682
672
683
- def iddp_rid (A: LinearOperator , cnp.float64_t eps , rng = None ):
684
- _, ret = idd_findrank(A, eps, rng)
673
+ def iddp_rid (A: LinearOperator , cnp.float64_t eps , *, rng ):
674
+ _, ret = idd_findrank(A, eps, rng = rng )
685
675
return iddp_id(ret, eps)
686
676
687
677
688
- def iddp_rsvd (A: LinearOperator , cnp.float64_t eps , rng = None ):
678
+ def iddp_rsvd (A: LinearOperator , cnp.float64_t eps , *, rng ):
689
679
cdef int n = A.shape[1 ]
690
680
cdef int krank, j
691
681
cdef cnp.ndarray[cnp.int64_t, mode= ' c' , ndim= 1 ] perms
692
682
cdef cnp.ndarray[cnp.float64_t, ndim= 2 ] proj
693
683
cdef cnp.ndarray[cnp.float64_t, mode= ' c' , ndim= 2 ] col
694
684
cdef cnp.ndarray[cnp.float64_t, mode= ' c' , ndim= 1 ] x
695
685
696
- krank, perms, proj = iddp_rid(A, eps, rng)
686
+ krank, perms, proj = iddp_rid(A, eps, rng = rng )
697
687
if krank > 0 :
698
688
# idd_getcols
699
689
col = cnp.PyArray_EMPTY(2 , [n, krank], cnp.NPY_FLOAT64, 0 )
@@ -743,8 +733,8 @@ def iddp_svd(cnp.ndarray[cnp.float64_t, ndim=2] a: NDArray, eps: float):
743
733
return UU, S, V
744
734
745
735
746
- def iddr_aid (cnp.ndarray[cnp.float64_t , mode = " c" , ndim = 2 ] a: NDArray , int krank ,
747
- rng = None ):
736
+ def iddr_aid (cnp.ndarray[cnp.float64_t , mode = " c" , ndim = 2 ] a: NDArray , int krank , *,
737
+ rng ):
748
738
cdef int m = a.shape[0 ], n = a.shape[1 ], n2, nsteps = 3 , row, r, nstep, L
749
739
cdef cnp.float64_t h, alpha, beta
750
740
cdef cnp.ndarray[cnp.float64_t, mode= ' c' , ndim= 3 ] albetas
@@ -754,9 +744,6 @@ def iddr_aid(cnp.ndarray[cnp.float64_t, mode="c", ndim=2] a: NDArray, int krank,
754
744
cdef cnp.ndarray[cnp.float64_t, mode= ' c' , ndim= 2 ] rta
755
745
cdef cnp.ndarray[cnp.npy_int64, mode= ' c' , ndim= 1 ] marker
756
746
757
- if not rng:
758
- rng = np.random.default_rng()
759
-
760
747
# idd_aidi
761
748
L = krank + 8
762
749
n2 = 0
@@ -898,8 +885,8 @@ def iddr_aid(cnp.ndarray[cnp.float64_t, mode="c", ndim=2] a: NDArray, int krank,
898
885
return perms, proj
899
886
900
887
901
- def iddr_asvd (cnp.ndarray[cnp.float64_t , mode = " c" , ndim = 2 ] a: NDArray , int krank ,
902
- rng = None ):
888
+ def iddr_asvd (cnp.ndarray[cnp.float64_t , mode = " c" , ndim = 2 ] a: NDArray , int krank , *,
889
+ rng ):
903
890
cdef int m = a.shape[0 ], n = a.shape[1 ]
904
891
cdef int info, ci
905
892
cdef cnp.ndarray[cnp.float64_t, mode= ' fortran' , ndim= 2 ] C
@@ -1057,28 +1044,25 @@ def iddr_qrpiv(cnp.ndarray[cnp.float64_t, mode="c", ndim=2] a: NDArray, krank: i
1057
1044
return ind, taus
1058
1045
1059
1046
1060
- def iddr_rid (A: LinearOperator , int krank , rng = None ):
1047
+ def iddr_rid (A: LinearOperator , int krank , *, rng ):
1061
1048
cdef int m = A.shape[0 ], n = A.shape[1 ], k = 0
1062
1049
cdef int L = min (krank+ 2 , min (m, n))
1063
1050
cdef cnp.ndarray[cnp.float64_t, mode= ' c' , ndim= 2 ] r
1064
1051
1065
- if not rng:
1066
- rng = np.random.default_rng()
1067
-
1068
1052
r = cnp.PyArray_EMPTY(2 , [L, n], cnp.NPY_FLOAT64, 0 )
1069
1053
for k in range (L):
1070
1054
r[k, :] = A.rmatvec(rng.uniform(size = m))
1071
1055
1072
1056
return iddr_id(a = r, krank = krank)
1073
1057
1074
1058
1075
- def iddr_rsvd (A: LinearOperator , int krank , rng = None ):
1059
+ def iddr_rsvd (A: LinearOperator , int krank , *, rng ):
1076
1060
cdef int n = A.shape[1 ], j
1077
1061
cdef cnp.ndarray[cnp.int64_t, mode= ' c' , ndim= 1 ] perms
1078
1062
cdef cnp.ndarray[cnp.float64_t, ndim= 2 ] proj
1079
1063
cdef cnp.ndarray[cnp.float64_t, mode= ' c' , ndim= 2 ] col
1080
1064
1081
- perms, proj = iddr_rid(A, krank, rng)
1065
+ perms, proj = iddr_rid(A, krank, rng = rng )
1082
1066
# idd_getcols
1083
1067
col = cnp.PyArray_EMPTY(2 , [n, krank], cnp.NPY_FLOAT64, 0 )
1084
1068
x = cnp.PyArray_ZEROS(1 , [n], cnp.NPY_FLOAT64, 0 )
@@ -1121,16 +1105,14 @@ def iddr_svd(cnp.ndarray[cnp.float64_t, mode="c", ndim=2] a: NDArray, int krank)
1121
1105
return UU, S, V
1122
1106
1123
1107
1124
- def idz_diffsnorm (A: LinearOperator , B: LinearOperator , int its = 20 , rng = None ):
1108
+ def idz_diffsnorm (A: LinearOperator , B: LinearOperator , *, rng , int its = 20 ):
1125
1109
cdef int n = A.shape[1 ], j = 0 , intone = 1
1126
1110
cdef cnp.float64_t snorm = 0.0
1127
1111
cdef cnp.ndarray[cnp.complex128_t, mode= ' c' , ndim= 1 ] v1
1128
1112
cdef cnp.ndarray[cnp.complex128_t, mode= ' c' , ndim= 1 ] v2
1129
1113
cdef cnp.ndarray[cnp.complex128_t, mode= ' c' , ndim= 1 ] u1
1130
1114
cdef cnp.ndarray[cnp.complex128_t, mode= ' c' , ndim= 1 ] u2
1131
1115
1132
- if not rng:
1133
- rng = np.random.default_rng()
1134
1116
v1 = rng.uniform(low = - 1 , high = 1 , size = (n, 2 )).view(np.complex128).ravel()
1135
1117
v1 /= dznrm2(& n, & v1[0 ], & intone)
1136
1118
@@ -1151,8 +1133,8 @@ def idz_diffsnorm(A: LinearOperator, B: LinearOperator, int its=20, rng=None):
1151
1133
return snorm
1152
1134
1153
1135
1154
- def idz_estrank (cnp.ndarray[cnp.complex128_t , mode = ' c' , ndim = 2 ] a: NDArray , eps: float ,
1155
- rng = None ):
1136
+ def idz_estrank (cnp.ndarray[cnp.complex128_t , mode = ' c' , ndim = 2 ] a: NDArray , eps: float , *,
1137
+ rng ):
1156
1138
cdef int m = a.shape[0 ], n = a.shape[1 ], n2, nsteps = 3 , row, r, nstep, cols, k
1157
1139
cdef cnp.float64_t h, alpha, beta
1158
1140
cdef cnp.ndarray[cnp.float64_t, mode= ' c' , ndim= 3 ] albetas
@@ -1163,9 +1145,6 @@ def idz_estrank(cnp.ndarray[cnp.complex128_t, mode='c', ndim=2] a: NDArray, eps:
1163
1145
cdef cnp.ndarray[cnp.complex128_t, mode= ' c' , ndim= 2 ] rta
1164
1146
cdef cnp.ndarray[cnp.complex128_t, mode= ' c' , ndim= 2 ] F
1165
1147
1166
- if not rng:
1167
- rng = np.random.default_rng()
1168
-
1169
1148
n2 = idd_poweroftwo(m)
1170
1149
# This part is the initialization that is done via idz_frmi
1171
1150
# for a Subsampled Randomized Fourier Transform (SRFT).
@@ -1244,7 +1223,7 @@ def idz_estrank(cnp.ndarray[cnp.complex128_t, mode='c', ndim=2] a: NDArray, eps:
1244
1223
return k, Fcopy
1245
1224
1246
1225
1247
- def idz_findrank (A: LinearOperator , cnp.float64_t eps , rng = None ):
1226
+ def idz_findrank (A: LinearOperator , cnp.float64_t eps , *, rng ):
1248
1227
# Estimate the rank of A by repeatedly using A.rmatvec(random vec)
1249
1228
1250
1229
cdef int m = A.shape[0 ], n = A.shape[1 ], k = 0 , kk = 0 ,r = n, krank
@@ -1277,9 +1256,6 @@ def idz_findrank(A: LinearOperator, cnp.float64_t eps, rng=None):
1277
1256
" 'scipy.linalg.interpolative.idz_findrank()' "
1278
1257
" function." )
1279
1258
1280
- if not rng:
1281
- rng = np.random.default_rng()
1282
-
1283
1259
krank = 0
1284
1260
try :
1285
1261
while True :
@@ -1416,16 +1392,13 @@ def idz_reconid(B, idx, proj):
1416
1392
return approx
1417
1393
1418
1394
1419
- def idz_snorm (A: LinearOperator , int its = 20 , rng = None ):
1395
+ def idz_snorm (A: LinearOperator , *, rng , int its = 20 ):
1420
1396
cdef int n = A.shape[1 ]
1421
1397
cdef int j = 0 , intone = 1
1422
1398
cdef cnp.float64_t snorm = 0.0
1423
1399
cdef cnp.ndarray[cnp.complex128_t, mode= ' c' , ndim= 1 ] v
1424
1400
cdef cnp.ndarray[cnp.complex128_t, mode= ' c' , ndim= 1 ] u
1425
1401
1426
- if not rng:
1427
- rng = np.random.default_rng()
1428
-
1429
1402
v = rng.uniform(low = - 1 , high = 1 , size = (n, 2 )).view(np.complex128).ravel()
1430
1403
v /= dznrm2(& n, & v[0 ], & intone)
1431
1404
@@ -1441,8 +1414,8 @@ def idz_snorm(A: LinearOperator, int its=20, rng=None):
1441
1414
return snorm
1442
1415
1443
1416
1444
- def idzp_aid (cnp.ndarray[cnp.complex128_t , mode = ' c' , ndim = 2 ] a: NDArray , eps: float ,
1445
- rng = None ):
1417
+ def idzp_aid (cnp.ndarray[cnp.complex128_t , mode = ' c' , ndim = 2 ] a: NDArray , eps: float , *,
1418
+ rng ):
1446
1419
krank, proj = idz_estrank(a, eps = eps, rng = rng)
1447
1420
if krank != 0 :
1448
1421
proj = proj[:krank, :]
@@ -1451,8 +1424,8 @@ def idzp_aid(cnp.ndarray[cnp.complex128_t, mode='c', ndim=2] a: NDArray, eps: fl
1451
1424
return idzp_id(a, eps = eps)
1452
1425
1453
1426
1454
- def idzp_asvd (cnp.ndarray[cnp.complex128_t , mode = ' c' , ndim = 2 ] a, cnp.float64_t eps ,
1455
- rng = None ):
1427
+ def idzp_asvd (cnp.ndarray[cnp.complex128_t , mode = ' c' , ndim = 2 ] a, cnp.float64_t eps , *,
1428
+ rng ):
1456
1429
cdef int m = a.shape[0 ], n = a.shape[1 ]
1457
1430
cdef int krank, info, ci
1458
1431
cdef cnp.ndarray[cnp.complex128_t, mode= ' fortran' , ndim= 2 ] C
@@ -1469,7 +1442,7 @@ def idzp_asvd(cnp.ndarray[cnp.complex128_t, mode='c', ndim=2] a, cnp.float64_t e
1469
1442
cdef cnp.ndarray[cnp.complex128_t, mode= ' c' , ndim= 2 ] p
1470
1443
cdef cnp.ndarray[cnp.complex128_t, mode= ' c' , ndim= 2 ] col
1471
1444
1472
- krank, perms, proj = idzp_aid(a.copy(), eps, rng)
1445
+ krank, perms, proj = idzp_aid(a.copy(), eps, rng = rng )
1473
1446
1474
1447
if krank > 0 :
1475
1448
UU = cnp.PyArray_ZEROS(2 , [m, krank], cnp.NPY_COMPLEX128, 0 )
@@ -1619,12 +1592,12 @@ def idzp_qrpiv(cnp.ndarray[cnp.complex128_t, mode="c", ndim=2] a, cnp.float64_t
1619
1592
return k+ 1 , taus, ind
1620
1593
1621
1594
1622
- def idzp_rid (A: LinearOperator , cnp.float64_t eps , rng = None ):
1595
+ def idzp_rid (A: LinearOperator , cnp.float64_t eps , *, rng ):
1623
1596
_, ret = idz_findrank(A, eps, rng = rng)
1624
1597
return idzp_id(ret, eps = eps)
1625
1598
1626
1599
1627
- def idzp_rsvd (A: LinearOperator , cnp.float64_t eps , rng = None ):
1600
+ def idzp_rsvd (A: LinearOperator , cnp.float64_t eps , *, rng ):
1628
1601
cdef int n = A.shape[1 ]
1629
1602
cdef int krank, j
1630
1603
cdef cnp.ndarray[cnp.int64_t, mode= ' c' , ndim= 1 ] perms
@@ -1681,8 +1654,8 @@ def idzp_svd(cnp.ndarray[cnp.complex128_t, mode='c', ndim=2] a, cnp.float64_t ep
1681
1654
return UU, S, V
1682
1655
1683
1656
1684
- def idzr_aid (cnp.ndarray[cnp.complex128_t , mode = ' c' , ndim = 2 ] a: NDArray , int krank ,
1685
- rng = None ):
1657
+ def idzr_aid (cnp.ndarray[cnp.complex128_t , mode = ' c' , ndim = 2 ] a: NDArray , int krank , *,
1658
+ rng ):
1686
1659
cdef int m = a.shape[0 ], n2, L, nblock, nsteps = 3 , mb
1687
1660
cdef cnp.float64_t twopi = 2 * np.pi, fact
1688
1661
cdef double complex twopii = twopi* 1 .j
@@ -1694,9 +1667,6 @@ def idzr_aid(cnp.ndarray[cnp.complex128_t, mode='c', ndim=2] a: NDArray, int kra
1694
1667
cdef cnp.ndarray[cnp.npy_float64, mode= ' c' , ndim= 2 ] rta
1695
1668
cdef cnp.ndarray[cnp.npy_float64, mode= ' c' , ndim= 2 ] giv2x2
1696
1669
1697
- if not rng:
1698
- rng = np.random.default_rng()
1699
-
1700
1670
n2 = 0
1701
1671
L = krank + 8
1702
1672
if (L >= n2) or (L > m):
@@ -1771,7 +1741,7 @@ def idzr_aid(cnp.ndarray[cnp.complex128_t, mode='c', ndim=2] a: NDArray, int kra
1771
1741
return idzr_id(V, krank)
1772
1742
1773
1743
1774
- def idzr_asvd (cnp.ndarray[cnp.complex128_t , mode = " c" , ndim = 2 ] a, int krank , rng = None ):
1744
+ def idzr_asvd (cnp.ndarray[cnp.complex128_t , mode = " c" , ndim = 2 ] a, int krank , *, rng ):
1775
1745
cdef int m = a.shape[0 ], n = a.shape[1 ]
1776
1746
cdef int info, ci
1777
1747
cdef cnp.ndarray[cnp.complex128_t, mode= ' fortran' , ndim= 2 ] C
@@ -1928,28 +1898,25 @@ def idzr_qrpiv(cnp.ndarray[cnp.complex128_t, mode="c", ndim=2] a, int krank):
1928
1898
return ind, taus
1929
1899
1930
1900
1931
- def idzr_rid (A: LinearOperator , int krank , rng = None ):
1901
+ def idzr_rid (A: LinearOperator , int krank , *, rng ):
1932
1902
cdef int m = A.shape[0 ], n = A.shape[1 ], k = 0
1933
1903
cdef int L = min (krank+ 2 , min (m, n))
1934
1904
cdef cnp.ndarray[cnp.complex128_t, mode= ' c' , ndim= 2 ] r
1935
1905
1936
- if not rng:
1937
- rng = np.random.default_rng()
1938
-
1939
1906
r = cnp.PyArray_EMPTY(2 , [L, n], cnp.NPY_COMPLEX128, 0 )
1940
1907
for k in range (L):
1941
1908
r[k, :] = A.rmatvec(rng.uniform(size = (m,2 )).view(np.complex128).ravel())
1942
1909
1943
1910
return idzr_id(a = r.conj(), krank = krank)
1944
1911
1945
1912
1946
- def idzr_rsvd (A: LinearOperator , int krank , rng = None ):
1913
+ def idzr_rsvd (A: LinearOperator , int krank , *, rng ):
1947
1914
cdef int n = A.shape[1 ], j
1948
1915
cdef cnp.ndarray[cnp.int64_t, mode= ' c' , ndim= 1 ] perms
1949
1916
cdef cnp.ndarray[cnp.complex128_t, ndim= 2 ] proj
1950
1917
cdef cnp.ndarray[cnp.complex128_t, mode= ' c' , ndim= 2 ] col
1951
1918
1952
- perms, proj = idzr_rid(A, krank, rng)
1919
+ perms, proj = idzr_rid(A, krank, rng = rng )
1953
1920
# idd_getcols
1954
1921
col = cnp.PyArray_EMPTY(2 , [n, krank], cnp.NPY_COMPLEX128, 0 )
1955
1922
x = cnp.PyArray_ZEROS(1 , [n], cnp.NPY_COMPLEX128, 0 )
0 commit comments