3
Kd                 @   s^   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mZm	Z	 ddl
mZ G dd dejZdS )    N)assert_assert_equalIS_PYPY   )utilc               @   s   e Zd ZdZejjddj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S )TestF77Callbacka  
       subroutine t(fun,a)
       integer a
cf2py  intent(out) a
       external fun
       call fun(a)
       end

       subroutine func(a)
cf2py  intent(in,out) a
       integer a
       a = a + 11
       end

       subroutine func0(a)
cf2py  intent(out) a
       integer a
       a = 11
       end

       subroutine t2(a)
cf2py  intent(callback) fun
       integer a
cf2py  intent(out) a
       external fun
       call fun(a)
       end

       subroutine string_callback(callback, a)
       external callback
       double precision callback
       double precision a
       character*1 r
cf2py  intent(out) a
       r = 'r'
       a = callback(r)
       end

       subroutine string_callback_array(callback, cu, lencu, a)
       external callback
       integer callback
       integer lencu
       character*8 cu(lencu)
       integer a
cf2py  intent(out) a

       a = callback(cu, lencu)
       end
    namezt,t2,c             C   s   | j | d S )N)check_function)selfr    r   R/var/www/html/virt/lib64/python3.6/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 jd}t| jj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dedentr   modulet__doc__)r   expectedr   r   r   test_docstringB   s    zTestF77Callback.test_docstringc             C   s  t | j|}|dd }t|dkt| |dd dd}t|dkt| |dd dd}t|dkt| |d	d dd}t|dkt| |dd tjfd}t|dkt| |tjtjfd}t|dkt| || jjdd}t|dkt| || jj}t|dkt| || jjj	}t|dkt| G dd d}| }||}t|d
kt| ||j
}t|dkt| d S )Nc               S   s   dS )N   r   r   r   r   r   <lambda>c   s    z0TestF77Callback.check_function.<locals>.<lambda>r   c             S   s   dS )N   r   )ar   r   r   r   e   s       )Zfun_extra_argsr   c             S   s   | S )Nr   )r   r   r   r   r   g   s    c             S   s   d|  S )Nr   r   )r   r   r   r   r   i   s          c             S   s
   t j| S )N)mathdegrees)r   r   r   r   r   k   s             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__y   s    z2TestF77Callback.check_function.<locals>.A.__call__c             S   s   dS )N	   r   )r   r   r   r   mth|   s    z-TestF77Callback.check_function.<locals>.A.mthN)__name__
__module____qualname__r#   r%   r   r   r   r   Aw   s   r)   r$   )r   )r   )r   )r   )getattrr   r   reprr   pir   funcZfunc0Z	_cpointerr%   )r   r   r   rr)   r   r   r   r   r
   a   s2    
zTestF77Callback.check_functionwin32z)Fails with MinGW64 Gfortran (Issue #9673)c             C   s2   dd }t | jd}||}t|dkt| d S )Nc             S   s   | dkrdS dS d S )Nr.   r   r   r   )coder   r   r   callback   s    z6TestF77Callback.test_string_callback.<locals>.callbackZstring_callbackr   )r*   r   r   r+   )r   r1   fr.   r   r   r   test_string_callback   s    z$TestF77Callback.test_string_callbackc             C   sF   t jdd}dd }t| jd}|||t|}t|dkt| d S )	Nr      S1c             S   s6   | j |dfkrdS | jdkr dS tj| dks2dS dS )Nr4   r   r5             r   )shapeZdtypenpall)cuZlencur   r   r   r1      s    
z<TestF77Callback.test_string_callback_array.<locals>.callbackZstring_callback_arrayr   )r   r4   )r:   Zzerosr*   r   lenr   r+   )r   r<   r1   r2   resr   r   r   test_string_callback_array   s
    	z*TestF77Callback.test_string_callback_arrayN)r&   r'   r(   r0   pytestmarkZparametrizesplitr   Zxfailr   r   r
   Zskipifsysplatformr3   r?   r   r   r   r   r      s   1#r   )r   r   rC   r@   Znumpyr:   Znumpy.testingr   r   r    r   ZF2PyTestr   r   r   r   r   <module>   s   