
    z	i]
                    N    S r SSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
  S	S jrg)
zHCompute modular sum of two qubit registers without any ancillary qubits.    )annotations)QuantumCircuit)QuantumRegister)XGate)MCMTGatec                f   U S:  a  [        S5      e[        U S5      n[        U S5      n[        X5      nU S:X  a  UR                  US   US   5        U$ [	        [        5       SSU -  S-
  5      nUR                  XAS   /USS -   USS -   S	S
9  [        U S-
  5       Hb  nUR                  US   X%   5        UR                  X   US   5        UR                  X%   US   X   5        UR                  X   US   5        Md     UR                  US   US   5        [        U S-
  SS5       Ha  nUR                  X   US   5        UR                  X%   US   X   5        UR                  X   US   5        UR                  X   X%   5        Mc     UR                  XAS   /USS -   USS -   S	S
9  U$ )a3  
Construct a modular adder circuit with no ancillary qubits based on the Van Rentergem-style
adder in Fig. 15 of [1]. The implementation uses at most :math:`16k - 13` CX gates for an
adder with `k` qubits in each register, where `k = num_qubits`.

Args:
    num_qubits: The size of the register.

Returns:
    The quantum circuit implementing the modular adder.

Raises:
    ValueError: If ``num_qubits`` is less than 1.

References:

[1] Gidney, Factoring with n+2 clean qubits and n-1 dirty qubits, 2017.
`arxiv:1706.07884 <https://arxiv.org/abs/1706.07884>`_

   z(The number of qubits must be at least 1.abr      NT)inplace)	
ValueErrorr   r   cxr   r   composerangerccx)
num_qubitsqr_aqr_bqcmcmtis         n/home/james-whalen/.local/lib/python3.13/site-packages/qiskit/synthesis/arithmetic/adders/vrg_modular_adder.pyadder_modular_v17r      s   , A~CDD:s+D:s+D		#BQ
d1gtAw	EGQJ 23DJJt2hZ$s)+d1g5tJD :>"
d2h 
dgtBx 
b47+
dgtBx 	 # EE$r(DH :>2r*
dgtBx 
b47+
dgtBx 
dgtw	 + JJt2hZ$s)+d1g5tJDI    N)r   intreturnr   )__doc__
__future__r   qiskit.circuit.quantumcircuitr   qiskit.circuitr   'qiskit.circuit.library.standard_gates.xr   -qiskit.circuit.library.generalized_gates.mcmtr   r    r   r   <module>r&      s    O " 8 * 9 B:r   