11using LinearAlgebra: LinearAlgebra
22using MatrixAlgebraKit: MatrixAlgebraKit
33
4- for f in (
5- :qr , :lq , :left_polar , :right_polar , :polar , :left_orth , :right_orth , :orth ,
6- :factorize ,
4+ for (f, f_mat) in (
5+ (:qr , :(MatrixAlgebra. qr)),
6+ (:lq , :(MatrixAlgebra. lq)),
7+ (:left_polar , :(MatrixAlgebraKit. left_polar)),
8+ (:right_polar , :(MatrixAlgebraKit. right_polar)),
9+ (:polar , :(MatrixAlgebra. polar)),
10+ (:left_orth , :(MatrixAlgebraKit. left_orth)),
11+ (:right_orth , :(MatrixAlgebraKit. right_orth)),
12+ (:orth , :(MatrixAlgebra. orth)),
13+ (:factorize , :(MatrixAlgebra. factorize)),
714 )
815 @eval begin
916 function $f (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
1017 A_mat = matricize (style, A, ndims_codomain)
11- X, Y = MatrixAlgebra. $ f (A_mat; kwargs... )
18+ X, Y = $ f_mat (A_mat; kwargs... )
1219 biperm = trivialbiperm (ndims_codomain, Val (ndims (A)))
1320 axes_codomain, axes_domain = blocks (axes (A)[biperm])
1421 axes_X = tuplemortar ((axes_codomain, (axes (X, 2 ),)))
@@ -219,18 +226,25 @@ See also `MatrixAlgebraKit.eig_full!`, `MatrixAlgebraKit.eig_trunc!`, `MatrixAlg
219226"""
220227eigen
221228
222- function eigen (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
229+ function eigen!! (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
223230 # tensor to matrix
224231 A_mat = matricize (style, A, ndims_codomain)
225- D, V = MatrixAlgebra. eigen! (A_mat; kwargs... )
232+ D, V = MatrixAlgebra. eigen!! (A_mat; kwargs... )
226233 biperm = trivialbiperm (ndims_codomain, Val (ndims (A)))
227234 axes_codomain, = blocks (axes (A)[biperm])
228235 axes_V = tuplemortar ((axes_codomain, (axes (V, ndims (V)),)))
229236 # TODO : Make sure `D` has the same basis as `V`.
230237 return D, unmatricize (style, V, axes_V)
231238end
239+ function eigen!! (A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
240+ return eigen!! (FusionStyle (A), A, ndims_codomain; kwargs... )
241+ end
242+
243+ function eigen (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
244+ return eigen!! (style, copy (A), ndims_codomain; kwargs... )
245+ end
232246function eigen (A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
233- return eigen ( FusionStyle (A), A , ndims_codomain; kwargs... )
247+ return eigen!! ( copy (A), ndims_codomain; kwargs... )
234248end
235249
236250"""
@@ -253,12 +267,19 @@ See also `MatrixAlgebraKit.eig_vals!` and `MatrixAlgebraKit.eigh_vals!`.
253267"""
254268eigvals
255269
256- function eigvals (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
270+ function eigvals!! (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
257271 A_mat = matricize (style, A, ndims_codomain)
258- return MatrixAlgebra. eigvals! (A_mat; kwargs... )
272+ return MatrixAlgebra. eigvals!! (A_mat; kwargs... )
273+ end
274+ function eigvals!! (A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
275+ return eigvals!! (FusionStyle (A), A, ndims_codomain; kwargs... )
276+ end
277+
278+ function eigvals (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
279+ return eigvals!! (style, copy (A), ndims_codomain; kwargs... )
259280end
260281function eigvals (A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
261- return eigvals ( FusionStyle (A), A , ndims_codomain; kwargs... )
282+ return eigvals!! ( copy (A), ndims_codomain; kwargs... )
262283end
263284
264285"""
@@ -282,17 +303,24 @@ See also `MatrixAlgebraKit.svd_full!`, `MatrixAlgebraKit.svd_compact!`, and `Mat
282303"""
283304svd
284305
285- function svd (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
306+ function svd!! (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
286307 A_mat = matricize (style, A, ndims_codomain)
287- U, S, Vᴴ = MatrixAlgebra. svd! (A_mat; kwargs... )
308+ U, S, Vᴴ = MatrixAlgebra. svd!! (A_mat; kwargs... )
288309 biperm = trivialbiperm (ndims_codomain, Val (ndims (A)))
289310 axes_codomain, axes_domain = blocks (axes (A)[biperm])
290311 axes_U = tuplemortar ((axes_codomain, (axes (U, 2 ),)))
291312 axes_Vᴴ = tuplemortar (((axes (Vᴴ, 1 ),), axes_domain))
292313 return unmatricize (style, U, axes_U), S, unmatricize (style, Vᴴ, axes_Vᴴ)
293314end
315+ function svd!! (A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
316+ return svd!! (FusionStyle (A), A, ndims_codomain; kwargs... )
317+ end
318+
319+ function svd (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
320+ return svd!! (style, copy (A), ndims_codomain; kwargs... )
321+ end
294322function svd (A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
295- return svd ( FusionStyle (A), A , ndims_codomain; kwargs... )
323+ return svd!! ( copy (A), ndims_codomain; kwargs... )
296324end
297325
298326"""
@@ -309,12 +337,19 @@ See also `MatrixAlgebraKit.svd_vals!`.
309337"""
310338svdvals
311339
312- function svdvals (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val )
340+ function svdvals!! (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val )
313341 A_mat = matricize (style, A, ndims_codomain)
314- return MatrixAlgebra. svdvals! (A_mat)
342+ return MatrixAlgebra. svdvals!! (A_mat)
343+ end
344+ function svdvals!! (A:: AbstractArray , ndims_codomain:: Val )
345+ return svdvals!! (FusionStyle (A), A, ndims_codomain)
346+ end
347+
348+ function svdvals (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val )
349+ return svdvals!! (style, copy (A), ndims_codomain)
315350end
316351function svdvals (A:: AbstractArray , ndims_codomain:: Val )
317- return svdvals ( FusionStyle (A), A , ndims_codomain)
352+ return svdvals!! ( copy (A), ndims_codomain)
318353end
319354
320355"""
@@ -338,16 +373,23 @@ The output satisfies `N' * A ≈ 0` and `N' * N ≈ I`.
338373"""
339374left_null
340375
341- function left_null (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
376+ function left_null!! (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
342377 A_mat = matricize (style, A, ndims_codomain)
343378 N = MatrixAlgebraKit. left_null! (A_mat; kwargs... )
344379 biperm = trivialbiperm (ndims_codomain, Val (ndims (A)))
345380 axes_codomain = first (blocks (axes (A)[biperm]))
346381 axes_N = tuplemortar ((axes_codomain, (axes (N, 2 ),)))
347382 return unmatricize (style, N, axes_N)
348383end
384+ function left_null!! (A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
385+ return left_null!! (FusionStyle (A), A, ndims_codomain; kwargs... )
386+ end
387+
388+ function left_null (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
389+ return left_null!! (style, copy (A), ndims_codomain; kwargs... )
390+ end
349391function left_null (A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
350- return left_null ( FusionStyle (A), A , ndims_codomain; kwargs... )
392+ return left_null!! ( copy (A), ndims_codomain; kwargs... )
351393end
352394
353395"""
@@ -371,14 +413,21 @@ The output satisfies `A * Nᴴ' ≈ 0` and `Nᴴ * Nᴴ' ≈ I`.
371413"""
372414right_null
373415
374- function right_null (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
416+ function right_null!! (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
375417 A_mat = matricize (style, A, ndims_codomain)
376418 Nᴴ = MatrixAlgebraKit. right_null! (A_mat; kwargs... )
377419 biperm = trivialbiperm (ndims_codomain, Val (ndims (A)))
378420 axes_domain = last (blocks ((axes (A)[biperm])))
379421 axes_Nᴴ = tuplemortar (((axes (Nᴴ, 1 ),), axes_domain))
380422 return unmatricize (style, Nᴴ, axes_Nᴴ)
381423end
424+ function right_null!! (A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
425+ return right_null!! (FusionStyle (A), A, ndims_codomain; kwargs... )
426+ end
427+
428+ function right_null (style:: FusionStyle , A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
429+ return right_null!! (style, copy (A), ndims_codomain; kwargs... )
430+ end
382431function right_null (A:: AbstractArray , ndims_codomain:: Val ; kwargs... )
383- return right_null ( FusionStyle (A), A , ndims_codomain; kwargs... )
432+ return right_null!! ( copy (A), ndims_codomain; kwargs... )
384433end
0 commit comments