o
    >~#gÊy  ã                   @   sR  d Z ddlZddlZddlZddlZddlZddlm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mZmZmZmZ dd	lmZ dd	lmZ d
d„ ZG dd„ dejƒZe dej ¡j!Z"e dej ¡j!Z#e dej ¡j!Z$e dej ¡j%Z&e dej ¡j%Z'dd„ Z(dd„ Z)dd„ Z*e dej ¡j!Z+e dej ¡j!Z,dd„ Z-dS )z Build swig and f2py sources.
é    N)Ú	build_ext)Únewer_groupÚnewer)Úget_platform)ÚDistutilsErrorÚDistutilsSetupError)Úlog)Úfortran_ext_matchÚ
appendpathÚ	is_stringÚis_sequenceÚget_cmd)Úprocess_filec                 C   s¾   t  d¡}t|dƒK}t| dƒ-}|D ]"}| |¡}|r0| | d| d¡ || d¡ ¡¡ q| |¡ qW d  ƒ n1 s@w   Y  W d  ƒ dS W d  ƒ dS 1 sXw   Y  dS )zPSubstitute any occurrence of @foo@ by d['foo'] from source file into
    target.z@([a-zA-Z_]+)@ÚrÚwz@%s@é   N)ÚreÚcompileÚopenÚsearchÚwriteÚreplaceÚgroup)ÚtargetÚsourceÚdÚvarÚfsÚftÚlÚm© r!   ú†/var/www/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/lib/python3.10/site-packages/numpy/distutils/command/build_src.pyÚ
subst_vars   s   

(ûÿÿ"ÿr#   c                   @   sÀ   e Zd ZdZg d¢Zg d¢Zg 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d„ Zdd„ Zdd„ Zdd„ Zg fdd„Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*S )+Ú	build_srcz1build sources from SWIG, F2PY files or a function)
)z
build-src=r   zdirectory to "build" sources to)z
f2py-opts=Nz!list of f2py command line options)zswig=Nzpath to the SWIG executable)z
swig-opts=Nz!list of SWIG command line options)zswig-cppNzAmake SWIG create C++ files (default is autodetected from sources))z
f2pyflags=Nz3additional flags to f2py (use --f2py-opts= instead))z
swigflags=Nz3additional flags to swig (use --swig-opts= instead))ÚforceÚfz2forcibly build everything (ignore file timestamps))ÚinplaceÚiziignore build-lib and put compiled extensions into the source directory alongside your pure Python modules)úverbose-cfgNzJchange logging level from WARN to INFO which will show all compiler output)r%   r'   r)   c                 C   sj   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d | _d | _d | _d | _d S ©N)Ú
extensionsÚpackageÚ
py_modulesÚpy_modules_dictr$   Ú	build_libÚ
build_baser%   r'   Úpackage_dirÚ	f2pyflagsÚ	f2py_optsÚ	swigflagsÚ	swig_optsÚswig_cppÚswigÚverbose_cfg©Úselfr!   r!   r"   Úinitialize_options?   s"   
zbuild_src.initialize_optionsc                 C   s¼  |   dddd¡ | jd u r| jj| _| jj| _| jjpg | _| jjp#g | _| jjp*g | _| j	d u rKdj
tƒ gtjd d… ¢R Ž }tj | jd| ¡| _	i | _| jra| jrZt d¡ n| j| _d | _| jd u rjg | _nt | j¡| _| jr„| jr}t d	¡ n| j| _d | _| jd u rg | _nt | j¡| _|  d
¡}| jd u r¢|j| _| jd u r«|j| _dD ].}d| dd¡ }t||d ƒ}|rÛt| |ƒrÌt d| ¡ q­t  d||f ¡ t!| ||ƒ q­d S )NÚbuild)r0   r0   )r/   r/   )r%   r%   z	.{}-{}.{}é   Úsrcz0ignoring --f2pyflags as --f2py-opts already usedz0ignoring --swigflags as --swig-opts already usedr   )r7   Úswig_optz--Ú_ú-z-both build_src and build_ext define %s optionz+using "%s=%s" option from build_ext command)"Úset_undefined_optionsr,   ÚdistributionÚext_packageÚext_modulesr+   Ú	librariesr-   Ú
data_filesr$   Úformatr   ÚsysÚversion_infoÚosÚpathÚjoinr0   r.   r2   r3   r   ÚwarnÚshlexÚsplitr4   r5   Úget_finalized_commandr'   r6   r   ÚgetattrÚinfoÚsetattr)r:   Úplat_specifierr   ÚcÚoÚvr!   r!   r"   Úfinalize_optionsR   s\   ý









€øzbuild_src.finalize_optionsc                 C   s&   t  d¡ | js| jsd S |  ¡  d S )Nr$   )r   rS   r+   rF   Úbuild_sourcesr9   r!   r!   r"   ÚrunŒ   s   
zbuild_src.runc                 C   sn   | j r
|  d¡j| _|  ¡  | jD ]}| j|Ž  q| jr-|  | j¡ | jD ]}|  |¡ q%|  	¡  |  
¡  d S )NÚbuild_py)r'   rQ   Úget_package_dirÚbuild_py_modules_sourcesrF   Úbuild_library_sourcesr+   Úcheck_extensions_listÚbuild_extension_sourcesÚbuild_data_files_sourcesÚbuild_npy_pkg_config)r:   Úlibname_infoÚextr!   r!   r"   rZ   ’   s   
ÿ

zbuild_src.build_sourcesc                 C   sB  | j sd S t d¡ ddlm} g }| j D ]‚}t|tƒr"| |¡ qt|tƒr’|\}}| j	r;|  
d | tj¡¡¡}ntj | j|¡}dd„ |D ƒ}dd„ |D ƒ}|D ]0}|jjdkr`||ƒ}	n|ƒ }	|	d urƒt|	tƒrr| |	¡ qSt|	tƒr}| |	¡ qStt|	ƒƒ‚qS|||fƒ}
| ||
f¡ qtt|ƒƒ‚|| j d d …< d S )	Nzbuilding data_files sourcesr   )Úget_data_filesÚ.c                 S   s   g | ]	}t |d ƒr|‘qS ©Ú__call__©Úhasattr©Ú.0r&   r!   r!   r"   Ú
<listcomp>µ   ó    z6build_src.build_data_files_sources.<locals>.<listcomp>c                 S   s   g | ]	}t |d ƒs|‘qS rh   rj   rl   r!   r!   r"   rn   ¶   ro   r   )rG   r   rS   Únumpy.distutils.misc_utilrf   Ú
isinstanceÚstrÚappendÚtupler'   r]   rM   rP   rK   ÚseprL   r$   Ú__code__Úco_argcountÚlistÚextendÚ	TypeErrorÚrepr)r:   rf   Únew_data_filesÚdatar   ÚfilesÚ	build_dirÚfuncsr&   ÚsÚ	filenamesr!   r!   r"   rb   ¦   s<   






úz"build_src.build_data_files_sourcesc                 C   sº   |\}}}t j |¡}| ¡ D ]\}}|||< q| jdkr%t j ||¡}	n	t j | j||¡}	t j t j |¡d ¡}
t j |	|
¡}t j 	|	¡sLt  
|	¡ t|||ƒ t j ||¡}||fS )Nr   r   )rK   rL   ÚdirnameÚitemsr'   rM   r$   ÚbasenameÚsplitextÚexistsÚmakedirsr#   )r:   rS   ÚgdÚtemplateÚinstall_dirÚ
subst_dictÚtemplate_dirÚkrX   Úgenerated_dirÚ	generatedÚgenerated_pathÚfull_install_dirr!   r!   r"   Ú_build_npy_pkg_configÊ   s    


ÿ
zbuild_src._build_npy_pkg_configc                 C   sÐ   t  d¡ t tdƒ¡}|jdks| ¡  d}| jdkr!d}d}n
t|dƒr+|j}d}|rd| j	j
 ¡ D ]2\}}| j	j| }tj tj |¡|¡}d|i}|D ]}	|  |	|¡\}
}| j	j |
|gf¡ qNq3d S d S )	Nz(build_src: building npy-pkg config filesÚinstallr   Frg   TÚinstall_libbaseÚprefix)r   rS   Úcopyr   Ú	finalizedrY   r'   rk   r•   rC   Úinstalled_pkg_configr„   r1   rK   rL   rM   Úabspathr“   rG   rs   )r:   Úinstall_cmdÚ
build_npkgÚ
top_prefixÚpkgÚinfosÚpkg_pathr–   r   rS   r‹   r   r!   r!   r"   rc   à   s0   




ÿþûzbuild_src.build_npy_pkg_configc                 C   sð   | j sd S t d¡ g }| j D ]_}t|ƒrit|ƒdkri|\}}}| jr)|  |¡}ntj 	| j
tjj	| d¡Ž ¡}t|dƒrJtj 	||d ¡}||ƒ}|d u rOq|||fg}|| jvr_g | j|< | j|  |7  < q| |¡ q|| j d d …< d S )Nzbuilding py_modules sourcesé   rg   ri   ú.py)r-   r   rS   r   Úlenr'   r]   rK   rL   rM   r$   rP   rk   r.   rs   )r:   Únew_py_modulesr   r,   Úmodule_baser   r   Úmodulesr!   r!   r"   r^   þ   s.   



ÿ


z"build_src.build_py_modules_sourcesc                 C   st   t | dg ¡ƒ}|sd S t d| ¡ |  |||f¡}|  |||f¡}|  |¡\}}|r4t d| j|¡ ||d< d S )NÚsourceszbuilding library "%s" sourcesú#%s - nothing done with h_files = %s)rx   Úgetr   rS   Úgenerate_sourcesÚtemplate_sourcesÚfilter_h_filesr,   )r:   Úlib_nameÚ
build_infor§   Úh_filesr!   r!   r"   r_     s   ÿzbuild_src.build_library_sourcesc                 C   s$  t |jƒ}t d|j ¡ |  |j¡}| d¡}d |dd… ¡}| jr*|  	|¡| _
|  ||¡}|  ||¡}|  ||¡}|  ||¡}|  ||¡}|  |¡\}}|| jvrYg | j|< g }|D ]}tj tj |¡¡d }	| ||	|f¡ q]| j|  |7  < |  |¡\}}
|
rt d||
¡ ||_d S )Nzbuilding extension "%s" sourcesrg   r   éÿÿÿÿr¨   )rx   r§   r   rS   ÚnameÚget_ext_fullnamerP   rM   r'   r]   Úext_target_dirrª   r«   Úswig_sourcesÚf2py_sourcesÚpyrex_sourcesÚfilter_py_filesr.   rK   rL   r†   r…   rs   r¬   )r:   re   r§   ÚfullnameÚmodpathr,   Úpy_filesr¦   r&   Úmoduler¯   r!   r!   r"   ra   0  s4   



ÿ
z!build_src.build_extension_sourcesc                 C   s  g }g }|D ]}t |ƒr| |¡ q| |¡ q|s|S | jr't|ƒs'| j}nt|ƒr0|d }n|j}tjj| j	g| 
d¡d d…  Ž }|  |¡ | jrPtj}ntj}t |¡}	|D ](}
|
||ƒ}|sdqZt|ƒrudd„ |D ƒ | |¡ qZt d|f ¡ | |¡ qZt |	¡ |S )Nr   rg   r°   c                 S   s   g | ]
}t  d |f ¡‘qS )ú  adding '%s' to sources.)r   rS   )rm   r   r!   r!   r"   rn   ~  s    z.build_src.generate_sources.<locals>.<listcomp>r¼   )r   rs   r'   r   r³   r±   rK   rL   rM   r$   rP   Úmkpathr8   r   ÚINFOÚWARNÚset_thresholdry   rS   )r:   r§   Ú	extensionÚnew_sourcesÚfunc_sourcesr   r   r±   Ú	new_levelÚ	old_levelÚfuncr!   r!   r"   rª   X  s@   
ÿ



zbuild_src.generate_sourcesc                 C   s   |   |dg¡S )Nr¢   ©Úfilter_files©r:   r§   r!   r!   r"   r·   †  s   zbuild_src.filter_py_filesc                 C   s   |   |g d¢¡S )N)z.hz.hppz.incrÇ   rÉ   r!   r!   r"   r¬   ‰  s   zbuild_src.filter_h_filesc                 C   sH   g }g }|D ]}t j |¡\}}||v r| |¡ q| |¡ q||fS r*   )rK   rL   r†   rs   )r:   r§   ÚextsrÂ   r~   r   Úbasere   r!   r!   r"   rÈ   Œ  s   zbuild_src.filter_filesc              	   C   sn  g }t |ƒr|d  d¡}|d  d¡}n|j}|j}|D ]—}tj |¡\}}|dkr¯| jr5tj |¡}	n
t	| j
tj |¡ƒ}	|  |	¡ tj |	tj |¡¡}
| jsZt|g| |
ƒrt|ƒrjt d|
 ¡ t|ƒ}nt d|
 ¡ t|ƒ}t|
dƒ}| |¡ W d   ƒ n1 sŠw   Y  t|
ƒr©tj |
¡}||vr©t d| ¡ | |¡ | |
¡ q| |¡ q|S )	Nr   ÚdependsÚinclude_dirsz.srczfrom_template:> %szconv_template:> %sr   ú  adding '%s' to include_dirs.)r   r©   rÌ   rÍ   rK   rL   r†   r'   rƒ   r
   r$   r½   rM   r…   r%   r   Ú_f_pyf_ext_matchr   rS   Úprocess_f_fileÚprocess_c_filer   r   Ú_header_ext_matchrs   )r:   r§   rÁ   rÂ   rÌ   rÍ   r   rË   re   Ú
target_dirÚtarget_fileÚoutstrÚfidr   r!   r!   r"   r«   —  s>   

ÿ
zbuild_src.template_sourcesc           	      C   s`   g }|j  d¡d }|D ]!}tj |¡\}}|dkr(|  ||||¡}| |¡ q| |¡ q|S )z@Pyrex not supported; this remains for Cython support (see below)rg   r°   z.pyx)r±   rP   rK   rL   r†   Úgenerate_a_pyrex_sourcers   )	r:   r§   rÁ   rÂ   Úext_namer   rË   re   rÔ   r!   r!   r"   r¶   »  s   þzbuild_src.pyrex_sourcesc                 C   s   g S )zÄPyrex is not supported, but some projects monkeypatch this method.

        That allows compiling Cython code, see gh-6955.
        This method will remain here for compatibility reasons.
        r!   )r:   rË   rØ   r   rÁ   r!   r!   r"   r×   Ê  s   z!build_src.generate_a_pyrex_sourcec                 C   s   g }g }g }i }g }|j  d¡d }d}	|D ]¬}
tj |
¡\}}|dkr³| jr.tj |¡}n
t| jtj |¡ƒ}tj 	|
¡rYt
|
ƒ}||krOtd|
||f ƒ‚tj ||d ¡}nFt d|
 ¡ |}d}	tj ||d ¡}tj 	|¡sŸt d	||f ¡ tj |¡}tj ||d ¡}tj 	|¡s˜td
|f ƒ‚t d| ¡ | |¡ | |
¡ |||
< | |¡ qt|ƒr½| |
¡ q| |
¡ q|sÉ|sÉ|S |D ]}|  |¡ qË|j| j }| jjrô| jjD ]\}}||jv ró| | dg ¡¡ qát d| ¡ |rQt|ƒdkrtd|f ƒ‚|d }
||
 }tj |¡pd}|
g|j }| js.t||dƒrI|	sIt d|
 ¡ ddlm} |  |d||
g ¡ nqt d|
 ¡ nit!|ƒr[|d }n|j }tjj| jg| d¡d d…  Ž }tj ||d ¡}| |¡ ||j }| jst||dƒr³|	s³t d| ¡ |  |¡ ddlm} |  |dd|g d|g | ¡ nt d| ¡ tj 	|¡sÈt"d|f ƒ‚tj | j|¡}tj |d¡}tj |d¡}t d| ¡ | |¡ ||j#vrýt d| ¡ |j# |¡ |	s>dd l}tj |j$j%¡}tj |dd¡}tj |dd¡}t&||ƒs(t&||ƒr=|  tj |¡¡ |  '||¡ |  '||¡ ntj 	|¡sLtd|f ƒ‚tj 	|¡sZtd|f ƒ‚d D ]}tj ||| ¡}tj 	|¡rzt d| ¡ | |¡ q\|| S )!Nrg   r°   r   z.pyfú;mismatch of extension names: %s provides %r but expected %rzmodule.cz.  source %s does not exist: skipping f2py'ing.r   zd  target %s does not exist:
   Assuming %smodule.c was generated with "build_src --inplace" command.ú
%r missingú&   Yes! Using %r as up-to-date target.Úf2py_optionszf2py options: %szConly one .pyf file is allowed per extension module but got more: %rr   zf2py: %s)Úf2py2ez--build-dirz+  skipping '%s' f2py interface (up-to-date)z	f2py:> %sz--lowerz-mz3  skipping f2py fortran files for '%s' (up-to-date)z!f2py target file %r not generatedzfortranobject.czfortranobject.hr¼   rÎ   r>   zf2py target_c file %r not foundzf2py target_h file %r not found)z-f2pywrappers.fz-f2pywrappers2.f90)(r±   rP   rK   rL   r†   r'   rƒ   r
   r$   ÚisfileÚget_f2py_modulenamer   rM   r   ÚdebugrN   rS   rs   r	   r½   rÜ   r3   rC   rF   ry   r©   r£   rÌ   r%   r   Ú
numpy.f2pyrÝ   Úrun_mainr   r   rÍ   Úf2pyÚ__file__r   Ú	copy_file)r:   r§   rÁ   rÂ   rµ   Ú	f_sourcesÚf2py_targetsÚtarget_dirsrØ   Ú	skip_f2pyr   rË   re   rÓ   r±   rÔ   r   rÜ   r®   rÌ   rÝ   r   Útarget_cÚtarget_hÚnumpyÚsource_cÚsource_hÚname_extÚfilenamer!   r!   r"   rµ   Ò  s  ÿÿÿýÿ


€ÿÿÿÿ

ÿ

ÿ
ÿþþÿ
€
€zbuild_src.f2py_sourcesc              	   C   s€  g }g }i }g }g }d}d|j v rd}	d}
|j  d¡ n| jr$d}	d}
nd }	d}
d}|j d¡d }|D ]}tj |¡\}}|d	kr2| jrQtj 	|¡}| j
}nt| jtj 	|¡ƒ}|}tj |¡rÌt|ƒ}||d
d … kr|td|||d
d … f ƒ‚|	d u r‰t|ƒ}	|	dk}
n3t|ƒ}|d u r›t d||	f ¡ n!|	|kr¼t d|	||f ¡ |dkrµt d¡ d}
nt d| ¡ |
rÀd}tj |d||f ¡}nDt d| ¡ |d
d … }d
}t||ƒ}tj |¡st d||f ¡ tj 	|¡}t||ƒ}tj |¡s	td|f ƒ‚t d| ¡ | |¡ | |¡ | tj ||d ¡¡ | |¡ |d ||< q4| |¡ q4|s=|S |rD|| S |D ]}|  |¡ qF| jpV|  ¡ }|dg|j  }|
rf| d¡ |jD ]
}| d| ¡ qi|D ]E}|| }|g|j }| jst||dƒr³t dtj |¡|
r›dpœd |f ¡ |  || j  d|d||g ¡ qvt  d| ¡ qv|| S ) Nú.cz-c++úc++TFr   rg   r°   z.ir   rÙ   z>source %r does not define swig target, assuming %s swig targetz0expected %r but source %r defines %r swig targetzAresetting swig target to c++ (some targets may have .c extension)z$assuming that %r has c++ swig targetú.cppú	%s_wrap%sz.  source %s does not exist: skipping swig'ing.zi  target %s does not exist:
   Assuming %s_wrap.{c,cpp} was generated with "build_src --inplace" command.rÚ   rÛ   r¢   z-pythonz-Ir   z%s: %sz++Ú z-oz-outdirz+  skipping '%s' swig interface (up-to-date))!r5   Úremover6   r±   rP   rK   rL   r†   r'   rƒ   r³   r
   r$   rÞ   Úget_swig_modulenamer   Úget_swig_targetr   rN   rM   Ú_find_swig_targetrs   r½   r7   Ú	find_swigrÍ   rÌ   r%   r   rS   r…   Úspawnrà   )r:   r§   rÁ   rÂ   r´   Úswig_targetsrè   rº   Ú
target_extÚtypÚis_cppÚ	skip_swigrØ   r   rË   re   rÓ   Úpy_target_dirr±   Útyp2rÔ   r   r7   Úswig_cmdr   rÌ   r!   r!   r"   r´   \  sÒ   


ÿÿ
ÿÿ

ÿÿ
ý
ÿ




ÿÿ
ÿ
ÿzbuild_src.swig_sourcesN)Ú__name__Ú
__module__Ú__qualname__ÚdescriptionÚuser_optionsÚboolean_optionsÚhelp_optionsr;   rY   r[   rZ   rb   r“   rc   r^   r_   ra   rª   r·   r¬   rÈ   r«   r¶   r×   rµ   r´   r!   r!   r!   r"   r$   &   s2    :$(.$ r$   z!.*\.(f90|f95|f77|for|ftn|f|pyf)\Zz.*\.(inc|h|hpp)\ZzQ\s*%module\s*(.*\(\s*package\s*=\s*"(?P<package>[\w_]+)".*\)|)\s*(?P<name>[\w_]+)z-\*-\s*c\s*-\*-z-\*-\s*c\+\+\s*-\*-c                 C   sb   t | ƒ#}d }| ¡ }t|ƒrd}t|ƒrd}W d   ƒ |S W d   ƒ |S 1 s*w   Y  |S )Nrò   rV   )r   ÚreadlineÚ_has_cpp_headerÚ_has_c_header)r   r&   ÚresultÚliner!   r!   r"   rø   ×  s   

úþ
ûùrø   c                 C   sf   t | ƒ%}d }|D ]}t|ƒ}|r| d¡} n	q	W d   ƒ |S W d   ƒ |S 1 s,w   Y  |S ©Nr±   )r   Ú_swig_module_name_matchr   )r   r&   r±   r  r    r!   r!   r"   r÷   á  s    

þþ
þÿ
úùr÷   c                 C   s6   dD ]}t j | d||f ¡}t j |¡r |S q|S )N)ró   rñ   rô   )rK   rL   rM   rÞ   )rÓ   r±   re   r   r!   r!   r"   rù   ë  s   þrù   z%\s*python\s*module\s*(?P<name>[\w_]+)z4\s*python\s*module\s*(?P<name>[\w_]*?__user__[\w_]*)c                 C   sp   d }t | ƒ(}|D ]}t|ƒ}|rt|ƒrq	| d¡} n	q	W d   ƒ |S W d   ƒ |S 1 s1w   Y  |S r  )r   Ú_f2py_module_name_matchÚ_f2py_user_module_name_matchr   )r   r±   r&   r  r    r!   r!   r"   rß   ù  s$   

üþ
ÿÿ
ùørß   ).Ú__doc__rK   r   rI   rO   r—   Údistutils.commandr   Údistutils.dep_utilr   r   Údistutils.utilr   Údistutils.errorsr   r   Únumpy.distutilsr   rp   r	   r
   r   r   r   Únumpy.distutils.from_templater   rÐ   Únumpy.distutils.conv_templaterÑ   r#   r$   r   ÚIÚmatchrÏ   rÒ   r  r   r  r  rø   r÷   rù   r  r  rß   r!   r!   r!   r"   Ú<module>   sX         -ÿÿ

	ÿÿÿÿ