@@ -26,52 +26,53 @@ function checkbase end
2626checkbase(x, y, z, args... ) = checkbase(checkbase(x, y), z, args... )
2727
2828# the machine epsilon for the elements of an object X, name inspired from eltype
29- eleps (X) = eps(real(eltype (X)))
29+ scalareps (X) = eps(real(scalartype (X)))
3030
31- function isisometry(W:: AbstractTensorMap ; tol = 10 * eleps (W))
32- WdW = W' * W
33- s = zero(float(real(eltype (W))))
34- for (c,b) in blocks(WdW)
31+ function isisometry(W:: AbstractTensorMap ; tol= 10 * scalareps (W))
32+ WdW = W' * W
33+ s = zero(float(real(scalartype (W))))
34+ for (c, b) in blocks(WdW)
3535 _subtractone!(b)
36- s += dim(c)* length(b)
36+ s += dim(c) * length(b)
3737 end
38- return norm(WdW) <= tol* sqrt(s)
38+ return norm(WdW) <= tol * sqrt(s)
3939end
4040
41- isunitary(W::AbstractTensorMap; tol = 10*eleps(W)) =
42- isisometry(W; tol = tol) && isisometry(W' ; tol = tol)
41+ function isunitary(W::AbstractTensorMap; tol=10 * scalareps(W))
42+ return isisometry(W; tol=tol) && isisometry(W' ; tol= tol)
43+ end
4344
4445function projecthermitian!(W:: AbstractTensorMap )
4546 codomain(W) == domain(W) ||
4647 throw(DomainError(" Tensor with distinct domain and codomain cannot be hermitian." ))
47- for (c,b) in blocks(W)
48+ for (c, b) in blocks(W)
4849 _projecthermitian!(b)
4950 end
5051 return W
5152end
5253function projectantihermitian!(W:: AbstractTensorMap )
5354 codomain(W) == domain(W) ||
5455 throw(DomainError(" Tensor with distinct domain and codomain cannot be anithermitian." ))
55- for (c,b) in blocks(W)
56+ for (c, b) in blocks(W)
5657 _projectantihermitian!(b)
5758 end
5859 return W
5960end
6061
6162struct PolarNewton <: TensorKit.OrthogonalFactorizationAlgorithm
6263end
63- function projectisometric!(W:: AbstractTensorMap ; alg = Polar())
64+ function projectisometric!(W:: AbstractTensorMap ; alg= Polar())
6465 if alg isa TensorKit. Polar || alg isa TensorKit. SDD
65- foreach(blocks(W)) do (c,b)
66- _polarsdd!(b)
66+ foreach(blocks(W)) do (c, b)
67+ return _polarsdd!(b)
6768 end
6869 elseif alg isa TensorKit. SVD
69- foreach(blocks(W)) do (c,b)
70- _polarsvd!(b)
70+ foreach(blocks(W)) do (c, b)
71+ return _polarsvd!(b)
7172 end
7273 elseif alg isa PolarNewton
73- foreach(blocks(W)) do (c,b)
74- _polarnewton!(b)
74+ foreach(blocks(W)) do (c, b)
75+ return _polarnewton!(b)
7576 end
7677 else
7778 throw(ArgumentError(" unkown algorithm for projectisometric!: alg = $alg " ))
@@ -80,14 +81,14 @@ function projectisometric!(W::AbstractTensorMap; alg = Polar())
8081end
8182
8283function projectcomplement!(X:: AbstractTensorMap , W:: AbstractTensorMap ;
83- tol = 10 * eleps (X))
84- P = W' * X
84+ tol= 10 * scalareps (X))
85+ P = W' * X
8586 nP = norm(P)
8687 nX = norm(X)
8788 dP = dim(P)
88- while nP > tol* max(dP, nX)
89+ while nP > tol * max(dP, nX)
8990 X = mul!(X, W, P, -1, 1)
90- P = W' * X
91+ P = W' * X
9192 nP = norm(P)
9293 end
9394 return X
@@ -97,11 +98,11 @@ projecthermitian(W::AbstractTensorMap) = projecthermitian!(copy(W))
9798projectantihermitian(W:: AbstractTensorMap ) = projectantihermitian!(copy(W))
9899
99100function projectisometric(W:: AbstractTensorMap ;
100- alg:: TensorKit.OrthogonalFactorizationAlgorithm = Polar())
101+ alg:: TensorKit.OrthogonalFactorizationAlgorithm = Polar())
101102 return projectisometric!(copy(W); alg= alg)
102103end
103104function projectcomplement(X:: AbstractTensorMap , W:: AbstractTensorMap ,
104- tol = 10 * eleps (X))
105+ tol= 10 * scalareps (X))
105106 return projectcomplement!(copy(X), W; tol= tol)
106107end
107108
0 commit comments