Skip to content

Commit 40eb7cb

Browse files
Create ModSub and CModSub (#1332)
1 parent dccd673 commit 40eb7cb

8 files changed

Lines changed: 539 additions & 73 deletions

File tree

dev_tools/autogenerate-bloqs-notebooks-v2.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,8 @@
505505
bloq_specs=[
506506
qualtran.bloqs.mod_arithmetic.mod_subtraction._MOD_NEG_DOC,
507507
qualtran.bloqs.mod_arithmetic.mod_subtraction._CMOD_NEG_DOC,
508+
qualtran.bloqs.mod_arithmetic.mod_subtraction._MOD_SUB_DOC,
509+
qualtran.bloqs.mod_arithmetic.mod_subtraction._CMOD_SUB_DOC,
508510
],
509511
),
510512
NotebookSpecV2(

qualtran/bloqs/factoring/ecc/ec_add.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919

2020
from qualtran import Bloq, bloq_example, BloqDocSpec, QUInt, Register, Signature
2121
from qualtran.bloqs.arithmetic._shims import MultiCToffoli
22-
from qualtran.bloqs.mod_arithmetic import CModAdd, CModNeg, ModAdd, ModNeg
23-
from qualtran.bloqs.mod_arithmetic._shims import CModSub, ModDbl, ModInv, ModMul, ModSub
22+
from qualtran.bloqs.mod_arithmetic import CModAdd, CModNeg, CModSub, ModAdd, ModNeg, ModSub
23+
from qualtran.bloqs.mod_arithmetic._shims import ModDbl, ModInv, ModMul
2424
from qualtran.resource_counting import BloqCountT, SympySymbolAllocator
2525

2626

@@ -70,8 +70,8 @@ def build_call_graph(self, ssa: 'SympySymbolAllocator') -> Set['BloqCountT']:
7070
(MultiCToffoli(n=self.n), 18),
7171
(ModAdd(bitsize=self.n, mod=self.mod), 3),
7272
(CModAdd(QUInt(self.n), mod=self.mod), 2),
73-
(ModSub(n=self.n, mod=self.mod), 2),
74-
(CModSub(n=self.n, mod=self.mod), 4),
73+
(ModSub(QUInt(self.n), mod=self.mod), 2),
74+
(CModSub(QUInt(self.n), mod=self.mod), 4),
7575
(ModNeg(QUInt(self.n), mod=self.mod), 2),
7676
(CModNeg(QUInt(self.n), mod=self.mod), 1),
7777
(ModDbl(n=self.n, mod=self.mod), 2),

qualtran/bloqs/mod_arithmetic/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
from ._shims import CModSub, ModDbl, ModInv, ModMul, ModSub
15+
from ._shims import ModDbl, ModInv, ModMul
1616
from .mod_addition import CModAdd, CModAddK, CtrlScaleModAdd, ModAdd, ModAddK
17-
from .mod_subtraction import CModNeg, ModNeg
17+
from .mod_subtraction import CModNeg, CModSub, ModNeg, ModSub

qualtran/bloqs/mod_arithmetic/_shims.py

Lines changed: 2 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -26,56 +26,17 @@
2626

2727
from attrs import frozen
2828

29-
from qualtran import Bloq, QBit, QUInt, Register, Signature
29+
from qualtran import Bloq, QUInt, Register, Signature
3030
from qualtran.bloqs.arithmetic import Add, AddK, Negate, Subtract
3131
from qualtran.bloqs.arithmetic._shims import CHalf, Lt, MultiCToffoli
3232
from qualtran.bloqs.basic_gates import CNOT, CSwap, Swap, Toffoli
33-
from qualtran.drawing import Circle, Text, TextBox, WireSymbol
33+
from qualtran.drawing import Text, TextBox, WireSymbol
3434
from qualtran.symbolics import ceil, log2
3535

3636
if TYPE_CHECKING:
3737
from qualtran.resource_counting import BloqCountT, SympySymbolAllocator
3838

3939

40-
@frozen
41-
class ModSub(Bloq):
42-
n: int
43-
mod: int
44-
45-
@cached_property
46-
def signature(self) -> 'Signature':
47-
return Signature([Register('x', QUInt(self.n)), Register('y', QUInt(self.n))])
48-
49-
50-
@frozen
51-
class CModSub(Bloq):
52-
n: int
53-
mod: int
54-
55-
@cached_property
56-
def signature(self) -> 'Signature':
57-
return Signature(
58-
[Register('ctrl', QBit()), Register('x', QUInt(self.n)), Register('y', QUInt(self.n))]
59-
)
60-
61-
def build_call_graph(self, ssa: 'SympySymbolAllocator') -> Set['BloqCountT']:
62-
# Roetteler
63-
return {(Toffoli(), ceil(16 * self.n * log2(self.n) - 23.8 * self.n))}
64-
65-
def wire_symbol(
66-
self, reg: Optional['Register'], idx: Tuple[int, ...] = tuple()
67-
) -> 'WireSymbol':
68-
if reg is None:
69-
return Text("")
70-
if reg.name == 'ctrl':
71-
return Circle()
72-
elif reg.name == 'x':
73-
return TextBox('x')
74-
elif reg.name == 'y':
75-
return TextBox('x-y')
76-
raise ValueError(f'Unrecognized register name {reg.name}')
77-
78-
7940
@frozen
8041
class _ModInvInner(Bloq):
8142
n: int

0 commit comments

Comments
 (0)