Skip to content

Commit 8e223fa

Browse files
committed
Optimize MatrixGate translation using NumPy interleaving
Replaced an inefficient nested list comprehension with a NumPy-based approach for interleaving real and imaginary parts of unitary matrices. This avoids thousands of small list allocations and leverages NumPy's optimized slicing and flattening.
1 parent 3dee003 commit 8e223fa

1 file changed

Lines changed: 5 additions & 3 deletions

File tree

qsimcirq/qsim_circuit.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -306,9 +306,11 @@ def add_op_to_circuit(
306306
time, qsim_qubits, qsim_gate._diag_angles_radians, circuit
307307
)
308308
elif gate_kind == qsim.kMatrixGate:
309-
m = [
310-
val for i in list(cirq.unitary(qsim_gate).flat) for val in [i.real, i.imag]
311-
]
309+
unitary = cirq.unitary(qsim_gate)
310+
m = np.empty(unitary.size * 2, dtype=np.float64)
311+
m[0::2] = unitary.real.flat
312+
m[1::2] = unitary.imag.flat
313+
m = m.tolist()
312314
if isinstance(circuit, qsim.Circuit):
313315
qsim.add_matrix_gate(time, qsim_qubits, m, circuit)
314316
else:

0 commit comments

Comments
 (0)