@@ -4,7 +4,7 @@ using MatrixAlgebraKit
44using MatrixAlgebraKit: @algdef , Algorithm, check_input
55using MatrixAlgebraKit: one!, zero!, uppertriangular!, lowertriangular!
66using MatrixAlgebraKit: diagview, sign_safe
7- using MatrixAlgebraKit: LQViaTransposedQR
7+ using MatrixAlgebraKit: LQViaTransposedQR, TruncationByValue
88using MatrixAlgebraKit: default_qr_algorithm, default_lq_algorithm, default_svd_algorithm, default_eigh_algorithm
99import MatrixAlgebraKit: _gpu_geqrf!, _gpu_ungqr!, _gpu_unmqr!, _gpu_gesvd!, _gpu_Xgesvdp!, _gpu_gesvdj!
1010import MatrixAlgebraKit: _gpu_heevj!, _gpu_heevd!, _gpu_heev!, _gpu_heevx!
@@ -40,4 +40,17 @@ _gpu_heevj!(A::StridedROCMatrix, Dd::StridedROCVector, V::StridedROCMatrix; kwar
4040_gpu_heevd! (A:: StridedROCMatrix , Dd:: StridedROCVector , V:: StridedROCMatrix ; kwargs... ) = YArocSOLVER. heevd! (A, Dd, V; kwargs... )
4141_gpu_heev! (A:: StridedROCMatrix , Dd:: StridedROCVector , V:: StridedROCMatrix ; kwargs... ) = YArocSOLVER. heev! (A, Dd, V; kwargs... )
4242_gpu_heevx! (A:: StridedROCMatrix , Dd:: StridedROCVector , V:: StridedROCMatrix ; kwargs... ) = YArocSOLVER. heevx! (A, Dd, V; kwargs... )
43+
44+ function MatrixAlgebraKit. findtruncated_sorted (values:: StridedROCVector , strategy:: TruncationByValue )
45+ atol = max (strategy. atol, strategy. rtol * norm (values, strategy. p))
46+ @assert strategy. by === abs || strategy. by === real " sorting strategy incompatible with implementation"
47+ if strategy. rev
48+ i = @something findfirst (< (atol) ∘ strategy. by, values) lastindex (values) + 1
49+ return i: length (values)
50+ else
51+ i = @something findlast (> (atol) ∘ strategy. by, values) firstindex (values) - 1
52+ return 1 : i
53+ end
54+ end
55+
4356end
0 commit comments