Skip to content

Commit 1170cc0

Browse files
committed
corrected DiagonalForm constructors
1 parent 6c4ce27 commit 1170cc0

2 files changed

Lines changed: 13 additions & 9 deletions

File tree

src/DirectSum.jl

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import AbstractTensors: TensorAlgebra, Manifold, TensorGraded, scalar, isscalar,
2929
import AbstractTensors: vector, isvector, bivector, isbivector, volume, isvolume, equal,
3030
import AbstractTensors: value, valuetype, interop, interform, even, odd, isnull, norm, SUM
3131
import AbstractTensors: TupleVector, Values, Variables, FixedVector, basis, mdims, PROD
32-
import AbstractTensors: Scalar, GradedVector, Bivector, Trivector
32+
import AbstractTensors: Scalar, GradedVector, Bivector, Trivector, SUB
3333

3434
import Leibniz: Fields, pre, PRE, vsn, VTI, bit2int, combo, indexbits, indices
3535
import Leibniz: printlabel, supermanifold, shift_indices, shift_indices!, printindices
@@ -152,22 +152,23 @@ end
152152

153153
@pure DiagonalForm{N,M,S,F,D}() where {N,M,S,F,D} = DiagonalForm{N,M,S,F,D,1}()
154154
@pure DiagonalForm{N,M,S}() where {N,M,S} = DiagonalForm{N,M,S,0,0}()
155+
@pure DiagonalForm{N,M}(b::Values{N}) where {N,M} = DiagonalForm{N,M,diagsig(M,b)}()
155156
DiagonalForm{N,M}(b::Vector) where {N,M} = DiagonalForm{N,M}(Values(b...))
156-
DiagonalForm(b::Values{N}) where N = DiagonalForm{N,0}(b)
157+
@pure DiagonalForm(b::Values{N}) where N = DiagonalForm{N,0}(b)
158+
@pure DiagonalForm(b::Tuple) = DiagonalForm{length(b),0}(Values(b))
157159
DiagonalForm(b::Vector) = DiagonalForm{length(b),0}(b)
158-
DiagonalForm(b::Tuple) = DiagonalForm{length(b),0}(Values(b))
159160
DiagonalForm(b...) = DiagonalForm(b)
160161
DiagonalForm(s::String) = DiagonalForm(Meta.parse(s).args)
161162

162163
@pure diagonalform(V::DiagonalForm{N,M,S} where N) where {M,S} = isdual(V) ? SUB(diagonalform_cache[S]) : diagonalform_cache[S]
163164
const diagonalform_cache = Values[]
164-
function DiagonalForm{N,M}(b::Values{N}) where {N,M}
165+
@pure function diagsig(M,b::Values)
165166
a = dyadmode(M)>0 ? SUB(b) : b
166167
if a diagonalform_cache
167-
DiagonalForm{N,M,findfirst(x->x==a,diagonalform_cache)}()
168+
findfirst(x->x==a,diagonalform_cache)
168169
else
169170
push!(diagonalform_cache,a)
170-
DiagonalForm{N,M,length(diagonalform_cache)}()
171+
length(diagonalform_cache)
171172
end
172173
end
173174

src/operations.jl

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,16 @@ for op ∈ (:+,:⊕)
5353
Signature{N+M,opt,bit2int(BitArray([a[:]; b[:]])),F,D}()
5454
end
5555
@pure function $op(a::DiagonalForm{N,X,A,F,D},b::DiagonalForm{M,Y,B,F,D}) where {N,X,A,M,Y,B,F,D}
56-
DiagonalForm{N+M,combine_options(a,b),F,D}([a[:];b[:]])
56+
opt,sig = combine_options(a,b),[a[:];b[:]]
57+
DiagonalForm{N+M,opt,diagsig(opt,sig),F,D}()
5758
end
5859
@pure function $op(a::DiagonalForm{N,X,A,F,D},b::Signature{M,Y,B,F,D}) where {N,X,A,M,Y,B,F,D}
59-
DiagonalForm{N+M,combine_options(a,b),F,D}([a[:];[t ? -1 : 1 for t b[:]]])
60+
opt,sig = combine_options(a,b),[a[:];[t ? -1 : 1 for t b[:]]]
61+
DiagonalForm{N+M,opt,diagsig(opt,sig),F,D}()
6062
end
6163
@pure function $op(a::Signature{N,X,A,F,D},b::DiagonalForm{M,Y,B,F,D}) where {N,X,A,M,Y,B,F,D}
62-
DiagonalForm{N+M,combine_options(a,b),F,D}([[t ? -1 : 1 for t a[:]];b[:]])
64+
opt,sig = combine_options(a,b),[[t ? -1 : 1 for t a[:]];b[:]]
65+
DiagonalForm{N+M,opt,diagsig(opt,sig),F,D}()
6366
end
6467
end
6568
end

0 commit comments

Comments
 (0)