@@ -23,58 +23,97 @@ const TruncationScheme = TruncationStrategy
2323
2424# factorizations
2525# --------------
26+ _kindof (:: LAPACK_HouseholderQR ) = :qr
27+ _kindof (:: LAPACK_HouseholderLQ ) = :lq
28+ _kindof (:: LAPACK_SVDAlgorithm ) = :svd
29+ _kindof (:: PolarViaSVD ) = :polar
30+
31+ _drop_alg (; alg= nothing , kwargs... ) = kwargs
32+ _drop_p (; p= nothing , kwargs... ) = kwargs
33+
2634# orthogonalization
27- @deprecate (leftorth (t:: AbstractTensorMap , p:: Index2Tuple ; kwargs... ),
28- leftorth! (permutedcopy_oftype (t, factorization_scalartype (leftorth, t), p);
29- kwargs... ))
30- @deprecate (rightorth (t:: AbstractTensorMap , p:: Index2Tuple ; kwargs... ),
31- rightorth! (permutedcopy_oftype (t, factorisation_scalartype (rightorth, t), p);
32- kwargs... ))
33- function leftorth (t:: AbstractTensorMap ; kwargs... )
35+ export leftorth, leftorth!, rightorth, rightorth!
36+ function leftorth (t:: AbstractTensorMap , p:: Index2Tuple ; kwargs... )
3437 Base. depwarn (" `leftorth` is no longer supported, use `left_orth` instead" , :leftorth )
35- return left_orth (t; kwargs... )
38+ return leftorth! (permutedcopy_oftype (t, factorisation_scalartype (leftorth, t), p);
39+ kwargs... )
3640end
37- function leftorth! (t:: AbstractTensorMap ; kwargs... )
38- Base. depwarn (" `leftorth!` is no longer supported, use `left_orth!` instead" , :leftorth! )
39- return left_orth! (t; kwargs... )
41+ function rightorth (t:: AbstractTensorMap , p:: Index2Tuple ; kwargs... )
42+ Base. depwarn (" `rightorth` is no longer supported, use `right_orth` instead" , :rightorth )
43+ return rightorth! (permutedcopy_oftype (t, factorisation_scalartype (rightorth, t), p);
44+ kwargs... )
45+ end
46+ function leftorth (t:: AbstractTensorMap ; kwargs... )
47+ Base. depwarn (" `leftorth` is no longer supported, use `left_orth` instead" , :leftorth )
48+ return leftorth! (copy_oftype (t, factorisation_scalartype (leftorth, t)); kwargs... )
4049end
4150function rightorth (t:: AbstractTensorMap ; kwargs... )
4251 Base. depwarn (" `rightorth` is no longer supported, use `right_orth` instead" , :rightorth )
43- return right_orth (t; kwargs... )
52+ return rightorth! (copy_oftype (t, factorisation_scalartype (rightorth, t)); kwargs... )
53+ end
54+ function leftorth! (t:: AbstractTensorMap ; kwargs... )
55+ Base. depwarn (" `leftorth!` is no longer supported, use `left_orth!` instead" , :leftorth! )
56+ haskey (kwargs, :alg ) || return left_orth! (t; kwargs... )
57+ alg = kwargs[:alg ]
58+ kind = _kindof (alg)
59+ kind === :svd && return left_orth! (t; kind, alg_svd= alg, _drop_alg (; kwargs... )... )
60+ kind === :qr && return left_orth! (t; kind, alg_qr= alg, _drop_alg (; kwargs... )... )
61+ kind === :polar && return left_orth! (t; kind, alg_polar= alg, _drop_alg (; kwargs... )... )
62+ throw (ArgumentError (" invalid leftorth kind" ))
4463end
4564function rightorth! (t:: AbstractTensorMap ; kwargs... )
4665 Base. depwarn (" `rightorth!` is no longer supported, use `right_orth!` instead" ,
4766 :rightorth! )
48- return right_orth! (t; kwargs... )
67+ haskey (kwargs, :alg ) || return right_orth! (t; kwargs... )
68+ alg = kwargs[:alg ]
69+ kind = _kindof (alg)
70+ kind === :svd && return right_orth! (t; kind, alg_svd= alg, _drop_alg (; kwargs... )... )
71+ kind === :lq && return right_orth! (t; kind, alg_lq= alg, _drop_alg (; kwargs... )... )
72+ kind === :polar && return right_orth! (t; kind, alg_polar= alg, _drop_alg (; kwargs... )... )
73+ throw (ArgumentError (" invalid rightorth kind" ))
4974end
5075
5176# nullspaces
52- @deprecate (leftnull (t:: AbstractTensorMap , p:: Index2Tuple ; kwargs... ),
53- leftnull! (permutedcopy_oftype (t, factorization_scalartype (leftnull, t), p);
54- kwargs... ))
55- @deprecate (rightnull (t:: AbstractTensorMap , p:: Index2Tuple ; kwargs... ),
56- rightnull! (permutedcopy_oftype (t, factorisation_scalartype (rightnull, t), p);
57- kwargs... ))
77+ export leftnull, leftnull!, rightnull, rightnull!
5878function leftnull (t:: AbstractTensorMap ; kwargs... )
5979 Base. depwarn (" `leftnull` is no longer supported, use `left_null` instead" , :leftnull )
60- return left_null (t ; kwargs... )
80+ return leftnull! ( copy_oftype (t, factorisation_scalartype (leftnull, t)) ; kwargs... )
6181end
62- function leftnull! (t:: AbstractTensorMap ; kwargs... )
63- Base. depwarn (" `left_null!` is no longer supported, use `left_null!` instead" ,
64- :leftnull! )
65- return left_null! (t; kwargs... )
82+ function leftnull (t:: AbstractTensorMap , p:: Index2Tuple ; kwargs... )
83+ Base. depwarn (" `leftnull` is no longer supported, use `left_null` instead" , :leftnull )
84+ return leftnull! (permutedcopy_oftype (t, factorisation_scalartype (leftnull, t), p); kwargs... )
6685end
6786function rightnull (t:: AbstractTensorMap ; kwargs... )
6887 Base. depwarn (" `rightnull` is no longer supported, use `right_null` instead" , :rightnull )
69- return right_null (t; kwargs... )
88+ return rightnull! (copy_oftype (t, factorisation_scalartype (rightnull, t)); kwargs... )
89+ end
90+ function rightnull (t:: AbstractTensorMap , p:: Index2Tuple ; kwargs... )
91+ Base. depwarn (" `rightnull` is no longer supported, use `right_null` instead" , :rightnull )
92+ return rightnull! (permutedcopy_oftype (t, factorisation_scalartype (rightnull, t), p); kwargs... )
93+ end
94+ function leftnull! (t:: AbstractTensorMap ; kwargs... )
95+ Base. depwarn (" `left_null!` is no longer supported, use `left_null!` instead" ,
96+ :leftnull! )
97+ haskey (kwargs, :alg ) || return left_null! (t; kwargs... )
98+ alg = kwargs[:alg ]
99+ kind = _kindof (alg)
100+ kind === :svd && return left_null! (t; kind, alg_svd= alg, _drop_alg (; kwargs... )... )
101+ kind === :qr && return left_null! (t; kind, alg_qr= alg, _drop_alg (; kwargs... )... )
102+ throw (ArgumentError (" invalid leftnull kind" ))
70103end
71104function rightnull! (t:: AbstractTensorMap ; kwargs... )
72105 Base. depwarn (" `rightnull!` is no longer supported, use `right_null!` instead" ,
73106 :rightnull! )
74- return right_null! (t; kwargs... )
107+ haskey (kwargs, :alg ) || return right_null! (t; kwargs... )
108+ alg = kwargs[:alg ]
109+ kind = _kindof (alg)
110+ kind === :svd && return right_null! (t; kind, alg_svd= alg, _drop_alg (; kwargs... )... )
111+ kind === :lq && return right_null! (t; kind, alg_lq= alg, _drop_alg (; kwargs... )... )
112+ throw (ArgumentError (" invalid rightnull kind" ))
75113end
76114
77115# eigen values
116+ export eig, eig!, eigh, eigh!, eigen, eigen!
78117@deprecate (eig (t:: AbstractTensorMap , p:: Index2Tuple ; kwargs... ),
79118 eig! (permutedcopy_oftype (t, factorisation_scalartype (eig, t), p); kwargs... ))
80119@deprecate (eigh (t:: AbstractTensorMap , p:: Index2Tuple ; kwargs... ),
@@ -103,7 +142,7 @@ function eigh!(t::AbstractTensorMap; kwargs...)
103142end
104143
105144# singular values
106- _drop_p (; p = nothing , kwargs ... ) = kwargs
145+ export tsvd, tsvd!
107146@deprecate (tsvd (t:: AbstractTensorMap , p:: Index2Tuple ; kwargs... ),
108147 tsvd! (permutedcopy_oftype (t, factorisation_scalartype (tsvd, t), p); kwargs... ))
109148function tsvd (t:: AbstractTensorMap ; kwargs... )
0 commit comments