Ë
    èÿæi_n  ã                   ó&  — d Z ddlZddlm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 ddlmZmZmZmZ ddlmZmZmZmZmZmZmZ ddlmZmZmZ dd	lmZ dd
l m!Z! ddl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, ddl-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl
m4Z4 ddl5m6Z7 ddl8m9Z: ddl;m<Z< ddlm=Z= ddl>m?Z?m@Z@ ddlAmBZBmCZC ddlDmEZE  G d„ de«      ZFeFed<    G d„ de+«      ZG e1«       ZH G d„ d e&«      ZI G d!„ d"e!«      ZJ eJd«      ZK G d#„ d$e«      ZLeLeed   <    G d%„ d&e«      ZMeMeed   <   eHj�                  ejž                  «      d'„ «       ZPeHj£                  ej¤                  ej¦                  «      d(„ «       ZTeHj�                  ej¦                  «      d)„ «       ZUeHj�                  ej¬                  «      d*„ «       ZW ed¬+«      d,„ «       ZX eej²                  d¬+«      d-„ «       ZZ G d.„ d/e«      Z[ G d0„ d1e«      Z\e]d2k(  r ej¼                  «        yy)3a�  This tests the target extension API to ensure that rudimentary expected
behaviours are present and correct. It uses a piece of fake hardware as a
target, the Dummy Processing Unit (DPU), to do this. The DPU borrows a lot from
the CPU but is part of the GPU class of target. The DPU target has deliberately
strange implementations of fundamental operations so as to make it identifiable
in testing.é    N)ÚTestCase)Úcached_property)ÚnjitÚtypes)ÚoverloadÚoverload_attributeÚoverload_classmethodÚ	intrinsic)ÚJitDecoratorÚtarget_registryÚdispatcher_registryÚjit_registryÚtarget_overrideÚGPUÚresolve_dispatcher_from_str)ÚutilsÚfastmathpassÚerrors)Ú
Dispatcher)ÚTargetDescriptor)ÚcpuÚtypingÚcgutils)ÚBaseContext)Úglobal_compiler_lock)Úcallconv)Ú
CPUCodegenÚJITCodeLibrary)ÚPyCallWrapper)ÚRegistryLoaderÚRegistry)Útypeof)Ú_dynfunc)Úir)Úrtsys)Úcompiler)ÚCompilerBaseÚDefaultPassBuilder)ÚFunctionPassÚregister_pass)ÚPreLowerStripPhisc                   ó   — e Zd Zy)ÚDPUN)Ú__name__Ú
__module__Ú__qualname__© ó    úv/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_target_extension.pyr-   r-   3   s   „ Ør2   r-   Údpuc                   ó(   — e Zd ZeZd„ Zd„ Zd„ Zd„ Zy)ÚJITDPUCodegenc                 ó‚  — | j                  «       |d<   t        j                  j                  «       j                  }|j                  d«      rd}n|j                  d«      rd}nd}||d<   d|d	<   | j                  |d
<   t        j                  t        j                  j                  «      }d|j                  v rd|d<   y y )Nr   Úx86ÚstaticÚppcÚpicÚdefaultÚrelocÚ
jitdefaultÚ	codemodelÚfeaturesÚjitT)Ú_get_host_cpu_nameÚllÚTargetÚfrom_default_tripleÚnameÚ
startswithÚ_tm_featuresr   ÚpysignatureÚcreate_target_machineÚ
parameters)ÚselfÚoptionsÚarchÚreloc_modelÚsigs        r3   Ú_customize_tm_optionsz#JITDPUCodegen._customize_tm_optionsC   s¯   € à×0Ñ0Ó2ˆ�‰Ü�y‰y×,Ñ,Ó.×3Ñ3ˆØ�?‰?˜5Ô!Ø"‰KØ�_‰_˜UÔ#Ø‰Kà#ˆKØ&ˆ�ÑØ+ˆ�Ñð #×/Ñ/ˆ�
Ñô ×Ñ¤§	¡	× ?Ñ ?Ó@ˆØ�C—N‘NÑ"à!ˆG�EŠNð #r2   c                 ó"   — | j                  «       S ©N)Ú_get_host_cpu_features©rL   s    r3   Ú_customize_tm_featuresz$JITDPUCodegen._customize_tm_featuresZ   s   € à×*Ñ*Ó,Ð,r2   c                 ó:   — | j                   j                  |«       y rS   )Ú_engineÚ
add_module)rL   Úmodules     r3   Ú_add_modulezJITDPUCodegen._add_module^   s   € Ø�‰×Ñ Õ'r2   c                 óÀ   — | j                   j                  |«      }t        j                  dz  j	                  |«      }t        j                  t        |«      «      |d<   y)zrSet the environment address.

        Update the GlobalVariable named *env_name* to the address of *env*.
        é   r   N)rX   Úget_global_value_addressÚctypesÚc_void_pÚfrom_addressÚid)rL   Úenv_nameÚenvÚgvaddrÚenvptrs        r3   Úset_envzJITDPUCodegen.set_enva   sG   € ð
 —‘×6Ñ6°xÓ@ˆÜ—/‘/ AÑ%×3Ñ3°FÓ;ˆÜ—O‘O¤B s£GÓ,ˆˆqŠ	r2   N)	r.   r/   r0   r   Ú_library_classrQ   rV   r[   rg   r1   r2   r3   r6   r6   >   s   „ ð $€Nò"ò.-ò(ó-r2   r6   c                   ó€   — e Zd ZdZd„ Zed„ «       Zd„ Zed„ «       Z	d„ Z
ed„ «       Zd„ Zd	„ Zd
„ Zd„ Z	 dd„Zd„ Zd„ Zy)Ú
DPUContextTc                 ó8   — | j                   j                  |«      S rS   )Ú_internal_codegenÚ_create_empty_module)rL   rF   s     r3   Úcreate_modulezDPUContext.create_moduleu   s   € Ø×%Ñ%×:Ñ:¸4Ó@Ð@r2   c                 ón   — t        d«      | _        t        j                  | «       | j	                  «        y )Nz
numba.exec)r6   rl   r%   Ú
initializeÚrefreshrU   s    r3   ÚinitzDPUContext.initx   s&   € ä!.¨|Ó!<ˆÔä×Ñ˜ÔØ�‰�r2   c                 óØ   — t         }	 | j                  |   }| j	                  |«       | j
                  j                  «        y # t        $ r t        |«      }|| j                  |<   Y ŒQw xY wrS   )Údpu_function_registryÚ_registriesÚKeyErrorr    Úinstall_registryÚtyping_contextrq   )rL   ÚregistryÚloaders      r3   rq   zDPUContext.refresh   sk   € Ü(ˆð	0Ø×%Ñ% hÑ/ˆFð 	×Ñ˜hÔ'ð 	×Ñ×#Ñ#Õ%øô ò 	0Ü# HÓ-ˆFØ)/ˆD×Ñ˜XÓ&ð	0ús   ˆA Á#A)Á(A)c                 ó.   — | j                   j                  S rS   )rl   Útarget_datarU   s    r3   r|   zDPUContext.target_data‹   s   € à×%Ñ%×1Ñ1Ð1r2   c                 ó   — | j                   S rS   )rl   rU   s    r3   ÚcodegenzDPUContext.codegen�   s   € Ø×%Ñ%Ð%r2   c                 ó,   — t        j                  | «      S rS   )r   ÚCPUCallConvrU   s    r3   Ú	call_convzDPUContext.call_conv“   s   € ä×#Ñ# DÓ)Ð)r2   c                 ó„   — t        j                  ||t        j                  d   «      }t	        j
                  | ||d¬«      S )zŸ
        From the given *envptr* (a pointer to a _dynfunc.Environment object),
        get a EnvBody allowing structured access to environment fields.
        Úoffsetof_env_bodyT)ÚrefÚcast_ref)r   Úpointer_addr#   Ú
_impl_infor   ÚEnvBody)rL   Úbuilderrf   Úbody_ptrs       r3   Úget_env_bodyzDPUContext.get_env_body—   s>   € ô
 ×&Ñ&Ø�VœX×0Ñ0Ð1DÑEó
ˆô �{‰{˜4 ¨hÀÔFÐFr2   c                 ó\  — | j                  |j                  | j                  | j                  «      «      }|j	                  |«      }| j                  |«      }|j                  || j                  j                  ¬«       | j                  ||«      }|j                  | j                  ||«      S )N)Ú	debug_msg)Údeclare_env_globalrZ   Úget_env_nameÚfndescÚloadÚget_python_apiÚemit_environment_sentryrc   r‹   Úget_env_managerÚenvironment)rL   r‰   ÚenvgvÚenvargÚpyapiÚenv_bodys         r3   r”   zDPUContext.get_env_manager¡   s›   € Ø×'Ñ'Ø�N‰N˜D×-Ñ-¨d¯k©kÓ:ó
ˆð —‘˜eÓ$ˆØ×#Ñ# GÓ,ˆØ×%Ñ%Ø˜dŸk™k×2Ñ2ð 	&ô 	
ð ×$Ñ$ W¨fÓ5ˆØ×$Ñ$ T×%5Ñ%5°xÀÓHÐHr2   c                 óV   — t        j                  ||t        j                  d   |¬«      S )z~
        From the given *genptr* (a pointer to a _dynfunc.Generator object),
        get a pointer to its state area.
        Úoffsetof_generator_state)Úreturn_type)r   r†   r#   r‡   )rL   r‰   Úgenptrrœ   s       r3   Úget_generator_statezDPUContext.get_generator_state­   s/   € ô
 ×"Ñ"ØØÜ×ÑÐ :Ñ;Ø#ô	
ð 	
r2   c                 óš   — | j                   r t        j                  || j                   «       |j                  t        j
                  «       y rS   )Úfastmathr   Úrewrite_moduleÚadd_linking_libraryr%   Úlibrary)rL   Úmodr£   s      r3   Úpost_loweringzDPUContext.post_lowering¹   s/   € Ø�=Š=Ü×'Ñ'¨¨T¯]©]Ô;à×#Ñ#¤E§M¡MÕ2r2   c           	      ó.  — | j                  d«      }| j                  j                  |j                  |j                  «      }t        j                  |||j                  «      }t        | ||||||¬«      }	|	j                  «        |j                  |«       y )NÚwrapper)Úcall_helperÚrelease_gil)rn   r�   Úget_function_typeÚrestypeÚargtypesÚllirÚFunctionÚllvm_func_namer   ÚbuildÚadd_ir_module)
rL   r£   r�   rd   r¨   r©   Úwrapper_moduleÚfntyÚwrapper_calleer‰   s
             r3   Úcreate_cpython_wrapperz!DPUContext.create_cpython_wrapper¿   s‡   € ð ×+Ñ+¨IÓ6ˆØ�~‰~×/Ñ/°·±ÀÇÁÓPˆÜŸ™Ø˜D &×"7Ñ"7ó
ˆô  ØØØØØØ#Ø#ô
ˆð 	�‰ŒØ×Ñ˜nÕ-r2   c                  ó   — y rS   r1   )rL   r£   r�   rd   r¨   s        r3   Úcreate_cfunc_wrapperzDPUContext.create_cfunc_wrapperÓ   s   € àr2   c                 ó:  — |j                  |j                  «      }d|j                  ›�}t        j                  |j                  «       |j                  j                  d«      d   ||||f«      }|j                  j                  | j                  |«      |«       |S )zö
        Returns
        -------
        (cfunc, fnptr)

        - cfunc
            callable function (Can be None)
        - fnptr
            callable function address
        - env
            an execution environment (from _dynfunc)
        zcompiled wrapper for Ú.éÿÿÿÿ)
Úget_pointer_to_functionÚllvm_cpython_wrapper_nameÚqualnamer#   Úmake_functionÚlookup_moduleÚsplitr~   rg   r�   )rL   r£   r�   rd   ÚfnptrÚdocÚcfuncs          r3   Úget_executablezDPUContext.get_executable×   s’   € ð ×/Ñ/Ø×,Ñ,ó
‰ð ,2¯?ª?Ð<ˆÜ×&Ñ&Ø× Ñ Ó"Ø�O‰O×!Ñ! #Ó& rÑ*ØØØàˆJó
ˆð 	�‰×Ñ × 1Ñ 1°&Ó 9¸3Ô?Øˆr2   N)F)r.   r/   r0   Úallow_dynamic_globalsrn   r   rr   rq   Úpropertyr|   r~   r   r�   r‹   r”   rž   r¥   rµ   r·   rÄ   r1   r2   r3   rj   rj   q   s   „ Ø ÐòAð ñó ðò
&ð ñ2ó ð2ò&ð ñ*ó ð*òGò
Iò

ò3ð >Có.ò(ór2   rj   c                   ód   — e Zd Zej                  Zed„ «       Zed„ «       Ze	d„ «       Z
e	d„ «       Zy)Ú	DPUTargetc                 óB   — t        | j                  | j                  «      S rS   )rj   rx   Ú_target_namerU   s    r3   Ú_toplevel_target_contextz"DPUTarget._toplevel_target_contextý   s   € ô ˜$×-Ñ-¨t×/@Ñ/@ÓAÐAr2   c                 ó*   — t        j                  «       S rS   )r   ÚContextrU   s    r3   Ú_toplevel_typing_contextz"DPUTarget._toplevel_typing_context  s   € ô �~‰~ÓÐr2   c                 ó   — | j                   S )z5
        The target context for DPU targets.
        )rË   rU   s    r3   Útarget_contextzDPUTarget.target_context  ó   € ð
 ×,Ñ,Ð,r2   c                 ó   — | j                   S )z5
        The typing context for CPU targets.
        )rÎ   rU   s    r3   rx   zDPUTarget.typing_context  rÑ   r2   N)r.   r/   r0   r   ÚCPUTargetOptionsrM   r   rË   rÎ   rÆ   rÐ   rx   r1   r2   r3   rÈ   rÈ   ú   s]   „ Ø×"Ñ"€GàñBó ðBð ñ ó ð ð ñ-ó ð-ð ñ-ó ñ-r2   rÈ   c                   ó"   ‡ — e Zd ZeZˆ fd„Zˆ xZS )ÚDPUDispatcherc                 ód   •— t        d«      5  t        ‰| �	  |«      cd d d «       S # 1 sw Y   y xY w)Nr4   )r   ÚsuperÚcompile)rL   rP   Ú	__class__s     €r3   rØ   zDPUDispatcher.compile  s#   ø€ Ü˜UÕ#Ü‘7‘? 3Ó'÷ $×#Ò#ús   �&¦/)r.   r/   r0   Ú
dpu_targetÚtargetdescrrØ   Ú__classcell__)rÙ   s   @r3   rÕ   rÕ     s   ø„ Ø€K÷(ð (r2   rÕ   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)Údjitc                 ó    — || _         || _        y rS   )Ú_argsÚ_kwargs)rL   ÚargsÚkwargss      r3   Ú__init__zdjit.__init__+  s   € ØˆŒ
Øˆ�r2   c                 ó~   — t        |«      dk  sJ ‚|r|d   }n| j                  d   }|| _        | j                  «       S )Né   r   )Úlenrà   Úpy_funcÚdispatcher_wrapper)rL   râ   Úfuncs      r3   Ú__call__zdjit.__call__/  sA   € Ü�4‹y˜1Š}Ðˆ}ÙØ˜‘7‰Dà—:‘:˜a‘=ˆDØˆŒà×&Ñ&Ó(Ð(r2   c                 ó"   — t         t        d      S )z(
        Returns the dispatcher
        r4   )r   r   rU   s    r3   Úget_dispatcherzdjit.get_dispatcher9  s   € ô #¤?°5Ñ#9Ñ:Ð:r2   c                 óÐ   — | j                  «       }i }d| j                  v rd|d<   t        j                  }d| j                  v r| j                  d   } || j                  ||¬«      S )NÚnopythonTÚpipeline_class)rè   Útargetoptionsrð   )rí   rá   r&   ÚCompilerrè   )rL   ÚdispÚtoptrð   s       r3   ré   zdjit.dispatcher_wrapper?  sm   € Ø×"Ñ"Ó$ˆàˆØ˜Ÿ™Ñ%Ø#ˆD�Ñô "×*Ñ*ˆØ˜tŸ|™|Ñ+Ø!Ÿ\™\Ð*:Ñ;ˆNÙØ—L‘LØØ)ô
ð 	
r2   N)r.   r/   r0   rä   rë   rí   ré   r1   r2   r3   rÞ   rÞ   *  s   „ òò)ò;ó
r2   rÞ   c                 ó"   — | j                  «       S rS   )Úget_dummy_value)Úcontextr‰   ÚtyÚpyvals       r3   Úconstant_dummyrú   [  s   € à×"Ñ"Ó$Ð$r2   c                 óŒ   — | j                  ||j                  |j                  «      }| j                  |||j                  |«      S rS   )Úget_constant_genericÚliteral_typeÚliteral_valueÚcast)r÷   r‰   ÚfromtyÚtotyÚvalÚlits         r3   Úliteral_int_to_numberr  a  sB   € à
×
&Ñ
&Ø�×$Ñ$ f×&:Ñ&:ó€Cð �<‰<˜  f×&9Ñ&9¸4Ó@Ð@r2   c                 ó4   — | j                  |«      } ||«      S rS   ©Úget_value_type©r÷   r‰   rø   rù   Últys        r3   Ú	const_intr
  j  ó   € à
×
 Ñ
  Ó
$€CÙˆu‹:Ðr2   c                 ó4   — | j                  |«      } ||«      S rS   r  r  s        r3   Úconst_floatr  q  r  r2   ©Útargetc                 ó"   —  |||«      }d„ }||fS )Nc                 ó    —  |j                   |Ž S rS   ©Úsub©Úcgctxr‰   ÚtyargsÚllargss       r3   r~   zintrin_add.<locals>.codegen|  s   € Øˆw�{‰{˜FÐ#Ð#r2   r1   ©ÚtyctxÚxÚyrP   r~   s        r3   Ú
intrin_addr  x  s   € á
ˆAˆq‹'€Cò$ð �ˆ<Ðr2   c                 óx   — t        | t        j                  «      r t        |t        j                  «      rd„ }|S y y )Nc                 ó   — t        | |«      S rS   )r  )r  r  s     r3   Úimplzol_add.<locals>.impl‡  s   € Ü˜a Ó#Ð#r2   )Ú
isinstancer   ÚInteger)r  r  r  s      r3   Úol_addr"  ƒ  s2   € ä�!”U—]‘]Ô#¬
°1´e·m±mÔ(Dò	$ð ˆð )EÐ#r2   c                   óF   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zy)ÚTestTargetHierarchySelectionzÈThis tests that the target hierarchy is scanned in the right order,
    that appropriate functions are selected based on what's available and that
    the DPU target is distinctly different to the CPUc                 ó$  — | j                  t        j                  «       | j                  t        j                  «       | j	                  t        t        j                  «      d«       | j	                  t        t        j                  «      d«       y)zËChecks that the DPU registry only contains the things added

        This test must be first to execute among all tests in this file to
        ensure the no lazily loaded entries are added yet.
        r]   é   N)ÚassertFalsert   Ú	functionsÚgetattrsÚassertEqualrç   ÚcastsÚ	constantsrU   s    r3   Útest_0_dpu_registryz0TestTargetHierarchySelection.test_0_dpu_registry’  sf   € ð 	×ÑÔ.×8Ñ8Ô9Ø×ÑÔ.×7Ñ7Ô8à×ÑœÔ2×8Ñ8Ó9¸1Ô=à×ÑœÔ2×<Ñ<Ó=¸qÕAr2   c                 óü   ‡— d„ Št        ‰d¬«      d„ «       }t        ‰d¬«      d„ «       }t        «       ˆfd„«       }t        «       ˆfd„«       }| j                   |«       d	«       | j                   |«       d
«       y )Nc                  ó   — y rS   r1   ©r  s    r3   Úmy_funczATestTargetHierarchySelection.test_specialise_gpu.<locals>.my_func   ó   € Ør2   Úgenericr  c                 ó   — d„ }|S )Nc                 ó   — d| z   S ©Nr]   r1   r0  s    r3   r  zSTestTargetHierarchySelection.test_specialise_gpu.<locals>.ol_my_func1.<locals>.impl¦  ó   € Ø˜1‘u�r2   r1   ©r  r  s     r3   Úol_my_func1zETestTargetHierarchySelection.test_specialise_gpu.<locals>.ol_my_func1¤  ó   € òð ˆKr2   Úgpuc                 ó   — d„ }|S )Nc                 ó   — d| z   S ©Né
   r1   r0  s    r3   r  zSTestTargetHierarchySelection.test_specialise_gpu.<locals>.ol_my_func2.<locals>.impl®  ó   € Ø˜A‘v�r2   r1   r8  s     r3   Úol_my_func2zETestTargetHierarchySelection.test_specialise_gpu.<locals>.ol_my_func2¬  ó   € òð ˆKr2   c                  ó   •—  ‰ d«      S ©Né   r1   ©r1  s   €r3   Údpu_foozATestTargetHierarchySelection.test_specialise_gpu.<locals>.dpu_foo³  ó   ø€ á˜1“:Ðr2   c                  ó   •—  ‰ d«      S rD  r1   rF  s   €r3   Úcpu_foozATestTargetHierarchySelection.test_specialise_gpu.<locals>.cpu_foo·  rH  r2   r&  é   ©r   rÞ   r   ÚassertPreciseEqual)rL   r9  rA  rG  rJ  r1  s        @r3   Útest_specialise_gpuz0TestTargetHierarchySelection.test_specialise_gpuŸ  s�   ø€ ò	ô 
�' )Ô	,ñ	ó 
-ð	ô 
�' %Ô	(ñ	ó 
)ð	ô 
‹ó	ó 
ð	ô 
‹ó	ó 
ð	ð
 	×Ñ¡£	¨1Ô-à×Ñ¡£	¨1Õ-r2   c                 ó"  ‡— d„ Št        ‰d¬«      d„ «       }t        ‰d¬«      d„ «       }t        ‰d¬«      d„ «       }t        «       ˆfd	„«       }t        «       ˆfd
„«       }| j                   |«       d«       | j                   |«       d«       y )Nc                  ó   — y rS   r1   r0  s    r3   r1  zATestTargetHierarchySelection.test_specialise_dpu.<locals>.my_funcÂ  r2  r2   r3  r  c                 ó   — d„ }|S )Nc                 ó   — d| z   S r6  r1   r0  s    r3   r  zSTestTargetHierarchySelection.test_specialise_dpu.<locals>.ol_my_func1.<locals>.implÈ  r7  r2   r1   r8  s     r3   r9  zETestTargetHierarchySelection.test_specialise_dpu.<locals>.ol_my_func1Æ  r:  r2   r;  c                 ó   — d„ }|S )Nc                 ó   — d| z   S r>  r1   r0  s    r3   r  zSTestTargetHierarchySelection.test_specialise_dpu.<locals>.ol_my_func2.<locals>.implÐ  r@  r2   r1   r8  s     r3   rA  zETestTargetHierarchySelection.test_specialise_dpu.<locals>.ol_my_func2Î  rB  r2   r4   c                 ó   — d„ }|S )Nc                 ó   — d| z   S )Néd   r1   r0  s    r3   r  zSTestTargetHierarchySelection.test_specialise_dpu.<locals>.ol_my_func3.<locals>.implØ  s   € Ø˜Q‘w�r2   r1   r8  s     r3   Úol_my_func3zETestTargetHierarchySelection.test_specialise_dpu.<locals>.ol_my_func3Ö  s   € òð ˆKr2   c                  ó   •—  ‰ d«      S rD  r1   rF  s   €r3   rG  zATestTargetHierarchySelection.test_specialise_dpu.<locals>.dpu_fooÝ  rH  r2   c                  ó   •—  ‰ d«      S rD  r1   rF  s   €r3   rJ  zATestTargetHierarchySelection.test_specialise_dpu.<locals>.cpu_fooá  rH  r2   é]   rK  rL  )rL   r9  rA  rX  rG  rJ  r1  s         @r3   Útest_specialise_dpuz0TestTargetHierarchySelection.test_specialise_dpuÁ  s«   ø€ ò	ô 
�' )Ô	,ñ	ó 
-ð	ô 
�' %Ô	(ñ	ó 
)ð	ô 
�' %Ô	(ñ	ó 
)ð	ô 
‹ó	ó 
ð	ô 
‹ó	ó 
ð	ð
 	×Ñ¡£	¨2Ô.à×Ñ¡£	¨1Õ-r2   c                 óT  ‡— d„ Št        ‰d¬«      d„ «       }t        d¬«      ˆfd„«       }t        j                  t        j                  f}| j                  |«      5 } |«        d d d «       g d¢}|D ]'  }| j                  |t        j                  «      «       Œ) y # 1 sw Y   Œ:xY w)	Nc                  ó   — y rS   r1   r0  s    r3   r1  zJTestTargetHierarchySelection.test_no_specialisation_found.<locals>.my_funcí  r2  r2   Úcudar  c                 ó   — d„ S )Nc                  ó   — y rS   r1   r0  s    r3   Ú<lambda>zdTestTargetHierarchySelection.test_no_specialisation_found.<locals>.ol_my_func_cuda.<locals>.<lambda>ó  s   € ˜Tr2   r1   r0  s    r3   Úol_my_func_cudazRTestTargetHierarchySelection.test_no_specialisation_found.<locals>.ol_my_func_cudañ  s   € á!Ð!r2   T©rï   c                  ó   •—  ‰ d«       y r6  r1   rF  s   €r3   rG  zJTestTargetHierarchySelection.test_no_specialisation_found.<locals>.dpu_fooõ  s
   ø€ á�A�Jr2   )ú8Function resolution cannot find any matches for functionz-test_no_specialisation_found.<locals>.my_funczfor the current target:z''numba.tests.test_target_extension.DPU')	r   rÞ   r   ÚUnsupportedErrorÚTypingErrorÚassertRaisesÚassertInÚstrÚ	exception)rL   rc  rG  ÚacceptÚraisesÚmsgsÚmsgr1  s          @r3   Útest_no_specialisation_foundz9TestTargetHierarchySelection.test_no_specialisation_foundë  s£   ø€ ò	ô 
�' &Ô	)ñ	"ó 
*ð	"ô 
�tÔ	ó	ó 
ð	ô
 ×)Ñ)¬6×+=Ñ+=Ð>ˆØ×Ñ˜vÔ&¨&ÙŒI÷ 'ò;ˆó
 ˆCØ�M‰M˜#œs 6×#3Ñ#3Ó4Õ5ñ ÷ 'Ð&ús   ÁBÂB'c                 óì   — | j                  t        j                  «      5 }t        d¬«      d„ «       } |«        d d d «       d}| j	                  |t        j                  «      «       y # 1 sw Y   Œ1xY w)NÚinvalid_silicon)Ú_targetc                   ó   — y rS   r1   r1   r2   r3   ÚfoozATestTargetHierarchySelection.test_invalid_target_jit.<locals>.foo
  s   € àr2   ú1No target is registered against 'invalid_silicon')ri  r   ÚNonexistentTargetErrorr   rj  rk  rl  )rL   rn  rv  rp  s       r3   Útest_invalid_target_jitz4TestTargetHierarchySelection.test_invalid_target_jit  sf   € à×Ñœv×<Ñ<Ô=ÀÜÐ+Ô,ñó -ðñ ŒE÷ >ð BˆØ�‰�cœ3˜v×/Ñ/Ó0Õ1÷ >Ð=ús    A*Á*A3c                 ó  ‡— d„ Š| j                  t        j                  «      5 }t        ‰d¬«      d„ «       }t        ˆfd„«       } |«        d d d «       d}| j                  |t        j                  «      «       y # 1 sw Y   Œ1xY w)Nc                   ó   — y rS   r1   r1   r2   r3   ÚbarzFTestTargetHierarchySelection.test_invalid_target_overload.<locals>.bar  r2  r2   rs  r  c                  ó   — d„ S )Nc                   ó   — y rS   r1   r1   r2   r3   rb  z[TestTargetHierarchySelection.test_invalid_target_overload.<locals>.ol_bar.<locals>.<lambda>  s   €  r2   r1   r1   r2   r3   Úol_barzITestTargetHierarchySelection.test_invalid_target_overload.<locals>.ol_bar  s   € á$Ð$r2   c                  ó   •—  ‰ «        y rS   r1   )r|  s   €r3   rv  zFTestTargetHierarchySelection.test_invalid_target_overload.<locals>.foo  s   ø€ á•r2   rw  )ri  r   rx  r   r   rj  rk  rl  )rL   rn  r  rv  rp  r|  s        @r3   Útest_invalid_target_overloadz9TestTargetHierarchySelection.test_invalid_target_overload  s„   ø€ ò	ð
 ×Ñœv×<Ñ<Ô=ÀÜ�cÐ"3Ô4ñ%ó 5ð%ô óó ðñ ŒE÷ >ð BˆØ�‰�cœ3˜v×/Ñ/Ó0Õ1÷ >Ð=ús   ¤)A=Á=Bc                 óð  ‡‡‡— t        d¬«      d„ «       Št        d¬«      d„ «       Št        d¬«      d„ «       Št        ˆfd„«       }| j                   |«       d	«       t        ˆfd
„«       }| j                   |«       d«       t        ˆfd„«       }t        j                  t        j
                  f}| j                  |«      5 } |«        ddd«       g d¢}|D ]'  }| j                  |t        j                  «      «       Œ) t        d¬«      ˆfd„«       }| j                   |«       d«       t        d¬«      ˆfd„«       }	| j                   |	«       d«       t        d¬«      ˆfd„«       }
t        j                  t        j
                  f}| j                  |«      5 } |
«        ddd«       g d¢}|D ]'  }| j                  |t        j                  «      «       Œ) y# 1 sw Y   �ŒxY w# 1 sw Y   ŒGxY w)z£
        Test to make sure that targets can share generic implementations and
        cannot reach implementations that are not in their target hierarchy.
        r3  r  c                 ó"   —  |||«      }d„ }||fS )Nc                 ó    —  |j                   |Ž S rS   )Úmulr  s       r3   r~   zcTestTargetHierarchySelection.test_intrinsic_selection.<locals>.intrin_math_generic.<locals>.codegen3  ó   € Ø"�w—{‘{ FÐ+Ð+r2   r1   r  s        r3   Úintrin_math_genericzRTestTargetHierarchySelection.test_intrinsic_selection.<locals>.intrin_math_generic/  ó   € á�A�q“'ˆCò,ð ˜�<Ðr2   r4   c                 ó"   —  |||«      }d„ }||fS )Nc                 ó    —  |j                   |Ž S rS   r  r  s       r3   r~   z_TestTargetHierarchySelection.test_intrinsic_selection.<locals>.intrin_math_dpu.<locals>.codegen<  r†  r2   r1   r  s        r3   Úintrin_math_dpuzNTestTargetHierarchySelection.test_intrinsic_selection.<locals>.intrin_math_dpu8  rˆ  r2   r   c                 ó"   —  |||«      }d„ }||fS )Nc                 ó    —  |j                   |Ž S rS   )Úaddr  s       r3   r~   z_TestTargetHierarchySelection.test_intrinsic_selection.<locals>.intrin_math_cpu.<locals>.codegenE  r†  r2   r1   r  s        r3   Úintrin_math_cpuzNTestTargetHierarchySelection.test_intrinsic_selection.<locals>.intrin_math_cpuA  rˆ  r2   c                  ó   •—  ‰ dd«      S ©Nr&  é   r1   ©r�  s   €r3   Úcpu_foo_specificzOTestTargetHierarchySelection.test_intrinsic_selection.<locals>.cpu_foo_specificK  ó   ø€ á" 1 aÓ(Ð(r2   rE  c                  ó   •—  ‰ dd«      S r‘  r1   ©r‡  s   €r3   Úcpu_foo_genericzNTestTargetHierarchySelection.test_intrinsic_selection.<locals>.cpu_foo_genericR  ó   ø€ á& q¨!Ó,Ð,r2   é   c                  ó   •—  ‰ dd«      S r‘  r1   ©r‹  s   €r3   Úcpu_foo_dpuzJTestTargetHierarchySelection.test_intrinsic_selection.<locals>.cpu_foo_dpuY  r•  r2   N)rf  zintrinsic intrin_math_dpuúfor the current targetTrd  c                  ó   •—  ‰ dd«      S r‘  r1   rœ  s   €r3   Údpu_foo_specificzOTestTargetHierarchySelection.test_intrinsic_selection.<locals>.dpu_foo_specifich  r•  r2   rº   c                  ó   •—  ‰ dd«      S r‘  r1   r—  s   €r3   Údpu_foo_genericzNTestTargetHierarchySelection.test_intrinsic_selection.<locals>.dpu_foo_generico  r™  r2   c                  ó   •—  ‰ dd«      S r‘  r1   r“  s   €r3   Údpu_foo_cpuzJTestTargetHierarchySelection.test_intrinsic_selection.<locals>.dpu_foo_cpuv  r•  r2   )rf  zintrinsic intrin_math_cpurž  )r
   r   r*  r   rg  rh  ri  rj  rk  rl  rÞ   )rL   r”  r˜  r�  rm  rn  ro  rp  r   r¢  r¤  r�  r‹  r‡  s              @@@r3   Útest_intrinsic_selectionz5TestTargetHierarchySelection.test_intrinsic_selection(  sú  ú€ ô 
˜)Ô	$ñ	 ó 
%ð	 ô 
˜%Ô	 ñ	 ó 
!ð	 ô 
˜%Ô	 ñ	 ó 
!ð	 ô 
ó	)ó 
ð	)ð 	×ÑÑ)Ó+¨QÔ/ô 
ó	-ó 
ð	-ð 	×Ñ™Ó*¨BÔ/ô 
ó	)ó 
ð	)ô ×)Ñ)¬6×+=Ñ+=Ð>ˆØ×Ñ˜vÔ&¨&ÙŒM÷ 'ò+ˆó ˆCØ�M‰M˜#œs 6×#3Ñ#3Ó4Õ5ð ô 
�tÔ	ó	)ó 
ð	)ð 	×ÑÑ)Ó+¨RÔ0ô 
�tÔ	ó	-ó 
ð	-ð 	×Ñ™Ó*¨BÔ/ô 
�tÔ	ó	)ó 
ð	)ô ×)Ñ)¬6×+=Ñ+=Ð>ˆØ×Ñ˜vÔ&¨&ÙŒM÷ 'ò+ˆó ˆCØ�M‰M˜#œs 6×#3Ñ#3Ó4Õ5ñ ÷G 'Ñ&ú÷: 'Ð&ús   ÃGÆG,ÇG)Ç,G5c                 óÀ  ‡‡	‡
— d„ Š	t        d¬«      ˆ	fd„«       Š
t        t        j                  ddddi¬«      ˆ
fd	„«       }t	        t
        j                  dddi¬«      d
„ «       }d„ Št	        ‰dddi¬«      d„ «       }ddlm}  |d«      5  t        d¬«      ˆfd„«       } |«       }d d d «       ddl
m} | j                  |j                  «       y # 1 sw Y   Œ,xY w)Nc                 óH  — |j                   |j                   k(  r|S |j                   |j                   k  r!|j                  || j                  |«      «      S |j                  r!|j	                  || j                  |«      «      S |j                  || j                  |«      «      S rS   )ÚbitwidthÚtruncr  ÚsignedÚsextÚzext)r÷   r‰   r  r   r  s        r3   Úcast_integerzKTestTargetHierarchySelection.test_overload_allocation.<locals>.cast_integer…  s„   € à�}‰} §¡Ò/à�
Ø—‘ §¡Ò0à—}‘} S¨'×*@Ñ*@ÀÓ*FÓGÐGØ—’à—|‘| C¨×)?Ñ)?ÀÓ)EÓFÐFð —|‘| C¨×)?Ñ)?ÀÓ)EÓFÐFr2   r4   r  c                 ó|   •— ˆfd„}ddl m} t        j                  t        j                  «      } ||||«      }||fS )z;Intrinsic to call into the allocator for Array
            c                 óš   •— |\  }} ‰| |||j                   d   t        j                  «      }| j                  j	                  |||«      }|S r6  )râ   r   Úuint32ÚnrtÚmeminfo_alloc_aligned)	r÷   r‰   Ú	signaturerâ   Ú	allocsizeÚalignÚ	align_u32Úmeminfor­  s	           €r3   r~   z\TestTargetHierarchySelection.test_overload_allocation.<locals>.intrin_alloc.<locals>.codegen˜  sS   ø€ Ø%)Ñ"�˜Eñ )¨°'¸5Ø)2¯©¸Ñ):¼E¿L¹LóJ�	à!Ÿ+™+×;Ñ;¸GÀYØ<EóG�à�r2   r   )r³  )Únumba.core.typingr³  r   ÚMemInfoPointerÚvoidptr)Ú	typingctxr´  rµ  r~   r³  ÚmiprP   r­  s          €r3   Úintrin_alloczKTestTargetHierarchySelection.test_overload_allocation.<locals>.intrin_alloc”  s9   ø€ ô	õ 4Ü×&Ñ&¤u§}¡}Ó5ˆCÙ˜C ¨EÓ2ˆCØ˜�<Ðr2   Ú	_allocaterï   T)r  Újit_optionsc                 ó   •— ˆfd„}|S )Nc                 ó   •—  ‰||«      S rS   r1   )Úclsr´  rµ  r½  s      €r3   r  zaTestTargetHierarchySelection.test_overload_allocation.<locals>._ol_arr_allocate_dpu.<locals>.impl«  s   ø€ Ù# I¨uÓ5Ð5r2   r1   )rÂ  r´  rµ  r  r½  s       €r3   Ú_ol_arr_allocate_dpuzSTestTargetHierarchySelection.test_overload_allocation.<locals>._ol_arr_allocate_dpu¨  s   ø€ ô6àˆKr2   c                 ó   — d„ }|S )Nc                 óB   — t         j                  j                  | d«      S rD  )r   ÚArrayr¾  )Úns    r3   r  zZTestTargetHierarchySelection.test_overload_allocation.<locals>.ol_empty_impl.<locals>.impl±  s   € Ü—{‘{×,Ñ,¨Q°Ó2Ð2r2   r1   )rÇ  r  s     r3   Úol_empty_implzLTestTargetHierarchySelection.test_overload_allocation.<locals>.ol_empty_impl¯  s   € ò3àˆKr2   c                   ó   — y rS   r1   r1   r2   r3   Úbuffer_funczJTestTargetHierarchySelection.test_overload_allocation.<locals>.buffer_funcµ  r2  r2   c                  ó   — d„ } | S )Nc                  ó,   — t        j                  d«      S r>  )ÚnpÚemptyr1   r2   r3   r  z`TestTargetHierarchySelection.test_overload_allocation.<locals>.ol_buffer_func_impl.<locals>.implº  s   € Ü—x‘x “|Ð#r2   r1   )r  s    r3   Úol_buffer_func_implzRTestTargetHierarchySelection.test_overload_allocation.<locals>.ol_buffer_func_impl¸  s   € ò$àˆKr2   r   )r   rd  c                  ó   •—  ‰ «       S rS   r1   )rÊ  s   €r3   rv  zBTestTargetHierarchySelection.test_overload_allocation.<locals>.fooÂ  s   ø€ á"“}Ð$r2   )r±  )r
   r	   r   rÆ  r   rÍ  rÎ  Únumba.core.target_extensionr   rÞ   Únumba.core.runtimer±  ÚassertIsInstanceÚMemInfo)rL   rÃ  rÈ  rÏ  r   rv  Úrr±  rÊ  r­  r½  s           @@@r3   Útest_overload_allocationz5TestTargetHierarchySelection.test_overload_allocation„  sñ   ú€ ò	Gô 
˜%Ô	 ó	 ó 
!ð	 ô& 
œeŸk™k¨;¸uØ+5°dÐ*;ô
=ó	ó
=ð	ô
 
”"—(‘( 5°zÀ$Ð6GÔ	Hñ	ó 
Ið	ò
	ô 
�+ e¸*ÀTÐ9JÔ	Kñ	ó 
Lð	õ
 	@ñ ˜UÕ#Ü˜4Ô ó%ó !ð%á“ˆA÷	 $õ
 	+Ø×Ñ˜a §¡Õ-÷ $Ð#ús   ÂCÃCc                 ó–  — | j                  «       \  }}t         |«       «      }t        |dd¬«      d„ «       }| j                  t        j
                  d«      5  t        t        j                  |«      «      d„ «       }d d d «       t        t        j                  t        j                  d d d…   |«      «      d„ «       }y # 1 sw Y   ŒCxY w)	NÚdpu_onlyr4   r  c                 ó   — d„ }|S )Nc                  ó   — y)Né*   r1   )Úobjs    r3   ÚimpzcTestTargetHierarchySelection.test_overload_attribute_target.<locals>.ov_dummy_dpu_attr.<locals>.impÏ  s   € Ør2   r1   )rÜ  rÝ  s     r3   Úov_dummy_dpu_attrzVTestTargetHierarchySelection.test_overload_attribute_target.<locals>.ov_dummy_dpu_attrÍ  s   € òð ˆJr2   zUnknown attribute 'dpu_only'c                 ó   — | j                   S rS   ©rØ  r0  s    r3   Úillegal_target_attr_usez\TestTargetHierarchySelection.test_overload_attribute_target.<locals>.illegal_target_attr_useØ  s   € à—z‘zÐ!r2   r]   c                 ó"   — |j                   | d<   y )Nr   rà  )ÚresÚdummys     r3   Úcuda_target_attr_usezYTestTargetHierarchySelection.test_overload_attribute_target.<locals>.cuda_target_attr_useß  s   € à—^‘^ˆC�ŠFr2   )Úmake_dummy_typer"   r   ÚassertRaisesRegexr   rh  r   r   Úint64rÞ   Úvoid)rL   ÚMyDummyÚMyDummyTypeÚmydummy_typerÞ  rá  rå  s          r3   Útest_overload_attribute_targetz;TestTargetHierarchySelection.test_overload_attribute_targetÉ  s½   € Ø#×3Ñ3Ó5Ñˆ�Ü™g›iÓ(ˆä	˜K¨¸EÔ	Bñ	ó 
Cð	ð ×#Ñ#¤F×$6Ñ$6Ø$BõDä”%—+‘+˜lÓ+Ó,ñ"ó -ð"÷Dô 
Œe�j‰jœŸ™¡S q SÑ)¨<Ó8Ó	9ñ	$ó 
:ñ	$÷Dð Dús   Á%B?Â?CN)r.   r/   r0   Ú__doc__r-  rN  r\  rq  ry  r�  r¥  rÖ  rí  r1   r2   r3   r$  r$  �  s;   „ ñ9òBò .òD(.òT6ò8
2ò2ò*Z6òxC.óJ$r2   r$  c                   ó   — e Zd ZdZd„ Zy)ÚTestTargetOffloada   In this use case the CPU compilation pipeline is extended with a new
     compilation pass that runs just prior to lowering. The pass looks for
     function calls and when it finds one it sees if there's a DPU function
     available that is a valid overload for the function call. If there is one
     then it swaps the CPU implementation out for a DPU implementation. This
     producing an "offload" effect.
    c                 óò  ‡‡— dŠt        t        j                  d¬«      d„ «       }t        d¬«      d„ «       }| j	                   |d«      d	«       t
        d
„ «       }| j	                   |d«      t        j                  d«      «       t        dd¬«       G ˆfd„dt        «      «       Š G ˆfd„dt        «      }t        |¬«      d„ «       }| j	                   |d«      d	t        j                  d«      f«       y )NFr4   r  c                 ó   — d„ }|S )Nc                  ó   — y)Nç    ¼,Ar1   r0  s    r3   Údpu_sin_implzQTestTargetOffload.test_basic_offload.<locals>.ol_np_sin_DPU.<locals>.dpu_sin_implô  s   € Ør2   r1   )r  rõ  s     r3   Úol_np_sin_DPUz;TestTargetOffload.test_basic_offload.<locals>.ol_np_sin_DPUò  s   € ò ð  Ðr2   Trd  c                 ó,   — t        j                  | «      S rS   ©rÍ  Úsinr0  s    r3   rv  z1TestTargetOffload.test_basic_offload.<locals>.fooú  ó   € ä—6‘6˜!“9Ðr2   é   rô  c                 ó,   — t        j                  | «      S rS   rø  r0  s    r3   rv  z1TestTargetOffload.test_basic_offload.<locals>.foo  rú  r2   )Úmutates_CFGÚanalysis_onlyc                   ó"   •— e Zd ZdZd„ Zˆ fd„Zy)ú@TestTargetOffload.test_basic_offload.<locals>.DispatcherSwitcherÚDispatcherSwitcherc                 ó.   — t        j                  | «       y rS   )r)   rä   rU   s    r3   rä   zITestTargetOffload.test_basic_offload.<locals>.DispatcherSwitcher.__init__  s   € Ü×%Ñ% dÕ+r2   c           
      óž  •— |j                   }d}|j                  j                  «       D ]Ý  }|j                  d«      D ]Ç  }|j                  |j
                  j                     }d}t        |«      5  	 |j                  |j                  |j                  |   j                  i «      }t        |«      }	|	j                  j                  }
|
j                  ||«       |j$                  j&                  |
_        ||_        d}d d d «       ŒÉ Œß |S # t         $ r*}‰rd|› d|› d|› �}t#        |«       Y d }~d d d «       Œüd }~ww xY w# 1 sw Y   �ŒxY w)NFÚcallr4   z+Failed to find and compile an overload for z for z due to T)Úfunc_irÚblocksÚvaluesÚ
find_exprsÚtypemaprê   rF   r   Úget_call_typer»  Ú	calltypesrâ   r   rÛ   rÐ   Úget_functionÚ	ExceptionÚprintÚ	targetctxÚ_codelib_stackr  )rL   Ústater  ÚmutatedÚblkr  ÚfunctionÚtnamerP   ró   Úhw_ctxÚerp  Ú_DEBUGs                €r3   Úrun_passzITestTargetOffload.test_basic_offload.<locals>.DispatcherSwitcher.run_pass  sN  ø€ ØŸ-™-�Ø�Ø"Ÿ>™>×0Ñ0Ö2�Cð !$§¡¨vÖ 6˜Ø#(§=¡=°·±·±Ñ#@˜Ø %˜ô -¨UÕ3ð)Ø&.×&<Ñ&<Ø$)§O¡OØ$)§O¡O°DÑ$9×$>Ñ$>Ø$&ó'" ô
 (CÀ5Ó'I à)-×)9Ñ)9×)HÑ)H Ø &× 3Ñ 3°H¸cÔ Bð !&§¡× >Ñ >ð #Ô1ð +0˜DœKØ&*˜G÷E 4Ð3ñ !7ð 3ðZ �øô3 $-ò )Ù#)ð+8Ø8@°zÀÀuÀgð N2Ø23°ð)6ð %(ô
 %*¨#¤JÛ (÷' 4Ð3ûð)ú÷ 4Ñ3ús7   Á1EÁ3A'DÃ$EÄ	D?	ÄD:	Ä-EÄ:D?	Ä?EÅEN)r.   r/   r0   Ú_namerä   r  )r  s   €r3   r  r     s   ø„ à(ˆEò,õ0r2   r  c                   ó   •— e Zd Zˆ fd„Zy)ú@TestTargetOffload.test_basic_offload.<locals>.DPUOffloadCompilerc                 ó”   •— t        j                  | j                  «      }|j                  ‰t        «       |j                  «        |gS rS   )r(   Údefine_nopython_pipeliner  Úadd_pass_afterr+   Úfinalize)rL   Úpmr  s     €r3   Údefine_pipelineszQTestTargetOffload.test_basic_offload.<locals>.DPUOffloadCompiler.define_pipelinesC  s9   ø€ Ü'×@Ñ@ÀÇÁÓL�Ø×!Ñ!Ð"4Ô6GÔHØ—‘”Ø�t�r2   N)r.   r/   r0   r"  )r  s   €r3   ÚDPUOffloadCompilerr  B  s   ø„ õr2   r#  )rð   c                 óV   — t        j                  | «      t        j                  | «      fS rS   )rÍ  rù  Úcosr0  s    r3   rv  z1TestTargetOffload.test_basic_offload.<locals>.fooK  s   € ä—6‘6˜!“9œbŸf™f Q›iÐ'Ð'r2   )
r   rÍ  rù  rÞ   rM  r   r*   r)   r'   r%  )rL   rö  rv  r#  r  r  s       @@r3   Útest_basic_offloadz$TestTargetOffload.test_basic_offloadí  sò   ù€ àˆô 
”"—&‘& Ô	'ñ	 ó 
(ð	 ô 
�tÔ	ñ	ó 
ð	ð 	×Ñ¡ A£¨Ô1ô 
ñ	ó 
ð	ð 	×Ñ¡ A£¬¯©¨q«	Ô2ä	 5¸Ô	>ö6	¤ó 6	ó 
?ð6	ör	¤ô 	ô 
Ð/Ô	0ñ	(ó 
1ð	(ð 	×Ñ¡ A£¨´2·6±6¸!³9Ð(=Õ>r2   N)r.   r/   r0   rî  r&  r1   r2   r3   rð  rð  ä  s   „ ñób?r2   rð  Ú__main__)_rî  ÚunittestÚnumba.tests.supportr   r_   ÚoperatorÚ	functoolsr   ÚnumpyrÍ  Únumbar   r   Únumba.extendingr   r   r	   r
   rÑ  r   r   r   r   r   r   r   Ú
numba.corer   r   r   Únumba.core.dispatcherr   Únumba.core.descriptorsr   r   r   r   Únumba.core.baser   Únumba.core.compiler_lockr   r   Únumba.core.codegenr   r   Únumba.core.callwrapperr   Únumba.core.imputilsr    r!   Únumba.core.typing.typeofr"   r#   Úllvmlite.bindingÚbindingrC   Úllvmliter$   r­   rÒ  r%   r&   Únumba.core.compilerr'   r(   Únumba.core.compiler_machineryr)   r*   Únumba.core.typed_passesr+   r-   r6   rt   rj   rÈ   rÚ   rÕ   rÞ   Úlower_constantÚDummyrú   Ú
lower_castÚIntegerLiteralr!  r  r
  ÚFloatr  r  rŽ  r"  r$  rð  r.   Úmainr1   r2   r3   Ú<module>rD     s  ðñó Ý (Û Û Ý %Û ß ÷>ó >÷÷ ñ ÷ 3Ñ 2Ý ,Ý 3ß +Ñ +Ý 'Ý 9Ý ß 9Ý 0ß 8Ý +Ý Ý Ý Ý $å ß @ß EÝ 5ôˆ#ô ð €�Ñ ô
*-�Jô *-ñ\ !›
Ð ô
E�ô EôR-Ð ô -ñ: �uÓ€
ô(�Jô (ð /<Ð �O EÑ*Ñ +ô
%
ˆ<ô %
ðT (,€ˆ_˜UÑ#Ñ $ð ×%Ñ% e§k¡kÓ2ñ%ó 3ð%ð
 ×!Ñ! %×"6Ñ"6¸¿¹ÓFñAó GðAð ×%Ñ% e§m¡mÓ4ñó 5ðð ×%Ñ% e§k¡kÓ2ñó 3ðñ �%Ôñó ðñ 
ˆ(�,‰,˜uÔ%ñó &ðôT$ 8ô T$ôn
k?˜ô k?ð\ ˆzÒØ€H‡M�M…Oð r2   