
    J/Ph/                         d dl Z d dlZd dlmZmZ  e j        dd          Z e j        dd          ZdZ	dZ
dd
Zd Zd ZdS )    N)typesconfigQuicksortImplementation)compile	partition
partition3insertion_sortrun_quicksort	Partition)startstop   d   Fc                    	
 t           j        rt          j        }nt          j        } |d          |r%|r| d             n| d             | d             	n| d             | d             	d } | ||n|          
| 	
fd            | 	
fd	            | 
fd
            | fd            |r| fd            }n| fd            }| fd            }t          | |          S )Nr   c                 N    d t          t          |                     D             S )Nc                     g | ]}|S  r   ).0xs     T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/misc/quicksort.py
<listcomp>z9make_quicksort_impl.<locals>.make_res.<locals>.<listcomp>*   s    111a111    )rangelenAs    r   make_resz%make_quicksort_impl.<locals>.make_res(   s"    115Q==1111r   c                 4    t          j        | j                  S N)nparangesizer   s    r   r   z%make_quicksort_impl.<locals>.make_res,   s    y(((r   c                     | |         S r   r   r   
idx_or_vals     r   GETz make_quicksort_impl.<locals>.GET0   s    Z= r   c                     | S r   r   r   s    r   r   z%make_quicksort_impl.<locals>.make_res5   s    Hr   c                     |S r   r   r$   s     r   r&   z make_quicksort_impl.<locals>.GET9   s    r   c                     | |k     S )z?
        Trivial comparison function between two keys.
        r   )abs     r   
default_ltz'make_quicksort_impl.<locals>.default_lt=   s     1ur   c           
      J   |dk    sJ ||k    rdS t          |dz   |dz             D ]z}||         } | |          }|}||k    rW 	| | ||dz
                               r8||dz
           ||<   |dz  }||k    r 	| | ||dz
                               8|||<   {dS )zL
        Insertion sort A[low:high + 1]. Note the inclusive bounds.
        r   N   )r   )
r   Rlowhighikvjr&   LTs
           r   r	   z+make_quicksort_impl.<locals>.insertion_sortE   s    
 axxxx3;;FsQwq)) 		 		A!AAq		AAc''bbCC1QU8$4$455'Qx!Q c''bbCC1QU8$4$455' AaDD		 		r   c                    |dk    sJ ||k    sJ ||z   dz	  } 	 | ||                    | ||                             r||         ||         c||<   ||<    	 | ||                    | ||                             r||         ||         c||<   ||<    	 | ||                    | ||                             r||         ||         c||<   ||<    | ||                   }||         ||         c||<   ||<   |}|dz
  }	 ||k     rC 	 | ||                   |          r'|dz  }||k     r 	 | ||                   |          '||k    rC 	| | ||                             r'|dz  }||k    r 	| | ||                             '||k    rn"||         ||         c||<   ||<   |dz  }|dz  }||         ||         c||<   ||<   |S )zj
        Partition A[low:high + 1] around a chosen pivot.  The pivot's index
        is returned.
        r   r.   r   )
r   r/   r0   r1   midpivotr2   r5   r&   r6   s
           r   r   z&make_quicksort_impl.<locals>.partitionY   se    axxxxczzzzTza 2cc!QsVnncc!QsVnn-- 	,sVQsVNAcFAcF2cc!QtWooss1af~~.. 	.fagOAdGQsV2cc!QsVnncc!QsVnn-- 	,sVQsVNAcFAcFAqv C&!D'$31H		d((rr##a1,,66(Q d((rr##a1,,66(s((rr%Q!66(Q s((rr%Q!66(Avv1qtJAaD!A$FAFA		 $1!agr   c                 n   ||z   dz	  } | |         | |                   r| |         | |         c| |<   | |<    | |         | |                   r| |         | |         c| |<   | |<    | |         | |                   r| |         | |         c| |<   | |<   | |         }| |         | |         c| |<   | |<   |}|}|dz   }||k    rn | |         |          r"| |         | |         c| |<   | |<   |dz  }|dz  }n4 || |                   r| |         | |         c| |<   | |<   |dz  }n|dz  }||k    n||fS )a  
        Three-way partition [low, high) around a chosen pivot.
        A tuple (lt, gt) is returned such that:
            - all elements in [low, lt) are < pivot
            - all elements in [lt, gt] are == pivot
            - all elements in (gt, high] are > pivot
        r.   r   )	r   r0   r1   r8   r9   ltgtr2   r6   s	           r   r   z'make_quicksort_impl.<locals>.partition3   s    Tza2afaf 	,sVQsVNAcFAcF2agqv 	.fagOAdGQsV2afaf 	,sVQsVNAcFAcF#33##!G2ggr!A$ dAbE"qtaQE1Q4 dAbE"qtaQ 2gg 2vr   c                 8    |           }t          |           dk     r|S t          

          gt          z  }t          
t          |           dz
            |d<   d}|dk    r|dz  }||         \  }}||z
  t          k    r|t          k     sJ  	| |||          }||z
  ||z
  k    r'||k    rt          |dz   |          ||<   |dz  }|dz
  }n&||k    rt          ||dz
            ||<   |dz  }|dz   }||z
  t          k     | |||           |dk    |S )N   r.   r   )r   r   	MAX_STACKSMALL_QUICKSORT)r   r/   stacknr0   r1   r2   r	   r   r   zeros          r   run_quicksort1z+make_quicksort_impl.<locals>.run_quicksort1   sa   HQKKq66A::H4&&')3T3q66A:..a!eeFAaIC*//9}}}}IaC..!8a#g%%axx#,QUD#9#9aQq5DD3ww#,S!a%#8#8aQa%C *//  N1ad+++) !ee, r   c                     | j         dk    r |           S t          j        | j        d d                   D ]} | |                    | S )Nr.   )ndimr    ndindexshape)r   idxrD   s     r   r
   z*make_quicksort_impl.<locals>.run_quicksort   s]    v{{%~a(((:agcrcl33 + +C"N1S6****r   c                      |           S r   r   )r   rD   s    r   r
   z*make_quicksort_impl.<locals>.run_quicksort   s    !>!$$$r   c                    t          		          gdz  }t          	t          |           dz
            |d<   d}|dk    r|dz  }||         \  }}||z
  t          k    r|t          k     sJ  | ||          \  }}||k    r|dz
  }nY||k    r|dz   }nM||z
  ||z
  k    r!t          |dz   |          ||<   |dz  }|dz
  }n t          ||dz
            ||<   |dz  }|dz   }||z
  t          k     | ||           |dk    d S d S )Nr   r.   r   )r   r   r@   r?   )
r   rA   rB   r0   r1   lrr	   r   rC   s
          r   _run_quicksortz+make_quicksort_impl.<locals>._run_quicksort   sW   4&&'#-T3q66A:..a!eeFAaIC*//9}}}}!z!S$//199q5DD#XXa%CCAXC''(Q55E!HFAq5DD(a!e44E!HFAa%C# *//& N1c4(((/ !eeeeeer   )r   USE_LEGACY_TYPE_SYSTEMr   intppy_intr   )wrapr;   
is_argsortis_listis_np_arrayrQ   r,   r
   rO   r&   r6   r	   r   r   r   rD   rC   s            @@@@@@@@r   make_quicksort_implrW      sO   $ z|477D
   	)2 2 T2 2 ) ) T) 
	! 	! 
	! 	! 
	 	 
	 
	 	 
	   
BNbb
	3	3B	     
T& 
( ( ( ( ( 
T(T 
        
T D 
              
T D  %		 	 	 	 
	 	 
	% 	% 	% 	% 
	%
 
) ) ) ) ) ) 
T)> #4#,j.#02 2 2r   c                  $    t          d g| R i |S )Nc                     | S r   r   )fs    r   <lambda>z#make_py_quicksort.<locals>.<lambda>   s    ! r   )rW   )argskwargss     r   make_py_quicksortr^      s"    >t>>>v>>>r   c                  6    ddl m t          fdg| R i |S )Nr   )register_jitablec                      |           S r   r   )rZ   r`   s    r   r[   z$make_jit_quicksort.<locals>.<lambda>  s    *:*:1*=*= r   )numba.core.extendingr`   rW   )r\   r]   r`   s     @r   make_jit_quicksortrc     sM    555555 = = = = 0 $0 0 0(.0 0 0r   )NFFF)collectionsnumpyr    
numba.corer   r   
namedtupler   r   r@   r?   rW   r^   rc   r   r   r   <module>rh      s            $ $ $ $ $ $ $ $ 1+0   #K";0ABB	 	a2 a2 a2 a2H? ? ?0 0 0 0 0r   