|
14 | 14 | from functools import cached_property
|
15 | 15 | from typing import Iterator, Optional, Tuple
|
16 | 16 |
|
| 17 | +import attrs |
17 | 18 | import cirq
|
18 | 19 | import numpy as np
|
19 | 20 | from attrs import frozen
|
20 | 21 | from numpy.typing import NDArray
|
21 | 22 |
|
22 |
| -from qualtran import BloqBuilder, BQUInt, QBit, Register, SoquetT |
23 |
| -from qualtran._infra.single_qubit_controlled import SpecializedSingleQubitControlledExtension |
| 23 | +from qualtran import AddControlledT, Bloq, BloqBuilder, BQUInt, CtrlSpec, QBit, Register, SoquetT |
24 | 24 | from qualtran.bloqs.block_encoding.lcu_block_encoding import SelectBlockEncoding
|
25 | 25 | from qualtran.bloqs.for_testing.matrix_gate import MatrixGate
|
26 | 26 | from qualtran.bloqs.multiplexers.select_base import SelectOracle
|
@@ -84,7 +84,7 @@ def alphas(self):
|
84 | 84 |
|
85 | 85 |
|
86 | 86 | @frozen
|
87 |
| -class TestPauliSelectOracle(SpecializedSingleQubitControlledExtension, SelectOracle): # type: ignore[misc] |
| 87 | +class TestPauliSelectOracle(SelectOracle): # type: ignore[misc] |
88 | 88 | r"""Paulis acting on $m$ qubits, controlled by an $n$-qubit register.
|
89 | 89 |
|
90 | 90 | Given $2^n$ multi-qubit-Paulis (acting on $m$ qubits) $U_j$,
|
@@ -149,6 +149,19 @@ def decompose_from_registers(
|
149 | 149 | op = op.controlled_by(*quregs['control'], control_values=[self.control_val])
|
150 | 150 | yield op
|
151 | 151 |
|
| 152 | + def get_ctrl_system(self, ctrl_spec: 'CtrlSpec') -> Tuple['Bloq', 'AddControlledT']: |
| 153 | + from qualtran.bloqs.mcmt.specialized_ctrl import get_ctrl_system_1bit_cv |
| 154 | + |
| 155 | + return get_ctrl_system_1bit_cv( |
| 156 | + self, |
| 157 | + ctrl_spec=ctrl_spec, |
| 158 | + current_ctrl_bit=self.control_val, |
| 159 | + get_ctrl_bloq_and_ctrl_reg_name=lambda cv: ( |
| 160 | + attrs.evolve(self, control_val=cv), |
| 161 | + 'control', |
| 162 | + ), |
| 163 | + ) |
| 164 | + |
152 | 165 |
|
153 | 166 | def random_qubitization_walk_operator(
|
154 | 167 | select_bitsize: int, target_bitsize: int, *, random_state: np.random.RandomState
|
|
0 commit comments