
    sh                     D    S r SSKrSSKJr  Sr\" SS/5      rS	S jrS rg)
z
The same algorithm as translated from numpy.
See numpy/core/src/npysort/mergesort.c.src.
The high-level numba code is adding a little overhead comparing to
the pure-C implementation in numpy.
    N)
namedtuple   MergesortImplementationrun_mergesortc                 8  ^^^ [        SSS9nTc  U " S0 UD6S 5       mOU " S0 UD6" T5      mU(       a  U " S0 UD6U4S j5       mOU " S0 UD6U4S j5       mU " S0 UD6UU4S j5       mU " SS9U4S	 j5       nU " SS9U4S
 j5       n[        U(       a  US9$ US9$ )NTF)no_cpython_wrapper_nrtc                 
    X:  $ N )abs     h/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/misc/mergesort.pyltmake_mergesort_impl.<locals>.lt   s	    5L    c                    > T" X    X!   5      $ r   r   r   r   valsr   s      r   lessthan%make_mergesort_impl.<locals>.lessthan   s    dgtw''r   c                    > T" X5      $ r   r   r   s      r   r   r   #   s    a8Or   c                 b  > U R                   [        :  Ga  U R                   S-  nT
" U SU X5        T
" XS X5        [        U5       H	  nX   X$'   M     USU nXS nU nS=n=pXER                   :  a^  XR                   :  aO  T" Xh   XT   U5      (       d  XT   Xy'   US-  nOXh   Xy'   US-  nU	S-  n	XER                   :  a  XR                   :  a  MO  XER                   :  a!  XT   Xy'   US-  nU	S-  n	XER                   :  a  M!  XR                   :  a"  Xh   Xy'   US-  nU	S-  n	XR                   :  a  M!  ggSnX@R                   :  ak  UnUS:  aL  T" X   XS-
     U5      (       a6  X   XS-
     sXS-
  '   X'   US-  nUS:  a  T" X   XS-
     U5      (       a  M6  US-  nX@R                   :  a  Mj  gg)aG  The actual mergesort function

Parameters
----------
arr : array [read+write]
    The values being sorted inplace.  For argsort, this is the
    indices.
vals : array [readonly]
    ``None`` for normal sort.  In argsort, this is the actual array values.
ws : array [write]
    The workspace.  Must be of size ``arr.size // 2``
   Nr      )sizeSMALL_MERGESORTrange)arrr   wsmidileftrightoutjkargmergesort_innerr   s             r   r(   /make_mergesort_impl.<locals>.argmergesort_inner'   s    88o%((a-Cs4Cy$3s4y$3 3Z   ds8DIECMAMii-A

N$'488!WCFFA"XCFFAQ ii-A

N ii-QQ ii-
 jj.QQ jj. Ahh,!eUT B B),U&CAJFA !eUT B B Q hh,r   )r   c                 t   > [         R                  " U R                  S-  U R                  S9nT" U SU5        U $ )Inplacer   dtypeN)npemptyr   r-   )r   r    r(   s     r   	mergesort&make_mergesort_impl.<locals>.mergesorte   s2     XXchh!m39953b)
r   c                    > [         R                  " U R                  5      n[         R                  " U R                  S-  UR                  S9nT" XU5        U$ )zOut-of-placer   r,   )r.   aranger   r/   r-   )r   idxsr    r(   s      r   argmergesort)make_mergesort_impl.<locals>.argmergesortm   sB     yy"XXchh!m4::64b)r   )r   r   )dictr   )wrapr   
is_argsortkwargs_liter0   r5   r(   r   s    `    @@r   make_mergesort_implr;      s    $U;K 
z				 
	  K $				( 
	( 
			 
	 
K9 9z 
T" # 
T" # #'1|
 
7@
 
r   c                  ,    SSK Jn  [        U/U Q70 UD6$ )Nr   )njit)numbar=   r;   )argskwargsr=   s      r   make_jit_mergesortrA   z   s     t5d5f55r   )NF)	__doc__numpyr.   collectionsr   r   r   r;   rA   r   r   r   <module>rE      s>     "  %%>A  
d
N6r   