
    G/Ph                        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ej                  Z G d de          Z G d	 d
ej                  Z G d dej                  Z G d dej                  ZdS )    N)IS_PYPY   )utilc                      e Zd Z ej        dddd          gZej                            dd	                    d                    ej        j
        d                         Zej                            ed	
          d             Zd Zej                            ej        dk    d
          d             Zej                            ej        dk    d
          d             Zd Zd ZdS )TestF77Callbacktestssrccallbackzfoo.fnamezt,t2,c                 0    |                      |           d S N)check_function)selfr   s     ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numpy/f2py/tests/test_callback.pytest_allzTestF77Callback.test_all   s     	D!!!!!    z,PyPy cannot modify tp_doc after PyType_Ready)reasonc                 \    t          j        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   expecteds     r   test_docstringzTestF77Callback.test_docstring   s:     ? $  4 {}$000000r   c                    t          | j        |          } |d           }|dk    sJ  |d d          }|dk    sJ  |d d          }|dk    sJ  |d	 d
          }|dk    sJ  |d t          j        f          }|dk    sJ  |t          j        t          j        f          }|dk    sJ  || j        j        d          }|dk    sJ  || j        j                  }|dk    sJ  || j        j        j                  }|dk    sJ  G d d          } |            } ||          }|dk    sJ  ||j                  }|dk    sJ d S )Nc                      dS )N    r    r   r   <lambda>z0TestF77Callback.check_function.<locals>.<lambda>7   s    a r   r   c                     dS N   r    as    r   r!   z0TestF77Callback.check_function.<locals>.<lambda>9        r   )   )fun_extra_argsr$   c                     | S r   r    r%   s    r   r!   z0TestF77Callback.check_function.<locals>.<lambda>;   r'   r   r(   c                     d| z   S r#   r    r%   s    r   r!   z0TestF77Callback.check_function.<locals>.<lambda>=   s
    A r   )      c                 *    t          j        |           S r   )mathdegreesr%   s    r   r!   z0TestF77Callback.check_function.<locals>.<lambda>?   s    Q r            c                       e Zd Zd Zd ZdS ))TestF77Callback.check_function.<locals>.Ac                     dS )Nr,   r    r   s    r   __call__z2TestF77Callback.check_function.<locals>.A.__call__L       qr   c                     dS )N	   r    r7   s    r   mthz-TestF77Callback.check_function.<locals>.A.mthO   r9   r   N)__name__
__module____qualname__r8   r<   r    r   r   Ar5   K   s2              r   r@   r,   r;   )	getattrr   r/   pir0   funcfunc0	_cpointerr<   )r   r   r   rr@   r&   s         r   r   zTestF77Callback.check_function5   s   DK&&AiiLLAvvvvAkk%000AvvvvAkk%000AvvvvAooe444BwwwwA''DDDCxxxxAdlDG;777CxxxxAdku555BwwwwAdk  BwwwwAdk)**Bwwww	 	 	 	 	 	 	 	 ACCAaDDAvvvvAaeHHAvvvvvvr   win32z)Fails with MinGW64 Gfortran (Issue #9673)c                 \    d }t          | j        d          } ||          }|dk    sJ d S )Nc                     | dk    rdS dS )NrF   r   r   r    )codes    r   r
   z6TestF77Callback.test_string_callback.<locals>.callback[   s    s{{qqr   string_callbackr   )rA   r   )r   r
   frF   s       r   test_string_callbackz$TestF77Callback.test_string_callbackX   sC    	 	 	 DK!233AhKKAvvvvvvr   c                     t          j        dd          }t          j        dd          }t          j        dgd          }d }t          | j        d          }|||fD ]} ||||j                  }|dk    sJ d S )	N)r   S8)r      c c                 p    | j         |fk    rdS | j        dk    rdS t          j        | dk              sdS dS )Nr   rO      r      r   )shapedtypenpall)culencus     r   r
   z<TestF77Callback.test_string_callback_array.<locals>.callbackm   sH    xE8##qx4q6")$$ q1r   string_callback_arrayr   )rX   zerosarrayrA   r   size)r   cu1cu2cu3r
   rL   rZ   ress           r   test_string_callback_arrayz*TestF77Callback.test_string_callback_arraye   s     hud##hvs##htT""	 	 	 DK!899S/ 	 	B!Hb"'**C!88888	 	r   c                      g  fd fdfddD             }|D ]}|                                  |D ]}|                                 d                              rt                    d S )Nc                  v    t          j        d           j                            d           } | dk    sJ dS )NgMbP?c                      dS N{   r    r    r   r   r!   z?TestF77Callback.test_threadsafety.<locals>.cb.<locals>.<lambda>   s    c r   ri   *   )timesleepr   r   )rF   r   s    r   cbz-TestF77Callback.test_threadsafety.<locals>.cb   s>     Jt kk**A88882r   c                 
   	 t          d          D ]9}j                                      }|dk    sJ                     |            :d S # t          $ r*                     t          j                               Y d S w xY w)N2   rj   )ranger   r   r   	Exceptionappend	traceback
format_exc)r   jrF   rm   errorsr   s      r   runnerz1TestF77Callback.test_threadsafety.<locals>.runner   s    6r . .Ab))A7777''----. .  6 6 6i2445555556s   A	A 0BBc                 b    g | ]+}t          d           D ]}t          j        |f          ,S )   )targetargs)rp   	threadingThread).0argnrw   s      r   
<listcomp>z5TestF77Callback.test_threadsafety.<locals>.<listcomp>   sU     
 
 
E"II
 
'( F#999
 
 
 
r   )r   t2z

)startjoinAssertionError)r   threadsr   rm   rv   rw   s   `  @@@r   test_threadsafetyz!TestF77Callback.test_threadsafety{   s     		 		 		 		 			6 	6 	6 	6 	6 	6 	6
 
 
 
"
 
 

  	 	AGGIIII 	 	AFFHHHHV$$ 	) (((	) 	)r   c                 ~   	 | j                             d           n;# t          $ r.}t          |                              d          sJ Y d }~nd }~ww xY w	 | j                             d           n;# t          $ r.}t          |                              d          sJ Y d }~nd }~ww xY wd | j         _        | j                             d          }|dk    sJ d | j         _        | j                             d          }|dk    sJ | j         `	 | j                             d           n;# t          $ r.}t          |                              d          sJ Y d }~nd }~ww xY wdd	| j         _        | j                             d          }|d
k    sJ | j                             d          }|dk    sJ d S )NrT   zCallback global_f not definedz!cb: Callback global_f not definedc                     | dz   S )Nr   r    xs    r   r!   z6TestF77Callback.test_hidden_callback.<locals>.<lambda>   
    Q r   rU   c                     | dz   S )NrT   r    r   s    r   r!   z6TestF77Callback.test_hidden_callback.<locals>.<lambda>   r   r   r   r   c                     | dz   S )NrU   r    r   s    r   r!   z6TestF77Callback.test_hidden_callback.<locals>.<lambda>   s
    1q5 r   r$   )r   )r   hidden_callbackrq   str
startswithhidden_callback2global_f)r   msgrF   s      r   test_hidden_callbackz$TestF77Callback.test_hidden_callback   s   	HK''**** 	H 	H 	Hs88&&'FGGGGGGGGGG	H	LK((++++ 	L 	L 	Ls88&&'JKKKKKKKKKK	L  /K''**Avvvv.K''**AvvvvK 	HK''**** 	H 	H 	Hs88&&'FGGGGGGGGGG	H  100K''**Avvvv K((++AvvvvvvsD    
A$AAA4 4
B,>$B''B,D0 0
E(:$E##E(N)r=   r>   r?   r   getpathsourcespytestmarkparametrizesplitslowr   xfailr   r   r   skipifsysplatformrM   rd   r   r   r    r   r   r   r      sm       t|GUJ@@AG[VV\\#%6%677[" "  87" [wL  N N1 1N N1:! ! !F [/J  L L	 	L L	 [/J  L L L L(&) &) &)P    r   r   c                       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   r      s"         
 ''GGGr   r   c                   `    e Zd Z ej        dddd          gZej        j        d             Z	dS )TestF90Callbackr   r	   r
   zgh17797.f90c                     d }t          j        g dt           j                  }| j                            ||          }|dk    sJ d S )Nc                     | dz   S rh   r    r   s    r   incrz*TestF90Callback.test_gh17797.<locals>.incr   s    s7Nr   )r   rT   rU   )rW      )rX   r^   int64r   gh17797)r   r   yrF   s       r   test_gh17797zTestF90Callback.test_gh17797   s[    	 	 	 HYYYbh///Ka((O######r   N)
r=   r>   r?   r   r   r   r   r   r   r   r    r   r   r   r      sM        t|GUJFFGG[$ $ $ $ $r   r   c                   d    e Zd ZdZ ej        dddd          gZej        j	        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                 P    d }| j                             |          }|dk    sJ d S )Nc                 &    | dxx         dz  cc<   d S )Nr   r   r    r   s    r   fooz%TestGH18335.test_gh18335.<locals>.foo   s    aDDDAIDDDDDr   |   )r   gh18335)r   r   rF   s      r   test_gh18335zTestGH18335.test_gh18335   s9    	 	 	 K$$G||||||r   N)r=   r>   r?   r   r   r   r   r   r   r   r   r    r   r   r   r      sY         
 t|GUJFFGG[    r   r   c                   d    e Zd Z ej        dddd           ej        dddd          gZdZd ZdS )	TestGH25211r   r	   r
   z	gh25211.fzgh25211.pyf	callback2c                 P    d }| j                             |          }|dk    sJ d S )Nc                     | | z  S r   r    r   s    r   barz%TestGH25211.test_gh25211.<locals>.bar   s    Q3Jr   n   )r   r   )r   r   rc   s      r   test_gh25211zTestGH25211.test_gh25211   s7    	 	 	 kooc""czzzzzzr   N)r=   r>   r?   r   r   r   module_namer   r    r   r   r   r      sZ        t|GUJDDt|GUJFFHGK    r   r   )r/   r   r   r   r|   rs   rk   numpyrX   numpy.testingr   rR   r   F2PyTestr   r   r   r   r   r    r   r   <module>r      sg     



               ! ! ! ! ! !      t t t t tdm t t tn( ( ( ( ( ( ( (
$ 
$ 
$ 
$ 
$dm 
$ 
$ 
$    $-   "
 
 
 
 
$- 
 
 
 
 
r   