Skip to content

Commit 4becdac

Browse files
committed
streamline error messages
1 parent 1782854 commit 4becdac

1 file changed

Lines changed: 39 additions & 11 deletions

File tree

src/tensors/indexmanipulations.jl

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,38 @@ end
410410
#-------------------------------------
411411
# Full implementations based on `add`
412412
#-------------------------------------
413+
spacecheck_transform(f, tdst::AbstractTensorMap, tsrc::AbstractTensorMap, args...) =
414+
spacecheck_transform(f, space(tdst), space(tsrc), args...)
415+
@noinline function spacecheck_transform(f, Vdst::TensorMapSpace, Vsrc::TensorMapSpace, p::Index2Tuple)
416+
spacetype(Vdst) == spacetype(Vsrc) || throw(SectorMismatch("incompatible sector types"))
417+
f(Vsrc, p) == Vdst ||
418+
throw(
419+
SpaceMismatch(
420+
lazy"""
421+
incompatible spaces for `$f(Vsrc, $p) -> Vdst`
422+
Vsrc = $Vsrc
423+
Vdst = $Vdst
424+
"""
425+
)
426+
)
427+
return nothing
428+
end
429+
@noinline function spacecheck_transform(::typeof(braid), Vdst::TensorMapSpace, Vsrc::TensorMapSpace, p::Index2Tuple, lvls::IndexTuple)
430+
spacetype(Vdst) == spacetype(Vsrc) || throw(SectorMismatch("incompatible sector types"))
431+
braid(Vsrc, p, lvls) == Vdst ||
432+
throw(
433+
SpaceMismatch(
434+
lazy"""
435+
incompatible spaces for `braid(Vsrc, $p, $lvls) -> Vdst`
436+
Vsrc = $Vsrc
437+
Vdst = $Vdst
438+
"""
439+
)
440+
)
441+
return nothing
442+
end
443+
444+
413445
"""
414446
add_permute!(tdst::AbstractTensorMap, tsrc::AbstractTensorMap, (p₁, p₂)::Index2Tuple,
415447
α::Number, β::Number, backend::AbstractBackend...)
@@ -423,8 +455,9 @@ See also [`permute`](@ref), [`permute!`](@ref), [`add_braid!`](@ref), [`add_tran
423455
tdst::AbstractTensorMap, tsrc::AbstractTensorMap, p::Index2Tuple,
424456
α::Number, β::Number, backend::AbstractBackend...
425457
)
458+
@boundscheck spacecheck_transform(permute, tdst, tsrc, p)
426459
transformer = treepermuter(tdst, tsrc, p)
427-
return add_transform!(tdst, tsrc, p, transformer, α, β, backend...)
460+
return @inbounds add_transform!(tdst, tsrc, p, transformer, α, β, backend...)
428461
end
429462

430463
"""
@@ -440,14 +473,12 @@ See also [`braid`](@ref), [`braid!`](@ref), [`add_permute!`](@ref), [`add_transp
440473
tdst::AbstractTensorMap, tsrc::AbstractTensorMap, p::Index2Tuple, levels::IndexTuple,
441474
α::Number, β::Number, backend::AbstractBackend...
442475
)
443-
length(levels) == numind(tsrc) ||
444-
throw(ArgumentError("incorrect levels $levels for tensor map $(codomain(tsrc))$(domain(tsrc))"))
445-
476+
@boundscheck spacecheck_transform(braid, tdst, tsrc, p, levels)
446477
levels1 = TupleTools.getindices(levels, codomainind(tsrc))
447478
levels2 = TupleTools.getindices(levels, domainind(tsrc))
448479
# TODO: arg order for tensormaps is different than for fusiontrees
449480
transformer = treebraider(tdst, tsrc, p, (levels1, levels2))
450-
return add_transform!(tdst, tsrc, p, transformer, α, β, backend...)
481+
return @inbounds add_transform!(tdst, tsrc, p, transformer, α, β, backend...)
451482
end
452483

453484
"""
@@ -463,19 +494,16 @@ See also [`transpose`](@ref), [`transpose!`](@ref), [`add_permute!`](@ref), [`ad
463494
tdst::AbstractTensorMap, tsrc::AbstractTensorMap, p::Index2Tuple,
464495
α::Number, β::Number, backend::AbstractBackend...
465496
)
497+
@boundscheck spacecheck_transform(transpose, tdst, tsrc, p)
466498
transformer = treetransposer(tdst, tsrc, p)
467-
return add_transform!(tdst, tsrc, p, transformer, α, β, backend...)
499+
return @inbounds add_transform!(tdst, tsrc, p, transformer, α, β, backend...)
468500
end
469501

470502
function add_transform!(
471503
tdst::AbstractTensorMap, tsrc::AbstractTensorMap, p::Index2Tuple, transformer,
472504
α::Number, β::Number, backend::AbstractBackend...
473505
)
474-
@boundscheck begin
475-
permute(space(tsrc), p) == space(tdst) ||
476-
throw(SpaceMismatch("source = $(codomain(tsrc))$(domain(tsrc)),
477-
dest = $(codomain(tdst))$(domain(tdst)), p₁ = $(p[1]), p₂ = $(p[2])"))
478-
end
506+
@boundscheck spacecheck_transform(permute, tdst, tsrc, p)
479507

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

0 commit comments

Comments
 (0)