U
    SA{i«Í  ã                   @   sj  d dl Z d dlZd dl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 d dlmZ d dlmZ d dlmZ d dlT e j dd	¡d
kZes¢edƒ‚e j dd
¡d
kZeoºeZe j dd
¡d	kZG d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$d.d)d*„Z%e&d+k�rfd d,l'm(Z( e(e%d-� dS )/é    N)Újoin)Úlog)Únewer)Úget_config_var)Únpy_load_module)Ú*ÚNPY_RELAXED_STRIDES_CHECKINGÚ1Ú0z}Support for NPY_RELAXED_STRIDES_CHECKING=0 has been remove as of NumPy 1.23.  This error will eventually be removed entirely.ÚNPY_RELAXED_STRIDES_DEBUGÚNPY_DISABLE_SVMLc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚCallOnceOnlyc                 C   s   d | _ d | _d | _d S ©N)Ú_check_typesÚ_check_ieee_macrosÚ_check_complex)Úself© r   ú4/tmp/pip-unpacked-wheel-m6chaliv/numpy/core/setup.pyÚ__init__/   s    zCallOnceOnly.__init__c                 O   s8   | j d kr"t||Ž}t |¡| _ nt t | j ¡¡}|S r   )r   Úcheck_typesÚpickleÚdumpsÚcopyÚdeepcopyÚloads©r   ÚaÚkwÚoutr   r   r   r   4   s
    

zCallOnceOnly.check_typesc                 O   s8   | j d kr"t||Ž}t |¡| _ nt t | j ¡¡}|S r   )r   Úcheck_ieee_macrosr   r   r   r   r   r   r   r   r   r    <   s
    

zCallOnceOnly.check_ieee_macrosc                 O   s8   | j d kr"t||Ž}t |¡| _ nt t | j ¡¡}|S r   )r   Úcheck_complexr   r   r   r   r   r   r   r   r   r!   D   s
    

zCallOnceOnly.check_complexN)Ú__name__Ú
__module__Ú__qualname__r   r   r    r!   r   r   r   r   r   .   s   r   c                  C   s*   t rdS t ¡ } d| ko(d| ko(tjdkS )zZSVML library is supported only on x86_64 architecture and currently
    only on linux
    FÚx86_64Úlinuxl        )r   Ú	sysconfigÚget_platformÚsysÚmaxsize)Úplatformr   r   r   Úcan_link_svmlL   s    ÿþr,   c                 C   s   t j | d ¡stdƒ‚dS )Nz
/README.mdzHMissing `SVML` submodule! Run `git submodule update --init` to fix this.T)ÚosÚpathÚexistsÚRuntimeError)Zsvmlpathr   r   r   Úcheck_svml_submoduleW   s    r1   c                   C   s&   t jdkrtj t jd¡S tdƒS dS )z return path where libpython* is.Úwin32ÚlibsÚLIBDIRN)r)   r+   r-   r.   r   Úprefixr   r   r   r   r   Úpythonlib_dir]   s    
r6   c                   C   s
   t jdkS )zTReturn True if the NPY_NO_SIGNAL symbol must be defined in configuration
    header.r2   )r)   r+   r   r   r   r   Úis_npy_no_signald   s    r7   c                   C   s
   dt jkS )zxReturn True if the NPY_NO_SMP symbol must be defined in public
    header (when SMP support cannot be reliably enabled).Z	NPY_NOSMP)r-   Úenvironr   r   r   r   Úis_npy_no_smpi   s    	r9   c                 C   sX   ddl m} |ƒ }td|tjtjf ƒ |dkr:|  d¡ |dksJ|dkrT|  d¡ d S )Nr   )Úget_build_architecturez3BUILD_ARCHITECTURE: %r, os.name=%r, sys.platform=%rZAMD64ZDISTUTILS_USE_SDKZIntelZFORCE_NO_LONG_DOUBLE_FORMATTING)Únumpy.distutils.misc_utilr:   Úprintr-   Únamer)   r+   Úappend)Zdeflistr:   r   r   r   r   Úwin32_checkst   s    ÿ
r?   c                    sü  ddgf‡‡fdd„	‰ dgf‡‡‡fdd„	‰dgf‡ ‡‡fdd„	}ˆt ƒsZtd	tt ƒ ƒ‚tD ]8}ˆjt|ƒd
dgd�r^|tkrŒt |¡ q^t |¡ q^|tƒ |tdgd� |t	dgd� t
D ]B}ˆjddd|gd�rÀ| dd¡ tjjd¡}ˆ t|ƒdf¡ qÀdddg}|t|d��s0d|d< |t|d� tD ]Â}d }	t|ƒdk�rl|d |d t|d ƒ  }}
}ndt|ƒdk�r¦|d |d |d gt|d ƒf\}}
}	}n*|d |d |d gt|d ƒf\}}
}	}ˆj|dd|
|	d��r4ˆ |df¡ �q4tD ]t\}}ˆ ||¡�rüˆ t|ƒdf¡ |dk�rütjdk�rüˆ ¡ �rüˆ dd ¡�sü|j d!d"„ td#d$ƒD ƒ¡ �qütD ]2\}}}}ˆ ||||¡�rvˆ t|ƒdf¡ �qvtD ]8}ˆ  |¡�r®| d%d¡ d&d¡}ˆ t|ƒdf¡ �q®|t!ƒ |t"ƒ d S )'NFzfeature_detection_math.hc                    s   ˆ j | ˆ|dt|  |d�S )NT©Ú	librariesÚdeclÚcallÚ	call_argsÚheaders)Ú
check_funcÚFUNC_CALL_ARGS)Ú	func_namerB   rE   )ÚconfigÚmathlibsr   r   rF   …   s    úz+check_math_capabilities.<locals>.check_funcc                    sV   t dd„ | D ƒƒ}t dd„ | D ƒƒ}ˆ j| ˆd|||d�}|rRˆ dd„ | D ƒ¡ |S )Nc                 S   s   g | ]}|d f‘qS ©Tr   ©Ú.0Úfr   r   r   Ú
<listcomp>”   s     zEcheck_math_capabilities.<locals>.check_funcs_once.<locals>.<listcomp>c                 S   s   g | ]}|t | f‘qS r   )rG   rL   r   r   r   rO   •   s     Fr@   c                 S   s   g | ]}t |ƒd f‘qS ©é   ©Ú	fname2defrL   r   r   r   rO   Ÿ   s     )ÚdictÚcheck_funcs_onceÚextend)Ú
funcs_namerE   rC   rD   Úst)rI   rJ   Úmoredefsr   r   rU   “   s    úz1check_math_capabilities.<locals>.check_funcs_oncec                    s@   ˆ| |d�s8| D ]"}ˆ ||d�rˆ  t|ƒdf¡ qdS dS d S )N©rE   rQ   r   ©r>   rS   )rW   rE   rN   )rF   rU   rY   r   r   Úcheck_funcs¢   s    z,check_math_capabilities.<locals>.check_funcszNOne of the required function to build numpy is not available (the list is %s).úPython.húmath.hrZ   zfeature_detection_stdio.hzfeature_detection_misc.hÚ )rB   rC   rE   Ú.Ú_rQ   zstdlib.hz	xlocale.hzfeature_detection_locale.hzlocale.hé   r   é   T)rB   rC   rD   rE   Zattribute_target_avx512f)r2   Úcygwiné   é   c                 S   s   g | ]}d | ‘qS )z-ffixed-xmm%sr   )rM   Únr   r   r   rO   ï   s     z+check_math_capabilities.<locals>.<listcomp>é   é    ú(ú))#ZMANDATORY_FUNCSÚSystemErrorÚstrZOPTIONAL_STDFUNCS_MAYBEÚ
check_declrS   ZOPTIONAL_STDFUNCSÚremoveZOPTIONAL_FILE_FUNCSZOPTIONAL_MISC_FUNCSZOPTIONAL_HEADERSrF   Úreplacer-   r.   Úsepr>   ZOPTIONAL_LOCALE_FUNCSZOPTIONAL_INTRINSICSÚlenZOPTIONAL_FUNCTION_ATTRIBUTESÚcheck_gcc_function_attributer)   r+   Zcheck_compiler_gccZcheck_gcc_version_at_leastÚextra_compile_argsrV   ÚrangeZ,OPTIONAL_FUNCTION_ATTRIBUTES_WITH_INTRINSICSZ,check_gcc_function_attribute_with_intrinsicsZOPTIONAL_VARIABLE_ATTRIBUTESZcheck_gcc_variable_attributeZC99_FUNCS_SINGLEZC99_FUNCS_EXTENDED)rI   ÚextrY   rJ   r\   rN   ÚhZlocale_headersÚtuprE   ÚargsÚmÚdecÚfnÚcodeÚheaderr   )rF   rU   rI   rJ   rY   r   Úcheck_math_capabilities„   s€    ýÿ

ÿý",*ÿ
ÿ
þÿ
ÿr   c                    sÐ   g ‰g }z,t  ¡ d dkr2tjddd� ˆ|fW S W n tk
rH   Y nX ˆ  d¡}|rÈˆ d¡ | d¡ tD ].}ˆ j|dgd	�}|rp| d
t	|ƒ df¡ qp‡ ‡‡fdd„}|dƒ |dƒ |dƒ ˆ|fS )Nr   ZInterixz+Disabling broken complex support. See #1365rb   )Ú
stacklevelz	complex.h)ZHAVE_COMPLEX_HrQ   )ZNPY_USE_C99_COMPLEXrQ   rZ   zNPY_HAVE_%srQ   c                    s~   ‡ fdd„t D ƒ}tdd„ |D ƒƒ}ˆj|||ˆd�sf|D ](}ˆj|ddˆd�r:ˆ t|ƒdf¡ q:nˆ dd„ |D ƒ¡ d S )Nc                    s   g | ]}|ˆ  ‘qS r   r   rL   ©Úprecr   r   rO     s     z5check_complex.<locals>.check_prec.<locals>.<listcomp>c                 S   s   g | ]}|d f‘qS rK   r   rL   r   r   r   rO     s     )rC   rB   rA   TrQ   c                 S   s   g | ]}t |ƒd f‘qS rP   rR   rL   r   r   r   rO      s     )ZC99_COMPLEX_FUNCSrT   rU   rF   r>   rS   rV   )r‚   ÚflistrB   rN   ©rI   rJ   Úprivr�   r   Ú
check_prec  s    
ÿ
ÿz!check_complex.<locals>.check_precr_   rN   Úl)
r-   ÚunameÚwarningsÚwarnÚ	ExceptionÚcheck_headerr>   ZC99_COMPLEX_TYPESZ
check_typeZtype2def)rI   rJ   ÚpubrX   Útr†   r   r„   r   r!   ÿ   s*    


r!   c                    s¶   g ‰ g ‰g }‡ ‡fdd„}ddddg}|D ]Z}t d| ƒ}| j|dd	gd
�}|rz| j|dd	gd
�r„ˆ dt d| ƒ ¡ q*| |¡ q*|D ]"}| j|dd	gd
�}|rŠ||ƒ qŠˆ ˆfS )Nc                    s,   ˆ   td|  ƒ¡ ˆ  dtd|  ƒ ¡ d S )Núdecl_%súNPY_%sr[   )rN   ©r…   r�   r   r   Ú	_add_decl.  s    z$check_ieee_macros.<locals>._add_declÚisnanÚisinfZsignbitÚisfiniter�   r]   r^   rZ   r�   )rS   rn   Zcheck_macro_truer>   )rI   Úmacrosr’   Z_macrosrN   Z	py_symbolÚalready_declaredrX   r   r‘   r   r    (  s*    ÿÿ
r    c                 C   s|  g }g }dgdgddgdgdgdddgddgdgdgddgdœ
}|   d¡}|snd}d	tjkr`d
}td |¡ƒ‚|   d¡}|r�| d¡ | d¡ |   d¡}|r²| d¡ | d¡ dD ]„}	| jdt|	ƒ dgd�}|rö| dt|	ƒ dt|	ƒ f¡ q¶| j|	||	 d�}|dk�r.| dt|	ƒ d| f¡ q¶td|	 ƒ‚q¶dD ]æ}	| jdt|	ƒ dgd�}
| j|	||	 d�}|dk�r¾| dt|	ƒ d| f¡ |
�sÊ|	dk�sÊ| dt|	ƒ d| f¡ ntd|	 ƒ‚d|	|	f }| j|dd„ ||	 D ƒd�}|dk�r| dt|	ƒ d| f¡ ntd| ƒ‚�q@d D ]n}	| j|	dgt	ƒ g||	 d!�}|dk�rŒ| dt|	ƒ d| f¡ | dt|	ƒ d| f¡ ntd|	 ƒ‚�q,| jd"dgd��rZ| jd"dgt	ƒ g|d" d!�}|dk�r
| dtd"ƒ d| f¡ | dtd"ƒ d| f¡ ntdd" ƒ‚| jd#|d# d�}|dk�rN| dtd#ƒ d| f¡ ntdd# ƒ‚| jd$dgd��stt
d%ƒ‚||fS )&Nrb   rf   re   rh   é   )
ÚshortÚintÚlongÚfloatÚdoubleúlong doubleÚPy_intptr_tÚPY_LONG_LONGú	long longÚoff_tr]   ÚpythonZ__pypy__ÚpypyzICannot compile 'Python.h'. Perhaps you need to install {0}-dev|{0}-devel.zendian.h)ÚHAVE_ENDIAN_HrQ   )ZNPY_HAVE_ENDIAN_HrQ   zsys/endian.h)ÚHAVE_SYS_ENDIAN_HrQ   )ZNPY_HAVE_SYS_ENDIAN_HrQ   )r™   rš   r›   z	SIZEOF_%srZ   zNPY_SIZEOF_%s)Úexpectedr   z%dzChecking sizeof (%s) failed !)rœ   r�   rž   rž   zstruct {%s __x; %s __y;}c                 S   s   g | ]}d | ‘qS )rb   r   )rM   Úxr   r   r   rO   ‡  s     zcheck_types.<locals>.<listcomp>zNPY_SIZEOF_COMPLEX_%s)rŸ   r¢   )rE   Úlibrary_dirsr§   r    r¡   ZCHAR_BITzCConfig wo CHAR_BIT is not supported, please contact the maintainers)rŒ   r)   Úbuiltin_module_namesrl   Úformatr>   rn   Zsym2defZcheck_type_sizer6   r0   )Ú
config_cmdrv   Ú	build_dirZprivate_definesZpublic_definesr§   Úresultr£   ÚresÚtyper—   Zcomplex_defr   r   r   r   M  s¦        ý

ÿÿ





 
ÿ
ÿ

þ

þ
ÿ
ÿr   c                 C   sf   g }g dgdgg}t j d¡}|r4| d| d¡¡ |D ] }| jd|ddd	d
�r8|} qbq8tdƒ‚|S )Nrz   ZcpmlÚMATHLIBr   ú,r   r
   zdouble log(double);T)rA   rD   rB   rC   zKmath library missing; rerun setup.py after setting the MATHLIB env variable)r-   r8   ÚgetÚinsertÚsplitrF   r0   )r¬   rJ   Zmathlibs_choicesZmathlibr3   r   r   r   Úcheck_mathlib²  s&    ûÿr¶   c                 C   s   d}|   |d¡r|S dS dS )zSReturn the define value to use for NPY_VISIBILITY_HIDDEN (may be empty
    string).z%__attribute__((visibility("hidden")))Zhidemer_   N)rs   )rI   Zhider   r   r   Úvisibility_defineË  s    r·   r_   c               P      s  ddl m}m‰m} ddlm}m}m} ddlm	‰  ddl
m} |d| |ƒ‰ˆj}t|dƒ‰|rlt dt¡ ttˆƒ tˆd	ƒ‰ˆˆjd
ƒ}	|d |	 d¡¡ˆƒ‰d‰tƒ ‰‡‡‡fdd„}
‡‡‡fdd„}‡‡‡fdd„}|dƒ}|dƒ}ˆ t|ddƒ¡ ˆ t|dƒ¡ ˆ t|ƒ¡ ˆ d¡ ˆ tddƒ¡ ˆ tddƒ¡ ˆ tddƒ¡ ˆ tddƒ¡ ˆ tddƒ¡ ˆ dg¡ ˆ dg¡ tjd d… d k�r°ˆ d!g¡ n$ˆ d"g¡ ˆ d#g¡ ˆ d$g¡ ˆj ˆ d%¡¡ tddd&ƒtd%d'd(ƒtˆd)ƒg}td*tj j!fd+gƒ‰‡ ‡‡fd,d-„}tddd.ƒtddd/ƒtddd0ƒtddd1ƒtddd2ƒg}d3d4„ }ˆj"d||g d5g |gd6œd7� ˆ #d8d9ˆ¡ ˆ #d:d9ˆ¡ ˆj$d;tddd<ƒtddd=ƒtddd>ƒtddd?ƒgtddd@ƒtdddAƒtdddBƒtdddCƒgdgdD� tdddEdFƒtdddGƒtdddHƒtdddIƒtdddJƒtddd@ƒtdddAƒtdddKƒtdddLƒtdddMƒtdddNƒtdddCƒtdddOƒtdddBƒtdddPƒtdddQƒtdddRƒtdddSƒtdddTƒtdddUƒtdddVƒtdddWƒtdddXdYƒg}tdddZƒtddd=ƒtddd>ƒtddd?ƒtddd[ƒtdddRƒtddd\ƒtddd]ƒtddd^ƒtddd_ƒg
}tj% &d`da¡dak�r~|dbdcƒ}n
|dddƒ}|�oœde| &dfg ¡k}|�rÈ|}| tdddgƒtdddhƒg¡ ni }tdddiƒtdddjƒtdddkƒtdddlƒtdddmƒtdddnƒtdddoƒtdddpƒtdddqƒtdddrƒtdddsƒtdddtƒtddduƒtdddvƒtdddwƒtdddxƒtdddyƒtdddzƒtddd{ƒtddd|ƒtddd}ƒtddd~ƒtdddƒtddd€ƒtddd�ƒtddd‚ƒtdddƒƒtddd„ƒtddd…ƒtddd†ƒtddd‡ƒtdddˆƒtddd‰ƒtdddŠƒtddd‹ƒtdddŒƒtddd�ƒtdddŽƒtddd�d�ƒtd%d'djƒtd%d'd‘ƒtd%d'd’ƒtd%d'd“ƒtd%d'd”ƒtd%d'd•ƒtd%d'd–ƒtd%d'd—ƒtd%d'd˜ƒtd%d'd™ƒtd%d'dšƒtd%d'd›ƒtd%d'dœƒtd%d'd�ƒtd%d'džƒtd%d'dŸƒtd%d'd ƒg8| }tddd¡ƒtddd¢ƒtddd£ƒtdddkƒtddd¤ƒtddd¥ƒtddd¦ƒtddd§ƒtddd¨ƒtddd©ƒtdddªƒtddd«ƒtddd¬ƒtddd­ƒtddd®ƒtddd¯ƒtddd°ƒtddd±ƒtddd²ƒtddd³ƒtddd´ƒtdddµƒtddd¶ƒtddd·ƒtddd¸ƒtddd¹ƒtdddºƒtddd»ƒtddd¼ƒtddd½ƒtddd¾ƒtddd¿ƒtdddÀƒtdddÁƒtdddÂƒtdddÃƒtdddÄƒtdddÅƒtdddÆƒtdddÇƒtdddÈƒtdddÉƒtdddÊƒtdddËƒtdddÌƒtdddÍƒtdddÎƒtdddÏƒtdddÐƒtdddÑƒtdddÒƒtdddÓƒtdddÔƒtdddÕƒtdddÖƒtddd×ƒtdddØƒtdddÙƒtdddÚƒtdddÛƒtdddÜƒtdddÝƒtdddÞƒtdddßƒtdddàƒtdddáƒtdddâƒtdddãƒtddd�däƒtddd�dåƒtddd�dæƒtddd�dçƒtddd�dèƒtddd�déƒtddd�dêƒtddd�dëƒgL}‡‡‡fdìdí„}‡‡‡‡fdîdï„}tdddðƒtdddñƒtdddòƒtdddóƒtdddôƒtdddõƒtdddöƒtddd÷ƒtdddøƒtdddùƒtdddúƒtdddûƒtdddüƒtdddýƒtdddþƒtdddÿƒtdd�d ƒtdd�dƒtdd�dƒtdd�dƒtdd�dƒtdd�dƒtdd�dƒtdd�dƒtdd�dƒtdd�d	ƒtdd�d
ƒtdd�dƒtdd�dƒg}ˆtd%d'd—ƒtd%d'd˜ƒtdddqƒtddd†ƒtdddRƒtdddóƒtdd�dƒtˆ�dƒtˆ�dƒg
}td'ddd�dƒ}g }�d‰	t'ƒ �r:t(|ƒ�r:t)j)|�d �d�d�}‡	f�d�d„|D ƒ}| *¡  ˆj$�d�d|| | |
||tˆ�dƒt�dƒ|||g || | | dg||ˆ �d� ˆj$�dtdd�dƒtdd�dƒtddd_ƒg�d� ˆj$�d tdd�d!ƒg�d� ˆj$�d"tdd�d#ƒg�d� ˆj$�d$tdd�d%ƒg�d� ˆj$dtddd_ƒtdd�d&ƒtdd�d'ƒtdd�d(ƒtdd�d)ƒgtdddWƒtdddXdYƒtdd�d*ƒtdd�d'ƒtdd�d(ƒtdd�d+ƒtdd�d,ƒtdd�d-ƒtdd�d.ƒg	�d/� ˆ +�d0¡ ˆ �d1¡ ˆ �d2¡ ˆ ,�d3¡ ˆ -¡  ˆS (4  Nr   )ÚConfigurationÚdot_joinÚexec_mod_from_location)Úget_infoÚblas_opt_infoÚlapack_opt_info)ÚNPY_CXX_FLAGS)ÚreleaseÚcoreZcode_generatorsÚerrorzgenerate_umath.pyÚgenerate_umathra   r`   zinclude/numpyc              	      sî  t |ˆdƒ}tj |¡}tj |¡s.t |¡ tt|ƒ�rPˆ ¡ }t	 
d|¡ ˆ  || |¡\}}t|ƒ}| dd  |¡f¡ t|| ||ƒ | ˆ  |¡d ¡ | ˆ  ||¡d ¡ tƒ rÄ| d¡ tjdksØtjdkràt|ƒ | d	| ¡ f¡ | ¡ }tƒ �r| d
¡ t�r| d¡ n
| d¡ t|ƒ}	| d|	 df¡ t|ƒ�rt| d¡ | d¡ | d¡ | d¡ t|dƒ��}
|D ]<}t|tƒ�r¤|
  d| ¡ n|
  d|d |d f ¡ �q„|
  d¡ |dk�râ|
  d¡ n|
  d| ¡ |
  d¡ |
  t! "d¡¡ W 5 Q R X t	 
d| ¡ t|ƒ�}
t	 
|
 #¡ ¡ W 5 Q R X t	 
d¡ n^g }t|ƒ�L}
|
D ]@}d}| $|¡�rb|t%|ƒd …  &¡ }|�rb| | 'd¡¡ �qbW 5 Q R X t(| dƒ�rÆ| j) |¡ tj |¡}|ˆj*k�rêˆj* |¡ |S ) Nzconfig.húGenerating %sr±   r²   r   Z__NPY_PRIVATE_NO_SIGNALr2   ÚntZNPY_RESTRICT)ZNPY_CAN_LINK_SVMLrQ   ©r   rQ   )r   r   zHAVE_LDOUBLE_%srQ   Z$NPY_DO_NOT_OPTIMIZE_LONG_right_shiftZ%NPY_DO_NOT_OPTIMIZE_ULONG_right_shiftZ(NPY_DO_NOT_OPTIMIZE_LONGLONG_right_shiftZ)NPY_DO_NOT_OPTIMIZE_ULONGLONG_right_shiftÚwú#define %s
ú#define %s %s
z#ifndef __cplusplus
Úinlinez/* #undef inline */
z#define inline %s
z#endif
zÔ
                    #ifndef NUMPY_CORE_SRC_COMMON_NPY_CONFIG_H_
                    #error config.h should never be included directly, include npy_config.h instead
                    #endif
                    úFile: %sÚEOFz#define MATHLIBrA   )+r   r-   r.   Údirnamer/   Úmakedirsr   Ú__file__Úget_config_cmdr   Úinfor   r¶   r>   r   rV   r    r!   r7   r)   r+   r=   r?   Zcheck_restrictZcheck_inliner,   r   Z check_long_double_representationZ-check_for_right_shift_internal_compiler_errorÚopenÚ
isinstancerm   ÚwriteÚtextwrapÚdedentÚreadÚ
startswithrr   Ústriprµ   ÚhasattrrA   Únumpy_include_dirs)rv   r­   ÚtargetÚdr¬   rY   ÚignoredrJ   rÉ   ÚrepÚtarget_fÚlineÚsÚvalueZincl_dir©ÚcocacherI   Ú
header_dirr   r   Úgenerate_config_hð  sx    













z(configuration.<locals>.generate_config_hc           
   	      sú  ˆ  t|ddƒ¡ ˆ  t|ddƒ¡ t|ˆdƒ}tj |¡}tj |¡sRt |¡ tt|ƒ�rèˆ 	¡ }t
 d|¡ ˆ  || |¡\}}tƒ r”| d¡ tƒ r¦| d¡ n
| d¡ t|ƒ}| ˆ  |¡d	 ¡ | ˆ  ||¡d	 ¡ trð| d
¡ |jddgd��r| d¡ t|ƒ}| d|f¡ | ddt f¡ | ddt f¡ t|dƒ�X}	|D ]<}t|tƒ�rv|	 d| ¡ n|	 d|d |d	 f ¡ �qV|	 t d¡¡ W 5 Q R X t
 d| ¡ t|ƒ�}	t
 |	 ¡ ¡ W 5 Q R X t
 d¡ ˆ  ˆ|f¡ |S )z@Depends on config.h: generate_config_h has to be called before !ÚsrcÚcommonÚnpymathz_numpyconfig.hrÃ   )ZNPY_NO_SIGNALrQ   )Ú
NPY_NO_SMPrQ   )rê   r   rQ   rÅ   ZPRIdPTRz
inttypes.hrZ   )ZNPY_USE_C99_FORMATSrQ   ZNPY_VISIBILITY_HIDDENZNPY_ABI_VERSIONz0x%.8XZNPY_API_VERSIONrÆ   rÇ   rÈ   r   z”
                    #ifndef __STDC_FORMAT_MACROS
                    #define __STDC_FORMAT_MACROS 1
                    #endif
                    rÊ   rË   )!Úadd_include_dirsr   r-   r.   rÌ   r/   rÍ   r   rÎ   rÏ   r   rÐ   r   r7   r>   r9   r¶   rV   r    r!   r   rn   r·   ZC_ABI_VERSIONÚC_API_VERSIONrÑ   rÒ   rm   rÓ   rÔ   rÕ   rÖ   Úadd_data_files)
rv   r­   rÛ   rÜ   r¬   rÝ   rY   rJ   Zhidden_visibilityrß   rã   r   r   Úgenerate_numpyconfig_hZ  sL    






z-configuration.<locals>.generate_numpyconfig_hc                    s   ‡‡‡‡ fdd„}|S )Nc                    st   t ˆ ˆd ƒ}tj dˆ ¡ z2tˆƒ}t d|¡ | tj  |ˆ¡¡\}}}W 5 tjd= X ˆ 	ˆ|fˆ|f¡ |fS )Nz.pyr   zexecuting %s)
r   r)   r.   r´   Ú
__import__r   rÐ   Úgenerate_apir-   rí   )rv   r­   Úscriptrz   Zh_fileZc_fileZdoc_file)Úcodegen_dirrI   rå   Úmodule_namer   r   rð   Ÿ  s    

ÿz>configuration.<locals>.generate_api_func.<locals>.generate_apir   )ró   rð   )rò   rI   rå   )ró   r   Úgenerate_api_funcž  s    z(configuration.<locals>.generate_api_funcÚgenerate_numpy_apiÚgenerate_ufunc_apirç   rè   ré   Z
multiarrayZumathZnpysortZ_simd)ZNPY_INTERNAL_BUILDr	   )ZHAVE_NPY_CONFIG_Hr	   rc   Úaix)Z_LARGE_FILESN)Z_FILE_OFFSET_BITSZ64)Z_LARGEFILE_SOURCEr	   )Z_LARGEFILE64_SOURCEr	   Úincludez
_signbit.cZnumpyz	*object.hz	genapi.pyrq   )Úpkgnamez
numpy.corec                     sê   ˆ  ¡ }dD ]˜\}}}|dk}|rZ|j}| ¡ |_t|jdƒrZ|jj ˆ ¡ |jj ˆ ¡ |j||d�}|sšd|j_|j||d� td| 	¡ › d|› �ƒ‚|r||_qt
|ƒ}d d	d
„ |D ƒ¡}	d dd
„ |D ƒ¡}
|	ˆd< |
ˆd< d S )N))Úczint main(void) { return 0;}r_   )úc++z;int main(void){ auto x = 0.0; return static_cast<int>(x); }zFnote: A compiler with support for C++11 language features is required.rû   Úcompiler)ÚlangTz'Broken toolchain: cannot link a simple z
 program. ú c                 S   s   g | ]}d | ‘qS )z-l%sr   ©rM   r‡   r   r   r   rO   þ  s     z;configuration.<locals>.get_mathlib_info.<locals>.<listcomp>c                 S   s   g | ]}d | ‘qS )z%s.libr   rÿ   r   r   r   rO   ÿ  s     Zposix_mathlibZmsvc_mathlib)rÏ   rü   Zcxx_compilerrÙ   rV   Úcompiler_soZtry_linkÚverboser0   Úupperr¶   r   )ry   r¬   rý   Z	test_codeZnoteZis_cppZbk_crX   ZmlibsZ
posix_mlibZ	msvc_mlib)r¾   rI   Ú
subst_dictr   r   Úget_mathlib_infoÑ  s.    
ÿz'configuration.<locals>.get_mathlib_infoznpy_math_internal.h.srcz
npy_math.czieee754.c.srcznpy_math_complex.c.srczhalffloat.cc                 S   s2   | j jdkrg S dg}| j dg¡r.| d¡ |S )zø Add flags if we are using MSVC compiler

        We can't see `build_cmd` in our scope, because we have not initialized
        the distutils build command, so use this deferred calculation to run
        when we are building the library.
        Zmsvcz/GL-z-d2VolatileMetadata-)rü   Úcompiler_typeZcompiler_optZcc_test_flagsr>   )Z	build_cmdÚflagsr   r   r   Úopts_if_msvc  s    
z#configuration.<locals>.opts_if_msvcÚlib)Úinclude_dirsZextra_compiler_args)ÚsourcesZinstall_dirZ
build_infoznpymath.ini.inzlib/npy-pkg-configzmlib.ini.inZ_multiarray_testsz_multiarray_tests.c.srczmem_overlap.cznpy_argparse.cznpy_hashtable.czmem_overlap.hznpy_argparse.hznpy_hashtable.hznpy_extint128.h)r
  ÚdependsrA   Zdlpackzdlpack.hzarray_assign.hzbinop_override.hzcblasfuncs.hzlowlevel_strided_loops.hznpy_cblas.hznpy_config.hznpy_ctypes.hznpy_dlpack.hznpy_import.hznpy_longdouble.hz
npy_svml.hztempl_common.h.srczucsnarrow.hzufunc_override.hzumathmodule.hz	numpyos.hznpy_cpu_dispatch.hZsimdzsimd.hzarray_assign.cznpy_longdouble.czucsnarrow.czufunc_override.cz	numpyos.cznpy_cpu_features.cZNPY_USE_BLAS_ILP64r
   Zblas_ilp64_optrb   Zblas_opt)Z
HAVE_CBLASNÚdefine_macroszcblasfuncs.czpython_xerbla.czabstractdtypes.hzarrayobject.hzarraytypes.h.srczarrayfunction_override.hzarray_coercion.hzarray_method.hznpy_buffer.hzcalculation.hzcommon.hzcommon_dtype.hzconvert_datatype.hz	convert.hzconversion_utils.hzctors.hzdescriptor.hzdtypemeta.hzdtype_transfer.hz	dragon4.hzeinsum_debug.hzeinsum_sumprod.hzexperimental_public_dtype_api.hzgetset.hzhashdescr.hziterators.hzlegacy_dtype_implementation.hz	mapping.hz	methods.hzmultiarraymodule.hznditer_impl.hznumber.hz
refcount.hzscalartypes.hz
sequence.hzshape.hz
strfuncs.hz
typeinfo.hzusertypes.hzvdot.hZtextreadingz
readtext.hz_neighborhood_iterator_imp.hznpy_endian.hzarrayscalars.hz
noprefix.hznpy_interrupt.hznpy_3kcompat.hz
npy_math.hzhalffloat.hznpy_common.hznpy_os.hzutils.hzndarrayobject.hz	npy_cpu.hznumpyconfig.hzndarraytypes.hznpy_1_7_deprecated_api.hzabstractdtypes.czalloc.czarrayobject.czarraytypes.c.srczargfunc.dispatch.c.srczarray_coercion.czarray_method.czarray_assign_scalar.czarray_assign_array.czarrayfunction_override.czbuffer.czcalculation.czcompiled_base.czcommon.czcommon_dtype.cz	convert.czconvert_datatype.czconversion_utils.czctors.cz
datetime.czdatetime_strings.czdatetime_busday.czdatetime_busdaycal.czdescriptor.czdlpack.czdtypemeta.cz	dragon4.czdtype_transfer.czeinsum.c.srczeinsum_sumprod.c.srczexperimental_public_dtype_api.czflagsobject.czgetset.czhashdescr.czitem_selection.cziterators.czlegacy_dtype_implementation.czlowlevel_strided_loops.c.srcz	mapping.cz	methods.czmultiarraymodule.cznditer_templ.c.srcznditer_api.cznditer_constr.cznditer_pywrap.cznumber.cz
refcount.cz
sequence.czshape.czscalarapi.czscalartypes.c.srcz
strfuncs.cztemp_elide.cz
typeinfo.czusertypes.czvdot.cznpy_sort.h.srczx86-qsort.dispatch.cppzquicksort.cppzmergesort.cppztimsort.cppzheapsort.cppzradixsort.cppznpy_partition.hzselection.cppznpy_binsearch.hzbinsearch.cppzconversions.czfield_types.czgrowth.cz
readtext.czrows.czstream_pyobject.czstr_to_int.cztokenize.cppc              	      sl   t |ˆdƒ}tj |¡}tj |¡s.t |¡ ˆ}t||ƒrht|dƒ�}| ˆ  	ˆ j
ˆ j¡¡ W 5 Q R X g S )Nz__umath_generated.crÆ   )r   r-   r.   rÌ   r/   rÍ   r   rÑ   rÓ   Z	make_codeZdefdictrÎ   )rv   r­   rÛ   Údirrñ   rN   )rÂ   Úgenerate_umath_pyrå   r   r   Úgenerate_umath_c  s    

ÿz'configuration.<locals>.generate_umath_cc                    s~   ddl m} t|ˆdƒ}tj |¡}tj |¡s:t |¡ tˆ dƒ}t||ƒrzˆˆj	dƒ}|d | 
d¡¡|ƒ}| |¡ d S )Nr   )rº   z_umath_doc_generated.hzgenerate_umath_doc.pyÚgenerate_umath_docra   r`   )r;   rº   r   r-   r.   rÌ   r/   rÍ   r   r=   rµ   Z
write_code)rv   r­   rº   rÛ   r  Zgenerate_umath_doc_pyrg   r  )rò   rI   r¹   rå   r   r   Úgenerate_umath_doc_header  s    


 ÿz0configuration.<locals>.generate_umath_doc_headerzumathmodule.czreduction.czfuncs.inc.srczsimd.inc.srczloops.h.srczloops_utils.h.srczloops.c.srczloops_unary_fp.dispatch.c.srczloops_arithm_fp.dispatch.c.srczloops_arithmetic.dispatch.c.srczloops_minmax.dispatch.c.srcz"loops_trigonometric.dispatch.c.srczloops_umath_fp.dispatch.c.srcz!loops_exponent_log.dispatch.c.srczloops_hyperbolic.dispatch.c.srczloops_modulo.dispatch.c.srczmatmul.h.srczmatmul.c.srczclip.hzclip.cppzdispatching.czlegacy_array_method.czwrapping_array_method.czufunc_object.czextobj.czscalarmath.c.srczufunc_type_resolution.cz
override.cz_scaled_float_dtype.cz
override.hzgenerate_ufunc_api.pyzufunc_docstrings.pyZsvml)zsvml_z0_tanh_d_la.szsvml_z0_tanh_s_la.sz/**/*.sT)Ú	recursivec                    s   g | ]}|  ˆ ¡s|‘qS r   )Úendswith)rM   Úo)Úsvml_filterr   r   rO   \  s     
 z!configuration.<locals>.<listcomp>Z_multiarray_umathrú   zgenerate_numpy_api.pyz*.py)Úlanguager
  r  rA   Úextra_objectsÚ
extra_infoZextra_cxx_compile_argsZ_umath_testsz_umath_tests.c.srcz_umath_tests.dispatch.c)r
  Z_rational_testsz_rational_tests.cZ_struct_ufunc_testsz_struct_ufunc_tests.cZ_operand_flag_testsz_operand_flag_tests.cz_simd.cz_simd_inc.h.srcz_simd_data.inc.srcz_simd.dispatch.c.srcz_simd.hz_simd_arg.incz_simd_convert.incz_simd_easyintrin.incz_simd_vector.inc)r
  r  Útestsz
tests/dataztests/examplesz*.pyi).r;   r¸   r¹   rº   Znumpy.distutils.system_infor»   r¼   r½   Znumpy.distutils.ccompiler_optr¾   Znumpy.versionr¿   Ú
local_pathr   r‰   ÚsimplefilterZMismatchCAPIWarningZcheck_api_versionrì   r=   rµ   r   rë   Zadd_data_dirZadd_define_macrosr)   r+   rÚ   rV   ÚpathsrT   r-   r.   rq   Zadd_installed_libraryZadd_npy_pkg_configÚadd_extensionr8   r³   r,   r1   ÚglobÚsortZadd_subpackagerí   Zmake_svn_version_py) Úparent_packageZtop_pathr¸   rº   r»   r¼   r½   Zis_releasedZ	local_dirrg   ræ   rî   rô   rõ   rö   Údepsr  Znpymath_sourcesr  Zcommon_depsZ
common_srcZ	blas_infoZ	have_blasr  Zmultiarray_depsZmultiarray_srcr  r  Z	umath_srcZ
umath_depsZ	svml_pathZ	svml_objsr   )
r¾   rä   rò   rI   r¹   rÂ   r  rå   r  r  r   ÚconfigurationÔ  sä   


ÿjD


þ	2




ûþýÿÿ



ý



ý÷




















é









ö

ÿ






















































È;Å>



































































´S















â"







öÿ
ùþ
ÿì
ý

ÿÿÿ
û
÷úr"  Ú__main__)Úsetup)r"  )r_   N))r-   r)   r'   r   r   r‰   rÔ   r  Úos.pathr   Znumpy.distutilsr   Údistutils.dep_utilr   r   Znumpy.compatr   Zsetup_commonr8   r³   r   rl   r   r   r   r,   r1   r6   r7   r9   r?   r   r!   r    r   r¶   r·   r"  r"   Znumpy.distutils.corer$  r   r   r   r   Ú<module>   sV   ÿ{)%e	
     h
