@@ -1035,6 +1035,7 @@ def test_non_pauli_sum_has_no_unitary(psum):
1035
1035
(cirq .Z (q1 ), (q1 ,)),
1036
1036
(cirq .X (q0 ) + cirq .Y (q0 ), (q0 ,)),
1037
1037
(cirq .X (q0 ) + cirq .Y (q2 ), (q0 , q2 )),
1038
+ (cirq .X (q2 ) + cirq .Y (q0 ), (q0 , q2 )),
1038
1039
(cirq .X (q0 ) * cirq .Y (q1 ) + cirq .Y (q1 ) * cirq .Z (q3 ), (q0 , q1 , q3 )),
1039
1040
),
1040
1041
)
@@ -1189,6 +1190,35 @@ def test_pauli_sum_formatting():
1189
1190
assert str (empty ) == "0.000"
1190
1191
1191
1192
1193
+ def test_pauli_sum_matrix ():
1194
+ q = cirq .LineQubit .range (3 )
1195
+ paulisum = cirq .X (q [0 ]) * cirq .X (q [1 ]) + cirq .Z (q [0 ])
1196
+ H1 = np .array (
1197
+ [[1.0 , 0.0 , 0.0 , 1.0 ], [0.0 , 1.0 , 1.0 , 0.0 ], [0.0 , 1.0 , - 1.0 , 0.0 ], [1.0 , 0.0 , 0.0 , - 1.0 ]]
1198
+ )
1199
+ assert np .allclose (H1 , paulisum .matrix ())
1200
+ assert np .allclose (H1 , paulisum .matrix ([q [0 ], q [1 ]]))
1201
+ # Expects a different matrix when change qubits order.
1202
+ H2 = np .array (
1203
+ [[1.0 , 0.0 , 0.0 , 1.0 ], [0.0 , - 1.0 , 1.0 , 0.0 ], [0.0 , 1.0 , 1.0 , 0.0 ], [1.0 , 0.0 , 0.0 , - 1.0 ]]
1204
+ )
1205
+ assert np .allclose (H2 , paulisum .matrix ([q [1 ], q [0 ]]))
1206
+ # Expects matrix with a different size when add a new qubit.
1207
+ H3 = np .array (
1208
+ [
1209
+ [1.0 , 0.0 , 0.0 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0 ],
1210
+ [0.0 , - 1.0 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0 , 0.0 ],
1211
+ [0.0 , 0.0 , 1.0 , 0.0 , 0.0 , 0.0 , 0.0 , 1.0 ],
1212
+ [0.0 , 0.0 , 0.0 , - 1.0 , 0.0 , 0.0 , 1.0 , 0.0 ],
1213
+ [0.0 , 1.0 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0 , 0.0 ],
1214
+ [1.0 , 0.0 , 0.0 , 0.0 , 0.0 , - 1.0 , 0.0 , 0.0 ],
1215
+ [0.0 , 0.0 , 0.0 , 1.0 , 0.0 , 0.0 , 1.0 , 0.0 ],
1216
+ [0.0 , 0.0 , 1.0 , 0.0 , 0.0 , 0.0 , 0.0 , - 1.0 ],
1217
+ ]
1218
+ )
1219
+ assert np .allclose (H3 , paulisum .matrix ([q [1 ], q [2 ], q [0 ]]))
1220
+
1221
+
1192
1222
def test_pauli_sum_repr ():
1193
1223
q = cirq .LineQubit .range (2 )
1194
1224
pstr1 = cirq .X (q [0 ]) * cirq .X (q [1 ])
0 commit comments