qrisp.gidney_adder#
- gidney_adder(a: int | str | BigInteger | QuantumVariable | DynamicQubitArray | list, b: QuantumVariable | DynamicQubitArray | list, c_in: Qubit | QuantumBool | None = None, c_out: Qubit | QuantumBool | None = None, ctrl: Qubit | QuantumBool | None = None)[source]#
In-place Gidney adder performing
b += a.Based on arXiv:1709.06648. Works in both standard static and dynamic modes.
- Parameters:
- aint, str, jnp.ndarray, BigInteger, QuantumVariable, DynamicQubitArray, or list
The input value
a. Whenais a classical value (int, binary string, JAX scalar, orBigInteger), the semi-classical path is taken and no quantum encoding ofais created. Whenais a quantum register or qubit list, the quantum-quantum path is used. If a list, must contain only qubit-like objects (elements with a callableqsattribute); the list may be empty for quantum-quantum mode. Binary strings are little-endian:"10"means bit 0 = 1, bit 1 = 0 (decimal value 1).- bQuantumVariable, DynamicQubitArray, or list
The target register that is updated in-place: \(b \leftarrow b + a\). If a list, must be a non-empty list of qubit-like objects (elements with a callable
qsattribute).- c_inQuantumBool, Qubit, or None
Optional single-qubit carry-in. When provided, the addition becomes \(b \leftarrow b + a + c_{\text{in}}\).
- c_outQuantumBool, Qubit, or None
Optional single-qubit carry-out. When provided, this qubit receives the overflow carry of the addition.
- ctrlQubit or None
Optional control qubit. When provided, the entire addition is executed only if
ctrlis in state \(\ket{1}\) (controlled addition).
- Raises:
- ValueError
If inputs do not match one of the supported combinations: classical-quantum (classical
a, quantumb) or quantum-quantum (quantuma, quantumb).
Examples
>>> from qrisp import QuantumFloat, gidney_adder >>> a = QuantumFloat(4) >>> b = QuantumFloat(4) >>> a[:] = 4 >>> b[:] = 5 >>> gidney_adder(a, b) >>> print(b) {9: 1.0}