@@ -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