
    z	i                    |    S r SSKJr  SSKrSSKrSSKJrJrJ	r	  SSK
Jr  \R                  (       a  SSKJr  SS jrg)	z6Implement a integer-weighted sum over a set of qubits.    )annotationsN)QuantumCircuitQuantumRegisterAncillaRegister)synth_mcx_n_clean_m15)WeightedSumGatec           
     D   U R                   nU R                  U-
  nUS-
  n[        US:  5      n[        US5      n[        US5      n[	        US5      n[	        US5      n[        XVXx5      n	[        S5      n
U R                  n[        U5       GH  u  p[        R                  " US5      (       a  M$  X\   n[        U5      S	 R                  US
5      SSS2   n[        U5       GH  u  nnUS:X  GaL  US:X  a  U	R                  XU   5        M*  US:X  a.  U	R                  XU   UU   5        U	R                  XU   5        M^  UUS-
  :X  a1  U	R                  XU   5        U	R                  XUS-
     UU   5        M  U	R                  UU   5        U	R                  UUS-
     5        U	R                  U
XU   UUS-
     UU   /USS -   SS9  U	R                  XU   5        U	R                  UU   5        U	R                  UUS-
     5        U	R                  XU   5        U	R                  XUS-
     UU   5        GMZ  US:X  a  GMc  US:X  a  GMl  UUS-
  :X  a  U	R                  XUS-
     UU   5        GM  U	R                  U
XU   UUS-
     UU   /USS -   SS9  U	R                  XUS-
     UU   5        GM     [!        [#        [%        U5      5      5       GH=  nUU   nUS:X  a  US:X  a  M  US:X  aB  U	R                  UU   5        U	R                  XU   UU   5        U	R                  UU   5        M_  UUS-
  :X  a  Mj  U	R                  UUS-
     5        U	R                  U
XU   UUS-
     UU   /USS -   SS9  U	R                  XU   5        U	R                  UUS-
     5        M  US:X  a  M  US:X  a  M  UUS-
  :X  a  M  U	R                  UU   5        U	R                  U
XU   UUS-
     UU   /USS -   SS9  U	R                  UU   5        GM@     GM     U	$ )a$  Synthesize a weighted sum gate, by the number of state qubits and the qubit weights.

This method is described in Appendix A of [1].

Reference:

    [1] Stamatopoulos et al. Option Pricing using Quantum Computers (2020)
        `Quantum 4, 291 <https://doi.org/10.22331/q-2020-07-06-291>`__
      statesumcarrycontrol   r   b0N1T)inplace)num_sum_qubits
num_qubitsintr   r   r   r   params	enumeratenpiscloserjustcxccxxcomposereversedrangelen)weighted_sumr   num_state_qubitsnum_carry_qubitsnum_control_qubitsqr_stateqr_sumqr_carry
qr_controlcircuitc3xweightsiweightq_stateweight_binaryjbits                     b/home/james-whalen/.local/lib/python3.13/site-packages/qiskit/synthesis/arithmetic/weighted_sum.pysynth_weighted_sum_carryr7      sc    "00N#..?%)^a/0/9H^U3F/9H !3Y?JXxDG  
"C !!Gw'	::fa   + v;q/00EddK  .FAscz!Q&JJwq	2!V KKHQK@JJwq	2.1,, JJwq	2KK!a%&)D IIfQi(IIhq1uo.OO )Xa!e_hqkJZXY]Z $ $ 
 JJw4IIfQi(IIhq1uo.JJwq	2KK!a%&)D!Q&!V.1,, KK!a%&)D OO )Xa!e_hqkJZXY]Z $ $ 
 KK!a%&)Da /f %M 234A"Ccz!Q&!VIIfQi(KKHQK@IIfQi(.1,,IIhq1uo.OO )Xa!e_hqkJZXY]Z $ $ 
 JJw4IIhq1uo.!Q&!V.1,, IIfQi(OO )Xa!e_hqkJZXY]Z $ $ 
 IIfQi(I 5 (J N    )r%   r   returnr   )__doc__
__future__r   typingnumpyr   qiskit.circuit.quantumcircuitr   r   r   !qiskit.synthesis.multi_controlledr   TYPE_CHECKINGqiskit.circuit.libraryr   r7    r8   r6   <module>rC      s.    = "   Z Z C	6Ar8   