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
U
P±dîã@s¢ddlZddlZddlZddlZddlZddlZddlZddlZddl    m
Z
ddl m Z Gdd„de j ƒZGdd„deƒZGd    d
„d
e j ƒZGd d „d e j ƒZdS) éN)ÚIS_PYPYé)Úutilc@s¦eZdZe dddd¡gZej dd     d¡¡dd    „ƒZ
ejj e d
d d d „ƒZ dd„Zejjejdkdd dd„ƒZejjejdkdd dd„ƒZdd„Zdd„ZdS)ÚTestF77CallbackÚtestsÚsrcÚcallbackzfoo.fÚnamezt,t2ú,cCs| |¡dS©N)Úcheck_function)Úselfr    ©rúUd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\numpy/f2py/tests/test_callback.pyÚtest_allszTestF77Callback.test_allz,PyPy cannot modify tp_doc after PyType_Ready)ÚreasoncCs t d¡}|jjj|kst‚dS)NaË        a = t(fun,[fun_extra_args])
 
        Wrapper for ``t``.
 
        Parameters
        ----------
        fun : call-back function
 
        Other Parameters
        ----------------
        fun_extra_args : input tuple, optional
            Default: ()
 
        Returns
        -------
        a : int
 
        Notes
        -----
        Call-back functions::
 
            def fun(): return a
            Return objects:
                a : int
        )ÚtextwrapÚdedentÚmoduleÚtÚ__doc__ÚAssertionError)r ÚexpectedrrrÚtest_docstrings
zTestF77Callback.test_docstringcCsLt|j|ƒ}|dd„ƒ}|dks$t‚|dd„dd}|dks@t‚|dd„dd}|d    ks\t‚|d
d„d d}|d ksxt‚|d d„tjfd}|dks˜t‚|tjtjfd}|dks¶t‚||jjdd}|dksÒt‚||jjƒ}|dksêt‚||jjjƒ}|dkst‚Gdd„dƒ}|ƒ}||ƒ}|dks0t‚||j    ƒ}|dksHt‚dS)NcSsdS)NérrrrrÚ<lambda>6óz0TestF77Callback.check_function.<locals>.<lambda>rcSsdS©Nér©Úarrrr8r)é)Zfun_extra_argsrcSs|Sr rrrrrr:rr!cSsd|Srrrrrrr<r)éé cSs
t |¡Sr )ÚmathÚdegreesrrrrr>ré´éé c@seZdZdd„Zdd„ZdS)z)TestF77Callback.check_function.<locals>.AcSsdS)Nr"r©r rrrÚ__call__Ksz2TestF77Callback.check_function.<locals>.A.__call__cSsdS)Né    rr)rrrÚmthNsz-TestF77Callback.check_function.<locals>.A.mthN)Ú__name__Ú
__module__Ú __qualname__r*r,rrrrÚAJsr0r"r+)
Úgetattrrrr$Úpir%ÚfuncZfunc0Z    _cpointerr,)r r    rÚrr0r rrrr 4s2           
zTestF77Callback.check_functionÚwin32z)Fails with MinGW64 Gfortran (Issue #9673)cCs,dd„}t|jdƒ}||ƒ}|dks(t‚dS)NcSs|dkr dSdSdS)Nr4rrr)ÚcoderrrrZsz6TestF77Callback.test_string_callback.<locals>.callbackZstring_callbackr)r1rr)r rÚfr4rrrÚtest_string_callbackWs z$TestF77Callback.test_string_callbackcCsht dd¡}t dd¡}t dgd¡}dd„}t|jdƒ}|||fD]}||||jƒ}|d    ksDt‚qDdS)
N)rÚS8)réÚcÚcSs4|j|fkrdS|jdkrdSt |dk¡s0dSdS)Nrr9érér)ÚshapeÚdtypeÚnpÚall)ÚcuZlencurrrrls 
z<TestF77Callback.test_string_callback_array.<locals>.callbackZstring_callback_arrayr)rAÚzerosÚarrayr1rÚsizer)r Zcu1Zcu2Zcu3rr7rCÚresrrrÚtest_string_callback_arrayds       z*TestF77Callback.test_string_callback_arraycspg‰‡fdd„‰‡‡‡fdd„‰‡fdd„dDƒ}|D] }| ¡q6|D] }| ¡qHd ˆ¡‰ˆrltˆƒ‚dS)    Ncs*t d¡ˆj dd„¡}|dks&t‚dS)Ngü©ñÒMbP?cSsdS©Né{rrrrrr…rz?TestF77Callback.test_threadsafety.<locals>.cb.<locals>.<lambda>rJé*)ÚtimeÚsleeprrr)r4r)rrÚcbs
 z-TestF77Callback.test_threadsafety.<locals>.cbcs\z4tdƒD]&}ˆj ˆ¡}|dks&t‚ˆ |¡q
Wn"tk
rVˆ t ¡¡YnXdS)Né2rK)    Úrangerrrr Ú    ExceptionÚappendÚ    tracebackÚ
format_exc)r    Újr4)rNÚerrorsr rrÚrunnerŠs   z1TestF77Callback.test_threadsafety.<locals>.runnercs*g|]"}tdƒD]}tjˆ|fd‘qqS)é)ÚtargetÚargs)rPÚ    threadingÚThread)Ú.0ÚargÚn)rWrrÚ
<listcomp>“s
ÿz5TestF77Callback.test_threadsafety.<locals>.<listcomp>)rÚt2z
 
)ÚstartÚjoinr)r Úthreadsrr)rNrVrWr rÚtest_threadsafetyzs     
þ
 
 
z!TestF77Callback.test_threadsafetyc
Csjz|j d¡Wn4tk
rD}zt|ƒ d¡s4t‚W5d}~XYnXz|j d¡Wn4tk
rŠ}zt|ƒ d¡szt‚W5d}~XYnXdd„|j_|j d¡}|dks°t‚dd„|j_|j d¡}|dksÔt‚|j`z|j d¡Wn8tk
r"}zt|ƒ d¡st‚W5d}~XYnXd d
d„|j_|j d¡}|d ksLt‚|j d¡}|dksft‚dS) Nr=zCallback global_f not definedz!cb: Callback global_f not definedcSs|dS)Nrr©Úxrrrr­rz6TestF77Callback.test_hidden_callback.<locals>.<lambda>r>cSs|dS)Nr=rrfrrrr±rrrcSs|dS)Nr>rrfrrrr»rr)r)rZhidden_callbackrQÚstrÚ
startswithrZhidden_callback2Zglobal_f)r Úmsgr4rrrÚtest_hidden_callback¢s0$$      &  z$TestF77Callback.test_hidden_callbackN)r-r.r/rÚgetpathÚsourcesÚpytestÚmarkZ parametrizeÚsplitrZxfailrrr ZskipifÚsysÚplatformr8rHrerkrrrrrs$
ÿ
#ÿ
ÿ
(rc@seZdZdZdgZdS)ÚTestF77CallbackPythonTLSz[
    Callback tests using Python thread-local storage instead of
    compiler-provided
    z-DF2PY_USE_PYTHON_TLSN)r-r.r/rÚoptionsrrrrrsÄsrsc@s&eZdZe dddd¡gZdd„ZdS)ÚTestF90Callbackrrrz gh17797.f90cCs<dd„}tjdddgtjd}|j ||¡}|dks8t‚dS)NcSs|dSrIrrfrrrÚincrÑsz*TestF90Callback.test_gh17797.<locals>.incrrr=r>)r@é)rArEÚint64rZgh17797r)r rvÚyr4rrrÚ test_gh17797ÐszTestF90Callback.test_gh17797N)r-r.r/rrlrmrzrrrrruÍsruc@s*eZdZdZe dddd¡gZdd„ZdS)    Ú TestGH18335zäThe reproduction of the reported issue requires specific input that
    extensions may break the issue conditions, so the reproducer is
    implemented as a separate test class. Do not extend this test with
    other tests!
    rrrz gh18335.f90cCs$dd„}|j |¡}|dks t‚dS)NcSs|dd7<dS)NrrrrfrrrÚfooâsz%TestGH18335.test_gh18335.<locals>.fooé|)rZgh18335r)r r|r4rrrÚ test_gh18335ás zTestGH18335.test_gh18335N)r-r.r/rrrlrmr~rrrrr{Ùsr{)r$rrqrnr[rSrLÚnumpyrAZ numpy.testingrr<rZF2PyTestrrsrur{rrrrÚ<module>s  7