diff --git a/Project.toml b/Project.toml index 473394e..37d7cab 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "FusionTensors" uuid = "e16ca583-1f51-4df0-8e12-57d32947d33e" authors = ["ITensor developers and contributors"] -version = "0.5.16" +version = "0.5.17" [deps] Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" @@ -15,7 +15,6 @@ Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Strided = "5e0ebb24-38b0-5f93-81fe-25c709ecae67" TensorAlgebra = "68bd88dc-f39d-4e12-b2ca-f046b68fcc6a" TensorKitSectors = "13a9c161-d5da-41f0-bcbd-e1a08ae0647f" -TensorProducts = "decf83d6-1968-43f4-96dc-fdb3fe15fc6d" TypeParameterAccessors = "7e5a90cf-f82e-492e-a09b-e3e26432c138" WignerSymbols = "9f57e263-0b3d-5e2e-b1be-24f2bb48858b" @@ -29,9 +28,8 @@ LRUCache = "1.6" LinearAlgebra = "1.10" Random = "1.10" Strided = "2.3" -TensorAlgebra = "0.5.2" +TensorAlgebra = "0.6" TensorKitSectors = "0.1, 0.2" -TensorProducts = "0.1.7" TypeParameterAccessors = "0.4" WignerSymbols = "2.0.0" julia = "1.10" diff --git a/src/fusion_trees/clebsch_gordan_tensors.jl b/src/fusion_trees/clebsch_gordan_tensors.jl index 09245a0..5b316c1 100644 --- a/src/fusion_trees/clebsch_gordan_tensors.jl +++ b/src/fusion_trees/clebsch_gordan_tensors.jl @@ -21,7 +21,6 @@ using GradedArrays: trivial, zero_odd using TensorAlgebra: contract -using TensorProducts: ⊗ import TensorKitSectors as TKS function symbol_1j(s::SectorRange) diff --git a/src/fusion_trees/fusiontree.jl b/src/fusion_trees/fusiontree.jl index c8b8830..22dd4d6 100644 --- a/src/fusion_trees/fusiontree.jl +++ b/src/fusion_trees/fusiontree.jl @@ -8,6 +8,7 @@ using GradedArrays: AbstractGradedUnitRange, SectorProductRange, SectorRange, + ⊗, ×, arguments, flip, @@ -21,7 +22,6 @@ using GradedArrays: to_gradedrange, trivial using TensorAlgebra: flatten_tuples -using TensorProducts: ⊗ # # A fusion tree fuses N sectors sec1, secN onto one sector fused_sec. A given set of diff --git a/src/fusiontensor/fusiontensor.jl b/src/fusiontensor/fusiontensor.jl index 51c8c9d..5b67737 100644 --- a/src/fusiontensor/fusiontensor.jl +++ b/src/fusiontensor/fusiontensor.jl @@ -19,11 +19,11 @@ using GradedArrays: sector_type, sectormergesort, sectors, - space_isequal + space_isequal, + trivial_gradedrange using LinearAlgebra: UniformScaling using Random: Random, AbstractRNG, randn! -using TensorAlgebra: BlockedTuple, trivial_axis, tuplemortar, length_codomain, length_domain -using TensorProducts: tensor_product +using TensorAlgebra: BlockedTuple, tuplemortar, length_codomain, length_domain using TypeParameterAccessors: type_parameters # ======================================= Misc =========================================== @@ -36,7 +36,7 @@ function flip_domain(nonflipped_col_axis, nonflipped_trees_to_ranges) end function fuse_axes(::Type{S}, ::Tuple{}) where {S <: SectorRange} - fused_axis = trivial_axis(S) + fused_axis = trivial_gradedrange(S) trees_to_ranges_mapping = Dict([SectorFusionTree{S}() => Block(1)[1:1]]) return fused_axis, trees_to_ranges_mapping end diff --git a/src/fusiontensor/fusiontensoraxes.jl b/src/fusiontensor/fusiontensoraxes.jl index 01303a6..bae7e08 100644 --- a/src/fusiontensor/fusiontensoraxes.jl +++ b/src/fusiontensor/fusiontensoraxes.jl @@ -4,9 +4,12 @@ using GradedArrays: AbstractGradedUnitRange, SymmetryStyle, TrivialSector, + ⊗, dual, sector_type, - trivial + tensor_product, + trivial, + trivial_gradedrange using TensorAlgebra: TensorAlgebra, AbstractBlockPermutation, @@ -14,7 +17,6 @@ using TensorAlgebra: BlockedTuple, length_codomain, length_domain -using TensorProducts: ⊗ using TypeParameterAccessors: type_parameters # ======================================= Misc =========================================== @@ -68,7 +70,9 @@ end TensorAlgebra.BlockedTuple(fta::FusionTensorAxes) = fta.outer_axes -TensorAlgebra.trivial_axis(fta::FusionTensorAxes) = trivial_axis(sector_type(fta)) +function GradedArrays.trivial_gradedrange(fta::FusionTensorAxes) + return trivial_gradedrange(sector_type(fta)) +end TensorAlgebra.length_domain(fta::FusionTensorAxes) = length(domain(fta)) @@ -136,14 +140,14 @@ domain(fta::FusionTensorAxes) = fta[Block(2)] function fused_codomain(fta::FusionTensorAxes) if length_codomain(fta) == 0 - return trivial_axis(fta) + return trivial_gradedrange(fta) end return ⊗(codomain(fta)...) end function fused_domain(fta::FusionTensorAxes) if length_domain(fta) == 0 - return dual(trivial_axis(fta)) + return dual(trivial_gradedrange(fta)) end return dual(⊗(dual.(domain(fta))...)) end diff --git a/src/fusiontensor/tensor_algebra_interface.jl b/src/fusiontensor/tensor_algebra_interface.jl index 72657f2..2cb5399 100644 --- a/src/fusiontensor/tensor_algebra_interface.jl +++ b/src/fusiontensor/tensor_algebra_interface.jl @@ -4,7 +4,7 @@ using BlockArrays: Block using GradedArrays: space_isequal using LinearAlgebra: mul! using TensorAlgebra: TensorAlgebra, AbstractBlockPermutation, FusionStyle, blockedperm, - blockedtrivialperm, genperm, matricize, unmatricize + genperm, matricize, trivialbiperm, unmatricize function TensorAlgebra.output_axes( ::typeof(contract), @@ -35,10 +35,9 @@ TensorAlgebra.FusionStyle(::Type{<:FusionTensor}) = FusionTensorFusionStyle() unval(::Val{x}) where {x} = x function TensorAlgebra.matricize( - ::FusionTensorFusionStyle, ft::AbstractArray, - codomain_length::Val, domain_length::Val + ::FusionTensorFusionStyle, ft::AbstractArray, length_codomain::Val ) - blocklengths(axes(ft)) == unval.((codomain_length, domain_length)) || + first(blocklengths(axes(ft))) == unval(length_codomain) || throw(ArgumentError("Invalid trivial biperm")) return FusionTensor(data_matrix(ft), (codomain_axis(ft),), (domain_axis(ft),)) end @@ -118,13 +117,9 @@ const MATRIX_FUNCTIONS = [ for f in MATRIX_FUNCTIONS @eval begin - function TensorAlgebra.$f( - a::FusionTensor, - codomain_length::Val, domain_length::Val; - kwargs..., - ) - a_mat = matricize(a, codomain_length, domain_length) - biperm = blockedtrivialperm((codomain_length, domain_length)) + function TensorAlgebra.$f(a::FusionTensor, length_codomain::Val; kwargs...) + a_mat = matricize(a, length_codomain) + biperm = trivialbiperm(length_codomain, Val(ndims(a))) permuted_axes = axes(a)[biperm] checkspaces_dual(codomain(permuted_axes), domain(permuted_axes)) fa_mat = set_data_matrix(a_mat, Base.$f(data_matrix(a_mat); kwargs...)) diff --git a/test/Project.toml b/test/Project.toml index af5b399..8c073d1 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -10,7 +10,6 @@ SUNRepresentations = "1a50b95c-7aac-476d-a9ce-2bfc675fc617" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" Suppressor = "fd094767-a336-5f1f-9728-57cf17d0bbfb" TensorAlgebra = "68bd88dc-f39d-4e12-b2ca-f046b68fcc6a" -TensorProducts = "decf83d6-1968-43f4-96dc-fdb3fe15fc6d" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [sources] @@ -27,6 +26,5 @@ Random = "1.10" SUNRepresentations = "0.3.1" SafeTestsets = "0.1.0" Suppressor = "0.2.8" -TensorAlgebra = "0.5" -TensorProducts = "0.1" +TensorAlgebra = "0.6" Test = "1.10.0" diff --git a/test/test_array_cast.jl b/test/test_array_cast.jl index ed3f633..8aa051c 100644 --- a/test/test_array_cast.jl +++ b/test/test_array_cast.jl @@ -4,8 +4,8 @@ using Test: @test, @test_throws, @testset using BlockArrays: Block, BlockedArray, blocksize using FusionTensors: FusionTensor, data_matrix, to_fusiontensor -using GradedArrays: O2, SU2, TrivialSector, U1, dual, gradedrange, sectorproduct -using TensorProducts: tensor_product +using GradedArrays: O2, SU2, TrivialSector, U1, dual, gradedrange, sectorproduct, + tensor_product include("setup.jl") diff --git a/test/test_basics.jl b/test/test_basics.jl index e9327b1..6b01e04 100644 --- a/test/test_basics.jl +++ b/test/test_basics.jl @@ -26,9 +26,9 @@ using GradedArrays: gradedrange, sector_type, sectorproduct, - space_isequal + space_isequal, + tensor_product using TensorAlgebra: tuplemortar -using TensorProducts: tensor_product using LinearAlgebra: LinearAlgebra, norm using Random: Random diff --git a/test/test_fusiontensoraxes.jl b/test/test_fusiontensoraxes.jl index eb302a9..d939c21 100644 --- a/test/test_fusiontensoraxes.jl +++ b/test/test_fusiontensoraxes.jl @@ -1,6 +1,5 @@ using Test: @test, @test_throws, @testset -using TensorProducts: ⊗ using BlockArrays: Block, blockedrange, blocklength, blocklengths, blocks using TensorAlgebra: BlockedTuple, length_codomain, trivial_axis, tuplemortar @@ -15,6 +14,7 @@ using FusionTensors: promote_sector_type, promote_sectors using GradedArrays: + ⊗, ×, U1, TrivialSector, @@ -24,7 +24,8 @@ using GradedArrays: gradedrange, sectorproduct, sector_type, - space_isequal + space_isequal, + trivial_gradedrange @testset "misc FusionTensors.jl" begin g1 = gradedrange([U1(0) => 1]) @@ -84,7 +85,7 @@ end @test all(map(r -> space_isequal(r, g2b), domain(fta))) @test space_isequal(fused_codomain(fta), g2 ⊗ g2) @test space_isequal(fused_domain(fta), dual(g2 ⊗ g2)) - @test space_isequal(trivial_axis(fta), trivial_axis(typeof(s2))) + @test space_isequal(trivial_gradedrange(fta), trivial_gradedrange(typeof(s2))) @test fta == fta @test copy(fta) == fta @@ -111,7 +112,7 @@ end @test length_codomain(fta) == 0 @test codomain(fta) == () - @test space_isequal(fused_codomain(fta), trivial_axis(TrivialSector)) + @test space_isequal(fused_codomain(fta), trivial_gradedrange(TrivialSector)) @test domain(fta) == () - @test space_isequal(fused_domain(fta), dual(trivial_axis(TrivialSector))) + @test space_isequal(fused_domain(fta), dual(trivial_gradedrange(TrivialSector))) end