§
    ƒÛgR0  ã                   ó„  — d dl Z d dlmZ d dl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mZmZmZ d dlmZmZ d dlmZ d d	lmZ d dlZd d
lmZm Z m!Z! d dl"m#Z#  G d„ dej$        ¦  «        Z% G d„ dej$        ¦  «        Z& G d„ de¦  «        Z' eddddddddddddddd d!d"d#¦  «        Z( G d$„ d%e(e¦  «        Z)dS )&é    N)Úir)Ú_dynfunc)ÚPyCallWrapper)ÚBaseContext)	ÚutilsÚtypesÚconfigÚcgutilsÚcallconvÚcodegenÚ	externalsÚfastmathpassÚ
intrinsics)ÚTargetOptionsÚinclude_default_options)Úrtsys)Úglobal_compiler_lock)ÚParallelOptionsÚFastMathOptionsÚInlineOptions)Úufunc_dbc                   ó"   — e Zd Zdej        fgZdS )ÚClosureBodyÚenvN©Ú__name__Ú
__module__Ú__qualname__r   ÚpyobjectÚ_fields© ó    úD/granary/edev/quantum/lib/python3.11/site-packages/numba/core/cpu.pyr   r      s   € € € € € Ø�u”~Ð&Ð'€G€G€Gr"   r   c                   ó2   — e Zd Zdej        fdej        fgZdS )ÚEnvBodyÚglobalsÚconstsNr   r!   r"   r#   r%   r%      s)   € € € € € à	�E”NÐ#Ø	�5”>Ð"ð€G€G€Gr"   r%   c                   óÐ   ‡ — e Zd ZdZdZdˆ fd„	Zd„ Zed„ ¦   «         Zd„ Z	e
d„ ¦   «         Zd	„ Zd
„ Ze
d„ ¦   «         Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	 dd„Zd„ Zd„ Zd„ Zd„ Zˆ xZS )Ú
CPUContextz0
    Changes BaseContext calling convention
    TÚcpuc                 óL   •— t          ¦   «                              ||¦  «         d S ©N)ÚsuperÚ__init__)ÚselfÚ	typingctxÚtargetÚ	__class__s      €r#   r.   zCPUContext.__init__)   s#   ø€ Ý‰Œ×Ò˜ FÑ+Ô+Ð+Ð+Ð+r"   c                 ó6   — | j                              |¦  «        S r,   )Ú_internal_codegenÚ_create_empty_module)r/   Únames     r#   Úcreate_modulezCPUContext.create_module-   s   € ØÔ%×:Ò:¸4Ñ@Ô@Ð@r"   c                 óö   — t           j        dk    | _        t          j        d¦  «        | _        t          j        ¦   «         dk    rt          j	        d¦  «         t          j                             | ¦  «         d S )Né    z
numba.execÚarmv7lzlibgcc_s.so.1)r   ÚMACHINE_BITSÚis32bitr   ÚJITCPUCodegenr4   ÚplatformÚmachineÚllÚload_library_permanentlyr   Úc_math_functionsÚinstall©r/   s    r#   ÚinitzCPUContext.init0   sj   € åÔ*¨bÒ0ˆŒÝ!(Ô!6°|Ñ!DÔ!DˆÔõ ÔÑÔ Ò)Ð)ÝÔ'¨Ñ8Ô8Ð8õ 	Ô"×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0r"   c                 óä  — t          j        | ¦  «         ddlm}m}m}m}m}m}m	}m
}m}	m}
m}m}m} ddlm} ddlm}m} ddlm}m}m}m} ddlm}m} ddlm}m} ddlm }m!} dd	l"m#}m$} dd
lm%} ddlm&} ddlm'}m(} m)}!m*}" ddlm+}# ddl,m-}$ |  .                    |j/        ¦  «         |  .                    |#j/        ¦  «         |  .                    | j/        ¦  «         |  .                    |j/        ¦  «         |  .                    |!j/        ¦  «         |  .                    |"j/        ¦  «         |  .                    |$j0        ¦  «         tb          j2        j3         4                    ¦   «          ddl5m6}% d S )Nr   )ÚbuiltinsÚcharseqÚenumimplÚhashingÚheapqÚ	iteratorsÚlistobjÚnumbersÚrangeobjÚsetobjÚslicingÚtupleobjÚunicode)Úoptional)Úgdb_hookÚliteral)ÚlinalgÚ
polynomialÚ	arraymathÚarrayobj)Úgenerator_coreÚgenerator_methods)Ú	typeddictÚdictimpl)Ú	typedlistÚ
listobject)ÚjitclassÚfunction_type)Ú
npdatetime)Únpyimpl)Ú	cmathimplÚmathimplÚ	printimplÚ
randomimpl)Úcffiimpl)ÚClassBuilder)Úndarray)7r   Ú
initializeÚnumba.cpythonrG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   Ú
numba.corerT   Ú
numba.miscrU   rV   Únumba.nprW   rX   rY   rZ   Únumba.np.randomr[   r\   Únumba.typedr]   r^   r_   r`   Únumba.experimentalra   rb   rc   rd   re   rf   rg   rh   ri   Ú numba.experimental.jitclass.baserj   Úinstall_registryÚregistryÚclass_impl_registryÚnumbaÚcoreÚentrypointsÚinit_allÚnumba.np.unsaferk   )&r/   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   Újitclassimplrk   s&                                         r#   Úload_additional_registriesz%CPUContext.load_additional_registries<   s¹  € õ 	Ô˜ÑÔÐð	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð
 	(Ð'Ð'Ð'Ð'Ð'Ø0Ð0Ð0Ð0Ð0Ð0Ð0Ð0ØDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDð	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9à3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ø5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ø>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ø'Ð'Ð'Ð'Ð'Ð'ð 	%Ð$Ð$Ð$Ð$Ð$ØLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLØ'Ð'Ð'Ð'Ð'Ð'ð	ð 	ð 	ð 	ð 	ð 	à×Ò˜iÔ0Ñ1Ô1Ð1Ø×Ò˜hÔ/Ñ0Ô0Ð0Ø×Ò˜hÔ/Ñ0Ô0Ð0Ø×Ò˜gÔ.Ñ/Ô/Ð/Ø×Ò˜iÔ0Ñ1Ô1Ð1Ø×Ò˜jÔ1Ñ2Ô2Ð2Ø×Ò˜lÔ>Ñ?Ô?Ð?õ 	Œ
Ô×'Ò'Ñ)Ô)Ð)ð 	,Ð+Ð+Ð+Ð+Ð+Ð+Ð+r"   c                 ó   — | j         j        S r,   )r4   Útarget_datarD   s    r#   r€   zCPUContext.target_datah   s   € àÔ%Ô1Ð1r"   c                 óT   — t          j        |fi |¤Ž}|                      |d¬¦  «        S )NT)r4   Úaot_mode)r   ÚAOTCPUCodegenÚ	subtarget)r/   r6   Úaot_optionsÚaot_codegens       r#   Úwith_aot_codegenzCPUContext.with_aot_codegenl   s:   € ÝÔ+¨DÐ@Ð@°KÐ@Ð@ˆØ�~Š~°Ø'+ð ñ -ô -ð 	-r"   c                 ó   — | j         S r,   )r4   rD   s    r#   r   zCPUContext.codegenq   s   € ØÔ%Ð%r"   c                 ó*   — t          j        | ¦  «        S r,   )r   ÚCPUCallConvrD   s    r#   Ú	call_convzCPUContext.call_convt   s   € åÔ# DÑ)Ô)Ð)r"   c                 ót   — t          j        ||t          j        d         ¦  «        }t	          | ||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%   )r/   ÚbuilderÚenvptrÚbody_ptrs       r#   Úget_env_bodyzCPUContext.get_env_bodyx   s?   € õ
 Ô&Ø�V�XÔ0Ð1DÔEñGô Gˆå�t˜W¨(¸TÐBÑBÔBÐBr"   Fc                 ód  — |                       |j        |                      | j        ¦  «        ¦  «        }|                     |¦  «        }|                      |¦  «        }|                     ||| j        j        ¬¦  «         |                      ||¦  «        }| 	                    | j
        ||¦  «        S )N)Úreturn_pyobjectÚ	debug_msg)Údeclare_env_globalÚmoduleÚget_env_nameÚfndescÚloadÚget_python_apiÚemit_environment_sentryÚenv_namer•   Úget_env_managerÚenvironment)r/   r’   r—   ÚenvgvÚenvargÚpyapiÚenv_bodys          r#   r¡   zCPUContext.get_env_manager�   s±   € Ø×'Ò'¨¬Ø(,×(9Ò(9¸$¼+Ñ(FÔ(FñHô Hˆà—’˜eÑ$Ô$ˆØ×#Ò# GÑ,Ô,ˆØ×%Ò%ØØ+Ø”kÔ*ð 	&ñ 	
ô 	
ð 	
ð
 ×$Ò$ W¨fÑ5Ô5ˆØ×$Ò$ TÔ%5°xÀÑHÔHÐHr"   c                 óR   — 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‘   )r/   r’   Úgenptrr©   s       r#   Úget_generator_statezCPUContext.get_generator_stateŽ   s1   € õ
 Ô"Ø�V�XÔ0Ð1KÔLØ#ð%ñ %ô %ð 	%r"   c                 ó>   — ddl m} |                     | |||¦  «        S )zR
        Build a list from the Numba *list_type* and its initial *items*.
        r   )rM   )rm   rM   Ú
build_list)r/   r’   Ú	list_typeÚitemsrM   s        r#   r­   zCPUContext.build_list—   s0   € ð 	*Ð)Ð)Ð)Ð)Ð)Ø×!Ò! $¨°¸EÑBÔBÐBr"   c                 ó>   — ddl m} |                     | |||¦  «        S )zP
        Build a set from the Numba *set_type* and its initial *items*.
        r   )rP   )rm   rP   Ú	build_set)r/   r’   Úset_typer¯   rP   s        r#   r±   zCPUContext.build_setž   s0   € ð 	)Ð(Ð(Ð(Ð(Ð(Ø×Ò  g¨x¸Ñ?Ô?Ð?r"   c                 ó@   — ddl m} |                     | ||||¦  «        S )Nr   )Ú
dictobject)rr   r´   Ú	build_map)r/   r’   Ú	dict_typeÚ
item_typesr¯   r´   s         r#   rµ   zCPUContext.build_map¥   s0   € Ø*Ð*Ð*Ð*Ð*Ð*à×#Ò# D¨'°9¸jÈ%ÑPÔPÐPr"   c                 ó¼   — | j         rt          j        || j         ¦  «         | j        rt	          j        |¦  «         |                     t          j        ¦  «         d S r,   )	Úfastmathr   Úrewrite_moduler<   r   Ú
fix_divmodÚadd_linking_libraryr   Úlibrary)r/   Úmodr½   s      r#   Úpost_loweringzCPUContext.post_loweringª   sZ   € ØŒ=ð 	<ÝÔ'¨¨T¬]Ñ;Ô;Ð;àŒ<ð 	'õ Ô! #Ñ&Ô&Ð&à×#Ò#¥E¤MÑ2Ô2Ð2Ð2Ð2r"   c           	      ó.  — |                       d¦  «        }| j                             |j        |j        ¦  «        }t          j        |||j        ¦  «        }t          | ||||||¬¦  «        }	|	 	                    ¦   «          | 
                    |¦  «         d S )NÚwrapper)Úcall_helperÚrelease_gil)r7   r‹   Úget_function_typeÚrestypeÚargtypesr   ÚFunctionÚllvm_func_namer   ÚbuildÚadd_ir_module)
r/   r½   rœ   r   rÂ   rÃ   Úwrapper_moduleÚfntyÚwrapper_calleer’   s
             r#   Úcreate_cpython_wrapperz!CPUContext.create_cpython_wrapperµ   s˜   € à×+Ò+¨IÑ6Ô6ˆØŒ~×/Ò/°´ÀÄÑPÔPˆÝœ ^°TØ%+Ô%:ñ<ô <ˆå  n°nØ &¨¸Ø,7ð9ñ 9ô 9ˆð 	�Š‰ŒˆØ×Ò˜nÑ-Ô-Ð-Ð-Ð-r"   c                 ó\  ‡ — ‰                       d¦  «        }‰ j                             |j        |j        ¦  «        }t          j        |||j        ¦  «        }ˆ fd„|j        D ¦   «         }‰                      |j        ¦  «        }	t          j	        |	|¦  «        }
t          j        ||
|j
        ¦  «        }t          j        |                     d¦  «        ¦  «        }‰ j                             |||j        |j        |j        d¬¦  «        \  }}|                     |j        d¬¦  «        5  ‰                      |¦  «        }|                     ¦   «         }‰ j                             |||¦  «         ‰                      |j        t-          ‰ ¦  «        ¦  «        }|                     |¦  «        }|                     |¦  «         |                     |¦  «         |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   |                     |¦  «         |                     |¦  «         d S )NÚcfunc_wrapperc                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r!   )Úget_value_type)Ú.0Útyr/   s     €r#   ú
<listcomp>z3CPUContext.create_cfunc_wrapper.<locals>.<listcomp>Ç   s'   ø€ ÐIÐIÐI°2�t×*Ò*¨2Ñ.Ô.ÐIÐIÐIr"   Úentry)Únoinline)ÚattrsF)Úlikely)r7   r‹   rÄ   rÅ   rÆ   r   rÇ   rÈ   rÒ   ÚFunctionTypeÚllvm_cfunc_wrapper_nameÚ	IRBuilderÚappend_basic_blockÚcall_functionÚargsÚif_thenÚis_errorrž   Ú
gil_ensureÚraise_errorÚinsert_const_stringrš   ÚreprÚstring_from_stringÚerr_write_unraisableÚdecrefÚgil_releaseÚretrÊ   )r/   r½   rœ   r   rÂ   rË   rÌ   rÍ   Úll_argtypesÚll_return_typeÚwraptyÚwrapfnr’   ÚstatusÚoutr¥   Ú	gil_stateÚcstrÚstrobjs   `                  r#   Úcreate_cfunc_wrapperzCPUContext.create_cfunc_wrapperÁ   sC  ø€ Ø×+Ò+¨OÑ<Ô<ˆØŒ~×/Ò/°´ÀÄÑPÔPˆÝœ ^°TØ%+Ô%:ñ<ô <ˆð JÐIÐIÐI¸¼ÐIÑIÔIˆØ×,Ò,¨V¬^Ñ<Ô<ˆÝ” °Ñ=Ô=ˆÝ”˜^¨VØ#Ô;ñ=ô =ˆå”,˜v×8Ò8¸ÑAÔAÑBÔBˆà”n×2Ò2Ø�^ V¤^°V´_ØŒK˜}ð 3ñ .ô .‰ˆ�ð �_Š_˜Vœ_°Uˆ_Ñ;Ô;ð 
	)ð 
	)ð ×'Ò'¨Ñ0Ô0ˆEØ×(Ò(Ñ*Ô*ˆIØŒN×&Ò& w°°vÑ>Ô>Ð>Ø×+Ò+¨G¬N½DÀ¹J¼JÑGÔGˆDØ×-Ò-¨dÑ3Ô3ˆFØ×&Ò& vÑ.Ô.Ð.Ø�LŠL˜Ñ Ô Ð Ø×Ò˜iÑ(Ô(Ð(ð
	)ð 
	)ð 
	)ñ 
	)ô 
	)ð 
	)ð 
	)ð 
	)ð 
	)ð 
	)ð 
	)øøøð 
	)ð 
	)ð 
	)ð 
	)ð 	�Š�CÑÔÐØ×Ò˜nÑ-Ô-Ð-Ð-Ð-s   Ä)CG7Ç7G;Ç>G;c                 ó>  — |                      |j        ¦  «        }d|j        ›�}t          j        |                     ¦   «         |j                             d¦  «        d         ||||f¦  «        }|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   Úset_envr›   )r/   r½   rœ   r   ÚfnptrÚdocÚcfuncs          r#   Úget_executablezCPUContext.get_executableá   s    € ð ×/Ò/ØÔ,ñ.ô .ˆˆð
 ,2¬?¨?Ð<ˆÝÔ& v×';Ò';Ñ'=Ô'=Ø'-¤×'<Ò'<¸SÑ'AÔ'AÀ"Ô'EØ'*¨E°3à(/ zñ	)ô )ˆð 	Œ×Ò × 1Ò 1°&Ñ 9Ô 9¸3Ñ?Ô?Ð?Øˆr"   c                 ó’   — t          j        t           j        |d¦  «        }|                      |                      |¦  «        ¦  «        S )zI
        Calculate the size of an array struct on the CPU target
        ÚA)r   ÚArrayÚint32Úget_abi_sizeofrÒ   )r/   ÚndimÚarytys      r#   Úcalc_array_sizeofzCPUContext.calc_array_sizeofþ   s;   € õ ”�EœK¨¨sÑ3Ô3ˆØ×"Ò" 4×#6Ò#6°uÑ#=Ô#=Ñ>Ô>Ð>r"   c                 ó*   — t          j        |¦  «        S r,   )r   Úget_ufunc_info)r/   Ú	ufunc_keys     r#   r  zCPUContext.get_ufunc_info  s   € ÝÔ& yÑ1Ô1Ð1r"   )r*   )F)r   r   r   Ú__doc__Úallow_dynamic_globalsr.   r7   r   rE   r~   Úpropertyr€   r‡   r   r‹   r•   r¡   r«   r­   r±   rµ   r¿   rÎ   rô   r  r
  r  Ú__classcell__)r2   s   @r#   r)   r)   #   sµ  ø€ € € € € ðð ð !Ðð,ð ,ð ,ð ,ð ,ð ,ðAð Að Að ð	1ð 	1ñ Ôð	1ð*,ð *,ð *,ðX ð2ð 2ñ „Xð2ð-ð -ð -ð
&ð &ð &ð ð*ð *ñ „Xð*ðCð Cð CðIð Ið Ið Ið%ð %ð %ðCð Cð Cð@ð @ð @ðQð Qð Qð
	3ð 	3ð 	3ð ,1ð
.ð 
.ð 
.ð 
.ð.ð .ð .ð@ð ð ð:?ð ?ð ?ð2ð 2ð 2ð 2ð 2ð 2ð 2r"   r)   ÚnopythonÚforceobjÚloopliftÚ_nrtÚdebugÚboundscheckÚnogilÚno_rewritesÚno_cpython_wrapperÚno_cfunc_wrapperÚparallelr¹   Úerror_modelÚinlineÚforceinlineÚtarget_backendÚ_dbg_extend_lifetimesÚ_dbg_optnonec                   ó   — e Zd Zd„ ZdS )ÚCPUTargetOptionsc                 óv  — |                      d¦  «        sd|_        |                      d¦  «        sd|_        |                     dd¬¦  «         |                      d¦  «        st          j        |_        |                      d¦  «        s |j        rd|_        nt          j        |_        |                      d¦  «        s|j        |_	        d|_
        |                     d	¦  «         |                     d
d¬¦  «         |                     d¦  «         |                     d¦  «         |j        r	d|_        d S d S )NÚenable_pyobjectTÚenable_loopliftÚnrt)ÚdefaultÚ	debuginfoÚdbg_extend_lifetimesr  r¹   r  Úpythonr   r  F)Úis_setr&  r'  Úinherit_if_not_setr	   ÚDEBUGINFO_DEFAULTr*  r+  ÚEXTEND_VARIABLE_LIFETIMESr  Úenable_pyobject_loopliftr  Úoptnone)r/   ÚflagsÚoptionss      r#   ÚfinalizezCPUTargetOptions.finalize%  sL  € Ø�|Š|Ð-Ñ.Ô.ð 	)Ø$(ˆEÔ!à�|Š|Ð-Ñ.Ô.ð 	)Ø$(ˆEÔ!à× Ò  °Ð Ñ5Ô5Ð5à�|Š|˜KÑ(Ô(ð 	7Ý$Ô6ˆEŒOà�|Š|Ð2Ñ3Ô3ð 	NØŒð Nð .2�Ô*Ð*õ .4Ô-M�Ô*à�|Š|˜MÑ*Ô*ð 	0Ø %¤ˆEÔà)-ˆÔ&à× Ò  Ñ,Ô,Ð,à× Ò  ¸Ð ÑAÔAÐAð 	× Ò Ð!1Ñ2Ô2Ð2à× Ò  Ñ/Ô/Ð/àÔð 	"à!ˆEŒMˆMˆMð	"ð 	"r"   N)r   r   r   r5  r!   r"   r#   r$  r$  $  s#   € € € € € ð%"ð %"ð %"ð %"ð %"r"   r$  )*r>   Úllvmlite.bindingÚbindingr@   Úllvmliter   rx   r   Únumba.core.callwrapperr   Únumba.core.baser   rn   r   r   r	   r
   r   r   r   r   r   Únumba.core.optionsr   r   Únumba.core.runtimer   Únumba.core.compiler_lockr   Únumba.core.entrypointsÚnumba.core.cpu_optionsr   r   r   rp   r   Ú	Structurer   r%   r)   Ú_options_mixinr$  r!   r"   r#   ú<module>rB     sy  ðØ €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ð=ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =à EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ $Ð $Ð $Ð $Ð $Ð $Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø Ð Ð Ð ðDð Dð Dð Dð Dð Dð Dð Dð Dð Dà Ð Ð Ð Ð Ð ð
(ð (ð (ð (ð (�'Ô#ñ (ô (ð (ðð ð ð ð ˆgÔñ ô ð ðd2ð d2ð d2ð d2ð d2�ñ d2ô d2ð d2ðT )Ð(ØØØØ
ØØØØØØØØØØØàØØñ'ô €ð.&"ð &"ð &"ð &"ð &"�~ }ñ &"ô &"ð &"ð &"ð &"r"   