o
    >~#g                     @   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/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/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sJ G dd d}| }||}|dksJ ||j}|dksJ d S )Nc                   S      dS )N   r   r   r   r   r   <lambda>7       z0TestF77Callback.check_function.<locals>.<lambda>r   c                 S   r   N   r   ar   r   r   r   9   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__L      z2TestF77Callback.check_function.<locals>.A.__call__c                 S   r   )N	   r   r+   r   r   r   mthO   r-   z-TestF77Callback.check_function.<locals>.A.mthN)__name__
__module____qualname__r,   r/   r   r   r   r   AK   s    r3   r$   r.   )	getattrr   r&   pir'   funcfunc0	_cpointerr/   )r   r	   r   rr3   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 )Nr9   r   r   r   )coder   r   r   r   [   s   z6TestF77Callback.test_string_callback.<locals>.callbackstring_callbackr   )r4   r   )r   r   fr9   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s1J 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   m   s   
z<TestF77Callback.test_string_callback_array.<locals>.callbackstring_callback_arrayr   )rH   zerosarrayr4   r   size)r   cu1cu2cu3r   r=   rJ   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 ]}|   q|D ]}|  q$dr6td S )	Nc                     s*   t d  jdd } | dksJ dS )NgMbP?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 )N2   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sJ W Y d }~nd }~ww dd
d| j _| j d}|dksJ | j d}|dksJ 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   rN   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 )	TestGH18335zThe 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>.barn   )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   )r&   r   r   r   rg   r_   rX   numpyrH   numpy.testingr   rB   r   F2PyTestr   r   r   r   r   r   r   r   r   <module>   s      8	