@@ -12,15 +12,19 @@ function Base.:-(t1::AbstractTensorMap, t2::AbstractTensorMap)
1212 return axpy! (- one (T), t2, copyto! (similar (t1, T), t1))
1313end
1414
15- Base.:* (t:: AbstractTensorMap , α:: Number ) = mul! (similar (t, promote_type (eltype (t), typeof (α))), t, α)
16- Base.:* (α:: Number , t:: AbstractTensorMap ) = mul! (similar (t, promote_type (eltype (t), typeof (α))), α, t)
15+ Base.:* (t:: AbstractTensorMap , α:: Number ) =
16+ mul! (similar (t, promote_type (eltype (t), typeof (α))), t, α)
17+ Base.:* (α:: Number , t:: AbstractTensorMap ) =
18+ mul! (similar (t, promote_type (eltype (t), typeof (α))), α, t)
1719Base.:/ (t:: AbstractTensorMap , α:: Number ) = * (t, one (α)/ α)
1820Base.:\ (α:: Number , t:: AbstractTensorMap ) = * (t, one (α)/ α)
1921
2022LinearAlgebra. normalize! (t:: AbstractTensorMap , p:: Real = 2 ) = rmul! (t, inv (norm (t, p)))
21- LinearAlgebra. normalize (t:: AbstractTensorMap , p:: Real = 2 ) = mul! (similar (t), t, inv (norm (t, p)))
23+ LinearAlgebra. normalize (t:: AbstractTensorMap , p:: Real = 2 ) =
24+ mul! (similar (t), t, inv (norm (t, p)))
2225
23- Base.:* (t1:: AbstractTensorMap , t2:: AbstractTensorMap ) = mul! (similar (t1, promote_type (eltype (t1),eltype (t2)), codomain (t1)← domain (t2)), t1, t2)
26+ Base.:* (t1:: AbstractTensorMap , t2:: AbstractTensorMap ) =
27+ mul! (similar (t1, promote_type (eltype (t1),eltype (t2)), codomain (t1)← domain (t2)), t1, t2)
2428Base. exp (t:: AbstractTensorMap ) = exp! (copy (t))
2529
2630# Special purpose constructors
@@ -159,15 +163,26 @@ end
159163
160164# TensorMap exponentation:
161165function exp! (t:: TensorMap )
162- domain (t) == codomain (t) || error (" Exponentional of a tensor only exist when domain == codomain." )
166+ domain (t) == codomain (t) ||
167+ error (" Exponentional of a tensor only exist when domain == codomain." )
163168 for (c,b) in blocks (t)
164- copyto! (b, exp! (b))
169+ copyto! (b, LinearAlgebra . exp! (b))
165170 end
166171 return t
167172end
168173
169- # hcat and vcat of tensors
170- function Base. hcat (t1:: AbstractTensorMap{S,N₁,1} , t2:: AbstractTensorMap{S,N₁,1} ) where {S,N₁}
174+ # # concatenate tensors
175+ # function concatenate(t1::AbstractTensorMap{S}, ts::AbstractTensorMap{S}...; direction::Symbol) where {S}
176+ # if direction = :domain
177+ # numin(t1) == 1 || throw(SpaceMismatch("concatenation along domain"))
178+ # for t2 in ts
179+ # domain(t1) == domain(t2) || throw(SpaceMismatch())
180+ # end
181+ # t = t1
182+ # for t2 in ts
183+ # cat(t1)
184+
185+ function catdomain (t1:: AbstractTensorMap{S,N₁,1} , t2:: AbstractTensorMap{S,N₁,1} ) where {S,N₁}
171186 codomain (t1) == codomain (t2) || throw (SpaceMismatch ())
172187
173188 V1, = domain (t1)
@@ -182,7 +197,7 @@ function Base.hcat(t1::AbstractTensorMap{S,N₁,1}, t2::AbstractTensorMap{S,N₁
182197 end
183198 return t
184199end
185- function Base . vcat (t1:: AbstractTensorMap{S,1,N₂} , t2:: AbstractTensorMap{S,1,N₂} ) where {S,N₂}
200+ function catcodomain (t1:: AbstractTensorMap{S,1,N₂} , t2:: AbstractTensorMap{S,1,N₂} ) where {S,N₂}
186201 domain (t1) == domain (t2) || throw (SpaceMismatch ())
187202
188203 V1, = codomain (t1)
0 commit comments