
    J/Ph/                        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"          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     N/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/core/cpu.pyr   r      s        u~&'GGGr"   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)        	EN#	5>"GGGr"   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}m} ddlm}m} ddl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&}m'} ddlm(} ddlm)}  ddlm*}!m+}"m,}#m-}$ ddlm.}% ddl/m0}& | 1                    |!j2                   | 1                    |%j2                   | 1                    |"j2                   | 1                    | j2                   | 1                    |#j2                   | 1                    |$j2                   | 1                    |&j3                   th          j5        j6        7                                 ddl8m9}' d S )Nr   )builtinscharseqenumimplhashingheapq	iteratorslistobjnumbersrangeobjsetobjslicingtupleobjunicode)optionalinline_closurecall)gdb_hookliteral)linalg	arraymatharrayobj)generator_coregenerator_methods)polynomial_corepolynomial_functions)	typeddictdictimpl)	typedlist
listobject)jitclassfunction_type)
npdatetime)npyimpl)	cmathimplmathimpl	printimpl
randomimpl)cffiimpl)ClassBuilder)ndarray):r   
initializenumba.cpythonrG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   
numba.corerT   rU   
numba.miscrV   rW   numba.nprX   rY   rZ   numba.np.randomr[   r\   numba.np.polynomialr]   r^   numba.typedr_   r`   ra   rb   numba.experimentalrc   rd   re   rf   rg   rh   ri   rj   rk    numba.experimental.jitclass.baserl   install_registryregistryclass_impl_registrynumbacoreentrypointsinit_allnumba.np.unsaferm   )(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   rj   rk   jitclassimplrm   s(                                           r#   load_additional_registriesz%CPUContext.load_additional_registries<   s    		- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-
 	<;;;;;;;000000008888888888EEEEEEEEMMMMMMMM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?    
 &VX01DEG GtW(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* 	& 	
 	
 	

 $$Wf55$$T%5x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    
 "VX01KL#% % % 	%r"   c                 >    ddl m} |                    | |||          S )zR
        Build a list from the Numba *list_type* and its initial *items*.
        r   )rM   )ro   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   )ro   rP   	build_set)r/   r   set_typer   rP   s        r#   r   zCPUContext.build_set   s0     	)(((((gx???r"   c                 @    ddl m} |                    | ||||          S )Nr   )
dictobject)ru   r   	build_map)r/   r   	dict_type
item_typesr   r   s         r#   r   zCPUContext.build_map   s0    ******##D'9j%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];;;< 	' !#&&&##EM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%+%:< <nn &,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I2t**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0E((**IN&&wv>>>++GNDJJGGD--d33F&&v...LL   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'*E3(/z	) ) 	 1 1& 9 93???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;     EKs33""4#6#6u#=#=>>>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_dbg_extend_lifetimes_dbg_optnonec                       e Zd Zd ZdS )CPUTargetOptionsc                 L   |                     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           |j        r	d|_        d S d S )Nenable_pyobjectTenable_loopliftnrt)default	debuginfodbg_extend_lifetimesr  r   r   pythonr"  F)is_setr(  r)  inherit_if_not_setr	   DEBUGINFO_DEFAULTr,  r-  EXTEND_VARIABLE_LIFETIMESr  enable_pyobject_loopliftr"  dbg_optnone)r/   flagsoptionss      r#   finalizezCPUTargetOptions.finalize#  s8   ||-.. 	)$(E!||-.. 	)$(E!   555||K(( 	7$6EO||233 	N N .2** .4-M*||M** 	0 %E)-&  ,,,   AAA  /// 	& %E	& 	&r"   N)r   r   r   r7  r!   r"   r#   r&  r&  "  s#        "& "& "& "& "&r"   r&  )*r>   llvmlite.bindingbindingr@   llvmliter   r{   r   numba.core.callwrapperr   numba.core.baser   rp   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   rr   r   	Structurer   r%   r)   _options_mixinr&  r!   r"   r#   <module>rD     sv                      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2T )(
# *#& #& #& #& #&~} #& #& #& #& #&r"   