U
    ÉZjÇ  ã                   @   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dS )é    N)ÚIS_PYPYé   )Úutilc                   @   s¦   e Zd Ze dddd¡gZej dd 	d¡¡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   úa/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/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t‚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__ÚAssertionError)r   Úexpectedr   r   r   Útest_docstring   s    
zTestF77Callback.test_docstringc                 C   sL  t | j|ƒ}|dd„ ƒ}|dks$t‚|dd„ dd�}|dks@t‚|dd„ dd�}|d	ks\t‚|d
d„ dd�}|dksxt‚|dd„ tjfd�}|dks˜t‚|tjtjfd�}|dks¶t‚|| jjdd�}|dksÒt‚|| jjƒ}|dksêt‚|| jjjƒ}|dk�st‚G dd„ dƒ}|ƒ }||ƒ}|dk�s0t‚||j	ƒ}|dk�sHt‚d S )Nc                   S   s   dS )Né   r   r   r   r   r   Ú<lambda>6   ó    z0TestF77Callback.check_function.<locals>.<lambda>r   c                 S   s   dS ©Né   r   ©Úar   r   r   r   8   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__K   s    z2TestF77Callback.check_function.<locals>.A.__call__c                 S   s   dS )Né	   r   r)   r   r   r   ÚmthN   s    z-TestF77Callback.check_function.<locals>.A.mthN)Ú__name__Ú
__module__Ú__qualname__r*   r,   r   r   r   r   ÚAJ   s   r0   r"   r+   )
Úgetattrr   r   r$   Úpir%   ÚfuncZfunc0Z	_cpointerr,   )r   r	   r   Úrr0   r    r   r   r   r   4   s2    
zTestF77Callback.check_functionÚwin32z)Fails with MinGW64 Gfortran (Issue #9673)c                 C   s,   dd„ }t | jdƒ}||ƒ}|dks(t‚d S )Nc                 S   s   | dkrdS dS d S )Nr4   r   r   r   )Úcoder   r   r   r   Z   s    z6TestF77Callback.test_string_callback.<locals>.callbackZstring_callbackr   )r1   r   r   )r   r   Úfr4   r   r   r   Útest_string_callbackW   s    z$TestF77Callback.test_string_callbackc                 C   s@   t  dd¡}dd„ }t| jdƒ}|||t|ƒƒ}|dks<t‚d S )N)r   é   ÚS1c                 S   s6   | j |dfkrdS | jdkr dS t | dk¡s2dS dS )Nr9   r   r:   é   r   é   r   )ÚshapeÚdtypeÚnpÚall)ÚcuZlencur   r   r   r   j   s    
z<TestF77Callback.test_string_callback_array.<locals>.callbackZstring_callback_arrayr   )r?   Zzerosr1   r   Úlenr   )r   rA   r   r7   Úresr   r   r   Útest_string_callback_arrayd   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&t‚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>rF   é*   )ÚtimeÚsleepr   r   r   )r4   r)   r   r   Úcb|   s    
z-TestF77Callback.test_threadsafety.<locals>.cbc                    s\   z4t dƒD ]&}ˆj ˆ ¡}|dks&t‚ˆ | ¡ q
W n" tk
rV   ˆ t ¡ ¡ Y nX d S )Né2   rG   )	Úranger   r   r   r   Ú	ExceptionÚappendÚ	tracebackÚ
format_exc)r	   Újr4   )rJ   Úerrorsr   r   r   Úrunner‡   s    z1TestF77Callback.test_threadsafety.<locals>.runnerc                    s*   g | ]"}t d ƒD ]}tjˆ |fd�‘qqS )é   )ÚtargetÚargs)rL   Ú	threadingÚThread)Ú.0ÚargÚn)rS   r   r   Ú
<listcomp>�   s    
 ÿz5TestF77Callback.test_threadsafety.<locals>.<listcomp>)r   Út2z

)ÚstartÚjoinr   )r   Úthreadsr   r   )rJ   rR   rS   r   r   Útest_threadsafetyw   s    	
þ


z!TestF77Callback.test_threadsafetyc              
   C   sj  z| j  d¡ W n4 tk
rD } zt|ƒ d¡s4t‚W 5 d }~X Y nX z| j  d¡ W n4 tk
rŠ } zt|ƒ d¡szt‚W 5 d }~X Y nX dd„ | j _| j  d¡}|dks°t‚dd„ | j _| j  d¡}|dksÔt‚| j `z| j  d¡ W n8 tk
�r" } zt|ƒ d¡�st‚W 5 d }~X Y nX dd
d„| j _| j  d¡}|dk�sLt‚| j  d¡}|dk�sft‚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   rb   r   r   r   r   ®   r   r   r   c                 S   s   | d S )Nr<   r   rb   r   r   r   r   ¸   r   r   )r   )r   Zhidden_callbackrM   ÚstrÚ
startswithr   Zhidden_callback2Zglobal_f)r   Úmsgr4   r   r   r   Útest_hidden_callbackŸ   s0    $$&z$TestF77Callback.test_hidden_callbackN)r-   r.   r/   r   ÚgetpathÚsourcesÚpytestÚmarkZparametrizeÚsplitr   Zxfailr   r   r   ZskipifÚsysÚplatformr8   rD   ra   rg   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   ro   Á   s   ro   c                   @   s&   e Zd Ze dddd¡gZdd„ ZdS )ÚTestF90Callbackr   r   r   zgh17797.f90c                 C   s<   dd„ }t jdddgt jd�}| j ||¡}|dks8t‚d S )Nc                 S   s   | d S rE   r   rb   r   r   r   ÚincrÎ   s    z*TestF90Callback.test_gh17797.<locals>.incrr   r;   r<   ©r>   é�   )r?   ÚarrayZint64r   Zgh17797r   )r   rr   Úyr4   r   r   r   Útest_gh17797Í   s    zTestF90Callback.test_gh17797N)r-   r.   r/   r   rh   ri   rw   r   r   r   r   rq   Ê   s   rq   c                   @   s*   e Zd ZdZe dddd¡gZ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„ }t jdddgt jd�}| j |¡}|dks6t‚d S )Nc                 S   s   | d  d7  < d S )Nr   r   r   rb   r   r   r   Úfooß   s    z%TestGH18335.test_gh18335.<locals>.foor   r;   r<   rs   é|   )r?   ru   Zint8r   Zgh18335r   )r   ry   rv   r4   r   r   r   Útest_gh18335Þ   s    zTestGH18335.test_gh18335N)r-   r.   r/   r   r   rh   ri   r{   r   r   r   r   rx   Ö   s   rx   )r$   r   rm   rj   rW   rO   rH   Únumpyr?   Znumpy.testingr   Ú r   ZF2PyTestr   ro   rq   rx   r   r   r   r   Ú<module>   s    4	