o
    p‘>euK  ã                   @   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 rhee d d fee dd…  ee< qKG 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    úc/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/numpy/distutils/command/build_clib.pyr   1   s   

zbuild_clib.initialize_optionsc              
   C   s\   | j rzt| j ƒ| _ W n ty } ztdƒ|‚d }~ww 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_optionsZset_undefined_options)r   Úer    r    r!   r%   <   s   
€ÿ
ûzbuild_clib.finalize_optionsc                 C   ó*   | 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   ó
   ÿzbuild_clib.have_f_sourcesc                 C   r'   r(   )r*   r   r+   r,   r    r    r!   Úhave_cxx_sourcesQ   r0   zbuild_clib.have_cxx_sourcesc                 C   sN  | 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rR| jj d¡ | jj d¡ | j }d | _ | j | ¡ || _ | j ¡  | js¯t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'r#| j
j(D ]'}| j )|j*¡}tj | j+|¡}tj |j,|¡}|  -|j,¡ t. /||¡ qýd S 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)r5   Ú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©r5   Úverboser6   r7   Ú
requiref90Z
c_compiler)0r*   Úrun_commandr+   ÚappendZdistutils.ccompilerr4   r5   r6   r7   Ú	customizeÚdistributionr1   r   Zcompiler_soZcustomize_cmdZshow_customizationr   ÚosÚpathÚjoinÚget_finalized_commandr2   ÚabspathÚ
build_tempÚhasattrr;   Zcache_flushr   r   r   ÚatexitÚregisterr/   Únumpy.distutils.fcompilerrB   r   rE   Ú_f_compilerÚbuild_librariesr   Zinstalled_librariesÚlibrary_filenameÚnamer   Ú
target_dirÚmkpathÚshutilÚcopy)r   Ú	languagesr-   r.   Úlr4   r*   r<   Zopt_cache_pathr@   rR   rB   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 rb   )Úbuild_a_library)r   r*   r-   r.   r    r    r!   rV   ¸   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)ÚcallablerH   )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|ƒstd| ƒ‚t|ƒ}t|ƒ\}}}	}
|
  p0| dd¡dk}g }|r:| d¡ |rA| d¡ |rI| d¡ n|	rP| d¡ ||d< |j|| j	d	}|| d
g ¡ }| j
}| jsv| j ¡ svt 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¡p+g }t"j# $|¡}|r:|  %|¡ |jdkrJ||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 ]\}"}#‰ |"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 }$|r%t d.¡ | -¡ }%|%j,|| j+|| || j|| | d-}&|$  |&¡ |	s+|
rÊg }g }'|rD|j.d u r<t/d/ƒ}(|| 0||¡7 }|
r[t d0¡ |'|j,|
| j+||| j|d-7 }'|r²| jj.d u r²t/d/ƒD ]H})|)|(v rrqit"j# (||)¡}*t"j# 1|)¡t"j# 1|*¡krˆqit"j# 2|*¡r”t" 3|*¡ z	|  4|)|¡ W qi t5y±   t 6d1|)|f ¡ Y qiw |	rÉt d2¡ |'|j,|	| j+||| j|d-7 }'ng }'|'rQ| 7|¡sQt"j# (| j	|d3 ¡}+t8|+d4ƒ})|) 9d5 (d6d7„ |'D ƒ¡¡ W d   ƒ n	1 sýw   Y  t"j# (| j	|d8 ¡}+t8|+d4ƒ})|) 9d5 (d9d7„ |$D ƒ¡¡ W d   ƒ n	1 s*w   Y  t"j# (| j	||j: ¡},t8|,d:ƒ})W d   ƒ n	1 sKw   Y  n|$  |'¡ |j;|$|| j	| jd; | d<g ¡}-|D ]\}.}/|.|-v r{|-  |/ d<g ¡¡ qi|-r†|-|d<< d S d S )=Nr)   zfin 'libraries' option (library '%s'), 'sources' must be present and must be a list of source filenamesr3   ÚcrC   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   rA   rD   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msvcr2   r8   r9   r:   )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)rl   Úsrc_dirrr   rs   ÚdebugÚextra_postargsZ	ccompilerz!compiling C dispatch-able sources)rl   r~   rr   rs   r   r€   zcompiling C sources)rl   rr   rs   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   ó    | ]	}t j |¡V  qd S rb   ©rK   rL   rO   ©rz   Úobjr    r    r!   Ú	<genexpr>»  ó   € z-build_clib.build_a_library.<locals>.<genexpr>z	.cobjectsc                 s   rƒ   rb   r„   r…   r    r    r!   r‡   À  rˆ   Úwb)rl   r   r*   )<r5   rU   r+   r   r   Úlistr	   rH   rW   r   r7   r   r;   Z	is_cachedr   r   r   r?   rT   rB   Zcompiler_typerE   r6   rJ   Úget_option_dictr\   ÚupdaterI   r   rp   rq   ri   rc   r   rK   rL   ÚdirnamerZ   rN   r2   rM   Zcpu_baseline_flagsZtry_dispatchrP   ÚcompileÚcxx_compilerZmodule_dir_switchr   Zmodule_optionsrO   ÚisfileÚremoveZ	move_filer   ÚwarnZcan_ccompiler_linkÚopenÚwriteZstatic_lib_extensionZcreate_static_lib)0r   r.   r-   r*   r5   r   r)   Z	c_sourcesZcxx_sourcesZ	f_sourcesZfmodule_sourcesrF   rk   Zlib_filerm   Zforce_rebuildro   rB   ÚdistZbase_config_fcrr   rs   r€   rt   ru   rv   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!   rg   Ô   sì  
þ
ÿÿ


ÿ
þû

ÿÿÿÿÿ


ÿÿÿ


ÿþ
þÿ

ø
ù	
ÿþú

ÿþú
	ÿ
û

ÿÿ
û€
ÿÿ
ÿÿ
ÿÿ€
þ
€ÿzbuild_clib.build_a_libraryN)Ú__name__Ú
__module__Ú__qualname__Údescriptionr   Úuser_optionsZboolean_optionsr   r%   r/   r1   ra   rf   rV   ri   rg   r    r    r    r!   r      s    ÿZr   )Ú__doc__rK   r   r[   Zdistutils.command.build_clibr   r   Zdistutils.errorsr   r   r   Znumpy.distutilsr   Z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      &€