Skip to content

Commit c7d6f04

Browse files
committed
Merge "CliffordOpeartor improvements"
1 parent db6f804 commit c7d6f04

File tree

3 files changed

+12
-20
lines changed

3 files changed

+12
-20
lines changed

src/dense_cliffords.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ end
6363
CliffordOperator(op::CliffordOperator) = op
6464
CliffordOperator(paulis::AbstractVector{<:PauliOperator}) = CliffordOperator(Tableau(paulis))
6565
CliffordOperator(destab::Destabilizer) = CliffordOperator(tab(destab))
66+
function CliffordOperator(pauli::PauliOperator)
67+
res = one(CliffordOperator, nqubits(pauli))
68+
phases(res) .⊻= 0x02 .* comm(pauli, tab(res))
69+
return res
70+
end
6671

6772
Base.:(==)(l::CliffordOperator, r::CliffordOperator) = tab(l) == tab(r)
6873
Base.hash(c::T, h::UInt) where {T<:CliffordOperator} = hash(T, hash(tab(c), h))

test/test_apply_right.jl

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,6 @@
33
using QuantumClifford: AbstractCliffordOperator, CliffordOperator
44

55
test_sizes = [1,2,63,64,65,127,128,129,511,512,513]
6-
7-
function CliffordOperator(pauli::PauliOperator)
8-
n = nqubits(pauli)
9-
res = one(CliffordOperator, n)
10-
11-
for i in 1:2n
12-
if comm(pauli, tab(res), i) == 0x1
13-
phases(res)[i] ⊻= 0x02
14-
end
15-
end
16-
return res
17-
end
18-
19-
@testset "CliffordOperator constructor from PauliOperator" begin
20-
for n in test_sizes
21-
l = random_clifford(n)
22-
pauli = random_pauli(n)
23-
@test isequal(apply!(copy(l), pauli; phases=true), apply!(l, CliffordOperator(pauli); phases=true))
24-
end
25-
end
266

277
# SLOW version of apply_right! for testing
288
function apply_right_slow!(l::CliffordOperator, r::CliffordOperator; phases=true)

test/test_cliff.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@
2323
@testset "Constructors" begin
2424
@test_throws DimensionMismatch CliffordOperator(T"X")
2525
end
26+
@testset "Constructor from PauliOperator" begin
27+
for n in test_sizes
28+
l = random_clifford(n)
29+
pauli = random_pauli(n)
30+
@test isequal(apply!(copy(l), pauli; phases=true), apply!(l, CliffordOperator(pauli); phases=true))
31+
end
32+
end
2633
@testset "Permutations of qubits" begin
2734
for c in [tCNOT, tId1tHadamard, tCNOTtCNOT, tensor_pow(tCNOT,6), tensor_pow(tCNOT,7), tensor_pow(tCNOT,6)tPhase, tensor_pow(tCNOT,7)tPhase]
2835
for rep in 1:5

0 commit comments

Comments
 (0)