
    J/Ph`
                    
   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 n# eI$ r dZHY nw xY w G d deJ          ZK G d dejL                  ZM eMd          ZN eK            ZO e*jP        eK          d             ZQ e-eMejR                  d             ZSd ZT  e2eM          e1jU                    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ja                  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jl                  d(             Zm e.ejn                  d)             Zo e.ejp                  d*             Zq e.ejr                  d+             Zsd, Ztd- Zu e.ejv                  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 dOe1jU                              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                     dS dS )    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dS )MyDummyN__name__
__module____qualname__     Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_extending.pyr3   r3   J           Dr9   r3   c                       e Zd Zd ZdS )MyDummyTypec                 T    t          |t          j                  rddlm} |j        S d S )Nr   )
Conversion)
isinstancer	   Numbernumba.core.typeconvr?   safe)selfcontexttotyr?   s       r:   can_convert_tozMyDummyType.can_convert_toO   s:    dEL)) 	#66666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                 .    |                      |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                 N    t          |j                                                  S rJ   r#   rE   get_dummy_valuetypobjrM   s      r:   unbox_indexr]   n       qy00223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dS )(base_dummy_type_factory.<locals>.DynTypeNr4   r8   r9   r:   DynTypera   x           r9   rb   c                       e Zd ZdS ),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   s        &       el     K%%M'""    #"  N; 2333..r9   mydummy2c                 N    t          |j                                                  S rJ   rX   rZ   s      r:   unbox_index2rq      r^   r9   c                     t           rJ   NotImplementedErrorxs    r:   func1rw          
r9   c                     dd}|S )Nc                 v    | d t           j        fv rt           j        S t          | t           j                  r| S d S rJ   )r	   noneint32r@   Floatru   s    r:   typerztype_func1_.<locals>.typer   s?    uz""";5;'' 	H	 	r9   rJ   r8   )rE   r~   s     r:   type_func1_r      s        Lr9   c                 8    |                      |j        d          S NrP   )rQ   return_type)rE   rR   sigargss       r:   func1_nullaryr      s     444r9   c                 8    d }|                      ||||          S )Nc                 0    t          j        d| z            S )N   )mathsqrtru   s    r:   
func1_implzfunc1_unary.<locals>.func1_impl   s    yQr9   )compile_internal)rE   rR   r   r   r   s        r:   func1_unaryr      s-          ##GZdCCCr9   c                   6    e Zd ZdZ eej        e          gZdS )
PrintDummy
print_itemN)	r5   r6   r7   keyr+   r	   r{   rK   casesr8   r9   r:   r   r      s)        
CYuz<001EEEr9   r   r   c                     |\  }|                      |          }|                    |                    d                    }|                    |           |                    |           |                                 S )Nzhello!)get_python_apiunserializeserialize_objectprint_objectdecrefrY   )rE   rR   r   r   rv   pyapistrobjs          r:   print_dummyr      su    
CQ""7++Eu55h??@@F	v	LL""$$$r9   c                     t           rJ   rs   condrv   ys      r:   wherer      rx   r9   c                 .    t          j        | ||          S )z8
    Wrap np.where() to allow for keyword arguments
    )npr   r   s      r:   np_wherer      s     8D!Qr9   c                 &    t          | ||          S )N)r   rv   )r   r   s      r:   
call_wherer      s    a    r9   c                     t          | t          j                  rI|j        |j        k    rt	          j        d          t          d | ||fD                       rd }nd }|S dS )z'
    Implement where() for arrays.
    "x and y should have the same dtypec              3   ,   K   | ]}|j         d k    V  dS )CN)layout).0tys     r:   	<genexpr>z(overload_where_arrays.<locals>.<genexpr>   s)      77BryC777777r9   c                 "   | j         }|j         |k    s|j         |k    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     
7e##qw%'7'7$%LMMMmA&&YVVXty)) 6 6A%'U5BqEE1BqEE
r9   c                     | j         }|j         |k    s|j         |k    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   s     
7e##qw%'7'7$%LMMMmA&& nT22 7 7FC)*6qvv#CHH
r9   N)r@   r	   Arraydtyper
   TypingErrorallr   rv   r   r   s       r:   overload_where_arraysr      s     $$$ %7ag$%IJJJ 774A,77777 	   $
 
 
 K% %r9   c                 x    t          | t          j                  s||k    rt          j        d          d }|S dS )z(
    Implement where() for scalars.
    z!x and y should have the same typec                 D    | 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/     #11!D-%%CCGJr9   N)r@   r	   r   r
   r   r   s       r:   overload_where_scalarsr     sT    
 dEK(( 66$%HIII	 	 	  r9   c                 :    t          | t                    rd }|S d S )Nc                     dS )N   r8   args    r:   len_implz$overload_len_dummy.<locals>.len_impl-      2r9   r@   r=   )r   r   s     r:   overload_len_dummyr   )  s4    #{## 	 	 	  r9   c                     t          | t          t          f          r!t          |t          t          f          rd }|S d S d S )Nc                     dS 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  s_    $l344 {L): : 	 	 	    r9   c                 r    t          | t                    rt          |t          j                  rd }|S d S d S )Nc                 (    t          d| |           d S )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   ?  sR    #{## "
3(F(F "	# 	# 	# "!" " " "r9   c                 r    t          | t                    rt          |t          j                  rd }|S d S d S )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  sR    #{## "
3(F(F "	 	 	 "!" " " "r9   c                     t          t          | t                    t          |t          j                  t          |t          j                  g          rd }|S d S )Nc                 &    t          ||           d S rJ   r   r\   r   rL   s      r:   dummy_setitem_implz2overload_dummy_setitem.<locals>.dummy_setitem_impl]  s    #sOOOOOr9   )r   r@   r=   r	   r   )r\   r   rL   r   s       r:   overload_dummy_setitemr   S  se    
sK((sEM**sEM**	
  "	 	 	 "!" "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                     t          | t          t          f          r!t          |t          t          f          rd }|S d S d S )Nc                     dS 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  s_    $l344 {L): : 	 	 	    r9   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                     | |= d S rJ   r8   r   s     r:   call_delitemr    s    Cr9   c                     | |         S rJ   r8   r   s     r:   call_getitemr    s    s8Or9   c                     || |<   d S rJ   r8   r   s      r:   call_setitemr    s    CHHHr9   lengthc                     d }|S )Nc                      t          |           S rJ   lenr   s    r:   impz#overload_method_length.<locals>.imp  s    3xxr9   r8   )r   r  s     r:   overload_method_lengthr    s       Jr9   c                 *    |                                  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    77Nr9   c                      t          |           S rJ   r  ru   s    r:   call_func1_unaryr    s    88Or9   c                      t          |           S rJ   r
  ru   s    r:   len_usecaser    s    q66Mr9   c                 $    t          |            d S rJ   r   ru   s    r:   print_usecaser    s    	!HHHHHr9   c                     | |         S rJ   r8   )rv   r   s     r:   getitem_usecaser    s    S6Mr9   c                 N    t          j        t          j        |                     S rJ   )r   cossinru   s    r:   npyufunc_usecaser    s    6"&))r9   c                     | j         S rJ   )_dataru   s    r:   get_data_usecaser!    s	    7Nr9   c                     | j         S rJ   )_indexru   s    r:   get_index_usecaser$    s	    8Or9   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                 .    |                      ||          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                 H    t                      }|                    |           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                     d S rJ   r8   )fs    r:   mk_func_inputr@    s    Dr9   c                       e Zd Zd ZdS )MkFuncTypingc                 t    t          |d         t          j                  sJ t          t          j        g|R  S Nr   )r@   r	   MakeFunctionLiteralr+   r{   )rD   r   kwss      r:   genericzMkFuncTyping.generic  s7    $q'5#<=====+d++++r9   N)r5   r6   r7   rG  r8   r9   r:   rB  rB    s#        , , , , ,r9   rB  c                  &    t          d            d S )Nc                     | S rJ   r8   as    r:   <lambda>z#mk_func_test_impl.<locals>.<lambda>  s    A r9   )r@  r8   r9   r:   mk_func_test_implrM    s    ++r9   c                       e Zd ZdS )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                              d S )Nzcallable_type_ref[{}])instance_typesig_to_impl_keycompiled_templatessuperrQ  __init__format)rD   rS  	__class__s     r:   rW  zCallableTypeRef.__init__  sa    *!"$ot$$-- /55;VD<N5O5O	Q 	Q 	Q 	Q 	Qr9   c                    d }|j         t          |                    D ]j}	 |                    ||          }t          |di           }||v r,||         | j        |<   | j                            |            n[# t          $ r Y gw xY w|S )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::6 
	 
	H	"..s33 ")3H"!M!M>))4B44HD(1+228<<<E *	     s   A88
BBc                 V    t          | j                                                  }|dfS )NT)listrT  keys)rD   sigss     r:   get_call_signaturesz#CallableTypeRef.get_call_signatures  s(    D(--//0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    sj        Q Q Q Q Q  "  ) ) ) ) ) ) )r9   rQ  c                       e Zd Zd ZdS )CallableTypeModelc                 H    t           j                            | ||           d S rJ   )r   rl   rW  )rD   dmmfe_types      r:   rW  zCallableTypeModel.__init__  s#    ##D#w77777r9   N)r5   r6   r7   rW  r8   r9   r:   rp  rp    s#        8 8 8 8 8r9   rp  c                 *    |                                  S rJ   )rY   )rE   rR   r   pyvals       r:   constant_callable_typerefrv  !  s    ""$$$r9   c                 :    t          | t                    rd }|S d S )Nc                     dS )N   >[= r8   r\   s    r:   r  zoverload_np_exp.<locals>.imp-  s    :r9   r   r\   r  s     r:   overload_np_expr|  )  s4    #{## 	 	 	 
 r9   c                   d    e Zd ZdZd Zej        d             Zd Zej        d             Z	d Z
dS )TestLowLevelExtendingz4
    Test the low-level two-tier extension API.
    c                 >   t           } t          d          |          }|                      |            d           t          } t          d          |          }|                      |d           d           |                      |d          d           d S )NTnopythonrP   g      2@g      @)r  r   assertPreciseEqualr  rD   pyfunccfuncs      r:   
test_func1z TestLowLevelExtending.test_func1<  s    #"T"""6**,,,!"T"""6**dR000dS11111r9   c                 .    |                                   d S rJ   )r  rD   s    r:   test_func1_isolatedz)TestLowLevelExtending.test_func1_isolatedE  s    r9   c                 z    |                      t          t                     |                     t                     d S rJ   )assertIs
type_func1r   assertIsNotNoner  s    r:   !test_type_callable_keeps_functionz7TestLowLevelExtending.test_type_callable_keeps_functionI  s0    j+...Z(((((r9   c                     t           } t          t          j                              |          }|                      |            d           d S )Ng      E@)rV   r   r	   float64r  r  s      r:   test_cast_mydummyz'TestLowLevelExtending.test_cast_mydummyM  sF    &U]__&&v.......r9   c                 d   t          j        t                    }t          j        }t          j        }|                                 |                                 t          |||dd          }|                     t          d |j
                                        D                                  dS )zFmake sure make_function is passed to typer class as a literal
        r8   Nc              3   J   K   | ]}t          |t          j                  V  d S rJ   )r@   r	   rE  )r   rK  s     r:   r   z=TestLowLevelExtending.test_mk_func_literal.<locals>.<genexpr>^  sC         1e788     r9   )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 0
  #+2244    	
 	
 	
 	
 	
r9   N)r5   r6   r7   __doc__r  r   run_test_in_subprocessr  r  r  r  r8   r9   r:   r~  r~  4  s         2 2 2 $  %$) ) ) $/ / %$/

 
 
 
 
r9   r~  c                   N    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S )TestPandasLikeze
    Test implementing a pandas-like Index object.
    Also stresses most of the high-level API.
    c                     t          t          j        d                    } t          d          t                    }|                      ||          d           d S )N   Tr  )r0   r   r8  r   r  r  )rD   r   r  s      r:   test_index_lenzTestPandasLike.test_index_lenk  sU    ")A,,"T""";//a!,,,,,r9   c                 |   t          t          j        g d                    } t          d          t                    }|                      ||d          d            ||t          dd                     }|                     |t                      |                     t          |          ddg           d S )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  s    "(;;;''(("T"""?33aQ///U1eAtnn%%b%(((bAr7+++++r9   c                 \   t          t          j        g d                    } t          d          t                    } ||          }|                     |t                      |                     |j        t          j        t          j	        |j                                       dS )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  s     "(;;;''(("T"""#344U1XXb%((("&*A*ABBBBBr9   c                     t          t          j        g d                    } t          d          t                    } ||          }|                     ||j                   d S )Nr  Tr  )r0   r   r|   r   r!  r  r   )rD   r   r  r)  s       r:   test_index_get_dataz"TestPandasLike.test_index_get_data  sa    "(;;;''(("T"""#344uQxxdAG$$$$$r9   c                      t          d          t                    }g ddfg ddfg dffD ]G\  }}t          t          j        |                    } ||          }|                     ||           Hd S )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  s     #T"""#788ZZZZJ!
 	, 	,FH
 bhv&&''A%((CS(++++	, 	,r9   c                    t          t          j        g d                    }t          t          j        g d          |          } t          d          t                    }|                      ||          d           d S )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  sx    "(999%%&&2:ooo..22"T""";//a!,,,,,r9   c                 \   t          t          j        g d                    }t          t          j        g d          |          } t          d          t                    } ||          }|                     |t                      |                     |j	        |j	                   d S )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  s    "(999%%&&2:ooo..22"T"""#455eAhhc5)))ci)))))r9   c                 .   t          t          j        g d                    }t          t          j        g d          |          } t          d          t                    } ||          }|                     |t                     |                     |j        t                      | 	                    |j        j
        |j
                   |                     |j        t          j        t          j        |j                                       dS )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     "(;;;''((28III&&**"T"""#344U1XXb&)))bi///bioqw///
BF26!)3D3D,E,EFFFFFr9   c                    t          t          j        g d                    }t          j        g d          } t	          d          t
                    } |||          }|                     |t                     |                     |j        t                      | 	                    |j        j
        |j
                   | 	                    |j        |           d S )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    "(;;;''((J''"T"""#677eAqkkc6***cj%000cj&000ck1%%%%%r9   c                    t          t          j        g d                    }t          t          j        g d          |          } t          d          t                    } ||dd          }|                     |t                     |                     |j        t                      | 	                    |j        j
        |j
                   |                     |j        t          j        g d                     d S )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:ooo..22"T"""<00U1c3b&)))bi///bioqw///
BJ,G,GHHHHHr9   N)r5   r6   r7   r  r  r  r  r  r  r  r  r  r  r  r8   r9   r:   r  r  e  s         
- - -
, , ,C C C% % %, , ,- - -* * *G G G& & &I I I I 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dS )TestHighLevelExtendingz+
    Test the high-level combined API.
    c                 b    t           } t          d          |           fd} |ddd            |ddd            |t          j        g d          t          j        g d          t          j        g d	                                          t          j                  5 } t          j        g           t          j        g           t          j        g                      d
d
d
           n# 1 swxY w Y    	                    dt          |j                             d
S )z>
        Test implementing a function with @overload.
        Tr  c                  \    t          | i |} | i |}                    ||           d S rJ   )r   r  )r   kwargsr  r  r  rD   s       r:   checkz0TestHighLevelExtending.test_where.<locals>.check  sE    000H%(((C##Hc2222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 	3 	3 	3 	3 	3
 	""""dAqH((())HYYYHYYY	
 	
 	
 v122 	<fE"(2,,bhrll;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<0#f6F2G2G	
 	
 	
 	
 	
s   ,AC<<D D c                      t          d          t                    }|                      |t                                d           |                      |ddg          d           dS )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  sj     #T""";//gii 0 0"555q!fq11111r9   c                 "    t          d          t                    }t                      5   |t                                 |                     t
          j                                        d           ddd           dS # 1 swxY w Y   dS )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  s     #T"""=11 	@ 	@E'))SZ0022J???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   A
BBBc                 f   t           } t          d          |          }|                      |dd          d           |                      |t                      t                                d           |                      |t	                      t	                                d           dS 	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  s     #"T"""6**aQ///hjj(** = =rBBB 	gii ; ;R@@@@@r9   c                 f   t           } t          d          |          }|                      |dd          d           |                      |t                      t                                d           |                      |t	                      t	                                d           dS 	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  s      "T"""6**aQ///hjj(** = =rBBB 	gii ; ;R@@@@@r9   c                 f   t           } t          d          |          }|                      |dd          d           |                      |t                      t                                d           |                      |t	                      t	                                d           dS r  )r   r   r  r  r3   r  s      r:   test_iadd_operatorz)TestHighLevelExtending.test_iadd_operator  s     $"T"""6**aQ///hjj(** = =rBBB 	gii ; ;R@@@@@r9   c                 f   t           } t          d          |          }|                      |dd          d           |                      |t                      t                                d           |                      |t	                      t	                                d           dS r  )r   r   r  r  r3   r  s      r:   test_iadd_binopz&TestHighLevelExtending.test_iadd_binop!  s     !"T"""6**aQ///hjj(** = =rBBB 	gii ; ;R@@@@@r9   c                 X   t           } t          d          |          }t                      }d }t                      5 }	  ||d           n# t          $ r}|}Y d }~nd }~ww xY wd d d            n# 1 swxY w Y   |||                     |                                d           d S )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**ii 	#c3   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 =G);<<<<<s;   A3AA3
A$AA3A$$A33A7:A7c                     t           } t          d          |          }|                      |t                      d          d           d S )NTr  r  i  )r  r   r  r3   r  s      r:   test_getitemz#TestHighLevelExtending.test_getitem?  sM    "T"""6**gii 5 5yAAAAAr9   c                 Z   t           } t          d          |          }t                      }d }t                      5 }	  ||dd           n# t          $ r}|}Y d }~nd }~ww xY wd d d            n# 1 swxY w Y   |||                     |                                d           d S )NTr  r  r   z321 123
)r  r   r3   r   ra  r  r  r  s          r:   test_setitemz#TestHighLevelExtending.test_setitemD  s   "T"""6**ii 	#c3$$$$   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 =G55555s;   A4AA4
A%A A4 A%%A44A8;A8c                     t          d          t                    }d} ||          }t          |          }t          j                            ||            t          d          t
                    }|                     t                    5 } |             ddd           n# 1 swxY w Y   t          |j	                  }d}| 
                    ||           dS )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%%%&<==hqkk'**

,,,&C&&&'>??	y)) 	VIKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	V%&&2	i(((((s   B**B.1B.c                    dd}d}d d}|                      t          j                  5 }  ||          dddd	           ddd           n# 1 swxY w Y   t          |j                  }|                     ||           |                     d
|           |                     d|           |                     d|           dd}|                      t          j                  5 }  ||          dddd	           ddd           n# 1 swxY w Y   t          |j                  }|                     ||           |                     d|           |                     d|           |                     d|           dd}|                      t          j                  5 }  ||          dddd	           ddd           n# 1 swxY w Y   t          |j                  }|                     ||           |                     d|           |                     d|v            |                     d|           |                     d|           ddlm}m	}	 |                      t          j                  5 }  ||          dddd	           ddd           n# 1 swxY w Y   t          |j                  }|                     ||           |                     d|           |                     d|v            |                     d|           |                      t          j                  5 }  ||	          dddd	           ddd           n# 1 swxY w Y   t          |j                  }|                     ||           |                     d|           |                     d|v            |                     d|           |                     d|           dd}
|                      t          j                  5 }  ||
          dddd	           ddd           n# 1 swxY w Y   t          |j                  }|                     ||           |                     d|           |                     d|v            |                     d|           |                     d|           dd}|                      t          j                  5 }  ||          dddd	           ddd           n# 1 swxY w Y   t          |j                  }|                     ||           |                     d|           |                     d|v            |                     d|           d!d}|                      t          j                  5 }  ||          dddd	           ddd           n# 1 swxY w Y   t          |j                  }|                     ||           |                     d|           |                     d|           d }|                      t          j                  5 }  ||          dddd	           ddd           n# 1 swxY w Y   t          |j                  }|                     ||           |                     d|           |                     d|           dS )"z}
        Tests that an overload which has a differing typing and implementing
        signature raises an exception.
        Nc                 ~     ddt                    d fd	            }t          d          fd            }|S )Nc                     d S 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                 &     | |||           d S )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  s        j!!     "! $* * * *  * Jr9   z-Typing and implementation arguments differ in   c                     | dk    rdS dS Nr  r/   r8   r  s       r:   impl1zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl1~      2vvqrr9   r/   r   r  r  zkeyword argument default valuesz<Parameter "kw=12">z<Parameter "kw=None">c                     | dk    rdS dS 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k    rdS dS r  rJ  )zr  rM   r  s       r:   impl3zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl3  s    2vvqrr9   zargument nameskeywordz<Parameter "a">z<Parameter "z">)impl4impl5zFirst difference: 'z'c                     | dk    rdS dS 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k    rdS dS r  r8   )rK  r  r  s      r:   impl7zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl7  r  r9   z<Parameter "c">c                     | dk    rdS dS 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k    rdS dS r  r8   )rK  r  rM   s      r:   impl9zUTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling.<locals>.impl9  r  r9   rJ   )r  )NN)
r  r
   r   r  r  r  assertFalseoverload_usecasesr'  r(  )rD   r  sentinelr  r  msgr"  r%  r'  r(  r*  r,  r/  r1  s                 r:   /test_typing_vs_impl_signature_mismatch_handlingzFTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handlingg  s+	   	 	 	 	 C	 	 	 	 v122 	&aFF5MM!Q1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&!+h$$$7===+S111-s333	 	 	 	 v122 	&aFF5MM!Q1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&!+h$$$.4440#666-s333	 	 	 	 v122 	&aFF5MM!Q1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&!+h$$$&,,,c)***'---'---33333333v122 	&aFF5MM!Q1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&!+h$$$&,,,c)***-s333v122 	&aFF5MM!Q1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&!+h$$$&,,,c)***'---'---	 	 	 	 v122 	&aFF5MM!Q1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&!+h$$$&,,,c)***'---'---	 	 	 	 v122 	&aFF5MM!Q1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&!+h$$$&,,,c)***'---	 	 	 	 v122 	&aFF5MM!Q1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&!+h$$$.4446<<<	 	 	 v122 	&aFF5MM!Q1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&!+h$$$.444-s33333s   AAA(DDD&G

GG?J##J'*J':MM"%M"P33P7:P7$TTT#WWW
Y..Y25Y2c                    ddddl m}  t                    |           t          d          fd            }|                     t
          j                  5 } |dd           ddd           n# 1 swxY w Y   t          |j                  }| 	                    d	|           | 	                    d
|           dS )z
        Tests that an overload which has a differing typing and implementing
        signature raises an exception and uses VAR_POSITIONAL (*args) in typing
        Nc                     d S rJ   r8   rK  r  s     r:   r  ziTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_positional.<locals>.myoverload      Dr9   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11	d				. 	. 	. 	. 
		. v122 	aC1III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	!+A3GGGEsKKKKKs   A77A;>A;c                 x   dd}d }  ||d          dd           |                      t          j                  5 }  ||          dd           ddd           n# 1 swxY w Y   t          |j                  }|                     d|           |                     d	|           dd}|                      t          j                  5 }  ||          dd           ddd           n# 1 swxY w Y   t          |j                  }|                     d|           |                     d	|           dS )zJ
        Tests that an overload which uses **kwargs (VAR_KEYWORD)
        Tc                 z    dd t          |          |            t          d          fd            }|S )Nc                     d S 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    !z!++++r9   rJ   r  )r  rE  r  r  s      @r:   r  zbTestHighLevelExtending.test_typing_vs_impl_signature_mismatch_handling_var_keyword.<locals>.gen_ol  sl        0HZ///555$, , , ,  , Jr9   c                     dd}|S )Nr  c                     | 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'r   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22 	aFF3KK1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	!+I3OOO:C@@@	 	 	 	 v122 	aFF3KK1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	!+I3OOO:C@@@@@s#   AA#&A#C//C36C3c                     t          t          j        d          dd            }t          d             }t	          j        d          }|                      ||          d           d S )Nr  r  c                     dd}|S )Nr  c                     |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                 ~    |                                  |                      d          |                      d          fS )N      )rS  )r  As    r:   barz?TestHighLevelExtending.test_overload_method_kwargs.<locals>.barE  s/    5577AEE"IIquuRu'8'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<  s{    	e	,	,	 	 	 
-	,	 
	9 	9 
	9 IaLLQ.....r9   c                     t          t          j        d          d             }t          d             }t	          j        d          } ||           |                      ||          d           d S )Nlitfooc                 |    t          |t          j                  rt          |t          j                  sd }|S d S d S )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  sV     #u}--  !#u}55  # # #  K      r9   c                 ,    |                      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	/		  
	$ 	$ 
	$ HQKKAQ(((((r9   c                 b    t           d             }|                      |            d           d S )Nc                  4    t          j        t                    S rJ   )r   exprH   r8   r9   r:   testz8TestHighLevelExtending.test_overload_ufunc.<locals>.testg  s    6'??"r9   ry  )r   r  )rD   rj  s     r:   test_overload_ufuncz*TestHighLevelExtending.test_overload_ufuncc  sA     
	# 	# 
	# 	,,,,,r9   c           	      t   t          t          d          d             }t          d             }t                      }|                      ||dd          d           |                      ||ddd          d           |                      ||dddd	          d
           t          d             }|                      ||          d           |                      ||ddd          d           |                      ||ddd          d           |                      ||ddd          d           d S )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                     |                      dd          |                      ddd          |                      dddd          fS )Nr/   r   r  r  rt  rz  s    r:   rZ  z@TestHighLevelExtending.test_overload_method_stararg.<locals>.bar  sM     ""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	7	 	 
8	7	 
	- 	- 
	- iiS!Q444S!Q**L999S!Q1--~>>>		 	 
	 	CHH@	
 	
 	
 	CQ4  /	
 	
 	
 	CQ6""$5	
 	
 	
 	CQ;'')?	
 	
 	
 	
 	
r9   c                     G d dt           j                  t          d          d             }t          fd            }d}|                      ||          t          j        |                     t          d             }|                     t          j	                  5 } ||           d d d            n# 1 swxY w Y   | 
                    dt          |j                             d S )	Nc                       e Zd ZdS )ATestHighLevelExtending.test_overload_classmethod.<locals>.MyArrayNr4   r8   r9   r:   MyArrayr    s        Dr9   r  array_allocc                     d }|S )Nc                 .    t          j        |          }|S rJ   r   r8  )clsnitemsr   s      r:   r  zVTestHighLevelExtending.test_overload_classmethod.<locals>.ol_array_alloc.<locals>.impl  s    i''
r9   r8   )r  r  r  s      r:   ol_array_alloczHTestHighLevelExtending.test_overload_classmethod.<locals>.ol_array_alloc  s       Kr9   c                 .                         |           S rJ   )r  )r  r  s    r:   r  z=TestHighLevelExtending.test_overload_classmethod.<locals>.foo  s    &&v...r9   r   c                 @    t           j                            |           S rJ   )r	   r   r  )r  s    r:   no_classmethod_in_basezPTestHighLevelExtending.test_overload_classmethod.<locals>.no_classmethod_in_base  s    ;**62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  sq   	 	 	 	 	ek 	 	 	 
g}	5	5	 	 
6	5	 
	/ 	/ 	/ 	/ 
	/ FRYv->->??? 
	3 	3 
	3 v122 	+f""6***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+0 !!	
 	
 	
 	
 	
s   'B??CCc                     t          t                    d             }t          t                    d             }t          d             }d}d|d         z   d|d         z   f}|                      || |           d S )	Nc                 D    t          | t          j                  rd }|S d S )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  s4    !U]++ $ $ $ r9   c                 D    t          | t          j                  rd }|S d S )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  s7    !U.// & & & 	 r9   c                 >    t          |           t          |          fS rJ   )rO  rK  r  s     r:   r  zBTestHighLevelExtending.test_overload_callable_typeref.<locals>.foo  s    1::wqzz))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5555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    si        
 
 
62 2 2@ @ @A A AA A AA A AA A A= = = B B B
6 6 6 ) ) )&P4 P4 P4dL L L.*A *A *AX/ / /") ) ),- - -)
 )
 )
V
 
 
@6 6 6 6 6r9   r  c                     | j         | j        d                  }||k    rt          d          | j        | j        d                  }||k    rt          d          d S )Nr   zcache not used)_cache_hits
signaturesAssertionError_cache_misses)r  
expect_hitexpect_misseshitmisss        r:   _assert_cache_statsr    sh    

E,Q/
0C
j-...u/23D}-... r9   c                       e Zd ZdZd Zd ZdS )TestOverloadMethodCachingFc                     t          | j        j                  | _        t	          d| j                  5  |                                  d d d            d S # 1 swxY w Y   d S )N	CACHE_DIR)r   rY  r5   
_cache_dirr   run_caching_overload_methodr  s    r:   test_caching_overload_methodz6TestOverloadMethodCaching.test_caching_overload_method  s    ()@AA[$/:: 	/ 	/,,...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   AAAc                 \    t          dd          t                    }|                      |t                                d           t	          |dd           |                    t          f          }d |                                D             }|                     t          |          d           	 t          j        d          }n# t          $ r
 t          }Y nw xY w|                                }|                    t          || j        f          }|                                 |                    t                                 |                                 |                     |j        d           |                    d	          }|                     |d           d S )
NTr  cacher   r   r/   c                 D    g | ]}|                     d           rd|v |S )declarer  )
startswith)r   lns     r:   
<listcomp>zITestOverloadMethodCaching.run_caching_overload_method.<locals>.<listcomp>  sD     
 
 
}}Y''
 -E,J,J ,J,J,Jr9   spawn)targetr   )timeout)r   r  r  r3   r  inspect_llvmrK   
splitlinesr  r  multiprocessingget_contextAttributeErrorQueueProcessr  r  startputjoinexitcoderq  )rD   r  llvmirdeclsctxqpr   s           r:   r  z5TestOverloadMethodCaching.run_caching_overload_method  s   .T.../LMMgii 0 0"555E1a(((##\O44
 
''))
 
 

 	UQ'''	"!-g66CC 	" 	" 	"!CCC	"IIKKKK.a5I  
 
 	
				gii	Q'''eeAeb!!!!!s   9C C"!C"N)r5   r6   r7   _numba_parallel_test_r  r  r8   r9   r:   r  r    s:         "/ / /
" " " " "r9   r  c                     t          d|          5  |                                 } t          dd          t                    } ||          }|                     |           t          |dd           ddd           dS # 1 swxY w Y   dS )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    s     
i	0	0 ) )eegg.T.../LMMeCjj	c


E1a((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s   A%BB
Bc                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestIntrinsicc                    t           d             t           d             t          d          fd            }t          d          fd            }|                      |            d           |                     t                    5 } |             ddd           n# 1 swxY w Y   |                     d	|j        j                   dS )
z
        Verify that returning a None from codegen function is handled
        automatically for void functions, otherwise raise exception.
        c                 L    t          j        t           j                  }d }||fS )Nc                     d S 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                 L    t          j        t           j                  }d }||fS )Nc                     d S 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.    +ek**C   <r9   Tr  c                        d           dS Nr/   r   r8   )r  s   r:   call_void_funcz6TestIntrinsic.test_void_return.<locals>.call_void_func+  s    IaLLL1r9   c                        d           dS r  r8   )r  s   r:   call_non_void_funcz:TestIntrinsic.test_void_return.<locals>.call_non_void_func0  s    M!1r9   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  sP    
	  	  
	  
	  	  
	  
d				 	 	 	 
		 
d				 	 	 	 
		
 	))1---}-- 	!   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!6HHHHHs   B((B,/B,c                 t    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 }
 ||	           |
                                                                }d	d	d	           n# 1 swxY w Y   |
                                 t          t          t           |	                    }                     ||           d	S )zV
        Usecase test: custom reinterpret cast to turn int values to pointers
        r   )	CFUNCTYPEPOINTERc_floatc_intc                 h     t           t          j                  sJ t           fd            }|S )Nc                                          | t          j                   t          |t          j                  r t          j                  }d }||fS d S )Nc                 n    |\  }|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  s:     $ ) 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  se    %%i@@@c5=11 
(%+ek22C> > > <'
( 
(r9   )r@   r	   CPointerr$   )r  r  rD   s   ` r:   unsafe_casterz9TestIntrinsic.test_ll_pointer_cast.<locals>.unsafe_casterC  sL    k5>:::::( ( ( ( ( Y( 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AAr9   FrD  c                     t          | t          j                  r) t          j        | j                            fd}|S d S )Nc                 0     | 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;// "+mEN7=,I,IJJ< < < < < "!" "r9   c                 T    t          |          D ]}t          | |                    d S rJ   )r   r   )ptrr  r   s      r:   my_c_fun_rawz8TestIntrinsic.test_ll_pointer_cast.<locals>.my_c_fun_rawg  s2    1XX  c!f r9   NTr  c                 @     |           } || j                    d S rJ   )r   )r   r  my_c_funr  s     r:   r  z/TestIntrinsic.test_ll_pointer_cast.<locals>.foop  s-    ++C00CHS#(#####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 	B 	B 
+E	:	:	:	" 	" 	" 	" 
;	:	"	 	 	 IdGGG$4$4e<<	9\** 
d				$ 	$ 	$ 	$ 	$ 
		$
 i"*--- 	.#CHHH,,..++--C	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 			c#smm$$%%%%%s   #2C!!C%(C%c                    t           d             t          d          fd            }|                      |d          d           t          j        }t          |          }t          j        |          }|dz  }|                     |t          |                     t          j        |          }|                     |t          |                     |                      |d           |d                     t          j                  }|                     |t          |                     t          j        |          }| 	                    |           |                     |t          |                     dS )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    8A;;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### II	  c**Q	CII...l>22CII...QQ000 %l844CII...!<(;<<h 0111CII.....r9   c                    d }t           j        }t          |          }t          d|          }|                     |j        |           t          j        |          }|dz  }|                     |t          |                     ~|                     |t          |                     t           j        	                                 |dz  }|                     |t          |                     t          j
        |          }|                     |j        |           t          j
        |          }|                     |j        |j                   dS )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%       1Q44= 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  s4   
	! 	! 	! II	 eT**hnd+++,x((Q	CII... 	CII... 	  """Q	CII...,w''--- g&&gmV\22222r9   c                 R   t           dt          fd            }|                     d|j                   |                     d|j                   |                     d|j                   |                     dt          i|j                   |                     d|j                   d S )NrK  c                 L    t          j        t           j                  }d }||fS )void_func docstringc                     d S 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  s0     *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 	  	  	  
	  	5y7KLLLi&8999J"/	1 	1 	1c3Z)BCCC.	0ABBBBBr9   N)r5   r6   r7   r  r  r  r#  r+  r8   r9   r:   r  r    sn        (I (I (IT@& @& @&D,/ ,/ ,/\&3 &3 &3PC C C C Cr9   r  c                       e Zd Zd Zd ZdS )TestRegisterJitablec                     t           d             fd} t          d          |          } |dd          } |dd          }|                     ||           d S )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    3q!99r9   Tr  r/   r   )r&   r   r  )rD   rZ  cbarr  r  r  s        @r:   test_no_flagsz!TestRegisterJitable.test_no_flags  s    		 	 
			 	 	 	 	 "sD!!!#&&Qd1ajj%%%%%r9   c                    t          d          d             fd}|                      |d                                          g d            t          d          |          }|                     t
          j                  5 } |d	           d d d            n# 1 swxY w Y   d
}|                     |t          |j	                             d S )NF)_nrtc                 *    t          j        |           S rJ   r  )r  s    r:   r  z2TestRegisterJitable.test_flags_no_nrt.<locals>.foo  s    9Q<<r9   c                      |           S rJ   r8   )r  r  s    r:   rZ  z2TestRegisterJitable.test_flags_no_nrt.<locals>.bar  s    3q66Mr9   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  r1  r  r5  r  s        @r:   test_flags_no_nrtz%TestRegisterJitable.test_flags_no_nrt  s.   	u	%	%	%	  	  
&	%	 	 	 	 	 	 	Q)))444!sD!!!#&&v122 	fDGGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	c3v/0011111s   B##B'*B'N)r5   r6   r7   r2  r9  r8   r9   r:   r-  r-    s2        & & &2 2 2 2 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dS )TestImportCythonFunctionNz&Only run if SciPy >= 0.19 is installedc                    t          dd          }t          j        t          j        t          j                  } ||           t	          d          fd          }|                      |d          d           d S )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
 
 #FOV_EEhtnnS$ 0 0 0 011A"""""r9   c                    |                      t                    5 }t          dd           d d d            n# 1 swxY w Y   d}t          j        |t          |j                            }|                     |           d S )N
fakemodulefakefunctionzNo module named '?fakemodule'?)r  ImportErrorr'   rematchr  r  r  )rD   r  r5  rJ  s       r:   test_missing_modulez,TestImportCythonFunction.test_missing_module  s    {++ 	Fv'nEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F /c&"23344U#####   8<<c                     |                      t                    5 }t          dd           d d d            n# 1 swxY w Y   d}|                     |t	          |j                             d S )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  s    z** 	f'.  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
- 	 	c&"23344444rL  )	r5   r6   r7   unittestskipIfscrD  rK  rN  r8   r9   r:   r;  r;    s        X_R4Z!IJJ# # KJ#$ $ $ X_R4Z!IJJ	5 	5 KJ	5 	5 	5r9   r;  method_jit_option_check_nrtr4  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      y}}r9   r8   r{  s     r:   ov_method_jit_option_check_nrtrY  ,         Jr9   method_jit_option_check_no_nrtFc                     d }|S )Nc                 *    t          j        d          S rW  r  rz  s    r:   r  z.ov_method_jit_option_check_no_nrt.<locals>.imp:  rX  r9   r8   r{  s     r:   !ov_method_jit_option_check_no_nrtr^  6  rZ  r9   attr_jit_option_check_nrtc                     d }|S )Nc                 *    t          j        d          S rW  r  rz  s    r:   r  z)ov_attr_jit_option_check_nrt.<locals>.impD  rX  r9   r8   r{  s     r:   ov_attr_jit_option_check_nrtrb  @  rZ  r9   attr_jit_option_check_no_nrtc                     d }|S )Nc                 *    t          j        d          S rW  r  rz  s    r:   r  z,ov_attr_jit_option_check_no_nrt.<locals>.impN  rX  r9   r8   r{  s     r:   ov_attr_jit_option_check_no_nrtrf  J  rZ  r9   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestJitOptionsNoNRTc                     d}|                      t          j                  5 } ||i | d d d            n# 1 swxY w Y   |                     |t	          |j                             d S )Nr7  )r  r
   r   r  r  r  )rD   funcr   r  r5  r  s         r:   check_error_no_nrtz&TestJitOptionsNoNRT.check_error_no_nrtW  s    ' 	 v122 	"fD$!&!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"c3v/0011111s   	7;;c                     d t          d|i          d             }t          fd            }|r2|                      |            t          j        d                     d S |                     |           d S )Nc                  *    t          j        d          S rW  r  r8   r9   r:   dummyz8TestJitOptionsNoNRT.no_nrt_overload_check.<locals>.dummyb  s    9R== r9   r4  rS  c                      d } | S )Nc                  *    t          j        d          S rW  r  r8   r9   r:   rn  zJTestJitOptionsNoNRT.no_nrt_overload_check.<locals>.ov_dummy.<locals>.dummyg  s    y}}$r9   r8   rn  s    r:   ov_dummyz;TestJitOptionsNoNRT.no_nrt_overload_check.<locals>.ov_dummye  s    % % % Lr9   c                                    S rJ   r8   rq  s   r:   r  z6TestJitOptionsNoNRT.no_nrt_overload_check.<locals>.fool  s    577Nr9   r  )r   r   r  r   r8  rk  )rD   flagrr  r  rn  s       @r:   no_nrt_overload_checkz)TestJitOptionsNoNRT.no_nrt_overload_checka  s    	! 	! 	! 
%fd^	4	4	4	 	 
5	4	 
	 	 	 	 
	  	)##CCEE29R==99999##C(((((r9   c                 Z    |                      d           |                      d           d S )NTF)ru  r  s    r:   test_overload_no_nrtz(TestJitOptionsNoNRT.test_overload_no_nrtu  s0    ""4(((""5)))))r9   c                     t           d             }|                      |t                    t          j        d                     t           d             }|                     |t                     d S )Nc                 *    |                                  S rJ   )rR  ru   s    r:   udtz<TestJitOptionsNoNRT.test_overload_method_no_nrt.<locals>.udtz  s    00222r9   r  c                 *    |                                  S rJ   )r[  ru   s    r:   rz  z<TestJitOptionsNoNRT.test_overload_method_no_nrt.<locals>.udt  s    33555r9   r   r  rH   r   r8  rk  rD   rz  s     r:   test_overload_method_no_nrtz/TestJitOptionsNoNRT.test_overload_method_no_nrty  sz    		3 	3 
	3 	Gbimm<<<		6 	6 
	6 	W-----r9   c                     t           d             }|                      |t                    t          j        d                     t           d             }|                     |t                     d S )Nc                     | j         S rJ   )r_  ru   s    r:   rz  z?TestJitOptionsNoNRT.test_overload_attribute_no_nrt.<locals>.udt  s    ..r9   r  c                     | j         S rJ   )rc  ru   s    r:   rz  z?TestJitOptionsNoNRT.test_overload_attribute_no_nrt.<locals>.udt  s    11r9   r|  r}  s     r:   test_overload_attribute_no_nrtz2TestJitOptionsNoNRT.test_overload_attribute_no_nrt  sz    		/ 	/ 
	/ 	Gbimm<<<		2 	2 
	2 	W-----r9   N)r5   r6   r7   rk  ru  rw  r~  r  r8   r9   r:   rh  rh  T  s_        2 2 2) ) )(* * *. . .. . . . .r9   rh  c                   6     e Zd Z fdZd Zd Zd Zd Z xZS )TestBoxingCallingJITc                     t                                                       t          d          }|\  | _        | _        | _        |                                 | _        d S )Nro   )rV  setUprn   rf   rb   rh   dyn_type)rD   manyrY  s     r:   r  zTestBoxingCallingJIT.setUp  sH    &z22=A:$,(:r9   c                 $   ddt           fd            t          | j                  fd            }t          | j                  d             }t          d             } || j                  }|                     |z              d S )Nrd  r   c                 6    fd}t          ||          }||fS )Nc                 ^    |\  }|                     ||                                        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                             t          j                  g}t	          t          j        t          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  s}    ' ' ' ' '
 I**5:{CCDDEM5:66CG11&#tDDMHcsX6666r9   c                     |j                             |t          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'.99C7,,S1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 
	7 
	7 
	7 
!	 
	7 
T			2 	2 
		2
 
	 	 
	 ht}%%kL899999r9   c                 n   t          | j                  d             }t          | j                  d             }t          d             }|                     t
                    5 } || j                   d d d            n# 1 swxY w Y   |                     dt          |j	                             d S )Nc                     d }|j                             t          j        d          g}t	          t          j        t          j                  }|j                            |||          \  }}t          ||          S )Nc                 0    | dk    rt          d          | S )Nr   cannot be x > 0r   ru   s    r:   r  zHTestBoxingCallingJIT.test_unboxer_raise.<locals>.unboxer.<locals>.bridge      q55$%6777r9   r/   r  r  )r[   r\   rM   r  r   r   r  r   s           r:   r  z8TestBoxingCallingJIT.test_unboxer_raise.<locals>.unboxer  sr      
 I**5:q99:DEM5:66CG11&#tDDMHcsX6666r9   c                     |j                             |t          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 
!	 
	7 
T			2 	2 
		2
 
	 	 
	 z** 	$fHT]###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s6#344	
 	
 	
 	
 	
   %BB	Bc                 $   ddt           fd            t          | j                  d             }t          | j                  fd            }t          d             } || j                  }|                     |z              d S )Nrd  i8  c                 6    fd}t          ||          }||fS )Nc                 ^    |\  }|                     ||                                        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                 N    t          |j                                                  S rJ   rX   rZ   s      r:   r  z0TestBoxingCallingJIT.test_boxer.<locals>.unboxer      qy88::;;;r9   c                    	fd}|j                             t          j                  g}t	          t          j        t          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  s    ' ' ' ' ' I**5:{CCDDEJ
33CG11&#tDDMHc7,,S1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 	2 	2 	2 
		2 
	 	 
	 HT]##K,677777r9   c                 n   t          | j                  d             }t          | j                  d             }t          d             }|                     t
                    5 } || j                   d d d            n# 1 swxY w Y   |                     dt          |j	                             d S )Nc                 N    t          |j                                                  S rJ   rX   rZ   s      r:   r  z6TestBoxingCallingJIT.test_boxer_raise.<locals>.unboxer  r  r9   c                 X   d }|j                             t          j        d          g}t	          t          j        t          j                  }|j                            |||          \  }}t          j        |j	        |j        j
        d          }|j	                            |j	                            |                    5  |j                            |          }	|j	                            |	|           d d d            n# 1 swxY w Y   |j	                            |          S )Nc                 0    | dk    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  s6     
 I**5:q99:DEJ
33CG11&#tDDMHc(AGMNNNF""19>>(#;#;<< - -g//44	V,,,- - - - - - - - - - - - - - - 9>>&)))s   6DDD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HT]###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s6#344	
 	
 	
 	
 	
r  )	r5   r6   r7   r  r  r  r  r  rm  rn  s   @r:   r  r    sv        ' ' ' ' '(: (: (:T
 
 
>#8 #8 #8J
 
 
 
 
 
 
r9   r  c                     d S rJ   r8   ru   s    r:   with_objmode_cache_ov_exampler  +  s	     	Dr9   c                   p    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d
S )TestCachingOverloadObjmodezTTest caching of the use of overload implementations that use
    `with objmode`
    Fc                 D    t          j        dt          j                   d S )Nerror)warningssimplefilterr
   NumbaWarningr  s    r:   r  z TestCachingOverloadObjmode.setUp8  s    gv':;;;;;r9   c                 ,    t          j                     d S 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          }|                     ||            t          d          |j                  } |d          }|                     ||           d d d            d S # 1 swxY w Y   d S )	Nr  c                 n    t          j        |           | z  }t           j                            |          S rJ   )r   r8  linalgnorm)rv   r   s     r:   realworkzJTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>.realworkB  s(    illQ&y~~c***r9   c                      |           S rJ   r8   )rv   r  s    r:   python_codezMTestCachingOverloadObjmode.test_caching_overload_objmode.<locals>.python_codeG  s    x{{"r9   c                     fd}|S )Nc                 n    t          d          5   |           }d d d            n# 1 swxY w Y   |S 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--- + +'KNN+ + + + + + + + + + + + + + +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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4 	* 	*+ + +
# # # # # 344    54 8 8 8 Xc]]F(3--CS&))).d...x/?@@O!/#&&CS&)))=	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   B,C%%C),C)c                     d d t                    fd            }t          d          fd            } |            }|                                }||k    rt          d          |S )Nc                 0    t          j        | |z             S rJ   r   sumr  s     r:   do_thiszGTestCachingOverloadObjmode.check_objmode_cache_ndarray.<locals>.do_thisb      6!a%== r9   c                 0    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                 p    t          d          5   | |          }d d d            n# 1 swxY w Y   |S 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                  l    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`  s    	! 	! 	!	! 	! 	! 
,			& 	& 	& 	& 
 		& 
D				& 	& 	& 	& 
		&
 lnn%%'' &== !3444r9   c                 .    |                                   d S rJ   )r  )r  s    r:   *populate_objmode_cache_ndarray_check_cachezETestCachingOverloadObjmode.populate_objmode_cache_ndarray_check_cache~  s    '')))))r9   c                     |                                  }t          |j        j                  dk    rt	          d          t          |j        j                  dk    rt	          d          d S )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  si    ..00tz&''1,, !8999tz$%%** !?@@@ +*r9   c                    t          | j        j                  }t          d|          5  t	          | j        |           t	          | j        |          }d d d            n# 1 swxY w Y   |                     |d         d           d S )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  s     #4>#:;;	[)44 	 	+?   2<i C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	Z!,,,,,s   +A!!A%(A%N)r5   r6   r7   r  r  r  r  r  classmethodr  r   r  r  r8   r9   r:   r  r  1  s          "< < <! ! ! *  *  *D   [: * * [* A A [A- - - - -r9   r  c                       e Zd Zd Zd ZdS )TestMiscc           	         d }|                      t          |                     |                     t          t          |                               |                      t          t	          |                               |                      t           t	          d          |                               |                      t           t          dd          |                               d S )Nc                     d S 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2333#;9d#;#;#;C#@#@AABBB<k"4e<<SAABB	
 	
 	
 	
 	
r9   c                    t           d             }t           d             }|                      |            |                                           |                      |            |                                           d S )Nc                  8    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    7555;;r9   c                  8    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    7c555;;r9   )r   r  r  )rD   r  r  s      r:   test_overload_arg_bindingz"TestMisc.test_overload_arg_binding  s     
	< 	< 
	< 
	< 	< 
	< 	 0 0.2H2H2J2JKKK 0 0.2H2H2J2JKKKKKr9   N)r5   r6   r7   r  r  r8   r9   r:   r  r    s7        

 

 

L L L L Lr9   r  c                       e Zd Zd Zd ZdS )TestOverloadPreferLiteralc                    d d d } t          d          |            t                    |           t          fd            } |d          \  }}}|                     |d           |                     |d	           |                     |d
           t          fd            } |d          \  }}}|                     |d           |                     |d	           |                     |d
           d S )Nc                     d S rJ   r8   ru   s    r:   
prefer_litz;TestOverloadPreferLiteral.test_overload.<locals>.prefer_lit  r:  r9   c                     d S 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                     dS rc  r8   ru   s    r:   r  zATestOverloadPreferLiteral.test_overload.<locals>.ov.<locals>.impl      %vr9   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  ]    !U122 ?a''& & &K ,_===# # #r9   Tprefer_literalc                 D     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                 D     d           d           |           fS r1  r8   rv   r   s    r:   check_non_litz>TestOverloadPreferLiteral.test_overload.<locals>.check_non_lit  (    71::wwqzz771::55r9   r'  )r   r   r  )	rD   r,  r3  rK  r  rM   r9  r   r  s	          @@r:   test_overloadz'TestOverloadPreferLiteral.test_overload  sg   	 	 		 	 		 	 	 	2D111"555"		? 	? 	? 	? 
	? #"1%%1aF###C   C   		6 	6 	6 	6 
	6  -""1aC   C   C     r9   c                 D   d } t          t          dd          |            t          t          dd          |           t          d             } |t                      d          \  }}}|                     |d	           |                     |d
           |                     |d           t          d             } |t                      d          \  }}}|                     |d           |                     |d
           |                     |d           d S )Nc                     t          |t          j                  r$|j        dk    rd }|S t	          j        d          d }|S )Nr/   c                     dS 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                 ~    |                      d          |                      d          |                      |          fS r1  )rA  rn  rv   s     r:   r3  zHTestOverloadPreferLiteral.test_overload_method.<locals>.check_prefer_lit  sA     ++A..++A..++A.. r9   r  rd  r5  r6  c                 ~    |                      d          |                      d          |                      |          fS r1  )rB  rD  s     r:   r9  zETestOverloadPreferLiteral.test_overload_method.<locals>.check_non_lit  sA     ((++((++((++ r9   r'  r|  )rD   r,  r3  rK  r  rM   r9  s          r:   test_overload_methodz.TestOverloadPreferLiteral.test_overload_method  sp   	 	 		
0	
 	
 	
 	 	 	
	
- 	
 	
 	
 	 	 	
 
	 	 
	 #"799a001aF###C   C   		 	 
	  -		1--1aC   C   C     r9   N)r5   r6   r7   r;  rF  r8   r9   r:   r  r    s3        (! (! (!T1! 1! 1! 1! 1!r9   r  c                       e Zd Zd ZdS )TestIntrinsicPreferLiteralc                     d } t          d          |           t          d          |          t          fd            } |d          \  }}}|                     |d           |                     |d           |                     |d	           t          fd
            } |d          \  }}}|                     |d           |                     |d           |                     |d	           d S )Nc                     t          t          j        |          }t          |t          j                  r&|j        dk    rd }||fS t          j        d          d }||fS )Nr/   c                 p    |j         d         }|                     |          }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  s3     )q 1")"8"8"?"?!{7F;;;r9   r$  c                     |j         }|                     |          }t          j        |d          }|                    |d         |          S )Nr'  r   )r   r  r   rL  mul)rE   rR   r+   r   rM  r  int_100s          r:   r  zJTestIntrinsicPreferLiteral.test_intrinsic.<locals>.intrin.<locals>.codegen%  sF    %1E%44U;;G k'377G";;tAw888r9   )r+   r	   r  r@   r*  r+  r
   r   )rE   rv   r   r  s       r:   intrinz9TestIntrinsicPreferLiteral.test_intrinsic.<locals>.intrin  s|    EJ**C!U122 $?a''< < < <' ,_===9 9 9
 G|#r9   Tr.  Fc                 D     d           d           |           fS r1  r8   r2  s    r:   r3  zCTestIntrinsicPreferLiteral.test_intrinsic.<locals>.check_prefer_lit/  r4  r9   r  rd  r5  r6  c                 D     d           d           |           fS r1  r8   r8  s    r:   r9  z@TestIntrinsicPreferLiteral.test_intrinsic.<locals>.check_non_lit8  r:  r9   r'  )r$   r   r  )	rD   rQ  r3  rK  r  rM   r9  r   r  s	          @@r:   test_intrinsicz)TestIntrinsicPreferLiteral.test_intrinsic  sH   	$ 	$ 	$* 4Yd333F;;
1)5111&99		? 	? 	? 	? 
	? #"1%%1aF###C   C   		6 	6 	6 	6 
	6  -""1aC   C   C     r9   N)r5   r6   r7   rT  r8   r9   r:   rH  rH    s#        )! )! )! )! )!r9   rH  c                       e Zd Zd ZdS )TestNumbaInternalOverloadsc                    dfdfd}t          d                               d           t          j        j        j                                        }|                                 |j        }|	                                D ]6\  }}|j
        D ])}t          |dd          r ||j        |j                   *7d S )Nr   c                    |                      d          st          t          j        |           }t	          j        |          r|j                                        }|D ]}|r|                                }|                     |           rt| dk    rd}d| d}i }	 t          |i |           |
                    |           }t	          j        |          c S # t          $ r dk    rt          d           Y  d S w xY wd S d S d S )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\   <<$$ A	1--$U++ A"]5577F# A A A!"B!}}Q// A $%;;)5B,@2,@,@,@	$&
!A$(B$:$:$: *+qB+2+<R+@+@$@$@$@ (3 !0 !0 !0',zz(- /: ); ); );+/444!0%A AA AA As   CC>=C>c                 b   dk    rt          d|             d }d }	 t          j        |           }nQ# t          $ rD t	          | dd          x}r.t	          t
          j        |d          x}r|| k    r |          }Y nw xY w|t          j        |          }t          |j        	                                          }t          |j        	                                          }t          |d t          |                   |          D ]\  }	}
|	|
k    r|j        |	         }|j        |j        k    rdk    rt          d            d S dt          |          v rdk    rt          d            d S | j        r| j                            d	          sL || |||          }d
k    r)dk    rt          d           |rt          |            d S t          |          dk    r&| j        st          d           nt          d            d S dk    rt          d           d S d S d S )Nr   z
Checking: c                    g }|  dt          | d           d}|                    |           |                    d|            |                    d|            t          j        |          d         }t          j        |          }|                    t          j        d         d          }|                    d	| d
|            dd                    |          z   }	|	S )Nz from module 'r6   z' has mismatched sig.z    - expected: z    -      got: r/   r    zfrom :
)	r_  r`  r\  getsourcelinesgetfilereplacenumba__path__r  )
rj  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     + +GD,,G,G + + +

1

8h88999

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

5755V55666		#.r9   r5   Fz.... skipped as positional only arguments found*z... skipped as contains *argsrq  r   z... INVALIDz$... skipped as no __module__ presentz... skipped as Numba internalz... OK)r   r\  r+   r   r_  r   r[  rg  
parametersrh  zipr  kindPOSITIONAL_ONLYr  r6   r  )rj  rs  rz  rt  fname
maybe_funcru  rv   r   rK  r  r  ry  rg  rh  s                r:   checkerzPTestNumbaInternalOverloads.test_signatures_match_overloaded_api.<locals>.checkerp  s   zz)4))***   HA",T22 A A A#D*e<<<5 A%,RYu%E%EEz A%--'9'9%'@'@HA # *=99,113344*//1122'3q66'
A.. &( &(DAqAvv$/26Q%666$zz % '8 !9 !9 !9!EE CFF]]$zz %&E F F F!EE %)O &(,(B(B7(K(K&)7m8@&*J *J#(A::',zz(-m(<(<(<'- %6(-f$)EE*4V*<*<$<#(A::+/? %O(- /8 )9 )9 )9 )9 )..M(N(N(N %E H zzhU $#R "zs   5 ABBc                      d S rJ   r8   r8   r9   r:   rL  zQTestNumbaInternalOverloads.test_signatures_match_overloaded_api.<locals>.<lambda>  s    d r9   r8   _overload_funcF)r   compilerq  corer   rE   r  r  _registriesitems	functionsr_  r   r  )	rD   r  tyctxregskvitemrg  rh  s	          @@r:   $test_signatures_match_overloaded_apiz?TestNumbaInternalOverloads.test_signatures_match_overloaded_apiD  s    	A 	A 	A 	A 	A:G	( G	( G	( G	( G	( G	(V 	]]##B'''
!)1133  JJLL 	; 	;DAq ; ;4!1599 ;GDHd&9:::;	; 	;r9   N)r5   r6   r7   r  r8   r9   r:   rV  rV  B  s(        @; @; @; @; @;r9   rV  __main__rJ   )r\  r   r   r  r  r  r  r  rI  numpyr   llvmliter   rq  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   rO  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_specialrQ  rH  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-  r;  rY  r^  rb  rf  rh  r  r  r  r  r  rH  rV  r5   mainr8   r9   r:   <module>r     s      



        				            < < < < < < < < < < < < < < ? ? ? ? ? ? ? ? ? ? ? ? ? ? 8 8 8 8 8 8 * * * * * * . . . . . .                , + + + + +                                        (              * ) ) ) ) ) ) )----------   	BBB	 	 	 	 	f 	 	 	# # # # #%, # # # {9%%
')) g   K&&* * '&*   {  F. / / / {4 4 4/ / /" *A)@)L)L &h |4 4 4   	 	 	 "]]5!!+..
 uuej!!5 5 "! 5 uek""D D #"D 2 2 2 2 2! 2 2 2
 |[))% % *)%       ! ! ! 
%* * *b 
%  2 
#   
(,   
(
" " " 
(
" " " 
(
" " "$ $ $   
(-  $ $ $         h''  ('                  % % %       

    
     	 	 	 m, , , , ,# , , ,  	 	 	 	 	f 	 	 	) ) ) ) )en ) ) )D   8 8 8 8 8* 8 8 ! 8 Woog.. / / /   % % ! % 
"&  .
 .
 .
 .
 .
H .
 .
 .
b^I ^I ^I ^I ^IX ^I ^I ^IBI6 I6 I6 I6 I6X I6 I6 I6X/ / / %" %" %" %" %" %" %" %"P
) 
) 
)UC UC UC UC UCH UC UC UCp 2  2  2  2  2(+  2  2  2F5 5 5 5 5x0 5 5 5@ .VTN     1     ,64.     /fe_    =. =. =. =. =.( =. =. =.@T
 T
 T
 T
 T
8 T
 T
 T
n	 	 	 e- e- e- e- e- e- e- e-PL L L L Lx L L L8\! \! \! \! \! \! \! \!~*! *! *! *! *! *! *! *!ZB; B; B; B; B; B; B; B;J zHMOOOOO s   :	C CC