@@ -7,23 +7,12 @@ function apply_right!(l::CliffordOperator, r::AbstractCliffordOperator; phases=t
77end
88
99# helper
10- function mul_right_log_i ! (l:: PauliOperator , r:: PauliOperator )
10+ function mul_right_ignore_anticommute ! (l:: PauliOperator , r:: PauliOperator )
1111 x = mul_right! (l, r; phases= Val (true ))
1212 x. phase[] = x. phase[] & 0x02
1313 return x
1414end
1515
16- # new symbolics
17- """ A \" symbolic\" single-qubit SQRTZ. See also : [`SingleQubitOperator`](@ref), [`AbstractSymbolicOperator`](@ref)"""
18- struct sSQRTZ <: AbstractSingleQubitOperator
19- q:: Int
20- sSQRTZ (q) = if q< 0 throw (NoZeroQubit) else new (q) end
21- end
22- """ A \" symbolic\" single-qubit InvSQRTZ. See also : [`SingleQubitOperator`](@ref), [`AbstractSymbolicOperator`](@ref)"""
23- struct sInvSQRTZ <: AbstractSingleQubitOperator
24- q:: Int
25- sInvSQRTZ (q) = if q< 0 throw (NoZeroQubit) else new (q) end
26- end
2716
2817# #############################
2918# Single-qubit gates
@@ -35,25 +24,25 @@ function apply_right!(l::CliffordOperator, r::sHadamard)
3524end
3625
3726function apply_right! (l:: CliffordOperator , r:: sHadamardXY )
38- l[r. q] = mul_right_log_i ! (l[r. q], l[nqubits (l)+ r. q])
27+ l[r. q] = mul_right_ignore_anticommute ! (l[r. q], l[nqubits (l)+ r. q])
3928 apply_right! (l, sY (r. q))
4029 return l
4130end
4231
4332function apply_right! (l:: CliffordOperator , r:: sHadamardYZ )
44- l[nqubits (l)+ r. q] = mul_right_log_i ! (l[nqubits (l)+ r. q], l[r. q])
33+ l[nqubits (l)+ r. q] = mul_right_ignore_anticommute ! (l[nqubits (l)+ r. q], l[r. q])
4534 apply_right! (l, sZ (r. q))
4635 return l
4736end
4837
4938function apply_right! (l:: CliffordOperator , r:: sPhase )
50- l[r. q] = mul_right_log_i ! (l[r. q], l[nqubits (l)+ r. q])
39+ l[r. q] = mul_right_ignore_anticommute ! (l[r. q], l[nqubits (l)+ r. q])
5140 apply_right! (l, sZ (r. q))
5241 return l
5342end
5443
5544function apply_right! (l:: CliffordOperator , r:: sInvPhase )
56- l[r. q] = mul_right_log_i ! (l[r. q], l[nqubits (l)+ r. q])
45+ l[r. q] = mul_right_ignore_anticommute ! (l[r. q], l[nqubits (l)+ r. q])
5746 return l
5847end
5948
@@ -80,7 +69,7 @@ function apply_right!(l::CliffordOperator, r::sSQRTX)
8069end
8170
8271function apply_right! (l:: CliffordOperator , r:: sInvSQRTX )
83- l[nqubits (l)+ r. q] = mul_right_log_i ! (l[nqubits (l)+ r. q], l[r. q])
72+ l[nqubits (l)+ r. q] = mul_right_ignore_anticommute ! (l[nqubits (l)+ r. q], l[r. q])
8473 return l
8574end
8675
@@ -96,26 +85,26 @@ function apply_right!(l::CliffordOperator, r::sInvSQRTY)
9685 return l
9786end
9887
99- function apply_right! (l:: CliffordOperator , r:: sSQRTZ )
100- apply_right! (l, sInvSQRTZ (r. q))
88+ function apply_right! (l:: CliffordOperator , r:: sPhase )
89+ apply_right! (l, sInvPhase (r. q))
10190 apply_right! (l, sZ (r. q))
10291 return l
10392end
10493
105- function apply_right! (l:: CliffordOperator , r:: sInvSQRTZ )
106- l[r. q] = mul_right_log_i ! (l[r. q], l[nqubits (l)+ r. q])
94+ function apply_right! (l:: CliffordOperator , r:: sInvPhase )
95+ l[r. q] = mul_right_ignore_anticommute ! (l[r. q], l[nqubits (l)+ r. q])
10796 return l
10897end
10998
11099function apply_right! (l:: CliffordOperator , r:: sCXYZ )
111100 rowswap! (tab (l), r. q, nqubits (l)+ r. q)
112- l[r. q] = mul_right_log_i ! (l[r. q], l[nqubits (l)+ r. q])
101+ l[r. q] = mul_right_ignore_anticommute ! (l[r. q], l[nqubits (l)+ r. q])
113102 return l
114103end
115104
116105function apply_right! (l:: CliffordOperator , r:: sCZYX )
117106 rowswap! (tab (l), r. q, nqubits (l)+ r. q)
118- l[nqubits (l)+ r. q] = mul_right_log_i ! (l[nqubits (l)+ r. q], l[r. q])
107+ l[nqubits (l)+ r. q] = mul_right_ignore_anticommute ! (l[nqubits (l)+ r. q], l[r. q])
119108 apply_right! (l, sX (r. q))
120109 return l
121110end
@@ -147,16 +136,16 @@ end
147136function apply_right! (l:: CliffordOperator , r:: sISWAP )
148137 apply_right! (l, sSWAP (r. q1, r. q2))
149138 apply_right! (l, sZCZ (r. q1, r. q2))
150- apply_right! (l, sSQRTZ (r. q1))
151- apply_right! (l, sSQRTZ (r. q2))
139+ apply_right! (l, sPhase (r. q1))
140+ apply_right! (l, sPhase (r. q2))
152141 return l
153142end
154143
155144function apply_right! (l:: CliffordOperator , r:: sInvISWAP )
156145 apply_right! (l, sSWAP (r. q1, r. q2))
157146 apply_right! (l, sZCZ (r. q1, r. q2))
158- apply_right! (l, sInvSQRTZ (r. q1))
159- apply_right! (l, sInvSQRTZ (r. q2))
147+ apply_right! (l, sInvPhase (r. q1))
148+ apply_right! (l, sInvPhase (r. q2))
160149 return l
161150end
162151
@@ -245,10 +234,10 @@ function apply_right!(l::CliffordOperator, r::sSQRTZZ)
245234end
246235
247236function apply_right! (l:: CliffordOperator , r:: sInvSQRTZZ )
248- l[r. q1] = mul_right_log_i ! (l[r. q1], l[nqubits (l)+ r. q1])
249- l[r. q1] = mul_right_log_i ! (l[r. q1], l[nqubits (l)+ r. q2])
250- l[r. q2] = mul_right_log_i ! (l[r. q2], l[nqubits (l)+ r. q1])
251- l[r. q2] = mul_right_log_i ! (l[r. q2], l[nqubits (l)+ r. q2])
237+ l[r. q1] = mul_right_ignore_anticommute ! (l[r. q1], l[nqubits (l)+ r. q1])
238+ l[r. q1] = mul_right_ignore_anticommute ! (l[r. q1], l[nqubits (l)+ r. q2])
239+ l[r. q2] = mul_right_ignore_anticommute ! (l[r. q2], l[nqubits (l)+ r. q1])
240+ l[r. q2] = mul_right_ignore_anticommute ! (l[r. q2], l[nqubits (l)+ r. q2])
252241 return l
253242end
254243
@@ -260,10 +249,10 @@ function apply_right!(l::CliffordOperator, r::sSQRTXX)
260249end
261250
262251function apply_right! (l:: CliffordOperator , r:: sInvSQRTXX )
263- l[nqubits (l)+ r. q1] = mul_right_log_i ! (l[nqubits (l)+ r. q1], l[r. q1])
264- l[nqubits (l)+ r. q1] = mul_right_log_i ! (l[nqubits (l)+ r. q1], l[r. q2])
265- l[nqubits (l)+ r. q2] = mul_right_log_i ! (l[nqubits (l)+ r. q2], l[r. q1])
266- l[nqubits (l)+ r. q2] = mul_right_log_i ! (l[nqubits (l)+ r. q2], l[r. q2])
252+ l[nqubits (l)+ r. q1] = mul_right_ignore_anticommute ! (l[nqubits (l)+ r. q1], l[r. q1])
253+ l[nqubits (l)+ r. q1] = mul_right_ignore_anticommute ! (l[nqubits (l)+ r. q1], l[r. q2])
254+ l[nqubits (l)+ r. q2] = mul_right_ignore_anticommute ! (l[nqubits (l)+ r. q2], l[r. q1])
255+ l[nqubits (l)+ r. q2] = mul_right_ignore_anticommute ! (l[nqubits (l)+ r. q2], l[r. q2])
267256 return l
268257end
269258
@@ -275,12 +264,12 @@ function apply_right!(l::CliffordOperator, r::sSQRTYY)
275264end
276265
277266function apply_right! (l:: CliffordOperator , r:: sInvSQRTYY )
278- l[r. q1] = mul_right_log_i ! (l[r. q1], l[nqubits (l)+ r. q1])
279- l[nqubits (l)+ r. q1] = mul_right_log_i ! (l[nqubits (l)+ r. q1], l[nqubits (l)+ r. q2])
280- l[nqubits (l)+ r. q1] = mul_right_log_i ! (l[nqubits (l)+ r. q1], l[r. q2])
281- l[r. q2] = mul_right_log_i ! (l[r. q2], l[r. q1])
282- l[nqubits (l)+ r. q2] = mul_right_log_i ! (l[nqubits (l)+ r. q2], l[r. q1])
283- l[r. q1] = mul_right_log_i ! (l[r. q1], l[nqubits (l)+ r. q1])
267+ l[r. q1] = mul_right_ignore_anticommute ! (l[r. q1], l[nqubits (l)+ r. q1])
268+ l[nqubits (l)+ r. q1] = mul_right_ignore_anticommute ! (l[nqubits (l)+ r. q1], l[nqubits (l)+ r. q2])
269+ l[nqubits (l)+ r. q1] = mul_right_ignore_anticommute ! (l[nqubits (l)+ r. q1], l[r. q2])
270+ l[r. q2] = mul_right_ignore_anticommute ! (l[r. q2], l[r. q1])
271+ l[nqubits (l)+ r. q2] = mul_right_ignore_anticommute ! (l[nqubits (l)+ r. q2], l[r. q1])
272+ l[r. q1] = mul_right_ignore_anticommute ! (l[r. q1], l[nqubits (l)+ r. q1])
284273 rowswap! (tab (l), r. q1, nqubits (l)+ r. q1)
285274 rowswap! (tab (l), r. q2, nqubits (l)+ r. q2)
286275 apply_right! (l, sZ (r. q2))
0 commit comments