From f15bf710565a261998be1d5f320372e76ab9d4bf Mon Sep 17 00:00:00 2001 From: Yue Zhengyuan Date: Sat, 24 Oct 2026 10:55:07 +0800 Subject: [PATCH] Fix tensor map subtype bounds and add regression coverage --- .gitignore | 1 + src/tensors/adjoint.jl | 4 ++-- src/tensors/braidingtensor.jl | 4 ++-- src/tensors/diagonal.jl | 2 +- src/tensors/tensor.jl | 4 ++-- test/tensors/subtyping.jl | 12 ++++++++++++ 6 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 test/tensors/subtyping.jl diff --git a/.gitignore b/.gitignore index 22b0fc821..3e6da32ea 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ __pycache__ .ipynb* *Manifest.toml +*LocalPreferences.toml .vscode experimental refs diff --git a/src/tensors/adjoint.jl b/src/tensors/adjoint.jl index 2297643ce..39c785375 100644 --- a/src/tensors/adjoint.jl +++ b/src/tensors/adjoint.jl @@ -1,12 +1,12 @@ # AdjointTensorMap: lazy adjoint #==========================================================# """ - struct AdjointTensorMap{T, S, N₁, N₂, TT<:AbstractTensorMap} <: AbstractTensorMap{T, S, N₁, N₂} + struct AdjointTensorMap{T<:Number, S<:IndexSpace, N₁, N₂, TT<:AbstractTensorMap} <: AbstractTensorMap{T, S, N₁, N₂} Specific subtype of [`AbstractTensorMap`](@ref) that is a lazy wrapper for representing the adjoint of an instance of [`AbstractTensorMap`](@ref). """ -struct AdjointTensorMap{T, S, N₁, N₂, TT <: AbstractTensorMap{T, S, N₂, N₁}} <: +struct AdjointTensorMap{T <: Number, S <: IndexSpace, N₁, N₂, TT <: AbstractTensorMap{T, S, N₂, N₁}} <: AbstractTensorMap{T, S, N₁, N₂} parent::TT end diff --git a/src/tensors/braidingtensor.jl b/src/tensors/braidingtensor.jl index 0635f7988..ea72f713b 100644 --- a/src/tensors/braidingtensor.jl +++ b/src/tensors/braidingtensor.jl @@ -2,7 +2,7 @@ # special (2,2) tensor that implements a standard braiding operation #====================================================================# """ - struct BraidingTensor{T, S <: IndexSpace, A <: DenseVector{T}} <: AbstractTensorMap{T, S, 2, 2} + struct BraidingTensor{T <: Number, S <: IndexSpace, A <: DenseVector{T}} <: AbstractTensorMap{T, S, 2, 2} BraidingTensor(V1::S, V2::S, adjoint::Bool=false) where {S<:IndexSpace} BraidingTensor{T, S, A}(V1::S, V2::S, adjoint::Bool=false) where {T, S, A} @@ -14,7 +14,7 @@ It holds that `domain(BraidingTensor(V1, V2)) == V1 ⊗ V2` and controls the array type of the braiding tensor used when indexing and multiplying with other tensors. """ -struct BraidingTensor{T, S, A <: DenseVector{T}} <: AbstractTensorMap{T, S, 2, 2} +struct BraidingTensor{T <: Number, S <: IndexSpace, A <: DenseVector{T}} <: AbstractTensorMap{T, S, 2, 2} V1::S V2::S adjoint::Bool diff --git a/src/tensors/diagonal.jl b/src/tensors/diagonal.jl index 630f1866a..8a59fa96b 100644 --- a/src/tensors/diagonal.jl +++ b/src/tensors/diagonal.jl @@ -1,6 +1,6 @@ # DiagonalTensorMap #==========================================================# -struct DiagonalTensorMap{T, S <: IndexSpace, A <: DenseVector{T}} <: AbstractTensorMap{T, S, 1, 1} +struct DiagonalTensorMap{T <: Number, S <: IndexSpace, A <: DenseVector{T}} <: AbstractTensorMap{T, S, 1, 1} data::A domain::S # equals codomain diff --git a/src/tensors/tensor.jl b/src/tensors/tensor.jl index 1aeb0070c..3888959d3 100644 --- a/src/tensors/tensor.jl +++ b/src/tensors/tensor.jl @@ -2,12 +2,12 @@ # general tensor implementation with arbitrary symmetries #==========================================================# """ - struct TensorMap{T, S<:IndexSpace, N₁, N₂, A<:DenseVector{T}} <: AbstractTensorMap{T, S, N₁, N₂} + struct TensorMap{T<:Number, S<:IndexSpace, N₁, N₂, A<:DenseVector{T}} <: AbstractTensorMap{T, S, N₁, N₂} Specific subtype of [`AbstractTensorMap`](@ref) for representing tensor maps (morphisms in a tensor category), where the data is stored in a dense vector. """ -struct TensorMap{T, S <: IndexSpace, N₁, N₂, A <: DenseVector{T}} <: AbstractTensorMap{T, S, N₁, N₂} +struct TensorMap{T <: Number, S <: IndexSpace, N₁, N₂, A <: DenseVector{T}} <: AbstractTensorMap{T, S, N₁, N₂} data::A space::TensorMapSpace{S, N₁, N₂} diff --git a/test/tensors/subtyping.jl b/test/tensors/subtyping.jl new file mode 100644 index 000000000..6d6ae0252 --- /dev/null +++ b/test/tensors/subtyping.jl @@ -0,0 +1,12 @@ +using Test +using TensorKit +using TensorKit: AdjointTensorMap + +@testset "Tensor map subtyping" begin + for TT in (TensorMap, DiagonalTensorMap, AdjointTensorMap, BraidingTensor) + @test TT <: AbstractTensorMap + for T in (Float64, ComplexF64) + @test TT{T} <: AbstractTensorMap{T} + end + end +end