Skip to content

Commit

Permalink
Add more mutating arithmetics and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
lgoettgens committed Nov 12, 2024
1 parent 57193ab commit 53f2f0e
Show file tree
Hide file tree
Showing 4 changed files with 100 additions and 2 deletions.
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
cohomCalg_jll = "5558cf25-a90e-53b0-b813-cadaa3ae7ade"

[compat]
AbstractAlgebra = "0.43.7"
AbstractAlgebra = "0.43.10"
AlgebraicSolving = "0.8.0"
Distributed = "1.6"
GAP = "0.12.0"
Expand Down
2 changes: 2 additions & 0 deletions experimental/LieAlgebras/src/LieAlgebras.jl
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import ..Oscar:
_vec,
action,
add!,
addmul!,
basis_matrix,
basis,
canonical_injection,
Expand Down Expand Up @@ -68,6 +69,7 @@ import ..Oscar:
kernel,
lower_central_series,
matrix,
mul!,
neg!,
normalizer,
number_of_generators,
Expand Down
86 changes: 86 additions & 0 deletions experimental/LieAlgebras/src/RootSystem.jl
Original file line number Diff line number Diff line change
Expand Up @@ -801,6 +801,34 @@ function sub!(rr::RootSpaceElem, r1::RootSpaceElem, r2::RootSpaceElem)
return rr
end

function mul!(rr::RootSpaceElem, r::RootSpaceElem, q::RationalUnion)
@req root_system(rr) === root_system(r) "parent root system mismatch"
rr.vec = mul!(rr.vec, r.vec, q)
return rr
end

function mul!(rr::RootSpaceElem, q::RationalUnion, r::RootSpaceElem)
@req root_system(rr) === root_system(r) "parent root system mismatch"
rr.vec = mul!(rr.vec, q, r.vec)
return rr
end

function addmul!(rr::RootSpaceElem, r::RootSpaceElem, q::RationalUnion)
@req root_system(rr) === root_system(r) "parent root system mismatch"
rr.vec = addmul!(rr.vec, r.vec, q)
return rr
end

function addmul!(rr::RootSpaceElem, q::RationalUnion, r::RootSpaceElem)
@req root_system(rr) === root_system(r) "parent root system mismatch"
rr.vec = addmul!(rr.vec, q, r.vec)
return rr
end

# ignore temp storage
addmul!(rr::RootSpaceElem, r::RootSpaceElem, q::RationalUnion, t) = addmul!(rr, r, q)
addmul!(rr::RootSpaceElem, q::RationalUnion, r::RootSpaceElem, t) = addmul!(rr, q, r)

function Base.:(==)(r::RootSpaceElem, r2::RootSpaceElem)
return r.root_system === r2.root_system && r.vec == r2.vec
end
Expand Down Expand Up @@ -1128,6 +1156,36 @@ function sub!(rr::DualRootSpaceElem, r1::DualRootSpaceElem, r2::DualRootSpaceEle
return rr
end

function mul!(rr::DualRootSpaceElem, r::DualRootSpaceElem, q::RationalUnion)
@req root_system(rr) === root_system(r) "parent root system mismatch"
rr.vec = mul!(rr.vec, r.vec, q)
return rr
end

function mul!(rr::DualRootSpaceElem, q::RationalUnion, r::DualRootSpaceElem)
@req root_system(rr) === root_system(r) "parent root system mismatch"
rr.vec = mul!(rr.vec, q, r.vec)
return rr
end

function addmul!(rr::DualRootSpaceElem, r::DualRootSpaceElem, q::RationalUnion)
@req root_system(rr) === root_system(r) "parent root system mismatch"
rr.vec = addmul!(rr.vec, r.vec, q)
return rr
end

function addmul!(rr::DualRootSpaceElem, q::RationalUnion, r::DualRootSpaceElem)
@req root_system(rr) === root_system(r) "parent root system mismatch"
rr.vec = addmul!(rr.vec, q, r.vec)
return rr
end

# ignore temp storage
addmul!(rr::DualRootSpaceElem, r::DualRootSpaceElem, q::RationalUnion, t) =
addmul!(rr, r, q)
addmul!(rr::DualRootSpaceElem, q::RationalUnion, r::DualRootSpaceElem, t) =
addmul!(rr, q, r)

function Base.:(==)(r::DualRootSpaceElem, r2::DualRootSpaceElem)
return r.root_system === r2.root_system && r.vec == r2.vec
end
Expand Down Expand Up @@ -1433,6 +1491,34 @@ function sub!(wr::WeightLatticeElem, w1::WeightLatticeElem, w2::WeightLatticeEle
return wr
end

function mul!(wr::WeightLatticeElem, w::WeightLatticeElem, n::IntegerUnion)
@req root_system(wr) === root_system(w) "parent root system mismatch"
wr.vec = mul!(wr.vec, w.vec, n)
return wr
end

function mul!(wr::WeightLatticeElem, n::IntegerUnion, w::WeightLatticeElem)
@req root_system(wr) === root_system(w) "parent root system mismatch"
wr.vec = mul!(wr.vec, n, w.vec)
return wr
end

function addmul!(wr::WeightLatticeElem, w::WeightLatticeElem, n::IntegerUnion)
@req root_system(wr) === root_system(w) "parent root system mismatch"
wr.vec = addmul!(wr.vec, w.vec, n)
return wr
end

function addmul!(wr::WeightLatticeElem, n::IntegerUnion, w::WeightLatticeElem)
@req root_system(wr) === root_system(w) "parent root system mismatch"
wr.vec = addmul!(wr.vec, n, w.vec)
return wr
end

# ignore temp storage
addmul!(wr::WeightLatticeElem, w::WeightLatticeElem, n::IntegerUnion, t) = addmul!(wr, w, n)
addmul!(wr::WeightLatticeElem, n::IntegerUnion, w::WeightLatticeElem, t) = addmul!(wr, n, w)

function Base.:(==)(w::WeightLatticeElem, w2::WeightLatticeElem)
return w.root_system === w2.root_system && w.vec == w2.vec
end
Expand Down
12 changes: 11 additions & 1 deletion experimental/LieAlgebras/test/RootSystem-test.jl
Original file line number Diff line number Diff line change
Expand Up @@ -147,14 +147,24 @@
for _ in 1:10
a = T(R, rand(-10:10, rk))
b = T(R, rand(-10:10, rk))
c = T(R, rand(-10:10, rk))
n = rand(-10:10)

test_mutating_op_like_zero(zero, zero!, a)

test_mutating_op_like_neg(-, neg!, a)

test_mutating_op_like_add(+, add!, a, b)
test_mutating_op_like_add(-, sub!, a, b)

test_mutating_op_like_add(*, mul!, a, n, T)
test_mutating_op_like_add(*, mul!, n, a, T)
test_mutating_op_like_add(*, mul!, a, ZZ(n), T)
test_mutating_op_like_add(*, mul!, ZZ(n), a, T)

test_mutating_op_like_addmul((a, b, c) -> a + b * c, addmul!, a, b, n, T)
test_mutating_op_like_addmul((a, b, c) -> a + b * c, addmul!, a, n, b, T)
test_mutating_op_like_addmul((a, b, c) -> a + b * c, addmul!, a, b, ZZ(n), T)
test_mutating_op_like_addmul((a, b, c) -> a + b * c, addmul!, a, ZZ(n), b, T)
end
end

Expand Down

0 comments on commit 53f2f0e

Please sign in to comment.