o
    ðT·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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ejjejje ¡  ¡ dkddd�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   úa/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/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   sF  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s<J ‚|dd„ tjfd�}|dksLJ ‚|tjtjfd�}|dks[J ‚|| jjdd�}|dksiJ ‚|| jjƒ}|dksuJ ‚|| jjjƒ}|dks‚J ‚G dd„ dƒ}|ƒ }||ƒ}|dks–J ‚||jƒ}|dks¡J ‚d S )Nc                   S   ó   dS )Né   r   r   r   r   r   Ú<lambda>8   ó    z0TestF77Callback.check_function.<locals>.<lambda>r   c                 S   r   ©Né   r   ©Úar   r   r   r   :   r   )é   )Ú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   >   ó    )é   é   c                 S   s
   t  | ¡S r   )ÚmathÚdegreesr   r   r   r   r   @   s   
 é´   é   é   c                   @   s   e Zd Zdd„ Zdd„ ZdS )z)TestF77Callback.check_function.<locals>.Ac                 S   r   )Nr$   r   ©r   r   r   r   Ú__call__M   ó   z2TestF77Callback.check_function.<locals>.A.__call__c                 S   r   )Né	   r   r+   r   r   r   ÚmthP   r-   z-TestF77Callback.check_function.<locals>.A.mthN)Ú__name__Ú
__module__Ú__qualname__r,   r/   r   r   r   r   ÚAL   s    r3   r$   r.   )	Úgetattrr   r&   Úpir'   ÚfuncÚfunc0Ú	_cpointerr/   )r   r	   r   Úrr3   r    r   r   r   r   6   s2   
zTestF77Callback.check_functionÚwin32z)Fails with MinGW64 Gfortran (Issue #9673)c                 C   s(   dd„ }| j j}||ƒ}|dksJ ‚d S )Nc                 S   s   | dkrdS dS )Nr9   r   r   r   )Úcoder   r   r   r   \   s   z6TestF77Callback.test_string_callback.<locals>.callbackr   )r   Ústring_callback)r   r   Úfr9   r   r   r   Útest_string_callbackY   s   z$TestF77Callback.test_string_callbackc                 C   sd   t  dd¡}t  dd¡}t  dgd¡}dd„ }| jj}|||fD ]}||||jƒ}|dks/J ‚q d S )	N)r   ÚS8)r   é   ÚcÚ c                 S   s4   | j |fkrdS | jdkrdS t | dk¡sdS dS )Nr   r?   é   ó    é   r   )ÚshapeÚdtypeÚnpÚall)ÚcuÚlencur   r   r   r   n   s   
z<TestF77Callback.test_string_callback_array.<locals>.callbackr   )rH   ÚzerosÚarrayr   Ústring_callback_arrayÚsize)r   Úcu1Úcu2Úcu3r   r=   rJ   Úresr   r   r   Útest_string_callback_arrayf   s   	þz*TestF77Callback.test_string_callback_arrayc                    sp   g ‰‡fdd„‰ ‡ ‡‡fdd„‰‡fdd„dD ƒ}|D ]}|  ¡  q|D ]}| ¡  q$d ˆ¡‰ˆr6tˆƒ‚d S )	Nc                     s*   t  d¡ ˆ j dd„ ¡} | dksJ ‚dS )Ngü©ñÒMbP?c                   S   r   ©Né{   r   r   r   r   r   r   ‡   r   z?TestF77Callback.test_threadsafety.<locals>.cb.<locals>.<lambda>rV   é*   )ÚtimeÚsleepr   r   )r9   r+   r   r   Úcb�   s   
z-TestF77Callback.test_threadsafety.<locals>.cbc                    sZ   zt dƒD ]}ˆj ˆ ¡}|dksJ ‚ˆ | ¡ qW d S  ty,   ˆ t ¡ ¡ Y d S w )Né2   rW   )Úranger   r   r   Ú	ExceptionÚappendÚ	tracebackÚ
format_exc)r	   Újr9   )rZ   Úerrorsr   r   r   ÚrunnerŒ   s   ýÿz1TestF77Callback.test_threadsafety.<locals>.runnerc                    s*   g | ]}t d ƒD ]
}tjˆ |fd�‘qqS )é   )ÚtargetÚargs)r\   Ú	threadingÚThread)Ú.0ÚargÚn)rc   r   r   Ú
<listcomp>•   s    þÿÿz5TestF77Callback.test_threadsafety.<locals>.<listcomp>)r   Út2z

)ÚstartÚjoinÚAssertionError)r   Úthreadsr   r   )rZ   rb   rc   r   r   Útest_threadsafety|   s   
	þ


ÿz!TestF77Callback.test_threadsafetyc              
   C   sh  z| j  d¡ W n ty# } zt|ƒ d¡sJ ‚W Y d }~nd }~ww z| j  d¡ W n tyG } zt|ƒ d¡s=J ‚W Y d }~nd }~ww dd„ | j _| j  d¡}|dksZJ ‚dd„ | j _| j  d¡}|dkslJ ‚| j `z| j  d¡ W n ty’ } zt|ƒ d¡sˆJ ‚W Y d }~nd }~ww dd
d„| j _| j  d¡}|dks¦J ‚| j  d¡}|dks²J ‚d S )NrC   zCallback global_f not definedz!cb: Callback global_f not definedc                 S   ó   | d S )Nr   r   ©Úxr   r   r   r   ¯   r#   z6TestF77Callback.test_hidden_callback.<locals>.<lambda>rE   c                 S   rs   )NrC   r   rt   r   r   r   r   ³   r#   r   r   c                 S   rs   )NrE   r   rt   r   r   r   r   ½   r#   r   )r   )r   Úhidden_callbackr]   ÚstrÚ
startswithÚhidden_callback2Úglobal_f)r   Úmsgr9   r   r   r   Útest_hidden_callback¤   s<   €ÿ€ÿ€ÿz$TestF77Callback.test_hidden_callbackN)r0   r1   r2   r   ÚgetpathÚsourcesÚpytestÚmarkÚparametrizeÚsplitÚslowr   Úxfailr   r   r   ÚskipifÚsysÚplatformr>   rT   rr   r|   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)r0   r1   r2   r   Úoptionsr   r   r   r   rˆ   Æ   s    
rˆ   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sJ ‚d S )Nc                 S   rs   rU   r   rt   r   r   r   ÚincrÔ   ó   z*TestF90Callback.test_gh17797.<locals>.incr)r   rC   rE   )rG   é�   )rH   rM   Úint64r   Úgh17797)r   r‹   Úyr9   r   r   r   Útest_gh17797Ò   s   zTestF90Callback.test_gh17797N)
r0   r1   r2   r   r}   r~   r   r€   rƒ   r‘   r   r   r   r   rŠ   Ï   s    rŠ   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   ó$   dd„ }| j  |¡}|dksJ ‚d S )Nc                 S   s   | d  d7  < d S )Nr   r   r   rt   r   r   r   Úfooæ   s   z%TestGH18335.test_gh18335.<locals>.fooé|   )r   Úgh18335)r   r”   r9   r   r   r   Útest_gh18335ä   s   zTestGH18335.test_gh18335N)r0   r1   r2   r   r   r}   r~   r   r€   rƒ   r—   r   r   r   r   r’   Ü   s
    r’   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.pyfÚ	callback2c                 C   r“   )Nc                 S   s   | |  S r   r   rt   r   r   r   Úbaró   rŒ   z%TestGH25211.test_gh25211.<locals>.barén   )r   r”   )r   rš   rS   r   r   r   Útest_gh25211ò   s   zTestGH25211.test_gh25211N)r0   r1   r2   r   r}   r~   Úmodule_namerœ   r   r   r   r   r˜   í   s    ÿr˜   ÚdarwinFz*Callback aborts cause CI failures on macOS)Ú	conditionÚrunr   c                   @   s,   e Zd Ze dddd¡gZdgZdd„ ZdS )	ÚTestCBFortranCallstatementr   r   r   zgh26681.f90z--lowerc                 C   sP   t jtdd��}| jjj| j_| jj d¡ W d   ƒ d S 1 s!w   Y  d S )NÚhelpme)Úmatch)r   ÚraisesÚ
ValueErrorr   ÚutilsÚmy_abortÚ
mypy_abortÚdo_something)r   Úexcr   r   r   Útest_callstatement_fortran  s   "þz5TestCBFortranCallstatement.test_callstatement_fortranN)r0   r1   r2   r   r}   r~   r‰   r«   r   r   r   r   r¡   ú   s    r¡   )r&   r   r†   r   rg   r_   rX   r‡   ÚnumpyrH   Únumpy.testingr   rB   r   ÚF2PyTestr   rˆ   rŠ   r’   r˜   r€   rƒ   r„   ÚsystemÚlowerr¡   r   r   r   r   Ú<module>   s.     8	þ