
    J/Ph                     J    d Z ddlZddlmZ dZ eddg          Zd
dZd	 ZdS )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_mergesortFc                 r   t          dd          } | di |d             n  | di |          |r | di |fd            n | di |fd             | di |fd             | d          fd	            } | d          fd
            }t          |r|n|          S )NTF)no_cpython_wrapper_nrtc                     | |k     S N )abs     T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/misc/mergesort.pyltzmake_mergesort_impl.<locals>.lt   s    q5L    c                 4     ||          ||                   S r   r   r   r   valsr   s      r   lessthanz%make_mergesort_impl.<locals>.lessthan   s    2d1gtAw'''r   c                      | |          S r   r   r   s      r   r   z%make_mergesort_impl.<locals>.lessthan#   s    2a88Or   c                    | j         t          k    r2| j         dz  } 
| d|         ||            
| |d         ||           t          |          D ]}| |         ||<   |d|         }| |d         }| }dx}x}}	||j         k     r`||j         k     rU ||         ||         |          s||         ||	<   |dz  }n||         ||	<   |dz  }|	dz  }	||j         k     r||j         k     U||j         k     r ||         ||	<   |dz  }|	dz  }	||j         k      ||j         k     r"||         ||	<   |dz  }|	dz  }	||j         k      dS dS d}|| j         k     rz|}|dk    r` | |         | |dz
           |          rD| |         | |dz
           c| |dz
  <   | |<   |dz  }|dk    r | |         | |dz
           |          D|dz  }|| j         k     xdS dS )a  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&   z/make_mergesort_impl.<locals>.argmergesort_inner'   sZ    8o%%(a-Cs4C4y$333s344y$333 3ZZ  A1 dsd8DIECMAMAdi--A
NNxa$q'488 !!WCFFAA"1XCFFAQ di--A
NN di--aAQQ di--
 ej..qAQQ ej...... Ach,,!eeQQUT B Be),QQU&CAJAFA !eeQQUT B Be Q ch,,,,,,r   )r   c                 h    t          j        | j        dz  | j                  } | d|           | S )Inplacer   dtypeN)npemptyr   r*   )r   r   r&   s     r   	mergesortz&make_mergesort_impl.<locals>.mergesorte   s;     Xch!m395553b)))
r   c                     t          j        | j                  }t          j        | j        dz  |j                  } || |           |S )zOut-of-placer   r)   )r+   aranger   r,   r*   )r   idxsr   r&   s      r   argmergesortz)make_mergesort_impl.<locals>.argmergesortm   sL     y""Xch!m4:6664b)))r   )r   r   )dictr   )wrapr   
is_argsortkwargs_liter-   r1   r&   r   s    `    @@r   make_mergesort_implr6      s   $U;;;K 
z						 	 
		 	 !TT  K  $$ 						( 	( 	( 	( 
		( 	( 
					 	 	 	 
		 
TK9 9 9 9 9 9z 
TT"""    #" 
TT"""    #" #'1@||y
 
 
 
r   c                  .    ddl m} t          |g| R i |S )Nr   )njit)numbar8   r6   )argskwargsr8   s      r   make_jit_mergesortr<   z   s4     t5d555f555r   )NF)	__doc__numpyr+   collectionsr   r   r   r6   r<   r   r   r   <module>r@      s         " " " " " "  %*%>A   
d
 d
 d
 d
N6 6 6 6 6r   