Skip to content

Commit 9f2b662

Browse files
committed
streamline error messages
1 parent be80eed commit 9f2b662

File tree

1 file changed

+39
-11
lines changed

1 file changed

+39
-11
lines changed

src/tensors/indexmanipulations.jl

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,38 @@ end
394394
#-------------------------------------
395395
# Full implementations based on `add`
396396
#-------------------------------------
397+
spacecheck_transform(f, tdst::AbstractTensorMap, tsrc::AbstractTensorMap, args...) =
398+
spacecheck_transform(f, space(tdst), space(tsrc), args...)
399+
@noinline function spacecheck_transform(f, Vdst::TensorMapSpace, Vsrc::TensorMapSpace, p::Index2Tuple)
400+
spacetype(Vdst) == spacetype(Vsrc) || throw(SectorMismatch("incompatible sector types"))
401+
f(Vsrc, p) == Vdst ||
402+
throw(
403+
SpaceMismatch(
404+
lazy"""
405+
incompatible spaces for `$f(Vsrc, $p) -> Vdst`
406+
Vsrc = $Vsrc
407+
Vdst = $Vdst
408+
"""
409+
)
410+
)
411+
return nothing
412+
end
413+
@noinline function spacecheck_transform(::typeof(braid), Vdst::TensorMapSpace, Vsrc::TensorMapSpace, p::Index2Tuple, lvls::IndexTuple)
414+
spacetype(Vdst) == spacetype(Vsrc) || throw(SectorMismatch("incompatible sector types"))
415+
braid(Vsrc, p, lvls) == Vdst ||
416+
throw(
417+
SpaceMismatch(
418+
lazy"""
419+
incompatible spaces for `braid(Vsrc, $p, $lvls) -> Vdst`
420+
Vsrc = $Vsrc
421+
Vdst = $Vdst
422+
"""
423+
)
424+
)
425+
return nothing
426+
end
427+
428+
397429
"""
398430
add_permute!(tdst::AbstractTensorMap, tsrc::AbstractTensorMap, (p₁, p₂)::Index2Tuple,
399431
α::Number, β::Number, backend::AbstractBackend...)
@@ -407,8 +439,9 @@ See also [`permute`](@ref), [`permute!`](@ref), [`add_braid!`](@ref), [`add_tran
407439
tdst::AbstractTensorMap, tsrc::AbstractTensorMap, p::Index2Tuple,
408440
α::Number, β::Number, backend::AbstractBackend...
409441
)
442+
@boundscheck spacecheck_transform(permute, tdst, tsrc, p)
410443
transformer = treepermuter(tdst, tsrc, p)
411-
return add_transform!(tdst, tsrc, p, transformer, α, β, backend...)
444+
return @inbounds add_transform!(tdst, tsrc, p, transformer, α, β, backend...)
412445
end
413446

414447
"""
@@ -424,14 +457,12 @@ See also [`braid`](@ref), [`braid!`](@ref), [`add_permute!`](@ref), [`add_transp
424457
tdst::AbstractTensorMap, tsrc::AbstractTensorMap, p::Index2Tuple, levels::IndexTuple,
425458
α::Number, β::Number, backend::AbstractBackend...
426459
)
427-
length(levels) == numind(tsrc) ||
428-
throw(ArgumentError("incorrect levels $levels for tensor map $(codomain(tsrc))$(domain(tsrc))"))
429-
460+
@boundscheck spacecheck_transform(braid, tdst, tsrc, p, levels)
430461
levels1 = TupleTools.getindices(levels, codomainind(tsrc))
431462
levels2 = TupleTools.getindices(levels, domainind(tsrc))
432463
# TODO: arg order for tensormaps is different than for fusiontrees
433464
transformer = treebraider(tdst, tsrc, p, (levels1, levels2))
434-
return add_transform!(tdst, tsrc, p, transformer, α, β, backend...)
465+
return @inbounds add_transform!(tdst, tsrc, p, transformer, α, β, backend...)
435466
end
436467

437468
"""
@@ -447,19 +478,16 @@ See also [`transpose`](@ref), [`transpose!`](@ref), [`add_permute!`](@ref), [`ad
447478
tdst::AbstractTensorMap, tsrc::AbstractTensorMap, p::Index2Tuple,
448479
α::Number, β::Number, backend::AbstractBackend...
449480
)
481+
@boundscheck spacecheck_transform(transpose, tdst, tsrc, p)
450482
transformer = treetransposer(tdst, tsrc, p)
451-
return add_transform!(tdst, tsrc, p, transformer, α, β, backend...)
483+
return @inbounds add_transform!(tdst, tsrc, p, transformer, α, β, backend...)
452484
end
453485

454486
function add_transform!(
455487
tdst::AbstractTensorMap, tsrc::AbstractTensorMap, p::Index2Tuple, transformer,
456488
α::Number, β::Number, backend::AbstractBackend...
457489
)
458-
@boundscheck begin
459-
permute(space(tsrc), p) == space(tdst) ||
460-
throw(SpaceMismatch("source = $(codomain(tsrc))$(domain(tsrc)),
461-
dest = $(codomain(tdst))$(domain(tdst)), p₁ = $(p[1]), p₂ = $(p[2])"))
462-
end
490+
@boundscheck spacecheck_transform(permute, tdst, tsrc, p)
463491

464492
if p[1] === codomainind(tsrc) && p[2] === domainind(tsrc)
465493
add!(tdst, tsrc, α, β)

0 commit comments

Comments
 (0)