zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
U
O±dƒsã
@sHddlZddlZddlZddlmZmZddlmZedkoBedkZ    e    r®ddl
Z
ddl Z ddl Z ddl Z ej e e e e¡d¡¡¡ddlmZe jdd„ƒZdd
d „ZnddlmZdd lmZmZed d dddddddZGdd„deƒZGdd„dƒZdd„Ze ¡D]$\Z Z!e!D]Z"e#ee e"ƒƒqqe    rDe
 $¡dS)éN)ÚsysÚpath)ÚDistutilsErrorÚ__main__z..)Ú CCompilerOptc    os(tj||Ž}z
|VW5t |¡XdS©N)ÚtempfileÚmkdtempÚshutilÚrmtree)ÚargsÚkwargsÚtmpdir©rú_d:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\numpy/distutils/tests/test_ccompiler_opt.pyÚtempdir s 
rÚcCs|s t|ƒ‚dSr)ÚAssertionError)ÚexprÚmsgrrrÚassert_sr)rr)ÚgccÚclangÚiccÚiccwÚmsvc)rr)r)Úx86Úx64Úppc64Úppc64leÚarmhfÚaarch64Ús390xZnoarchc@sDeZdZdZddd„Zdd„Zdd„Zdd    „Zed
d œd d „ƒZ    dS)ÚFakeCCompilerOptrcOs ||_||_tj|df|ŽdSr)Úfake_trap_filesÚfake_trap_flagsrÚ__init__)ÚselfÚ
trap_filesÚ
trap_flagsr r rrrr&)szFakeCCompilerOpt.__init__cCst d¡ |j|j| ¡¡S)NzŠ            <<<<
            march    : {}
            compiler : {}
            ----------------
            {}
            >>>>
        )ÚtextwrapÚdedentÚformatÚcc_marchÚcc_nameÚreport©r'rrrÚ__repr__.s
 
ùzFakeCCompilerOpt.__repr__cKs†t|tƒst‚t|tƒst‚|jrD|D]}t |j|¡r&| d¡q&|jrl|D]}t |j|¡rN| d¡qNt|d     |¡gt
|ƒƒS)Nz%source is trapped by a fake interfacez#flag is trapped by a fake interfaceú ) Ú
isinstanceÚlistrr$ÚreÚmatchZ
dist_errorr%ÚzipÚjoinÚlen)r'ÚsourcesÚflagsr ÚsrcÚfrrrÚ dist_compile8s  zFakeCCompilerOpt.dist_compilecCstjSr)r#Ú    fake_infor0rrrÚ    dist_infoFszFakeCCompilerOpt.dist_infoF)ÚstderrcGsdSrr)rAr rrrÚdist_logIszFakeCCompilerOpt.dist_logN)rr)
Ú__name__Ú
__module__Ú __qualname__r?r&r1r>r@Ú staticmethodrBrrrrr#'s
 
r#c@sêeZdZdZdZdd„Zdd„Zdd„Zdd    „Zd
d „Z    d d „Z
dd„Z d5dd„Z d6dd„Z d7dd„Zifdd„Zifdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„ZdS)8Ú_Test_CCompilerOptNcCsdt_d|_dS)NT)r#Z conf_nocacheÚ_optr0rrrÚ setup_classQsz_Test_CCompilerOpt.setup_classcOs|j|jdft_t||ŽS©Nr)ÚarchÚccr#r?)r'r r rrrÚnoptUsz_Test_CCompilerOpt.noptcCs|js| ¡|_|jSr)rHrMr0rrrÚoptYs
z_Test_CCompilerOpt.optcCs
| ¡jSr)rNr-r0rrrÚmarch^sz_Test_CCompilerOpt.marchcCs
| ¡jSr)rNr.r0rrrr.asz_Test_CCompilerOpt.cc_namec
sx|t_|j| dd¡| dd¡| dd¡| dd¡d}tƒÂ}tj |d    ¡}t|d
ƒ}|     |¡W5QRXg‰i}| 
|g¡}    |    D]t\}
} t  |
¡  d ¡d d …} t | ƒ} | dkr¼d} n,| d krÒ| d ¡} ndd | ¡d ¡} ˆ | ¡| || <q†W5QRX|j|\}}|r$|dgn|}dd„|Dƒ}t |ƒt ˆƒks`t‡fdd„|Dƒƒsptd|ˆfƒ‚||fS)NÚbaselineÚminÚdispatchÚmaxr(rr)©Ú cpu_baselineÚ cpu_dispatchr(r)ztest_targets.cÚwÚ.ééÿÿÿÿrú(r2ú)cSs,g|]$}t|tƒr$dd |¡dn|‘qS)r[r2r\)r3Útupler8)Ú.0ÚtarrrrÚ
<listcomp>„sÿz2_Test_CCompilerOpt.get_targets.<locals>.<listcomp>c3s|]}|ˆkVqdSrr)r^Út©ZgtargetsrrÚ    <genexpr>ˆsz1_Test_CCompilerOpt.get_targets.<locals>.<genexpr>zM'sources_status' returns different targets than the compiled targets
%s != %s)r#Zconf_target_groupsrMÚgetrÚosrr8ÚopenÚwriteZ try_dispatchÚbasenameÚsplitr9ÚupperÚappendZsources_statusÚallr)r'ÚtargetsÚgroupsr rNrÚfiler=ZgflagsZ fake_objectsÚsourcer;ZgtarZglenZ has_baselinerrbrÚ get_targetsdsH
 
 
 
ü   
þ*ÿÿz_Test_CCompilerOpt.get_targetsc     Ksòtddddd}| ¡}| ¡}| ||¡}| ||¡}|||||d||d||d||d|fD]}| |d¡}|dk    rlqŠql|rît|tƒrÈ| ¡D]$\}    }
|
dd…dkr |
d    ||    <q n&t|tƒsÖt‚|dd…dkrî|d    7}|S)
Nrrr r)rrr!rÚ_rZz)}$?\.+*ú$)    ÚdictrOr.rdÚpopr3ÚitemsÚstrr) r'r Z
map2originrOr.Z    map_marchZmap_ccÚkeyÚregexÚkÚvrrrÚ    arg_regexs>ü  
 
 
 
û 
z_Test_CCompilerOpt.arg_regexrcKsŒ|jf|Ž}|dkrdS|j||| dd¡| dd¡d}d | ¡¡}|sht|ƒdkrdtd|ƒ‚dSt ||tj    ¡sˆtd||fƒ‚dS)    Nr(rr)rTr2rú!expected empty features, not "%s"z%dispatch features "%s" not match "%s")
r|rMrdr8Úcpu_dispatch_namesr9rr5r6Ú
IGNORECASE)r'rRrPr r6rNÚfeaturesrrrÚexpect¯s( 
 
ý ÿ
ÿz_Test_CCompilerOpt.expectcKsŒ|jf|Ž}|dkrdS|j||| dd¡| dd¡d}d | ¡¡}|sht|ƒdkrdtd|ƒ‚dSt ||tj    ¡sˆtd||fƒ‚dS)    Nr(rr)rTr2rr}z%baseline features "%s" not match "%s")
r|rMrdr8Úcpu_baseline_namesr9rr5r6r)r'rPrRr r6rNr€rrrÚexpect_baselineÄs( 
 
ý ÿ
ÿz"_Test_CCompilerOpt.expect_baselinecKsˆ|jf|Ž}|dkrdS|j||| dd¡| dd¡d}d | ¡¡}|sht|ƒdkrdtd|ƒ‚dSt ||¡s„td||fƒ‚dS)    Nr(rr)rTr2rzexpected empty flags not "%s"zflags "%s" not match "%s")    r|rMrdr8Zcpu_baseline_flagsr9rr5r6)r'rPrRr r6rNr;rrrÚ expect_flagsÙs( 
 
ý ÿ 
ÿz_Test_CCompilerOpt.expect_flagscKs€|jf|Ž}|dkrdS|jf||dœ|—Ž\}}d |¡}|s\t|ƒdkrXtd|ƒ‚dSt ||tj¡s|td||fƒ‚dS)N©rmrnr2rz expected empty targets, not "%s"ztargets "%s" not match "%s")r|rqr8r9rr5r6r)r'rmrnr r6rrrrrÚexpect_targetsîs 
 ÿ
ÿz!_Test_CCompilerOpt.expect_targetsc
Ks¤|jf|Ž}|dkrdSt|tƒs&t‚|j||d\}}| ¡D]^\}}||kr\td|ƒ‚||}    |s€t|    ƒdkr€td|ƒ‚t ||    ¡s@td||    |fƒ‚q@dS)Nr…zexpected to find target "%s"rz+expected to find empty flags in target "%s"z"%s" flags "%s" not match "%s")    r|r3rtrrqrvr9r5r6)
r'rmrnr Z
match_dictrrZ    tar_flagsZ    match_tarZ match_flagsr;rrrÚexpect_target_flagsÿs( ÿ ÿ  ÿz&_Test_CCompilerOpt.expect_target_flagscCs€|jdkrdnd}|jdkr dnd}| ¡}tt|d|jƒƒtt|d|ƒ ƒtt|d|jƒƒtt|d|ƒ ƒdS)NrrrrZcc_on_Zcc_is_)rKrLrNrÚgetattr)r'Z
wrong_archZwrong_ccrNrrrÚtest_interfacesz!_Test_CCompilerOpt.test_interfacecCsHdD]>\}}|j||d}t| ¡ƒdks.t‚t| ¡ƒdkst‚qdS)N))rÚnonerJ)z
none +nonez none - none)z    none -maxz    min - max)z +vsx2 -VSX2zvsx avx2 avx512f -max)z#max -vsx - avx + avx512f neon -MAX z+min -min + max -max -vsx + avx2 -avx2 +NONE©rUrVr)rMr9r‚rr~)r'rPrRrNrrrÚtest_args_emptys     z"_Test_CCompilerOpt.test_args_emptyc    CsR| ¡dkrdSdD]8\}}z|j||dtdƒ‚Wqtk
rJYqXqdS)NÚunknown))zunkown_feature - max +minzunknown max min)z#avx2z$vsxr‹z+excepted an exception for invalid arguments)rOrMrr)r'rPrRrrrÚtest_args_validation-s   z'_Test_CCompilerOpt.test_args_validationcCsT|jdddddd|jddd    d
dd|jd d dddd |jd d dddd dS)Nz sse vsx neonÚsseÚvsxÚneonr)rrr rz)sse41 avx avx2 vsx2 vsx3 neon_vfpv4 asimdzsse41 avx avx2ú    vsx2 vsx3zneon_vfpv4 asimdz sse neon vsx)rPrrr zavx2 vsx3 asimdhp)rr0rrrÚ    test_skip;s8þûþþz_Test_CCompilerOpt.test_skipcCs®|jddddddD]@\}}d||f}|j|d|||d    |j|d
|||d    qd D]&}|D]}|j|d d  |¡dqdq\|jddddD]}|j|ddq–dS)Nzfma3 avx2 asimd vsx3zsse .* sse41 .* fma3.*avx2z vsx vsx2 vsx3zneon neon_fp16 neon_vfpv4 asimd)rrr )©Zfma3Úavx2)Úavx512fÚavx512cdz.* sse42 .* %s .*%s$z.* sse42 .* %s$)Úx86_gccÚx86_iccÚx86_iccwz .* avx .* %s$)r”)r–r—Z
avx512_skxz.*%sr2)Úx86_msvcrúvsx vsx2)r)r‘Z    neon_fp16Z
neon_vfpv4Úasimd)r!)rƒr8)r'Zf0Úf1Zdiffr=ÚffrrrÚ test_impliesSs4û  þþ ÿ
z_Test_CCompilerOpt.test_impliesc CsdD]z}|dkr| ¡dkrq|j|dddddd|j|ddd    d
ddd d |j|d ddddd|j|ddddddddq|jddddddddd|jdddddz6|jddd d d d d!| ¡d"kràtd#| ¡ƒ‚Wn,tk
r| ¡d"kr
td$ƒ‚YnXdS)%N)rSÚnativer¡rz.*cpu_(sse|vsx|neon|vx).cr)r(rrr r"z".*cpu_(sse3|vsx2|neon_vfpv4|vxe).czsse sse2rzneon neon_fp16Úvx)r(rrr r!rr"z.*cpu_(popcnt|vsx3).cz sse .* sse41rœzneon 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 .*zvsx vsx2 vsx3 vsx4.*z vx vxe vxe2.*)r˜r™ršr›r rr"rQz sse sse2 sse3zneon neon_fp16 .* asimd)rrr r!rrr"z.*cpu_(sse2|vsx2).c)r(rrz".*(-march=native|-xHost|/QxHost).*ú.*)r)rrr r"rúexcepted an exception for %súexcepted no exceptions)r.rrOrr)r'ÚorrrÚtest_args_options|s‚þýü÷ ýþþ 
ÿz$_Test_CCompilerOpt.test_args_optionsc CsŠ|jdddd| ¡dkrdndddddd    d

|jd dd d |jdddd|jddd|jddd|jddd|jddddS)Nz'sse sse2 vsx vsx2 neon neon_fp16 vx vxez -msse -msse2z
/arch:SSE2rrz -mcpu=power8z-maltivec -mvsx -mpower8-vectorz"-mfpu=neon-fp16 -mfp16-format=ieeez-mzvector -march=arch12)    r˜r™ršr›Z    ppc64_gccZ ppc64_clangÚ    armhf_gccr!r"rz;-mfp16-format=ieee -mfpu=neon-fp-armv8 -march=armv8-a\+simd)r!r©Zasimdhpz-march=armv8.2-a\+fp16z=-mfp16-format=ieee -mfpu=neon-fp-armv8 -march=armv8.2-a\+fp16)Ú aarch64_gccr©Zasimddpz-march=armv8.2-a\+dotprod)rªZasimdfhmz-march=armv8.2-a\+fp16\+fp16fmlzasimddp asimdhp asimdfhmz(-march=armv8.2-a\+dotprod\+fp16\+fp16fmlr£z-mzvector -march=arch13)r")r„rOr0rrrÚ
test_flags´sL÷ ýýÿþþþz_Test_CCompilerOpt.test_flagsc    CsldD]b}z4|j|ddddd| ¡dkr:td| ¡ƒ‚Wqtk
rd| ¡dkr`tdƒ‚YqXqdS)N)zbla 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)rr rr"rr¥r¦)r†rOrr©r'rmrrrÚtest_targets_exceptionsÛs þ 
ÿ z*_Test_CCompilerOpt.test_targets_exceptionsc    Cs$dD]}|j|ddddddqdS)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)rrr r"r©r†r¬rrrÚtest_targets_syntaxùsÿz&_Test_CCompilerOpt.test_targets_syntaxc Csh|jddddddd|jdd    d
d d d dd|jdd    ddd ddd|jdd    ddddddddd
dS)NzÑ
            /*@targets
                sse sse2 sse41 avx avx2 avx512f
                vsx vsx2 vsx3 vsx4
                neon neon_fp16 asimdhp asimddp
                vx vxe vxe2
            */
            zavx vsx2 asimd vx vxeú avx512f avx2zasimddp asimdhpz    vsx4 vsx3Úvxe2)rPrr rr"z»
            /*@targets
                sse41 avx avx2 avx512f
                vsx2 vsx3 vsx4
                asimd asimdhp asimddp
                vx vxe vxe2
            */
            rz"sse41 avx2 vsx2 asimd asimddp vxe2z
avx2 sse41ú asimddp asimdZvsx2)rPrRrr rr"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 neonzvxe vx)rPr(rrr 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 sse2zavx512cd avx2 avx sse2z vsx3 vsx2 vsxú    vsx3 vsx2z8asimdfhm asimddp asimdhp asimd neon_vfpv4 neon_fp16 neonzasimdfhm asimddp asimdhp asimd)    rPr˜r›r™ršrrr r!r®r0rrrÚ test_targetssLõö ôïz_Test_CCompilerOpt.test_targetsc
Cs¾|jdddddddd|jd    d
d d d dd|jdddd| ¡dkrJdnddddddD]2}|jd|ddiddiddiddiddidq\|jdddiddidd idd!iddiddS)"NzÞ
            /*@targets
                $keep_baseline
                sse2 sse42 avx2 avx512f
                vsx2 vsx3
                neon neon_vfpv4 asimd asimddp
                vx vxe vxe2
            */
            zsse41 avx2 vsx2 asimd vsx3 vxezavx512f avx2 sse42 sse2r³zasimddp asimd neon_vfpv4 neonr²z vxe2 vxe vx)rPrrr r!r"zæ
            /*@targets
                $keep_baseline $keep_sort
                avx512f sse42 avx2 sse2
                vsx2 vsx3
                asimd neon neon_vfpv4 asimddp
                vxe vxe2
            */
            zavx512f sse42 avx2 sse2r’zasimd neon neon_vfpv4 asimddpz asimd asimddpzvxe vxe2)rrr r!r"zÜ
            /*@targets
                $keep_baseline $keep_sort $autovec
                avx512f avx2 sse42 sse41 sse2
                vsx3 vsx2
                asimddp asimd neon_vfpv4 neon
            */
            zavx512f avx2 sse42 sse41 sse2rzavx512f avx2 sse2r°)r˜r™ršr›rr r!)z$maxoptz$autovecz/*@targets baseline %s */rPz.*-O3.*z.*/O3.*z.*/O2.*r¤)rrrrrz/*@targets baseline $werror */z .*-Werror.*z .*/Werror.*z.*/WX.*)r†rOr‡)r'ÚpolicyrrrÚtest_targets_policies]s\    ð    ñ
ÿïüüz(_Test_CCompilerOpt.test_targets_policiesc    Cs>|jdtdddddd|jdtd    d
d d d dddddS)NzK
            /*@targets $keep_baseline baseline #test_group */
            zˆ
                    $keep_baseline
                    asimddp sse2 vsx2 avx2 vsx3
                    avx512f asimdhp
                )Z
test_groupzavx512f avx2 sse2 baselinezvsx3 vsx2 baselinezasimddp asimdhp baseline)rnrrr 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_2zavx512f avx2 avx sse42 sse41r³Úvsx3zasimdfhm asimddp asimdzasimdfhm asimddp)rnrrrr r!)r†rtr0rrrÚtest_targets_groups©s*ÿó    üèz&_Test_CCompilerOpt.test_targets_groupscCsP|jdddd|jdddddd    |jd
d ddd d |jdddddddS)Nzm
            /*@targets
                (avx512_clx avx512_cnl) (asimdhp asimddp)
            */
            z\(avx512_clx avx512_cnl\)z\(asimdhp asimddp\))rr zË
            /*@targets
                f16c (sse41 avx sse42) (sse3 avx2 avx512f)
                vsx2 (vsx vsx3 vsx2)
                (neon neon_vfpv4 asimd asimdhp asimddp)
            */
            zavx512f f16c avxr³r·)rrrr 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±)rrr r"zz
            /*@targets $keep_sort
                fma3 avx2 (fma3 avx2) (avx2 fma3) avx2 fma3
            */
            zfma3 avx2 \(fma3 avx2\)r•)r˜r™ršr›r®r0rrrÚtest_targets_multiÕs4ù
õôøz%_Test_CCompilerOpt.test_targets_multi)r)r)r)rCrDrErKrLrIrMrNrOr.rqr|rrƒr„r†r‡r‰rŒrŽr“r r¨r«r­r¯r´r¶r¸r¹rrrrrGMs6,
 
 
      )8'$@L,rGcCs@tr"t d¡j|d|||dSt 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()
    rr)Ú
class_namerKrLzo    class TestCCompilerOpt_{class_name}(_Test_CCompilerOpt):
        arch = '{arch}'
        cc   = '{cc}'
    )Ú is_standaloner*r+r,)rKrLrrrÚnew_tests
 
ø
 
 
ûr¼)r)%r5r*rerrÚdistutils.errorsrrCÚ __package__r»ZunittestÚ
contextlibrr
rkÚabspathr8ÚdirnameÚ__file__Z ccompiler_optrÚcontextmanagerrrZnumpy.distutils.ccompiler_optZ numpy.testingrtZarch_compilersr#rGr¼rvrKZ    compilersrLÚexecÚmainrrrrÚ<module>sF    
  ø &@