Skip to content

Commit

Permalink
address comments
Browse files Browse the repository at this point in the history
  • Loading branch information
NoureldinYosri committed Oct 21, 2024
1 parent 7d45e33 commit 3ad9322
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 15 deletions.
27 changes: 17 additions & 10 deletions cirq-core/cirq/transformers/insertion_sort.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

"""Transformer that sorts commuting operations in increasing order of their `.qubits` tuple."""

from typing import Optional, TYPE_CHECKING, List
from typing import Optional, TYPE_CHECKING, List, Tuple

from cirq import protocols, circuits
from cirq.transformers import transformer_api
Expand All @@ -23,6 +23,10 @@
import cirq

Check warning on line 23 in cirq-core/cirq/transformers/insertion_sort.py

View check run for this annotation

Codecov / codecov/patch

cirq-core/cirq/transformers/insertion_sort.py#L23

Added line #L23 was not covered by tests


def _id(op: 'cirq.Operation') -> Tuple['cirq.Qid', ...]:
return tuple(sorted(op.qubits))


@transformer_api.transformer(add_deep_support=True)
def insertion_sort_transformer(
circuit: 'cirq.AbstractCircuit', *, context: Optional['cirq.TransformerContext'] = None
Expand All @@ -35,15 +39,18 @@ def insertion_sort_transformer(
circuit: input circuit.
context: optional TransformerContext (not used),
"""
final_operations: List['cirq.Operation'] = []
sorted_operations: List['cirq.Operation'] = []
for op in circuit.all_operations():
st = []
sorted_operations.append(op)
j = len(sorted_operations) - 1
while (
len(final_operations)
and op.qubits < final_operations[-1].qubits
and protocols.commutes(final_operations[-1], op, default=False)
j
and _id(sorted_operations[j]) < _id(sorted_operations[j - 1])
and protocols.commutes(sorted_operations[j], sorted_operations[j - 1], default=False)
):
st.append(final_operations.pop())
final_operations.append(op)
final_operations.extend(st[::-1])
return circuits.Circuit(final_operations)
sorted_operations[j], sorted_operations[j - 1] = (
sorted_operations[j - 1],
sorted_operations[j],
)
j -= 1
return circuits.Circuit(sorted_operations)
4 changes: 2 additions & 2 deletions cirq-core/cirq/transformers/insertion_sort_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ def test_insertion_sort():
cirq.CZ(cirq.q(0), cirq.q(1)),
cirq.CZ(cirq.q(2), cirq.q(1)),
)
got = cirq.transformers.insertion_sort_transformer(c)
assert got == cirq.Circuit(
sorted_circuit = cirq.transformers.insertion_sort_transformer(c)
assert sorted_circuit == cirq.Circuit(
cirq.CZ(cirq.q(0), cirq.q(1)),
cirq.CZ(cirq.q(2), cirq.q(1)),
cirq.CZ(cirq.q(2), cirq.q(1)),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,15 +156,15 @@ def _intermediate_result_tag(self) -> Hashable:
@property
def preprocess_transformers(self) -> List['cirq.TRANSFORMER']:
"""List of transformers which should be run before decomposing individual operations."""
rorder_transfomers = (
reorder_transfomers = (
[transformers.insertion_sort_transformer] if self._reorder_operations else []
)
return [
create_transformer_with_kwargs(
transformers.expand_composite,
no_decomp=lambda op: protocols.num_qubits(op) <= self.num_qubits,
),
*rorder_transfomers,
*reorder_transfomers,
create_transformer_with_kwargs(
merge_k_qubit_gates.merge_k_qubit_unitaries,
k=self.num_qubits,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -334,5 +334,7 @@ def test_with_commutation():


def test_reorder_operations_and_preserve_moment_structure_raises():
with pytest.raises(ValueError, match='True'):
with pytest.raises(
ValueError, match='reorder_operations and preserve_moment_structure can not both be True'
):
_ = cirq.CZTargetGateset(preserve_moment_structure=True, reorder_operations=True)

0 comments on commit 3ad9322

Please sign in to comment.