o
    Ô­jjp  ã                
   @   sH  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o!edu Z	e	rWd 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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	r¢e
 $¡  dS dS )é    N)ÚsysÚpath)ÚDistutilsErrorÚ__main__z..)ÚCCompilerOptc               	   o   s6   � t j| i |¤Ž}z|V  W t |¡ d S t |¡ w ©N)ÚtempfileÚmkdtempÚshutilÚrmtree)ÚargsÚkwargsÚtmpdir© r   úe/var/www/html/CropPilot/venv/lib/python3.10/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   r   Úfcc)r   )Úx86Úx64Úppc64Úppc64leÚarmhfÚaarch64Ús390xÚ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r"|D ]}t | j|¡r!|  d¡ q| jr6|D ]}t | j|¡r5|  d¡ q't|d |¡gt	|ƒ ƒS )Nz%source is trapped by a fake interfacez#flag is trapped by a fake interfaceú )
Ú
isinstanceÚlistr&   ÚreÚmatchÚ
dist_errorr'   ÚzipÚjoinÚlen)r)   ÚsourcesÚflagsr   ÚsrcÚfr   r   r   Údist_compile8   s   
€
€zFakeCCompilerOpt.dist_compilec                 C   s   t jS r   )r%   Ú	fake_infor2   r   r   r   Ú	dist_infoF   s   zFakeCCompilerOpt.dist_infoF)Ústderrc                 G   s   d S r   r   )rD   r   r   r   r   Údist_logI   s   zFakeCCompilerOpt.dist_logN)r   r   )
Ú__name__Ú
__module__Ú__qualname__rB   r(   r3   rA   rC   ÚstaticmethodrE   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d5dd„Zd5d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 )6Ú_Test_CCompilerOptNc                 C   s   dt _d | _d S )NT)r%   Úconf_nocacheÚ_optr2   r   r   r   Úsetup_classQ   s   
z_Test_CCompilerOpt.setup_classc                 O   s   | j | jdft_t|i |¤ŽS ©Nr   )ÚarchÚccr%   rB   )r)   r   r   r   r   r   ÚnoptU   s   z_Test_CCompilerOpt.noptc                 C   s   | j s|  ¡ | _ | j S r   )rL   rQ   r2   r   r   r   ÚoptY   s   
z_Test_CCompilerOpt.optc                 C   ó
   |   ¡ jS r   )rR   r/   r2   r   r   r   Úmarch^   ó   
z_Test_CCompilerOpt.marchc                 C   rS   r   )rR   r0   r2   r   r   r   r0   a   rU   z_Test_CCompilerOpt.cc_namec              	      sš  |t _| j| dd¡| dd¡| dd¡| dd¡d�}tƒ �p}tj |d	¡}t|d
ƒ�}| 	|¡ W d   ƒ n1 s<w   Y  g ‰ i }| 
|g¡}	|	D ]:\}
}t |
¡ d¡dd… }t|ƒ}|dkrhd}n|dkrs|d  ¡ }ndd |¡ d  ¡ }ˆ  |¡ |||< qMW d   ƒ n1 s’w   Y  |j| \}}|r¥|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   ú(r4   ú)c                 S   s,   g | ]}t |tƒrd d |¡ d n|‘qS )ra   r4   rb   )r5   Útupler;   )Ú.0Útarr   r   r   Ú
<listcomp>„   s    ÿÿz2_Test_CCompilerOpt.get_targets.<locals>.<listcomp>c                 3   s   � | ]}|ˆ v V  qd S r   r   )rd   Út©Úgtargetsr   r   Ú	<genexpr>ˆ   s   € z1_Test_CCompilerOpt.get_targets.<locals>.<genexpr>zM'sources_status' returns different targets than the compiled targets
%s != %s)r%   Úconf_target_groupsrQ   Úgetr   Úosr   r;   ÚopenÚwriteÚtry_dispatchÚbasenameÚsplitr<   ÚupperÚappendÚsources_statusÚallr   )r)   ÚtargetsÚgroupsr   rR   r   Úfiler@   ÚgflagsÚfake_objectsÚsourcer>   ÚgtarÚglenÚhas_baseliner   rh   r   Úget_targetsd   sN   



üÿ

ôùþ&ÿÿz_Test_CCompilerOpt.get_targetsc              	   K   sô   t ddddd�}|  ¡ }|  ¡ }| ||¡}| ||¡}|||||d | |d | |d | |d | fD ]}| |d ¡}|d urD nq6|rxt|t ƒre| ¡ D ]\}	}
|
dd … dvrb|
d	 ||	< qP|S t|tƒslJ ‚|dd … dvrx|d	7 }|S )
Nr   r   r!   r   )r   r    r"   r   Ú_r`   z)}$?\.+*ú$)ÚdictrT   r0   rl   Úpopr5   ÚitemsÚstr)r)   r   Ú
map2originrT   r0   Ú	map_marchÚmap_ccÚkeyÚregexÚkÚvr   r   r   Ú	arg_regex�   s<   ü



ûÿ
€ýz_Test_CCompilerOpt.arg_regexr   c                 K   s�   | j d	i |¤Ž}|d u rd S | j||| dd¡| dd¡d�}d | ¡ ¡}|s6t|ƒdkr4td| ƒ‚d S t ||tj	¡sFtd||f ƒ‚d S )
Nr*   r   r+   rZ   r4   r   ú!expected empty features, not "%s"z%dispatch features "%s" not match "%s"r   )
rŽ   rQ   rl   r;   Úcpu_dispatch_namesr<   r   r7   r8   Ú
IGNORECASE)r)   rX   rV   r   r8   rR   Úfeaturesr   r   r   Úexpect¯   ó(   

ýÿ
ÿÿz_Test_CCompilerOpt.expectc                 K   s�   | j d	i |¤Ž}|d u rd S | j||| dd¡| dd¡d�}d | ¡ ¡}|s6t|ƒdkr4td| ƒ‚d S t ||tj	¡sFtd||f ƒ‚d S )
Nr*   r   r+   rZ   r4   r   r�   z%baseline features "%s" not match "%s"r   )
rŽ   rQ   rl   r;   Úcpu_baseline_namesr<   r   r7   r8   r‘   )r)   rV   rX   r   r8   rR   r’   r   r   r   Úexpect_baselineÄ   r”   z"_Test_CCompilerOpt.expect_baselinec                 K   sŒ   | j d	i |¤Ž}|d u rd S | j||| dd¡| dd¡d�}d | ¡ ¡}|s6t|ƒdkr4td| ƒ‚d S t ||¡sDtd||f ƒ‚d S )
Nr*   r   r+   rZ   r4   r   zexpected empty flags not "%s"zflags "%s" not match "%s"r   )	rŽ   rQ   rl   r;   Úcpu_baseline_flagsr<   r   r7   r8   )r)   rV   rX   r   r8   rR   r>   r   r   r   Úexpect_flagsÙ   s(   

ýÿ
ÿÿz_Test_CCompilerOpt.expect_flagsc                 K   s„   | j di |¤Ž}|d u rd S | jd||dœ|¤Ž\}}d |¡}|s0t|ƒdkr.td| ƒ‚d S t ||tj¡s@td||f ƒ‚d S )N©rw   rx   r4   r   z expected empty targets, not "%s"ztargets "%s" not match "%s"r   )rŽ   r€   r;   r<   r   r7   r8   r‘   )r)   rw   rx   r   r8   r�   r   r   r   Úexpect_targetsî   s    
ÿ
ÿÿz!_Test_CCompilerOpt.expect_targetsc           
      K   s¨   | j di |¤Ž}|d u rd S t|tƒsJ ‚| j||d�\}}| ¡ D ]/\}}||vr0td| ƒ‚|| }	|sBt|	ƒdkrBtd| ƒ‚t ||	¡sQtd||	|f ƒ‚q"d 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   )	rŽ   r5   rƒ   r€   r…   r   r<   r7   r8   )
r)   rw   rx   r   Ú
match_dictr�   Ú	tar_flagsÚ	match_tarÚ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   Úcc_on_Úcc_is_)rO   rP   rR   r   Úgetattr)r)   Ú
wrong_archÚwrong_ccrR   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   ÚnonerN   )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©r[   r\   r   )rQ   r<   r•   r�   )r)   rV   rX   rR   r   r   r   Útest_args_empty  s
   	õz"_Test_CCompilerOpt.test_args_emptyc              	   C   sJ   |   ¡ dkrd S dD ]\}}z| j||d� tdƒ‚ ty"   Y q
w d S )NÚunknown))zunkown_feature - max +minzunknown max min)z#avx2z$vsxr§   z+excepted an exception for invalid arguments)rT   rQ   r   r   )r)   rV   rX   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)rV   r   r   r!   zavx2 vsx3 asimdhp)r“   r2   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� q3q/| j ddd� dD ]	}| j |dd� qLd S )Nzfma3 avx2 asimd vsx3zsse .* sse41 .* fma3.*avx2zvsx vsx2 vsx3zneon neon_fp16 neon_vfpv4 asimd)r   r   r!   )©Úfma3Úavx2)Úavx512fÚavx512cdz.* sse42 .* %s .*%s$z.* sse42 .* %s$)Úx86_gccÚx86_iccÚx86_iccwz.* avx .* %s$)r°   )r³   r´   Ú
avx512_skxz.*%sr4   )Úx86_msvcr¬   úvsx vsx2)r    )r­   Ú	neon_fp16Ú
neon_vfpv4Úasimd)r"   )r–   r;   )r)   Úf0Úf1Údiffr@   Úffr   r   r   Útest_impliesS  s6   ûþþÿÿÿz_Test_CCompilerOpt.test_impliesc                 C   s  dD ]=}|dkr|   ¡ dkrq| j|dddddd� | j|ddd	d
dddd� | j|dddddd� | j|dddddddd� q| jddddddddd� | jddddd� z| jddd d d d d d!� |  ¡ d"krqtd#|  ¡  ƒ‚W d S  ty‡   |  ¡ d"kr„td$ƒ‚Y d S w )%N)rY   ÚnativerÃ   r   z.*cpu_(sse|vsx|neon|vx).cr   )r*   r   r   r!   r#   z".*cpu_(sse3|vsx2|neon_vfpv4|vxe).czsse sse2r¬   zneon neon_fp16Úvx)r*   r   r   r!   r"   r    r#   z.*cpu_(popcnt|vsx3).czsse .* sse41rº   zneon neon_fp16 .* asimd .*úvx vxe vxe2z=.* 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 vsx4.*zvx vxe vxe2.*)rµ   r¶   r·   r¹   r!   r   r#   rW   zsse sse2 sse3zneon neon_fp16 .* asimd)r   r   r!   r"   r   r    r#   z.*cpu_(sse2|vsx2).c)r*   r   r    z..*(-march=native|-xHost|/QxHost|-mcpu=a64fx).*ú.*)r+   r   r   r!   r#   r"   r©   úexcepted an exception for %súexcepted no exceptions)r0   r“   rT   r   r   )r)   Úor   r   r   Útest_args_options|  sf   þýü÷ýþ
þ
ÿÿÿÿz$_Test_CCompilerOpt.test_args_optionsc                 C   sŠ   | j dddd|  ¡ dkrdnd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� | j ddd� d S )Nz'sse sse2 vsx vsx2 neon neon_fp16 vx vxez-msse -msse2z
/arch:SSE2r   r   z-mcpu=power8z"-mfpu=neon-fp16 -mfp16-format=ieeez-mzvector -march=arch12)	rµ   r¶   r·   r¹   Ú	ppc64_gccÚppc64_clangÚ	armhf_gccr"   r#   r½   z;-mfp16-format=ieee -mfpu=neon-fp-armv8 -march=armv8-a\+simd)r"   rÍ   Úasimdhpz-march=armv8.2-a\+fp16z=-mfp16-format=ieee -mfpu=neon-fp-armv8 -march=armv8.2-a\+fp16)Úaarch64_gccrÍ   Úasimddpz-march=armv8.2-a\+dotprod)rÏ   Úasimdfhmz-march=armv8.2-a\+fp16\+fp16fmlzasimddp asimdhp asimdfhmz(-march=armv8.2-a\+dotprod\+fp16\+fp16fmlrÅ   z-mzvector -march=arch13)r#   )r˜   rT   r2   r   r   r   Ú
test_flags´  sF   ÷ýýÿþþ
þz_Test_CCompilerOpt.test_flagsc              	   C   sh   dD ]/}z| j |ddddd� |  ¡ dkrtd|  ¡  ƒ‚W q ty1   |  ¡ dkr/tdƒ‚Y qw 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È   )rš   rT   r   r   ©r)   rw   r   r   r   Útest_targets_exceptionsÛ  s"   þ
ÿÿÿÿçz*_Test_CCompilerOpt.test_targets_exceptionsc              	   C   s$   dD ]}| j |dddddd� qd S )N)z+/*@targets $keep_baseline sse vsx neon vx*/z+/*@targets,$keep_baseline,sse,vsx,neon vx*/z+/*@targets*$keep_baseline*sse*vsx*neon*vx*/zs
            /*
            ** @targets
            ** $keep_baseline, sse vsx,neon, vx
            */
            z¾
            /*
            ************@targets****************
            ** $keep_baseline, sse vsx, neon, vx
            ************************************
            */
            zÁ
            /*
            /////////////@targets/////////////////
            //$keep_baseline//sse//vsx//neon//vx
            /////////////////////////////////////
            */
            zj
            /*
            @targets
            $keep_baseline
            SSE VSX NEON VX*/
            r«   r¬   r­   rÄ   r   )r   r   r!   r#   r©   ©rš   rÓ   r   r   r   Útest_targets_syntaxù  s
   
ÿáz&_Test_CCompilerOpt.test_targets_syntaxc                 C   sh   | j ddddddd� | j dd	d
ddddd� | j d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 vsx4
                neon neon_fp16 asimdhp asimddp
                vx vxe vxe2
            */
            zavx vsx2 asimd vx vxeúavx512f avx2zasimddp asimdhpz	vsx4 vsx3Úvxe2)rV   r   r!   r   r#   z»
            /*@targets
                sse41 avx avx2 avx512f
                vsx2 vsx3 vsx4
                asimd asimdhp asimddp
                vx vxe vxe2
            */
            r   z"sse41 avx2 vsx2 asimd asimddp vxe2z
avx2 sse41úasimddp asimdÚvsx2)rV   rX   r   r!   r   r#   z»
            /*@targets
                sse2 sse41 avx2 avx512f
                vsx2 vsx3 vsx4
                neon asimdhp asimddp
                vx vxe vxe2
            */
            z).*(avx2|avx512f|vsx3|vsx4|asimddp|vxe2).cz
sse41 sse2zasimdhp neonzvxe vx)rV   r*   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)	rV   rµ   r¹   r¶   r·   r   r    r!   r"   rÕ   r2   r   r   r   Útest_targets  s<   õöô
ïz_Test_CCompilerOpt.test_targetsc              
   C   s¾   | j dddddddd� | j d	d
ddddd� | j dddd|  ¡ dkr%dnddddd� dD ]}| jd| ddiddiddiddiddid� q.| 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
                vx vxe vxe2
            */
            zsse41 avx2 vsx2 asimd vsx3 vxezavx512f avx2 sse42 sse2rÛ   zasimddp asimd neon_vfpv4 neonrÙ   zvxe2 vxe vx)rV   r   r   r!   r"   r#   zæ
            /*@targets
                $keep_baseline $keep_sort
                avx512f sse42 avx2 sse2
                vsx2 vsx3
                asimd neon neon_vfpv4 asimddp
                vxe vxe2
            */
            zavx512f sse42 avx2 sse2r®   zasimd neon neon_vfpv4 asimddpzasimd asimddpzvxe vxe2)r   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 */rV   z.*-O3.*z.*/O3.*z.*/O2.*rÆ   )r   r   r   r   r©   z/*@targets baseline $werror */z.*-Werror.*z.*/Werror.*z.*/WX.*)rš   rT   rŸ   )r)   Úpolicyr   r   r   Útest_targets_policies]  sT   	ð	ñÿïü
ü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
                )Ú
test_groupzavx512f avx2 sse2 baselinezvsx3 vsx2 baselinezasimddp asimdhp baseline)rx   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
                )Útest_group_1Útest_group_2zavx512f avx2 avx sse42 sse41rÛ   Úvsx3zasimdfhm asimddp asimdzasimdfhm asimddp)rx   r   r   r    r!   r"   )rš   rƒ   r2   r   r   r   Útest_targets_groups©  s*   ÿó	ü
èz&_Test_CCompilerOpt.test_targets_groupsc                 C   sP   | j 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 )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)
                (vx vxe vxe2)
            */
            zavx avx512frØ   )r   r   r!   r#   zz
            /*@targets $keep_sort
                fma3 avx2 (fma3 avx2) (avx2 fma3) avx2 fma3
            */
            zfma3 avx2 \(fma3 avx2\)r²   )rµ   r¶   r·   r¹   rÕ   r2   r   r   r   Útest_targets_multiÕ  s2   ù
õô
øz%_Test_CCompilerOpt.test_targets_multi©r   )rF   rG   rH   rO   rP   rM   rQ   rR   rT   r0   r€   rŽ   r“   r–   r˜   rš   rŸ   r¥   r¨   rª   r¯   rÂ   rÊ   rÒ   rÔ   rÖ   rÜ   rÞ   rã   rä   r   r   r   r   rJ   M   s8    ,


	)8'$@L,rJ   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_class()
    r�   )Ú
class_namerO   rP   zo    class TestCCompilerOpt_{class_name}(_Test_CCompilerOpt):
        arch = '{arch}'
        cc   = '{cc}'
    )Úis_standaloner,   r-   r.   )rO   rP   r   r   r   Únew_test  s   ø
ûrè   rå   )%r7   r,   rm   r   r   Údistutils.errorsr   rF   Ú__package__rç   ÚunittestÚ
contextlibr   r
   rt   Úabspathr;   ÚdirnameÚ__file__Úccompiler_optr   Úcontextmanagerr   r   Únumpy.distutils.ccompiler_optÚnumpy.testingrƒ   Úarch_compilersr%   rJ   rè   r…   rO   Ú	compilersrP   ÚexecÚmainr   r   r   r   Ú<module>   sN      
ø&     @	ÿÿ