Ë
    èÿæi‚)  ã                   ó
  — d dl mZ d dlmZ d dlmZ d dlZd dlZd dl	Z	d dl
Z
d dlmZmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ ej.                  Zej0                  Z ej2                  «       Z G d
„ de«      Z G d„ de«      Zy)é    )Ú	distutils)Ú	build_ext)Ú	ExtensionN)ÚtypingÚsigutils)Úglobal_compiler_lock)ÚModuleCompilerÚExportEntry)Ú	Toolchain)Úcextc                   óš  — e Zd ZdZdgez   Zi Zi Zdd„Ze	d„ «       Z
e	d„ «       Zej                  d„ «       Ze	d„ «       Zej                  d	„ «       Ze	d
„ «       Zej                  d„ «       Ze	d„ «       Zej                  d„ «       Ze	d„ «       Zej                  d„ «       Zd„ Ze	d„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ «       Zed„ «       Zd„ Zy)ÚCCz_
    An ahead-of-time compiler to create extension modules that don't
    depend on Numba.
    zmodulemixin.cNc                 óH  — d|v rt        d«      ‚|| _        d|z   | _        i | _        t	        j
                  d«      }|€|j                  }|d   }nBt        |d«      r|j                  }|j                  }nt        j                  |   j                  }|j                  dd«      | _        || _        t        «       | _        d| _        t"        j$                  j'                  | j                  «      | _        | j                  j+                  |«      | _        d	| _        d| _        y )
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        úb/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/pycc/cc.pyÚ__init__zCC.__init__/   s   € Ø�.Ñ Üð .ó /ð /ð (ˆŒØ*¨^Ñ;ˆÔØ#%ˆÔ ä�M‰M˜!ÓˆØÐ Ø—+‘+ˆCØ 
™O‰MÜ�] JÔ/Ø×(Ñ(ˆCØ)×2Ñ2‰Mä—+‘+˜mÑ,×5Ñ5ˆCàŸG™G J°Ó3ˆÔØ+ˆÔÜ#›+ˆŒØˆŒäŸ7™7Ÿ?™?¨4×+<Ñ+<Ó=ˆÔØ ŸO™O×<Ñ<¸^ÓLˆÔØˆŒØˆÕó    c                 ó   — | j                   S )z=
        The name of the extension module to create.
        )r   ©r-   s    r2   ÚnamezCC.nameL   s   € ð
 �~‰~Ðr4   c                 ó   — | j                   S )zJ
        The specific output file (a DLL) that will be generated.
        ©r*   r6   s    r2   Úoutput_filezCC.output_fileS   s   € ð
 × Ñ Ð r4   c                 ó   — || _         y ©Nr9   ©r-   Úvalues     r2   r:   zCC.output_fileZ   s
   € à!ˆÕr4   c                 ó   — | j                   S )z?
        The directory the output file will be put in.
        ©r(   r6   s    r2   Ú
output_dirzCC.output_dir^   ó   € ð
 ×ÑÐr4   c                 ó   — || _         y r<   r@   r=   s     r2   rA   zCC.output_dire   ó
   € à ˆÕr4   c                 ó   — | j                   S r<   ©r+   r6   s    r2   Úuse_nrtz
CC.use_nrti   s   € à�}‰}Ðr4   c                 ó   — || _         y r<   rF   r=   s     r2   rG   z
CC.use_nrtm   ó	   € àˆ�r4   c                 ó   — | j                   S )z;
        The target CPU model for code generation.
        ©r,   r6   s    r2   Ú
target_cpuzCC.target_cpuq   rB   r4   c                 ó   — || _         y r<   rK   r=   s     r2   rL   zCC.target_cpux   rD   r4   c                 ó   — | j                   S )zI
        Whether to display detailed information when compiling.
        ©r$   r6   s    r2   Úverbosez
CC.verbose|   s   € ð
 �}‰}Ðr4   c                 ó   — || _         y r<   rO   r=   s     r2   rP   z
CC.verboseƒ   rI   r4   c                 ó®   ‡ ‡‡— t        j                  ‰«      \  }}t        j                  |g|¢­Ž Š‰‰ j                  v rt        d‰z  «      ‚ˆˆ ˆfd„}|S )zH
        Mark a function for exporting in the extension module.
        zduplicated export symbol %sc                 ó@   •— t        ‰‰| «      }|‰j                  ‰<   | S r<   )r
   r   )ÚfuncÚentryÚexported_namer-   Úsigs     €€€r2   Ú	decoratorzCC.export.<locals>.decorator�   s&   ø€ Ü ¨s°DÓ9ˆEØ6;ˆD×$Ñ$ ]Ñ3ØˆKr4   )r   Únormalize_signaturer   Ú	signaturer   ÚKeyError)r-   rV   rW   Úfn_argsÚfn_rettyrX   s   ```   r2   Úexportz	CC.export‡   s[   ú€ ô %×8Ñ8¸Ó=Ñˆ�Ü×Ñ˜xÐ2¨'Ò2ˆØ˜D×4Ñ4Ñ4ÜÐ8¸MÑJÓKÐKö	ð
 Ðr4   c                 óN   — t        | j                  j                  «       d„ ¬«      S )Nc                 ó   — | j                   S r<   )Úsymbol)rU   s    r2   Ú<lambda>z$CC._export_entries.<locals>.<lambda>š   s   € ¨¯ªr4   )Úkey)Úsortedr   Úvaluesr6   s    r2   Ú_export_entrieszCC._export_entries—   s#   € ä�d×.Ñ.×5Ñ5Ó7Ù4ô6ð 	6r4   c                 ó  — t         j                  j                  t        «      }| j                  d d  }| j
                  r|j                  d«       |D �cg c]"  }t         j                  j                  ||«      ‘Œ$ c}S c c}w )Nz../core/runtime/nrt.cpp)r%   r&   r'   r   Ú_mixin_sourcesr+   ÚappendÚjoin)r-   ÚhereÚmixin_sourcesr0   s       r2   Ú_get_mixin_sourceszCC._get_mixin_sourcesœ   sa   € Ü�w‰w�‰œxÓ(ˆØ×+Ñ+©AÐ.ˆØ�=Š=Ø× Ñ Ð!:Ô;Ù/<Ó=©}¨!”—‘—‘˜T 1Õ%¨}Ñ=Ð=ùÒ=s   Á'A>c                 óL   — d| j                   fdt        | j                  «      fgS )NÚPYCC_MODULE_NAMEÚPYCC_USE_NRT)r   Úintr+   r6   s    r2   Ú_get_mixin_defineszCC._get_mixin_defines£   s+   € ð   §¡Ð0ØœS §¡Ó/Ð0ðð 	r4   c                 ó²   — | j                   j                  t        j                  g «      }|s*| j                   j                  t        j
                  g «      }|S r<   )Ú_extra_cflagsr    r   Úplatformr%   r7   )r-   Úextra_cflagss     r2   Ú_get_extra_cflagszCC._get_extra_cflagsª   sC   € Ø×)Ñ)×-Ñ-¬c¯l©l¸BÓ?ˆÙØ×-Ñ-×1Ñ1´"·'±'¸2Ó>ˆLØÐr4   c                 ó  — | j                   j                  t        j                  g «      }|s*| j                   j                  t        j
                  g «      }t        j                  j                  d«      rd|vr|j                  d«       |S )NÚlinuxz-pthread)Ú_extra_ldflagsr    r   ru   r%   r7   Ú
startswithri   )r-   Úextra_ldflagss     r2   Ú_get_extra_ldflagszCC._get_extra_ldflags°   sk   € Ø×+Ñ+×/Ñ/´·±¸bÓAˆÙØ ×/Ñ/×3Ñ3´B·G±G¸RÓ@ˆMä�<‰<×"Ñ" 7Ô+Ø Ñ.Ø×$Ñ$ ZÔ0ØÐr4   c                 óÚ   — | j                  «       }| j                  «       }| j                  j                  «       }| j	                  «       }| j                  j                  |||||¬«      }|S )N)Úinclude_dirsÚmacrosrv   )rm   rr   r#   Úget_python_include_dirsrw   Úcompile_objects)r-   Ú	build_dirÚsourcesr€   r   rv   Úobjectss          r2   Ú_compile_mixinszCC._compile_mixinsº   sn   € Ø×)Ñ)Ó+ˆØ×(Ñ(Ó*ˆØ—‘×>Ñ>Ó@ˆà×-Ñ-Ó/ˆð —/‘/×1Ñ1°'¸9Ø?KØ9?Ø?Kð 2ó Mˆð ˆr4   c                 ó²  — t        | j                  | j                  | j                  | j                  ¬«      }| j
                  |_        t        j                  j                  |t        j                  j                  | j                  «      d   dz   «      }t        j                  d| j                  |«       |j                  |d¬«       |g|j                  fS )N)Úcpu_namer   z.oz%generating LLVM code for '%s' into %sT)Úwrap)r	   rf   r   r+   r,   r   Úexternal_init_functionr%   r&   rj   Úsplitextr*   ÚlogÚinfoÚwrite_native_objectÚdll_exports)r-   rƒ   ÚcompilerÚtemp_objs       r2   Ú_compile_object_fileszCC._compile_object_filesÈ   s­   € ä! $×"6Ñ"6¸¿¹Ø $§¡¸×8HÑ8HôJˆà*.×*=Ñ*=ˆÔ'Ü—7‘7—<‘< 	Ü "§¡× 0Ñ 0°×1BÑ1BÓ CÀAÑ FÈÑ MóOˆä�‰Ð8Ø—‘ ô	*à×$Ñ$ X°DÐ$Ô9Øˆz˜8×/Ñ/Ð/Ð/r4   c                 ó,  — | j                   | j                  _         t        j                  d| j                  z  ¬«      }| j                  |«      \  }}|| j                  |«      z  }| j                  «       }t        j                  j                  | j                  | j                  «      }| j                  j                  «       }| j                  j                  «       }| j                  j                  ||||||¬«       t!        j"                  |«       y)z/
        Compile the extension module.
        zpycc-build-%s-)Úprefix)Úexport_symbolsr|   N)rP   r#   ÚtempfileÚmkdtempr   r’   r†   r}   r%   r&   rj   r(   r*   Úget_python_librariesÚget_python_library_dirsÚlink_sharedÚshutilÚrmtree)r-   rƒ   r…   r�   r|   Ú
output_dllÚ	librariesÚlibrary_dirss           r2   Úcompilez
CC.compileÔ   så   € ð
 #'§,¡,ˆ�‰ÔÜ×$Ñ$Ð,<¸t¿~¹~Ñ,MÔNˆ	ð  $×9Ñ9¸)ÓDÑˆ�ð 	�4×'Ñ'¨	Ó2Ñ2ˆð ×/Ñ/Ó1ˆÜ—W‘W—\‘\ $×"2Ñ"2°D×4EÑ4EÓFˆ
Ø—O‘O×8Ñ8Ó:ˆ	Ø—‘×>Ñ>Ó@ˆØ�‰×#Ñ# J°Ø$-¨|Ø3>Ø2?ð 	$ô 	Aô
 	�‰�iÕ r4   c                 ó
  — |j                  dg «      | j                  «       z   }|j                  dg «      | j                  gz   }|j                  dg «      | j                  «       z   }|j                  dg «      | j	                  «       z   }|j                  dg «      | j
                  j                  «       z   }|j                  dg «      | j
                  j                  «       z   }|j                  dg «      | j
                  j                  «       z   }| j                  d| j                  j                  d	«      d
z    }	t        d|	| j                  z   | j                  «       |||||||dœ	|¤Ž}
|
j                  «        | |
_        |
S )z`
        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   )	r7   r„   r¢   Údefine_macrosr   rž   rŸ   r£   r¤   © )Úpoprr   r!   rw   r}   r#   r�   r˜   r™   r"   ÚrfindÚ_CCExtensionr   rm   Úmonkey_patch_distutilsÚ_cc)r-   Úkwargsr€   r¢   r£   r¤   r   rž   rŸ   Úpython_package_pathÚexts              r2   Údistutils_extensionzCC.distutils_extensionî   s�  € ð
 —‘˜H bÓ)¨D×,CÑ,CÓ,EÑEˆØ—*‘*˜Y¨Ó+¨t×/@Ñ/@Ð.AÑAˆØ$Ÿj™jÐ)=¸rÓBØ $× 6Ñ 6Ó 8ñ9Ðà!Ÿ:™:Ð&7¸Ó<Ø!×4Ñ4Ó6ñ7ˆàŸ
™
 >°2Ó6ØŸ/™/×AÑAÓCñDˆà—Z‘Z ¨RÓ0Ø—‘×;Ñ;Ó=ñ>ˆ	àŸ
™
 >°2Ó6ØŸ/™/×AÑAÓCñDˆà"×1Ñ1Ð2S°4×3FÑ3F×3LÑ3LÈSÓ3QÐRSÑ3SÐTÐäð 	%Ð 3°d·n±nÑ DØ#'×#:Ñ#:Ó#<Ø#*Ø)/Ø(4Ø%.Ø(4Ø.@Ø+:ñ	%ð $ñ	%ˆð 	×"Ñ"Ô$ØˆŒØˆ
r4   r<   )r   Ú
__module__Ú__qualname__Ú__doc__Úextension_libsrh   rt   rz   r3   Úpropertyr7   r:   ÚsetterrA   rG   rL   rP   r^   rf   rm   rr   rw   r}   r†   r   r’   r    r¯   r¦   r4   r2   r   r      s~  „ ñð &Ð'¨>Ñ9€Nð
€Mð

€Nó
ð: ñó ðð ñ!ó ð!ð ×Ññ"ó ð"ð ñ ó ð ð ×Ññ!ó ð!ð ñó ðð ‡^�^ñó ðð ñ ó ð ð ×Ññ!ó ð!ð ñó ðð ‡^�^ñó ðòð  ñ6ó ð6ò>òòòòð ñ	0ó ð	0ð ñ!ó ð!ó2r4   r   c                   ó.   — e Zd ZdZdZdZd„ Zed„ «       Zy)r©   zj
    A Numba-specific Extension subclass to LLVM-compile pure Python code
    to an extension module.
    NFc                 ó  — | j                   }t        j                  t        j                  j
                  |j                  g| j                  j                  d«      d d ¢­Ž «       |j                  |j                  «      \  }}|| _
        y )Nr   éÿÿÿÿ)r«   Údir_utilÚmkpathr%   r&   rj   Ú
build_tempr7   Úsplitr’   Úextra_objects)r-   r   Úccr…   Ú_s        r2   Ú_prepare_object_filesz"_CCExtension._prepare_object_files  sg   € Ø�X‰XˆÜ�‰œŸ™Ÿ™ Y×%9Ñ%9ÐV¸D¿I¹I¿O¹OÈCÓ<PÐQTÐRTÐ<UÒVÔWØ×-Ñ-¨i×.BÑ.BÓC‰
ˆ�à$ˆÕr4   c                 ó~   ‡— | j                   ryt        j                  Š G ˆfd„d‰«      }|t        _        d| _         y)z}
        Monkey-patch distutils with our own build_ext class knowing
        about pycc-compiled extensions modules.
        Nc                   ó   •— e Zd Zˆ fd„Zy)ú:_CCExtension.monkey_patch_distutils.<locals>._CC_build_extc                 ól   •— t        |t        «      r|j                  | «       ‰j                  | |«       y r<   )Ú
isinstancer©   rÀ   Úbuild_extension)r-   r®   Ú_orig_build_exts     €r2   rÆ   zJ_CCExtension.monkey_patch_distutils.<locals>._CC_build_ext.build_extension-  s+   ø€ Ü˜c¤<Ô0Ø×-Ñ-¨dÔ3à×/Ñ/°°cÕ:r4   N)r   r°   r±   rÆ   )rÇ   s   €r2   Ú_CC_build_extrÃ   +  s   ø„ õ;r4   rÈ   T)Ú_distutils_monkey_patchedr   )ÚclsrÈ   rÇ   s     @r2   rª   z#_CCExtension.monkey_patch_distutils   s:   ø€ ð ×(Ò(Øä#×-Ñ-ˆö	;˜Oô 	;ð ,Œ	Ôà(,ˆÕ%r4   )	r   r°   r±   r²   r«   rÉ   rÀ   Úclassmethodrª   r¦   r4   r2   r©   r©     s-   „ ñð
 €CØ %Ðò%ð ñ-ó ñ-r4   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¦   r4   r2   Ú<module>r×      sh   ðÝ *Ý (Ý *ã 	Û Û 
Û ç 'Ý 9ß ;Ý )Ý ð �?‰?€Ø‡j�j€Ø(�×(Ñ(Ó*€ôwˆô wôt%-�9õ %-r4   