
    sh)                     
   S SK Jr  S SKJr  S SKJr  S SKrS SKrS SK	r	S SK
r
S SKJrJr  S SKJr  S SKJrJr  S SKJr  S S	KJr  \R.                  r\R0                  r\R2                  " 5       r " S
 S\5      r " S S\5      rg)    )	distutils)	build_ext)	ExtensionN)typingsigutils)global_compiler_lock)ModuleCompilerExportEntry)	Toolchain)cextc                      \ rS rSrSrS/\-   r0 r0 rSS jr	\
S 5       r\
S 5       r\R                  S 5       r\
S	 5       r\R                  S
 5       r\
S 5       r\R                  S 5       r\
S 5       r\R                  S 5       r\
S 5       r\R                  S 5       rS r\
S 5       rS rS rS rS rS r\S 5       r\S 5       rS rSrg)CC   zS
An ahead-of-time compiler to create extension modules that don't
depend on Numba.
zmodulemixin.cNc                 V   SU;   a  [        S5      eXl        SU-   U l        0 U l        [        R
                  " S5      nUc  UR                  nUS   nOG[        US5      (       a  UR                  nUR                  nO[        R                  U   R                  nUR                  SS5      U l        X l        [        5       U l        SU l        ["        R$                  R'                  U R                  5      U l        U R                  R+                  U5      U l        S	U l        SU l        g )
N.z;basename should be a simple module name, not qualified name
pycc_init_   __name____file__ FT)
ValueError	_basename_init_function_exported_functionssys	_getframe	f_globalshasattr__dict__r   modulesget_source_path_source_moduler   
_toolchain_verboseospathdirname_output_dirget_ext_filename_output_file_use_nrt_target_cpu)selfextension_namesource_modulefdcts        a/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/pycc/cc.py__init__CC.__init__/   s    .  . / / (*^;#% MM! ++C
OM]J//((C)22M++m,55CGGJ3+#+77??4+<+<= OO<<^L    c                     U R                   $ )z-
The name of the extension module to create.
)r   r.   s    r3   nameCC.nameL   s    
 ~~r6   c                     U R                   $ )z:
The specific output file (a DLL) that will be generated.
r+   r8   s    r3   output_fileCC.output_fileS   s    
    r6   c                     Xl         g Nr<   r.   values     r3   r=   r>   Z   s    !r6   c                     U R                   $ )z/
The directory the output file will be put in.
r)   r8   s    r3   
output_dirCC.output_dir^       
 r6   c                     Xl         g r@   rD   rA   s     r3   rE   rF   e        r6   c                     U R                   $ r@   r,   r8   s    r3   use_nrt
CC.use_nrti   s    }}r6   c                     Xl         g r@   rK   rA   s     r3   rL   rM   m       r6   c                     U R                   $ )z+
The target CPU model for code generation.
r-   r8   s    r3   
target_cpuCC.target_cpuq   rG   r6   c                     Xl         g r@   rQ   rA   s     r3   rR   rS   x   rI   r6   c                     U R                   $ )z9
Whether to display detailed information when compiling.
r%   r8   s    r3   verbose
CC.verbose|   s    
 }}r6   c                     Xl         g r@   rV   rA   s     r3   rW   rX      rO   r6   c                    ^ ^^ [         R                  " T5      u  p4[        R                  " U/UQ76 mTT R                  ;   a  [        ST-  5      eUU U4S jnU$ )z8
Mark a function for exporting in the extension module.
zduplicated export symbol %sc                 @   > [        TTU 5      nUTR                  T'   U $ r@   )r
   r   )funcentryexported_namer.   sigs     r3   	decoratorCC.export.<locals>.decorator   s&    sD9E6;D$$]3Kr6   )r   normalize_signaturer   	signaturer   KeyError)r.   r^   r_   fn_argsfn_rettyr`   s   ```   r3   export	CC.export   sY     %88=x2'2D4448MJKK	
 r6   c                 H    [        U R                  R                  5       S S9$ )Nc                     U R                   $ r@   )symbol)r]   s    r3   <lambda>$CC._export_entries.<locals>.<lambda>   s    r6   )key)sortedr   valuesr8   s    r3   _export_entriesCC._export_entries   s#    d..55746 	6r6   c                    [         R                  R                  [        5      nU R                  S S  nU R
                  (       a  UR                  S5        U Vs/ s H"  n[         R                  R                  X5      PM$     sn$ s  snf )Nz../core/runtime/nrt.cpp)r&   r'   r(   r   _mixin_sourcesr,   appendjoin)r.   heremixin_sourcesr1   s       r3   _get_mixin_sourcesCC._get_mixin_sources   s_    wwx(++A.==  !:;/<=}!T%}===s   )Bc                 L    SU R                   4S[        U R                  5      4/$ )NPYCC_MODULE_NAMEPYCC_USE_NRT)r   intr,   r8   s    r3   _get_mixin_definesCC._get_mixin_defines   s+      0S/0 	r6   c                     U R                   R                  [        R                  / 5      nU(       d*  U R                   R                  [        R
                  / 5      nU$ r@   )_extra_cflagsr!   r   platformr&   r9   )r.   extra_cflagss     r3   _get_extra_cflagsCC._get_extra_cflags   sC    ))--cllB?--11"''2>Lr6   c                 2   U R                   R                  [        R                  / 5      nU(       d*  U R                   R                  [        R
                  / 5      n[        R                  R                  S5      (       a  SU;  a  UR                  S5        U$ )Nlinuxz-pthread)_extra_ldflagsr!   r   r   r&   r9   
startswithru   )r.   extra_ldflagss     r3   _get_extra_ldflagsCC._get_extra_ldflags   sn    ++//bA //33BGGR@M<<""7++.$$Z0r6   c                     U R                  5       nU R                  5       nU R                  R                  5       nU R	                  5       nU R                  R                  X!UUUS9nU$ )N)include_dirsmacrosr   )ry   r   r$   get_python_include_dirsr   compile_objects)r.   	build_dirsourcesr   r   r   objectss          r3   _compile_mixinsCC._compile_mixins   sl    ))+((*>>@--/ //11'?K9??K 2 M r6   c                    [        U R                  U R                  U R                  U R                  S9nU R
                  Ul        [        R                  R                  U[        R                  R                  U R                  5      S   S-   5      n[        R                  SU R                  U5        UR                  USS9  U/UR                  4$ )N)cpu_namer   z.oz%generating LLVM code for '%s' into %sT)wrap)r	   rq   r   r,   r-   r   external_init_functionr&   r'   rv   splitextr+   loginfowrite_native_objectdll_exports)r.   r   compilertemp_objs       r3   _compile_object_filesCC._compile_object_files   s    !$"6"6 $8H8HJ*.*=*='77<<	 " 0 01B1B CA F MO8	*$$XD$9z8////r6   c           	         U R                   U R                  l         [        R                  " SU R                  -  S9nU R                  U5      u  p#X R                  U5      -  nU R                  5       n[        R                  R                  U R                  U R                  5      nU R                  R                  5       nU R                  R                  5       nU R                  R                  XRXgUUS9  [         R"                  " U5        g)z
Compile the extension module.
zpycc-build-%s-)prefix)export_symbolsr   N)rW   r$   tempfilemkdtempr   r   r   r   r&   r'   rv   r)   r+   get_python_librariesget_python_library_dirslink_sharedshutilrmtree)r.   r   r   r   r   
output_dll	librarieslibrary_dirss           r3   compile
CC.compile   s    
 #',,$$,<t~~,MN	  $99)D 	''	22 //1WW\\$"2"2D4E4EF
OO88:	>>@##J$-3>2? 	$ 	A
 	i r6   c                    UR                  S/ 5      U R                  5       -   nUR                  S/ 5      U R                  /-   nUR                  S/ 5      U R                  5       -   nUR                  S/ 5      U R	                  5       -   nUR                  S/ 5      U R
                  R                  5       -   nUR                  S/ 5      U R
                  R                  5       -   nUR                  S/ 5      U R
                  R                  5       -   nU R                  SU R                  R                  S	5      S
-    n	[        SXR                  -   U R                  5       UUUUUUUS.	UD6n
U
R                  5         X
l        U
$ )zH
Create a distutils extension object that can be used in your
setup.py.
r   dependsextra_compile_argsextra_link_argsr   r   r   Nr   r   )	r9   r   r   define_macrosr   r   r   r   r    )popr   r"   r   r   r$   r   r   r   r#   rfind_CCExtensionr   ry   monkey_patch_distutils_cc)r.   kwargsr   r   r   r   r   r   r   python_package_pathexts              r3   distutils_extensionCC.distutils_extension   s}   
 Hb)D,C,C,EE**Y+t/@/@.AA$jj)=rB $ 6 6 89!::&7<!4467

>26//AACDZZR0;;=>	

>26//AACD"112S43F3F3L3LS3QRS3ST 	% 3nn D#'#:#:#<#*)/(4%.(4.@+:	% $	% 	""$
r6   )r   r   r   r)   r+   r#   r"   r-   r$   r,   r%   r@   )r   
__module____qualname____firstlineno____doc__extension_libsrt   r   r   r4   propertyr9   r=   setterrE   rL   rR   rW   rg   rq   ry   r   r   r   r   r   r   r   r   __static_attributes__r   r6   r3   r   r      s~    &'>9N
M

N
:   ! ! " "     ! !   ^^      ! !   ^^   6 6> 	0 	0 ! !2r6   r   c                   6    \ rS rSrSrSrSrS r\S 5       r	Sr
g)r   i  z^
A Numba-specific Extension subclass to LLVM-compile pure Python code
to an extension module.
NFc                    U R                   n[        R                  [        R                  R
                  " UR                  /U R                  R                  S5      S S Q76 5        UR                  UR                  5      u  p4X0l
        g )Nr   )r   dir_utilmkpathr&   r'   rv   
build_tempr9   splitr   extra_objects)r.   r   ccr   _s        r3   _prepare_object_files"_CCExtension._prepare_object_files  sc    XXY%9%9VDIIOOC<PQTRT<UVW--i.B.BC
$r6   c                    ^ U R                   (       a  g[        R                  m " U4S jST5      nU[        l        SU l         g)ze
Monkey-patch distutils with our own build_ext class knowing
about pycc-compiled extensions modules.
Nc                   "   > \ rS rSrU 4S jrSrg):_CCExtension.monkey_patch_distutils.<locals>._CC_build_exti+  c                 t   > [        U[        5      (       a  UR                  U 5        TR                  X5        g r@   )
isinstancer   r   build_extension)r.   r   _orig_build_exts     r3   r   J_CCExtension.monkey_patch_distutils.<locals>._CC_build_ext.build_extension-  s,    c<00--d3//:r6   r   N)r   r   r   r   r   r   )r   s   r3   _CC_build_extr   +  s    ; ;r6   r   T)_distutils_monkey_patchedr   )clsr   r   s     @r3   r   #_CCExtension.monkey_patch_distutils   s:     ((#--	;O 	; ,	(,%r6   )r   )r   r   r   r   r   r   r   r   classmethodr   r   r   r6   r3   r   r     s-    
 C %% - -r6   r   )
setuptoolsr   dutilssetuptools.commandr   setuptools.extensionr   r&   r   r   r   
numba.corer   r   numba.core.compiler_lockr   numba.pycc.compilerr	   r
   numba.pycc.platformr   numbar   r   r   get_extension_libsr   objectr   r   r   r6   r3   <module>r      sf    * ( * 	  
  ' 9 ; )  ??jj((*w wt%-9 %-r6   