Skip to content

Commit

Permalink
simplify ctrl sys for CZ, CY
Browse files Browse the repository at this point in the history
  • Loading branch information
anurudhp committed Nov 2, 2024
1 parent db66528 commit a4d160c
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 48 deletions.
29 changes: 4 additions & 25 deletions qualtran/bloqs/basic_gates/y_gate.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
# limitations under the License.

from functools import cached_property
from typing import cast, Dict, Iterable, List, Optional, Sequence, Tuple, TYPE_CHECKING, Union
from typing import Dict, Iterable, List, Optional, Sequence, Tuple, TYPE_CHECKING, Union

import numpy as np
from attrs import frozen
Expand All @@ -30,7 +30,6 @@
DecomposeTypeError,
Register,
Signature,
Soquet,
SoquetT,
)
from qualtran.drawing import Circle, Text, TextBox, WireSymbol
Expand Down Expand Up @@ -175,32 +174,12 @@ def wire_symbol(
raise ValueError(f"Unknown register {reg}.")

def get_ctrl_system(self, ctrl_spec: 'CtrlSpec') -> Tuple['Bloq', 'AddControlledT']:
from qualtran.bloqs.mcmt.specialized_ctrl import _MultiControlledFromSinglyControlled
from qualtran.bloqs.mcmt.specialized_ctrl import get_ctrl_system_1bit_cv_from_bloqs

if ctrl_spec != CtrlSpec():
return super().get_ctrl_system(ctrl_spec)

# controlled-CY
ctrl_cy = _MultiControlledFromSinglyControlled(
cvs=(1, 1), ctrl_bloq=self, ctrl_reg_name='ctrl'
return get_ctrl_system_1bit_cv_from_bloqs(
self, ctrl_spec, current_ctrl_bit=1, bloq_with_ctrl=self, ctrl_reg_name='ctrl'
)

def _adder(
bb: 'BloqBuilder', ctrl_soqs: Sequence['SoquetT'], in_soqs: dict[str, 'SoquetT']
) -> Tuple[Iterable['SoquetT'], Iterable['SoquetT']]:
(ctrl1,) = ctrl_soqs
ctrl2 = in_soqs.pop('ctrl')
target = in_soqs.pop('target')

ctrl1 = cast(Soquet, ctrl1)
ctrl2 = cast(Soquet, ctrl2)

[ctrl1, ctrl2], target = bb.add(ctrl_cy, ctrl=[ctrl1, ctrl2], target=target)

return [ctrl1], [ctrl2, target]

return ctrl_cy, _adder


@bloq_example
def _cy_gate() -> CYGate:
Expand Down
26 changes: 3 additions & 23 deletions qualtran/bloqs/basic_gates/z_basis.py
Original file line number Diff line number Diff line change
Expand Up @@ -341,32 +341,12 @@ def wire_symbol(self, reg: Optional[Register], idx: Tuple[int, ...] = tuple()) -
raise ValueError(f'Unknown wire symbol register name: {reg.name}')

def get_ctrl_system(self, ctrl_spec: 'CtrlSpec') -> Tuple['Bloq', 'AddControlledT']:
from qualtran.bloqs.mcmt.specialized_ctrl import _MultiControlledFromSinglyControlled
from qualtran.bloqs.mcmt.specialized_ctrl import get_ctrl_system_1bit_cv_from_bloqs

if ctrl_spec != CtrlSpec():
return super().get_ctrl_system(ctrl_spec)

# controlled-CZ
ctrl_cz = _MultiControlledFromSinglyControlled(
cvs=(1, 1), ctrl_bloq=self, ctrl_reg_name='q1'
return get_ctrl_system_1bit_cv_from_bloqs(
self, ctrl_spec, current_ctrl_bit=1, bloq_with_ctrl=self, ctrl_reg_name='q1'
)

def _adder(
bb: 'BloqBuilder', ctrl_soqs: Sequence['SoquetT'], in_soqs: dict[str, 'SoquetT']
) -> Tuple[Iterable['SoquetT'], Iterable['SoquetT']]:
(ctrl,) = ctrl_soqs
q1 = in_soqs.pop('q1')
q2 = in_soqs.pop('q2')

ctrl = cast(Soquet, ctrl)
q1 = cast(Soquet, q1)

[ctrl, q1], q2 = bb.add(ctrl_cz, q1=[ctrl, q1], q2=q2)

return [ctrl], [q1, q2]

return ctrl_cz, _adder


@bloq_example
def _cz() -> CZ:
Expand Down

0 comments on commit a4d160c

Please sign in to comment.