
    rh/                         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y)    N)typesconfigQuicksortImplementation)compile	partition
partition3insertion_sortrun_quicksort	Partition)startstop   d   c                   	
 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                 P    t        t        |             D cg c]  }| c}S c c}w N)rangelen)Axs     N/var/www/html/engine/venv/lib/python3.12/site-packages/numba/misc/quicksort.pymake_resz%make_quicksort_impl.<locals>.make_res(   s    #(Q=1a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>.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           
         |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_sortE   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/   r2   r#   r3   s
           r   r   z&make_quicksort_impl.<locals>.partitionY   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.   r5   r6   ltgtr/   r3   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   idxrA   s     r   r
   z*make_quicksort_impl.<locals>.run_quicksort   sL    vv{%a((::aggcrl3 +C"1S6*+r   c                      |       S r   r    )r   rA   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   USE_LEGACY_TYPE_SYSTEMr   intppy_intr   )wrapr8   
is_argsortis_listis_np_arrayrN   r)   r
   rL   r#   r3   r	   r   r   r   rA   r@   s            @@@@@@@@r   make_quicksort_implrT      sS   $$zz||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   )rT   )argskwargss     r   make_py_quicksortr[      s    >t>v>>r   c                  4    ddl m t        fdg| 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`     s&    5 = 0 $0(.0 0r   )NFFF)collectionsnumpyr   
numba.corer   r   
namedtupler   r   r=   r<   rT   r[   r`   r    r   r   <module>re      s_      $ 1+00  #K"";0AB	 	a2H?0r   