Skip to content

Commit f307964

Browse files
committed
fix similar
1 parent 6aa0c7b commit f307964

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "TensorKit"
22
uuid = "07d1fe3e-3e46-537d-9eac-e9e13d0d4cec"
33
authors = ["Jutho Haegeman"]
4-
version = "0.14.1"
4+
version = "0.14.2"
55

66
[deps]
77
LRUCache = "8ac3fa9e-de4c-5943-b1dc-09c6b5f20637"

src/tensors/abstracttensor.jl

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ field(::Type{TT}) where {TT<:AbstractTensorMap} = field(spacetype(TT))
6767
Return the type of vector that stores the data of a tensor.
6868
""" storagetype
6969

70+
similarstoragetype(TT::Type{<:AbstractTensorMap}) = similarstoragetype(TT, scalartype(TT))
71+
7072
function similarstoragetype(TT::Type{<:AbstractTensorMap}, ::Type{T}) where {T}
7173
return Core.Compiler.return_type(similar, Tuple{storagetype(TT),Type{T}})
7274
end
@@ -193,7 +195,7 @@ sectortype(t::AbstractTensorMap) = sectortype(typeof(t))
193195
InnerProductStyle(t::AbstractTensorMap) = InnerProductStyle(typeof(t))
194196
field(t::AbstractTensorMap) = field(typeof(t))
195197
storagetype(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

198200
numout(t::AbstractTensorMap) = numout(typeof(t))
199201
numin(t::AbstractTensorMap) = numin(typeof(t))
@@ -382,19 +384,19 @@ end
382384
# 3 arguments
383385
function 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)
386388
end
387389
function Base.similar(t::AbstractTensorMap, ::Type{T}, codomain::TensorSpace) where {T}
388390
return similar(t, T, codomain one(codomain))
389391
end
390392
# 2 arguments
391393
function Base.similar(t::AbstractTensorMap, codomain::TensorSpace)
392-
return similar(t, storagetype(t), codomain one(codomain))
394+
return similar(t, similarstoragetype(t), codomain one(codomain))
393395
end
394396
Base.similar(t::AbstractTensorMap, P::TensorMapSpace) = similar(t, storagetype(t), P)
395397
Base.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`
400402
function 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

Comments
 (0)