
    ܙd                         d dl Z d dlZd dl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QuicksortImplementation)compile	partition
partition3insertion_sortrun_quicksort	Partition)startstop   d   Fc                   	
 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     4lib/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>.GET-   s    Z= r   c                     | S r   r   r   s    r   r   z%make_quicksort_impl.<locals>.make_res2   s    Hr   c                     |S r   r   r#   s     r   r%   z make_quicksort_impl.<locals>.GET6   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_sortB   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.   r/   r0   midpivotr1   r4   r%   r5   s
           r   r   z&make_quicksort_impl.<locals>.partitionV   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   r/   r0   r7   r8   ltgtr1   r5   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nr/   r0   r1   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   idxrC   s     r   r	   z*make_quicksort_impl.<locals>.run_quicksort   s]    v{{%~a(((:agcrcl33 + +C"N1S6****r   c                      |           S r   r   )r   rC   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   r@   rA   r/   r0   lrr   r   rB   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   intpr   )wrapr:   
is_argsortis_listis_np_arrayrO   r+   r	   rN   r%   r5   r   r   r   r   rC   rB   s            @@@@@@@@r   make_quicksort_implrT      s;   :D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   )rT   )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   )rW   r]   s    r   rX   z$make_jit_quicksort.<locals>.<lambda>  s    *:*:1*=*= r   )numba.core.extendingr]   rT   )rY   rZ   r]   s     @r   make_jit_quicksortr`      sM    555555 = = = = 0 $0 0 0(.0 0 0r   )NFFF)collectionsnumpyr   
numba.corer   
namedtupler   r
   r?   r>   rT   r[   r`   r   r   r   <module>re      s                  1+0   #K";0ABB	 	^2 ^2 ^2 ^2B? ? ?0 0 0 0 0r   