§
    2@Äj‹/  ã                   ó   — 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ddg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.cÚdarwinz-Wl,-SNc                 ó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:\Projects\Historical\venv\Lib\site-packages\numba/pycc/cc.pyÚ__init__zCC.__init__7   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    r3   ÚnamezCC.nameT   s   € ð
 Œ~Ðr5   c                 ó   — | j         S )zJ
        The specific output file (a DLL) that will be generated.
        ©r+   r7   s    r3   Úoutput_filezCC.output_file[   s   € ð
 Ô Ð r5   c                 ó   — || _         d S ©Nr:   ©r.   Úvalues     r3   r;   zCC.output_fileb   s   € à!ˆÔÐÐr5   c                 ó   — | j         S )z?
        The directory the output file will be put in.
        ©r)   r7   s    r3   Ú
output_dirzCC.output_dirf   ó   € ð
 ÔÐr5   c                 ó   — || _         d S r=   rA   r>   s     r3   rB   zCC.output_dirm   ó   € à ˆÔÐÐr5   c                 ó   — | j         S r=   ©r,   r7   s    r3   Úuse_nrtz
CC.use_nrtq   s
   € àŒ}Ðr5   c                 ó   — || _         d S r=   rG   r>   s     r3   rH   z
CC.use_nrtu   ó   € àˆŒˆˆr5   c                 ó   — | j         S )z;
        The target CPU model for code generation.
        ©r-   r7   s    r3   Ú
target_cpuzCC.target_cpuy   rC   r5   c                 ó   — || _         d S r=   rL   r>   s     r3   rM   zCC.target_cpu€   rE   r5   c                 ó   — | j         S )zI
        Whether to display detailed information when compiling.
        ©r%   r7   s    r3   Úverbosez
CC.verbose„   s   € ð
 Œ}Ðr5   c                 ó   — || _         d S r=   rP   r>   s     r3   rQ   z
CC.verbose‹   rJ   r5   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     €€€r3   Ú	decoratorzCC.export.<locals>.decorator˜   s&   ø€ Ý ¨s°DÑ9Ô9ˆEØ6;ˆDÔ$ ]Ñ3ØˆKr5   )r   Únormalize_signaturer   Ú	signaturer   ÚKeyError)r.   rW   rX   Úfn_argsÚfn_rettyrY   s   ```   r3   Úexportz	CC.export�   s�   øøø€ õ %Ô8¸Ñ=Ô=Ñˆ�ÝÔ˜xÐ2¨'Ð2Ð2Ð2ˆØ˜DÔ4Ð4Ð4ÝÐ8¸MÑJÑKÔKÐKð	ð 	ð 	ð 	ð 	ð 	ð 	ð
 Ðr5   c                 óT   — t          | j                             ¦   «         d„ ¬¦  «        S )Nc                 ó   — | j         S r=   )Úsymbol)rV   s    r3   ú<lambda>z$CC._export_entries.<locals>.<lambda>¢   s   € ¨¬€ r5   )Úkey)Úsortedr   Úvaluesr7   s    r3   Ú_export_entrieszCC._export_entriesŸ   s0   € å�dÔ.×5Ò5Ñ7Ô7Ø4Ð4ð6ñ 6ô 6ð 	6r5   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)Ú.0r1   Úheres     €r3   ú
<listcomp>z)CC._get_mixin_sources.<locals>.<listcomp>©   s)   ø€ Ð=Ð=Ð=¨!•”—’˜T 1Ñ%Ô%Ð=Ð=Ð=r5   )r&   r'   r(   r   Ú_mixin_sourcesr,   Úappend)r.   Úmixin_sourcesrm   s     @r3   Ú_get_mixin_sourceszCC._get_mixin_sources¤   s`   ø€ ÝŒw�Š�xÑ(Ô(ˆØÔ+¨A¨A¨AÔ.ˆØŒ=ð 	<Ø× Ò Ð!:Ñ;Ô;Ð;Ø=Ð=Ð=Ð=¨}Ð=Ñ=Ô=Ð=r5   c           
      óŠ   — ddl m} d| j        fdt          | j        ¦  «        fdt          t          |dd¦  «        ¦  «        fgS )Nr   )Ú
_helperlibÚPYCC_MODULE_NAMEÚPYCC_USE_NRTÚNUMBA_LAPACK_BUILD_ILP64ÚLAPACK_BUILD_ILP64)Únumbart   r   Úintr,   Úgetattr)r.   rt   s     r3   Ú_get_mixin_defineszCC._get_mixin_defines«   s]   € à$Ð$Ð$Ð$Ð$Ð$à ¤Ð0Ø�S ¤Ñ/Ô/Ð0ð (Ý•˜Ð%9¸1Ñ=Ô=Ñ>Ô>ð@ðð 	r5   c                 óž   — | j                              t          j        g ¦  «        }|s%| j                              t          j        g ¦  «        }|S r=   )Ú_extra_cflagsr!   r   Úplatformr&   r8   )r.   Úextra_cflagss     r3   Ú_get_extra_cflagszCC._get_extra_cflags¼   sD   € ØÔ)×-Ò-­c¬l¸BÑ?Ô?ˆØð 	?ØÔ-×1Ò1µ"´'¸2Ñ>Ô>ˆLØÐr5   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   r   r&   r8   Ú
startswithrp   )r.   Úextra_ldflagss     r3   Ú_get_extra_ldflagszCC._get_extra_ldflagsÂ   s|   € ØÔ+×/Ò/µ´¸bÑAÔAˆØð 	AØ Ô/×3Ò3µB´G¸RÑ@Ô@ˆMåŒ<×"Ò" 7Ñ+Ô+ð 	1Ø Ð.Ð.Ø×$Ò$ ZÑ0Ô0Ð0ØÐr5   c                 óî   — |                       ¦   «         }|                      ¦   «         }| j                             ¦   «         }|                      ¦   «         }| j                             |||||¬¦  «        }|S )N)Úinclude_dirsÚmacrosr€   )rr   r|   r$   Úget_python_include_dirsr�   Úcompile_objects)r.   Ú	build_dirÚsourcesrŠ   r‰   r€   Úobjectss          r3   Ú_compile_mixinszCC._compile_mixinsÌ   s|   € Ø×)Ò)Ñ+Ô+ˆØ×(Ò(Ñ*Ô*ˆØ”×>Ò>Ñ@Ô@ˆà×-Ò-Ñ/Ô/ˆð ”/×1Ò1°'¸9Ø?KØ9?Ø?Kð 2ñ Mô Mˆð ˆr5   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	   rg   r   r,   r-   r   Úexternal_init_functionr&   r'   rk   Úsplitextr+   ÚlogÚinfoÚwrite_native_objectÚdll_exports)r.   r�   ÚcompilerÚtemp_objs       r3   Ú_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Ô/Ð/Ð/r5   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)rQ   r$   ÚtempfileÚmkdtempr   rœ   r�   r‡   r&   r'   rk   r)   r+   Úget_python_librariesÚget_python_library_dirsÚlink_sharedÚshutilÚrmtree)r.   r�   r�   r™   r†   Ú
output_dllÚ	librariesÚlibrary_dirss           r3   Ú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Ñ Ô Ð Ð Ð r5   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   )	r8   rŽ   r¬   Údefine_macrosr‰   r¨   r©   r­   r®   rj   )Úpopr|   r"   r�   r‡   r$   r‹   r¢   r£   r#   ÚrfindÚ_CCExtensionr   rr   Úmonkey_patch_distutilsÚ_cc)r.   ÚkwargsrŠ   r¬   r­   r®   r‰   r¨   r©   Úpython_package_pathÚexts              r3   Ú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Ø.@Ø+:ð	%ð 	%ð $ð	%ð 	%ˆð 	×"Ò"Ñ$Ô$Ð$ØˆŒØˆ
r5   r=   )r   Ú
__module__Ú__qualname__Ú__doc__Úextension_libsro   r~   r„   r4   Úpropertyr8   r;   ÚsetterrB   rH   rM   rQ   r_   rg   rr   r|   r�   r‡   r�   r   rœ   rª   r¸   rj   r5   r3   r   r      sM  € € € € € ðð ð &Ð'¨>Ñ9€Nð
€Mð 	�8�*ð
€Nðð ð ð ð: ðð ñ „Xðð ð!ð !ñ „Xð!ð Ôð"ð "ñ Ôð"ð ð ð  ñ „Xð ð Ôð!ð !ñ Ôð!ð ðð ñ „Xðð „^ðð ñ „^ðð ð ð  ñ „Xð ð Ôð!ð !ñ Ôð!ð ðð ñ „Xðð „^ðð ñ „^ððð ð ð  ð6ð 6ñ „Xð6ð>ð >ð >ðð ð ð"ð ð ðð ð ðð ð ð ð	0ð 	0ñ Ôð	0ð ð!ð !ñ Ôð!ð2ð ð ð ð r5   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'   rk   Ú
build_tempr8   Úsplitrœ   Úextra_objects)r.   r   Úccr�   Ú_s        r3   Ú_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‰
ˆ�à$ˆÔÐÐr5   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     €r3   rÏ   zJ_CCExtension.monkey_patch_distutils.<locals>._CC_build_ext.build_extension?  sE   ø€ Ý˜c¥<Ñ0Ô0ð 4Ø×-Ò-¨dÑ3Ô3Ð3à×/Ò/°°cÑ:Ô:Ð:Ð:Ð:r5   N)r   r¹   rº   rÏ   )rÐ   s   €r3   Ú_CC_build_extrÌ   =  s.   ø€ € € € € ð;ð ;ð ;ð ;ð ;ð ;ð ;r5   rÑ   T)Ú_distutils_monkey_patchedr   )ÚclsrÑ   rÐ   s     @r3   r³   z#_CCExtension.monkey_patch_distutils2  si   ø€ ð Ô(ð 	ØˆFå#Ô-ˆð	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;˜Oñ 	;ô 	;ð 	;ð ,�	Ôà(,ˆÔ%Ð%Ð%r5   )	r   r¹   rº   r»   r´   rÒ   rÉ   Úclassmethodr³   rj   r5   r3   r²   r²   "  sU   € € € € € ðð ð
 €CØ %Ðð%ð %ð %ð ð-ð -ñ „[ð-ð -ð -r5   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   ry   r   rÂ   r–   Úget_extension_libsr¼   Úobjectr   r²   rj   r5   r3   ú<module>rß      sL  ðØ *Ð *Ð *Ð *Ð *Ð *Ø (Ð (Ð (Ð (Ð (Ð (Ø *Ð *Ð *Ð *Ð *Ð *à 	€	€	€	Ø €€€Ø 
€
€
€
Ø €€€à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø )Ð )Ð )Ð )Ð )Ð )Ø Ð Ð Ð Ð Ð ð Œ?€Ø„j€Ø(�Ô(Ñ*Ô*€ðIð Ið Ið Ið Iˆñ Iô Ið IðX%-ð %-ð %-ð %-ð %-�9ñ %-ô %-ð %-ð %-ð %-r5   