
    z	i              	       d    S r SSKrSSKJr  SSKJr   SS\S\S\S\4S	 jjrS
\S\S\	\   4S jr
g)z*Integer comparator based on 2s complement.    N)QuantumCircuit)OrGatenum_state_qubitsvaluegeqreturnc                    [        SU -  5      nUR                  SU  nUR                  U    nUR                  U S-   S nUS::  a  U(       a  UR                  U5        U$ U[        SU 5      :  Ga  U S:  Ga  [	        X5      n[        U 5       H  nUS:X  a"  Xx   S:X  a  UR                  XH   Xh   5        M)  M+  XS-
  :  aO  Xx   S:X  a)  UR                  [        S5      XH   XhS-
     Xh   /5        Md  UR                  XH   XhS-
     Xh   5        M  Xx   S:X  a'  UR                  [        S5      XH   XhS-
     U/5        M  UR                  XH   XhS-
     U5        M     U(       d  UR                  U5        [        [        U S-
  5      5       Hx  nUS:X  a"  Xx   S:X  a  UR                  XH   Xh   5        M)  M+  Xx   S:X  a)  UR                  [        S5      XH   XhS-
     Xh   /5        M\  UR                  XH   XhS-
     Xh   5        Mz     U$ UR                  US   U5        U(       d  UR                  U5        U$ U(       d  UR                  U5        U$ )a-  Implement an integer comparison based on 2s complement.

This is based on Appendix B of [1].

Args:
    num_state_qubits: The number of qubits encoding the value to compare to.
    value: The value to compare to.
    geq: If ``True`` flip the target bit if the qubit state is :math:`\geq` than the value,
        otherwise implement :math:`<`.

Returns:
    A circuit implementing the integer comparator.

References:

    [1] J. Gacon et al. "Quantum-enhanced simulation-based optimization"
        `arXiv:2005.10780 <https://arxiv.org/abs/2005.10780>`__.
   N   r   )r   qubitsxpow_get_twos_complementrangecxappendr   ccxreversed)	r   r   r   circuitqr_state	q_compare
qr_ancillatwosis	            l/home/james-whalen/.local/lib/python3.13/site-packages/qiskit/synthesis/arithmetic/comparators/compare_2s.pysynth_integer_comparator_2sr      sL   * Q!112G~~//0H/0I 01 4 67JzIIi d Na 
Q()	)a'(8@D+,6w!|

8;
> $A--w!|vay8;
q5@QS]S`2abHKE1BJMRw!|  vay8;
q5@QS\2]^HKE1BIN -$ 		)$ e$4q$89:6w!|

8;
> $ w!|vay8;
q5@QS]S`2abHKE1BJMR ;, N JJx{I. 		)$ N IIi N    num_bitsc                     [        SU 5      [        R                  " U5      -
  nUS R                  U S5      n[	        [        [        U5      5      5       Vs/ s H  o2U   S:X  a  SOSPM     nnU$ s  snf )zoReturns the 2's complement of ``self.value`` as array.

Returns:
        The 2's complement of ``self.value``.
r
   b01r   r   )r   mathceilrjustr   r   len)r   r   twos_complementr   s       r   r   r   e   s}     !X&5)99O(+228SAO7?c/FZ@[7\7\!Q3&A-7\   s   A1)T)__doc__r#   qiskit.circuit.quantumcircuitr   /qiskit.circuit.library.boolean_logic.quantum_orr   intboolr   listr    r   r   <module>r/      sa    1  8 B 48NN"%N,0NNb3 s tCy r   