
    xKg                         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y)    N)typesQuicksortImplementation)compile	partition
partition3insertion_sortrun_quicksort	Partition)startstop   d   c                 z  	
 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                 P    t        t        |             D cg c]  }| c}S c c}w N)rangelen)Axs     X/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/misc/quicksort.pymake_resz%make_quicksort_impl.<locals>.make_res%   s"    #(Q=1=a=111s   	#c                 @    t        j                  | j                        S r   )nparangesizer   s    r   r   z%make_quicksort_impl.<locals>.make_res)   s    yy((    c                     | |   S 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           
         |dk\  sJ ||k  ryt        |dz   |dz         D ]^  }||   } | |      }|}||kD  rB 	| | ||dz
                 r,||dz
     ||<   |dz  }||kD  r 	| | ||dz
                 r,|||<   ` y)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    
 axx3;sQwq)A!AAq	AAc'bC1QU8$45Qx!Q c'bC1QU8$45 AaD *r   c                    |dk\  sJ ||kD  sJ ||z   dz	  } 	 | ||          | ||               r||   ||   c||<   ||<    	 | ||          | ||               r||   ||   c||<   ||<    	 | ||          | ||               r||   ||   c||<   ||<    | ||         }||   ||   c||<   ||<   |}|dz
  }	 ||k  r1 	 | ||         |      r|dz  }||k  r 	 | ||         |      r||k\  r1 	| | ||               r|dz  }||k\  r 	| | ||               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,   r-   midpivotr.   r1   r"   r2   s
           r   r   z&make_quicksort_impl.<locals>.partitionV   s    axxczzTza c!QsVnc!QsVn-sVQsVNAcFAcFc!QtWos1af~.fagOAdGQsVc!QsVnc!QsVn-sVQsVNAcFAcFAqv C&!D'$31Hd(r#a1,6Q d(r#a1,6s(r%Q!6Q s(r%Q!6Av1qtJAaD!A$FAFA  $1!agr   c                    ||z   dz	  } | |   | |         r| |   | |   c| |<   | |<    | |   | |         r| |   | |   c| |<   | |<    | |   | |         r| |   | |   c| |<   | |<   | |   }| |   | |   c| |<   | |<   |}|}|dz   }||k  rV | |   |      r| |   | |   c| |<   | |<   |dz  }|dz  }n( || |         r| |   | |   c| |<   | |<   |dz  }n|dz  }||k  rV||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,   r-   r4   r5   ltgtr.   r2   s	           r   r   z'make_quicksort_impl.<locals>.partition3   s`    TzaafafsVQsVNAcFAcFagqvfagOAdGQsVafafsVQsVNAcFAcF#33##!G2g!A$dAbE"qtaQE1Q4dAbE"qtaQ 2g 2vr   c                     |       }t        |       dk  r|S t        

      gt        z  }t        
t        |       dz
        |d<   d}|dkD  r|dz  }||   \  }}||z
  t        k\  rq|t        k  sJ  	| |||      }||z
  ||z
  kD  r"||kD  rt        |dz   |      ||<   |dz  }|dz
  }n!||kD  rt        ||dz
        ||<   |dz  }|dz   }||z
  t        k\  rq | |||       |dkD  r|S )N   r*   r   )r   r
   	MAX_STACKSMALL_QUICKSORT)r   r+   stacknr,   r-   r.   r   r   r   zeros          r   run_quicksort1z+make_quicksort_impl.<locals>.run_quicksort1   s*   QKq6A:H4&')3T3q6A:.a!eFAaIC*/9}$}aC.!8a#g%ax#,QUD#9aQq5D3w#,S!a%#8aQa%C */  1ad+) !e, r   c                     | j                   dk(  r |       S t        j                  | j                  d d       D ]  } | |           | S )Nr*   )ndimr   ndindexshape)r   idxr@   s     r   r	   z*make_quicksort_impl.<locals>.run_quicksort   sG    vv{%a((::aggcrl3C"1S6* 4r   c                      |       S r   r   )r   r@   s    r   r	   z*make_quicksort_impl.<locals>.run_quicksort   s    !!$$r   c                    t        		      gdz  }t        	t        |       dz
        |d<   d}|dkD  r|dz  }||   \  }}||z
  t        k\  r|t        k  sJ  | ||      \  }}||k(  r|dz
  }nO||k(  r|dz   }nD||z
  ||z
  kD  rt        |dz   |      ||<   |dz  }|dz
  }nt        ||dz
        ||<   |dz  }|dz   }||z
  t        k\  r | ||       |dkD  ry y )Nr   r*   r   )r
   r   r<   r;   )
r   r=   r>   r,   r-   lrr   r   r?   s
          r   _run_quicksortz+make_quicksort_impl.<locals>._run_quicksort   s   4&'#-T3q6A:.a!eFAaIC*/9}$}!!S$/19q5D#Xa%CAXC'(Q5E!HFAq5D(a!e4E!HFAa%C# */& 1c4(/ !er   )r   intpr   )wrapr7   
is_argsortis_listis_np_arrayrL   r(   r	   rK   r"   r2   r   r   r   r   r@   r?   s            @@@@@@@@r   make_quicksort_implrQ      sA   ::D7D
 2 2 ) ) 
	! 
	! 
	 
	 
	 
	 
BNb
	3B	 
& 
( 
(T 
  
 D 
  
 D 		 
	 
	% 
	%
 
) 
)> #4#,j.#02 2r   c                  "    t        d g| i |S )Nc                     | S r   r   )fs    r   <lambda>z#make_py_quicksort.<locals>.<lambda>   s    !r   )rQ   )argskwargss     r   make_py_quicksortrX      s    >t>v>>r   c                  4    ddl m t        fdg| i |S )Nr   )register_jitablec                      |       S r   r   )rT   rZ   s    r   rU   z$make_jit_quicksort.<locals>.<lambda>  s    *:1*=r   )numba.core.extendingrZ   rQ   )rV   rW   rZ   s     @r   make_jit_quicksortr]      s&    5 = 0 $0(.0 0r   )NFFF)collectionsnumpyr   
numba.corer   
namedtupler   r
   r<   r;   rQ   rX   r]   r   r   r   <module>rb      s_       1+00  #K"";0AB	 	^2B?0r   