§
    ƒÛg‚)  ã                   ó   — 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j        Z ej        ¦   «         Z G d
„ de¦  «        Z G d„ de¦  «        ZdS )é    )Ú	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dS )ÚCCz_
    An ahead-of-time compiler to create extension modules that don't
    depend on Numba.
    zmodulemixin.cNc                 ó8  — d|v rt          d¦  «        ‚|| _        d|z   | _        i | _        t	          j        d¦  «        }|€|j        }|d         }n6t          |d¦  «        r|j        }|j	        }nt          j
        |         j        }|                     dd¦  «        | _        || _        t          ¦   «         | _        d| _        t"          j                             | j        ¦  «        | _        | j                             |¦  «        | _        d	| _        d| _        d S )
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        úC/granary/edev/quantum/lib/python3.11/site-packages/numba/pycc/cc.pyÚ__init__zCC.__init__/   s  € Ø�.Ð Ð Ýð .ñ /ô /ð /ð (ˆŒØ*¨^Ñ;ˆÔØ#%ˆÔ åŒM˜!ÑÔˆØÐ Ø”+ˆCØ 
œOˆMˆMÝ�] JÑ/Ô/ð 	6ØÔ(ˆCØ)Ô2ˆMˆMå”+˜mÔ,Ô5ˆCàŸGšG J°Ñ3Ô3ˆÔØ+ˆÔÝ#™+œ+ˆŒØˆŒåœ7Ÿ?š?¨4Ô+<Ñ=Ô=ˆÔØ œO×<Ò<¸^ÑLÔ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                 ó   — || _         d S ©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                 ó   — || _         d S 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                 ó   — || _         d S 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                 ó   — || _         d S 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                 ó   — || _         d S r<   rO   r=   s     r2   rP   z
CC.verboseƒ   rI   r4   c                 ó¢   ‡ ‡‡— t          j        ‰¦  «        \  }}t          j        |g|¢R Ž Š‰‰ 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Ô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¸Ñ=Ô=Ñˆ�ÝÔ˜xÐ2¨'Ð2Ð2Ð2ˆØ˜DÔ4Ð4Ð4ÝÐ8¸MÑJÑKÔKÐKð	ð 	ð 	ð 	ð 	ð 	ð 	ð
 Ðr4   c                 óT   — t          | 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—   s0   € å�dÔ.×5Ò5Ñ7Ô7Ø4Ð4ð6ñ 6ô 6ð 	6r4   c                 ó¾   ‡— t           j                             t          ¦  «        Š| j        d d …         }| j        r|                     d¦  «         ˆfd„|D ¦   «         S )Nz../core/runtime/nrt.cppc                 óP   •— g | ]"}t           j                             ‰|¦  «        ‘Œ#S © )r%   r&   Újoin)Ú.0r0   Úheres     €r2   ú
<listcomp>z)CC._get_mixin_sources.<locals>.<listcomp>¡   s)   ø€ Ð=Ð=Ð=¨!•”—’˜T 1Ñ%Ô%Ð=Ð=Ð=r4   )r%   r&   r'   r   Ú_mixin_sourcesr+   Úappend)r-   Úmixin_sourcesrl   s     @r2   Ú_get_mixin_sourceszCC._get_mixin_sourcesœ   s`   ø€ ÝŒw�Š�xÑ(Ô(ˆØÔ+¨A¨A¨AÔ.ˆØŒ=ð 	<Ø× Ò Ð!:Ñ;Ô;Ð;Ø=Ð=Ð=Ð=¨}Ð=Ñ=Ô=Ð=r4   c                 ó@   — 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                              t          j        g ¦  «        }|s%| j                              t          j        g ¦  «        }|S r<   )Ú_extra_cflagsr    r   Úplatformr%   r7   )r-   Úextra_cflagss     r2   Ú_get_extra_cflagszCC._get_extra_cflagsª   sD   € ØÔ)×-Ò-­c¬l¸BÑ?Ô?ˆØð 	?ØÔ-×1Ò1µ"´'¸2Ñ>Ô>ˆLØÐr4   c                 ó  — | j                              t          j        g ¦  «        }|s%| j                              t          j        g ¦  «        }t          j                             d¦  «        rd|vr|                     d¦  «         |S )NÚlinuxz-pthread)Ú_extra_ldflagsr    r   ry   r%   r7   Ú
startswithro   )r-   Úextra_ldflagss     r2   Ú_get_extra_ldflagszCC._get_extra_ldflags°   s|   € ØÔ+×/Ò/µ´¸bÑAÔAˆØð 	AØ Ô/×3Ò3µB´G¸RÑ@Ô@ˆMåŒ<×"Ò" 7Ñ+Ô+ð 	1Ø Ð.Ð.Ø×$Ò$ ZÑ0Ô0Ð0ØÐr4   c                 óî   — |                       ¦   «         }|                      ¦   «         }| j                             ¦   «         }|                      ¦   «         }| j                             |||||¬¦  «        }|S )N)Úinclude_dirsÚmacrosrz   )rq   rv   r#   Úget_python_include_dirsr{   Úcompile_objects)r-   Ú	build_dirÚsourcesr„   rƒ   rz   Úobjectss          r2   Ú_compile_mixinszCC._compile_mixinsº   s|   € Ø×)Ò)Ñ+Ô+ˆØ×(Ò(Ñ*Ô*ˆØ”×>Ò>Ñ@Ô@ˆà×-Ò-Ñ/Ô/ˆð ”/×1Ò1°'¸9Ø?KØ9?Ø?Kð 2ñ Mô Mˆð ˆr4   c                 ó‚  — t          | j        | j        | j        | j        ¬¦  «        }| j        |_        t          j         	                    |t          j         
                    | j        ¦  «        d         dz   ¦  «        }t                               d| 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¸¼Ø $¤¸Ô8HðJñ Jô Jˆà*.Ô*=ˆÔ'Ý”7—<’< 	Ý "¤× 0Ò 0°Ô1BÑ CÔ CÀAÔ FÈÑ MñOô Oˆå�ŠÐ8Ø” ñ	*ô 	*ð 	*à×$Ò$ X°DÐ$Ñ9Ô9Ð9Øˆz˜8Ô/Ð/Ð/r4   c                 ó
  — | j         | j        _         t          j        d| j        z  ¬¦  «        }|                      |¦  «        \  }}||                      |¦  «        z  }|                      ¦   «         }t          j	         
                    | j        | j        ¦  «        }| j                             ¦   «         }| j                             ¦   «         }| j                             ||||||¬¦  «         t!          j        |¦  «         dS )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ÑNÔNˆ	ð  $×9Ò9¸)ÑDÔDÑˆ�ð 	�4×'Ò'¨	Ñ2Ô2Ñ2ˆð ×/Ò/Ñ1Ô1ˆÝ”W—\’\ $Ô"2°DÔ4EÑFÔFˆ
Ø”O×8Ò8Ñ:Ô:ˆ	Ø”×>Ò>Ñ@Ô@ˆØŒ×#Ò# J°Ø$-¨|Ø3>Ø2?ð 	$ñ 	Aô 	Að 	Aõ
 	Œ�iÑ Ô Ð Ð Ð r4   c                 óP  — |                      dg ¦  «        |                      ¦   «         z   }|                      dg ¦  «        | j        gz   }|                      dg ¦  «        |                      ¦   «         z   }|                      dg ¦  «        |                      ¦   «         z   }|                      dg ¦  «        | j                             ¦   «         z   }|                      dg ¦  «        | j                             ¦   «         z   }|                      dg ¦  «        | j                             ¦   «         z   }| j	        d| j	         
                    d	¦  «        d
z   …         }	t          d|	| j        z   |                      ¦   «         |||||||dœ	|¤Ž}
|
                     ¦   «          | |
_        |
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¨   ri   )Úpoprv   r!   r{   r�   r#   r…   rœ   r�   r"   ÚrfindÚ_CCExtensionr   rq   Ú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ÑEˆØ—*’*˜Y¨Ñ+Ô+¨tÔ/@Ð.AÑAˆØ$ŸjšjÐ)=¸rÑBÔBØ $× 6Ò 6Ñ 8Ô 8ñ9Ðà!Ÿ:š:Ð&7¸Ñ<Ô<Ø!×4Ò4Ñ6Ô6ñ7ˆàŸ
š
 >°2Ñ6Ô6Øœ/×AÒAÑCÔCñDˆà—Z’Z ¨RÑ0Ô0Ø”×;Ò;Ñ=Ô=ñ>ˆ	àŸ
š
 >°2Ñ6Ô6Øœ/×AÒAÑCÔCñDˆà"Ô1Ð2S°4Ô3F×3LÒ3LÈSÑ3QÔ3QÐRSÑ3SÐ2SÔTÐåð 	%Ð 3°d´nÑ DØ#'×#:Ò#:Ñ#<Ô#<Ø#*Ø)/Ø(4Ø%.Ø(4Ø.@Ø+:ð	%ð 	%ð $ð	%ð 	%ˆð 	×"Ò"Ñ$Ô$Ð$ØˆŒØˆ
r4   r<   )r   Ú
__module__Ú__qualname__Ú__doc__Úextension_libsrn   rx   r~   r3   Úpropertyr7   r:   ÚsetterrA   rG   rL   rP   r^   rf   rq   rv   r{   r�   rŠ   r   r–   r¤   r²   ri   r4   r2   r   r      sD  € € € € € ðð ð &Ð'¨>Ñ9€Nð
€Mð

€Nð
ð ð ð ð: ðð ñ „Xðð ð!ð !ñ „Xð!ð Ôð"ð "ñ Ôð"ð ð ð  ñ „Xð ð Ôð!ð !ñ Ôð!ð ðð ñ „Xðð „^ðð ñ „^ðð ð ð  ñ „Xð ð Ôð!ð !ñ Ôð!ð ðð ñ „Xðð „^ðð ñ „^ððð ð ð  ð6ð 6ñ „Xð6ð>ð >ð >ðð ð ðð ð ðð ð ðð ð ð ð	0ð 	0ñ Ôð	0ð ð!ð !ñ Ôð!ð2ð ð ð ð r4   r   c                   ó6   — e Zd ZdZdZdZd„ Zed„ ¦   «         ZdS )r¬   zj
    A Numba-specific Extension subclass to LLVM-compile pure Python code
    to an extension module.
    NFc                 ó  — | j         }t                               t          j        j        |j        g| j                             d¦  «        d d…         ¢R Ž ¦  «         | 	                    |j        ¦  «        \  }}|| _
        d S )Nr   éÿÿÿÿ)r®   Údir_utilÚmkpathr%   r&   rj   Ú
build_tempr7   Úsplitr–   Úextra_objects)r-   r   Úccr‰   Ú_s        r2   Ú_prepare_object_filesz"_CCExtension._prepare_object_files  st   € ØŒXˆÝ�Š�œœ YÔ%9ÐV¸D¼I¿OºOÈCÑ<PÔ<PÐQTÐRTÐQTÔ<UÐVÐVÐVÑWÔWÐWØ×-Ò-¨iÔ.BÑCÔC‰
ˆ�à$ˆÔÐÐr4   c                 óx   ‡— | j         rdS t          j        Š G ˆfd„d‰¦  «        }|t          _        d| _         dS )z}
        Monkey-patch distutils with our own build_ext class knowing
        about pycc-compiled extensions modules.
        Nc                   ó   •— e Zd Zˆ fd„ZdS )ú:_CCExtension.monkey_patch_distutils.<locals>._CC_build_extc                 óˆ   •— t          |t          ¦  «        r|                     | ¦  «         ‰                     | |¦  «         d S r<   )Ú
isinstancer¬   rÃ   Úbuild_extension)r-   r±   Ú_orig_build_exts     €r2   rÉ   zJ_CCExtension.monkey_patch_distutils.<locals>._CC_build_ext.build_extension-  sE   ø€ Ý˜c¥<Ñ0Ô0ð 4Ø×-Ò-¨dÑ3Ô3Ð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   si   ø€ ð Ô(ð 	ØˆFå#Ô-ˆð	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;˜Oñ 	;ô 	;ð 	;ð ,�	Ôà(,ˆÔ%Ð%Ð%r4   )	r   r³   r´   rµ   r®   rÌ   rÃ   Úclassmethodr­   ri   r4   r2   r¬   r¬     sU   € € € € € ðð ð
 €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¬   ri   r4   r2   ú<module>rÚ      sL  ðØ *Ð *Ð *Ð *Ð *Ð *Ø (Ð (Ð (Ð (Ð (Ð (Ø *Ð *Ð *Ð *Ð *Ð *à 	€	€	€	Ø €€€Ø 
€
€
€
Ø €€€à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð ð Œ?€Ø„j€Ø(�Ô(Ñ*Ô*€ðwð wð wð wð wˆñ wô wð wðt%-ð %-ð %-ð %-ð %-�9ñ %-ô %-ð %-ð %-ð %-r4   