Skip to content

Commit

Permalink
Adds the main transformer to do routing in Cirq (quantumlib#5838)
Browse files Browse the repository at this point in the history
* added abstract initial mapper and identity initial mapper

* added __str__ and __repr__ for MappingManager

* minor bug

* made MappingManager not serializable

* removed unused import

* pushed AbstractInitialMapping and IdentityInitialMapping name to 'cirq' namespace; made both classes not serializable

* minor lint fix

* addressed comments

* addressed comments

* fixed bug with edges not being sorted for graph equality testing

* fixed bug with digraphs repr method in MappingManager and added test for it

* addressed some comments

* added grid testing device

* added grid routing testing device

* formatting

* added line_initial_mapper and some tests; needs more testing

* formatting

* formatting

* changed interface for LineInitialMapper and added better tests; test for directed graph value equality remaining

* addressed comments and added ring device

* added test for supportin directed graphs

* changed interface for AbstractInitialMapper

* formatting

* changed RoutingTestingDevice interface; need to change is_isomorphic tests

* added hard-coded isomorphism tests

* fixed type issue

* removed redundant imports

* merged with routing testing device PR quantumlib#5830

* simplified _value_equalit_values_

* addressed comments

* removed unused import

* pasted routing files

* fixed nits

* cleaned up circuit transformer class; needs tests

* addressed comments

* formatting

* small fixes

* removed unused import

* modified test file

* debugging

* removed print statements

* debugging statement

* debugging statement

* fix

* fix

* print statement

* edges sorting

* addressed comments; ready for review

* fixed type bug

* cleanup

* wrote some tests

* ready for review

* type and lint fixes

* working for basic tests

* slightly modified _make_circuit_graph()

* added some tests

* added test for testing valid circuits and fixed bug in _make_circuit_graph()

* debugging currently

* made dict of dict storing pqubit distances into numpy integer numpy array

* made dict of dict storing pqubit distances into numpy integer numpy array

* used better cost function that sped up algorithm by a lot

* cleaned up a little and added coverage tests

* removed unitary testing code; will add it in next PR

* fixed lint and type issues

* small lint fix

* added unitary testing for routed circuits

* changed api to accept only a final mapping of a set of qubits to itself

* fixed typos

* fixed some docstrings, changed __call__ and route_circuit() order, and move a class function to free function

* added tests

* refactored _get_timesteps() as per suggestion

* more fixes

* changed construction of two and single qubit ops lists

* fixed bug from _get_two_qubit_ops and added unitary testing

* addressed comments and refactored _route() function

* minor cleanup

* addressed comments

* made helper functions class variable and passed mapping manager as function argument everywhere

* docstring and nomenclature changes

Co-authored-by: Tanuj Khattar <tanujkhattar@google.com>
  • Loading branch information
2 people authored and rht committed May 1, 2023
1 parent 6f74fea commit 496088a
Show file tree
Hide file tree
Showing 6 changed files with 653 additions and 2 deletions.
1 change: 1 addition & 0 deletions cirq-core/cirq/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,7 @@
parameterized_2q_op_to_sqrt_iswap_operations,
prepare_two_qubit_state_using_cz,
prepare_two_qubit_state_using_sqrt_iswap,
RouteCQC,
SqrtIswapTargetGateset,
single_qubit_matrix_to_gates,
single_qubit_matrix_to_pauli_rotations,
Expand Down
3 changes: 2 additions & 1 deletion cirq-core/cirq/protocols/json_test_data/spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,9 @@
'TransformerContext',
# Routing utilities
'HardCodedInitialMapper',
'MappingManager',
'LineInitialMapper',
'MappingManager',
'RouteCQC',
# global objects
'CONTROL_TAG',
'PAULI_BASIS',
Expand Down
2 changes: 1 addition & 1 deletion cirq-core/cirq/transformers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,12 @@
two_qubit_gate_product_tabulation,
)


from cirq.transformers.routing import (
AbstractInitialMapper,
HardCodedInitialMapper,
LineInitialMapper,
MappingManager,
RouteCQC,
)

from cirq.transformers.target_gatesets import (
Expand Down
1 change: 1 addition & 0 deletions cirq-core/cirq/transformers/routing/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@
from cirq.transformers.routing.initial_mapper import AbstractInitialMapper, HardCodedInitialMapper
from cirq.transformers.routing.mapping_manager import MappingManager
from cirq.transformers.routing.line_initial_mapper import LineInitialMapper
from cirq.transformers.routing.route_circuit_cqc import RouteCQC

0 comments on commit 496088a

Please sign in to comment.