@@ -67,6 +67,8 @@ field(::Type{TT}) where {TT<:AbstractTensorMap} = field(spacetype(TT))
6767Return the type of vector that stores the data of a tensor.
6868""" storagetype
6969
70+ similarstoragetype (TT:: Type{<:AbstractTensorMap} ) = similarstoragetype (TT, scalartype (TT))
71+
7072function similarstoragetype (TT:: Type{<:AbstractTensorMap} , :: Type{T} ) where {T}
7173 return Core. Compiler. return_type (similar, Tuple{storagetype (TT),Type{T}})
7274end
@@ -193,7 +195,7 @@ sectortype(t::AbstractTensorMap) = sectortype(typeof(t))
193195InnerProductStyle (t:: AbstractTensorMap ) = InnerProductStyle (typeof (t))
194196field (t:: AbstractTensorMap ) = field (typeof (t))
195197storagetype (t:: AbstractTensorMap ) = storagetype (typeof (t))
196- similarstoragetype (t:: AbstractTensorMap , TT) = similarstoragetype (typeof (t), TT )
198+ similarstoragetype (t:: AbstractTensorMap , T = scalartype (t)) = similarstoragetype (typeof (t), T )
197199
198200numout (t:: AbstractTensorMap ) = numout (typeof (t))
199201numin (t:: AbstractTensorMap ) = numin (typeof (t))
@@ -382,19 +384,19 @@ end
382384# 3 arguments
383385function Base. similar (t:: AbstractTensorMap , codomain:: TensorSpace{S} ,
384386 domain:: TensorSpace{S} ) where {S}
385- return similar (t, storagetype (t), codomain ← domain)
387+ return similar (t, similarstoragetype (t), codomain ← domain)
386388end
387389function Base. similar (t:: AbstractTensorMap , :: Type{T} , codomain:: TensorSpace ) where {T}
388390 return similar (t, T, codomain ← one (codomain))
389391end
390392# 2 arguments
391393function Base. similar (t:: AbstractTensorMap , codomain:: TensorSpace )
392- return similar (t, storagetype (t), codomain ← one (codomain))
394+ return similar (t, similarstoragetype (t), codomain ← one (codomain))
393395end
394396Base. similar (t:: AbstractTensorMap , P:: TensorMapSpace ) = similar (t, storagetype (t), P)
395397Base. similar (t:: AbstractTensorMap , :: Type{T} ) where {T} = similar (t, T, space (t))
396398# 1 argument
397- Base. similar (t:: AbstractTensorMap ) = similar (t, storagetype (t), space (t))
399+ Base. similar (t:: AbstractTensorMap ) = similar (t, similarstoragetype (t), space (t))
398400
399401# generic implementation for AbstractTensorMap -> returns `TensorMap`
400402function Base. similar (t:: AbstractTensorMap , :: Type{TorA} ,
@@ -408,6 +410,7 @@ function Base.similar(t::AbstractTensorMap, ::Type{TorA},
408410 else
409411 throw (ArgumentError (" Type $TorA not supported for similar" ))
410412 end
413+
411414 N₁ = length (codomain (P))
412415 N₂ = length (domain (P))
413416 return TensorMap {T,S,N₁,N₂,A} (undef, P)
0 commit comments