forked from QuantumSavory/QuantumClifford.jl
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Enhancements: fix QuantumSavory#405, new API, decoder testing for non…
…-abelian 2BGA, and misc polish
- Loading branch information
Showing
9 changed files
with
143 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
""" | ||
# Semidirect Product of Groups | ||
The semidirect product of groups `Gₘ ⋉ Gₙ` is supported, where `m` and `n` represent | ||
the orders of the groups `Gₘ` and `Gₙ`, respectively. This functionality enhances the | ||
capabilities of 2BGA codes, as the resulting group is used to construct the group | ||
algebra for these codes. | ||
# Example:`Cₘ ⋉ C₂` | ||
The non-abelian [[24, 8, 3]] 2BGA code is constructed from the dihedral group | ||
`Dₘ = Cₘ ⋉ C₂`, with an order of `l = 12` and a standard group presentation, as | ||
defined in Appendix C, Table III of [lin2024quantum](@cite). | ||
```jldoctest semidirectproduct | ||
julia> using Nemo: FqFieldElem # hide | ||
julia> using Hecke: group_algebra, GF, abelian_group, gens, quo, one, GroupAlgebra, GroupAlgebraElem # hide | ||
julia> using Oscar: small_group_identification, describe, order, FPGroupElem, FPGroup, FPGroupElem, semidirect_product, automorphism_group, hom, gen, cyclic_group, SemidirectProductGroup, PcGroup, BasicGAPGroupElem, normal_subgroup # hide | ||
julia> m = 6; | ||
julia> Cₘ = cyclic_group(m); | ||
julia> C₂ = cyclic_group(2); | ||
julia> A = automorphism_group(Cₘ); # Given dihedral group presentation, choose r -> r⁻¹ | ||
julia> au = A(hom(Cₘ,Cₘ,[Cₘ[1]],[Cₘ[1]^-1])); | ||
julia> f = hom(C₂,A,[C₂[1]],[au]); | ||
julia> G = semidirect_product(Cₘ,f,C₂); | ||
julia> GA = group_algebra(GF(2), G); | ||
julia> r, s = gens(GA)[2], gens(GA)[3]; | ||
julia> a = [one(r), r^4]; | ||
julia> b = [one(r), s*r^4, r^3, r^4, s*r^2, r]; | ||
julia> c = twobga_via_semidirect_product(a, b, GA); | ||
julia> order(G), describe(G) | ||
(12, "D12") | ||
julia> describe(normal_subgroup(G)), small_group_identification(G) | ||
("C6", (12, 4)) | ||
``` | ||
""" | ||
function twobga_via_semidirect_product(a_elts::Vector{GroupAlgebraElem{FqFieldElem, GroupAlgebra{FqFieldElem, SemidirectProductGroup{PcGroup, PcGroup}, BasicGAPGroupElem{SemidirectProductGroup{PcGroup, PcGroup}}}}}, b_elts::Vector{GroupAlgebraElem{FqFieldElem, GroupAlgebra{FqFieldElem, SemidirectProductGroup{PcGroup, PcGroup}, BasicGAPGroupElem{SemidirectProductGroup{PcGroup, PcGroup}}}}}, GA::GroupAlgebra{FqFieldElem, SemidirectProductGroup{PcGroup, PcGroup}, BasicGAPGroupElem{SemidirectProductGroup{PcGroup, PcGroup}}}) | ||
a = sum(GA(x) for x in a_elts) | ||
b = sum(GA(x) for x in b_elts) | ||
c = two_block_group_algebra_codes(a,b) | ||
return c | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
""" | ||
The `twobga_via_semidirect_product` method constructs the semidirect product `Gₘ ⋉ Gₙ` of groups, where `m` and `n` represent the order of each group, respectively. | ||
Implemented as a package extension with Oscar. Check the [QuantumClifford documentation](http://qc.quantumsavory.org/stable/ECC_API/) for more details on that extension. | ||
""" | ||
function twobga_via_semidirect_product(args...) | ||
ext = Base.get_extension(QuantumClifford, :QuantumCliffordOscarExt) | ||
if isnothing(ext) | ||
throw("The `twobga_via_semidirect_product` depends on the package `Oscar` but you have not installed or imported it yet. Immediately after you import `Oscar`, the `twobga_via_semidirect_product` will be available.") | ||
end | ||
return ext.twobga_via_semidirect_product(args...) | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters