
    `i&                     T   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
 d dlmZmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZmZmZ d Zd	 Z ee          Z ee          Z ee          Z ee          Z e            Z  e            Z!d
 Z"d Z#d5dZ$d Z%d Z&d Z'd Z(d5dZ)d Z*d Z+ G d de,          Z- G d de-          Z. G d de.e          Z/ G d de.e          Z0 G d de,          Z1 G d d e1e.e          Z2 G d! d"e-          Z3 G d# d$e3e          Z4 G d% d&e3e          Z5 G d' d(e-e          Z6 G d) d*e          Z7 G d+ d,e          Z8 G d- d.e          Z9d/ Z: G d0 d1ee          Z; G d2 d3ee          Z<e=d4k    r ej>                     dS dS )6    N)jitnjit)utilserrors)TestCaseMemoryLeakMixin)make_py_quicksortmake_jit_quicksort)make_jit_mergesort)make_py_timsortmake_jit_timsortMergeRunc                     | d         g|z  S Nr    keysns     i/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/numba/tests/test_sort.pymake_temp_listr      s    G9q=    c                 6    t          j        || j                  S N)npemptydtyper   s     r   make_temp_arrayr      s    8Atz"""r   c                 .    |                                   d S r   sortvals    r   sort_usecaser#   '   s    HHJJJJJr   c                 *    |                                  S r   argsortr!   s    r   argsort_usecaser'   *   s    ;;==r   Fc                 ^    |r|                      d          S |                      d          S N	mergesortkind	quicksortr%   r"   	is_stables     r   argsort_kind_usecaser0   -   s2     -{{{,,,{{{,,,r   c                      t          |           S r   sortedr!   s    r   sorted_usecaser4   3   s    #;;r   c                 $    t          | |          S )Nreverser2   )r"   bs     r   sorted_reverse_usecaser9   6   s    #q!!!!r   c                 *    t          j        |           S r   )r   r    r!   s    r   np_sort_usecaser;   9   s    73<<r   c                 *    t          j        |           S r   r   r&   r!   s    r   np_argsort_usecaser>   <   s    :c??r   c                 ^    |rt          j        | d          S t          j        | d          S r)   r=   r.   s     r   np_argsort_kind_usecaser@   ?   s4     1z#K0000z#K0000r   c                    t           j                            d           g }t          |           D ]3}|                    t           j                                                   4|d d          }|                                 ||fS N*   r   randomseedrangeappendr    )r   lills       r   list_sort_usecaserL   E   sv    INN2
A1XX % %	!!##$$$$	
111BGGIIIb5Lr   c                    t           j                            d           g }t          |           D ]3}|                    t           j                                                   4|d d          }|                    |           ||fS )NrC   r6   rD   )r   r8   rI   rJ   rK   s        r   list_sort_reverse_usecaserN   N   s}    INN2
A1XX % %	!!##$$$$	
111BGGAGb5Lr   c                   \    e Zd ZddZddZddZddZddZddZd	 Z	d
 Z
d Zd Zd ZdS )BaseSortingTest
   c                     t          j        d           t          t          |||z                       }t          j        |           |S rB   )rE   rF   listrG   shuffle)selfr   offsetrI   s       r   random_listzBaseSortingTest.random_listZ   s?    Bvvz**++qr   c                 B    t          t          |||z                       S r   rS   rG   rU   r   rV   s      r   sorted_listzBaseSortingTest.sorted_list`   s    E&&1*--...r   c                 T    t          t          |||z                       d d d         S )NrY   rZ   s      r   revsorted_listzBaseSortingTest.revsorted_listc   s)    E&&1*--..ttt44r   Nc                     ||dz  }|                      ||          }||                     ||z
  |d         |z             z  }|S )N   r]   rV   )r[   rW   )rU   r   mrV   rI   s        r   initially_sorted_listz%BaseSortingTest.initially_sorted_listf   sS    9QAQ''	Ta!eAbEFN;;;r   c                 .   t          j        d           |!t          t          j        |                    }t          t          ||||z  z   dz                       |dz   z  d |         }t          |          |k    sJ t          j        |           |S )NrC      )	rE   rF   intmathsqrtrS   rG   lenrT   rU   r   factorrV   rI   s        r   duprandom_listzBaseSortingTest.duprandom_listm   s    B>1&&F%!v+ 6 :;;<<
KRaRP1vv{{{{qr   c                 4   |!t          t          j        |                    }t          t	          ||||z  z   dz                       |dz   z  d |         }t          |          |k    sJ t          |          |f            |                                 |S Nre   )rf   rg   rh   rS   rG   ri   r    rj   s        r   dupsorted_listzBaseSortingTest.dupsorted_listv   s    >1&&F%!v+ 6 :;;<<
KRaRP1vv{{{SVVQK{{{	r   c                     |                      t          |          t          |                     |                      t          |          t          |                     d S r   )assertEqualri   rS   r3   rU   origresults      r   assertSortedzBaseSortingTest.assertSorted~   sL    Vc$ii000fvd||44444r   c                 h   |                      t          |          t          |                     |                      t          |          t          |                     t          t	          ||          d           }t          t	          ||                    }|                      ||           t          t          |          dz
            D ]^}||         ||dz            c\  }}	\  }
}||
k    r<|                     |                    |	          |                    |                     _d S )Nc                     | d         S r   r   xs    r   <lambda>z4BaseSortingTest.assertSortedValues.<locals>.<lambda>   s
    !A$ r   keyre   )rq   ri   rS   r3   ziprG   
assertLessindex)rU   rs   orig_valuesrt   result_values
zip_sorted
zip_resultrJ   k1v1k2v2s               r   assertSortedValuesz"BaseSortingTest.assertSortedValues   s   Vc$ii000fvd||444Ck22GGG
#fm4455
Z000s:*++ 	N 	NA!+A
1q50AHRhr2Rxx 1 1" 5 5{7H7H7L7LMMM		N 	Nr   c              #   (   K   d}d}	 |V  |||z   }}rn   r   )rU   ar8   s      r   fibozBaseSortingTest.fibo   s0      	GGGa!eqA	r   c                     g }dD ]T}|                     |                     ||                     |                     |                     ||                     U|S N)   x   )rH   r[   ro   rU   r   listsrV   s       r   make_sample_sorted_listsz(BaseSortingTest.make_sample_sorted_lists   sb     	9 	9FLL))!V44555LL,,Q778888r   c                 \   g }dD ]}|                     |                     ||                     |                     |                     ||                     |                     |                     ||                     |                     |                     ||                     |S r   )rH   r[   ro   r^   rl   r   s       r   make_sample_listsz!BaseSortingTest.make_sample_lists   s     	9 	9FLL))!V44555LL,,Q77888LL,,Q77888LL,,Q778888r   )rQ   )NrQ   )__name__
__module____qualname__rW   r[   r^   rc   rl   ro   ru   r   r   r   r   r   r   r   rP   rP   X   s           / / / /5 5 5 5         5 5 5
N N N        r   rP   c                   b    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd ZdS )BaseTimsortTestc                 0    | j         j        } ||          S r   )timsort
merge_init)rU   r   fs      r   r   zBaseTimsortTest.merge_init   s    L#qwwr   c                     d}d fd	} j         j                             |          } |||            ||||dz                                  |          } |||                                ||dz            } |||            ||||dz                                  |          } |||                                |          } |||                                |          } |||           d S )Nr   r   c                 |                         |           } ||d||                               | |           d S r   )array_factoryru   )rI   r   startresr   rU   s       r   checkz.BaseTimsortTest.test_binarysort.<locals>.check   sJ    $$Q''CAc31e$$$a%%%%%r   r`   r   )r   
binarysortr[   r^   rc   rW   rl   rU   r   r   rI   r   s   `   @r   test_binarysortzBaseTimsortTest.test_binarysort   s>   	& 	& 	& 	& 	& 	& 	&
 L#QaaAqD""a&&q!Q$//aaAqD""aQa""ar   c                 L    d}t          t          dd|z                       d fd	} j        j                             |          } |||            ||||dz                                  |          } |||                                ||dz            } |||            ||||dz                                  |          } |||                                |          } |||                                |          } |||           d S )Nr   d   r   c                                          |           }                               } ||d||                               | ||           d S r   )r   r   )rI   r   r   r   res_vr   rU   vs        r   r   z:BaseTimsortTest.test_binarysort_with_values.<locals>.check   sa    $$Q''C&&q))EAc5!Q&&&##Aq#u55555r   r`   r   )	rS   rG   r   r   r[   r^   rc   rW   rl   )rU   r   r   rI   r   r   s   `   @@r   test_binarysort_with_valuesz+BaseTimsortTest.test_binarysort_with_values   s_   sCE""##	6 	6 	6 	6 	6 	6 	6 	6 L#QaaAqD""a&&q!Q$//aaAqD""aQa""ar   c                 N    d} j         j         fd}                     |d          } ||d|            ||d|dz
              ||dd                                |d          } ||d|            ||d|dz
              ||dd                                |d          }t          t          |          dz
            D ]} ||||                                |d          }t          t          |          dz
            D ]} ||||           d S )N   c                 8    	                     |           ||          \  }}|rzt          |||z   dz
            D ]+}| |         | |dz            }}	                    ||           ,||z   |k     r-	                    | ||z   dz
           | ||z                       d S d S t          |||z   dz
            D ]+}| |         | |dz            }}	                    ||           ,||z   |k     r.	                    | ||z   dz
           | ||z            |            d S d S rn   )r   rG   assertGreaterassertLessEqual)
rI   lohir   desckr   r8   r   rU   s
           r   r   z-BaseTimsortTest.test_count_run.<locals>.check   s[   a**1--r266GAt Dr26A:.. - -AQ41q5qA&&q!,,,,6B;;((26A:"q&	BBBBB ; r26A:.. / /AQ41q5qA((A....6B;;&&qa!}aQiCCCCC ;r   r   ra   r   re   r`   )r   	count_runr[   r^   rW   rG   ri   rl   )rU   r   r   rI   rJ   r   s   `    @r   test_count_runzBaseTimsortTest.test_count_run   s   L"	D 	D 	D 	D 	D 	D" Qs++aAaAEaA#..aAaAEaAQs++s1vvz"" 	 	AE!QNNNN#..s1vvz"" 	 	AE!QNNNN	 	r   c                      d j         j         fdfd fd}                     d          } ||                                d          } ||           d S )Nr   c                     || |||          }                     ||                               ||           ||k    r                    | |dz
           |           ||k     r                     | |         |           d S d S rn   )assertGreaterEqualr   r~   rI   r|   r   stophintr   r   rU   s         r   r   z/BaseTimsortTest.test_gallop_left.<locals>.check  s    #q%t,,A##Au---  D)))5yy!a%#...4xx''!c22222 xr   c                 L    t          ||          D ]} | ||||           d S r   rG   rI   r|   r   r   r   r   s        r   check_all_hintsz9BaseTimsortTest.test_gallop_left.<locals>.check_all_hints  A    eT** 1 1aeT400001 1r   c                                          |           } | d         | d         | d         d| d         dfD ]2} | |d            | |ddz
              | |ddz
             3d S 	N      r   ir]     re      r   rI   r|   r   r   rU   s     r   check_sorted_listz;BaseTimsortTest.test_gallop_left.<locals>.check_sorted_list      ""1%%A!aeQqT5!B%> 2 231---31q511131q511112 2r   r   ra   )r   gallop_leftr[   ro   rU   r   rI   r   r   r   r   s   `  @@@@r   test_gallop_leftz BaseTimsortTest.test_gallop_left  s    L$	3 	3 	3 	3 	3 	3	1 	1 	1 	1 	1	2 	2 	2 	2 	2 	2 	2 Qs++!#..!r   c                      d j         j         fdfd fd}                     d          } ||                                d          } ||           d S )Nr   c                     || |||          }                     ||                               ||           ||k    r                    | |dz
           |           ||k     r                    | |         |           d S d S rn   )r   r   r   r   s         r   r   z0BaseTimsortTest.test_gallop_right.<locals>.check%  s    #q%t,,A##Au---  D)))5yy$$Qq1uXs3334xx""1Q4----- xr   c                 L    t          ||          D ]} | ||||           d S r   r   r   s        r   r   z:BaseTimsortTest.test_gallop_right.<locals>.check_all_hints/  r   r   c                                          |           } | d         | d         | d         d| d         dfD ]2} | |d            | |ddz
              | |ddz
             3d S r   r   r   s     r   r   z<BaseTimsortTest.test_gallop_right.<locals>.check_sorted_list3  r   r   r   ra   )r   gallop_rightr[   ro   r   s   `  @@@@r   test_gallop_rightz!BaseTimsortTest.test_gallop_right!  s    L%	. 	. 	. 	. 	. 	.	1 	1 	1 	1 	1	2 	2 	2 	2 	2 	2 	2 Qs++!#..!r   c                    | j         j        }t          dd          D ]!}|                      ||          |           "t          dd          D ]9}d|z  t          j        k    r n#|                      |d|z            d           :|                                 D ]}|dk     r	|t          j        k    r d S  ||          }|                     |d           |                     |d           |dk    rK||z  }dt          j
        |          z  }|                     ||           |                     |d|z             d S )	Nr   @      ?   r`         ?)r   merge_compute_minrunrG   rq   sysmaxsizer   r   r   r   
bit_lengthr~   )rU   r   rJ   r   quotps         r   test_merge_compute_minrunz)BaseTimsortTest.test_merge_compute_minrun?  sf   L-q" 	& 	&AQQqTT1%%%%q" 	* 	*A!tck!!QQq!tWWb)))) 	7 	7A2vvCK!A##Ar***  B'''3wwAv)$///a(((''cAg666	7 	7r   c           	         t          |          }t          |          }dg|z   |z   dgz   }|                     |          }|                     |          }d}	|	|z   }
 |||||	||
|          }|                     |d         |d                    |                     |d         |d                    |                     |dd         |dd                    |                     t          |j                  t          |j                             |                     t          |j                  t          |j                             |                     |j	        |j	                   |                     |j
        d           d S NrC   re   r   r]   )ri   r   r   rq   ru   r   r   valuesassertIspending
min_gallop)rU   funcr   r8   nanb	orig_keysr   msssassbnew_mss               r   check_merge_lo_hiz!BaseTimsortTest.check_merge_lo_hiW  sh   VVVV D1HqLC5(	!!),,__T""Bh b$c2sB77a)A,///b9R=111)AbD/4":666FK 0 0#bg,,???FM 2 2C	NNCCCfnbj111 1155555r   c                 $   | j         j        }| j         j        }dD ]t\  }}t          j        |                     |          |                     |                    D ]3\  }}|                     |||           |                     |||           4ud S )N)   r   (   r   r   n   )r   iL  )r   merge_lomerge_hi	itertoolsproductr   r   )rU   f_lof_hir   r   r   r8   s          r   test_merge_lo_hiz BaseTimsortTest.test_merge_lo_him  s    |$|$ G 	3 	3HR!)$*G*G*K*K*.*G*G*K*KM M 3 31&&tQ222&&tQ22223	3 	3r   c                    	
  j         j        	t          |          
t          |          dg|z   |z   dgz   d
z   }t          dd          	
 fd}                               }                     |          } j                             |          }|j        } j                             |t          
                    } j                             |t          |                    } ||||          }                     |j        |dz                                             }                     |          } j                             |          }|j        } j                             |t          
                    } j                             |t          |                    }t          |z   d          } j                             ||          } ||||          }                     |j        |dz                                   |j	        |j        dz
           |           d S )NrC   r   re   c                     | |||          }                     |d         d                                         |d         d                                        dd         |dd                                        |j        | j                                        | j        |         	z   f                                | j        d         
           |S )Nr   r]   re   )rq   ru   r   r   )r   r   rJ   r   r   r   r   r   rU   r   stack_sentinels       r   run_merge_atz4BaseTimsortTest.check_merge_at.<locals>.run_merge_at  s    Qr4q))FT!Wil333T"Xy}555i"otAbDz:::MM&."*555RZ]S"r'N;;;RZ]N;;;Mr   r`   )
r   merge_atri   r   r   r   merge_appendr   rq   r   )rU   r   r8   r   r  r   r   rJ   last_runr   r   r   r   r   r  s   `        @@@@@@r   check_merge_atzBaseTimsortTest.check_merge_atx  sP   L!VVVVD1HqLC5(	Bh!#s++		 		 		 		 		 		 		 		 		 		 		 !!),,__T""\&&r>::D\&&r8C+<+<==\&&r8C+<+<==\"dA&&q1u%%% !!),,__T""\&&r>::D\&&r8C+<+<==\&&r8C+<+<==C"Ha((\&&r844\"dA&&q1u%%%BD1H-x88888r   c                     dD ]r\  }}t          j        |                     |          |                     |                    D ]1\  }}|                     ||           |                     ||           2sd S )N)r   r   r   )r   i  )r   r   r   r
  )rU   r   r   r   r8   s        r   test_merge_atzBaseTimsortTest.test_merge_at  s    D 	* 	*HR!)$*G*G*K*K*.*G*G*K*KM M * *1##Aq)))##Aq))))*	* 	*r   c                 F     j         j        }dg}|                    |d         d d d                    |D ]h}t          j         fd|D              D ]I}t          |g           }                     |          }                     |          }d}|D ]J}	 j                             |t          |t          |	                              }|t          |	          z  }K                     t          |j        |j        dz
                     t          |                      ||||          }                     |j        d                                |j        d         t          dt          |                                                    ||           Kjd S )N)r   rQ   r   r   r   r]   c              3   B   K   | ]}                     |          V  d S r   )r   ).0r   rU   s     r   	<genexpr>z<BaseTimsortTest.test_merge_force_collapse.<locals>.<genexpr>  sE       .> .>23 /3.K.KA.N.N .> .> .> .> .> .>r   re   )r   merge_force_collapserH   r   r   sumr   r   r  r   ri   rq   r   r   ru   )
rU   r   
sizes_listsizeschunksr   r   r   poscs
   `         r   test_merge_force_collapsez)BaseTimsortTest.test_merge_force_collapse  s   L- &&
*Q-"-... 	3 	3E#+ .> .> .> .>7<.> .> .> ? 3 3  OO	)))44__T** " "A222xSVV7L7LMMB3q66MCC  RZq%9!:!:CIIFFFQr4&&  q)))  ACII0F0FGGG!!)T2222%3	3 	3r   c                       j         j        }dD ]jd} fd|D             }t          j        | D ]H}t	          |g           }                     |          } ||                                ||           Ikd S )N)re   rQ   )r      r   c                 @    g | ]}                     |z            S r   r   r  r   rU   size_factors     r   
<listcomp>z4BaseTimsortTest.test_run_timsort.<locals>.<listcomp>  +    PPPQ//K@@PPPr   )r   run_timsortr   r   r  r   ru   rU   r   r  	all_listsr  r   r   r  s   `      @r   test_run_timsortz BaseTimsortTest.test_run_timsort  s    L$" 
	3 
	3K EPPPPP%PPPI#+Y7 3 3OO	)))44$!!)T22223
	3 
	3r   c           
         | j         j        }dD ]}d|z  }|                     |          }|                     |          }|                     |          }||z   |z   }t          t          ddt          |          z                       }|                     |          }	|                     |          }
 ||	|
           | 	                    |||	|
           d S )Nre   r   P   r   )
r   run_timsort_with_valuesro   rl   r^   rS   rG   ri   r   r   )rU   r   r  
chunk_sizer   r8   r  r   r   r   r   s              r   test_run_timsort_with_valuesz,BaseTimsortTest.test_run_timsort_with_values  s    L0! 	J 	JKk)J##J//A##J//A##J//AA	IuT4#i..+@AABBK%%i00D''44FAdFOOO##I{D&IIII	J 	Jr   N)r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r$  r*  r   r   r   r   r      s            .  4" " "H  <  <7 7 706 6 6,	3 	3 	3/9 /9 /9b* * *3 3 383 3 3J J J J Jr   r   c                       e Zd ZeZeZdS )TestTimsortPurePythonN)r   r   r   py_list_timsortr   rS   r   r   r   r   r,  r,    s        G MMMr   r,  c                       e Zd ZeZd ZdS )TestTimsortArraysPurePythonc                 B    t          j        |t           j                  S Nr   r   arrayint32rU   lsts     r   r   z)TestTimsortArraysPurePython.array_factory      x28,,,,r   N)r   r   r   py_array_timsortr   r   r   r   r   r/  r/    s(        G- - - - -r   r/  c                   $    e Zd ZeZdZdZi fdZdS )JITTimsortMixinNc                 h    |f}||v r||         S |j         |j        fd            }|||<   |S )z
        Wrap *func* into another compiled function inserting a runtime-created
        mergestate as the first function argument.
        c                 4     |           } || |g|R  }|S r   r   )r   r   argsr   r   r   r   s        r   wrapperz5JITTimsortMixin.wrap_with_mergestate.<locals>.wrapper  s2    D!!B$r4/$///CJr   )r   compile)rU   r   r   _cacher|   r?  r   s     `   @r   wrap_with_mergestatez$JITTimsortMixin.wrap_with_mergestate  sd    
 tm&==#;'
		 	 	 	 	 
	
 sr   )r   r   r   jit_array_timsortr   r  r  rB  r   r   r   r;  r;    s;        GM $9;      r   r;  c                       e Zd Zd Zd ZdS )TestTimsortArraysc                 B    t          j        |t           j                  S r1  r3  r6  s     r   r   zTestTimsortArrays.array_factory  r8  r   c                    t          |          }t          |          }|                     | j        |          }dg|z   |z   dgz   }|                     |          }d}||z   }	 ||||||	|          }
|                     |d         |d                    |                     |d         |d                    |                     |dd         |dd                    d S r   )ri   rB  r   r   rq   ru   )rU   r   r   r8   r   r   r   r   r   r   r   s              r   r   z#TestTimsortArrays.check_merge_lo_hi   s    VVVV((t<< D1HqLC5(	!!),,BhdD#r333a)A,///b9R=111)AbD/4":66666r   N)r   r   r   r   r   r   r   r   rE  rE    s2        - - -7 7 7 7 7r   rE  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )BaseQuicksortTestc                     d} fd} j         j                             |          } |||                                |          } |||                                ||dz            } |||                                |          } |||                                |          } |||                                |          } |||           d S )Nr   c                 
                        dg| z   dgz             } ||d|                               |d         d                               |d         d                               | |dd                    d S Ni'  ire   r   r]   )r   rq   ru   )rI   r   r   r   rU   s      r   r   z4BaseQuicksortTest.test_insertion_sort.<locals>.check9  s    $$dVaZ5'%9::CAc31SVT***SWe,,,aQrT+++++r   r`   )r-   insertion_sortr[   r^   rc   rW   rl   r   s   `   @r   test_insertion_sortz%BaseQuicksortTest.test_insertion_sort7  s	   	, 	, 	, 	, 	, 	, N)Qa""a&&q!Q$//a""aQa""ar   c                     d} fd} j         j                             |          } |||                                |          } |||                                ||dz            } |||                                |          } |||                                |          } |||                                |          } |||           d S )Nr   c                                         dg| z   dgz             } ||d|          }                    |d         d                               |d         d           ||         }t          d|          D ]}                    ||         |           t          |dz   |          D ]}                    ||         |           d S rL  )r   rq   rG   r   r   )rI   r   r   r   pivotrJ   r   rU   s         r   r   z/BaseQuicksortTest.test_partition.<locals>.checkP  s    $$dVaZ5'%9::CAc31%%ESVT***SWe,,,JE1e__ 4 4$$SVU3333519a(( 7 7''A66667 7r   r`   )r-   	partitionr[   r^   rc   rW   rl   r   s   `   @r   test_partitionz BaseQuicksortTest.test_partitionN  s	   		7 		7 		7 		7 		7 		7 N$Qa""a&&q!Q$//a""aQa""ar   c                     d} fd} j         j                             |          } |||                                |          } |||                                ||dz            } |||                                |          } |||                                |          } |||                                |          } |||           d S )Nr   c                                         dg| z   dgz             } |d|          \  }}                    |d         d                               |d         d           ||         }t          d|          D ]}                    ||         |           t          ||dz             D ]}                    ||         |           t          |dz   |          D ]}                    ||         |           d S rL  )r   rq   rG   r   r   )	rI   r   r   ltgtrQ  rJ   r   rU   s	          r   r   z0BaseQuicksortTest.test_partition3.<locals>.checkl  s'   $$dVaZ5'%9::CQsAq\\FBSVT***SWe,,,GE1b\\ 4 4$$SVU33332rAv&& 0 0  Q////261%% 2 2""3q6511112 2r   r`   )r-   
partition3r[   r^   rc   rW   rl   r   s   `   @r   test_partition3z!BaseQuicksortTest.test_partition3i  s	   	2 	2 	2 	2 	2 	2 N%Qa""a&&q!Q$//a""aQa""ar   c                       j         j        }dD ]jd} fd|D             }t          j        | D ]H}t	          |g           }                     |          } ||                                ||           Ikd S )Nr&  r   r   c                 @    g | ]}                     |z            S r   r  r  s     r   r  z8BaseQuicksortTest.test_run_quicksort.<locals>.<listcomp>  r   r   )r-   run_quicksortr   r   r  r   ru   r"  s   `      @r   test_run_quicksortz$BaseQuicksortTest.test_run_quicksort  s    N(! 
	3 
	3KEPPPPP%PPPI#+Y7 3 3OO	)))44$!!)T22223
	3 
	3r   c           	      N    d }                      |          j        }dD ]sd} fd|D             }t          j        | D ]Q}t	          |g           }                     |          } ||                                ||d d d                    Rtd }                      |          j        }t          j        	                    d           d	D ]}	t          j                            |	
          dz  }
t          d          |
t          j                            |	
          dk     <   t          |
          }                     |          } ||           |
t          j        |
                    }                     ||d t          |                              d S )Nc                     | |k    S r   r   r   r8   s     r   rV  z3BaseQuicksortTest.test_run_quicksort_lt.<locals>.lt      q5Lr   )rV  r&  r[  c                 @    g | ]}                     |z            S r   r  r  s     r   r  z;BaseQuicksortTest.test_run_quicksort_lt.<locals>.<listcomp>  r   r   r]   c                 6    t          j        |          p| |k     S r   rg   isnanra  s     r   	lt_floatsz:BaseQuicksortTest.test_run_quicksort_lt.<locals>.lt_floats      :a==)AE)r   rC   r   r   2   r   sizer   nan皙?)make_quicksortr]  r   r   r  r   ru   r   rE   rF   floatrS   rf  ri   )rU   rV  r   r  r#  r  r   r   rg  rl  rs   non_nansr  s   `           @r   test_run_quicksort_ltz'BaseQuicksortTest.test_run_quicksort_lt  s   	 	 	 2&&4! 
	9 
	9KEPPPPP%PPPI#+Y7 9 9OO	)))44$!!)T$$B$Z88889	* 	* 	* 9--;
	r$ 	> 	>D9###..4D6;EllD!!t!,,s23T

I%%i00DAdGGGRXd^^O,Hh^c(mm^(<====	> 	>r   N)r   r   r   rN  rS  rY  r^  rr  r   r   r   rI  rI  3  s_          .  6  <3 3 3"> "> "> "> ">r   rI  c                   ,    e Zd ZeZ ee          ZeZ	dS )TestQuicksortPurePythonN)
r   r   r   py_quicksortr-   staticmethodr	   ro  rS   r   r   r   r   rt  rt    s*        I!\"344N MMMr   rt  c                   .    e Zd ZeZ ee          Zd ZdS )TestQuicksortArraysc                 B    t          j        |t           j                  S r1  )r   r4  float64r6  s     r   r   z!TestQuicksortArrays.array_factory  s    x2:....r   N)	r   r   r   jit_quicksortr-   rv  r
   ro  r   r   r   r   rx  rx    s8        I!\"455N/ / / / /r   rx  c                   \    e Zd Z ed          Z ee          Zd Zd	dZd Z	d Z
d ZdS )
#TestQuicksortMultidimensionalArraysT)is_np_arrayc                 r    |                      |j        |j                   |                     ||           d S r   )rq   shapeassertPreciseEqualrr   s      r   ru   z0TestQuicksortMultidimensionalArrays.assertSorted  s8    V\222f-----r   Nc                     t          j        |t           j                  }|!|                    d|j        d                   S |                    |          S )Nr2  r]   r   )r   r4  rz  reshaper  )rU   r7  r  r4  s       r   r   z1TestQuicksortMultidimensionalArrays.array_factory  sI    BJ///===U[^444=='''r   c                    g }|dk    r|S t          dt          t          j        |                    dz             D ]}||z  dk    r|                    ||z  |f           |                    |||z  f           |                     ||z            }|D ]4}|                    |f|z              |                    ||fz              5|S )Nre   r`   r   )rG   rf   rg   rh   rH   
get_shapes)rU   r   shapesrJ   _shapes_shapes         r   r  z.TestQuicksortMultidimensionalArrays.get_shapes  s    66Mq#dill++a/00 	1 	1A1uzzqAvqk***q!q&k***//!q&11% 1 1FMM1$-000MM&A4-0000r   c                    
  j         j        }dD ]ӊ
d} 
fd|D             }t          j        | D ]}t	          |g           }                     t          |                    }|                    d            |D ]e}                     ||          }                     ||          }	 ||           |		                                  
                    |	|           fd S )Nr&  r[  c                 @    g | ]}                     |z            S r   r  r  s     r   r  zJTestQuicksortMultidimensionalArrays.test_run_quicksort.<locals>.<listcomp>  r   r   r  )r-   r]  r   r   r  r  ri   rH   r   r    ru   )rU   r   r  r#  r  r   
shape_listr  r   	keys_copyr  s   `         @r   r^  z6TestQuicksortMultidimensionalArrays.test_run_quicksort  s   N(! 	7 	7KEPPPPP%PPPI#+Y7 
7 
7OO	!__S^^<<
!!$'''' 7 7E--iu-EED $ 2 29E 2 J JIAdGGGNN$$$%%i66667	
7	7 	7r   c                     d }                      |d          j        }dD ]׊d} fd|D             }t          j        | D ]}t	          |g           }                     t          |                    }|                    d            |D ]i}                     ||          }	                     ||           }
 ||	           |
	                                 |
 }
 
                    |
|	           jd }                      |d          j        }t          j                            d	           d
D ]}t          j                            |          dz  }t          d          |t          j                            |          dk     <   t          |          }                     t          |                    }|                    d            |D ]e}                     ||          }	                     ||          }
 ||	           |
	                                  
                    |
|	           f
d S )Nc                     | |k    S r   r   ra  s     r   rV  zETestQuicksortMultidimensionalArrays.test_run_quicksort_lt.<locals>.lt  rb  r   T)rV  r~  r&  r[  c                 @    g | ]}                     |z            S r   r  r  s     r   r  zMTestQuicksortMultidimensionalArrays.test_run_quicksort_lt.<locals>.<listcomp>
  r   r   r  c                 6    t          j        |          p| |k     S r   re  ra  s     r   rg  zLTestQuicksortMultidimensionalArrays.test_run_quicksort_lt.<locals>.lt_floats  rh  r   rC   ri  rk  r   rm  rn  )ro  r]  r   r   r  r  ri   rH   r   r    ru   r   rE   rF   rp  rS   )rU   rV  r   r  r#  r  r   r  r  r   r  rg  rl  rs   r  s   `             @r   rr  z9TestQuicksortMultidimensionalArrays.test_run_quicksort_lt   s   	 	 	 2488F! 	7 	7KEPPPPP%PPPI#+Y7 7 7OO	!__S^^<<
!!$'''' 7 7E--iu-EED!%!3!3IU!3!K!K KIAdGGGNN$$$!*
I%%i66667	7	* 	* 	* 9$??M
	r$ 	3 	3D9###..4D6;EllD!!t!,,s23T

IY88Jd#### 3 3)))5)AA ..y.FF	$   !!)T22223	3 	3r   r   )r   r   r   r
   r-   rv  ro  ru   r   r  r^  rr  r   r   r   r}  r}    s        ""t444I!\"455N. . .( ( ( (   7 7 7(,3 ,3 ,3 ,3 ,3r   r}  c                       e Zd Zd Zd Zd Zd Zd Zd Zi fdZ	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestNumpySortc                 D    t           j                            d           d S rB   r   rE   rF   rU   s    r   setUpzTestNumpySort.setUp0  s    
	rr   c              #   Z   K   dD ]%}t           j                            d|          V  &d S )Nri  c   rk  )r   rE   randint)rU   rl  s     r   
int_arrayszTestNumpySort.int_arrays3  sC      $ 	3 	3D)##BT#222222	3 	3r   c              #     K   dD ]'}t           j                            |          dz  V  (dD ]]}t           j                            |          dz  }t          d          |t           j                            |          dk     <   |V  ^dD ]]}t           j                            |          dz  }t          d          |t           j                            |          dk     <   |V  ^d S )Nri  rk  r   rm  rn  )rj  r   r   )r   rE   rp  )rU   rl  rs   s      r   float_arrayszTestNumpySort.float_arrays7  s     $ 	4 	4D)"""--33333$ 	 	D9###..4D6;EllD!!t!,,s23JJJJ 	 	D9###..4D6;EllD!!t!,,s23JJJJ	 	r   c                     t          j        t          j        |                    dk    rdS t          j        |          j        |j        k     rdS dS )zM
        Whether the array has duplicates.  Takes NaNs into account.
        re   TF)r   count_nonzerorf  uniquerl  )rU   arrs     r   has_duplicateszTestNumpySort.has_duplicatesE  sI     BHSMM**Q..49S>>))4ur   c                     t          j         |          }t          j         |          } ||            ||           |                     ||           d S r   copyr  )rU   pyfunccfuncr"   expectedgots         r   check_sort_inplacez TestNumpySort.check_sort_inplaceO  sU    9S>>innxc


X.....r   c                     t          j         |          } ||          } ||          }|                     ||           |                     ||           d S r   r  )rU   r  r  r"   rs   r  r  s          r   check_sort_copyzTestNumpySort.check_sort_copyV  s[    y~~6#;;eCjjX...T*****r   c                 4   t          j         |          } ||fi |} ||fi |}|                     ||         t          j        |          d           |                     |          s|                     ||           |                     ||           d S )Nzthe array wasn't argsorted)msg)r  r  r   r    r  )rU   r  r  r"   kwargsrs   r  r  s           r   check_argsortzTestNumpySort.check_argsort^  s    y~~6#((((eC""6""S	274==$@ 	  	B 	B 	B ""4(( 	3##C222T*****r   c                     t           } t          d          |          }|                                 D ]}|                     |||           d S NTnopython)r#   r   r  r  rU   r  r  rs   s       r   test_array_sort_intz!TestNumpySort.test_array_sort_intk  s_    "T"""6**OO%% 	9 	9D##FE48888	9 	9r   c                     t           } t          d          |          }|                                 D ]}|                     |||           d S r  )r#   r   r  r  r  s       r   test_array_sort_floatz#TestNumpySort.test_array_sort_floatr  sa    "T"""6**%%'' 	9 	9D##FE48888	9 	9r   c                 L   t           } t          d          |          }|                                 D ]n}|d d          }t          j                            |           t          j        d t          ||          D                       }|                     |||           od S )NTr  c                      g | ]}t          | S r   complexr  ry   s     r   r  z9TestNumpySort.test_array_sort_complex.<locals>.<listcomp>      BBBQWa[BBBr   )	r#   r   r  r   rE   rT   r4  r}   r  )rU   r  r  realimagrs   s         r   test_array_sort_complexz%TestNumpySort.test_array_sort_complexy  s    "T"""6**%%'' 	9 	9D8DId###8BB#dD//BBBCCD##FE48888		9 	9r   c                     t           } t          d          |          }|                                 D ]}|                     |||           d S r  )r;   r   r  r  r  s       r   test_np_sort_intzTestNumpySort.test_np_sort_int  s_     "T"""6**OO%% 	6 	6D  5555	6 	6r   c                 ,   t           } t          d          |          }dD ]p}t          j                            |          dz  }t	          d          |t          j                            |          dk     <   |                     |||           qd S )NTr  ri  rk  r   rm  rn  )r;   r   r   rE   rp  r  )rU   r  r  rl  rs   s        r   test_np_sort_floatz TestNumpySort.test_np_sort_float  s     "T"""6**$ 	6 	6D9###..4D6;EllD!!t!,,s23  5555	6 	6r   c                 2   t           } t          d          |          }dD ]}t          j                            |          dz  }t          j                            |          dz  }t	          d          |t          j                            |          dk     <   t	          d          |t          j                            |          dk     <   t          j        d t          ||          D                       }|                     |||           d S )	NTr  ri  rk  r   rm  rn  c                      g | ]}t          | S r   r  r  s     r   r  z6TestNumpySort.test_np_sort_complex.<locals>.<listcomp>  r  r   )r;   r   r   rE   rp  r4  r}   r  )rU   r  r  rl  r  r  rs   s          r   test_np_sort_complexz"TestNumpySort.test_np_sort_complex  s    "T"""6**$ 	6 	6D9###..4D9###..4D6;EllD!!t!,,s236;EllD!!t!,,s238BB#dD//BBBCCD  5555	6 	6r   c                 R      fd} |t                       |t                     d S )Nc                      t          d          |           }                                D ]}                    | ||           d S r  )r   r  r  r  r  rs   rU   s      r   r   z-TestNumpySort.test_argsort_int.<locals>.check  s[    &C&&&v..E)) 8 8""65$77778 8r   r'   r>   rU   r   s   ` r   test_argsort_intzTestNumpySort.test_argsort_int  E    	8 	8 	8 	8 	8
 	o !!!!!r   c                       fd} |t           d            |t          d            |t           d            |t          d           d S )Nc           	           t          d          |           }                                D ](}                    | ||t          |                     )d S NTr  r/   )r   r  r  dictr  r/   r  rs   rU   s       r   r   z2TestNumpySort.test_argsort_kind_int.<locals>.check  sq    &C&&&v..E)) > >""65$#')#<#<#<> > > >> >r   Tr  Fr0   r@   r  s   ` r   test_argsort_kind_intz#TestNumpySort.test_argsort_kind_int  |    	> 	> 	> 	> 	> 	"d3333%6666"e4444%777777r   c                 R      fd} |t                       |t                     d S )Nc                      t          d          |           }                                D ]}                    | ||           d S r  )r   r  r  r  s      r   r   z/TestNumpySort.test_argsort_float.<locals>.check  s]    &C&&&v..E))++ 8 8""65$77778 8r   r  r  s   ` r   test_argsort_floatz TestNumpySort.test_argsort_float  r  r   c                       fd} |t           d            |t          d            |t           d            |t          d           d S )Nc           	           t          d          |           }                                D ](}                    | ||t          |                     )d S r  )r   r  r  r  r  s       r   r   z<TestNumpySort.test_argsort_float_supplemental.<locals>.check  ss    &C&&&v..E))++ > >""65$#')#<#<#<> > > >> >r   Tr  Fr  r  s   ` r   test_argsort_float_supplementalz-TestNumpySort.test_argsort_float_supplemental  r  r   c                 R      fd} |t                       |t                     d S )Nc                 @    t          d          |           }                                D ]n}|d d          }t          j                            |           t          j        d t          ||          D                       }                    | ||           od S )NTr  c                      g | ]}t          | S r   r  r  s     r   r  zETestNumpySort.test_argsort_complex.<locals>.check.<locals>.<listcomp>       F F F! F F Fr   )r   r  r   rE   rT   r4  r}   r  )r  r  r  r  rs   rU   s        r   r   z1TestNumpySort.test_argsort_complex.<locals>.check  s    &C&&&v..E))++ 8 8BBBx	!!$'''x F Fc$oo F F FGG""65$7777	8 8r   r  r  s   ` r   test_argsort_complexz"TestNumpySort.test_argsort_complex  sE    	8 	8 	8 	8 	8 	o !!!!!r   c                       fd} |t           d            |t          d            |t           d            |t          d           d S )Nc           	      ^    t          d          |           }                                D ]}}|d d          }t          j                            |           t          j        d t          ||          D                       }                    | ||t          |                     ~d S )NTr  c                      g | ]}t          | S r   r  r  s     r   r  zRTestNumpySort.test_argsort_complex_supplemental.<locals>.check.<locals>.<listcomp>  r  r   r  )	r   r  r   rE   rT   r4  r}   r  r  )r  r/   r  r  r  rs   rU   s         r   r   z>TestNumpySort.test_argsort_complex_supplemental.<locals>.check  s    &C&&&v..E))++ > >BBBx	!!$'''x F Fc$oo F F FGG""65$#')#<#<#<> > > >	> >r   Tr  Fr  r  s   ` r   !test_argsort_complex_supplementalz/TestNumpySort.test_argsort_complex_supplemental  s|    	> 	> 	> 	> 	> 	"d3333%6666"e4444%777777r   c                      t          d          t                    }d}|                     t          j        |          5 } |d            d d d            d S # 1 swxY w Y   d S )NTr  z#.*Argument "a" must be array-like.*)r   r;   assertRaisesRegexr   TypingError)rU   r  r  raisess       r   test_bad_arrayzTestNumpySort.test_bad_array  s    "T"""?333##F$6<< 	E$KKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA!AN)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r  r  .  sJ         3 3 3    / / /+ + + 8: + + + +9 9 99 9 99 9 96 6 66 6 6
6 
6 
6" " "
8 
8 
8" " "
8 
8 
8
" 
" 
"8 8 8    r   r  c                   &    e Zd Zd Zd Zd Zd ZdS )TestPythonSortc                     t           } t          d          |          }dD ]I} ||          \  }}|                     t          |          |           |                     ||           Jd S )NTr  r   rj  r   )rL   r   rq   r3   assertNotEqual)rU   r  r  rl  rs   rets         r   test_list_sortzTestPythonSort.test_list_sort  s    ""T"""6**! 	+ 	+DdID#VD\\3///c****	+ 	+r   c                     t           } t          d          |          }dD ]Q}dD ]L} |||          \  }}|                     t          ||          |           |                     ||           MRd S )NTr  r  FTr6   )rN   r   rq   r3   r  )rU   r  r  rl  r8   rs   r  s          r   test_list_sort_reversez%TestPythonSort.test_list_sort_reverse  s    *"T"""6**! 	/ 	/D" / /!E$NN	c  a!8!8!8#>>>##D#..../	/ 	/r   c                 <   t           } t          d          |          }dD ]x}t          j                            |          dz  }t	          |          } ||          }|                     ||           |                     t          |          |           yd S )NTr  r  rk  r   )r4   r   r   rE   r3   r  r  rS   )rU   r  r  rl  rs   r  r  s          r   test_sortedzTestPythonSort.test_sorted   s    "T"""6**! 	1 	1D9###..4Dd||H%++C##C222T

C0000	1 	1r   c                 F   t           } t          d          |          }d}t          j                            |          dz  }dD ]X}t	          ||          } |||          }|                     ||           |                     t          |          |           Yd S )NTr  r   rk  r   r  r6   )r9   r   r   rE   r3   r  r  rS   )rU   r  r  rl  rs   r8   r  r  s           r   test_sorted_reversez"TestPythonSort.test_sorted_reverse  s    '"T"""6**yT**S0 	1 	1AdA...H%a..C##C222T

C0000		1 	1r   N)r   r   r   r  r  r  r  r   r   r   r  r    sP        + + +/ / /	1 	1 	1
1 
1 
1 
1 
1r   r  c                        e Zd Zd Zd Zd ZdS )TestMergeSortc                 D    t           j                            d           d S )NiA  r  r  s    r   r  zTestMergeSort.setUp  s    
	sr   c                     t           j                            |||          }t          j        |d          } ||          }t           j                            ||           d S )Nr*   r+   )r   rE   r  r&   testingassert_equal)rU   sorterlowhighcountdataexpectr  s           r   check_argsort_stablez"TestMergeSort.check_argsort_stable  sZ    y  dE22D{333fTll

,,,,,r   c                     g d}t          d          }|j        t          fd          }|D ]} | j        |g|R   d S )N))r`   r   )r   rQ   )r   rQ   e   )r   r   i  T)
is_argsortc                      |           S r   r   )r  toplevels    r   rz   z3TestMergeSort.test_argsort_stable.<locals>.<lambda>,  s    ((3-- r   )r   run_mergesortr   r  )rU   arglistimpr  r>  r  s        @r   test_argsort_stablez!TestMergeSort.test_argsort_stable#  s|    
 
 
 !D111$////00 	5 	5D%D%f4t44444	5 	5r   N)r   r   r   r  r  r  r   r   r   r  r    sA          - - -5 5 5 5 5r   r  c                     | S r   r   rx   s    r   rz   rz   1  s     r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestSortSlashSortedWithKeyc                 \   g d}t           d             }t           dd            }|                      ||d d                    |                    |d d                               |                      ||d d          |          |                    |d d          |                     d S )N   re      re   r   	   c                     d| z  S Ng      ?r   zs    r   external_keyz8TestSortSlashSortedWithKey.test_01.<locals>.external_key:      6Mr   c                 x    | d d          }|                     |           t          | d d          |          |fS Nr{   r    r3   ry   r|   new_xs      r   fooz/TestSortSlashSortedWithKey.test_01.<locals>.foo>  C    aaaDEJJ3J!AAA$C(((%//r   r   r   r  py_funcrU   r   r  r&  s       r   test_01z"TestSortSlashSortedWithKey.test_016  s    		 	 
	 
	0 	0 	0 
	0
 	AaaaD		3;;qt+<+<===AaaaD, 7 7 #AaaaD, ? ?	A 	A 	A 	A 	Ar   c                     g d}t           d             }|                      ||d d                    |                    |d d                               d S )Nr  c                 ~    d }| d d          }|                     |           t          | d d          |          |fS )Nc                     d| z  S r  r   r  s    r   closure_keyzDTestSortSlashSortedWithKey.test_02.<locals>.foo.<locals>.closure_keyN  s    Avr   r{   r#  )ry   r/  r%  s      r   r&  z/TestSortSlashSortedWithKey.test_02.<locals>.fooL  sR      aaaDEJJ;J'''!AAA$K000%77r   r(  )rU   r   r&  s      r   test_02z"TestSortSlashSortedWithKey.test_02H  sh    		8 	8 
	8 	AaaaD		3;;qt+<+<=====r   c                     g d}d }|                        |t                    |d d                      |t                    |d d                               d S )Nr  c                 8    | d             | fd            }|S )Nc                 x    | d d          }|                     |           t          | d d          |          |fS r"  r#  )ry   r   r%  s      r   barz<TestSortSlashSortedWithKey.test_03.<locals>.gen.<locals>.bar\  sC    !!!

t
$$$ad---u44r   c                 "    d } | |          S )Nc                     d| z  S r  r   r  s    r   closure_escapee_keyzYTestSortSlashSortedWithKey.test_03.<locals>.gen.<locals>.foo.<locals>.closure_escapee_keyd      6Mr   r   )ry   r7  r4  s     r   r&  z<TestSortSlashSortedWithKey.test_03.<locals>.gen.<locals>.foob  s%    " " "s11222r   r   )compilerr&  r4  s     @r   genz/TestSortSlashSortedWithKey.test_03.<locals>.genZ  sH    5 5 X5
 3 3 3 3 X3
 Jr   )r  r   nop_compiler)rU   r   r:  s      r   test_03z"TestSortSlashSortedWithKey.test_03V  so    	 	 	  		D		!AAA$1B\1B1B1QQQ41H1HIIIIIr   c                 \   g d}t           d             }t           dd            }|                      ||d d                    |                    |d d                               |                      ||d d          |          |                    |d d          |                     d S )Nr   r8   Br8   CAc                 *    |                                  S r   upperr  s    r   r  z8TestSortSlashSortedWithKey.test_04.<locals>.external_keyp      7799r   c                 x    | d d          }|                     |           t          | d d          |          |fS r"  r#  r$  s      r   r&  z/TestSortSlashSortedWithKey.test_04.<locals>.foot  r'  r   r   r(  r*  s       r   test_04z"TestSortSlashSortedWithKey.test_04l  s    %%%		 	 
	 
	0 	0 	0 
	0
 	AaaaD		3;;qt+<+<===AaaaD, 7 7 #AaaaD, ? ?	A 	A 	A 	A 	Ar   c           	         g d}t           d             }t           dd            }t          j        d |fd          D ]K\  }}|                      ||d d          ||          |                    |d d          ||                     Ld S )Nr>  c                 *    |                                  S r   rC  r  s    r   r  z8TestSortSlashSortedWithKey.test_05.<locals>.external_key  rE  r   Fc                 |    | d d          }|                     ||           t          | d d          ||          |fS Nr|   r7   r#  ry   r|   r7   r%  s       r   r&  z/TestSortSlashSortedWithKey.test_05.<locals>.foo  sG    aaaDEJJ3J0001QQQ4S':::EBBr   )TFre   ir   NF)r   r   r   r  r)  )rU   r   r  r&  r|   revs         r   test_05z"TestSortSlashSortedWithKey.test_05~  s    %%%		 	 
	 
	C 	C 	C 
	C
 ")4*>*BD D 	A 	AHC##CC!!!c3$7$7$'KK!!!c3$?$?A A A A	A 	Ar   c                    g d}t           d             }|                     t          j                  5 }d} ||d d          |           d d d            n# 1 swxY w Y   d}|                     |t          |j                             d S )Nr  c                     |rd }nd }| d d          }|                     |           t          | d d          |          |fS )Nc                     d| z  S r  r   r  s    r   r/  zQTestSortSlashSortedWithKey.test_optional_on_key.<locals>.foo.<locals>.closure_key  r8  r   r{   r#  )ry   	predicater/  r%  s       r   r&  z<TestSortSlashSortedWithKey.test_optional_on_key.<locals>.foo  sf     #" " " " #aaaDEJJ;J'''1QQQ4[111599r   Tz<Key must concretely be None or a Numba JIT compiled functionr   assertRaisesr   r  assertInstr	exception)rU   r   r&  r  TFr  s         r   test_optional_on_keyz/TestSortSlashSortedWithKey.test_optional_on_key  s    	
	: 
	: 

	: v122 	fBC!!!bMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 Mc3v/0011111s   AAAc                 :   t           dd            }t           dd            }t           d             }g d}||fD ]}|                     t          j                  5 } ||d           d d d            n# 1 swxY w Y   d}|                     |t          |j                             |                     t          j                  5 } |||d	
           d d d            n# 1 swxY w Y   d}|                     |t          |j                             d S )NFc                 6    t          | d d          ||          S rK  r2   )ry   r|   r7   s      r   
foo_sortedzETestSortSlashSortedWithKey.test_exceptions_sorted.<locals>.foo_sorted  s    !AAA$C9999r   c                 H    | d d          }|                     ||           |S rK  r   rM  s       r   foo_sortzCTestSortSlashSortedWithKey.test_exceptions_sorted.<locals>.foo_sort  s*    aaaDEJJ3J000Lr   c                     d| z  S r  r   r  s    r   r  zGTestSortSlashSortedWithKey.test_exceptions_sorted.<locals>.external_key  r   r   r  illegalr{   z1Key must be None or a Numba JIT compiled functionzgo backwardsrL  z$an integer is required for 'reverse'rN  rU  )rU   r^  r`  r  r   implr  r  s           r   test_exceptions_sortedz1TestSortSlashSortedWithKey.test_exceptions_sorted  s   		: 	: 	: 
	: 
	 	 	 
	
 
	 	 
	 z* 	9 	9D ""6#566 '&QI&&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' IFMM&#f&6"7"7888 ""6#566 B&QL.AAAAB B B B B B B B B B B B B B B <FMM&#f&6"7"78888	9 	9s$   A66A:	=A:	
C%%C)	,C)	N)
r   r   r   r+  r0  r<  rG  rP  r[  rd  r   r   r   r  r  4  s        A A A$> > >J J J,A A A$A A A&2 2 2. 9  9  9  9  9r   r  c                       e Zd ZdZd ZdS )TestArrayArgsortzTests specific to array.argsortc                    t           d             }|                     t          j                  5 } |d           d d d            n# 1 swxY w Y   d}|                     |t          |j                             t           d             }|                     t          j                  5 } |             d d d            n# 1 swxY w Y   d}|                     |t          |j                             d S )Nc                 V    t          j        d                              |            d S )Nr   r+   r   aranger&   r+   s    r   nonliteral_kindz9TestArrayArgsort.test_exceptions.<locals>.nonliteral_kind  s'    IaLL  d +++++r   r-   z"kind" must be a string literalc                  V    t          j        d                              d           d S )Nr    )r&  ri  r   r   r   unsupported_kwargz;TestArrayArgsort.test_exceptions.<locals>.unsupported_kwarg  s'    IaLL  R (((((r   zUnsupported keywords: ['foo']rU  )rU   rk  r  r  rn  s        r   test_exceptionsz TestArrayArgsort.test_exceptions  s{   		, 	, 
	, v122 	)fOK(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 3fc&"233444		) 	) 
	) v122 	 f	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  1fc&"23344444s#   AAA,CC
CN)r   r   r   __doc__ro  r   r   r   rf  rf    s)        ))5 5 5 5 5r   rf  __main__)F)?r  r   rg   rE   r   unittestnumpyr   numbar   r   
numba.corer   r   numba.tests.supportr   r   numba.misc.quicksortr	   r
   numba.misc.mergesortr   numba.misc.timsortr   r   r   r   r   r-  r9  jit_list_timsortrC  ru  r{  r#   r'   r0   r4   r9   r;   r>   r@   rL   rN   objectrP   r   r,  r/  r;  rE  rI  rt  rx  r}  r  r  r  r;  r  rf  r   mainr   r   r   <module>r}     s          



              $ $ $ $ $ $ $ $ 9 9 9 9 9 9 9 9 F F F F F F F F 3 3 3 3 3 3 J J J J J J J J J J  # # # "/.11"??33 ##N33 $$_55   """"$$    - - - -  " " "    1 1 1 1    M M M M Mf M M M`DJ DJ DJ DJ DJo DJ DJ DJN
    OX   - - - - -/8 - - -    f   87 7 7 7 7( 7 7 70E> E> E> E> E> E> E> E>P    /   / / / / /+X / / /`3 `3 `3 `3 `3/8 `3 `3 `3Dz z z z zH z z zz*1 *1 *1 *1 *1X *1 *1 *1Z5 5 5 5 5H 5 5 52 zT9 T9 T9 T9 T9( T9 T9 T9n5 5 5 5 5 5 5 58 zHMOOOOO r   