
    xKg                     :   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 d dlmZ d dl	Z
d dlmZmZmZmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ d dlm Z! d dl"Z"e!dz
  Z#	 d dl$Z$	 d dl&Z& ejN                         dk(  Z(d Z)d Z*d Z+d1dZ,d2dZ-d3dZ.d3dZ/d4dZ0 G d de      Z1 G d de1      Z2 G d de1      Z3 G d de3      Z4 G d d e      Z5 G d! d"e      Z6 G d# d$e"j*                        Z7 G d% d&e"j*                        Z8ed5d'       Z9ed4d(       Z:ed)        Z;ee;fd*       Z<d+ Z= G d, d-ee"j*                        Z> G d. d/e"j*                        Z?e@d0k(  r e"j                          yy# e%$ r dZ$Y w xY w# e%$ r dZ&Y w xY w)6    N)chain)StringIO)njitjittypeof	vectorize)typeserrors)_dispatcher)TestCasecaptured_stdout)as_dtype)
Dispatcher)overload)needs_lapackSerialMixin)_TIMEOUTg      N@armv7lc                     | S N xs    _/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_dispatcher.pydummyr   '   s    H    c                     | |z   S r   r   r   ys     r   addr    +   s    q5Lr   c                     | |z
  |z   S r   r   r   r   zs      r   addsubr$   /       q519r   c                     | |z
  |z   S r   r   r"   s      r   addsub_defaultsr'   3   r%   r   c                     | ||fS r   r   r"   s      r   star_defaultsr)   7   s    a7Nr   c                 J    t        | t        j                        rd }|S d }|S )Nc                     | |z   S r   r   r   s     r   implzgenerated_usecase.<locals>.impl=       q5Lr   c                     | |z
  S r   r   r   s     r   r,   zgenerated_usecase.<locals>.impl@   r-   r   
isinstancer	   Complexr   r   r,   s      r   generated_usecaser3   ;   s&    !U]]#	
 K	Kr   c                 L    t        | t        j                        rd }|S dd}|S )Nc                     | S r   r   r   s    r   r,   z#bad_generated_usecase.<locals>.implG       Hr   c                     | |z
  S r   r   r   s     r   r,   z#bad_generated_usecase.<locals>.implJ   r-   r   )   r/   r2   s      r   bad_generated_usecaser9   E   s&    !U]]#	
 K	Kr   c                 b   t        |t        j                  j                  t        j                  j                  f      rt        j                  d | |fD         nMt        |t        j                  t        j                  f      rt        |      nt        dt        |      z        dfd	}|S )Nc              3   n   K   | ]-  }t        j                  |j                  j                         / y wr   )npdtypename).0arys     r   	<genexpr>z*dtype_generated_usecase.<locals>.<genexpr>Q   s)      %6.4s &(XXciinn%=.4s   35zUnhandled Type %sc                 F    t        j                  | j                        S Nr=   )r<   onesshape)abr=   	out_dtypes      r   _fnz$dtype_generated_usecase.<locals>._fnX   s    wwqwwi00r   r   )r0   r	   miscNoneTypeOmittedr<   result_typeDTypeNumberClassr   	TypeErrortype)rG   rH   r=   rJ   rI   s       @r   dtype_generated_usecaserS   O   s    %%**--uzz/A/ABCNN %6/0!f%6 7		EEKK):):;	<UO	+d5k9::1 Jr   c                   $    e Zd Z ed      Zd Zy)BaseTestTnopythonc                 T      fd} t        di  j                        |fS )Nc                  J     | i |} | i |}j                  ||       y r   )assertPreciseEqual)argskwargsexpectedresultfpyfuncselfs       r   checkz$BaseTest.compile_func.<locals>.checkc   s1    t.v.H''F##FH5r   r   )r   jit_args)ra   r`   rb   r_   s   `` @r   compile_funczBaseTest.compile_funcb   s+    	6 !C $-- (%xr   N)__name__
__module____qualname__dictrc   rd   r   r   r   rU   rU   ^   s    T"Hr   rU   c                      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e ej&                  ed      d               Z ej&                  ed      d        Ze ej&                  ed      d               Zd Zd Zy)TestDispatcherc                     t         d        }t         d        }| j                  ||k(  d       | j                  ||k(  d       | j                  |d k(  d       y )Nc                     | S r   r   r   s    r   fooz)TestDispatcher.test_equality.<locals>.foon       Hr   c                     | S r   r   r   s    r   barz)TestDispatcher.test_equality.<locals>.barr   rn   r   TFr   assertEqual)ra   rm   rp   s      r   test_equalityzTestDispatcher.test_equalitym   sf    		 
	 
	 
	 	T*U+e,r   c                     t         d        } |d       |j                  j                         \  }| j                  |j                  j
                  |j                  j
                         y )Nc                     | S r   r   r   s    r   rm   z+TestDispatcher.test_dyn_pyfunc.<locals>.foo~   rn   r      )r   	overloadsvaluesrr   entry_pointrf   py_func)ra   rm   crs      r   test_dyn_pyfunczTestDispatcher.test_dyn_pyfunc}   sU    		 
	 	A}}##%22CKK4J4JKr   c                 *    t         d        } |        y )Nc                       yNrv   r   r   r   r   rm   z,TestDispatcher.test_no_argument.<locals>.foo   s    r   r   ra   rm   s     r   test_no_argumentzTestDispatcher.test_no_argument   s    		 
	 	r   c                 h    t        d      t              }| j                   |dd      t        dd             | j                   |dd      t        dd             | j                   |dd      t        dd             | j                   |dd      t        dd              t        d	d      t              }| j                   |dd      t        dd             | j                   |dd      t        d
d             | j                  t              5   |dd       d d d        y # 1 sw Y   y xY w)NTrV   {   i  g(@gF@y        F@l    F: z(i4, i4)   -   )r   r    rZ   assertRaisesrQ   )ra   c_adds     r   test_coerce_input_typesz&TestDispatcher.test_coerce_input_types   s     #T"3'c3S#?dD 13tT?CdE 2Ce4DEk3 7[#9NO /J.s3c3S#?dD 13r2;?y)$ *))s   
D((D1c                 .   t         d        }d}d}| j                   |||      ||z          | j                  t        |j                        d       | j                   |||      ||z          | j                  t        |j                        d       | j                   |||      ||z          | j                  t        |j                        d       | j                   |dd      ||z          | j                  t        |j                        dd       y)	z8Test compiling new version in an ambiguous case
        c                     | |z   S r   r   rG   rH   s     r   rm   z6TestDispatcher.test_ambiguous_new_version.<locals>.foo       q5Lr   rv         ?         zdidn't compile a new versionN)r   assertAlmostEqualrr   lenrw   )ra   rm   INTFLTs       r   test_ambiguous_new_versionz)TestDispatcher.test_ambiguous_new_version   s     
	 
	 s3}cCi8S]]+Q/s3}cCi8S]]+Q/s3}cCi8S]]+Q/ 	s1ay#)4S]]+Q 1: 	;r   c                     g t         d         fd}t        d      D cg c]  }t        j                  |       }}|D ]  }|j	                           |D ]  }|j                            j                         yc c}w )zz
        Test that (lazy) compiling from several threads at once doesn't
        produce errors (see issue #908).
        c                     | dz   S r   r   r   s    r   rm   z%TestDispatcher.test_lock.<locals>.foo   r   r   c                      	 j                   d      d       y # t        $ r}  j                  |        Y d } ~ y d } ~ ww xY wNrv   r   )rr   	Exceptionappend)er
   rm   ra   s    r   wrapperz)TestDispatcher.test_lock.<locals>.wrapper   s=    !  Q+ !a  !s    	A<A   )targetN)r   range	threadingThreadstartjoinassertFalse)ra   r   ithreadstr
   rm   s   `    @@r   	test_lockzTestDispatcher.test_lock   s    
 		 
		! >C2YGY9##73YGAGGI AFFH   Hs   Bc                     t        d      t              }| j                   |dd      d       | j                  t	        |j
                        d|j
                          t        ddg      t              }| j                   |dd      d       | j                   |dd      d       | j                   |t        j                  d      d      d	       | j                  t              5 } |d
d
       d d d        | j                  dt        j                               | j                  t	        |j
                        d|j
                          t        ddg      t              }| j                   |t        j                  d      t        j                  d            d       | j                   |dd      d        t        g d      t              }| j                  t              5 } |dd       d d d        | j                  t        |j                        d       | j                  dt        |j                               y # 1 sw Y   WxY w# 1 sw Y   axY w)N(int64,int64)r         @r   rv   z(float64,float64)r   g      @      @              ?zNo matching definitionz(float32,float32)g      `>      ?g     ?)z(float32,float64)z(float64,float32)r          @zAmbiguous overloading for <function add [^>]*> \(float64, float64\):\n\(float32, float64\) -> float64\n\(float64, float32\) -> float64int64)r   r    rZ   rr   r   rw   r<   int32r   rQ   assertInstr	exceptionfloat32assertRegexassertNotInra   r_   cms      r   test_explicit_signaturesz'TestDispatcher.test_explicit_signatures   s    C %#sQ/Q[[)1akk:7C"567<!Q+#sS1"((1+s 3S9y)Rb"I *.BLL0ABQ[[)1akk:;C$&9:;C@"**Q-F1C DcJ!V.@A#C " ##&( y)Rc3K * 	/	
 	#bll"341 *) *)s   )
I+
IIIc                 v   d}| j                  t              5 } t        d      t               d d d        | j	                  |dz  t        j                               | j                  t              5 } t        d      t               d d d        | j	                  |dz  t        |j                               | j                  t              5 } t        d      t               d d d        | j	                  |dz  t        |j                                t        dd	      t               | j                  t              5 } t        dd	      t               d d d        | j	                  |dz  t        |j                               y # 1 sw Y   ]xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   XxY w)
NzKSignature mismatch: %d argument types given, but function takes 2 argumentsz()r   z(intc,)rv   z(intc,intc,intc)r   Tforceobj)r   rQ   r   r    r   r   r   )ra   tmplr   s      r   test_signature_mismatchz&TestDispatcher.test_signature_mismatch   s:   $y)RCIcN *dQhBLL 12y)RC	N3 *dQhBLL 12y)R#C"#C( *dQhBLL 12 D4 %y)R)C	D)#. *dQhBLL 12 *) *) *)
 *)s/   F	3FF# F/	FF #F,/F8c                      t        d      t              }| j                  t              5 } |dd       d d d        | j	                  t        j                        d       y # 1 sw Y   /xY w)Nz(intc,intc)r   zBNo matching definition for argument type(s) complex128, complex128)r   r    r   rQ   rr   r   r   r   s      r   test_matching_error_messagez*TestDispatcher.test_matching_error_message  sX    Cs#y)Rb"I *R\\*2	3 *)s   
A##A,c                 h   t         d        }|j                  d       |j                          | j                  t              5 }|j                  d       d d d        | j                  t        j                        d       | j                  t        |j                        d       y # 1 sw Y   TxY w)Nc                     | S r   r   rG   s    r   rm   z5TestDispatcher.test_disabled_compilation.<locals>.foo  rn   r   
(float32,)(int32,)compilation disabledrv   )
r   compiledisable_compiler   RuntimeErrorrr   r   r   r   
signaturesra   rm   raisess      r   test_disabled_compilationz(TestDispatcher.test_disabled_compilation  s    		 
	 	L!|,KK
# -V--.0FGS^^,a0 -,s   B((B1c                 4   t        ddg      d        }| j                  t              5 }|j                  d       d d d        | j	                  t        j                        d       | j	                  t        |j                        d       y # 1 sw Y   TxY w)Nr   r   c                     | S r   r   r   s    r   rm   zBTestDispatcher.test_disabled_compilation_through_list.<locals>.foo  rn   r   z(complex64,)r   r   )	r   r   r   r   rr   r   r   r   r   r   s      r   &test_disabled_compilation_through_listz5TestDispatcher.test_disabled_compilation_through_list  s    	lJ'	(	 
)	 |,KK' -V--.0FGS^^,a0 -,s   BBc                 
   t        dg      d        t         fd       }| j                  t        j                        5 } |        d d d        d}| j	                  t        j                        |       y # 1 sw Y   1xY w)Nz(intp,)c                     | S r   r   r   s    r   rm   zATestDispatcher.test_disabled_compilation_nested_call.<locals>.foo%  rn   r   c                  L      d         t        j                  d             y r   )r<   rE   )rm   s   r   rp   zATestDispatcher.test_disabled_compilation_nested_call.<locals>.bar)  s    F
Or   z?.*Invalid use of.*with parameters \(array\(float64, 1d, C\)\).*)r   r   r
   TypingErrorr   r   r   )ra   rp   r   mrm   s       @r   %test_disabled_compilation_nested_callz4TestDispatcher.test_disabled_compilation_nested_call$  s~    	i[		 
	 
	 
	 v112fE 3 OV--.2	 32s   A99Bc                    d }d}| j                  t              5 }t        j                  g        ddd       | j	                  |t        j                                t        d      |      | j                   g       g         t        d      |      }| j                  t              5 } |g        ddd       | j	                  |t        |j                               t        d      fd       }| j                   |       g        |j                  j                         \  }| j                  t        |j                        d       y# 1 sw Y   #xY w# 1 sw Y   xY w)	z
        Failure in computing the fingerprint cannot affect a nopython=False
        function.  On the other hand, with nopython=True, a ValueError should
        be raised to report the failure with fingerprint.
        c                     | S r   r   r   s    r   rm   z4TestDispatcher.test_fingerprint_failure.<locals>.foo:  r6   r   z(cannot compute fingerprint of empty listNTr   rV   c                  P    t                g } t        d      D ]
  } |       }  | S )N
   )objectr   )r   r   objmode_foos     r   rp   z4TestDispatcher.test_fingerprint_failure.<locals>.barL  s)    HA2YN Hr   rv   )r   
ValueErrorr   compute_fingerprintr   r   r   r   rr   rw   rx   r   lifted)ra   rm   errmsgr   
strict_foorp   r{   r   s          @r   test_fingerprint_failurez'TestDispatcher.test_fingerprint_failure4  s!   	 <z*f++B/ +fc&"2"234(c4(-R"-'S$',
z*frN +fc&"2"234 
d		 
	 	#}}##%RYY+1 +* +*s   E0	E E E)c                 f   t        d      d        }| j                   |d      d       t        j                  }t        j                  j                          t        |      }t        j                  |      }| j                  |dz   t        |             t        j                  |      }| j                  |dz   t        |             | j                  ||       t        |      }~~| j                  |dz   t        |             t        j                  |      }| j                  |t        |             t        j                  |      }~t        j                  j                          | j                  |t        |             t        j                  |       | j                   |       d       y)z:
        Test serialization of Dispatcher objects
        TrV   c                     | dz   S r   r   r   s    r   rm   z.TestDispatcher.test_serialization.<locals>.foo]  r   r   rv   r   N)r   rr   r   _memo_recentclearr   pickledumpsloadsassertIsidweakrefref)	ra   rm   memo	memo_sizeserialized_foofoo_rebuiltid_orignew_foor   s	            r   test_serializationz!TestDispatcher.test_serializationY  sY    
d		 
	 	Q#   "I	  c*QD	2 ll>2QD	2c;' [/QD	2,,~."W+. kk'"  "CI. 	^$ceT"r   zUnaligned loads unsupportedc                   	
 d 	 t        d      	      
dt        t        j                              t        j                  }t        j
                         j                   |       j                  z  }t        j                  |z  dz   |      }|d d j                  t        j
                        j                        }|dd  j                  t        j
                        j                        }|j                  }|j                  }	
fd} |d	|        |d
|        |d|        |d|       y )Nc                 B    t         j                  j                  | d      S r   r<   linalgmatrix_powerr   s    r   rm   z:TestDispatcher.test_misaligned_array_dispatch.<locals>.foo  s    99))!Q//r   TrV   @   rv   rD   c                     t        j                  t         j                        j                        |d d d d f<    |      } |      }t         j                  j                  ||       y rC   r<   arange
complex128reshapetestingassert_allcloser>   rG   r]   gotrm   jitfoonrs       r   rb   z<TestDispatcher.test_misaligned_array_dispatch.<locals>.check  sR    ii7??1EAadG1vH)CJJ&&x5r   C_contig_alignedF_contig_alignedC_contig_misalignedF_contig_misalignedr   intr<   sqrtint8r  itemsizer  viewr  Tra   dtcounttmpr  r  r  r  rb   rm   r	  r
  r  s            @@@@r   test_misaligned_array_dispatchz-TestDispatcher.test_misaligned_array_dispatch  s   	0 $d#C(
OWW((BDMM9iiE	AR0 s8==7??1E!!"gll2==9AA!QG+--133	6 	 "23 "23#%89#%89r   c                   	
 d 	 t        d      	      
dt        t        j                              t        j                  }t        j
                         j                   |       j                  z  }t        j                  |z  dz   |      }|d d j                  t        j
                        j                        }|dd  j                  t        j
                        j                        }|j                  }|j                  }d	
fd	} |d	|d
        |d|d
        |d|d
        |d|d
       y )Nc                 ,    t        j                  |       S r   )r<   sumr   s    r   rm   z?TestDispatcher.test_immutability_in_array_dispatch.<locals>.foo  s    66!9r   TrV   r   rv   rD   r   c                    t        j                  t         j                        j                        |d d d d f<   |rd|j                  _         |      } |      }t         j                  j                  ||       y )NrD   F)r<   r  r  r  flags	writeabler  r  )	r>   rG   disable_write_bitr]   r  rm   r	  r
  r  s	        r   rb   zATestDispatcher.test_immutability_in_array_dispatch.<locals>.check  sa    ii7??1EAadG $)!1vH)CJJ&&x5r   r  )r"  r  r  r  )Fr  r  s            @@@@r   #test_immutability_in_array_dispatchz2TestDispatcher.test_immutability_in_array_dispatch  s   	 $d#C(
OWW((BDMM9iiE	AR0 s8==7??1E!!"gll2==9AA!QG+--133	6 	6 	 "2dK "2dK#%8 $	&#%8 $	&r   c                    
 d 
 t        d      
       fd}ddt        j                  }t        j                         j                   |       j                  z  }t        j
                  |z  dz   |      }|d d	 j                  t        j                        j                        } ||d
d       |dd  j                  t        j                        j                        } ||d
d       |j                  } ||dd       |j                  } ||dd       
fd}	 |	d|        |	d|        |	d|        |	d|       y )Nc           
      \    t         j                  j                  | ddddd d d d f   d      S Nr   rv   r   r   s    r   rm   zITestDispatcher.test_misaligned_high_dimension_array_dispatch.<locals>.foo  s+    99))!Aq!Q1,<*=qAAr   TrV   c                     j                  | j                  j                  |       |dk(  r&j                  | j                  j                  d       |dk(  r'j                  | j                  j                  d       y y )NCTF)rr   r   alignedc_contiguousf_contiguous)arrlayoutr*  ra   s      r   check_propertieszVTestDispatcher.test_misaligned_high_dimension_array_dispatch.<locals>.check_properties  sd    SYY..8}  !7!7>}  !7!7> r   i  r   rv   rD   r   r(  Fr)  c                     t        j                  t         j                        j                        |d d d d f<    |      } |      }t         j                  j                  ||       y rC   r  r  s       r   rb   zKTestDispatcher.test_misaligned_high_dimension_array_dispatch.<locals>.check  s\    ii71aAq) adG1vH)CJJ&&x5r   r  r  r  r  )	r   r<   r  r  r  r  r  r  r  )ra   r/  r  r  r  r  r  r  r  rb   rm   r	  r
  r  s   `         @@@@r   -test_misaligned_high_dimension_array_dispatchz<TestDispatcher.test_misaligned_high_dimension_array_dispatch  sM   	B $d#C(	? WW((BDMM9iiE	AR0 s8==7GAq!Q1% 	)35!!"gll2==9GAq!Q1% 	,c59+--)35133,c59	6 	#%89 "23 "23#%89r   c                 D   d } t        d      |      } |t        j                  d              |t        j                  d              |t        j                  d             | j                  t        |j                        d       t        j                  ft        j                  ft        j                  fg}| j                  |j                  |        t        t        j                  fgd      |      } |t        j                  d              |t        j                  d              |t        j                  d             | j                  t        |j                        d       t        j                  fg}| j                  |j                  |       y )	Nc                     | S r   r   r   s    r   rm   z@TestDispatcher.test_dispatch_recompiles_for_scalars.<locals>.foo  r6   r   TrV   y      ?       @r   Fr   rv   )	r   r<   r  r   bool_rr   r   r   r	   )ra   rm   r	  expected_sigss       r   $test_dispatch_recompiles_for_scalarsz3TestDispatcher.test_dispatch_recompiles_for_scalars
  s1   	 $d#C(r}}V$%rxx|rxxV../3**,u{{nu{{nM**M: ;u'')*T:3?r}}V$%rxx|rxxV../3**,-**M:r   c                 (   t        d      d        }| j                  t              5 }t        |       d d d        t        j                        }| j                  d|       | j                  d|       | j                  d|       | j                  t              5 }t        t               d d d        t        |j                        }| j                  d|       | j                  t        t               |       y # 1 sw Y   xY w# 1 sw Y   ]xY w)NTrV   c                     | S r   r   r   s    r   rm   zITestDispatcher.test_dispatcher_raises_for_invalid_decoration.<locals>.foo)  rn   r   z8A jit decorator was called on an already jitted functionrm   z.py_funcz&The decorated object is not a function)r   r   rQ   r   r   r   rU   rR   )ra   rm   r   err_msgs       r   -test_dispatcher_raises_for_invalid_decorationz<TestDispatcher.test_dispatcher_raises_for_invalid_decoration&  s     
d		 
	 y)VH *f&&'F	QeW%j'*y)VM *f&&'>Hh(73 *) *)s   C<D<DDN)re   rf   rg   rs   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   unittestskipIf
_is_armv7lr  r#  r1  r6  r:  r   r   r   rj   rj   k   s    - L$;*!0$5L3$3
113 #,J+#Z X__Z!>?$: @ $:L X__Z!>?&& @&&P X__Z!>?/: @ /:b;84r   rj   c                   "    e Zd ZdZd Zd Zd Zy)TestSignatureHandlingz<
    Test support for various parameter passing styles.
    c                    | j                  t              \  }} |ddd        |ddd        |ddd       | j                  t        |j                        d       | j                  t              5 } |dddd	       d
d
d
       | j                  dt        j                               | j                  t              5 } |        d
d
d
       | j                  dt        |j                               | j                  t              5 } |ddd       d
d
d
       | j                  dt        |j                               y
# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   GxY w)z?
        Test passing named arguments to a dispatcher.
        r   r   r   r#   r   r"   rv   r8      r   r#   N%too many arguments: expected 3, got 4z'not enough arguments: expected 3, got 0r   zmissing argument 'z')
rd   r$   rr   r   rw   r   rQ   r   r   r   ra   r_   rb   r   s       r   test_named_argsz%TestSignatureHandling.test_named_argsA  s    $$V,5a2aBQ"Q[[)1-y)Raa1 *=",,'	)y)RC *?",,'	)y)RaaL *,c",,.?@ *) *) *)s$   3EEEEEE'c                    | j                  t              \  }} |ddd        |ddd        |ddd        |dd        |dd        |dd        |d        |d       | j                  t              5 } |ddd	d
       ddd       | j	                  dt        j                               | j                  t              5 } |        ddd       | j	                  dt        |j                               | j                  t              5 } |d	d
       ddd       | j	                  dt        |j                               y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   GxY w)z?
        Test omitting arguments with a default value.
        r   r   r   rA  r"   r#   r   r   r8   rB  rC  NrD  z0not enough arguments: expected at least 1, got 0zmissing argument 'x')rd   r'   r   rQ   r   r   r   rF  s       r   test_default_argsz'TestSignatureHandling.test_default_argsX  s(    $$_55a2aBQ"a2aQa
y)Raa1 *=",,'	)y)RC *H",,'	)y)RQK *,c",,.?@ *) *) *)s$   <EEE&EE#&E/c                    | j                  t              \  }} |d        |dd        |ddd        |dddd        |ddddd        |d        |dd        |dd       | j                  t              5 } |ddd       d	d	d	       | j	                  d
t        j                               | j                  t              5 } |ddd       d	d	d	       | j	                  d
t        |j                               | j                  t              5 } |dd       d	d	d	       | j	                  d
t        |j                               y	# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   GxY w)zJ
        Test a compiled function with starargs in the signature.
        r      r8   rB     r   r   rE  Nz!some keyword arguments unexpectedrI  )rd   r)   r   rQ   r   r   r   rF  s       r   test_star_argsz$TestSignatureHandling.test_star_argss  s+    $$]35aaaAaAqaAq!
Qa1y)RaaL *93r||;LMy)RaaL *93r||;LMy)Ra1I *93r||;LM *) *) *)s$   =EEE*EE'*E3N)re   rf   rg   __doc__rG  rJ  rN  r   r   r   r?  r?  <  s    A.A6Nr   r?  c                   "    e Zd ZdZ ed      Zy)TestSignatureHandlingObjectModez<
    Sams as TestSignatureHandling, but in object mode.
    Tr   N)re   rf   rg   rO  rh   rc   r   r   r   rQ  rQ    s     T"Hr   rQ  c                       e Zd Zd Zd Zd Zd ZddZd Zd Z	d Z
d	 Z ej                  ed
u d       ej                  ed
u d      d               Zd Zd Zy
)TestDispatcherMethodsc                    dt         fd       }| j                   |d      d       | j                   |d      d       | j                  t        |j                        d       d| j                   |d      d       |j                          | j                  t        |j                        d       | j                   |d      d       | j                   |d      d       y )Nrv   c                     | z   S r   r   r   closures    r   rm   z1TestDispatcherMethods.test_recompile.<locals>.foo      w;r   r   r   r   r   r   )r   rZ   rr   r   r   	recompilera   rm   rW  s     @r   test_recompilez$TestDispatcherMethods.test_recompile  s    		 
	A*C#.S^^,a0A*S^^,a0A*C#.r   c                 D   dt        d      fd       }| j                   |d      d       | j                   |d      d       d| j                   |d      d       |j                          | j                   |d      d       | j                   |d      d       y )Nrv   zint32(int32)c                     | z   S r   r   rV  s    r   rm   z<TestDispatcherMethods.test_recompile_signatures.<locals>.foo  rX  r   r   r   r   )r   rZ   rY  rZ  s     @r   test_recompile_signaturesz/TestDispatcherMethods.test_recompile_signatures  s    	^		 
	A*C!,A*A*C!,r   c                 >   t         d        } |dd        |dd        |dd       |j                         }| j                  t        |      d       |j	                         D ]8  }| j                  d|       | j                  d|       | j                  d|       : y )Nc                     | |z   S r   r   explicit_arg1explicit_arg2s     r   rm   z4TestDispatcherMethods.test_inspect_llvm.<locals>.foo       =00r   rv   r   r   rm   rb  rc  )r   inspect_llvmrr   r   rx   r   )ra   rm   llvmsllvm_bcs       r   test_inspect_llvmz'TestDispatcherMethods.test_inspect_llvm  s    		1 
	1 	Aq	CC   "UQ' ||~GMM%) MM/73MM/73 &r   c                     t         d        } |dd        |dd        |dd       |j                         }| j                  t        |      d       |j	                         D ]  }| j                  d|v         y )Nc                     | |z   S r   r   ra  s     r   rm   z3TestDispatcherMethods.test_inspect_asm.<locals>.foo  rd  r   rv   r   r   rm   )r   inspect_asmrr   r   rx   
assertTrue)ra   rm   asmsasms       r   test_inspect_asmz&TestDispatcherMethods.test_inspect_asm  su    		1 
	1 	Aq	CC  TA& ;;=COOESL) !r   c                 *   |rdj                  t        |      |      }t        j                  dd      d   }t        |      }dj                  |||      }| j	                  t        |      |       | j                  t        |j                               y )Nz{}{}.rv   r   z^digraph "CFG for \'_ZN{}{}{})	formatr   re   splitr   r   rl  callabledisplay)ra   cfgr   module_name
module_lenprefixs         r   _check_cfg_displayz(TestDispatcherMethods._check_cfg_display  s~    mmCL':GnnS!,Q/%
1889C9DF 	S6* 	-.r   c                    t         d        }t        j                  d      }t        j                  d      }t        j                  d      } ||        ||        ||       |j                         }| j	                  t        |      d       |j                         \  }}}| j	                  t        |||g      t        t        d |||g                   |j                         D ]  }	| j                  |	        | j	                  t        t        |j                                     d       |j                  |j                  d         }	| j                  |	       y )	Nc                 "    | j                         S r   r  	the_arrays    r   rm   z3TestDispatcherMethods.test_inspect_cfg.<locals>.foo      ==?"r   rv   rv   rv   rv   rv   rv   r   c                     t        |       fS r   )r   r   s    r   <lambda>z8TestDispatcherMethods.test_inspect_cfg.<locals>.<lambda>	  s
    F1I<r   r   	signature)r   r<   rE   inspect_cfgrr   r   keyssetmaprx   rz  listr   )
ra   rm   a1a2a3cfgss1s2s3rv  s
             r   test_inspect_cfgz&TestDispatcherMethods.test_inspect_cfg  s'    
	# 
	# WWQZWWV_WWYBBB   	TA& yy{Rb"b\*S!7"b"FG	I ;;=C##C( !T$++-0115 ooq(9o:$r   c                 0   t         d        }t        j                  d      }t        j                  d      }t        j                  d      } ||        ||        ||       |j                  |j                  d   d      }| j                  |d	       y )
Nc                 "    | j                         S r   r}  r~  s    r   rm   zGTestDispatcherMethods.test_inspect_cfg_with_python_wrapper.<locals>.foo  r  r   rv   r  r  r   python)r  show_wrappercpython)r   )r   r<   rE   r  r   rz  )ra   rm   r  r  r  rv  s         r   $test_inspect_cfg_with_python_wrapperz:TestDispatcherMethods.test_inspect_cfg_with_python_wrapper  s     
	# 
	# WWQZWWV_WWYBBB ooq(9+3  5Y7r   c                 D   t         d        } |dd       |j                  t                      t        |j                  |j
                  d      j                        }t               5 }|j                          d d d        |j                         v sJ y # 1 sw Y   xY w)Nc                     | |z   S r   r   r   s     r   rm   z5TestDispatcherMethods.test_inspect_types.<locals>.foo)  r   r   rv   r   r   )	r   inspect_typesr   r   rw   r   type_annotationr   getvalue)ra   rm   r]   outs       r   test_inspect_typesz(TestDispatcherMethods.test_inspect_types(  s    		 
	 	Aq	(*% s}}S^^A%67GGH# 3<<>))) s   (BBc                    t         d        } |d        |d       t               5 }|j                          d d d        t               5 }|j                  |j                  d          d d d        t               5 }|j                  |j                  d          d d d        | j	                  j                         j                         j                         z          y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   axY w)Nc                     | dz   S r   r   r   s    r   rm   zDTestDispatcherMethods.test_inspect_types_with_signature.<locals>.foo8  r   r   rv   r   r   r  )r   r   r  r   rr   r  )ra   rm   totalfirstseconds        r   !test_inspect_types_with_signaturez7TestDispatcherMethods.test_inspect_types_with_signature7  s    		 
	 	AC%  %q(9:  &q(9:  	)5>>+;foo>O+OP   s#   C$
 C0< C<$C-0C9<DNz#please install the 'jinja2' packagez%please install the 'pygments' packagec                    t         d        } |dd       t               5  |j                  d      }d d d        j                  j	                         D ],  \  }}d}|d   D ]  }d|d   v sd} | j                  |       . | j                  t              5 }|j                  t               d	       d d d        | j                  d
t        j                               y # 1 sw Y   xY w# 1 sw Y   ;xY w)Nc                     | |z   S r   r   r   s     r   rm   z<TestDispatcherMethods.test_inspect_types_pretty.<locals>.fooM  r   r   rv   r   T)prettyFpygments_linesspan)filer  z$`file` must be None if `pretty=True`)r   r   r  annitemsrl  r   r   r   r   r   r   )ra   rm   r  kv
span_foundliner   s           r   test_inspect_types_prettyz/TestDispatcherMethods.test_inspect_types_prettyJ  s     
	 
	 	Aq	 ##4#0C  GGMMODAqJ*+T!W$!%J , OOJ' $ z*f8:d; + 	<&**+	-  +*s   C#C/#C,/C8c                     t         d         d        d       t        t        j                  fdj                  D                    }j                         }| j                  ||       y )Nc                     | dz   S r   r   r   s    r   rm   z;TestDispatcherMethods.test_get_annotation_info.<locals>.foog  r   r   rv   g?c              3   \   K   | ]#  }j                  |      j                          % y wr   )get_annotation_infor  )r?   r   rm   s     r   rA   zATestDispatcherMethods.test_get_annotation_info.<locals>.<genexpr>n  s.      ,E5C -0,C,CA,F,L,L,N5Cs   ),)r   rh   r   from_iterabler   r  rr   )ra   r]   r^   rm   s      @r   test_get_annotation_infoz.TestDispatcherMethods.test_get_annotation_infof  so    		 
	 	AC++ ,E58^^,E E F((*6*r   c                    d }t        |      }t        j                  dgg      }t        j                  ddgddggd      }t        j                  ddgddggd      } ||d	d
      } ||d	d
      }| j                  d ||d
d
              ||d	d
      } ||d	d
      }	| j                  ||       | j                  ||	       y)aO  
        This test an issue with the dispatcher when an array that is both
        C and F contiguous is supplied as the first signature.
        The dispatcher checks for F contiguous first but the compiler checks
        for C contiguous first. This results in an C contiguous code inserted
        as F contiguous function.
        c                     | ||f   S r   r   )Ar   js      r   r`   zKTestDispatcherMethods.test_issue_with_array_layout_conflict.<locals>.pyfunc{  s    QT7Nr   r   g        r   g      @r(  )orderr)  rv   r   N)r   r<   arrayrr   )
ra   r`   cfuncary_c_and_fary_cary_fexp_cexp_fgot_cgot_fs
             r   %test_issue_with_array_layout_conflictz;TestDispatcherMethods.test_issue_with_array_layout_conflicts  s    	 Fhhv&2r(RH-S92r(RH-S9ua#ua#U;156eQ"eQ"&&r   ) )re   rf   rg   r[  r^  rh  ro  rz  r  r  r  r  r;  r<  jinja2pygmentsr  r  r  r   r   r   rS  rS    s~    /$- 40*(/ %D8**Q& X__Vt^%JKX__X%'NO- P L-4+'r   rS  c                   $    e Zd Zd Zd Zd Zd Zy) TestDispatcherFunctionBoundariesc                    t        d      d        t        d      d        t        d      fd       }ddt        j                  d      g}|D cg c]  }|dz   	 }}t        ||      D ]  \  }}| j	                   ||      |        t        ||      D ]  \  }}| j	                   |      |         y c c}w )	NTrV   c                     | dz   S r   r   r   s    r   add1zJTestDispatcherFunctionBoundaries.test_pass_dispatcher_as_arg.<locals>.add1  r   r   c                      | |      S r   r   )fnr   s     r   rp   zITestDispatcherFunctionBoundaries.test_pass_dispatcher_as_arg.<locals>.bar  s    a5Lr   c                      |       S r   r   )r   r  rp   s    r   rm   zITestDispatcherFunctionBoundaries.test_pass_dispatcher_as_arg.<locals>.foo  s    tQ<r   rv   g333333&@r   )r   r<   r  ziprZ   )	ra   rm   inputsr   expected_resultsargexpectr  rp   s	          @@r   test_pass_dispatcher_as_argz<TestDispatcherFunctionBoundaries.test_pass_dispatcher_as_arg  s    	d		 
	 
d		 
	 
d		  
	  T299R=)+126aAE62v'78KC##CHf5 9 v'78KC##CcNF; 9 3s   C c                    t        d      d        } |g dt        d             }| j                  |d        |t        t        t	        d      t	        d      d d d	               t        d
             }| j                  |d        |t        t        t	        d      t	        d      d d d	               t        d             }| j                  |d       y )NTrV   c                 F    | d   }| dd  D ]  } |||      }|dk  s|} |S r&  r   )seqcmpfnr  eachcmpvals        r   maximumzPTestDispatcherFunctionBoundaries.test_dispatcher_as_arg_usecase.<locals>.maximum  s:    a&CABsD)A:C   Jr   )rv   r   r   r   c                     | |z
  S r   r   r   s     r   r  zQTestDispatcherFunctionBoundaries.test_dispatcher_as_arg_usecase.<locals>.<lambda>  s    1q5r   )r  r   rL  r   c                     | d   |d   z
  S Nr   r   r   s     r   r  zQTestDispatcherFunctionBoundaries.test_dispatcher_as_arg_usecase.<locals>.<lambda>      QqTAaD[r   )r   r   c                     | d   |d   z
  S r   r   r   s     r   r  zQTestDispatcherFunctionBoundaries.test_dispatcher_as_arg_usecase.<locals>.<lambda>  r  r   )r   r   )r   rr   r  r  r   )ra   r  r  s      r   test_dispatcher_as_arg_usecasez?TestDispatcherFunctionBoundaries.test_dispatcher_as_arg_usecase  s    	d		 
	 l#.@*ABa d3uQxq$B$89 89;f%d3uQxq$B$89 89;f%r   c                 p    t        d      d        }t        d       }| j                   ||      |       y )NTrV   c                     | S r   r   )r  s    r   rm   zRTestDispatcherFunctionBoundaries.test_dispatcher_can_return_to_python.<locals>.foo  s    Ir   c                     | S r   r   r   s    r   r  zWTestDispatcherFunctionBoundaries.test_dispatcher_can_return_to_python.<locals>.<lambda>  s    1r   rq   )ra   rm   r  s      r   $test_dispatcher_can_return_to_pythonzETestDispatcherFunctionBoundaries.test_dispatcher_can_return_to_python  s9    	d		 
	 R"%r   c                    t        d      d        t        d      fd       }t        d      fd       }t        d      d        }| j                   |||fd      d       | j                   |gd      d	       y )
NTrV   c                     | dz   S r   r   r   s    r   onezMTestDispatcherFunctionBoundaries.test_dispatcher_in_sequence_arg.<locals>.one  r   r   c                        |             S r   r   r   r  s    r   twozMTestDispatcherFunctionBoundaries.test_dispatcher_in_sequence_arg.<locals>.two  s    s1v;r   c                 ,       |                   S r   r   r  s    r   threezOTestDispatcherFunctionBoundaries.test_dispatcher_in_sequence_arg.<locals>.three  s    s3q6{##r   c                 B     | d   |       | d   |       | d   |      fS )Nr   rv   r   r   )fnsr   s     r   choosezPTestDispatcherFunctionBoundaries.test_dispatcher_in_sequence_arg.<locals>.choose  s-    3q6!9fc!fQiQ22r   rv   )r   r   r   )r   r   r   rq   )ra   r  r  r  r  s       @r   test_dispatcher_in_sequence_argz@TestDispatcherFunctionBoundaries.test_dispatcher_in_sequence_arg  s    	d		 
	 
d		 
	 
d		$ 
	$ 
d		3 
	3 	c5 115yAc33Y?r   N)re   rf   rg   r  r  r  r  r   r   r   r  r    s    <2&&&@r   r  c                       e Zd Zd Zd Zy)TestBoxingDefaultErrorc                 2   d }t        j                  d      f} t        |      |      j                  |   }| j	                  t
              5 }|j                  d        d d d        | j                  t        j                        d       y # 1 sw Y   /xY w)Nc                      y r   r   r   s    r   rm   z<TestBoxingDefaultError.test_unbox_runtime_error.<locals>.foo  s    r   
dummy_typezcan't unbox dummy_type type)
r	   Dummyr   rw   r   rQ   ry   rr   r   r   )ra   rm   argtyscresr   s        r   test_unbox_runtime_errorz/TestBoxingDefaultError.test_unbox_runtime_error  s    	++l+- tF|C **62y)V T" * 	V--.0MN	 *)s   BBc                     t         d        }| j                  t              5 } |        d d d        d}| j                  t	        j
                        |       y # 1 sw Y   1xY w)Nc                      t         S r   )r;  r   r   r   rm   z:TestBoxingDefaultError.test_box_runtime_error.<locals>.foo  s    Or   z/cannot convert native Module.* to Python object)r   r   rQ   r   r   r   )ra   rm   r   pats       r   test_box_runtime_errorz-TestBoxingDefaultError.test_box_runtime_error  sW    		 
	y)VE *?V--.4 *)s   AA#N)re   rf   rg   r  r  r   r   r   r  r    s    O5r   r  c                   F    e Zd ZdZd Zd Zd Zej                  d        Z	y)TestNoRetryFailedSignaturez?Test that failed-to-compile signatures are not recompiled.
    c                    |j                   }| j                  t        |j                        d       | j	                  t
        j                        5   |d       d d d        | j                  t        |j                        d       | j	                  t
        j                        5   |d       d d d        | j                  t        |j                        d       | j	                  t
        j                        5   |d       d d d        | j                  t        |j                        d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   GxY w)Nr   rv   r   r   )	_compilerrr   r   _failed_cacher   r
   r   )ra   funcfcoms      r   run_testz#TestNoRetryFailedSignature.run_test  s    ~~T//0!4v112G 3T//0!4v112G 3T//0!4v112I 3T//0!4 32 32 32s$   	D2&	D>;	E
2D;>E
Ec                 J    t        d      d        }| j                  |       y )NTrV   c                     | d   S r  r   r   s    r   rm   z8TestNoRetryFailedSignature.test_direct_call.<locals>.foo      Q4Kr   r   r  r   s     r   test_direct_callz+TestNoRetryFailedSignature.test_direct_call
  s'    	d		 
	 	cr   c                     t        d      d        t        d      fd       t        d      fd       }| j                  |       y )NTrV   c                     | d   S r  r   r   s    r   rp   z8TestNoRetryFailedSignature.test_nested_call.<locals>.bar  r  r   c                      |        y r   r   )r   rp   s    r   foobarz;TestNoRetryFailedSignature.test_nested_call.<locals>.foobar  s
    Fr   c                 &     |        |       z   S r   r   )r   rp   r  s    r   rm   z8TestNoRetryFailedSignature.test_nested_call.<locals>.foo  s    q6F1I%%r   r  )ra   rm   rp   r  s     @@r   test_nested_callz+TestNoRetryFailedSignature.test_nested_call  sZ    	d		 
	 
d		 
	 
d		& 
	& 	cr   c                 |      fd} |dd      } |dd      } j                  |d        j                  |d       y )Nc                   	
 d}ddi
d }t        |      
fd       }t        d      d        }|f	fd			 	|f|z        }t        j                  d
      }r[j	                  t
        j                        5 } ||d       d d d        j                  dt        j                               
d   S  ||d       
d   S # 1 sw Y   AxY w)Nr   cr   c                     J d       )Nunreachabler   r   s    r   triggerzKTestNoRetryFailedSignature.test_error_count.<locals>.check.<locals>.trigger,  s    '-'qr   c                 R    dxx   dz  cc<   rt        j                  d      d S )Nr  rv   invoke_failedc                     | S r   r   r   s    r   r  z`TestNoRetryFailedSignature.test_error_count.<locals>.check.<locals>.ol_trigger.<locals>.<lambda>5  s    r   )r
   r   )r   counter
would_fails    r   
ol_triggerzNTestNoRetryFailedSignature.test_error_count.<locals>.check.<locals>.ol_trigger/  s-     ! ,,_==""r   TrV   c                      y r   r   )r  r   s     r   identzITestNoRetryFailedSignature.test_error_count.<locals>.check.<locals>.ident7  s    r   c                 b    | d   | d d c}t        d      fd       }|r	 ||      S |S )Nr   TrV   c                 >     | |       | dxx    |      z  cc<   y r  r   )r  r   innertab_heads     r   assignz`TestNoRetryFailedSignature.test_error_count.<locals>.check.<locals>.chain_assign.<locals>.assign>  s    #qMFhqk)Fr   r   )fsr'  tab_tailr)  r(  chain_assigns    `  @r   r,  zPTestNoRetryFailedSignature.test_error_count.<locals>.check.<locals>.chain_assign;  sG    %'VRW"(d#* $* '&99!Mr   r   rv   r  )
r   r   r<   rE   r   r
   r   r   r   r   )fieldr!  r  r  r"  r$  r   r  r   r,  r   ra   s    `       @@r   rb   z:TestNoRetryFailedSignature.test_error_count.<locals>.check$  s    
 AAhG( g# # $   (- " !'a0E''!*C&&v'9'9:f#qM ;os63C3C/DE
 3< c1 3< ;:s   =
CCrG   Fr  Trv   )rr   )ra   rb   ct_okct_bads   `   r   test_error_countz+TestNoRetryFailedSignature.test_error_count   sE    .	 ` c5!sD! 	"#r   N)
re   rf   rg   rO  r  r  r  r;  expectedFailurer0  r   r   r   r  r    s0    5  6$ 6$r   r  c                     | |z   S r   r   r   s     r   add_y1r3  \      q5Lr   c                     | |rdz   S dz   S r   r   r   s     r   	add_ynoner6  a  s    QAr   c                     | |z  S r   r   r   s     r   multr8  f  r4  r   c                     |  || |       z   S r   r   )r   r	  s     r   add_funcr:  k  s    tAqz>r   c                 <     | |      | j                  |      k(  sJ y r   )rz   )f1r  s     r   _checkerr=  p  s    c7bjjo%%%r   c                   $    e Zd Zd Zd Zd Zd Zy)$TestMultiprocessingDefaultParametersc                    	 t        j                  d      }dD ]\  }|j                  t        ||f      }|j                          |j                  t               | j                  |j                  d       ^ y # t        $ r	 t         }Y sw xY w)Nspawn)rv   r   r   )r   r[   r   )
multiprocessingget_contextAttributeErrorProcessr=  r   r   _TEST_TIMEOUTrr   exitcode)ra   fcctxrG   ps        r   run_fc_multiprocz5TestMultiprocessingDefaultParameters.run_fc_multiprocu  sx    	"!--g6C A82q(;AGGIFF=!QZZ+	   	"!C	"s   A9 9B
Bc                 .    | j                  t               y)z Tests issue #4888N)rK  r3  ra   s    r   test_int_def_paramz7TestMultiprocessingDefaultParameters.test_int_def_param  s     	f%r   c                 .    | j                  t               y)z" Tests None as a default parameterNrK  r:  rM  s    r   test_none_def_paramz8TestMultiprocessingDefaultParameters.test_none_def_param       	h'r   c                 .    | j                  t               y)z( Tests a function as a default parameterNrP  rM  s    r   test_function_def_paramz<TestMultiprocessingDefaultParameters.test_function_def_param  rR  r   N)re   rf   rg   rK  rN  rQ  rT  r   r   r   r?  r?  t  s    ,"&
(
(r   r?  c                       e Zd ZdZd Zy)TestVectorizeDifferentTargetszDTest that vectorize can be reapplied if the target is different
    c                 t    t         d        }t        g d d      } ||       t        g d d      } ||       y )Nc                     | |z   S r   r   r   s     r   r    z?TestVectorizeDifferentTargets.test_cpu_vs_parallel.<locals>.add  r   r   cpu)identityr   parallel)r   r   )ra   r    custom_vectorizecustom_vectorize_2s       r   test_cpu_vs_parallelz2TestVectorizeDifferentTargets.test_cpu_vs_parallel  sD    		 
	 %R$uE&rDL3r   N)re   rf   rg   rO  r^  r   r   r   rV  rV    s     r   rV  __main__)r   r   )r   )rL  r   )rv   )BrB  platformr   r   r   	itertoolsr   ior   numpyr<   numbar   r   r   r   
numba.corer	   r
   r   numba.tests.supportr   r   numba.np.numpy_supportr   numba.core.dispatcherr   numba.extendingr   r   r   numba.testing.mainr   _RUNNER_TIMEOUTr;  rF  r  ImportErrorr  machiner=  r   r    r$   r'   r)   r3   r9   rS   rU   rj   r?  rQ  rS  r  r  r  r3  r6  r8  r:  r=  r?  rV  re   mainr   r   r   <module>ro     s           . . $  9 + , $ 9 :   #% X8+

x 
N4X N4bLNH LN^#&; #y'H y'xJ@x J@Z5X.. 54c$!2!2 c$L         &(;8I8I (D H$5$5  $ zHMMO Y$  F
  Hs$   1F 6F FFFF