
    xKg`
                    V	   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Zd dlZd dl	Z
d dlmZ d dlZd dlmZmZmZmZmZ d dlmZmZmZ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!m"Z"m#Z#m$Z$m%Z% d d	l&m'Z' d dl(Z(d d
l)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@mAZA ddlBmCZCmDZD 	 d dlEmFc mGZH  G d deJ      ZK G d dej                        ZM eMd      ZN eK       ZO e*j                  eK      d        ZQ e-eMej                        d        ZSd ZT  e2eM      e1j                          e4eM      d        ZVd ZW eWd      \  ZXZYZZ e4eX      d        Z[d~dZ\d Z]  e+e\      e]      Z^ e,e\       e,e\ej                        d               Z` e,e\ej                        d        Zbe? G d de=             Zc e,d eM      d!        Zdd" Zed# Zfd$ Zg e.ee      d%        Zh e.ee      d&        Zi e.ej      d'        Zk e.ej                        d(        Zm e.ej                        d)        Zo e.ej                        d*        Zq e.ej                        d+        Zsd, Ztd- Zu e.ej                        d.        Zwd/ Zxd0 Zyd1 Zzd2 Z{d3 Z| e0eMd4      d5        Z}d6 Z~d7 Zd8 Zd9 Zd: Zd; Zd< Zd= Zd> Zd? Zd@ ZdA ZdB Z e.e      dC        ZdD ZdE ZdF Z e@e       G dG dHeA             ZdI Z G dJ dKeJ      Z G dL dMej$                        Z e2e       G dN dOe1j                               Z e@e ee              ee      dP        Z e.e
j,                        dQ        Z G dR dSe       Z G dT dUe       Z G dV dWe       ZdX Ze% G dY dZe              Zd[ Z G d\ d]e       Z G d^ d_e(j@                        Z G d` dae(j@                        Z e0eMdbdcddie      df        Z e0eMdgdcdhie      di        Z e/eMdjdcddie      dk        Z e/eMdldcdhie      dm        Z G dn doe       Z G dp dqe       Zdr Ze% G ds dte              Z G du dve       Z G dw dxe       Z G dy dze       Z G d{ d|e       Zed}k(  r e(j\                          yy# eI$ r dZHY w xY w)    N)ir)njitjit	vectorizeguvectorizeobjmode)typeserrorstypingcompilercgutils)type_inference_stage)
cpu_target)lower_constant)TestCasecaptured_stdouttemp_directoryoverride_configrun_in_new_process_in_cache_dirskip_if_typeguard)LoweringError)typeof_impltype_callablelower_builtin
lower_castoverloadoverload_attributeoverload_methodmodelsregister_modelboxunboxNativeValue	intrinsic
_Intrinsicregister_jitableget_cython_function_address	is_jittedoverload_classmethod)ConcreteTemplate	signatureinferinfer_globalAbstractTemplate   )IndexSeriesc                       e Zd Zy)MyDummyN__name__
__module____qualname__     ^/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_extending.pyr3   r3   J       r9   r3   c                       e Zd Zd Zy)MyDummyTypec                 \    t        |t        j                        rddlm} |j
                  S y )Nr   )
Conversion)
isinstancer	   Numbernumba.core.typeconvr?   safe)selfcontexttotyr?   s       r:   can_convert_tozMyDummyType.can_convert_toO   s"    dELL)6??" *r9   N)r5   r6   r7   rG   r8   r9   r:   r=   r=   N   s    #r9   r=   mydummyc                     t         S N)mydummy_type)valcs     r:   typeof_mydummyrN   Z   s    r9   c                 &    | j                  |d      S )z2
    Implicit conversion from MyDummy to int.
    *   )get_constant)rE   builderfromtyrF   rL   s        r:   mydummy_to_numberrT   _   s    
 b))r9   c                      t         S rJ   )rH   r8   r9   r:   	get_dummyrV   g   s    Nr9   c                 H    t        |j                  j                               S rJ   r#   rE   get_dummy_valuetypobjrM   s      r:   unbox_indexr]   n       qyy00233r9   c                      G d dt               } G d dt        j                        } ||       t        j                  |      fd       } t        |      t        j                         ||fS )Nc                       e Zd Zy)(base_dummy_type_factory.<locals>.DynTypeNr4   r8   r9   r:   DynTypera   x       r9   rb   c                       e Zd Zy),base_dummy_type_factory.<locals>.DynTypeTypeNr4   r8   r9   r:   DynTypeTypere   {   rc   r9   rf   c                     S rJ   r8   )rL   rM   dyn_type_types     r:   rN   z/base_dummy_type_factory.<locals>.typeof_mydummy   s	    r9   )objectr	   Opaquer   registerr    r   OpaqueModel)namerb   rf   rN   rh   s       @r:   base_dummy_type_factoryrn   w   sl    & ell   %M'" #  N; 2 23..r9   mydummy2c                 H    t        |j                  j                               S rJ   rX   rZ   s      r:   unbox_index2rq      r^   r9   c                     t         rJ   NotImplementedErrorxs    r:   func1rw          
r9   c                     dd}|S )Nc                     | d t         j                  fv rt         j                  S t        | t         j                        r| S y rJ   )r	   noneint32r@   Floatru   s    r:   typerztype_func1_.<locals>.typer   s5    uzz"";;5;;'H (r9   rJ   r8   )rE   r~   s     r:   type_func1_r      s     Lr9   c                 :    | j                  |j                  d      S NrP   )rQ   return_type)rE   rR   sigargss       r:   func1_nullaryr      s     44r9   c                 0    d }| j                  ||||      S )Nc                 2    t        j                  d| z        S )N   )mathsqrtru   s    r:   
func1_implzfunc1_unary.<locals>.func1_impl   s    yyQr9   )compile_internal)rE   rR   r   r   r   s        r:   func1_unaryr      s       ##GZdCCr9   c                   8    e Zd ZdZ eej                  e      gZy)
PrintDummy
print_itemN)	r5   r6   r7   keyr+   r	   r{   rK   casesr8   r9   r:   r   r      s    
Cuzz<01Er9   r   r   c                     |\  }| j                  |      }|j                  |j                  d            }|j                  |       |j	                  |       | j                         S )Nzhello!)get_python_apiunserializeserialize_objectprint_objectdecrefrY   )rE   rR   r   r   rv   pyapistrobjs          r:   print_dummyr      s]    
CQ""7+Eu55h?@F	v	LL""$$r9   c                     t         rJ   rs   condrv   ys      r:   wherer      rx   r9   c                 0    t        j                  | ||      S )z8
    Wrap np.where() to allow for keyword arguments
    )npr   r   s      r:   np_wherer      s     88D!Qr9   c                     t        | ||      S )N)r   rv   )r   r   s      r:   
call_wherer      s    a  r9   c                     t        | t        j                        rM|j                  |j                  k7  rt	        j
                  d      t        d | ||fD              rd }|S d }|S y)z'
    Implement where() for arrays.
    "x and y should have the same dtypec              3   :   K   | ]  }|j                   d k(    yw)CN)layout).0tys     r:   	<genexpr>z(overload_where_arrays.<locals>.<genexpr>   s     7,BryyC,s   c                 R   | j                   }|j                   |k7  s|j                   |k7  rt        d      t        j                  |      }| j                  }|j                  }|j                  }|j                  }t        | j                        D ]  }	||	   r||	   n||	   ||	<    |S )zM
                Fast implementation for C-contiguous arrays
                %all inputs should have the same shape)shape
ValueErrorr   
empty_likeflatrangesize)
r   rv   r   r   rescfxfyfrfis
             r:   
where_implz)overload_where_arrays.<locals>.where_impl   s     

77e#qww%'7$%LMMmmA&YYVVVVXXtyy)A%'UBqE1BqE *
r9   c                     | j                   }|j                   |k7  s|j                   |k7  rt        d      t        j                  |      }t        j                  |       D ]  \  }}|r||   n||   ||<    |S )zI
                Generic implementation for other arrays
                r   )r   r   r   r   ndenumerate)r   rv   r   r   r   idxrM   s          r:   r   z)overload_where_arrays.<locals>.where_impl   so     

77e#qww%'7$%LMMmmA& nnT2FC)*qv#CH 3
r9   N)r@   r	   Arraydtyper
   TypingErrorallr   rv   r   r   s       r:   overload_where_arraysr      sj     $$77agg$$%IJJ 74A,77< 
 K %r9   c                 v    t        | t        j                        s||k7  rt        j                  d      d }|S y)z(
    Implement where() for scalars.
    z!x and y should have the same typec                 F    | r|n|}t        j                  |      }||d<   |S )z@
            Scalar where() => return a 0-dim array
            r8   )r   r   )r   rv   r   scalarrs        r:   r   z*overload_where_scalars.<locals>.where_impl  s)     1!D--%CCGJr9   N)r@   r	   r   r
   r   r   s       r:   overload_where_scalarsr     s=    
 dEKK(6$$%HII	  )r9   c                 .    t        | t              rd }|S y )Nc                      y)N   r8   args    r:   len_implz$overload_len_dummy.<locals>.len_impl-      r9   r@   r=   )r   r   s     r:   overload_len_dummyr   )  s    #{#	  $r9   c                 h    t        | t        t        f      rt        |t        t        f      rd }|S y y )Nc                      yr   r8   arg1arg2s     r:   dummy_add_implz*overload_add_dummy.<locals>.dummy_add_impl9  r   r9   r@   r=   MyDummyType2)r   r   r   s      r:   overload_add_dummyr   3  s7    $l34{L):	 :4r9   c                 d    t        | t              r t        |t        j                        rd }|S y y )Nc                     t        d| |       y )Ndelprintr\   r   s     r:   dummy_delitem_implz2overload_dummy_delitem.<locals>.dummy_delitem_implC  s    %c"r9   r@   r=   r	   Integer)r\   r   r   s      r:   overload_dummy_delitemr   ?  s/    #{#
3(F	# "! )G#r9   c                 d    t        | t              r t        |t        j                        rd }|S y y )Nc                     |dz   S )N{   r8   r   s     r:   dummy_getitem_implz2overload_dummy_getitem.<locals>.dummy_getitem_implM  s    9r9   r   )r\   r   r   s      r:   overload_dummy_getitemr   I  s/    #{#
3(F	 "! )G#r9   c                     t        t        | t              t        |t        j                        t        |t        j                        g      rd }|S y )Nc                     t        ||       y rJ   r   r\   r   rL   s      r:   dummy_setitem_implz2overload_dummy_setitem.<locals>.dummy_setitem_impl]  s    #sOr9   )r   r@   r=   r	   r   )r\   r   rL   r   s       r:   overload_dummy_setitemr   S  sG    
sK(sEMM*sEMM*	
	 "!r9   c                 .    t        j                  | |      S rJ   operatoraddr   s     r:   call_add_operatorr   c      <<d##r9   c                     | |z   S rJ   r8   r   s     r:   call_add_binopr   g  s    $;r9   c                 h    t        | t        t        f      rt        |t        t        f      rd }|S y y )Nc                      yr   r8   r   s     r:   dummy_iadd_implz,overload_iadd_dummy.<locals>.dummy_iadd_implq  r   r9   r   )r   r   r   s      r:   overload_iadd_dummyr   k  s7    $l34{L):	 :4r9   c                 .    t        j                  | |      S rJ   r   r   s     r:   call_iadd_operatorr   w  r   r9   c                     | |z  } | S rJ   r8   r   s     r:   call_iadd_binopr   {  s    DLDKr9   c                 
    | |= y rJ   r8   r   s     r:   call_delitemr    s	    Cr9   c                     | |   S rJ   r8   r   s     r:   call_getitemr    s    s8Or9   c                     || |<   y rJ   r8   r   s      r:   call_setitemr    s    CHr9   lengthc                     d }|S )Nc                     t        |       S rJ   lenr   s    r:   impz#overload_method_length.<locals>.imp  s    3xr9   r8   )r   r  s     r:   overload_method_lengthr    s     Jr9   c                 "    | j                         S rJ   )r  ru   s    r:   cache_overload_method_usecaser    s    88:r9   c                      t               S rJ   rw   r8   r9   r:   call_func1_nullaryr    s	    7Nr9   c                     t        |       S rJ   r  ru   s    r:   call_func1_unaryr    s    8Or9   c                     t        |       S rJ   r
  ru   s    r:   len_usecaser    s    q6Mr9   c                     t        |        y rJ   r   ru   s    r:   print_usecaser    s	    	!Hr9   c                     | |   S rJ   r8   )rv   r   s     r:   getitem_usecaser    s    S6Mr9   c                 R    t        j                  t        j                  |             S rJ   )r   cossinru   s    r:   npyufunc_usecaser    s    66"&&)r9   c                     | j                   S rJ   )_dataru   s    r:   get_data_usecaser!    s    77Nr9   c                     | j                   S rJ   )_indexru   s    r:   get_index_usecaser$    s    88Or9   c                     | j                   S rJ   )is_monotonic_increasingru   s    r:   is_monotonic_usecaser'    s    $$$r9   c                     t        | |      S rJ   )r1   )dataindexs     r:   make_series_usecaser+    s    $r9   c                 &    | j                  ||      S rJ   )clip)rv   lohis      r:   clip_usecaser0    s    66"b>r9   c                      t         S rJ   r   r8   r9   r:   return_non_boxabler3    s    Ir9   c                      d } | S )Nc                      t         S rJ   r2  r8   r9   r:   r  z(overload_return_non_boxable.<locals>.imp  s    	r9   r8   )r  s    r:   overload_return_non_boxabler6    s     Jr9   c                 8    t               }|j                  |       S rJ   )r3  arange)szmods     r:   non_boxable_ok_usecaser;    s    

C::b>r9   c                      t               S rJ   )r3  r8   r9   r:   non_boxable_bad_usecaser=    s    r9   c                      y rJ   r8   )fs    r:   mk_func_inputr@    s    r9   c                       e Zd Zd Zy)MkFuncTypingc                 t    t        |d   t        j                        sJ t        t        j                  g| S Nr   )r@   r	   MakeFunctionLiteralr+   r{   )rD   r   kwss      r:   genericzMkFuncTyping.generic  s0    $q'5#<#<===+d++r9   N)r5   r6   r7   rG  r8   r9   r:   rB  rB    s    ,r9   rB  c                      t        d        y )Nc                     | S rJ   r8   as    r:   <lambda>z#mk_func_test_impl.<locals>.<lambda>  s    Ar9   )r@  r8   r9   r:   mk_func_test_implrM    s
    +r9   c                       e Zd Zy)MyClassNr4   r8   r9   r:   rO  rO    r;   r9   rO  c                   0     e Zd Z fdZd Zd Zd Z xZS )CallableTypeRefc                     || _         i | _        g | _        t        t        |   dj                  | j                                y )Nzcallable_type_ref[{}])instance_typesig_to_impl_keycompiled_templatessuperrQ  __init__format)rD   rS  	__class__s     r:   rW  zCallableTypeRef.__init__  s@    *!"$ot- /55;VD<N<N5O	Qr9   c                 
   d }|j                   t        |          D ]V  }	 |j                  ||      }t        |di       }||v s(||   | j                  |<   | j
                  j                  |        |S  |S # t        $ r Y fw xY w)N_compiled_overloads)
_functionstypeapplygetattrrT  rU  append	Exception)rD   rE   r   rF  res_sigtemplatecompiled_ovldss          r:   get_call_typezCallableTypeRef.get_call_type  s    **4:6H	"..s3 ")3H"!M>)4B44HD((1++228< 7   s   A66	BBc                 P    t        | j                  j                               }|dfS )NT)listrT  keys)rD   sigss     r:   get_call_signaturesz#CallableTypeRef.get_call_signatures  s%    D((--/0Tzr9   c                      | j                   |   S rJ   )rT  )rD   r   s     r:   get_impl_keyzCallableTypeRef.get_impl_key  s    ##C((r9   )r5   r6   r7   rW  re  rj  rl  __classcell__rY  s   @r:   rQ  rQ    s    Q")r9   rQ  c                       e Zd Zd Zy)CallableTypeModelc                 F    t         j                  j                  | ||       y rJ   )r   rl   rW  )rD   dmmfe_types      r:   rW  zCallableTypeModel.__init__  s    ##D#w7r9   N)r5   r6   r7   rW  r8   r9   r:   rp  rp    s    8r9   rp  c                 "    | j                         S rJ   )rY   )rE   rR   r   pyvals       r:   constant_callable_typerefrv  !  s    ""$$r9   c                 .    t        | t              rd }|S y )Nc                      y)N   >[= r8   r\   s    r:   r  zoverload_np_exp.<locals>.imp-  s    r9   r   r\   r  s     r:   overload_np_expr|  )  s    #{#	 
 $r9   c                   j    e Zd ZdZd Zej                  d        Zd Zej                  d        Z	d Z
y)TestLowLevelExtendingz4
    Test the low-level two-tier extension API.
    c                     t         } t        d      |      }| j                   |       d       t        } t        d      |      }| j                   |d       d       | j                   |d      d       y )NTnopythonrP   g      2@g      @)r  r   assertPreciseEqualr  rD   pyfunccfuncs      r:   
test_func1z TestLowLevelExtending.test_func1<  sh    #"T"6*,!"T"6*dR0dS1r9   c                 $    | j                          y rJ   )r  rD   s    r:   test_func1_isolatedz)TestLowLevelExtending.test_func1_isolatedE  s    r9   c                 b    | j                  t        t               | j                  t               y rJ   )assertIs
type_func1r   assertIsNotNoner  s    r:   !test_type_callable_keeps_functionz7TestLowLevelExtending.test_type_callable_keeps_functionI  s    j+.Z(r9   c                     t         } t        t        j                               |      }| j	                   |       d       y )Ng      E@)rV   r   r	   float64r  r  s      r:   test_cast_mydummyz'TestLowLevelExtending.test_cast_mydummyM  s0    &U]]_&v..r9   c                 F   t        j                  t              }t        j                  }t        j
                  }|j                          |j                          t        |||dd      }| j                  t        d |j                  j                         D                     y)zFmake sure make_function is passed to typer class as a literal
        r8   Nc              3   P   K   | ]  }t        |t        j                           y wrJ   )r@   r	   rE  )r   rK  s     r:   r   z=TestLowLevelExtending.test_mk_func_literal.<locals>.<genexpr>^  s%      4A 1e7784s   $&)r   run_frontendrM  r   typing_contexttarget_contextrefreshr   
assertTrueanytypemapvalues)rD   test_ir	typingctx	targetctx
typing_ress        r:   test_mk_func_literalz*TestLowLevelExtending.test_mk_func_literalS  s     ''(9:--	--	))Y*.0
 #++224 	
r9   N)r5   r6   r7   __doc__r  r   run_test_in_subprocessr  r  r  r  r8   r9   r:   r~  r~  4  sJ    2 $$ %) $$/ %/

r9   r~  c                   L    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y)TestPandasLikeze
    Test implementing a pandas-like Index object.
    Also stresses most of the high-level API.
    c                     t        t        j                  d            } t        d      t              }| j                   ||      d       y )N   Tr  )r0   r   r8  r   r  r  )rD   r   r  s      r:   test_index_lenzTestPandasLike.test_index_lenk  s9    "))A,"T";/a!,r9   c                 .   t        t        j                  g d            } t        d      t              }| j                   ||d      d        ||t        dd             }| j                  |t                | j                  t        |      ddg       y )NrP      Tr  r/   r  r  )
r0   r   r|   r   r  r  sliceassertIsInstanceassertEqualrg  rD   r   r  iis       r:   test_index_getitemz!TestPandasLike.test_index_getitemp  sv    "((;'("T"?3aQ/1eAtn%b%(bAr7+r9   c                 D   t        t        j                  g d            } t        d      t              } ||      }| j                  |t                | j                  |j                  t        j                  t        j                  |j                                     y)z7
        Check Numpy ufunc on an Index object.
        r  Tr  N)
r0   r   r|   r   r  r  r  r   r  r  r  s       r:   test_index_ufunczTestPandasLike.test_index_ufuncx  sk     "((;'("T"#341Xb%("&&*ABr9   c                     t        t        j                  g d            } t        d      t              } ||      }| j                  ||j                         y )Nr  Tr  )r0   r   r|   r   r!  r  r   )rD   r   r  r)  s       r:   test_index_get_dataz"TestPandasLike.test_index_get_data  sB    "((;'("T"#34QxdAGG$r9   c                      t        d      t              }g ddfg ddfg dffD ]=  \  }}t        t        j                  |            } ||      }| j                  ||       ? y )NTr  )r  rP      F)r  r  rP   )r   r'  r0   r   r|   r  )rD   r  r  expectedr   gots         r:   test_index_is_monotonicz&TestPandasLike.test_index_is_monotonic  sl     #T"#78J!
FH
 bhhv&'A(CS(+!
r9   c                     t        t        j                  g d            }t        t        j                  g d      |      } t        d      t              }| j                   ||      d       y )Nr      r  g      ?g      @      @Tr  r  )r0   r   r|   r1   r  r   r  r  )rD   r   sr  s       r:   test_series_lenzTestPandasLike.test_series_len  sO    "((9%&2::o.2"T";/a!,r9   c                 :   t        t        j                  g d            }t        t        j                  g d      |      } t        d      t              } ||      }| j                  |t                | j                  |j                  |j                         y )Nr  r  Tr  )
r0   r   r|   r1   r  r   r$  r  r  r   )rD   r   r  r  r  s        r:   test_series_get_indexz$TestPandasLike.test_series_get_index  sk    "((9%&2::o.2"T"#45Ahc5)cii)r9   c                 &   t        t        j                  g d            }t        t        j                  g d      |      } t        d      t              } ||      }| j                  |t               | j                  |j                  t                | j                  |j                  j                  |j                         | j                  |j                  t        j                  t        j                  |j                                     y)z8
        Check Numpy ufunc on an Series object.
        r  r/   r   r  Tr  N)r0   r   r|   r1   int64r   r  r  r#  r  r   r  _valuesr  r  rD   r   r  r  sss        r:   test_series_ufuncz TestPandasLike.test_series_ufunc  s     "((;'(288I&*"T"#341Xb&)bii/biiooqww/

BFF266!))3D,EFr9   c                    t        t        j                  g d            }t        j                  g d      } t	        d      t
              } |||      }| j                  |t               | j                  |j                  t                | j                  |j                  j                  |j                         | j                  |j                  |       y )Nr  r  Tr  )r0   r   r|   r  r   r+  r  r1   r#  r  r   r  )rD   r   dr  r  s        r:   test_series_constructorz&TestPandasLike.test_series_constructor  s    "((;'(JJ'"T"#67Aqkc6*cjj%0cjj&&0ckk1%r9   c                    t        t        j                  g d            }t        t        j                  g d      |      } t        d      t              } ||dd      }| j                  |t               | j                  |j                  t                | j                  |j                  j                  |j                         | j                  |j                  t        j                  g d             y )Nr  r  Tr  皙?      @)r  r  r  )r0   r   r|   r1   r  r   r0  r  r#  r  r   r  r  r  s        r:   test_series_clipzTestPandasLike.test_series_clip  s    "((;'(2::o.2"T"<01c3b&)bii/biiooqww/

BJJ,GHr9   N)r5   r6   r7   r  r  r  r  r  r  r  r  r  r  r  r8   r9   r:   r  r  e  s<    
-
,C%,-*G&Ir9   r  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d Zd Zd Zd Zd Zd Zd Zy)TestHighLevelExtendingz+
    Test the high-level combined API.
    c                 8    t         } t        d      |       fd} |ddd        |ddd        |t        j                  g d      t        j                  g d      t        j                  g d	              j                  t        j                        5 } t        j                  g       t        j                  g       t        j                  g              d
d
d
        j                  dt        j                               y
# 1 sw Y   /xY w)z>
        Test implementing a function with @overload.
        Tr  c                  P    t        | i |} | i |}j                  ||       y rJ   )r   r  )r   kwargsr  r  r  rD   s       r:   checkz0TestHighLevelExtending.test_where.<locals>.check  s1    00H((C##Hc2r9   r  r  )rv   r   r   )TFTr  )r  r  r  Nr   )r   r   r   bool_r|   assertRaisesr
   r   r  assertInstr	exception)rD   r  r  raisesr  s   `   @r:   
test_wherez!TestHighLevelExtending.test_where  s     "T"6*	3
 	"dAqHH()HHYHHY	
 v112f"((2,bhhrl; 30#f6F6F2G	
 32s   ADDc                      t        d      t              }| j                   |t                     d       | j                   |ddg      d       y)zN
        Test re-implementing len() for a custom type with @overload.
        Tr  r   r  r  r   N)r   r  r  r3   rD   r  s     r:   test_lenzTestHighLevelExtending.test_len  sD     #T";/gi 0"5q!fq1r9   c                      t        d      t              }t               5   |t                      | j	                  t
        j                  j                         d       ddd       y# 1 sw Y   yxY w)zP
        Test re-implementing print() for a custom type with @overload.
        Tr  zhello!
N)r   r  r   r3   r  sysstdoutgetvaluer  s     r:   
test_printz!TestHighLevelExtending.test_print  sN     #T"=1')SZZ002J? s   ?A))A2c                 
   t         } t        d      |      }| j                   |dd      d       | j                   |t               t                     d       | j                   |t	               t	                     d       y	zW
        Test re-implementing operator.add() for a custom type with @overload.
        Tr  r/   r   r  rP   T   N)r   r   r  MyDummy2r3   r  s      r:   test_add_operatorz(TestHighLevelExtending.test_add_operator  sh     #"T"6*aQ/hj(* =rB 	gi ;R@r9   c                 
   t         } t        d      |      }| j                   |dd      d       | j                   |t               t                     d       | j                   |t	               t	                     d       y	zY
        Test re-implementing '+' for a custom type via @overload(operator.add).
        Tr  r/   r   r  rP   r  N)r   r   r  r  r3   r  s      r:   test_add_binopz%TestHighLevelExtending.test_add_binop  sh      "T"6*aQ/hj(* =rB 	gi ;R@r9   c                 
   t         } t        d      |      }| j                   |dd      d       | j                   |t               t                     d       | j                   |t	               t	                     d       yr  )r   r   r  r  r3   r  s      r:   test_iadd_operatorz)TestHighLevelExtending.test_iadd_operator  sh     $"T"6*aQ/hj(* =rB 	gi ;R@r9   c                 
   t         } t        d      |      }| j                   |dd      d       | j                   |t               t                     d       | j                   |t	               t	                     d       yr  )r   r   r  r  r3   r  s      r:   test_iadd_binopz&TestHighLevelExtending.test_iadd_binop!  sh     !"T"6*aQ/hj(* =rB 	gi ;R@r9   c                    t         } t        d      |      }t               }d }t               5 }	  ||d       d d d        ||| j                  j                         d       y # t        $ r}|}Y d }~=d }~ww xY w# 1 sw Y   FxY w)NTr  A  zdel hello! 321
)r  r   r3   r   ra  r  r  rD   r  r  r\   eoutexcs          r:   test_delitemz#TestHighLevelExtending.test_delitem/  s    "T"6*i#c3  =G);<   s.   A?	A''	A<0A72A?7A<<A??Bc                 v    t         } t        d      |      }| j                   |t               d      d       y )NTr  r  i  )r  r   r  r3   r  s      r:   test_getitemz#TestHighLevelExtending.test_getitem?  s1    "T"6*gi 5yAr9   c                    t         } t        d      |      }t               }d }t               5 }	  ||dd       d d d        ||| j                  j                         d       y # t        $ r}|}Y d }~=d }~ww xY w# 1 sw Y   FxY w)NTr  r  r   z321 123
)r  r   r3   r   ra  r  r  r  s          r:   test_setitemz#TestHighLevelExtending.test_setitemD  s    "T"6*i#c3$  =G5   s.   B 
A((	A=1A83B 8A==B  B	c                 z    t        d      t              }d} ||      }t        |      }t        j                  j	                  ||        t        d      t
              }| j                  t              5 } |        ddd       t        j                        }d}| j                  ||       y# 1 sw Y   3xY w)zW
        Test overloading whose return value cannot be represented in CPython.
        Tr  
   Nzcannot convert native Module)r   r;  r   testingassert_equalr=  r  	TypeErrorr  r  r  )	rD   ok_cfuncnr  expect	bad_cfuncr  errmsg	expectmsgs	            r:   test_no_cpython_wrapperz.TestHighLevelExtending.test_no_cpython_wrapperT  s     &3%&<=qk'*


,&C&'>?	y)VK *V%%&2	i(	 *)s   7B11B:c                    dd}d}dd}| j                  t        j                        5 }  ||      dddd       ddd       t        j                        }| j                  ||       | j                  d	|       | j                  d
|       | j                  d|       dd}| j                  t        j                        5 }  ||      dddd       ddd       t        |j                        }| j                  ||       | j                  d|       | j                  d|       | j                  d|       dd}| j                  t        j                        5 }  ||      dddd       ddd       t        |j                        }| j                  ||       | j                  d|       | j                  d|v        | j                  d|       | j                  d|       ddlm}m	}	 | j                  t        j                        5 }  ||      dddd       ddd       t        |j                        }| j                  ||       | j                  d|       | j                  d|v        | j                  d|       | j                  t        j                        5 }  ||	      dddd       ddd       t        |j                        }| j                  ||       | j                  d|       | j                  d|v        | j                  d|       | j                  d|       dd}
| j                  t        j                        5 }  ||
      dddd       ddd       t        |j                        }| j                  ||       | j                  d|       | j                  d|v        | j                  d|       | j                  d|       dd}| j                  t        j                        5 }  ||      dddd       ddd       t        |j                        }| j                  ||       | j                  d|       | j                  d|v        | j                  d|       d d}| j                  t        j                        5 }  ||      dddd       ddd       t        |j                        }| j                  ||       | j                  d|       | j                  d|       d }| j                  t        j                        5 }  ||      dddd       ddd       t        |j                        }| j                  ||       | j                  d|       | j                  d|       y# 1 sw Y   NxY w# 1 sw Y   xY w# 1 sw Y   4xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   fxY w# 1 sw Y   xY w# 1 sw Y   8xY w# 1 sw Y   xY w)!z}
        Tests that an overload which has a differing typing and implementing
        signature raises an exception.
        Nc                 b     ddt              d fd	       }t        d      fd       }|S )Nc                      y rJ   r8   rK  brM   kws       r:   
myoverloadzjTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.gen_ol.<locals>.myoverloadn      r9   c                     S rJ   r8   )rK  r  rM   r  impls       r:   _myoverload_implzpTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.gen_ol.<locals>._myoverload_implq  s    r9   Tr  c                      | |||       y )Nr  r8   )rK  r  rM   r  r  s       r:   foozcTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.gen_ol.<locals>.foou  s    1aq)r9   rJ   r   r   )r  r  r  r  s   `  @r:   gen_olzVTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.gen_olm  sA     j! " $*  * Jr9   z-Typing and implementation arguments differ inc                     | dkD  ryyNr  r/   r8   r  s       r:   impl1zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl1~      2vr9   r/   r   r  r  zkeyword argument default valuesz<Parameter "kw=12">z<Parameter "kw=None">c                     | dkD  ryyr  r8   )rK  r  rM   kwargs       r:   impl2zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl2  r  r9   zkeyword argument namesz<Parameter "kwarg=None">c                     t         dkD  ryyr  rJ  )zr  rM   r  s       r:   impl3zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl3  s    2vr9   zargument nameskeywordz<Parameter "a">z<Parameter "z">)impl4impl5zFirst difference: 'z'c                     | dkD  ryyr  r8   )rK  r  rM   r  r  r  s         r:   impl6zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl6  r  r9   z<Parameter "d">z<Parameter "e">c                     | dkD  ryyr  r8   )rK  r  r  s      r:   impl7zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl7  r  r9   z<Parameter "c">c                     | dkD  ryyr  r8   )rK  r  rM   r  extra_kwargs        r:   impl8zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl8  r  r9   z<Parameter "extra_kwarg=None">c                     | dkD  ryyr  r8   )rK  r  rM   s      r:   impl9zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl9  r  r9   rJ   )   )NN)
r  r
   r   r  r  r  assertFalseoverload_usecasesr&  r'  )rD   r  sentinelr  r  msgr!  r$  r&  r'  r)  r+  r.  r0  s                 r:   /test_typing_vs_impl_signature_mismatch_handlingzFTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handlingg  s   	 C	 v112aF5M!Q1% 3!++h$7=+S1-s3	 v112aF5M!Q1% 3!++h$.40#6-s3	 v112aF5M!Q1% 3!++h$&,c)*'-'-3v112aF5M!Q1% 3!++h$&,c)*-s3v112aF5M!Q1% 3!++h$&,c)*'-'-	 v112aF5M!Q1% 3!++h$&,c)*'-'-	 v112aF5M!Q1% 3!++h$&,c)*'-	 v112aF5M!Q1% 3!++h$.46<	 v112aF5M!Q1% 3!++h$.4-s3g 32 32 32 32 32  32  32 32 32sk   VVV"V/&V<W	 WW#"W0VV"V,/V9<W	WW #W-0W9c                 P   ddddl m}  t              |       t        d      fd       }| j	                  t
        j                        5 } |dd       ddd       t        j                        }| j                  d	|       | j                  d
|       y# 1 sw Y   CxY w)z
        Tests that an overload which has a differing typing and implementing
        signature raises an exception and uses VAR_POSITIONAL (*args) in typing
        Nc                      y rJ   r8   rK  r  s     r:   r  ziTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_positional.<locals>.myoverload      r9   r/   )var_positional_implTr  c                      | |dd      S )N	      r  r8   rK  r  r  s     r:   r  zbTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_positional.<locals>.foo  s    aA"--r9   r  z)VAR_POSITIONAL (e.g. *args) argument kindz-offending argument name is '*star_args_token'rJ   )
r3  r;  r   r   r  r
   r   r  r  r  )rD   r;  r  r  r5  r  s        @r:   >test_typing_vs_impl_signature_mismatch_handling_var_positionalzUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_positional  s    	 	;01	d		. 
	. v112a1I 3!++A3GEsK	 32s   
BB%c                 *   d
d}d }  ||d      dd       | j                  t        j                        5 }  ||      dd       ddd       t        j                        }| j                  d|       | j                  d|       dd	}| j                  t        j                        5 }  ||      dd       ddd       t        |j                        }| j                  d|       | j                  d|       y# 1 sw Y   xY w# 1 sw Y   OxY w)zJ
        Tests that an overload which uses **kwargs (VAR_KEYWORD)
        c                 ^    dd t        |      |        t        d      fd       }|S )Nc                      y rJ   r8   r9  s     r:   r  zvTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.gen_ol.<locals>.myoverload  r  r9   strictTr  c                      | d      S )Nr>  r  r8   r?  s     r:   r  zoTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.gen_ol.<locals>.foo  s    !!++r9   rJ   r  )r  rE  r  r  s      @r:   r  zbTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.gen_ol  s9     0HZ/5$,  , Jr9   c                     dd}|S )Nc                     | S rJ   r8   r9  s     r:   r  zmTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.ol1.<locals>.impl#      r9   r  r8   )rK  rF  r  s      r:   ol1z_TestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.ol1"  s     Kr9   Fr/   r   Nz1use of VAR_KEYWORD (e.g. **kwargs) is unsupportedz"offending argument name is '**kws'c                     d }|S )Nc                     | S rJ   r8   )rK  rF  s     r:   r  zmTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.ol2.<locals>.impl1  rI  r9   r8   )rK  r  r  s      r:   ol2z_TestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.ol20  s     Kr9   )T)r   )r  r
   r   r  r  r  )rD   r  rK  r  r5  rN  s         r:   ;test_typing_vs_impl_signature_mismatch_handling_var_keywordzRTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword  s    

		 	sE1a v112aF3K1 3!++I3O:C@	 v112aF3K1 3!++I3O:C@# 32 32s   C=+D	=D	Dc                     t        t        j                  d      dd       }t        d        }t	        j
                  d      }| j                   ||      d       y )Nr  c                     dd}|S )Nc                     |S rJ   r8   )r   a_kwargs     r:   r  zQTestHighLevelExtending.test_overload_method_kwargs.<locals>.fooimpl.<locals>.impl@  s    r9   rJ  r8   )r   rS  r  s      r:   fooimplzCTestHighLevelExtending.test_overload_method_kwargs.<locals>.fooimpl>  s     Kr9   c                 f    | j                         | j                  d      | j                  d      fS )N      )rS  )r  As    r:   barz?TestHighLevelExtending.test_overload_method_kwargs.<locals>.barE  s(    557AEE"IquuRu'888r9   r  )r  rV  rW  rJ  )r   r	   r   r   r   r8  r  )rD   rT  rZ  Zs       r:   test_overload_method_kwargsz2TestHighLevelExtending.test_overload_method_kwargs<  sV    	e	,	 
-	 
	9 
	9 IIaLQ.r9   c                     t        t        j                  d      d        }t        d        }t	        j
                  d      } ||       | j                   ||      d       y )Nlitfooc                 x    t        |t        j                        r t        |t        j                        sd }|S y y )Nc                     |S rJ   r8   )r   rL   s     r:   r  zXTestHighLevelExtending.test_overload_method_literal_unpack.<locals>.litfoo.<locals>.implV  s    "
r9   )r@   r	   r   Literal)r   rL   r  s      r:   r^  zJTestHighLevelExtending.test_overload_method_literal_unpack.<locals>.litfooO  s6     #u}}-!#u}}5#  K 6 .r9   c                 $    | j                  d      S N  )r^  rX  s    r:   rZ  zGTestHighLevelExtending.test_overload_method_literal_unpack.<locals>.bar[  s    88F##r9   r/   rd  )r   r	   r   r   r   zerosr  )rD   r^  rZ  rY  s       r:   #test_overload_method_literal_unpackz:TestHighLevelExtending.test_overload_method_literal_unpackM  s]    	h	/		  
0		  
	$ 
	$ HHQKAQ(r9   c                 J    t         d        }| j                   |       d       y )Nc                  4    t        j                  t              S rJ   )r   exprH   r8   r9   r:   testz8TestHighLevelExtending.test_overload_ufunc.<locals>.testg  s    66'?"r9   ry  )r   r  )rD   rj  s     r:   test_overload_ufuncz*TestHighLevelExtending.test_overload_ufuncc  s*     
	# 
	# 	,r9   c           	         t        t        d      d        }t        d        }t               }| j	                   ||dd      d       | j	                   ||ddd      d       | j	                   ||dddd	      d
       t        d        }| j	                   ||      d       | j	                   ||ddd      d       | j	                   ||ddd      d       | j	                   ||ddd      d       y )Nmethod_starargc                     d }|S )Nc                     |||fS rJ   r8   )r\   rL   val2r   s       r:   getz\TestHighLevelExtending.test_overload_method_stararg.<locals>._ov_method_stararg.<locals>.getp  s    T4((r9   r8   )r\   rL   rp  r   rq  s        r:   _ov_method_starargzOTestHighLevelExtending.test_overload_method_stararg.<locals>._ov_method_starargn  s    ) Jr9   c                       | j                   | S rJ   rm  )r\   r   s     r:   r  z@TestHighLevelExtending.test_overload_method_stararg.<locals>.foou  s     &3%%t,,r9   r/   r   r/   r   r8   r  r/   r   r  r  r/   r   r  r  c                 r    | j                  dd      | j                  ddd      | j                  dddd      fS )Nr/   r   r  r  rt  rz  s    r:   rZ  z@TestHighLevelExtending.test_overload_method_stararg.<locals>.bar  sD     ""1a(""1a+""1aA. r9   )ru  rv  rx  rw  )r/   r   )rw  ry  )r/   r   )ry  r  )r  r  )r/   r   )r{  r   r=   r   r3   r  )rD   rr  r  r\   rZ  s        r:   test_overload_method_starargz3TestHighLevelExtending.test_overload_method_starargm  s   	&6	7	 
8	 
	- 
	- iS!Q4S!Q*L9S!Q1-~>		 
	 	H@	
 	Q4 /	
 	Q6"$5	
 	Q;')?	
r9   c                     G d dt         j                        t        d      d        }t        fd       }d}| j	                   ||      t        j                  |             t        d        }| j                  t        j                        5 } ||       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)	Nc                       e Zd Zy)ATestHighLevelExtending.test_overload_classmethod.<locals>.MyArrayNr4   r8   r9   r:   MyArrayr    s    r9   r  array_allocc                     d }|S )Nc                 0    t        j                  |      }|S rJ   r   r8  )clsnitemsr   s      r:   r  zVTestHighLevelExtending.test_overload_classmethod.<locals>.ol_array_alloc.<locals>.impl  s    ii'
r9   r8   )r  r  r  s      r:   ol_array_alloczHTestHighLevelExtending.test_overload_classmethod.<locals>.ol_array_alloc  s     Kr9   c                 &    j                  |       S rJ   )r  )r  r  s    r:   r  z=TestHighLevelExtending.test_overload_classmethod.<locals>.foo  s    &&v..r9   r   c                 @    t         j                  j                  |       S rJ   )r	   r   r  )r  s    r:   no_classmethod_in_basezPTestHighLevelExtending.test_overload_classmethod.<locals>.no_classmethod_in_base  s    ;;**622r9   z"Unknown attribute 'array_alloc' of)r	   r   r)   r   r  r   r8  r  r
   r   r  r  r  )rD   r  r  r  r  r  r  s         @r:   test_overload_classmethodz0TestHighLevelExtending.test_overload_classmethod  s    	ekk 	 
g}	5	 
6	 
	/ 
	/ FRYYv->? 
	3 
	3 v112f"6* 30  !	
 32s   	C

Cc                     t        t              d        }t        t              d        }t        d        }d}d|d   z   d|d   z   f}| j                   || |       y )	Nc                 B    t        | t        j                        rd }|S y )Nc                     d| z   S )N     @E@r8   ru   s    r:   r  zeTestHighLevelExtending.test_overload_callable_typeref.<locals>.callable_type_call_ovld1.<locals>.impl  s    !8Or9   )r@   r	   r   rv   r  s     r:   callable_type_call_ovld1zWTestHighLevelExtending.test_overload_callable_typeref.<locals>.callable_type_call_ovld1  s    !U]]+$ ,r9   c                 B    t        | t        j                        rd }|S y )Nc                     d| z   S )N42.5r8   ru   s    r:   r  zeTestHighLevelExtending.test_overload_callable_typeref.<locals>.callable_type_call_ovld2.<locals>.impl  s    !A:%r9   )r@   r	   UnicodeTyper  s     r:   callable_type_call_ovld2zWTestHighLevelExtending.test_overload_callable_typeref.<locals>.callable_type_call_ovld2  s#    !U../& 	 0r9   c                 .    t        |       t        |      fS rJ   )rO  rK  r  s     r:   r  zBTestHighLevelExtending.test_overload_callable_typeref.<locals>.foo  s    1:wqz))r9   )r  4r  r   r  r/   )r   rQ  r   r  )rD   r  r  r  r   r  s         r:   test_overload_callable_typerefz5TestHighLevelExtending.test_overload_callable_typeref  s|    	/	"	 
#	 
/	"	 
#	 
	* 
	* 47NFT!W$45T
H5r9   N)r5   r6   r7   r  r  r  r  r  r  r  r  r  r  r  r	  r6  r@  rO  r\  rf  rk  r}  r  r  r8   r9   r:   r  r    sx    
62@AAAA= B
6 )&P4dL.*AX/"),-)
V
@6r9   r  c                     | j                   | j                  d      }||k7  rt        d      | j                  | j                  d      }||k7  rt        d      y )Nr   zcache not used)_cache_hits
signaturesAssertionError_cache_misses)r  
expect_hitexpect_misseshitmisss        r:   _assert_cache_statsr    se    


E,,Q/
0C
j-..u//23D}-.. r9   c                       e Zd ZdZd Zd Zy)TestOverloadMethodCachingFc                     t        | j                  j                        | _        t	        d| j                        5  | j                          d d d        y # 1 sw Y   y xY w)N	CACHE_DIR)r   rY  r5   
_cache_dirr   run_caching_overload_methodr  s    r:   test_caching_overload_methodz6TestOverloadMethodCaching.test_caching_overload_method  s>    ()@)@A[$//:,,. ;::s   AAc                 
    t        dd      t              }| j                   |t                     d       t	        |dd       |j                  t        f      }|j                         D cg c]  }|j                  d      rd|v r| }}| j                  t        |      d       	 t        j                  d      }|j                         }|j                  t         || j"                  f	      }|j%                          |j'                  t                      |j)                          | j                  |j*                  d       |j-                  d
      }| j                  |d       y c c}w # t        $ r	 t        }Y w xY w)NTr  cacher   r   r/   declarer  spawn)targetr   )timeout)r   r  r  r3   r  inspect_llvmrK   
splitlines
startswithr  r  multiprocessingget_contextAttributeErrorQueueProcessr  r  startputjoinexitcoderq  )	rD   r  llvmirlndeclsctxqpr   s	            r:   r  z5TestOverloadMethodCaching.run_caching_overload_method  sT   .T./LMgi 0"5E1a(##\O4 '')
)}}Y',D,J ) 	 

 	UQ'	"!--g6C IIKKK.a5I  
 	
		gi	Q'eeAeb!+
  	"!C	"s   -E+)E0 0FFN)r5   r6   r7   _numba_parallel_test_r  r  r8   r9   r:   r  r    s     "/
"r9   r  c                     t        d|      5  | j                         } t        dd      t              } ||      }| j	                  |       t        |dd       ddd       y# 1 sw Y   yxY w)zH
    Used by TestOverloadMethodCaching.test_caching_overload_method
    r  Tr  r/   r   N)r   rq  r   r  r  r  )r  	cache_dirr   r  r   s        r:   r  r    sY     
i	0eeg.T./LMCj	c
E1a( 
1	0	0s   AA$$A-c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestIntrinsicc                 d   t         d        t         d        t        d      fd       }t        d      fd       }| j                   |       d       | j                  t              5 } |        ddd       | j                  d	j                  j                         y# 1 sw Y   0xY w)
z
        Verify that returning a None from codegen function is handled
        automatically for void functions, otherwise raise exception.
        c                 V    t        j                  t         j                        }d }||fS )Nc                      y rJ   r8   rE   rR   r+   r   s       r:   codegenzBTestIntrinsic.test_void_return.<locals>.void_func.<locals>.codegen  r  r9   r	   voidr|   r  rK  r   r  s       r:   	void_funcz1TestIntrinsic.test_void_return.<locals>.void_func  s%    **U[[)C <r9   c                 V    t        j                  t         j                        }d }||fS )Nc                      y rJ   r8   r  s       r:   r  zFTestIntrinsic.test_void_return.<locals>.non_void_func.<locals>.codegen&  r  r9   )r	   r|   r  s       r:   non_void_funcz5TestIntrinsic.test_void_return.<locals>.non_void_func"  s%    ++ekk*C <r9   Tr  c                        d       yNr/   r   r8   )r  s   r:   call_void_funcz6TestIntrinsic.test_void_return.<locals>.call_void_func+  s    aLr9   c                        d       yr  r8   )r  s   r:   call_non_void_funcz:TestIntrinsic.test_void_return.<locals>.call_non_void_func0  s    !r9   r   Nznon-void function returns None)r$   r   r  r  r   r  r  r5  )rD   r  r  r  r  r  s       @@r:   test_void_returnzTestIntrinsic.test_void_return  s     
	  
	  
	  
	  
d		 
	 
d		 
	
 	)1-}-  .6H .-s   /B&&B/c                     ddl m}m}m}m}  fdd t        d      fd       }d } |d	 ||      |      } ||      t        d
      fd       }t        j                  dt        j                        }	t               5 }
 ||	       |
j                         j                         }d	d	d	       
j                          t        t        t         |	            } j#                  |       y	# 1 sw Y   ExY w)zV
        Usecase test: custom reinterpret cast to turn int values to pointers
        r   )	CFUNCTYPEPOINTERc_floatc_intc                 `     t         t        j                        sJ t         fd       }|S )Nc                     j                  | t        j                         t        |t        j
                        r t        j                        }d }||fS y )Nc                 h    |\  }|j                   }| j                  |      }|j                  ||      S rJ   )r   get_value_typeinttoptr)rE   rR   r+   r   srcrtypellrtypes          r:   r  z_TestIntrinsic.test_ll_pointer_cast.<locals>.unsafe_caster.<locals>.unsafe_cast.<locals>.codegenM  s7     $ ) 5 5")"8"8"?&//W==r9   )r  r   Contextr@   r	   r   uintp)r  r  r   r  result_typerD   s       r:   unsafe_castzNTestIntrinsic.test_ll_pointer_cast.<locals>.unsafe_caster.<locals>.unsafe_castF  sI    %%i@c5==1%ekk2C> <' 2r9   )r@   r	   CPointerr$   )r  r  rD   s   ` r:   unsafe_casterz9TestIntrinsic.test_ll_pointer_cast.<locals>.unsafe_casterC  s1    k5>>:::( ( r9   c                     t        d      )Nznot callable from pythonrs   r  s    r:   unsafe_get_ctypes_pointerzETestIntrinsic.test_ll_pointer_cast.<locals>.unsafe_get_ctypes_pointerY  s    %&@AAr9   FrD  c                     t        | t        j                        r, t        j                  | j                              fd}|S y )Nc                 >     | j                   j                        S )Nr  )ctypesr)  )r   r  s    r:   
array_implzdTestIntrinsic.test_ll_pointer_cast.<locals>.array_impl_unsafe_get_ctypes_pointer.<locals>.array_impla  s    &3::??;;r9   )r@   r	   r   r  r   )arrtyper  r  r  s     @r:   $array_impl_unsafe_get_ctypes_pointerzPTestIntrinsic.test_ll_pointer_cast.<locals>.array_impl_unsafe_get_ctypes_pointer\  s:    '5;;/+ENN7==,IJ< "! 0r9   c                 @    t        |      D ]  }t        | |           y rJ   )r   r   )ptrr  r   s      r:   my_c_fun_rawz8TestIntrinsic.test_ll_pointer_cast.<locals>.my_c_fun_rawg  s    1Xc!f r9   NTr  c                 <     |       } || j                          y rJ   )r   )r   r  my_c_funr  s     r:   r  z/TestIntrinsic.test_ll_pointer_cast.<locals>.foop  s    +C0CS#((#r9   r  )r   )r  r  r  r  r  r   r   r   r8  float32r   r  r  closerg  mapr  r  )rD   r  r  r  r  r  r  	prototyper  r   bufr  r  r  r  r  s   `            @@@r:   test_ll_pointer_castz"TestIntrinsic.test_ll_pointer_cast<  s     	>=	,	B 
+E	:	" 
;	"	 dGG$4e<	\* 
d		$ 
	$
 ii"**-#H,,.++-C  			c#sm$% s   'C88Dc                    t         d        t        d      fd       }| j                   |d      d       t        j                  }t        |      }t        j                  |      }|dz  }| j                  |t        |             t        j                  |      }| j                  |t        |             | j                   |d       |d             t        j                        }| j                  |t        |             t        j                  |      }| j                  |       | j                  |t        |             y)z9
        Test serialization of intrinsic objects
        c                      d } ||      }||fS )Nc                     |d   S rD  r8   r  s       r:   r  zCTestIntrinsic.test_serialization.<locals>.identity.<locals>.codegen      Awr9   r8   )rE   rv   r  r   s       r:   identityz2TestIntrinsic.test_serialization.<locals>.identity  s     A$C<r9   Tr  c                      |       S rJ   r8   )rv   r  s    r:   r  z-TestIntrinsic.test_serialization.<locals>.foo  s    A;r9   r/   N)
r$   r   r  r%   _memor  pickledumpsloadsr  )	rD   r  memo	memo_sizeserialized_foofoo_rebuiltserialized_identityidentity_rebuiltr  s	           @r:   test_serializationz TestIntrinsic.test_serialization~  s   
 
	  
	  
d		 
	 	Q# I	  c*Q	CI.ll>2CI.QQ0 %ll84CI.!<<(;<h 01CI.r9   c                    d }t         j                  }t        |      }t        d|      }| j                  |j                  |       t        j                  |      }|dz  }| j                  |t        |             ~| j                  |t        |             t         j                  j                          |dz  }| j                  |t        |             t        j                  |      }| j                  |j                  |       t        j                  |      }| j                  |j                  |j                         y)z3
        Test deserialization of intrinsic
        c                     d } ||      |fS )Nc                     |d   S rD  r8   r  s       r:   r  zATestIntrinsic.test_deserialization.<locals>.defn.<locals>.codegen  r  r9   r8   )rE   rv   r  s      r:   defnz0TestIntrinsic.test_deserialization.<locals>.defn  s     Q4= r9   r  r/   N)r%   r
  r  r  _defnr  r  r  _recentclearr  assertIsNot)rD   r  r  r  originalpickledrebuiltseconds           r:   test_deserializationz"TestIntrinsic.test_deserialization  s    
	! I	 eT*hnnd+,,x(Q	CI. 	CI. 	  "Q	CI.,,w'- g&gmmV\\2r9   c                 N   t         dt        fd       }| j                  d|j                         | j                  d|j                         | j                  d|j
                         | j                  dt        i|j                         | j                  d|j                         y )NrK  c                 V    t        j                  t         j                        }d }||fS )void_func docstringc                      y rJ   r8   r  s       r:   r  z@TestIntrinsic.test_docstring.<locals>.void_func.<locals>.codegen  r  r9   r  r  s       r:   r  z/TestIntrinsic.test_docstring.<locals>.void_func  s'     **U[[)C <r9   znumba.tests.test_extendingr  z/TestIntrinsic.test_docstring.<locals>.void_funcr$  )	r$   intr  r6   r5   r7   assertDictEqual__annotations__r  )rD   r  s     r:   test_docstringzTestIntrinsic.test_docstring  s    		 C 	  
	  	5y7K7KLi&8&89J"//	1c3Z)B)BC.	0A0ABr9   N)r5   r6   r7   r  r  r  r!  r)  r8   r9   r:   r  r    s"    (IT@&D,/\&3PCr9   r  c                       e Zd Zd Zd Zy)TestRegisterJitablec                     t         d        fd} t        d      |      } |dd      } |dd      }| j                  ||       y )Nc                     | |z   S rJ   r8   )rv   r   s     r:   r  z.TestRegisterJitable.test_no_flags.<locals>.foo  s    q5Lr9   c                      | |      S rJ   r8   )rv   r   r  s     r:   rZ  z.TestRegisterJitable.test_no_flags.<locals>.bar  s    q!9r9   Tr  r/   r   )r&   r   r  )rD   rZ  cbarr  r  r  s        @r:   test_no_flagsz!TestRegisterJitable.test_no_flags  sS    		 
		 "sD!#&Q1aj%r9   c                 n   t        d      d        fd}| j                   |d      j                         g d        t        d      |      }| j	                  t
        j                        5 } |d	       d d d        d
}| j                  |t        j                               y # 1 sw Y   1xY w)NF)_nrtc                 ,    t        j                  |       S rJ   r  )r  s    r:   r  z2TestRegisterJitable.test_flags_no_nrt.<locals>.foo  s    99Q<r9   c                      |       S rJ   r8   )r  r  s    r:   rZ  z2TestRegisterJitable.test_flags_no_nrt.<locals>.bar  s    q6Mr9   r  )r   r/   r   Tr  r   COnly accept returning of array passed into the function as argument)
r&   r  tolistr   r  r
   r   r  r  r  )rD   rZ  r/  r  r5  r  s        @r:   test_flags_no_nrtz%TestRegisterJitable.test_flags_no_nrt  s    	u	%	  
&	 	 	Q)4!sD!#&v112fG 3 	 	c3v//01 32s   2	B++B4N)r5   r6   r7   r0  r7  r8   r9   r:   r+  r+    s    &2r9   r+  c                   ~    e Zd Z ej                  edu d      d        Zd Z ej                  edu d      d        Zy)TestImportCythonFunctionNz&Only run if SciPy >= 0.19 is installedc                     t        dd      }t        j                  t        j                  t        j                        } ||       t	        d      fd      }| j                   |d      d       y )Nscipy.special.cython_specialj0Tr  c                      |       S rJ   r8   )rv   _j0s    r:   rL  z@TestImportCythonFunction.test_getting_function.<locals>.<lambda>  s	    #a&r9   r   r/   )r'   r  r  c_doubler   r  )rD   addrfunctyper<  r>  s       @r:   test_getting_functionz.TestImportCythonFunction.test_getting_function  s]    **D
 ##FOOV__EtnS$ 01A"r9   c                     | j                  t              5 }t        dd       d d d        d}t        j                  |t        j                              }| j                  |       y # 1 sw Y   FxY w)N
fakemodulefakefunctionzNo module named '?fakemodule'?)r  ImportErrorr'   rematchr  r  r  )rD   r  r5  rH  s       r:   test_missing_modulez,TestImportCythonFunction.test_missing_module  sZ    {+v'nE , /c&"2"234U# ,+s   A((A1c                     | j                  t              5 }t        dd       d d d        d}| j                  |t	        j
                               y # 1 sw Y   1xY w)Nr;  r  zINo function 'foo' found in __pyx_capi__ of 'scipy.special.cython_special')r  r   r'   r  r  r  )rD   r  r5  s      r:   test_missing_functionz.TestImportCythonFunction.test_missing_function  sT    z*f'. +
- 	 	c&"2"234 +*s   AA)	r5   r6   r7   unittestskipIfscrB  rI  rK  r8   r9   r:   r9  r9    sS    X__R4Z!IJ# K#$ X__R4Z!IJ	5 K	5r9   r9  method_jit_option_check_nrtr2  Tjit_optionsc                     d }|S )Nc                 ,    t        j                  d      S Nr  r  rz  s    r:   r  z+ov_method_jit_option_check_nrt.<locals>.imp0      yy}r9   r8   r{  s     r:   ov_method_jit_option_check_nrtrV  ,       Jr9   method_jit_option_check_no_nrtFc                     d }|S )Nc                 ,    t        j                  d      S rT  r  rz  s    r:   r  z.ov_method_jit_option_check_no_nrt.<locals>.imp:  rU  r9   r8   r{  s     r:   !ov_method_jit_option_check_no_nrtr[  6  rW  r9   attr_jit_option_check_nrtc                     d }|S )Nc                 ,    t        j                  d      S rT  r  rz  s    r:   r  z)ov_attr_jit_option_check_nrt.<locals>.impD  rU  r9   r8   r{  s     r:   ov_attr_jit_option_check_nrtr_  @  rW  r9   attr_jit_option_check_no_nrtc                     d }|S )Nc                 ,    t        j                  d      S rT  r  rz  s    r:   r  z,ov_attr_jit_option_check_no_nrt.<locals>.impN  rU  r9   r8   r{  s     r:   ov_attr_jit_option_check_no_nrtrc  J  rW  r9   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestJitOptionsNoNRTc                     d}| j                  t        j                        5 } ||i | d d d        | j                  |t	        j
                               y # 1 sw Y   /xY w)Nr5  )r  r
   r   r  r  r  )rD   funcr   r  r5  r  s         r:   check_error_no_nrtz&TestJitOptionsNoNRT.check_error_no_nrtW  sX    ' 	 v112f$!&! 3c3v//01 32s   	AA"c                     d t        d|i      d        }t        fd       }|r+| j                   |       t        j                  d             y | j                  |       y )Nc                  ,    t        j                  d      S rT  r  r8   r9   r:   dummyz8TestJitOptionsNoNRT.no_nrt_overload_check.<locals>.dummyb  s    99R= r9   r2  rP  c                      d } | S )Nc                  ,    t        j                  d      S rT  r  r8   r9   r:   rk  zJTestJitOptionsNoNRT.no_nrt_overload_check.<locals>.ov_dummy.<locals>.dummyg  s    yy}$r9   r8   rk  s    r:   ov_dummyz;TestJitOptionsNoNRT.no_nrt_overload_check.<locals>.ov_dummye  s    % Lr9   c                               S rJ   r8   rn  s   r:   r  z6TestJitOptionsNoNRT.no_nrt_overload_check.<locals>.fool  s
    7Nr9   r  )r   r   r  r   r8  rh  )rD   flagro  r  rk  s       @r:   no_nrt_overload_checkz)TestJitOptionsNoNRT.no_nrt_overload_checka  sh    	! 
%fd^	4	 
5	 
	 
	 ##CE299R=9##C(r9   c                 H    | j                  d       | j                  d       y )NTF)rr  r  s    r:   test_overload_no_nrtz(TestJitOptionsNoNRT.test_overload_no_nrtu  s    ""4(""5)r9   c                     t         d        }| j                   |t              t        j                  d             t         d        }| j                  |t               y )Nc                 "    | j                         S rJ   )rO  ru   s    r:   udtz<TestJitOptionsNoNRT.test_overload_method_no_nrt.<locals>.udtz  s    0022r9   r  c                 "    | j                         S rJ   )rX  ru   s    r:   rw  z<TestJitOptionsNoNRT.test_overload_method_no_nrt.<locals>.udt  s    3355r9   r   r  rH   r   r8  rh  rD   rw  s     r:   test_overload_method_no_nrtz/TestJitOptionsNoNRT.test_overload_method_no_nrty  sV    		3 
	3 	Gbiim<		6 
	6 	W-r9   c                     t         d        }| j                   |t              t        j                  d             t         d        }| j                  |t               y )Nc                     | j                   S rJ   )r\  ru   s    r:   rw  z?TestJitOptionsNoNRT.test_overload_attribute_no_nrt.<locals>.udt  s    ...r9   r  c                     | j                   S rJ   )r`  ru   s    r:   rw  z?TestJitOptionsNoNRT.test_overload_attribute_no_nrt.<locals>.udt  s    111r9   ry  rz  s     r:   test_overload_attribute_no_nrtz2TestJitOptionsNoNRT.test_overload_attribute_no_nrt  sV    		/ 
	/ 	Gbiim<		2 
	2 	W-r9   N)r5   r6   r7   rh  rr  rt  r{  r  r8   r9   r:   re  re  T  s    2)(*..r9   re  c                   6     e Zd Z fdZd Zd Zd Zd Z xZS )TestBoxingCallingJITc                     t         |           t        d      }|\  | _        | _        | _        | j	                         | _        y )Nro   )rV  setUprn   rf   rb   rh   dyn_type)rD   manyrY  s     r:   r  zTestBoxingCallingJIT.setUp  s7    &z2=A:$,(:r9   c                    ddt         fd       t        | j                        fd       }t        | j                        d        }t        d        } || j
                        }| j                  |z          y )Nrd  r   c                 .    fd}t        ||      }||fS )Nc                 N    |\  }|j                  ||j                              S rJ   r   r]  rE   rR   r   r   rL   magic_offsets        r:   r  zKTestBoxingCallingJIT.test_unboxer_basic.<locals>.my_intrinsic.<locals>.impl  $    {{3(>??r9   r+   r  rL   r  r   r  s       r:   my_intrinsicz=TestBoxingCallingJIT.test_unboxer_basic.<locals>.my_intrinsic  !    @ C%C9r9   c                    	fd}|j                   j                  t        j                        g}t	        t        j
                  t        j                        }|j                  j                  |||      \  }}t        ||      S )Nc                      |       S rJ   r8   rv   r  s    r:   bridgezHTestBoxingCallingJIT.test_unboxer_basic.<locals>.unboxer.<locals>.bridge  s     $A&r9   is_error	rE   rQ   r	   intpr+   voidptrr   call_jit_coder#   )
r[   r\   rM   r  r   r   r  r   magic_tokenr  s
           r:   unboxerz8TestBoxingCallingJIT.test_unboxer_basic.<locals>.unboxer  sd    '
 II**5::{CDDEMM5::6CGG11&#tDMHcsX66r9   c                     |j                   j                  |t        j                        }|j                  j                  |      S rJ   rR   ptrtointr   intp_tr   long_from_ssize_tr[   rL   rM   r   s       r:   boxerz6TestBoxingCallingJIT.test_unboxer_basic.<locals>.boxer  3     ))$$S'..9C77,,S11r9   c                     | S rJ   r8   ru   s    r:   passthruz9TestBoxingCallingJIT.test_unboxer_basic.<locals>.passthru      Hr9   r$   r"   rf   r!   r   r  r  )rD   r  r  r  r  r  r  r  s        @@@r:   test_unboxer_basicz'TestBoxingCallingJIT.test_unboxer_basic  s     		 
	 
t	 
	7 
!
	7 
T		2 
	2
 
	 
	 t}}%kL89r9   c                 J   t        | j                        d        }t        | j                        d        }t        d        }| j	                  t
              5 } || j                         d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nc                    d }|j                   j                  t        j                  d      g}t	        t        j
                  t        j                        }|j                  j                  |||      \  }}t        ||      S )Nc                 &    | dkD  rt        d      | S )Nr   cannot be x > 0r   ru   s    r:   r  zHTestBoxingCallingJIT.test_unboxer_raise.<locals>.unboxer.<locals>.bridge      q5$%677r9   r/   r  r  )r[   r\   rM   r  r   r   r  r   s           r:   r  z8TestBoxingCallingJIT.test_unboxer_raise.<locals>.unboxer  sc    
 II**5::q9:DEMM5::6CGG11&#tDMHcsX66r9   c                     |j                   j                  |t        j                        }|j                  j                  |      S rJ   r  r  s       r:   r  z6TestBoxingCallingJIT.test_unboxer_raise.<locals>.boxer  r  r9   c                     | S rJ   r8   ru   s    r:   r  z9TestBoxingCallingJIT.test_unboxer_raise.<locals>.passthru  r  r9   r  
r"   rf   r!   r   r  r   r  r  r  r  rD   r  r  r  r  s        r:   test_unboxer_raisez'TestBoxingCallingJIT.test_unboxer_raise  s    	t	 
	7 
!
	7 
T		2 
	2
 
	 
	 z*fT]]# +s6#3#34	
 +*   BB"c                    ddt         fd       t        | j                        d        }t        | j                        fd       }t        d        } || j
                        }| j                  |z          y )Nrd  i8  c                 .    fd}t        ||      }||fS )Nc                 N    |\  }|j                  ||j                              S rJ   r  r  s        r:   r  zCTestBoxingCallingJIT.test_boxer.<locals>.my_intrinsic.<locals>.impl  r  r9   r  r  s       r:   r  z5TestBoxingCallingJIT.test_boxer.<locals>.my_intrinsic  r  r9   c                 H    t        |j                  j                               S rJ   rX   rZ   s      r:   r  z0TestBoxingCallingJIT.test_boxer.<locals>.unboxer      qyy88:;;r9   c                 *   	fd}|j                   j                  t        j                        g}t	        t        j                  t        j                        }|j
                  j                  |||      \  }}|j
                  j                  |      S )Nc                      |       S rJ   r8   r  s    r:   r  z>TestBoxingCallingJIT.test_boxer.<locals>.boxer.<locals>.bridge  s    #A&r9   )rE   rQ   r	   r  r+   r   r  r  )
r[   rL   rM   r  r   r   r  r   r  r  s
           r:   r  z.TestBoxingCallingJIT.test_boxer.<locals>.boxer  sl    ' II**5::{CDDEJJ

3CGG11&#tDMHc77,,S11r9   c                     | S rJ   r8   ru   s    r:   r  z1TestBoxingCallingJIT.test_boxer.<locals>.passthru  r  r9   r  )rD   r  r  r  rr  r  r  s        @@@r:   
test_boxerzTestBoxingCallingJIT.test_boxer  s    		 
	 
t	 	< 
!	< 
T		2 
	2 
	 
	 T]]#K,67r9   c                 J   t        | j                        d        }t        | j                        d        }t        d        }| j	                  t
              5 } || j                         d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nc                 H    t        |j                  j                               S rJ   rX   rZ   s      r:   r  z6TestBoxingCallingJIT.test_boxer_raise.<locals>.unboxer  r  r9   c                    d }|j                   j                  t        j                  d      g}t	        t        j                  t        j                        }|j
                  j                  |||      \  }}t        j                  |j                  |j
                  j                  d      }|j                  j                  |j                  j                  |            5  |j
                  j                  |      }	|j                  j                  |	|       d d d        |j                  j                  |      S # 1 sw Y   $xY w)Nc                 &    | dkD  rt        d      | S )Nr   cannot do x > 0r  ru   s    r:   r  zDTestBoxingCallingJIT.test_boxer_raise.<locals>.boxer.<locals>.bridge  r  r9   r/   T)zfill)rE   rQ   r	   r  r+   r   r  r   alloca_oncerR   pyobjif_thennot_r  storeload)
r[   rL   rM   r  r   r   r  r   retvalr\   s
             r:   r  z4TestBoxingCallingJIT.test_boxer_raise.<locals>.boxer  s    
 II**5::q9:DEJJ

3CGG11&#tDMHc((AGGMMNF""199>>(#;<gg//4		V, = 99>>&)) =<s   !8D<<Ec                     | S rJ   r8   ru   s    r:   r  z7TestBoxingCallingJIT.test_boxer_raise.<locals>.passthru   r  r9   r  r  r  s        r:   test_boxer_raisez%TestBoxingCallingJIT.test_boxer_raise	  s    	t	 	< 
!	< 
T		* 
	*  
	 
	 z*fT]]# +s6#3#34	
 +*r  )	r5   r6   r7   r  r  r  r  r  rm  rn  s   @r:   r  r    s    '(:T
>#8J
r9   r  c                      y rJ   r8   ru   s    r:   with_objmode_cache_ov_exampler  +  s     	r9   c                   \    e Zd ZdZdZd Zd Zd Zed        Z	ed        Z
ed        Zd	 Zy
)TestCachingOverloadObjmodezTTest caching of the use of overload implementations that use
    `with objmode`
    Fc                 L    t        j                  dt        j                         y )Nerror)warningssimplefilterr
   NumbaWarningr  s    r:   r  z TestCachingOverloadObjmode.setUp8  s    gv':':;r9   c                 ,    t        j                          y rJ   )r  resetwarningsr  s    r:   tearDownz#TestCachingOverloadObjmode.tearDown;  s     r9   c                    t        | j                  j                        }t        d|      5  d fdt	        t
              fd       }t        d      d        } d      } |d      }| j                  ||        t        d      |j                        } |d      }| j                  ||       d d d        y # 1 sw Y   y xY w)	Nr  c                 p    t        j                  |       | z  }t         j                  j                  |      S rJ   )r   r8  linalgnorm)rv   r   s     r:   realworkzJTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>.realworkB  s'    iilQ&yy~~c**r9   c                      |       S rJ   r8   )rv   r  s    r:   python_codezMTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>.python_codeG  s    {"r9   c                     fd}|S )Nc                 \    t        d      5   |       }d d d        |S # 1 sw Y   S xY wNr  )r   r   )rv   r   r  s     r:   r  zqTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>._ov_with_objmode_cache_ov_example.<locals>.implM  s)     9-'N .H .Hs   	!+r8   )rv   r  r  s     r:   !_ov_with_objmode_cache_ov_examplezcTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>._ov_with_objmode_cache_ov_exampleK  s    
 r9   Tr  c                     t        |       S rJ   )r  ru   s    r:   testcasezJTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>.testcaseT  s    4Q77r9   r   )	r   rY  r5   r   r   r  r   r  py_func)	rD   r  r  r  r  r  testcase_cachedr  r  s	          @@r:   test_caching_overload_objmodez8TestCachingOverloadObjmode.test_caching_overload_objmode>  s    "4>>#:#:;	[)4+
# 34 5 8 8 c]F3-CS&).d.x/?/?@O!#&CS&)= 544s   B
CC
c                     d d t              fd       }t        d      fd       } |       }|j                         }||k7  rt        d      |S )Nc                 2    t        j                  | |z         S rJ   r   sumr  s     r:   do_thiszGTestCachingOverloadObjmode.check_objmode_cache_ndarray.<locals>.do_thisb      66!a%= r9   c                 2    t        j                  | |z         S rJ   r  r  s     r:   do_somethingzLTestCachingOverloadObjmode.check_objmode_cache_ndarray.<locals>.do_somethinge  r  r9   c                     fd}|S )Nc                 ^    t        d      5   | |      }d d d        |S # 1 sw Y   S xY wr  r  )rK  r  r   r  s      r:   _do_something_implzqTestCachingOverloadObjmode.check_objmode_cache_ndarray.<locals>.overload_do_something.<locals>._do_something_implj  s+    y)1A * *s   
",r8   )rK  r  r  r  s      r:   overload_do_somethingzUTestCachingOverloadObjmode.check_objmode_cache_ndarray.<locals>.overload_do_somethingh  s     &%r9   Tr  c                  j    t        j                  d      } t        j                  d      } | |      S )NrV  r  )rK  r  r  s     r:   test_cachingzLTestCachingOverloadObjmode.check_objmode_cache_ndarray.<locals>.test_cachingp  s*    		"A		"A1%%r9   zincorrect result)r   r   r  r  )r  r  r  r  r  r  r  s        @@r:   check_objmode_cache_ndarrayz6TestCachingOverloadObjmode.check_objmode_cache_ndarray`  sq    	!	! 
,		& 
 	& 
D		& 
	&
 n%%' &= !344r9   c                 $    | j                          y rJ   )r  )r  s    r:   *populate_objmode_cache_ndarray_check_cachezETestCachingOverloadObjmode.populate_objmode_cache_ndarray_check_cache~  s    '')r9   c                     | j                         }t        |j                  j                        dk7  rt	        d      t        |j                  j
                        dk  rt	        d      y )Nr   zunexpected cache misszunexpected missing cache hit)r  r  statscache_missesr  
cache_hits)r  disps     r:   'check_objmode_cache_ndarray_check_cachezBTestCachingOverloadObjmode.check_objmode_cache_ndarray_check_cache  s[    ..0tzz&&'1, !899tzz$$%* !?@@ +r9   c                    t        | j                  j                        }t        d|      5  t	        | j
                  |       t	        | j                  |      }d d d        | j                  d   d       y # 1 sw Y   xY w)Nr  r  r   )r   rY  r5   r   r   r  r  r  )rD   r  r   s      r:    test_check_objmode_cache_ndarrayz;TestCachingOverloadObjmode.test_check_objmode_cache_ndarray  sp     #4>>#:#:;	[)4+?? 2<<iC 5 	Z!, 54s   -A77B N)r5   r6   r7   r  r  r  r  r  classmethodr  r  r  r  r8   r9   r:   r  r  1  sb     "<! *D  : * * A A-r9   r  c                       e Zd Zd Zd Zy)TestMiscc           	      r   d }| j                  t        |             | j                  t        t        |                   | j                  t        t	        |                   | j                  t         t	        d      |                   | j                  t         t        dd      |                   y )Nc                      y rJ   r8   ru   s    r:   r  z$TestMisc.test_is_jitted.<locals>.foo  r:  r9   T)parallelzvoid(float64[:])z(m))r2  r(   r  r   r   r   )rD   r  s     r:   test_is_jittedzTestMisc.test_is_jitted  s    	 	3(	$s),-9S>23#;9d#;C#@AB<k"4e<SAB	
r9   c                     t         d        }t         d        }| j                   |       |j                                | j                   |       |j                                y )Nc                  D    t        j                  dd      j                  S )Nr     )r   
fill_valuer   fullr   r8   r9   r:   standard_orderz:TestMisc.test_overload_arg_binding.<locals>.standard_order  s    775;;;r9   c                  D    t        j                  dd      j                  S )Nr  r   )r  r   r  r8   r9   r:   reversed_orderz:TestMisc.test_overload_arg_binding.<locals>.reversed_order  s    77c5;;;r9   )r   r  r  )rD   r  r  s      r:   test_overload_arg_bindingz"TestMisc.test_overload_arg_binding  sd     
	< 
	< 
	< 
	< 	 0.2H2H2JK 0.2H2H2JKr9   N)r5   r6   r7   r  r  r8   r9   r:   r  r    s    

Lr9   r  c                       e Zd Zd Zd Zy)TestOverloadPreferLiteralc                    d d d } t        d      |        t              |       t        fd       } |d      \  }}}| j                  |d       | j                  |d	       | j                  |d
       t        fd       } |d      \  }}}| j                  |d       | j                  |d	       | j                  |d
       y )Nc                      y rJ   r8   ru   s    r:   
prefer_litz;TestOverloadPreferLiteral.test_overload.<locals>.prefer_lit  r:  r9   c                      y rJ   r8   ru   s    r:   non_litz8TestOverloadPreferLiteral.test_overload.<locals>.non_lit  r:  r9   c                     t        | t        j                        r)| j                  dk(  rd }|S t	        j
                  d      d }|S )Nr/   c                      yrc  r8   ru   s    r:   r  zATestOverloadPreferLiteral.test_overload.<locals>.ov.<locals>.impl      %r9   literal valuec                     | dz  S Nd   r8   ru   s    r:   r  zATestOverloadPreferLiteral.test_overload.<locals>.ov.<locals>.impl      s7Nr9   r@   r	   IntegerLiteralliteral_valuer
   r   r  s     r:   ovz3TestOverloadPreferLiteral.test_overload.<locals>.ov  C    !U112??a'&K ,,_==#r9   Tprefer_literalc                 2     d       d       |       fS Nr/   r   r8   rv   r  s    r:   check_prefer_litzATestOverloadPreferLiteral.test_overload.<locals>.check_prefer_lit      a=*Q-A>>r9   r  rd     ,  c                 2     d       d       |       fS r.  r8   rv   r  s    r:   check_non_litz>TestOverloadPreferLiteral.test_overload.<locals>.check_non_lit      1:wqz71:55r9   r$  )r   r   r  )	rD   r)  r0  rK  r  rM   r6  r  r  s	          @@r:   test_overloadz'TestOverloadPreferLiteral.test_overload  s    			 	2D1"5"		? 
	? #1%1aF#C C 		6 
	6  "1aC C C r9   c                    d } t        t        dd      |        t        t        dd      |       t        d        } |t               d      \  }}}| j	                  |d	       | j	                  |d
       | j	                  |d       t        d        } |t               d      \  }}}| j	                  |d       | j	                  |d
       | j	                  |d       y )Nc                     t        |t        j                        r)|j                  dk(  rd }|S t	        j
                  d      d }|S )Nr/   c                      yrc  r8   rD   rv   s     r:   r  zHTestOverloadPreferLiteral.test_overload_method.<locals>.ov.<locals>.impl  r   r9   r!  c                     |dz  S r#  r8   r<  s     r:   r  zHTestOverloadPreferLiteral.test_overload_method.<locals>.ov.<locals>.impl  r%  r9   r&  )rD   rv   r  s      r:   r)  z:TestOverloadPreferLiteral.test_overload_method.<locals>.ov  r*  r9   method_prefer_literalTr+  method_non_literalFc                 f    | j                  d      | j                  d      | j                  |      fS r.  )r>  rk  rv   s     r:   r0  zHTestOverloadPreferLiteral.test_overload_method.<locals>.check_prefer_lit  s8     ++A.++A.++A. r9   r  rd  r2  r3  c                 f    | j                  d      | j                  d      | j                  |      fS r.  )r?  rA  s     r:   r6  zETestOverloadPreferLiteral.test_overload_method.<locals>.check_non_lit  s8     ((+((+((+ r9   r$  r|  )rD   r)  r0  rK  r  rM   r6  s          r:   test_overload_methodz.TestOverloadPreferLiteral.test_overload_method  s    		
0	
 	
	
- 	
 	
 
	 
	 #79a01aF#C C 		 
	  	1-1aC C C r9   N)r5   r6   r7   r8  rC  r8   r9   r:   r  r    s    (!T1!r9   r  c                       e Zd Zd Zy)TestIntrinsicPreferLiteralc                    d } t        d      |       t        d      |      t        fd       } |d      \  }}}| j                  |d       | j                  |d       | j                  |d	       t        fd
       } |d      \  }}}| j                  |d       | j                  |d       | j                  |d	       y )Nc                     t        t        j                  |      }t        |t        j                        r+|j
                  dk(  rd }||fS t        j                  d      d }||fS )Nr/   c                 n    |j                   d   }| j                  |      }t        j                  |d      S )Nr   rd  )r   r  r   Constant)rE   rR   r+   r   atyper  s         r:   r  zJTestIntrinsicPreferLiteral.test_intrinsic.<locals>.intrin.<locals>.codegen  s1     )q 1")"8"8"?!{{7F;;r9   r!  c                     |j                   }| j                  |      }t        j                  |d      }|j	                  |d   |      S )Nr$  r   )r   r  r   rI  mul)rE   rR   r+   r   rJ  r  int_100s          r:   r  zJTestIntrinsicPreferLiteral.test_intrinsic.<locals>.intrin.<locals>.codegen%  sB    %11E%44U;G kk'37G";;tAw88r9   )r+   r	   r  r@   r'  r(  r
   r   )rE   rv   r   r  s       r:   intrinz9TestIntrinsicPreferLiteral.test_intrinsic.<locals>.intrin  sa    EJJ*C!U112??a'< <' ,,_==9
 G|#r9   Tr+  Fc                 2     d       d       |       fS r.  r8   r/  s    r:   r0  zCTestIntrinsicPreferLiteral.test_intrinsic.<locals>.check_prefer_lit/  r1  r9   r  rd  r2  r3  c                 2     d       d       |       fS r.  r8   r5  s    r:   r6  z@TestIntrinsicPreferLiteral.test_intrinsic.<locals>.check_non_lit8  r7  r9   r$  )r$   r   r  )	rD   rN  r0  rK  r  rM   r6  r  r  s	          @@r:   test_intrinsicz)TestIntrinsicPreferLiteral.test_intrinsic  s    	$* 4Yd3F;
1)51&9		? 
	? #1%1aF#C C 		6 
	6  "1aC C C r9   N)r5   r6   r7   rQ  r8   r9   r:   rE  rE    s    )!r9   rE  c                       e Zd Zd Zy)TestNumbaInternalOverloadsc                    dfdfd}t        d       j                  d       t        j                  j                  j
                  j                         }|j                          |j                  }|j                         D ]A  \  }}|j                  D ]-  }t        |dd      s ||j                  |j                         / C y )Nr   c                    | j                  d      st        t        j                  |       }t	        j
                  |      r|j                  j                         }|D ]k  }|s|j                         }|j                  |       s(| dk(  rd}d| d}i }	 t        |i |       |j                  |       }t	        j                  |      c S  y y y # t        $ r dk(  rt        d       Y  y w xY w)N_seedz
seed(seed)zdef z:
	passr   z%... skipped as cannot parse signature)r  r_  r   randominspect	isbuiltinr  r  stripexecrq  r+   SyntaxErrorr   )rv   thingdocstrlsl	fake_implfnDEBUGs          r:   sig_from_np_randomz[TestNumbaInternalOverloads.test_signatures_match_overloaded_api.<locals>.sig_from_np_randomS  s    <<$		1-$$U+"]]557F#!"B!}}Q/ $%;)5B.22$i,@	$&
!A$(B$: *+qB+2+<+<R+@$@- $ , %$ (3 !0',z(- /: );+/!0s   CC,+C,c                    dk(  rt        d|         d }d }	 t        j                  |       }|wt        j                  |      }t        |j                  j                               }t        |j                  j                               }t        |d t        |       |      D ]  \  }	}
|	|
k7  s|j                  |	   }|j                  |j                  k(  rdk(  rt        d        y dt        |      v rdk(  rt        d        y | j                  r| j                  j!                  d	      s: || |||      }d
k7  rdk(  rt        d       |rt        |        y t        |      dk(  r$| j                  st        d        y t        d        y  dk(  rt        d       y y y # t        $ r= t	        | dd      x}r*t	        t
        j                  |d      x}r|| k(  r |      }Y w xY w)Nr   z
Checking: c                    g }|  dt        | d       d}|j                  |       |j                  d|        |j                  d|        t        j                  |      d   }t        j                  |      }|j                  t        j                  d   d      }|j                  d	| d
|        ddj                  |      z   }	|	S )Nz from module 'r6   z' has mismatched sig.z    - expected: z    -      got: r/   r    zfrom :
)	r_  r`  rY  getsourcelinesgetfilereplacenumba__path__r  )
rg  overload_funcfunc_sigol_sigr5  r  lineno
tmpsrcfilesrcfilemsgstrs
             r:   create_messagezhTestNumbaInternalOverloads.test_signatures_match_overloaded_api.<locals>.checker.<locals>.create_messaget  s    v^GD,,G+H I+ +

1

-hZ89

-fX67 //>qA$__];
$,,U^^A->C

U7)1VH56		#.r9   r5   Fz.... skipped as positional only arguments found*z... skipped as contains *argsrn  r   z... INVALIDz$... skipped as no __module__ presentz... skipped as Numba internalz... OK)r   rY  r+   r   r_  r   rX  rg  
parametersrh  zipr  kindPOSITIONAL_ONLYr  r6   r  )rg  rp  rw  rq  fname
maybe_funcrr  rv   r   rK  r  r  rv  rd  re  s                r:   checkerzPTestNumbaInternalOverloads.test_signatures_match_overloaded_api.<locals>.checkerp  s   z
4&)* HA",,T2 # **=9,,1134**//12'3q6
A.DAqAv$//266Q%6%66$z % '8 !9! CF]$z %&E F! %)OO(,(B(B7(K)7m8@&*J#(A:',z(-m(<'-(-f$)*4V*<$<#(A:+/??(- /8 )9 !& )..M(N %G /J zh "S $  A#D*e<<5<%,RYYu%EEzE%-'9%'@HAs   F+ +AG10G1c                       y rJ   r8   r8   r9   r:   rL  zQTestNumbaInternalOverloads.test_signatures_match_overloaded_api.<locals>.<lambda>  s    dr9   r8   _overload_funcF)r   compilern  corer   rE   r  r  _registriesitems	functionsr_  r   r  )	rD   r  tyctxregskvitemrd  re  s	          @@r:   $test_signatures_match_overloaded_apiz?TestNumbaInternalOverloads.test_signatures_match_overloaded_apiD  s     	A:G	(V 	]##B'

!!))113   JJLDAq4!159DHHd&9&9: $ !r9   N)r5   r6   r7   r  r8   r9   r:   rS  rS  B  s    @;r9   rS  __main__rJ   )rY  r   r   r  r  r  r  r  rG  numpyr   llvmliter   rn  r   r   r   r   r   
numba.corer	   r
   r   r   r   numba.core.typed_passesr   numba.core.registryr   numba.core.imputilsr   numba.tests.supportr   r   r   r   r   r   numba.core.errorsr   rL  numba.extendingr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   numba.core.typing.templatesr*   r+   r,   r-   r.   pdlike_usecaser0   r1   scipy.special.cython_specialspecialcython_specialrN  rF  ri   r3   rj   r=   rK   rH   rk   rN   rA   rT   rV   rl   r]   rn   r   r  mydummy_type_2rq   rw   r   r  r{   r   r}   r   r   r   r   r   r   r   r   r  r   r   r   delitemr   getitemr   setitemr   r   r   iaddr   r   r   r  r  r  r  r  r  r  r  r  r  r  r!  r$  r'  r+  r0  r3  r6  r;  r=  r@  rB  rM  rO  CallablerQ  rp  rv  ri  r|  r~  r  r  r  r  r  r  r+  r9  rV  r[  r_  rc  re  r  r  r  r  r  rE  rS  r5   mainr8   r9   r:   <module>r     s
      
     	    < < ? ? 8 * .  ,     (  *--	f 	#%,, # 9%
) g  K&* '* { F.. / {4 4/" *A)L &h |4 4	 "]5!+.
 uuejj!5 " 5 uekk"D #D 2! 2 2
 |[)% *% ! 
%* *b 
% 2 
#  
(,,  
(

" " 
(

" " 
(

" "$ 
(-- $ h' (% 

 
 	 m,# , ,	f 	)enn )D  8** 8 !8 Wog. /  % !% 
"&& .
H .
b^IX ^IBI6X I6X/ %" %" %"P
)UCH UCp 2(++  2F5x00 5@ .VTN 1 ,64. /fe_=.( =.@T
8 T
n	 e- e- e-PLx L8\! \!~*! *!ZB; B;J zHMMO KD  	Bs   :	R R('R(