@@ -279,8 +279,8 @@ See also [`permute`](@ref), [`permute!`](@ref), [`add_braid!`](@ref), [`add_tran
279279 α:: Number ,
280280 β:: Number ,
281281 backend:: AbstractBackend... ) where {T,S,N₁,N₂}
282- treepermuter (f₁, f₂) = permute (f₁, f₂ , p[ 1 ], p[ 2 ] )
283- return add_transform! (tdst, tsrc, p, treepermuter , α, β, backend... )
282+ transformer = treepermuter (tdst, tsrc , p)
283+ return add_transform! (tdst, tsrc, p, transformer , α, β, backend... )
284284end
285285
286286"""
@@ -305,8 +305,8 @@ See also [`braid`](@ref), [`braid!`](@ref), [`add_permute!`](@ref), [`add_transp
305305 levels1 = TupleTools. getindices (levels, codomainind (tsrc))
306306 levels2 = TupleTools. getindices (levels, domainind (tsrc))
307307 # TODO : arg order for tensormaps is different than for fusiontrees
308- treebraider (f₁, f₂) = braid (f₁, f₂, levels1, levels2, p ... )
309- return add_transform! (tdst, tsrc, p, treebraider , α, β, backend... )
308+ transformer = treebraider (tdst, tsrc, p, (levels1, levels2) )
309+ return add_transform! (tdst, tsrc, p, transformer , α, β, backend... )
310310end
311311
312312"""
@@ -324,14 +324,14 @@ See also [`transpose`](@ref), [`transpose!`](@ref), [`add_permute!`](@ref), [`ad
324324 α:: Number ,
325325 β:: Number ,
326326 backend:: AbstractBackend... ) where {T,S,N₁,N₂}
327- treetransposer (f₁, f₂) = transpose (f₁, f₂ , p[ 1 ], p[ 2 ] )
328- return add_transform! (tdst, tsrc, p, treetransposer , α, β, backend... )
327+ transformer = treetransposer (tdst, tsrc , p)
328+ return add_transform! (tdst, tsrc, p, transformer , α, β, backend... )
329329end
330330
331331function add_transform! (tdst:: AbstractTensorMap{T,S,N₁,N₂} ,
332332 tsrc:: AbstractTensorMap ,
333333 (p₁, p₂):: Index2Tuple{N₁,N₂} ,
334- fusiontreetransform ,
334+ transformer :: GenericTreeTransformer ,
335335 α:: Number ,
336336 β:: Number ,
337337 backend:: AbstractBackend... ) where {T,S,N₁,N₂}
@@ -341,16 +341,34 @@ function add_transform!(tdst::AbstractTensorMap{T,S,N₁,N₂},
341341 dest = $(codomain (tdst)) ←$(domain (tdst)) , p₁ = $(p₁) , p₂ = $(p₂) " ))
342342 end
343343
344- I = sectortype (S)
345- if p₁ == codomainind (tsrc) && p₂ == domainind (tsrc)
346- add! (tdst, tsrc, α, β)
347- elseif I === Trivial
348- _add_trivial_kernel! (tdst, tsrc, (p₁, p₂), fusiontreetransform, α, β, backend... )
349- elseif FusionStyle (I) isa UniqueFusion
350- _add_abelian_kernel! (tdst, tsrc, (p₁, p₂), fusiontreetransform, α, β, backend... )
351- else
352- _add_general_kernel! (tdst, tsrc, (p₁, p₂), fusiontreetransform, α, β, backend... )
344+ structure_dst = transformer. structure_dst. fusiontreestructure
345+ structure_src = transformer. structure_src. fusiontreestructure
346+
347+ rows = rowvals (transformer. matrix)
348+ vals = nonzeros (transformer. matrix)
349+
350+ # TODO : this could be multithreaded
351+ for j in axes (transformer. matrix, 2 )
352+ sz_dst, str_dst, offset_dst = structure_dst[j]
353+ subblock_dst = StridedView (tdst. data, sz_dst, str_dst, offset_dst)
354+ nzrows = nzrange (transformer. matrix, j)
355+
356+ # treat first entry
357+ sz_src, str_src, offset_src = structure_src[rows[first (nzrows)]]
358+ subblock_src = StridedView (tsrc. data, sz_src, str_src, offset_src)
359+ TO. tensoradd! (subblock_dst, subblock_src, (p₁, p₂), false , α * vals[first (nzrows)],
360+ β,
361+ backend... )
362+
363+ # treat remaining entries
364+ for i in @view (nzrows[2 : end ])
365+ sz_src, str_src, offset_src = structure_src[rows[i]]
366+ subblock_src = StridedView (tsrc. data, sz_src, str_src, offset_src)
367+ TO. tensoradd! (subblock_dst, subblock_src, (p₁, p₂), false , α * vals[i], One (),
368+ backend... )
369+ end
353370 end
371+
354372 return tdst
355373end
356374
@@ -389,7 +407,7 @@ function _add_general_kernel!(tdst, tsrc, p, fusiontreetransform, α, β, backen
389407 tdst = scale! (tdst, β)
390408 end
391409 β′ = One ()
392- if Threads. nthreads () > 1
410+ if false # Threads.nthreads() > 1
393411 Threads. @sync for s₁ in sectors (codomain (tsrc)), s₂ in sectors (domain (tsrc))
394412 Threads. @spawn _add_nonabelian_sector! (tdst, tsrc, p, fusiontreetransform, s₁,
395413 s₂, α, β′, backend... )
0 commit comments