hyb
2026-01-09 4cb426cb3ae31e772a09d4ade5b2f0242aaeefa0
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
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
Ë
Kñúh~pãó¢—ddlZddlZddlZddlZddlZddlZddlmZddlm    Z    ddl
Z
ddl m Z ddlmZddlmZd„Zed    d
«ZdQd „Ze
j*d ¬ «d„«Ze
j*d ¬ «d„«Ze
j*d ¬ «d„«Ze
j*d ¬ «d„«Ze
j*d ¬ «d„«Ze
j*d ¬ «d„«Zd„Zd„Zd„Zd„Zd„Z d„Z!e
jDjGejHdkd¬«d„«Z%e
jDjGejL«dk7xsejHdkd¬«d „«Z'e
jDjPd!„«Z)d"„Z*d#„Z+d$„Z,d%„Z-d&„Z.d'„Z/d(„Z0d)„Z1d*„Z2d+„Z3d,„Z4d-„Z5d.„Z6d/„Z7e
jDjqd0¬«d1„«Z9d2„Z:d3„Z;d4„Z<d5„Z=d6„Z>d7„Z?d8„Z@d9„ZAd:„ZBe
jDjqd0¬«d;„«ZCe
jDjGejL«dk7xsejHdkd<¬«d=„«ZDe
jDjGejL«dk7xsejHdkd<¬«d>„«ZEd?„ZFd@„ZGdA„ZHdB„ZIdC„ZJdD„ZKdE„ZLdF„ZMdG„ZNdH„ZOdI„ZPdJ„ZQdK„ZRdL„ZSdM„ZTdN„ZUdO„ZVdP„ZWy)RéN)Ú
namedtuple)ÚPath)Úmain)Ú NOGIL_BUILDé)Úutilcól—tj«stjd«yt    «y)Nz$CLI command needs a Fortran compiler)rÚhas_fortran_compilerÚpytestÚskipÚf2pycli©óúOH:\Change_password\venv_build\Lib\site-packages\numpy/f2py/tests/test_f2py2e.pyÚcompiler_check_f2pyclirs €Ü × $Ñ $Ô &܏ ‰ Ð:Õ;䍠   rÚPPathsz(finp, f90inp, pyf, wrap77, wrap90, cmodfc ó—t|«}t|jd«|jd«|jd«|j|›d«|j|›d«|j|›d«¬«S)axTakes in a temporary file for testing and returns the expected output and input paths
 
    Here expected output is essentially one of any of the possible generated
    files.
 
    ..note::
 
         Since this does not actually run f2py, none of these are guaranteed to
         exist, and module names are typically incorrect
 
    Parameters
    ----------
    fname_inp : str
                The input filename
    mname : str, optional
                The name of the module, untitled by default
 
    Returns
    -------
    genp : NamedTuple PPaths
            The possible paths which are generated, not all of which exist
    z.fz.f90ú.pyfz-f2pywrappers.fz-f2pywrappers2.f90úmodule.c)ÚfinpÚf90inpÚpyfÚwrap77Úwrap90Úcmodf)rrÚ with_suffixÚ    with_name)Ú    fname_inpÚmnameÚbpaths   rÚ get_io_pathsr!%s~€ô. ‹O€EÜ Ø × Ñ ˜tÓ $Ø× Ñ  Ó(Ø × Ñ ˜fÓ %؏‰ % ¨Ð8Ó9؏‰ % Ð(:Ð;Ó<؏o‰o   xÐ0Ó1ô  ðrÚsession)Úscopecóž—tjdddd«j«}|j«dz }|j    |d¬«|S)ú'Generates a single f90 file for testingÚtestsÚsrcÚcliz hiworld.f90z    hello.f90Úascii©Úencoding©rÚgetpathÚ    read_textÚ getbasetempÚ
write_text©Útmpdir_factoryÚfdatÚfns   rÚhello_world_f90r5LsI€ô <‰<˜ ¨¨}Ó =× GÑ GÓ I€DØ    ×    #Ñ    #Ó    %¨ Ñ    3€B؇MM$ €MÔ)Ø €Ircóž—tjdddd«j«}|j«dz }|j    |d¬«|S)z(F90 file for testing warnings in gh23598r&r'Ú crackfortranzgh23598Warn.f90r)r*r,r1s   rÚ gh23598_warnr8UsK€ô <‰<˜ ¨Ð8IÓ J× TÑ TÓ V€DØ    ×    #Ñ    #Ó    %Ð(9Ñ    9€B؇MM$ €MÔ)Ø €Ircóž—tjdddd«j«}|j«dz }|j    |d¬«|S)z8F90 file for testing disallowed CLI arguments in ghff819r&r'r(z gh_22819.pyfr)r*r,r1s   rÚ gh22819_clir:^sI€ô <‰<˜ ¨¨~Ó >× HÑ HÓ J€DØ    ×    #Ñ    #Ó    %¨Ñ    6€B؇MM$ €MÔ)Ø €Ircóž—tjdddd«j«}|j«dz }|j    |d¬«|S)ú'Generates a single f77 file for testingr&r'r(zhi77.fzhello.fr)r*r,r1s   rÚhello_world_f77r=gsI€ô <‰<˜ ¨¨xÓ 8× BÑ BÓ D€DØ    ×    #Ñ    #Ó    %¨    Ñ    1€B؇MM$ €MÔ)Ø €Ircóž—tjdddd«j«}|j«dz }|j    |d¬«|S)r<r&r'Ú return_realzfoo77.fzfoo.fr)r*r,r1s   rÚ retreal_f77r@psI€ô <‰<˜ ¨ °yÓ A× KÑ KÓ M€DØ    ×    #Ñ    #Ó    %¨Ñ    /€B؇MM$ €MÔ)Ø €Ircó6—tjdddd«j«}tjdddd«j«}|j«dz }|j«dz }|j    |d¬    «|j    |d¬    «|S)
r%r&r'Úf2cmapzisoFortranEnvMap.f90z .f2py_f2cmapz
f2cmap.f90Úmapfiler)r*r,)r2r3rBr4Úfmaps     rÚ
f2cmap_f90rExsŠ€ô <‰<˜ ¨Ð2HÓ I× SÑ SÓ U€DÜ \‰\˜' 5¨(°NÓ C× MÑ MÓ O€FØ    ×    #Ñ    #Ó    %¨ Ñ    4€BØ × %Ñ %Ó '¨)Ñ 3€D؇MM$ €MÔ)؇OOF W€OÔ-Ø €Ircó¨—t|«}|jtdd|›j««t    j
|j «5t«|j jd«Dcgc]}|j«sŒ|j‘Œ!}}d|vsJ‚d|vsJ‚d|vsJ‚d|vsJ‚    ddd«ycc}w#1swYyxYw)    zÝCheck that module names are handled correctly
    gh-22819
    Essentially, the -m name cannot be used to import the module, so the module
    named in the .pyf needs to be used instead
 
    CLI :: -m and a .pyf file
    Úargvú f2py -m blah Ú*z blahmodule.czblah-f2pywrappers.fztest_22819-f2pywrappers.fztest_22819module.cN) rÚsetattrÚsysÚsplitrÚ    switchdirÚparentr ÚrglobÚis_fileÚname)Úcapfdr:Ú monkeypatchÚipathÚitemÚ    gen_pathss      rÚtest_gh22819_clirW‡sȀô Ó €EØ×Ñœ˜V }°U°GÐ%<×%BÑ%BÓ%DÔEÜ     ‰˜Ÿ ™ Ó    %ñ1ÜŒ    Ø+0¯<©<×+=Ñ+=¸cÓ+BÖU 4ÀdÇlÁlÅnT—Y“YÐUˆ    ÐUØ YÑ.Ð.Ð.Ø$¨IÑ5Ð5Ð5Ø*¨iÑ7Ð7Ð7Ø# yÑ0Ð0Ñ0÷ 1ð1ùâU÷1ð1ús$Á(CÁ;CÂCÂCÃCÃCcóH—t|«}|jtdd|›dj««t    j
|j «5tjtd¬«5t«ddd«ddd«y#1swYŒxYw#1swYyxYw)zBOnly one .pyf file allowed
    gh-22819
    CLI :: .pyf files
    rGrHz
 hello.pyfzOnly one .pyf file per call)ÚmatchN) rrJrKrLrrMrNr ÚraisesÚ
ValueErrorr )rRr:rSrTs    rÚtest_gh22819_many_pyfr\šs…€ô
Ó €EØ×Ñœ˜V }°U°G¸:Ð%F×%LÑ%LÓ%NÔOÜ     ‰˜Ÿ ™ Ó    %ñÜ ]‰]œ:Ð-JÔ Kñ    Ü ŒI÷    ÷ð÷    ð    ú÷ðús$ÁBÁ0 B Á;B B    ÂBÂB!cóF—t|d¬«}|j}|jtdd|›dj    ««t j |j«5t«|jj«}d|vsJ‚    ddd«y#1swYyxYw)NÚtest©rrGúf2py z -m testzintproductf2pywrap, intpr) r!rrJrKrLrrMrNr rr.)rRr8rSÚfoutlrTÚwrappers      rÚtest_gh23598_warnrc¦s‹€Ü ˜¨VÔ 4€EØ L‰L€EØ×ÑÜ ˆVØ
ˆwhÐ×%Ñ%Ó'ô)ô
‰˜Ÿ ™ Ó    %ñ:ÜŒ    Ø—,‘,×(Ñ(Ó*ˆØ*°'Ñ9Ð9Ñ9÷:÷:ñ:ús Á"+BÂB cóˆ—t|«}t|«jdz}|jtdd|›d|›j    ««t j |j«5t«|j«\}}d|vsJ‚t|›«j«sJ‚    ddd«y#1swYyxYw)zIEnsures that a signature file is generated via the CLI
    CLI :: -h
    rrGzf2py -h ú úSaving signatures to fileN) rÚstemrJrKrLrrMrNr Ú
readouterrÚexists)rRr5rSrTÚopathÚoutÚ_s       rÚ test_gen_pyfrm³s®€ô Ó !€EÜ Ó !× &Ñ &¨Ñ /€EØ×Ñœ˜V x°¨w°a¸°wÐ%?×%EÑ%EÓ%GÔHä     ‰˜Ÿ ™ Ó    %ñ)ÜŒ    Ø×!Ñ!Ó#‰ˆˆQØ*¨cÑ1Ð1Ð1ܐugÓ×&Ñ&Ô(Ð(Ñ(÷    )÷)ñ)ús Á.AB8Â8Ccó&—t|«}|jtdd|›j««t    j
|j «5t«|j«\}}d|vsJ‚d|vsJ‚    ddd«y#1swYyxYw)zHEnsures that a signature file can be dumped to stdout
    CLI :: -h
    rGzf2py -h stdout rfzfunction hi() ! in N©    rrJrKrLrrMrNr rh©rRr5rSrTrkrls      rÚtest_gen_pyf_stdoutrqÂsˆ€ô Ó !€EØ×Ñœ˜V °u°gÐ%>×%DÑ%DÓ%FÔGÜ     ‰˜Ÿ ™ Ó    %ñ,ÜŒ    Ø×!Ñ!Ó#‰ˆˆQØ*¨cÑ1Ð1Ð1Ø$¨Ñ+Ð+Ñ+÷    ,÷,ñ,ús Á*BÂBcó®—t|«}|jtdd|›j««t    j
|j «5td«jdd¬«tjt«5t«|j«\}}d|vsJ‚    ddd«ddd«y#1swYŒxYw#1swYyxYw)    zjEnsures that the CLI refuses to overwrite signature files
    CLI :: -h without --overwrite-signature
    rGúf2py -h faker.pyf ú    faker.pyfú    Fake newsr)r*z&Use --overwrite-signature to overwriteN) rrJrKrLrrMrNr0r rZÚ
SystemExitr rh)rRr5rSrTrlÚerrs      rÚtest_gen_pyf_no_overwriterxÏs€ô Ó !€EØ×Ñœ˜VÐ'9¸%¸Ð%A×%GÑ%GÓ%IÔJä     ‰˜Ÿ ™ Ó    %ñCÜ ˆ[Ó×$Ñ$ [¸7Ð$ÔCÜ ]‰]œ:Ó &ñ    CÜ ŒIØ×%Ñ%Ó'‰FˆAˆsØ;¸sÑBÐ BÑB÷    C÷CðC÷    Cð    Cú÷CðCús$Á6C     $B?Â.C Â?C    ÃC à C)éé zPython 3.12 required)Úreasoncó—t|«}|jtdd|›j««t    j
|j «5t«|j«\}}d|vsJ‚    ddd«y#1swYyxYw)z@Check that modules are named correctly
 
    CLI :: defaults
    rGzf2py --backend meson -c zuntitledmodule.cN)    rrJrKrLrrMrNrrhrps      rÚtest_untitled_clir}Þs|€ô Ó !€EØ×Ñœ˜VÐ'?À¸wÐ%G×%MÑ%MÓ%OÔPÜ     ‰˜Ÿ ™ Ó    %ñ)ÜÔ Ø×!Ñ!Ó#‰ˆˆQØ! SÑ(Ð(Ñ(÷)÷)ñ)ús Á$BÂB
ÚLinuxzCompiler and 3.12 requiredc    ó.—d}t||¬«}|j}|jtdd|›d|›j    ««t j |j«5t«|j«\}}d|vsJ‚    ddd«|jtddd    g«t j |j«5t«|j«\}}d
|vsJ‚    ddd«d }|jtdd|›d |›d j    ««t j |j«5t«|j«\}}d|vsJ‚    ddd«y#1swYŒéxYw#1swYŒxYw#1swYyxYw)zqCheck that no distutils imports are performed on 3.12
    CLI :: --fcompiler --help-link --backend distutils
    Úhir_rGr`z -c --fcompiler=gfortran -m z%--fcompiler cannot be used with mesonNÚf2pyz --help-linkzUse --dep for meson buildsÚhi2z -c -m z --backend distutilsz.Cannot use distutils backend with Python>=3.12) r!rrJrKrLrrMrNrrhr )rRr5rSÚMNAMErarTrkrls        rÚ!test_no_py312_distutils_fcompilerr„ìsŠ€ð
€EÜ ˜°Ô 6€EØ L‰L€EØ×ÑÜ ˆVu˜U˜GÐ#?À¸wÐG×MÑMÓOôô
‰˜Ÿ ™ Ó    %ñ>ÜÔ Ø×!Ñ!Ó#‰ˆˆQØ6¸#Ñ=Ð=Ñ=÷>ð×ÑÜ ˆVf˜mÐ,ôô
‰˜Ÿ ™ Ó    %ñ3ÜŒ    Ø×!Ñ!Ó#‰ˆˆQØ+¨sÑ2Ð2Ñ2÷3ð €EØ×ÑÜ ˆVu˜U˜G 7¨5¨'Ð1EÐF×LÑLÓNôô
‰˜Ÿ ™ Ó    %ñGÜŒ    Ø×!Ñ!Ó#‰ˆˆQØ?À3ÑFÐFÑF÷GðG÷>ð>ú÷3ð3ú÷GðGús$Á&$E3à $E?Å$F Å3E<Å?FÆ Fcó´—t|d¬«}|j}d}d}|jtdd|›d|›j    ««t j |j«5t«|j«\}}|j    «D] }    d|    ›d    |vrŒ J‚|j    «D] }
d
|
›d |vrŒ J‚    d d d «y #1swYy xYw) z9Tests that functions can be skipped
    CLI :: skip:
    r^r_út0 t4 t8 sd s8 s4útd s0rGr`z -m test skip: z=buildmodule: Could not found the body of interfaced routine "ú ". Skipping.úConstructing wrapper function "ú"N©
r!rrJrKrLrrMrNr rh) rRr@rSrarTÚtoskipÚ    remainingrkrwÚskeyÚrkeys            rÚtest_f2py_skipr s÷€ô
˜¨FÔ 3€EØ J‰J€EØ  €FØ€IØ×ÑÜ ˆVØ
ˆwo f XÐ.×4Ñ4Ó6ô8ô
‰˜Ÿ ™ Ó    %ñDÜŒ    Ø×#Ñ#Ó%‰ˆˆSØ—L‘L“Nò    ˆDàOÐPTÈvÐUaÐbØòð ðð    ð—O‘OÓ%ò    DˆDØ4°T°F¸!Ð<ÀÒCÐ CÐCñ    D÷D÷DñDúóÁ(9CÂ"CÃCÃCcó´—t|d¬«}|j}d}d}|jtdd|›d|›j    ««t j |j«5t«|j«\}}|j    «D] }    d|    ›d    |vrŒ J‚|j    «D] }
d
|
›d |vrŒ J‚    d d d «y #1swYy xYw) z>Test that functions can be kept by only:
    CLI :: only:
    r^r_r†r‡rGr`z -m test only: ú<buildmodule: Could not find the body of interfaced routine "rˆr‰rŠNr‹) rRr@rSrarTrŒÚtokeeprkrwrŽrs            rÚtest_f2py_onlyr•$sõ€ô ˜¨FÔ 3€EØ J‰J€EØ  €FØ €FØ×ÑÜ ˆVØ
ˆwo f XÐ.×4Ñ4Ó6ô8ô
‰˜Ÿ ™ Ó    %ñDÜŒ    Ø×#Ñ#Ó%‰ˆˆSØ—L‘L“Nò    ˆDàNÈtÈfÐT`ÐaØòð ðð    ð—L‘L“Nò    DˆDØ4°T°F¸!Ð<ÀÒCÐ CÐCñ    D÷D÷DñDúr‘c óÚ—t|d¬«}|j}d}t|«}d}d}    |jtdd|›d|    ›d    |›d
|›j ««t j|j«5t«|j«\}
} |j «D] } d | ›d | vrŒ J‚|j «D] } d | ›d|
vrŒ J‚    ddd«y#1swYyxYw)zfTests that it is possible to return to file processing mode
    CLI :: :
    BUG: numpy-gh #20520
    r^r_r†ztd s0 hiÚblahrGr`ú -m z only: z : r“rˆr‰rŠN) r!rrrJrKrLrrMrNr rh)rRr5r@rSrarTrŒÚipath2r”rrkrwrŽrs              rÚtest_file_processing_switchrš;s€ô ˜¨FÔ 3€EØ J‰J€EØ  €FÜ /Ó "€FØ €FØ €EØ×ÑÜ ØØ
ˆwd˜5˜' ¨¨°°F°8Ð<×BÑBó    
ôô
‰˜Ÿ ™ Ó    %ñDÜŒ    Ø×#Ñ#Ó%‰ˆˆSØ—L‘L“Nò    ˆDàNÈtÈfÐT`ÐaØòð ðð    ð—L‘L“Nò    DˆDØ4°T°F¸!Ð<ÀÒCÐ CÐCñ    D÷D÷DñDúsÁ;9C!Â5C!ÃC!Ã!C*có—d}t||¬«}|j}|jtdd|›d|›j    ««t j |j«5t«ddd«tj|j«sJ‚tj|j«sJ‚y#1swYŒLxYw)zHChecks the generation of files based on a module name
    CLI :: -m
    r€r_rGr`r˜N) r!rrJrKrLrrMrNr rrirr)rRr5rSrƒrarTs      rÚtest_mod_gen_f77rœYsž€ð €EÜ ˜°Ô 6€EØ L‰L€EØ×Ñœ˜V u¨U¨G°4¸°wÐ%?×%EÑ%EÓ%GÔHÜ     ‰˜Ÿ ™ Ó    %ñÜŒ    ÷ô ;‰;u—{‘{Ô #Ð#Ð #ä ;‰;u—|‘|Ô $Ð$Ñ $÷ ðús Á& B<Â<Cc    ó˜—d}t||¬«}|j}|jtdd|›d|›dj    ««t j |j«5t«td«j«5}|j«}d|vsJ‚    d    d    d    «d    d    d    «y    #1swYŒxYw#1swYy    xYw)
zCheck that pyf files are correctly generated with module structure
    CLI :: -m <name> -h pyf_file
    BUG: numpy-gh #20520
    r€r_rGr`r˜z
 -h hi.pyfzhi.pyfzpython module hiN) r!rrJrKrLrrMrNr rÚopenÚread)rRr=rSrƒrarTÚhipyfÚpyfdats        rÚtest_mod_gen_gh25263r¢js·€ð
€EÜ ˜°Ô 6€EØ J‰J€EØ×Ñœ˜V u¨U¨G°4¸°w¸jÐ%I×%OÑ%OÓ%QÔRÜ     ‰˜Ÿ ™ Ó    %ñ0ÜŒ    Ü (‹^×  Ñ  Ó "ð    0 eØ—Z‘Z“\ˆFØ%¨Ñ/Ð /Ñ/÷    0÷0ð0÷    0ð    0ú÷0ð0ús$Á'$C B4Â#CÂ4B=    Â9CÃC    có—t|d¬«}|j}tjd«}tjd«}|j    t
dd|›dj ««tj|j«5t«|j«\}}|j|«€J‚|j|«J‚    ddd«|j    t
dd|›d    j ««tj|j«5t«|j«\}}|j|«J‚|j|«€J‚    ddd«y#1swYŒŸxYw#1swYyxYw)
zHLowers cases by flag or when -h is present
 
    CLI :: --[no-]lower
    r^r_zHI\(\)zhi\(\)rGr`z -m test --lowerNz -m test --no-lower) r!rÚreÚcompilerJrKrLrrMrNr rhÚsearch©    rRr=rSrarTÚcapshiÚcapslorkrls             rÚtest_lower_cmodrªzsV€ô
˜°Ô 7€EØ J‰J€EÜ Z‰Z˜    Ó "€FÜ Z‰Z˜    Ó "€Fà×Ñœ˜V u¨U¨GÐ3CÐ%D×%JÑ%JÓ%LÔMÜ     ‰˜Ÿ ™ Ó    %ñ*ÜŒ    Ø×!Ñ!Ó#‰ˆˆQ؏}‰}˜SÓ!Ð-Ð-Ð-؏}‰}˜SÓ!Ð)Ð)Ñ)÷    *ð ×Ñœ˜VØ ˜wÐ&9Ð:×@Ñ@ÓBôDä     ‰˜Ÿ ™ Ó    %ñ.ÜŒ    Ø×!Ñ!Ó#‰ˆˆQ؏}‰}˜SÓ!Ð)Ð)Ð)؏}‰}˜SÓ!Ð-Ð-Ñ-÷    .ð.÷*ð*ú÷.ð.ús AE/Ä!AE;Å/E8Å;Fc    óB—t|d¬«}|j}tjd«}tjd«}|j    t
dd|›d|j ›dj««tj|j«5t«|j«\}}|j|«€J‚|j|«J‚    d    d    d    «|j    t
dd|›d|j ›d
j««tj|j«5t«|j«\}}|j|«J‚|j|«€J‚    d    d    d    «y    #1swYŒ¬xYw#1swYy    xYw) z^Lowers cases in signature files by flag or when -h is present
 
    CLI :: --[no-]lower -h
    r^r_z    Block: HIz    Block: hirGr`z -h z -m test --overwrite-signatureNz) -m test --overwrite-signature --no-lower)r!rr¤r¥rJrKrrLrrMrNr rhr¦r§s             rÚtest_lower_sigr¬”st€ô
˜°Ô 7€EØ J‰J€Eä Z‰Z˜ Ó %€FÜ Z‰Z˜ Ó %€Fð×ÑÜ ØØ
ˆwd˜5Ÿ9™9˜+Ð%CÐD×JÑJÓLôô
‰˜Ÿ ™ Ó    %ñ*ÜŒ    Ø×!Ñ!Ó#‰ˆˆQ؏}‰}˜SÓ!Ð-Ð-Ð-؏}‰}˜SÓ!Ð)Ð)Ñ)÷    *ð×ÑÜ ØØ
ˆwd˜5Ÿ9™9˜+Ð%NÐOß    ‰‹ô    ô
‰˜Ÿ ™ Ó    %ñ.ÜŒ    Ø×!Ñ!Ó#‰ˆˆQ؏}‰}˜SÓ!Ð)Ð)Ð)؏}‰}˜SÓ!Ð-Ð-Ñ-÷    .ð.÷*ð*ú÷.ð.úsÂAF    Ä;AFÆ    FÆFc
ó6—t|«}d}d}|jtdd|›d|›d|›j««t    j
|j «5t«|j«\}}d|›d|vsJ‚    d    d    d    «y    #1swYy    xYw)
zNEnsures that the build directory can be specified
 
    CLI :: --build-dir
    r—ÚtttmprGúf2py -m rez  --build-dir zWrote C/API module "rŠNro)rRr5rSrTrÚodirrkrls        rÚtest_build_dirr±»sŸ€ô
Ó !€EØ €EØ €DØ×Ñœ˜VØ" 5 '¨¨5¨'°¸t¸fÐE×KÑKÓMôOô
‰˜Ÿ ™ Ó    %ñ8ÜŒ    Ø×!Ñ!Ó#‰ˆˆQØ& u g¨RÐ0°CÑ7Ð7Ñ7÷8÷8ñ8ús Á(BÂBcóT—t|«}|jtdd|›dj««t    j
|j «5td«jdd¬«t«|j«\}}d|vsJ‚    d    d    d    «y    #1swYy    xYw)
zXEnsures that the build directory can be specified
 
    CLI :: --overwrite-signature
    rGrsz --overwrite-signaturertrur)r*rfN)
rrJrKrLrrMrNr0r rhrps      rÚtest_overwriter³Ìsœ€ô
Ó !€EØ×ÑÜ ˆVØ
˜U˜GÐ#9Ð:×@Ñ@ÓBôDô
‰˜Ÿ ™ Ó    %ñ2Ü ˆ[Ó×$Ñ$ [¸7Ð$ÔCÜŒ    Ø×!Ñ!Ó#‰ˆˆQØ*¨cÑ1Ð1Ñ1÷    2÷2ñ2ús ÁABÂB'c    ó°—t|«}d}|jtdd|›d|›dj««t    j
|j «5t«|j«\}}d|vsJ‚t|›d«j«5}d|j«vsJ‚    d    d    d    «d    d    d    «y    #1swYŒxYw#1swYy    xYw)
zJEnsures that TeX documentation is written out
 
    CLI :: --latex-doc
    r—rGr¯rez  --latex-docúDocumentation is saved to fileú
module.texú\documentclassN© rrJrKrLrrMrNr rhržrŸ©rRr5rSrTrrkrlÚotexs        rÚ test_latexdocr»ÝsՀô
Ó !€EØ €EØ×Ñœ˜VØ" 5 '¨¨5¨'°Ð>×DÑDÓFôHô
‰˜Ÿ ™ Ó    %ñ4ÜŒ    Ø×!Ñ!Ó#‰ˆˆQØ/°3Ñ6Ð6Ð6Ü UG˜:Ð&Ó '× ,Ñ ,Ó .ð    4°$Ø$¨¯    ©    « Ñ3Ð 3Ñ3÷    4÷    4ð4÷    4ð    4ú÷    4ð4ús%ÁAC ÂCÂ/C ÃC        ÃC à Cc    ó&—t|«}d}|jtdd|›d|›dj««t    j
|j «5t«|j«\}}d|vsJ‚    ddd«y#1swYyxYw)zMEnsures that TeX documentation is written out
 
    CLI :: --no-latex-doc
    r—rGr¯rez --no-latex-docrµNro©rRr5rSrTrrkrls       rÚtest_nolatexdocr¾ïs€ô
Ó !€EØ €EØ×Ñœ˜VØ" 5 '¨¨5¨'°ÐA×GÑGÓIôKô
‰˜Ÿ ™ Ó    %ñ;ÜŒ    Ø×!Ñ!Ó#‰ˆˆQØ/°sÑ:Ð:Ñ:÷;÷;ñ;úó Á$BÂBc    ó²—t|«}d}|jtdd|›d|›dj««t    j
|j «5t«|j«\}}d|vsJ‚td|›d«j«5}d    |j«vsJ‚    d
d
d
«d
d
d
«y
#1swYŒxYw#1swYy
xYw) zžEnsures that truncated documentation is written out
 
    TODO: Test to ensure this has no effect without --latex-doc
    CLI :: --latex-doc --short-latex
    r—rGr¯rez --latex-doc --short-latexrµú./r¶r·Nr¸r¹s        rÚtest_shortlatexrÂÿsـô Ó !€EØ €EØ×ÑÜ ØØ
5'˜˜5˜'Ð!;Ð<×BÑBÓDôô
‰˜Ÿ ™ Ó    %ñ8ÜŒ    Ø×!Ñ!Ó#‰ˆˆQØ/°3Ñ6Ð6Ð6Ü Bug˜ZÐ(Ó )× .Ñ .Ó 0ð    8°DØ$¨D¯I©I«KÑ7Ð 7Ñ7÷    8÷    8ð8÷    8ð    8ú÷    8ð8úó%ÁAC ÂCÂ0C ÃC
    ÃC à Cc    ó²—t|«}d}|jtdd|›d|›dj««t    j
|j «5t«|j«\}}d|vsJ‚td|›d«j«5}d    |j«vsJ‚    d
d
d
«d
d
d
«y
#1swYŒxYw#1swYy
xYw) zIEnsures that RsT documentation is written out
 
    CLI :: --rest-doc
    r—rGr¯rez  --rest-docú#ReST Documentation is saved to filerÁz module.restz.. -*- rest -*-Nr¸)rRr5rSrTrrkrlÚorsts        rÚ test_restdocrÇs׀ô
Ó !€EØ €EØ×Ñœ˜VØ" 5 '¨¨5¨'°Ð=×CÑCÓEôGô
‰˜Ÿ ™ Ó    %ñ5ÜŒ    Ø×!Ñ!Ó#‰ˆˆQØ4¸Ñ;Ð;Ð;Ü Bug˜[Ð)Ó *× /Ñ /Ó 1ð    5°TØ%¨¯©«Ñ4Ð 4Ñ4÷    5÷    5ð5÷    5ð    5ú÷    5ð5úrÃc    ó&—t|«}d}|jtdd|›d|›dj««t    j
|j «5t«|j«\}}d|vsJ‚    ddd«y#1swYyxYw)zLEnsures that TeX documentation is written out
 
    CLI :: --no-rest-doc
    r—rGr¯rez --no-rest-docrÅNror½s       rÚtest_norestexdocrÉ's‘€ô
Ó !€EØ €EØ×Ñœ˜VØ" 5 '¨¨5¨'°Ð@×FÑFÓHôJô
‰˜Ÿ ™ Ó    %ñ@ÜŒ    Ø×!Ñ!Ó#‰ˆˆQØ4¸CÑ?Ð?Ñ?÷@÷@ñ@úr¿c    ó€—t|«}d}|jtdd|›d|›dj««t    j
|j «5t«td|›d«j«5}d|j«vsJ‚    d    d    d    «d    d    d    «y    #1swYŒxYw#1swYy    xYw)
zIEnsures that debugging wrappers are written
 
    CLI :: --debug-capi
    r—rGr¯rez  --debug-capirÁrz#define DEBUGCFUNCSN©
rrJrKrLrrMrNr ržrŸ)rRr5rSrTrÚocmods      rÚtest_debugcapirÍ7s·€ô
Ó !€EØ €EØ×Ñœ˜VØ" 5 '¨¨5¨'°Ð?×EÑEÓGôIô
‰˜Ÿ ™ Ó    %ñ:ÜŒ    Ü Bug˜XÐ&Ó '× ,Ñ ,Ó .ð    :°%Ø)¨U¯Z©Z«\Ñ9Ð 9Ñ9÷    :÷:ð:÷    :ð    :ú÷:ð:ús$Á(B4ÂB(ÂB4Â(B1    Â-B4Â4B=z2Consistently fails on CI; noisy so skip not xfail.c    óâ—t|«}d}|jtdd|›d|›dj««t    j
|j «5t«tjtj›d«}tj|dd¬    «}d
}tjd «}|j|k(sJ‚|j|k(sJ‚    d d d «y #1swYy xYw) zEEnsures that debugging wrappers work
 
    CLI :: --debug-capi -c
    r—rGr¯rez -c --debug-capiú -c "import blah; blah.hi()"TúUTF-8©Úcapture_outputr+ú  Hello World
a debug-capi:Python C/API function blah.hi()
debug-capi:float hi=:output,hidden,scalar
debug-capi:hi=0
debug-capi:Fortran subroutine `f2pywraphi(&hi)'
debug-capi:hi=0
debug-capi:Building return value.
debug-capi:Python C/API function blah.hi: successful.
debug-capi:Freeing memory.
        N)rrJrKrLrrMrNr ÚshlexÚ
executableÚ
subprocessÚrunÚtextwrapÚdedentÚstdoutÚstderr)r5rSrTrÚcmd_runÚroutÚeoutÚeerrs        rÚtest_debugcapi_bldràGsـô Ó !€EØ €EØ×Ñœ˜VØ" 5 '¨¨5¨'Ð1AÐB×HÑHÓJôLô
‰˜Ÿ ™ Ó    %ñ#ÜŒ    Ü—+‘+¤§¡Р0Ð0NÐOÓPˆÜ~‰~˜g°dÀWÔMˆØˆÜ‰ð      ó     ˆð{‰{˜dÒ"Ð"Ð"؏{‰{˜dÒ"Ð"Ñ"÷!#÷#ñ#ús ÁBC%Ã%C.c    ó*—t|«}d}|jtdd|›d|›j««t    j
|j «5t«ddd«|j«\}}d|vsJ‚|jtdd|›d|›dj««t    j
|j «5t«|j«\}}d|vsJ‚    ddd«y#1swYŒ›xYw#1swYyxYw)zoEnsures that fortran subroutine wrappers for F77 are included by default
 
    CLI :: --[no]-wrap-functions
    r—rGr¯reNú Fortran 77 wrappers are saved toz --wrap-functionsror½s       rÚtest_wrapfunc_defrães€ô Ó !€EØ €EØ×Ñœ˜V x°¨w°a¸°wÐ%?×%EÑ%EÓ%GÔHä     ‰˜Ÿ ™ Ó    %ñÜŒ    ÷à × Ñ Ó F€CˆØ .°#Ñ 5Ð5Ð 5ð×Ñœ˜VØ" 5 '¨¨5¨'Ð1BÐC×IÑIÓKôMô
‰˜Ÿ ™ Ó    %ñ:ÜŒ    Ø×!Ñ!Ó#‰ˆˆQØ2°cÑ9Ð9Ñ9÷:ð:÷ðú÷:ð:úsÁ C=Ã$D    Ã=DÄ    Dc    ó&—t|«}d}|jtdd|›d|›dj««t    j
|j «5t«|j«\}}d|vsJ‚    ddd«y#1swYyxYw)zeEnsures that fortran subroutine wrappers for F77 can be disabled
 
    CLI :: --no-wrap-functions
    r—rGr¯rez --no-wrap-functionsrâNror½s       rÚtest_nowrapfuncrå~sŽ€ô
Ó !€EØ €EØ×Ñœ˜VØ" 5 '¨¨5¨'Ð1EÐF×LÑLÓNôPô
‰˜Ÿ ™ Ó    %ñ>ÜŒ    Ø×!Ñ!Ó#‰ˆˆQØ2¸#Ñ=Ð=Ñ=÷>÷>ñ>úr¿c    ó—t|«}d}|jtdd|›d|›dj««t    j
|j «5t«td|›d«j«5}|j«}d|vsJ‚d    |vsJ‚    d
d
d
«d
d
d
«y
#1swYŒxYw#1swYy
xYw) zcAdd to the include directories
 
    CLI :: -include
    TODO: Document this in the help string
    r—rGr¯rez' -include<stdbool.h> -include<stdio.h> rÁrz#include <stdbool.h>z#include <stdio.h>NrË)rRr5rSrTrrÌÚocmrs       rÚtest_inclheaderrèŽsʀô Ó !€EØ €EØ×ÑÜ ØØ
5'˜˜5˜'Ð!HÐIß ‰‹ô    ô
‰˜Ÿ ™ Ó    %ñ0ÜŒ    Ü Bug˜XÐ&Ó '× ,Ñ ,Ó .ð    0°%Ø—:‘:“<ˆDØ)¨TÑ1Ð 1Ð1Ø'¨4Ñ/Ð /Ñ/÷    0÷0ð0÷    0ð    0ú÷0ð0ús$Á(B<ÂB0ÂB<Â0B9    Â5B<Â<Ccó—y)z?Add to the include directories
 
    CLI :: --include-paths
    NrrrrÚ test_inclpathrê¥ó€ð     rcó—y)z;Add to the include directories
 
    CLI :: --help-link
    NrrrrÚ
test_hlinkrí®rërcóL—t|«}|jtdd|›dj««t    j
|j «5t«|j«\}}d|vsJ‚d|vsJ‚d|vsJ‚d|vsJ‚d|vsJ‚    d    d    d    «y    #1swYy    xYw)
zOCheck that Fortran-to-Python KIND specs can be passed
 
    CLI :: --f2cmap
    rGrHz --f2cmap mapfilez!Reading f2cmap from 'mapfile' ...z&Mapping "real(kind=real32)" to "float"z'Mapping "real(kind=real64)" to "double"z,Mapping "integer(kind=int64)" to "long_long"z0Successfully applied user defined f2cmap changesNro)rRrErSrTrkrls      rÚ test_f2cmaprï·s¹€ô
Ó €EØ×Ñœ˜V }°U°GÐ;LÐ%M×%SÑ%SÓ%UÔVä     ‰˜Ÿ ™ Ó    %ñIÜŒ    Ø×!Ñ!Ó#‰ˆˆQØ2°cÑ9Ð9Ð9Ø;¸sÑBÐBÐBØ<ÀÑCÐCÐCØAÀSÑHÐHÐHØAÀSÑHÐHÑH÷I÷IñIús Á<BÂB#có0—t|«}|jtdd|›dj««t    j
|j «5t«|j«\}}t|«dk(sJ‚    ddd«y#1swYyxYw)z)Reduce verbosity
 
    CLI :: --quiet
    rGrHz --quietrN)
rrJrKrLrrMrNr rhÚlenrps      rÚ
test_quietròÉs~€ô
Ó !€EØ×Ñœ˜V }°U°G¸8Ð%D×%JÑ%JÓ%LÔMä     ‰˜Ÿ ™ Ó    %ñÜŒ    Ø×!Ñ!Ó#‰ˆˆQܐ3‹x˜1Š}Љ}÷÷ñús Á.B  Bcó—t|«}|jtdd|›dj««t    j
|j «5t«|j«\}}d|vsJ‚    ddd«y#1swYyxYw)z-Increase verbosity
 
    CLI :: --verbose
    rGrHz
 --verboseÚ analyzelineNrorps      rÚ test_verboserõ×s|€ô
Ó !€EØ×Ñœ˜V }°U°G¸:Ð%F×%LÑ%LÓ%NÔOä     ‰˜Ÿ ™ Ó    %ñ$ÜŒ    Ø×!Ñ!Ó#‰ˆˆQØ Ñ#Ð#Ñ#÷$÷$ñ$ús Á$BÂB có—|jtdddg«tjt«5t «|j «\}}ddl}|j|j«k(sJ‚    ddd«y#1swYyxYw)z"Ensure version
 
    CLI :: -v
    rGrz-vrN)
rJrKr rZrvr rhÚnumpyÚ __version__Ústrip)rRrSrkrlÚnps     rÚ test_versionrûåsm€ð
×Ñœ˜V f¨d ^Ô4ä    ‰”zÓ    "ñ-ÜŒ    Ø×!Ñ!Ó#‰ˆˆQÛØ~‰~ §¡£Ò,Ð,Ñ,÷    -÷-ñ-ús ³AA>Á>BcóŒ—t|«}|jtdd|›dj««t    j
|j «5t«tjtj›d«}tj|dd¬«}d}|j|k(sJ‚    d    d    d    «y    #1swYy    xYw)
z
    CLI :: -c
    rGrHz -crÏTrÐrÑrÓN) rrJrKrLrrMrNr rÔrÕrÖr×rÚ)r5rSrTrÜrÝrÞs      rÚ test_npdistoprýós €ô
Ó !€EØ×Ñœ˜V }°U°G¸3Ð%?×%EÑ%EÓ%GÔHä     ‰˜Ÿ ™ Ó    %ñ#ÜŒ    Ü—+‘+¤§¡Р0Ð0NÐOÓPˆÜ~‰~˜g°dÀWÔMˆØˆØ{‰{˜dÒ"Ð"Ñ"÷ #÷#ñ#ús ÁAB:Â:Cz*Compiler and Python 3.12 or newer requiredcó—t|«}|jtdd|›dj««t    j
|j «5t«tj›d}tr|dz }n|dz }tj|«}tj|dd¬    «}d
}|j|k(sJ‚trd |jvsJ‚|jd k(sJ‚    d d d «y #1swYy xYw)z.
    CLI :: --no-freethreading-compatible
    rGrHz! -c --no-freethreading-compatibleú -c "import blah; blah.hi();z1import sys; assert sys._is_gil_enabled() is True"rŠTrÐrÑrÓzHThe global interpreter lock (GIL) has been enabled to load module 'blah'rN©rrJrKrLrrMrNrrÕrrÔrÖr×rÚrÛÚ
returncode©r5rSrTÚcmdrÜrÝrÞs       rÚ test_no_freethreading_compatiblersè€ô Ó !€EØ×Ñœ˜V }°U°GÐ;\Ð%]×%cÑ%cÓ%eÔfä     ‰˜Ÿ ™ Ó    %ñ $ÜÔ Ü—‘РР=Ð>ˆÝ Ø ÐGÑ G‰Cà 4‰KˆCÜ—+‘+˜cÓ"ˆÜ~‰~˜g°dÀWÔMˆØˆØ{‰{˜dÒ"Ð"Ð"Ý Ø]Ðae×alÑalÑlÐ lÐl؏‰ !Ò#Ð#Ñ#÷ $÷ $ñ $ús ÁBC4Ã4C=cóö—t|«}|jtdd|›dj««t    j
|j «5t«tj›d}tr|dz }n|dz }tj|«}tj|dd¬    «}d
}|j|k(sJ‚|jd k(sJ‚|jd k(sJ‚    d d d «y #1swYy xYw)z+
    CLI :: --freethreading_compatible
    rGrHz -c --freethreading-compatiblerÿz2import sys; assert sys._is_gil_enabled() is False"rŠTrÐrÑrÓÚrNrrs       rÚtest_freethreading_compatiblersâ€ô Ó !€EØ×Ñœ˜V }°U°GÐ;YÐ%Z×%`Ñ%`Ó%bÔcä     ‰˜Ÿ ™ Ó    %ñ $ÜÔ Ü—‘РР=Ð>ˆÝ Ø ÐHÑ H‰Cà 4‰KˆCÜ—+‘+˜cÓ"ˆÜ~‰~˜g°dÀWÔMˆØˆØ{‰{˜dÒ"Ð"Ð"؏{‰{˜bҠРР؏‰ !Ò#Ð#Ñ#÷ $÷ $ñ $ús ÁBC/Ã/C8có—y)z
    CLI :: -c --fcompiler
    NrrrrÚtest_npd_fcompilerr    7ó€ð
    rcó—y)z
    CLI :: -c --compiler
    NrrrrÚtest_npd_compilerr ?r
rcó—y)z$
    CLI :: -c --help-fcompiler
    NrrrrÚtest_npd_help_fcompilerrGr
rcó—y)z
    CLI :: -c --f77exec
    NrrrrÚtest_npd_f77execrOr
rcó—y)z
    CLI :: -c --f90exec
    NrrrrÚtest_npd_f90execrWr
rcó—y)z
    CLI :: -c --f77flags
    NrrrrÚtest_npd_f77flagsr_r
rcó—y)z
    CLI :: -c --f90flags
    NrrrrÚtest_npd_f90flagsrgr
rcó—y)z
    CLI :: -c --opt
    NrrrrÚ test_npd_optror
rcó—y)z
    CLI :: -c --arch
    NrrrrÚ test_npd_archrwr
rcó—y)z
    CLI :: -c --noopt
    NrrrrÚtest_npd_nooptrr
rcó—y)z
    CLI :: -c --noarch
    NrrrrÚtest_npd_noarchr‡r
rcó—y)z
    CLI :: -c --debug
    NrrrrÚtest_npd_debugr r
rcó—y)z%
    CLI :: -c --link-<resource>
    NrrrrÚtest_npd_link_autor"—r
rcó—y)z/
    CLI :: -c -L/path/to/lib/ -l<libname>
    NrrrrÚ test_npd_libr$Ÿr
rcó—y)z
    CLI :: -D<define>
    NrrrrÚtest_npd_definer&§r
rcó—y)z
    CLI :: -U<name>
    NrrrrÚtest_npd_undefiner(¯r
rcó—y)z$
    CLI :: -I/path/to/include/
    NrrrrÚ test_npd_inclr*·r
rcó—y)z8
    CLI :: <filename>.o <filename>.so <filename>.a
    NrrrrÚtest_npd_linkerr,¿r
r)Úuntitled)XÚplatformr¤rÔrÖrKrØÚ collectionsrÚpathlibrr Únumpy.f2py.f2py2err Únumpy.testing._private.utilsrrrrrr!Úfixturer5r8r:r=r@rErWr\rcrmrqrxÚmarkÚskipifÚ version_infor}Úsystemr„Úxfailrr•ršrœr¢rªr¬r±r³r»r¾rÂrÇrÉrÍr ràrãrårèrêrírïròrõrûrýrrr    r rrrrrrrrrr r"r$r&r(r*r,rrrú<module>r9swðÛÛ    Û ÛÛ
ÛÝ"Ýã å-Ý4åòñ
HÐHÓ    I€óðN€‡iÔ ñó!ðð€‡iÔ ñó!ðð€‡iÔ ñó!ðð€‡iÔ ñó!ðð€‡iÔ ñó!ðð€‡iÔ ñó!ðò1ò&    ò
:ò )ò
,ò Cð‡×ѐC×$Ñ$¨Ñ/Ð8NÐÓOñ
)óPð
)ð‡×ѐ_X—_‘_Ó&¨'Ñ1ÒS°s×7GÑ7GÈ7Ñ7RÐ\xÐÓyñGózðGð>‡×ÑñDóðDò.Dò.Dò<%ò" 0ò .ò4$.òN8ò"2ò"4ò$ ;ò 8ò,5ò$ @ò  :𠇁×ÑÐMÐÓNñ#óOð#ò::ò2 >ò 0ò.    ò    òIò$ ò $ò -ð‡×ÑÐMÐÓNñ #óOð #ð‡×ѐ_X—_‘_Ó&¨'Ñ1ÒQ°c×6FÑ6FÈ'Ñ6QØGðóIñ$óIð$ð.‡×ѐ_X—_‘_Ó&¨'Ñ1ÒQ°c×6FÑ6FÈ'Ñ6QØGðóIñ$óIð$ò2    ò    ò    ò    ò    ò    ò    ò    ò    ò    ò    ò    ò    ò    ò    ò    ò    ó    r