|
32 | 32 |
|
33 | 33 | from qiskit_braket_provider.exception import QiskitBraketException |
34 | 34 |
|
| 35 | +_GPHASE_GATE_NAME = "global_phase" |
| 36 | + |
35 | 37 | _BRAKET_TO_QISKIT_NAMES = { |
36 | 38 | "u": "u", |
37 | 39 | "phaseshift": "p", |
|
63 | 65 | "gpi": "gpi", |
64 | 66 | "gpi2": "gpi2", |
65 | 67 | "ms": "ms", |
| 68 | + "gphase": _GPHASE_GATE_NAME, |
66 | 69 | } |
67 | 70 |
|
68 | 71 | _CONTROLLED_GATES_BY_QUBIT_COUNT = { |
|
108 | 111 | "ecr": lambda: [braket_gates.ECR()], |
109 | 112 | "iswap": lambda: [braket_gates.ISwap()], |
110 | 113 | # IonQ gates |
111 | | - "gpi": lambda angle: [braket_gates.GPi(2 * pi * angle)], |
112 | | - "gpi2": lambda angle: [braket_gates.GPi2(2 * pi * angle)], |
113 | | - "ms": lambda angle_1, angle_2, angle_3: [ |
114 | | - braket_gates.MS(2 * pi * angle_1, 2 * pi * angle_2, 2 * pi * angle_3) |
| 114 | + "gpi": lambda turns: [braket_gates.GPi(2 * pi * turns)], |
| 115 | + "gpi2": lambda turns: [braket_gates.GPi2(2 * pi * turns)], |
| 116 | + "ms": lambda turns_1, turns_2, turns_3: [ |
| 117 | + braket_gates.MS(2 * pi * turns_1, 2 * pi * turns_2, 2 * pi * turns_3) |
115 | 118 | ], |
116 | 119 | "zz": lambda angle: [braket_gates.ZZ(2 * pi * angle)], |
| 120 | + # Global phase |
| 121 | + _GPHASE_GATE_NAME: lambda phase: [braket_gates.GPhase(phase)], |
117 | 122 | } |
118 | 123 |
|
119 | 124 | _QISKIT_CONTROLLED_GATE_NAMES_TO_BRAKET_GATES: dict[str, Callable] = { |
|
174 | 179 | Parameter("phi1") / (2 * pi), |
175 | 180 | Parameter("theta") / (2 * pi), |
176 | 181 | ), |
| 182 | + "gphase": qiskit_gates.GlobalPhaseGate(Parameter("theta")), |
177 | 183 | } |
178 | 184 |
|
179 | 185 |
|
@@ -398,10 +404,11 @@ def to_braket( |
398 | 404 | Returns: |
399 | 405 | Circuit: Braket circuit |
400 | 406 | """ |
401 | | - basis_gates = basis_gates or _TRANSLATABLE_QISKIT_GATE_NAMES |
402 | 407 | if not isinstance(circuit, QuantumCircuit): |
403 | 408 | raise TypeError(f"Expected a QuantumCircuit, got {type(circuit)} instead.") |
404 | 409 |
|
| 410 | + basis_gates = set(basis_gates or _TRANSLATABLE_QISKIT_GATE_NAMES) |
| 411 | + |
405 | 412 | braket_circuit = Circuit() |
406 | 413 | if not verbatim and not {gate.name for gate, _, _ in circuit.data}.issubset( |
407 | 414 | basis_gates |
@@ -460,8 +467,15 @@ def to_braket( |
460 | 467 | target=qubit_indices, |
461 | 468 | ) |
462 | 469 |
|
463 | | - if circuit.global_phase > _EPS: |
464 | | - braket_circuit.gphase(circuit.global_phase) |
| 470 | + global_phase = circuit.global_phase |
| 471 | + if abs(global_phase) > _EPS: |
| 472 | + if _GPHASE_GATE_NAME in basis_gates: |
| 473 | + braket_circuit.gphase(global_phase) |
| 474 | + else: |
| 475 | + warnings.warn( |
| 476 | + f"Device does not support global phase; " |
| 477 | + f"global phase of {global_phase} will not be included in Braket circuit" |
| 478 | + ) |
465 | 479 |
|
466 | 480 | if verbatim: |
467 | 481 | return Circuit(braket_circuit.result_types).add_verbatim_box( |
|
0 commit comments