Skip to content

Commit d250938

Browse files
committed
Decompose Type Error
1 parent 0338e4d commit d250938

File tree

5 files changed

+23
-3
lines changed

5 files changed

+23
-3
lines changed

qualtran/bloqs/arithmetic/comparison.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,6 +1087,8 @@ def build_composite_bloq(
10871087
a = bb.add(SignExtend(self.dtype, QInt(self.dtype.bitsize + 1)), x=a)
10881088
b = bb.add(SignExtend(self.dtype, QInt(self.dtype.bitsize + 1)), x=b)
10891089
else:
1090+
if self.dtype.is_symbolic():
1091+
raise DecomposeTypeError(f"Cannot decompose symbolic {self}")
10901092
a = bb.join(np.concatenate([[bb.allocate(1)], bb.split(a)]))
10911093
b = bb.join(np.concatenate([[bb.allocate(1)], bb.split(b)]))
10921094

qualtran/bloqs/arithmetic/controlled_addition.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
bloq_example,
2424
BloqBuilder,
2525
BloqDocSpec,
26+
DecomposeTypeError,
2627
QBit,
2728
QInt,
2829
QUInt,
@@ -135,6 +136,9 @@ def wire_symbol(self, soq: 'Soquet') -> 'WireSymbol':
135136
def build_composite_bloq(
136137
self, bb: 'BloqBuilder', ctrl: 'Soquet', a: 'Soquet', b: 'Soquet'
137138
) -> Dict[str, 'SoquetT']:
139+
if self.a_dtype.is_symbolic() or self.b_dtype.is_symbolic():
140+
raise DecomposeTypeError(f"Cannot support symbolic {self}")
141+
138142
a_arr = bb.split(a)
139143
ctrl_q = bb.split(ctrl)[0]
140144
ancilla_arr = []

qualtran/bloqs/data_loading/select_swap_qrom.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,15 @@
2222
import sympy
2323
from numpy.typing import ArrayLike
2424

25-
from qualtran import bloq_example, BloqDocSpec, BoundedQUInt, GateWithRegisters, Register, Signature
25+
from qualtran import (
26+
bloq_example,
27+
BloqDocSpec,
28+
BoundedQUInt,
29+
DecomposeTypeError,
30+
GateWithRegisters,
31+
Register,
32+
Signature,
33+
)
2634
from qualtran.bloqs.arithmetic.bitwise import Xor
2735
from qualtran.bloqs.bookkeeping import Partition
2836
from qualtran.bloqs.data_loading.qrom import QROM
@@ -394,7 +402,7 @@ def build_composite_bloq(self, bb: 'BloqBuilder', **soqs: 'SoquetT') -> Dict[str
394402
target = [soqs.pop(reg.name) for reg in self.target_registers]
395403
# Allocate intermediate clean/dirty ancilla for the underlying QROM call.
396404
if is_symbolic(*self.block_sizes):
397-
raise ValueError(
405+
raise DecomposeTypeError(
398406
f"Cannot decompose SelectSwapQROM bloq with symbolic block sizes. Found {self.block_sizes=}"
399407
)
400408
block_sizes = cast(Tuple[int, ...], self.block_sizes)

qualtran/bloqs/mcmt/and_bloq.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,8 @@ def decompose_from_registers(
385385
yield self._decompose_via_tree(control, self.concrete_cvs, ancilla, *target)
386386

387387
def decompose_bloq(self) -> 'CompositeBloq':
388+
if is_symbolic(self.cvs):
389+
raise DecomposeTypeError(f"Cannot decompose symbolic {self}.")
388390
return decompose_from_cirq_style_method(self)
389391

390392
def wire_symbol(self, reg: Optional[Register], idx: Tuple[int, ...] = tuple()) -> 'WireSymbol':

qualtran/bloqs/mod_arithmetic/mod_addition.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
Bloq,
2424
bloq_example,
2525
BloqDocSpec,
26+
DecomposeTypeError,
2627
GateWithRegisters,
2728
QBit,
2829
QMontgomeryUInt,
@@ -89,7 +90,7 @@ def on_classical_vals(
8990

9091
def build_composite_bloq(self, bb: 'BloqBuilder', x: Soquet, y: Soquet) -> Dict[str, 'SoquetT']:
9192
if is_symbolic(self.bitsize):
92-
raise NotImplementedError(f'symbolic decomposition is not supported for {self}')
93+
raise DecomposeTypeError(f'Symbolic decomposition is not supported for {self}')
9394
# Allocate ancilla bits for use in addition.
9495
junk_bit = bb.allocate(n=1)
9596
sign = bb.allocate(n=1)
@@ -390,6 +391,9 @@ def on_classical_vals(
390391
def build_composite_bloq(
391392
self, bb: 'BloqBuilder', ctrl, x: Soquet, y: Soquet
392393
) -> Dict[str, 'SoquetT']:
394+
if self.dtype.is_symbolic():
395+
raise DecomposeTypeError(f"Cannot decompose symbolic {self}")
396+
393397
y_arr = bb.split(y)
394398
ancilla = bb.allocate(1)
395399
x = bb.add(Cast(self.dtype, QUInt(self.dtype.bitsize)), reg=x)

0 commit comments

Comments
 (0)