a
    ç´«j   ã                   @   s´   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 ddlmZ G dd„ dejƒZG dd„ deƒZG d	d
„ d
ejƒZG dd„ dejƒZG dd„ dejƒZdS )é    N)ÚIS_PYPYé   )Úutilc                   @   s®   e Zd Ze dddd¡gZej dd 	d¡¡ejj
dd	„ ƒƒZejjed
d�dd„ ƒZdd„ Zejjejdkdd�dd„ ƒZejjejdkdd�dd„ ƒZdd„ Zdd„ ZdS )ÚTestF77CallbackÚtestsÚsrcÚcallbackzfoo.fÚnamezt,t2ú,c                 C   s   |   |¡ d S ©N)Úcheck_function)Úselfr	   © r   ú]/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/numpy/f2py/tests/test_callback.pyÚtest_all   s    zTestF77Callback.test_allz,PyPy cannot modify tp_doc after PyType_Ready)Úreasonc                 C   s    t  d¡}| jjj|ksJ ‚d S )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__)r   Úexpectedr   r   r   Útest_docstring   s    
zTestF77Callback.test_docstringc                 C   sL  t | j|ƒ}|dd„ ƒ}|dks$J ‚|dd„ dd�}|dks@J ‚|dd„ dd�}|d	ks\J ‚|d
d„ dd�}|dksxJ ‚|dd„ tjfd�}|dks˜J ‚|tjtjfd�}|dks¶J ‚|| jjdd�}|dksÒJ ‚|| jjƒ}|dksêJ ‚|| jjjƒ}|dk�sJ ‚G dd„ dƒ}|ƒ }||ƒ}|dk�s0J ‚||jƒ}|dk�sHJ ‚d S )Nc                   S   s   dS )Né   r   r   r   r   r   Ú<lambda>7   ó    z0TestF77Callback.check_function.<locals>.<lambda>r   c                 S   s   dS ©Né   r   ©Úar   r   r   r   9   r   )é   )Zfun_extra_argsr   c                 S   s   | S r   r   r   r   r   r   r   ;   r   r    c                 S   s   d|  S r   r   r   r   r   r   r   =   r   )é   é   c                 S   s
   t  | ¡S r   )ÚmathÚdegreesr   r   r   r   r   ?   r   é´   é   é   c                   @   s   e Zd Zdd„ Zdd„ ZdS )z)TestF77Callback.check_function.<locals>.Ac                 S   s   dS )Nr!   r   ©r   r   r   r   Ú__call__L   s    z2TestF77Callback.check_function.<locals>.A.__call__c                 S   s   dS )Né	   r   r(   r   r   r   ÚmthO   s    z-TestF77Callback.check_function.<locals>.A.mthN)Ú__name__Ú
__module__Ú__qualname__r)   r+   r   r   r   r   ÚAK   s   r/   r!   r*   )	Úgetattrr   r#   Úpir$   ÚfuncZfunc0Z	_cpointerr+   )r   r	   r   Úrr/   r   r   r   r   r   5   s2    
zTestF77Callback.check_functionÚwin32z)Fails with MinGW64 Gfortran (Issue #9673)c                 C   s,   dd„ }t | jdƒ}||ƒ}|dks(J ‚d S )Nc                 S   s   | dkrdS dS d S )Nr3   r   r   r   )Úcoder   r   r   r   [   s    z6TestF77Callback.test_string_callback.<locals>.callbackZstring_callbackr   )r0   r   )r   r   Úfr3   r   r   r   Útest_string_callbackX   s    z$TestF77Callback.test_string_callbackc                 C   sh   t  dd¡}t  dd¡}t  dgd¡}dd„ }t| jdƒ}|||fD ]}||||jƒ}|d	ksDJ ‚qDd S )
N)r   ÚS8)r   é   ÚcÚ c                 S   s4   | j |fkrdS | jdkrdS t | dk¡s0dS dS )Nr   r8   é   r   é   r   )ÚshapeÚdtypeÚnpÚall)ÚcuZlencur   r   r   r   m   s    
z<TestF77Callback.test_string_callback_array.<locals>.callbackZstring_callback_arrayr   )r@   ZzerosÚarrayr0   r   Úsize)r   Zcu1Zcu2Zcu3r   r6   rB   Úresr   r   r   Útest_string_callback_arraye   s    	z*TestF77Callback.test_string_callback_arrayc                    sp   g ‰‡fdd„‰ ‡ ‡‡fdd„‰‡fdd„dD ƒ}|D ]}|  ¡  q6|D ]}| ¡  qHd ˆ¡‰ˆrltˆƒ‚d S )	Nc                     s*   t  d¡ ˆ j dd„ ¡} | dks&J ‚dS )Ngü©ñÒMbP?c                   S   s   dS ©Né{   r   r   r   r   r   r   †   r   z?TestF77Callback.test_threadsafety.<locals>.cb.<locals>.<lambda>rH   é*   )ÚtimeÚsleepr   r   )r3   r(   r   r   Úcb€   s    
z-TestF77Callback.test_threadsafety.<locals>.cbc                    sZ   z4t dƒD ]&}ˆj ˆ ¡}|dks&J ‚ˆ | ¡ q
W n  tyT   ˆ t ¡ ¡ Y n0 d S )Né2   rI   )Úranger   r   r   Ú	ExceptionÚappendÚ	tracebackÚ
format_exc)r	   Újr3   )rL   Úerrorsr   r   r   Úrunner‹   s    z1TestF77Callback.test_threadsafety.<locals>.runnerc                    s*   g | ]"}t d ƒD ]}tjˆ |fd�‘qqS )é   )ÚtargetÚargs)rN   Ú	threadingÚThread)Ú.0ÚargÚn)rU   r   r   Ú
<listcomp>”   s   ÿz5TestF77Callback.test_threadsafety.<locals>.<listcomp>)r   Út2z

)ÚstartÚjoinÚAssertionError)r   Úthreadsr   r   )rL   rT   rU   r   r   Útest_threadsafety{   s    	
þ


z!TestF77Callback.test_threadsafetyc              
   C   sp  z| j  d¡ W n6 tyF } zt|ƒ d¡s2J ‚W Y d }~n
d }~0 0 z| j  d¡ W n6 tyŽ } zt|ƒ d¡szJ ‚W Y d }~n
d }~0 0 dd„ | j _| j  d¡}|dks´J ‚dd„ | j _| j  d¡}|dksØJ ‚| j `z| j  d¡ W n: t�y( } z t|ƒ d¡�sJ ‚W Y d }~n
d }~0 0 dd
d„| j _| j  d¡}|dk�sRJ ‚| j  d¡}|dk�slJ ‚d S )Nr<   zCallback global_f not definedz!cb: Callback global_f not definedc                 S   s   | d S )Nr   r   ©Úxr   r   r   r   ®   r   z6TestF77Callback.test_hidden_callback.<locals>.<lambda>r=   c                 S   s   | d S )Nr<   r   re   r   r   r   r   ²   r   r   r   c                 S   s   | d S )Nr=   r   re   r   r   r   r   ¼   r   r   )r   )r   Zhidden_callbackrO   ÚstrÚ
startswithZhidden_callback2Zglobal_f)r   Úmsgr3   r   r   r   Útest_hidden_callback£   s0    ((*z$TestF77Callback.test_hidden_callbackN)r,   r-   r.   r   ÚgetpathÚsourcesÚpytestÚmarkZparametrizeÚsplitÚslowr   Zxfailr   r   r   ZskipifÚsysÚplatformr7   rF   rd   rj   r   r   r   r   r      s&   ÿ
#ÿ
ÿ
(r   c                   @   s   e Zd ZdZdgZdS )ÚTestF77CallbackPythonTLSz[
    Callback tests using Python thread-local storage instead of
    compiler-provided
    z-DF2PY_USE_PYTHON_TLSN)r,   r-   r.   r   Úoptionsr   r   r   r   rs   Å   s   rs   c                   @   s.   e Zd Ze dddd¡gZejjdd„ ƒZ	dS )ÚTestF90Callbackr   r   r   zgh17797.f90c                 C   s:   dd„ }t jg d¢t jd�}| j ||¡}|dks6J ‚d S )Nc                 S   s   | d S rG   r   re   r   r   r   ÚincrÓ   s    z*TestF90Callback.test_gh17797.<locals>.incr)r   r<   r=   )r?   é�   )r@   rC   Zint64r   Zgh17797)r   rv   Úyr3   r   r   r   Útest_gh17797Ñ   s    zTestF90Callback.test_gh17797N)
r,   r-   r.   r   rk   rl   rm   rn   rp   ry   r   r   r   r   ru   Î   s   ru   c                   @   s2   e Zd ZdZe dddd¡gZejj	dd„ ƒZ
dS )	Ú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!
    r   r   r   zgh18335.f90c                 C   s$   dd„ }| j  |¡}|dks J ‚d S )Nc                 S   s   | d  d7  < d S )Nr   r   r   re   r   r   r   Úfooå   s    z%TestGH18335.test_gh18335.<locals>.fooé|   )r   Zgh18335)r   r{   r3   r   r   r   Útest_gh18335ã   s    zTestGH18335.test_gh18335N)r,   r-   r.   r   r   rk   rl   rm   rn   rp   r}   r   r   r   r   rz   Û   s   rz   c                   @   s8   e Zd Ze dddd¡e dddd¡gZdZdd„ Zd	S )
ÚTestGH25211r   r   r   z	gh25211.fzgh25211.pyfZ	callback2c                 C   s$   dd„ }| j  |¡}|dks J ‚d S )Nc                 S   s   | |  S r   r   re   r   r   r   Úbarò   s    z%TestGH25211.test_gh25211.<locals>.barén   )r   r{   )r   r   rE   r   r   r   Útest_gh25211ñ   s    zTestGH25211.test_gh25211N)r,   r-   r.   r   rk   rl   Úmodule_namer�   r   r   r   r   r~   ì   s
   ÿr~   )r#   r   rq   rm   rY   rQ   rJ   Únumpyr@   Znumpy.testingr   r;   r   ZF2PyTestr   rs   ru   rz   r~   r   r   r   r   Ú<module>   s    8	