|
17 | 17 | import cirq |
18 | 18 | import numpy as np |
19 | 19 | import pytest |
| 20 | +import sympy |
20 | 21 | from attrs import frozen |
21 | 22 |
|
22 | 23 | import qualtran |
|
34 | 35 | SoquetT, |
35 | 36 | ) |
36 | 37 | from qualtran._infra.gate_with_registers import get_named_qubits |
37 | | -from qualtran.bloqs.basic_gates import CNOT, GlobalPhase, OneState |
| 38 | +from qualtran.bloqs.basic_gates import CNOT, CZPowGate, GlobalPhase, OneState, YPowGate |
38 | 39 | from qualtran.bloqs.bookkeeping import Allocate, Free, Join, Split |
39 | 40 | from qualtran.bloqs.mcmt.and_bloq import And |
40 | 41 | from qualtran.cirq_interop import cirq_optree_to_cbloq, CirqGateAsBloq, CirqQuregT |
41 | 42 | from qualtran.cirq_interop.t_complexity_protocol import TComplexity |
| 43 | +from qualtran.resource_counting import GateCounts, get_cost_value, QECGatesCost |
42 | 44 |
|
43 | 45 |
|
44 | 46 | @frozen |
@@ -228,3 +230,16 @@ def test_cirq_gate_as_bloq_decompose_raises(): |
228 | 230 |
|
229 | 231 | def test_cirq_gate_as_bloq_diagram_info(): |
230 | 232 | assert cirq.circuit_diagram_info(GlobalPhase(exponent=0.5)) is None |
| 233 | + |
| 234 | + |
| 235 | +def test_cirq_gate_cost_via_decomp(): |
| 236 | + theta = sympy.Symbol("theta", real=True) |
| 237 | + cirq_swappow = cirq.SwapPowGate(exponent=theta) |
| 238 | + |
| 239 | + swappow_bloq = CirqGateAsBloq(cirq_swappow) |
| 240 | + |
| 241 | + _, sigma = swappow_bloq.call_graph() |
| 242 | + assert sigma == {CNOT(): 2, YPowGate(0.5): 1, YPowGate(-0.5): 1, CZPowGate(theta): 1} |
| 243 | + |
| 244 | + gc_swappow = get_cost_value(swappow_bloq, QECGatesCost()) |
| 245 | + assert gc_swappow == GateCounts(clifford=4, rotation=1) |
0 commit comments