a
    LªfuK  ã                   @   sæ   d Z ddlZddlmZ ddlZddlmZ ddlmZm	Z	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 dd	lmZ ejZeeeƒƒD ]:Zee d d
v r–ee d d fee dd…  ee< q–G dd„ deƒZdS )zC Modified version of build_clib that handles fortran source files.
é    N)Úglob)Ú
build_clib)ÚDistutilsSetupErrorÚDistutilsErrorÚDistutilsFileError)Úlog)Únewer_group)Úfilter_sourcesÚget_lib_source_filesÚget_numpy_include_dirsÚhas_cxx_sourcesÚhas_f_sourcesÚis_sequence)Únew_ccompiler_opt)z
build-clibz
build-tempú=é   c                   @   st   e Zd ZdZejg d¢ Zejg d¢ Zdd„ Zdd„ Zdd	„ Z	d
d„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )r   z1build C/C++/F libraries used by Python extensions))z
fcompiler=Nz!specify the Fortran compiler type)ÚinplaceÚizBuild in-place)z	parallel=Újznumber of parallel jobs)ú
warn-errorNz'turn all warnings into errors (-Werror))zcpu-baseline=Nz4specify a list of enabled baseline CPU optimizations)zcpu-dispatch=Nz.specify a list of dispatched CPU optimizations)údisable-optimizationNz1disable CPU optimized code(dispatch,simd,fast...))r   r   r   c                 C   s8   t  | ¡ d | _d| _d | _d | _d | _d | _d | _d S )Nr   )	Úold_build_clibÚinitialize_optionsÚ	fcompilerr   ÚparallelÚ
warn_errorÚcpu_baselineÚcpu_dispatchÚdisable_optimization)Úself© r    ú[/var/www/ai-form-bot/venv/lib/python3.9/site-packages/numpy/distutils/command/build_clib.pyr   1   s    
zbuild_clib.initialize_optionsc              
   C   sh   | j rFzt| j ƒ| _ W n. tyD } ztdƒ|‚W Y d }~n
d }~0 0 t | ¡ |  dddddd¡ d S )Nz)--parallel/-j argument must be an integerÚbuild)r   r   )r   r   )r   r   )r   r   )r   r   )r   ÚintÚ
ValueErrorr   Úfinalize_optionsÚset_undefined_options)r   Úer    r    r!   r%   <   s     
ûzbuild_clib.finalize_optionsc                 C   s*   | j D ]\}}t| dg ¡ƒr dS qdS ©NÚsourcesTF)Ú	librariesr   Úget©r   Úlib_nameÚ
build_infor    r    r!   Úhave_f_sourcesK   s    zbuild_clib.have_f_sourcesc                 C   s*   | j D ]\}}t| dg ¡ƒr dS qdS r(   )r*   r   r+   r,   r    r    r!   Úhave_cxx_sourcesQ   s    zbuild_clib.have_cxx_sourcesc                 C   sT  | j s
d S g }|  d¡ | j D ]*\}}| dd ¡}|r||vr| |¡ qddlm} || j| j| jd| _| jj	| j
|  ¡ d | jr¤| jj d¡ | jj d¡ | j }d | _ | j | ¡ || _ | j ¡  | jsbtj dd	d
d¡}tj |  d¡j|¡}tj tj | jd¡¡}t| dƒr*| j ¡  t| j|| j| j|d| _dd„ }	dd l}
|
 |	| j¡ |   ¡ ràddl!m"} || j#| j$| j| jd|v | jd| _%| j%d uræ| j% 	| j
¡ | j }d | _ | j% | ¡ || _ | j% ¡  nd | _%|  &| j ¡ | j'rP| j
j(D ]L}| j )|j*¡}tj | j+|¡}tj |j,|¡}|  -|j,¡ t. /||¡ qd S )NÚ	build_srcÚlanguager   )Únew_compiler)ÚcompilerÚdry_runÚforce)Zneed_cxxz-WerrorÚnumpyÚ	distutilsÚincludeznpy_cpu_dispatch_config.hzccompiler_opt_cache_clib.pyÚcompiler_opt)r4   Údispatch_hpathr   r   Ú
cache_pathc                 S   s    t  d¡ t  | jdd¡ d S )Nz3
########### CLIB COMPILER OPTIMIZATION ###########T)Úfull)r   ÚinfoÚreport)Zcoptr    r    r!   r?   Œ   s    
zbuild_clib.run.<locals>.report©Únew_fcompilerÚf90©r4   Úverboser5   r6   Ú
requiref90Z
c_compiler)0r*   Úrun_commandr+   ÚappendÚdistutils.ccompilerr3   r4   r5   r6   Ú	customizeÚdistributionr0   r   Úcompiler_soZcustomize_cmdZshow_customizationr   ÚosÚpathÚjoinÚget_finalized_commandr1   ÚabspathÚ
build_tempÚhasattrr:   Zcache_flushr   r   r   ÚatexitÚregisterr/   Únumpy.distutils.fcompilerrA   r   rD   Ú_f_compilerÚbuild_librariesr   Zinstalled_librariesÚlibrary_filenameÚnamer   Ú
target_dirÚmkpathÚshutilÚcopy)r   Ú	languagesr-   r.   Úlr3   r*   r;   Zopt_cache_pathr?   rS   rA   ZlibnameÚsourceÚtargetr    r    r!   ÚrunW   s‚    
þ
ÿ
ÿ
ý
ûzbuild_clib.runc                 C   s.   |   | j¡ g }| jD ]}| t|ƒ¡ q|S ©N)Zcheck_library_listr*   Úextendr
   )r   Ú	filenamesÚlibr    r    r!   Úget_source_files±   s
    
zbuild_clib.get_source_filesc                 C   s    |D ]\}}|   |||¡ qd S rc   )Úbuild_a_library)r   r*   r-   r.   r    r    r!   rW   ¸   s    zbuild_clib.build_librariesc                 C   s>   |du rg S g }|D ]$}t |ƒr.||| ƒ7 }q| |¡ q|S )ah   Assemble flags from flag list

        Parameters
        ----------
        in_flags : None or sequence
            None corresponds to empty list.  Sequence elements can be strings
            or callables that return lists of strings. Callable takes `self` as
            single parameter.

        Returns
        -------
        out_flags : list
        N)ÚcallablerG   )r   Zin_flagsZ	out_flagsZin_flagr    r    r!   Úassemble_flags¼   s    zbuild_clib.assemble_flagsc           0         s$  | j }| j}| d¡}|d u s&t|ƒs2td| ƒ‚t|ƒ}t|ƒ\}}}	}
|
  p`| dd¡dk}g }|rt| d¡ |r‚| d¡ |r’| d¡ n|	r | d¡ ||d< |j|| j	d	}|| d
g ¡ }| j
}| jsì| j ¡ sìt d¡ d}|st||dƒst d|¡ d S t d|¡ | di ¡}|d ur¤|r¤t d|f ¡ ddlm} ||j| j| j| j
|| j d}|d ur¤| j}| d¡ ¡ }| |¡ | |¡ |	s°|
rÆ|d u rÆtd| ƒ‚|d urô| d¡pÞg |_| d¡pðg |_| d¡}|d u rg }| d¡}|d u r$g }|  | d¡¡}|  | d¡¡}|  | d¡¡}|  t!ƒ ¡ | d¡png }t"j# $|¡}|rŒ|  %|¡ |jdkr¬||7 }g }||7 }g }g }g }g }| js\|  &d¡j'}t"j# (d d!d"¡} t"j# (|| ¡} | | ¡ |}!|f|d#f||f|d$ffD ]8\}"}#‰ |"D ]&‰|#‡ ‡fd%d&„ˆd d … D ƒ7 }#q$q| j )¡ }n
| d'¡ g }$|r¦t d(¡ |$| jj*|| j+|!|| || j|| |%d)7 }$|ràt d*¡ |$| jj*|| j+|!|| || j|| d+7 }$|rt d,¡ |$|j,|| j+|| || j|| | d-7 }$|rbt d.¡ | -¡ }%|%j,|| j+|| || j|| | d-}&|$  |&¡ |	sn|
r¬g }g }'|r |j.d u rt/d/ƒ}(|| 0||¡7 }|
rÎt d0¡ |'|j,|
| j+||| j|d-7 }'|r|| jj.d u r|t/d/ƒD ]})|)|(v rüqêt"j# (||)¡}*t"j# 1|)¡t"j# 1|*¡kr(qêt"j# 2|*¡r@t" 3|*¡ z|  4|)|¡ W n& t5yv   t 6d1|)|f ¡ Y n0 qê|	r°t d2¡ |'|j,|	| j+||| j|d-7 }'ng }'|'rº| 7|¡sºt"j# (| j	|d3 ¡}+t8|+d4ƒ*})|) 9d5 (d6d7„ |'D ƒ¡¡ W d   ƒ n1 s0    Y  t"j# (| j	|d8 ¡}+t8|+d4ƒ*})|) 9d5 (d9d7„ |$D ƒ¡¡ W d   ƒ n1 sl0    Y  t"j# (| j	||j: ¡},t8|,d:ƒ})W d   ƒ n1 s®0    Y  n |$  |'¡ |j;|$|| j	| jd; | d<g ¡}-|D ]&\}.}/|.|-v rê|-  |/ d<g ¡¡ qê|-r |-|d<< d S )=Nr)   zfin 'libraries' option (library '%s'), 'sources' must be present and must be a list of source filenamesr2   ÚcrB   zc++Zf77Úsource_languages)Ú
output_dirÚdependsz*Detected changes on compiler optimizationsTÚnewerz"skipping '%s' library (up-to-date)zbuilding '%s' libraryÚ	config_fczEusing additional config_fc from setup script for fortran compiler: %sr   r@   rC   z<library %s has Fortran sources but no Fortran compiler foundÚextra_f77_compile_argsÚextra_f90_compile_argsÚmacrosÚinclude_dirsZextra_compiler_argsÚextra_cflagsÚextra_cxxflagsÚmodule_dirsZmsvcr1   r7   r8   r9   )z.dispatch.c)z.dispatch.cppz.dispatch.cxxc                    s&   g | ]}|  ˆ ¡rˆ ˆ |¡¡‘qS r    )ÚendswithÚpopÚindex)Ú.0Ús©Z_extZ_srcr    r!   Ú
<listcomp>K  s   ÿz.build_clib.build_a_library.<locals>.<listcomp>)ZNPY_DISABLE_OPTIMIZATIONr   z#compiling C++ dispatch-able sources)rm   Úsrc_dirrs   rt   ÚdebugÚextra_postargsZ	ccompilerz!compiling C dispatch-able sources)rm   r   rs   rt   r€   r   zcompiling C sources)rm   rs   rt   r€   r   zcompiling C++ sourcesz*.modz#compiling Fortran 90 module sourceszfailed to move %r to %rzcompiling Fortran sourcesz	.fobjectsÚwÚ
c                 s   s   | ]}t j |¡V  qd S rc   ©rL   rM   rP   ©r{   Úobjr    r    r!   Ú	<genexpr>»  ó    z-build_clib.build_a_library.<locals>.<genexpr>z	.cobjectsc                 s   s   | ]}t j |¡V  qd S rc   r„   r…   r    r    r!   r‡   À  rˆ   Úwb)rm   r€   r*   )<r4   rV   r+   r   r   Úlistr	   rG   rX   r   r6   r   r:   Z	is_cachedr   r€   r   r>   rU   rA   Úcompiler_typerD   r5   rJ   Úget_option_dictr]   ÚupdaterI   r   rq   rr   rj   rd   r   rL   rM   Údirnamer[   rO   r1   rN   Zcpu_baseline_flagsZtry_dispatchrQ   ÚcompileÚcxx_compilerZmodule_dir_switchr   Zmodule_optionsrP   ÚisfileÚremoveÚ	move_filer   ÚwarnZcan_ccompiler_linkÚopenÚwriteZstatic_lib_extensionZcreate_static_lib)0r   r.   r-   r*   r4   r   r)   Z	c_sourcesZcxx_sourcesZ	f_sourcesZfmodule_sourcesrE   rl   Zlib_filern   Zforce_rebuildrp   rA   ÚdistZbase_config_fcrs   rt   r   ru   rv   rw   Zmodule_build_dirZcopt_c_sourcesZcopt_cxx_sourcesZcopt_baseline_flagsZcopt_macrosZbsrc_dirr;   Zcopt_build_srcZ_srcsZ_dstÚobjectsr   Zcxx_objectsZ	f_objectsZexisting_modulesÚfÚtZlistfnZ	lib_fnameZclib_librariesÚlnameZbinfor    r}   r!   rh   Ô   sÚ   
þÿ
ÿ


ÿ
þû


ÿ
ÿÿÿÿ



ÿÿÿ


ÿþ
þ

ø
ù	
ÿþú

ÿþú	
ÿ
û

ÿ
û

ÿ:
ÿ:
ÿ"
þ
zbuild_clib.build_a_libraryN)Ú__name__Ú
__module__Ú__qualname__Údescriptionr   Úuser_optionsÚboolean_optionsr   r%   r/   r0   rb   rg   rW   rj   rh   r    r    r    r!   r      s   ÿZr   )Ú__doc__rL   r   r\   Zdistutils.command.build_clibr   r   Údistutils.errorsr   r   r   Znumpy.distutilsr   Údistutils.dep_utilr   Znumpy.distutils.misc_utilr	   r
   r   r   r   r   Znumpy.distutils.ccompiler_optr   r    Z_lÚrangeÚlenZ_ir    r    r    r!   Ú<module>   s    (