a
    iÝEbgm  ã                	   @   sF  d dl Z d dlZd dlZd dlmZmZ d dlmZ edkoBedu Z	e	r®d dl
Z
d dlZd dlZd dlZej e e e e¡d¡¡¡ d dlmZ ejdd„ ƒZdd
d„Znd dlmZ d dlmZmZ edddddddd�ZG dd„ deƒZG dd„ dƒZdd„ Ze ¡ D ]$\Z Z!e!D ]Z"e#ee e"ƒƒ �q�qe	�rBe
 $¡  dS )é    N)ÚsysÚpath)ÚDistutilsErrorÚ__main__z..)ÚCCompilerOptc               	   o   s6   t j| i |¤Ž}z|V  W t |¡ nt |¡ 0 d S ©N)ÚtempfileÚmkdtempÚshutilÚrmtree)ÚargsÚkwargsÚtmpdir© r   úh/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/numpy/distutils/tests/test_ccompiler_opt.pyÚtempdir   s    r   Ú c                 C   s   | st |ƒ‚d S r   )ÚAssertionError)ÚexprÚmsgr   r   r   Úassert_   s    r   )r   r   )ÚgccÚclangÚiccÚiccwÚmsvc)r   r   )r   )Úx86Úx64Úppc64Úppc64leÚarmhfÚaarch64Znoarchc                   @   sD   e Zd ZdZddd„Zdd„ Zdd„ Zdd	„ Zed
dœdd„ƒZ	dS )ÚFakeCCompilerOptr   c                 O   s$   || _ || _tj| d fi |¤Ž d S r   )Úfake_trap_filesÚfake_trap_flagsr   Ú__init__)ÚselfÚ
trap_filesÚ
trap_flagsr   r   r   r   r   r%   (   s    zFakeCCompilerOpt.__init__c                 C   s   t  d¡ | j| j|  ¡ ¡S )NzŠ            <<<<
            march    : {}
            compiler : {}
            ----------------
            {}
            >>>>
        )ÚtextwrapÚdedentÚformatÚcc_marchÚcc_nameÚreport©r&   r   r   r   Ú__repr__-   s    
ùzFakeCCompilerOpt.__repr__c                 K   s†   t |tƒsJ ‚t |tƒsJ ‚| jrD|D ]}t | j|¡r&|  d¡ q&| jrl|D ]}t | j|¡rN|  d¡ qNt|d |¡gt	|ƒ ƒS )Nz%source is trapped by a fake interfacez#flag is trapped by a fake interfaceú )
Ú
isinstanceÚlistr#   ÚreÚmatchZ
dist_errorr$   ÚzipÚjoinÚlen)r&   ÚsourcesÚflagsr   ÚsrcÚfr   r   r   Údist_compile7   s    zFakeCCompilerOpt.dist_compilec                 C   s   t jS r   )r"   Ú	fake_infor/   r   r   r   Ú	dist_infoE   s    zFakeCCompilerOpt.dist_infoF)Ústderrc                 G   s   d S r   r   )r@   r   r   r   r   Údist_logH   s    zFakeCCompilerOpt.dist_logN)r   r   )
Ú__name__Ú
__module__Ú__qualname__r>   r%   r0   r=   r?   ÚstaticmethodrA   r   r   r   r   r"   &   s   

r"   c                   @   sê   e Zd ZdZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zd5dd„Zd6dd„Zd7dd„Zi fdd„Zi f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/d0„ Zd1d2„ Zd3d4„ ZdS )8Ú_Test_CCompilerOptNc                 C   s   dt _d | _d S )NT)r"   Zconf_nocacheÚ_optr/   r   r   r   ÚsetupP   s    z_Test_CCompilerOpt.setupc                 O   s   | j | jdft_t|i |¤ŽS ©Nr   )ÚarchÚccr"   r>   )r&   r   r   r   r   r   ÚnoptT   s    z_Test_CCompilerOpt.noptc                 C   s   | j s|  ¡ | _ | j S r   )rG   rL   r/   r   r   r   ÚoptX   s    
z_Test_CCompilerOpt.optc                 C   s
   |   ¡ jS r   )rM   r,   r/   r   r   r   Úmarch]   s    z_Test_CCompilerOpt.marchc                 C   s
   |   ¡ jS r   )rM   r-   r/   r   r   r   r-   `   s    z_Test_CCompilerOpt.cc_namec              	      s¢  |t _| j| dd¡| dd¡| dd¡| dd¡d�}tƒ �à}tj |d	¡}t|d
ƒ�}| 	|¡ W d   ƒ n1 sx0    Y  g ‰ i }| 
|g¡}	|	D ]t\}
}t |
¡ d¡dd… }t|ƒ}|dkrÐd}n,|dkræ|d  ¡ }ndd |¡ d  ¡ }ˆ  |¡ |||< qšW d   ƒ n1 �s&0    Y  |j| \}}|�rN|dg n|}dd„ |D ƒ}t|ƒtˆ ƒk�sŠt‡ fdd„|D ƒƒ�sštd|ˆ f ƒ‚||fS )NÚbaselineÚminÚdispatchÚmaxr'   r   r(   ©Úcpu_baselineÚcpu_dispatchr'   r(   ztest_targets.cÚwÚ.é   éÿÿÿÿr   ú(r1   ú)c                 S   s,   g | ]$}t |tƒr$d d |¡ d n|‘qS )rZ   r1   r[   )r2   Útupler7   )Ú.0Útarr   r   r   Ú
<listcomp>ƒ   s   ÿz2_Test_CCompilerOpt.get_targets.<locals>.<listcomp>c                 3   s   | ]}|ˆ v V  qd S r   r   )r]   Út©Zgtargetsr   r   Ú	<genexpr>‡   ó    z1_Test_CCompilerOpt.get_targets.<locals>.<genexpr>zM'sources_status' returns different targets than the compiled targets
%s != %s)r"   Zconf_target_groupsrL   Úgetr   Úosr   r7   ÚopenÚwriteZtry_dispatchÚbasenameÚsplitr8   ÚupperÚappendZsources_statusÚallr   )r&   ÚtargetsÚgroupsr   rM   r   Úfiler<   ZgflagsZfake_objectsÚsourcer:   ZgtarZglenZhas_baseliner   ra   r   Úget_targetsc   sH    



ü(
*þ*ÿÿz_Test_CCompilerOpt.get_targetsc              	   K   sò   t ddddd�}|  ¡ }|  ¡ }| ||¡}| ||¡}|||||d | |d | |d | |d | fD ]}| |d ¡}|d url qŠql|rît|t ƒrÈ| ¡ D ]$\}	}
|
dd … dvr |
d	 ||	< q n&t|tƒsÖJ ‚|dd … dvrî|d	7 }|S )
Nr   r   r    r   )r   r   r!   r   Ú_rY   z)}$?\.+*ú$)ÚdictrN   r-   rd   Úpopr2   ÚitemsÚstr)r&   r   Z
map2originrN   r-   Z	map_marchZmap_ccÚkeyÚregexÚkÚvr   r   r   Ú	arg_regex�   s6    ü



û
z_Test_CCompilerOpt.arg_regexr   c                 K   s�   | j f i |¤Ž}|d u rd S | j||| dd¡| dd¡d�}d | ¡ ¡}|slt|ƒdkrhtd| ƒ‚d S t ||tj	¡sŒtd||f ƒ‚d S )	Nr'   r   r(   rS   r1   r   ú!expected empty features, not "%s"z%dispatch features "%s" not match "%s")
r|   rL   rd   r7   Úcpu_dispatch_namesr8   r   r4   r5   Ú
IGNORECASE)r&   rQ   rO   r   r5   rM   Úfeaturesr   r   r   Úexpect®   s&    

ýÿ
ÿz_Test_CCompilerOpt.expectc                 K   s�   | j f i |¤Ž}|d u rd S | j||| dd¡| dd¡d�}d | ¡ ¡}|slt|ƒdkrhtd| ƒ‚d S t ||tj	¡sŒtd||f ƒ‚d S )	Nr'   r   r(   rS   r1   r   r}   z%baseline features "%s" not match "%s")
r|   rL   rd   r7   Úcpu_baseline_namesr8   r   r4   r5   r   )r&   rO   rQ   r   r5   rM   r€   r   r   r   Úexpect_baselineÃ   s&    

ýÿ
ÿz"_Test_CCompilerOpt.expect_baselinec                 K   sŒ   | j f i |¤Ž}|d u rd S | j||| dd¡| dd¡d�}d | ¡ ¡}|slt|ƒdkrhtd| ƒ‚d S t ||¡sˆtd||f ƒ‚d S )	Nr'   r   r(   rS   r1   r   zexpected empty flags not "%s"zflags "%s" not match "%s")	r|   rL   rd   r7   Zcpu_baseline_flagsr8   r   r4   r5   )r&   rO   rQ   r   r5   rM   r:   r   r   r   Úexpect_flagsØ   s&    

ýÿ
ÿz_Test_CCompilerOpt.expect_flagsc                 K   s„   | j f i |¤Ž}|d u rd S | jf ||dœ|¤Ž\}}d |¡}|s`t|ƒdkr\td| ƒ‚d S t ||tj¡s€td||f ƒ‚d S )N©rm   rn   r1   r   z expected empty targets, not "%s"ztargets "%s" not match "%s")r|   rq   r7   r8   r   r4   r5   r   )r&   rm   rn   r   r5   rr   r   r   r   Úexpect_targetsí   s    
ÿ
ÿz!_Test_CCompilerOpt.expect_targetsc           
      K   s¨   | j f i |¤Ž}|d u rd S t|tƒs*J ‚| j||d�\}}| ¡ D ]^\}}||vr`td| ƒ‚|| }	|s„t|	ƒdkr„td| ƒ‚t ||	¡sDtd||	|f ƒ‚qDd S )Nr…   zexpected to find target "%s"r   z+expected to find empty flags in target "%s"z"%s" flags "%s" not match "%s")	r|   r2   rt   rq   rv   r   r8   r4   r5   )
r&   rm   rn   r   Z
match_dictrr   Z	tar_flagsZ	match_tarZmatch_flagsr:   r   r   r   Úexpect_target_flagsþ   s(    ÿÿÿz&_Test_CCompilerOpt.expect_target_flagsc                 C   s€   | j dkrdnd}| jdkr dnd}|  ¡ }tt|d| j  ƒƒ tt|d| ƒ ƒ tt|d| j ƒƒ tt|d| ƒ ƒ d S )Nr   r   r   r   Zcc_on_Zcc_is_)rJ   rK   rM   r   Úgetattr)r&   Z
wrong_archZwrong_ccrM   r   r   r   Útest_interface  s    z!_Test_CCompilerOpt.test_interfacec                 C   sH   dD ]>\}}| j ||d�}t| ¡ ƒdks.J ‚t| ¡ ƒdksJ ‚qd S )N))r   ÚnonerI   )z
none +noneznone - none)z	none -maxz	min - max)z+vsx2 -VSX2zvsx avx2 avx512f -max)z#max -vsx - avx + avx512f neon -MAX z+min -min + max -max -vsx + avx2 -avx2 +NONE©rT   rU   r   )rL   r8   r‚   r~   )r&   rO   rQ   rM   r   r   r   Útest_args_empty  s    	z"_Test_CCompilerOpt.test_args_emptyc              	   C   sP   |   ¡ dkrd S dD ]6\}}z| j||d� tdƒ‚W q tyH   Y q0 qd S )NÚunknown))zunkown_feature - max +minzunknown max min)z#avx2z$vsxr‹   z+excepted an exception for invalid arguments)rN   rL   r   r   )r&   rO   rQ   r   r   r   Útest_args_validation,  s    z'_Test_CCompilerOpt.test_args_validationc                 C   sT   | j dddddd� | j ddd	d
dd� | j dddddd� | j dddddd� d S )Nzsse vsx neonÚsseÚvsxÚneonr   ©r   r   r    r�   z)sse41 avx avx2 vsx2 vsx3 neon_vfpv4 asimdzsse41 avx avx2ú	vsx2 vsx3zneon_vfpv4 asimdzsse neon vsx)rO   r   r   r    zavx2 vsx3 asimdhp)r�   r/   r   r   r   Ú	test_skip:  s&    þûþþz_Test_CCompilerOpt.test_skipc                 C   s®   | j ddddd� dD ]@\}}d||f }| j |d| ||d	� | j |d
| ||d	� qdD ]&}|D ]}| j |dd |¡ d� qdq\| j ddd� dD ]}| j |dd� q–d S )Nzfma3 avx2 asimd vsx3zsse .* sse41 .* fma3.*avx2zvsx vsx2 vsx3zneon neon_fp16 neon_vfpv4 asimd©r   r   r    )©Zfma3Úavx2)Úavx512fÚavx512cdz.* sse42 .* %s .*%s$z.* sse42 .* %s$)Úx86_gccÚx86_iccÚx86_iccwz.* avx .* %s$)r–   )r˜   r™   Z
avx512_skxz.*%sr1   )Úx86_msvcr�   úvsx vsx2)r   )r‘   Z	neon_fp16Z
neon_vfpv4Úasimd)r!   )rƒ   r7   )r&   Zf0Úf1Údiffr<   Úffr   r   r   Útest_impliesR  s0    ûþþÿ
z_Test_CCompilerOpt.test_impliesc              
   C   s  dD ]r}|dkr|   ¡ dkrq| j|ddddd� | j|ddd	d
ddd� | j|ddddd� | j|ddddddd� q| jdddddddd� | jddddd� z4| jdddddd� |  ¡ dkrÔtd |  ¡  ƒ‚W n& tyü   |  ¡ dkrøtd!ƒ‚Y n0 d S )"N)rR   Únativer¤   r   z.*cpu_(sse|vsx|neon).cr   )r'   r   r   r    z.*cpu_(sse3|vsx2|neon_vfpv4).czsse sse2r�   zneon neon_fp16)r'   r   r   r    r!   r   z.*cpu_(popcnt|vsx3).czsse .* sse41rž   zneon neon_fp16 .* asimd .*z=.* xop fma4 .* avx512f .* avx512_knl avx512_knm avx512_skx .*z1.* avx512f .* avx512_knl avx512_knm avx512_skx .*z'.* xop fma4 .* avx512f .* avx512_skx .*z.* asimd asimdhp asimddp .*zvsx vsx2 vsx3.*)rš   r›   rœ   r�   r    r   rP   zsse sse2 sse3zneon neon_fp16 .* asimd)r   r   r    r!   r   r   z.*cpu_(sse2|vsx2).c)r'   r   r   z".*(-march=native|-xHost|/QxHost).*ú.*)r(   r   r   r    r�   úexcepted an exception for %súexcepted no exceptions)r-   r�   rN   r   r   )r&   Úor   r   r   Útest_args_options{  s\    þýýøýþþ
ÿz$_Test_CCompilerOpt.test_args_optionsc                 C   sz   | j dddd|  ¡ dkrdndddddd	�	 | j d
ddd� | j dddd� | j ddd� | j ddd� | j ddd� d S )Nz sse sse2 vsx vsx2 neon neon_fp16z-msse -msse2z
/arch:SSE2r   r   z-mcpu=power8z-maltivec -mvsx -mpower8-vectorz"-mfpu=neon-fp16 -mfp16-format=ieee)rš   r›   rœ   r�   Z	ppc64_gccZppc64_clangÚ	armhf_gccr!   rŸ   z;-mfp16-format=ieee -mfpu=neon-fp-armv8 -march=armv8-a\+simd)r!   rª   Zasimdhpz-march=armv8.2-a\+fp16z=-mfp16-format=ieee -mfpu=neon-fp-armv8 -march=armv8.2-a\+fp16)Úaarch64_gccrª   Zasimddpz-march=armv8.2-a\+dotprod)r«   Zasimdfhmz-march=armv8.2-a\+fp16\+fp16fmlzasimddp asimdhp asimdfhmz(-march=armv8.2-a\+dotprod\+fp16\+fp16fml)r„   rN   r/   r   r   r   Ú
test_flags±  s<    øýýÿþþz_Test_CCompilerOpt.test_flagsc              	   C   sh   dD ]^}z2| j |dddd� |  ¡ dkr8td|  ¡  ƒ‚W q ty`   |  ¡ dkr\tdƒ‚Y q0 qd S )N)zbla blaz
/*@targetsz/*@targets */z/*@targets unknown */z"/*@targets $unknown_policy avx2 */z!/*@targets #unknown_group avx2 */z/*@targets $ */z/*@targets # vsx */z/*@targets #$ vsx */z/*@targets vsx avx2 ) */z/*@targets vsx avx2 (avx2 */z/*@targets vsx avx2 () */z!/*@targets vsx avx2 ($autovec) */z/*@targets vsx avx2 (xxx) */z!/*@targets vsx avx2 (baseline) */r   )r   r    r   r�   r¦   r§   )r†   rN   r   r   ©r&   rm   r   r   r   Útest_targets_exceptionsÓ  s    þ
ÿz*_Test_CCompilerOpt.test_targets_exceptionsc                 C   s"   dD ]}| j |ddddd� qd S )N)z(/*@targets $keep_baseline sse vsx neon*/z(/*@targets,$keep_baseline,sse,vsx,neon*/z(/*@targets*$keep_baseline*sse*vsx*neon*/zo
            /*
            ** @targets
            ** $keep_baseline, sse vsx,neon
            */
            z´
            /*
            ************@targets*************
            ** $keep_baseline, sse vsx, neon
            *********************************
            */
            z½
            /*
            /////////////@targets/////////////////
            //$keep_baseline//sse//vsx//neon
            /////////////////////////////////////
            */
            zg
            /*
            @targets
            $keep_baseline
            SSE VSX NEON*/
            r�   r�   r‘   r   r’   ©r†   r­   r   r   r   Útest_targets_syntaxñ  s    ÿz&_Test_CCompilerOpt.test_targets_syntaxc                 C   sb   | j dddddd� | j ddd	d
ddd� | j ddddddd� | j ddddddddddd�
 d S )Nz°
            /*@targets
                sse sse2 sse41 avx avx2 avx512f
                vsx vsx2 vsx3
                neon neon_fp16 asimdhp asimddp
            */
            zavx vsx2 asimdúavx512f avx2zasimddp asimdhpÚvsx3)rO   r   r    r   zš
            /*@targets
                sse41 avx avx2 avx512f
                vsx2 vsx3
                asimd asimdhp asimddp
            */
            r   zsse41 avx2 vsx2 asimd asimddpz
avx2 sse41úasimddp asimdZvsx2)rO   rQ   r   r    r   zš
            /*@targets
                sse2 sse41 avx2 avx512f
                vsx2 vsx3
                neon asimdhp asimddp
            */
            z.*(avx2|avx512f|vsx3|asimddp).cz
sse41 sse2zasimdhp neon)rO   r'   r   r   r    zì
            /*@targets
                sse sse2 avx fma3 avx2 avx512f avx512cd
                vsx vsx2 vsx3
                neon neon_vfpv4 neon_fp16 neon_fp16 asimd asimdhp
                asimddp asimdfhm
            */
            z#avx512cd avx512f avx2 fma3 avx sse2zavx512cd avx2 avx sse2zvsx3 vsx2 vsxú	vsx3 vsx2z8asimdfhm asimddp asimdhp asimd neon_vfpv4 neon_fp16 neonzasimdfhm asimddp asimdhp asimd)	rO   rš   r�   r›   rœ   r   r   r    r!   r¯   r/   r   r   r   Útest_targets  s8    ÷÷öïz_Test_CCompilerOpt.test_targetsc              
   C   sº   | j ddddddd� | j dd	d
ddd� | j dddd|  ¡ dkrFdnddddd� dD ]2}| jd| ddiddiddiddiddid� qX| jdddiddiddiddiddid� d S ) NzÂ
            /*@targets
                $keep_baseline
                sse2 sse42 avx2 avx512f
                vsx2 vsx3
                neon neon_vfpv4 asimd asimddp
            */
            zsse41 avx2 vsx2 asimd vsx3zavx512f avx2 sse42 sse2r´   zasimddp asimd neon_vfpv4 neonr³   )rO   r   r   r    r!   zÍ
            /*@targets
                $keep_baseline $keep_sort
                avx512f sse42 avx2 sse2
                vsx2 vsx3
                asimd neon neon_vfpv4 asimddp
            */
            zavx512f sse42 avx2 sse2r“   zasimd neon neon_vfpv4 asimddpzasimd asimddp)r   r   r    r!   zÜ
            /*@targets
                $keep_baseline $keep_sort $autovec
                avx512f avx2 sse42 sse41 sse2
                vsx3 vsx2
                asimddp asimd neon_vfpv4 neon
            */
            zavx512f avx2 sse42 sse41 sse2r   zavx512f avx2 sse2r±   )rš   r›   rœ   r�   r   r    r!   )z$maxoptz$autovecz/*@targets baseline %s */rO   z.*-O3.*z.*/O3.*z.*/O2.*r¥   )r   r   r   r   r�   z/*@targets baseline $werror */z.*-Werror.*z.*/Werror.*z.*/WX.*)r†   rN   r‡   )r&   Úpolicyr   r   r   Útest_targets_policiesP  sP    òó
ÿïüüz(_Test_CCompilerOpt.test_targets_policiesc              	   C   s>   | j dtdd�dddd� | j dtd	d
d�dddddd� d S )NzK
            /*@targets $keep_baseline baseline #test_group */
            zˆ
                    $keep_baseline
                    asimddp sse2 vsx2 avx2 vsx3
                    avx512f asimdhp
                )Z
test_groupzavx512f avx2 sse2 baselinezvsx3 vsx2 baselinezasimddp asimdhp baseline)rn   r   r   r    zÂ
            /*@targets
             * sse42 avx avx512f
             * #test_group_1
             * vsx2
             * #test_group_2
             * asimddp asimdfhm
            */
            z@
                    VSX2 vsx3 asimd avx2 SSE41
                z@
                    vsx2 vsx3 asImd aVx2 sse41
                )Ztest_group_1Ztest_group_2zavx512f avx2 avx sse42 sse41r´   r²   zasimdfhm asimddp asimdzasimdfhm asimddp)rn   r   r   r   r    r!   )r†   rt   r/   r   r   r   Útest_targets_groups˜  s*    ÿó	üèz&_Test_CCompilerOpt.test_targets_groupsc                 C   sN   | j dddd� | j dddddd	� | j d
dddd� | j dddddd� d S )Nzm
            /*@targets
                (avx512_clx avx512_cnl) (asimdhp asimddp)
            */
            z\(avx512_clx avx512_cnl\)z\(asimdhp asimddp\))r   r    zË
            /*@targets
                f16c (sse41 avx sse42) (sse3 avx2 avx512f)
                vsx2 (vsx vsx3 vsx2)
                (neon neon_vfpv4 asimd asimdhp asimddp)
            */
            zavx512f f16c avxr´   r²   )r   r   r   r    zÌ
            /*@targets $keep_sort
                (sse41 avx sse42) (sse3 avx2 avx512f)
                (vsx vsx3 vsx2)
                (asimddp neon neon_vfpv4 asimd asimdhp)
            */
            zavx avx512fr•   zz
            /*@targets $keep_sort
                fma3 avx2 (fma3 avx2) (avx2 fma3) avx2 fma3
            */
            zfma3 avx2 \(fma3 avx2\)r—   )rš   r›   rœ   r�   r¯   r/   r   r   r   Útest_targets_multiÄ  s0    ù
õöøz%_Test_CCompilerOpt.test_targets_multi)r   )r   )r   )rB   rC   rD   rJ   rK   rH   rL   rM   rN   r-   rq   r|   r�   rƒ   r„   r†   r‡   r‰   rŒ   rŽ   r”   r£   r©   r¬   r®   r°   rµ   r·   r¸   r¹   r   r   r   r   rF   L   s6   ,


	)6"$;H,rF   c                 C   s@   t r"t d¡j| d | | |d�S t d¡j| d | | |d�S )Na      class TestCCompilerOpt_{class_name}(_Test_CCompilerOpt, unittest.TestCase):
        arch = '{arch}'
        cc   = '{cc}'
        def __init__(self, methodName="runTest"):
            unittest.TestCase.__init__(self, methodName)
            self.setup()
    rr   )Ú
class_namerJ   rK   zo    class TestCCompilerOpt_{class_name}(_Test_CCompilerOpt):
        arch = '{arch}'
        cc   = '{cc}'
    )Úis_standaloner)   r*   r+   )rJ   rK   r   r   r   Únew_testõ  s    ø

ûr¼   )r   )%r4   r)   re   r   r   Údistutils.errorsr   rB   Ú__package__r»   ZunittestÚ
contextlibr   r
   rk   Úabspathr7   ÚdirnameÚ__file__Zccompiler_optr   Úcontextmanagerr   r   Znumpy.distutils.ccompiler_optZnumpy.testingrt   Zarch_compilersr"   rF   r¼   rv   rJ   Z	compilersrK   ÚexecÚmainr   r   r   r   Ú<module>   sD     
ù
&     .