o
    Df,                     @   sd  d dl Z d dlZd dlZd dlmZmZ d dlmZ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mZ d dlmZmZmZ d dlmZ d d	lmZmZ d d
lmZ ze
jddkrfejddd W n e
jjyr   Y nw d#ddZ da!t!a"dZ#dd Z$e$ Z%G dd deZ&G dd de&Z'G dd de&Z(G dd de&Z)G dd  d Z*d!d" Z+dS )$    N)mkstempmkdtemp)PopenPIPE)DistutilsError)assert_assert_equalassert_raises)	ccompilercustomized_ccompiler)system_infoConfigParsermkl_info)AliasedOptionError)default_lib_dirsdefault_include_dirs)_shell_utils
setuptools60zsetuptools is too newT)allow_module_level   c                 C   s   t ttd|  t}| S )zg
    notfound_action:
      0 - do nothing
      1 - display warning message
      2 - raise error
    )temp1temp2duplicate_options)	Temp1Info	Temp2InfoDuplicateOptionInfogetlower_system_info)namenotfound_actioncl r#   _/home/ubuntu/webapp/venv/lib/python3.10/site-packages/numpy/distutils/tests/test_system_info.py	get_class   s   r%   a  
[ALL]
library_dirs = {dir1:s}{pathsep:s}{dir2:s}
libraries = {lib1:s},{lib2:s}
extra_compile_args = -I/fake/directory -I"/path with/spaces" -Os
runtime_library_dirs = {dir1:s}

[temp1]
library_dirs = {dir1:s}
libraries = {lib1:s}
runtime_library_dirs = {dir1:s}

[temp2]
library_dirs = {dir2:s}
libraries = {lib2:s}
extra_link_args = -Wl,-rpath={lib2_escaped:s}
rpath = {dir2:s}

[duplicate_options]
mylib_libs = {lib1:s}
libraries = {lib2:s}
z
/* This file is generated from numpy/distutils/testing/test_system_info.py */
#include<stdio.h>
void foo(void) {
   printf("Hello foo");
}
void bar(void) {
   printf("Hello bar");
}
c                  C   s   t  } z| j}W n$ ty,   z	| js|   W n ttfy%   Y Y dS w | jg}Y nw zt|t	t	d}|j
  |j  |  W dS  tyO   Y dS w )z? Return True if there appears to be an executable compiler
    F)stdoutstderrT)r   compilerAttributeErrorinitialized
initializer   
ValueErrorccr   r   r&   closer'   waitOSError)r(   cmdpr#   r#   r$   have_compilerK   s,   



r3   c                   @   s$   e Zd ZeedfddZdd ZdS )r   r   c              	   C   s2   i | j _g | _ddddddddd}t|| _d S )N 0)library_dirsinclude_dirsruntime_library_dirsrpathsrc_dirssearch_static_firstextra_compile_argsextra_link_args)	__class__infolocal_prefixesr   cp)selfr   r   	verbositydefaultsr#   r#   r$   __init__g   s   z_system_info.__init__c                 C   s   ||d}|S )z-Override _check_libs to return with all dirs )	librariesr6   r#   )rB   lib_dirslibsopt_libsextsr?   r#   r#   r$   _check_libsz   s   
z_system_info._check_libsN)__name__
__module____qualname__r   r   rE   rK   r#   r#   r#   r$   r   e   s    
r   c                   @      e Zd ZdZdZdS )r   For testing purposesr   NrL   rM   rN   __doc__sectionr#   r#   r#   r$   r          r   c                   @   rO   )r   rP   r   NrQ   r#   r#   r#   r$   r      rT   r   c                   @   rO   )r   rP   r   NrQ   r#   r#   r#   r$   r      rT   r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
je dddd Ze	j
je dde	j
jdee v dddd Zde  dg v Ze	j
jedddd ZdS )TestSystemInfoReadingc                 C   s  t  | _tj| jd| _tj| jd| _t  | _tj| jd| _tj| jd| _	t
jdi | j| j| j| j	tjtj| j	gdat \}| _t| t| jd}|t W d   n1 sgw   Y  t| jd}|t W d   n1 sw   Y  t| jd}|t W d   n1 sw   Y  dd	 }|td
| j| _|td| j| _|td| j| _|td| j| _dS )z Create the libraries zfoo.cz	libfoo.sozbar.cz	libbar.so)dir1lib1dir2lib2pathseplib2_escapedwNc                 S   s   |g| _ |   | S N)filesparse_config_files)csite_cfgr#   r#   r$   site_and_parse   s   z:TestSystemInfoReading.setup_method.<locals>.site_and_parsedefaultr   r   r   r#   )r   _dir1ospathjoin_src1_lib1_dir2_src2_lib2simple_siteformatrZ   r   NativeParserra   r   _sitecfgr.   openwritefakelib_c_textr%   	c_defaultc_temp1c_temp2c_dup_options)rB   fdrb   r#   r#   r$   setup_method   s@   
	

z"TestSystemInfoReading.setup_methodc                 C   sp   zt | j W n	 ty   Y nw zt | j W n	 ty#   Y nw z	t| j W d S  ty7   Y d S w r]   )shutilrmtreerd   	Exceptionrj   re   removerp   )rB   r#   r#   r$   teardown_method   s   z%TestSystemInfoReading.teardown_methodc                 C   sb   | j }t| | j| jg t| | j| jg t| | jg |	 }t|d g d d S )Nr<   )z-I/fake/directoryz-I/path with/spacesz-Os)
rt   r   get_lib_dirsrd   rj   get_librariesri   rl   get_runtime_lib_dirscalc_extra_inforB   tsiextrar#   r#   r$   test_all   s   zTestSystemInfoReading.test_allc                 C   s@   | j }t| | jg t| | jg t| | jg d S r]   )ru   r   r   rd   r   ri   r   rB   r   r#   r#   r$   
test_temp1   s   z TestSystemInfoReading.test_temp1c                 C   sb   | j }t| | jg t| | jg t|jdd| jg | }t|d d| j g d S )Nr9   )keyr=   z-Wl,-rpath=)rv   r   r   rj   r   rl   r   r   r   r#   r#   r$   
test_temp2   s   z TestSystemInfoReading.test_temp2c                 C   sN   | j }tt|jdd t|d| jg| jg t|d| jg| jg d S )N
mylib_libsrF   )rw   r	   r   get_option_singler   get_libsri   rl   r   r#   r#   r$   test_duplicate_options   s   z,TestSystemInfoReading.test_duplicate_optionszMissing compiler)reasonc              	   C   s   t  }t }z4t| j |jtj| jg| jd t	tj
| jddp2tj
| jdd W t| d S t| w )N)
output_dir.c.oz.obj)r   re   getcwdchdirrd   compilerf   basenamerh   r   isfilereplace)rB   r`   previousDirr#   r#   r$   test_compile1   s   z#TestSystemInfoReading.test_compile1msvczFails with MSVC compiler c              	   C   s   | j }t }| d }t }z*t| j |jtj	| j
g| j|d ttj| j
dd W t| d S t| w )Nr=   )r   extra_postargsr   r   )rv   r   r   re   r   r   rj   r   rf   r   rk   r   r   r   )rB   r   r`   r=   r   r#   r#   r$   test_compile2   s   z#TestSystemInfoReading.test_compile2mkl_rtrF   zD`[DEFAULT]` override doesn't work if numpy is built with MKL supportc              	   C   s  t  }t j| jd}t| j| zt | j t	 }|j
d d t j}| |ks0J t|}| ddd}W d    n1 sHw   Y  t|d}|| W d    n1 sbw   Y  t	 }| |ksrJ t|}| ddd}W d    n1 sw   Y  t|d}|| W d    n1 sw   Y  t	 }| |ksJ W t | d S t | w )	Nzsite.cfgALLr6   z[ALL]z[mkl]r   r\   z	[DEFAULT])re   r   rf   rg   rd   rz   copyrp   r   r   rA   splitrZ   r   rq   readr   rr   )rB   r   cfgr?   rG   fidmkldfltr#   r#   r$   test_overrides  s2   

z$TestSystemInfoReading.test_overridesN)rL   rM   rN   ry   r~   r   r   r   r   pytestmarkskipifHAVE_COMPILERr   reprr
   new_compilerr   r   calc_libraries_infor   HAS_MKLxfailr   r#   r#   r#   r$   rU      s"    )	

rU   c                 C   s|  ddl m} d}td}| |d |||\}}t|dks!J |tdks)J t|dks1J | |d	 |||\}}t|dksFJ t|dksNJ d
D ]*}| || d |||\}}t|dksjJ |tdksrJ t|dkszJ qPtt | |d ||| W d    n1 sw   Y  tt | |d ||| W d    d S 1 sw   Y  d S )Nr   )_parse_env_order#NPY_TESTS_DISTUTILS_PARSE_ENV_ORDERabcdefzb,i,e,f   befr   r4   z^!zb,i,e   acdfzb,^e,iz!b,^e,i)numpy.distutils.system_infor   listsetenvlenr   raisesr,   )monkeypatchr   env
base_orderorderunknownprefixr#   r#   r$   test_distutils_parse_env_order/  s4   "r   )r   ),re   rz   r   tempfiler   r   
subprocessr   r   importlib.metadata	importlibdistutils.errorsr   numpy.testingr   r   r	   numpy.distutilsr
   r   r   r   r   r   r   r   r   r   metadataversionskipPackageNotFoundErrorr%   rm   ra   rs   r3   r   r   r   r   r   rU   r   r#   r#   r#   r$   <module>   sB    
 "