From 3ac1bf2bc3030a84487e0a199c01dc8a3f4115ae Mon Sep 17 00:00:00 2001 From: Stefan Krastanov Date: Sat, 11 Jun 2022 15:37:25 -0400 Subject: [PATCH] Fix typo in `enumerate_cliffords` and add tests Fixes #60 Signed-off-by: Stefan Krastanov --- CHANGELOG.md | 4 ++++ Project.toml | 2 +- src/enumeration.jl | 6 +++--- test/runtests.jl | 1 + test/test_enumerate.jl | 11 +++++++++++ 5 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 test/test_enumerate.jl diff --git a/CHANGELOG.md b/CHANGELOG.md index 28ae53be0..8276f7ae6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # News +## v0.5.3 - 2022-06-11 + +- **(fix `#60`)** `enumerate_clifford` was broken due to an earlier refactor in `rowswap!` + ## v0.5.2 - Implement the clipped gauge canonicalization `canonicalize_clip!` and related functions. diff --git a/Project.toml b/Project.toml index 08528d8f6..d1e23de0c 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "QuantumClifford" uuid = "0525e862-1e90-11e9-3e4d-1b39d7109de1" authors = ["Stefan Krastanov "] -version = "0.5.2" +version = "0.5.3" [deps] Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" diff --git a/src/enumeration.jl b/src/enumeration.jl index 75dc4642e..de770745a 100644 --- a/src/enumeration.jl +++ b/src/enumeration.jl @@ -60,7 +60,7 @@ end comm(basis, δn+start, i)==0x1 && return i end # the following hapens only if the input is P"X___..." - rowswap!(basis, δn+start, 2padded_n+1) + rowswap!(basis, δn+start, 2padded_n+1; phases=Val(false)) _findanticommGS(basis, start, n, padded_n, δn) end @@ -104,7 +104,7 @@ function symplecticGS(pauli::PauliOperator; padded_n=nqubits(pauli)) doneupto = 1 while doneupto <= n i = _findanticommGS(basis, doneupto, n, padded_n, δn) - rowswap!(basis, padded_n+δn+doneupto, i; phases=false) + rowswap!(basis, padded_n+δn+doneupto, i; phases=Val(false)) _eliminateGS(basis, doneupto, n, padded_n, δn) doneupto += 1 end @@ -196,4 +196,4 @@ julia> length(collect(enumerate_phases(enumerate_cliffords(2)))) See also: [`enumerate_cliffords`](@ref), [`clifford_cardinality`](@ref).""" function enumerate_phases(ops::Union{AbstractVector,Base.Generator}) Iterators.flatten(Iterators.map(enumerate_phases, ops)) -end \ No newline at end of file +end diff --git a/test/runtests.jl b/test/runtests.jl index 248c0d250..9c865705c 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -46,6 +46,7 @@ doset("bitpack") && include("./test_bitpack.jl") doset("graphs") && include("./test_graphs.jl") doset("hash") && include("./test_hash.jl") doset("entanglement") && include("./test_entanglement.jl") +doset("enumeration") && include("./test_enumerate.jl") doset("doctests") && include("./doctests.jl") using Aqua diff --git a/test/test_enumerate.jl b/test/test_enumerate.jl new file mode 100644 index 000000000..d0ac5044c --- /dev/null +++ b/test/test_enumerate.jl @@ -0,0 +1,11 @@ +function test_enumeration() + @testset "Enumeration" begin + @test Set([copy(op) for op in enumerate_cliffords(1)]) == Set((random_clifford(1,phases=false) for i in 1:70)) + @test Set([copy(op) for op in enumerate_phases(enumerate_cliffords(1))]) == Set((random_clifford(1,phases=true) for i in 1:300)) + @test length(collect(enumerate_cliffords(2))) == length(collect(enumerate_phases(enumerate_cliffords(2))))/2^4 == 720 + @test first(enumerate_cliffords(3)) == C"X__ __Z _Z_ Z__ __X _X_" + @test first(enumerate_cliffords(5)) == C"X____ ____Z ___Z_ __Z__ _Z___ Z____ ____X ___X_ __X__ _X___" + end +end + +test_enumeration()