
    qKg                        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y)    N)IS_PYPY   )utilc                      e Zd Z ej                  dddd      gZej                  j                  ddj                  d            ej                  j                  d               Zej                  j                  ed	
      d        Zd Zej                  j!                  ej$                  dk(  d
      d        Zej                  j!                  ej$                  dk(  d
      d        Zd Zd Zy)TestF77Callbacktestssrccallbackzfoo.fnamezt,t2,c                 &    | j                  |       y N)check_function)selfr   s     b/home/alanp/www/video.onchill/myenv/lib/python3.12/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                 x    t        j                  d      }| j                  j                  j                  |k(  sJ y )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   s5     ?? $ 4 {{}}$$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 y )Nc                       y)N    r    r   r   <lambda>z0TestF77Callback.check_function.<locals>.<lambda>7   s    ar   r   c                      yN   r    as    r   r!   z0TestF77Callback.check_function.<locals>.<lambda>9   s    r   )   )fun_extra_argsr$   c                     | S r   r    r%   s    r   r!   z0TestF77Callback.check_function.<locals>.<lambda>;   s    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y))TestF77Callback.check_function.<locals>.Ac                      y)Nr+   r    r   s    r   __call__z2TestF77Callback.check_function.<locals>.A.__call__L       r   c                      y)N	   r    r6   s    r   mthz-TestF77Callback.check_function.<locals>.A.mthO   r8   r   N)__name__
__module____qualname__r7   r;   r    r   r   Ar4   K   s    r   r?   r+   r:   )	getattrr   r.   pir/   funcfunc0	_cpointerr;   )r   r   r   rr?   r&   s         r   r   zTestF77Callback.check_function5   sN   DKK&iLAvvk%0Avvk%0Avvoe4Bww'DCxxdllDGG;7Cxxdkku5Bwwdkk Bwwdkk))*Bww	 	 CaDAvvaeeHAvvr   win32z)Fails with MinGW64 Gfortran (Issue #9673)c                 T    d }t        | j                  d      } ||      }|dk(  sJ y )Nc                     | dk(  ryy)NrE   r   r   r    )codes    r   r
   z6TestF77Callback.test_string_callback.<locals>.callback[   s    s{r   string_callbackr   )r@   r   )r   r
   frE   s       r   test_string_callbackz$TestF77Callback.test_string_callbackX   s.    	 DKK!23hKAvvr   c                    t        j                  dd      }t        j                  dd      }t        j                  dgd      }d }t        | j                  d      }|||fD ]  } ||||j
                        }|dk(  rJ  y )	N)r   S8)r      c c                 x    | j                   |fk7  ry| j                  dk7  ryt        j                  | dk(        syy)Nr   rN      r      r   )shapedtypenpall)culencus     r   r
   z<TestF77Callback.test_string_callback_array.<locals>.callbackm   s8    xxE8#xx466")$r   string_callback_arrayr   )rW   zerosarrayr@   r   size)r   cu1cu2cu3r
   rK   rY   ress           r   test_string_callback_arrayz*TestF77Callback.test_string_callback_arraye   s{     hhud#hhvs#hhtT"	 DKK!89S/BHb"''*C!8O8 "r   c           	      8    g  fd fd}dD cg c]*  }t        d      D ]  }t        j                  ||f       , }}}|D ]  }|j                           |D ]  }|j	                           dj	                        rt              y c c}}w )Nc                  v    t        j                  d       j                  j                  d       } | dk(  sJ y)NgMbP?c                       yN{   r    r    r   r   r!   z?TestF77Callback.test_threadsafety.<locals>.cb.<locals>.<lambda>   s    cr   rh   *   )timesleepr   r   )rE   r   s    r   cbz-TestF77Callback.test_threadsafety.<locals>.cb   s3     JJt k*A8O8r   c                     	 t        d      D ]5  }j                  j                        }|dk(  sJ j                  |        7 y # t        $ r& j                  t        j                                Y y w xY w)N2   ri   )ranger   r   r   	Exceptionappend	traceback
format_exc)r   jrE   rl   errorsr   s      r   runnerz1TestF77Callback.test_threadsafety.<locals>.runner   sg    6rAb)A7N7''- #  6i22456s   AA ,A65A6)r   t2   )targetargsz

)ro   	threadingThreadstartjoinAssertionError)r   rv   argnthreadsr   rl   ru   s   `     @@r   test_threadsafetyz!TestF77Callback.test_threadsafety{   s     			6 #
"E"Iq F#9,5 :" 	 

 AGGI  AFFH  V$ (( 
s   /Bc                 r   	 | j                   j                  d       	 | j                   j                  d       d | j                   _        | j                   j                  d      }|dk(  sJ d | j                   _        | j                   j                  d      }|dk(  sJ | j                   `	 | j                   j                  d       d
d| j                   _        | j                   j                  d      }|d	k(  sJ | j                   j                  d      }|dk(  sJ y # t        $ r'}t        |      j	                  d      sJ Y d }~/d }~ww xY w# t        $ r'}t        |      j	                  d      sJ Y d }~Fd }~ww xY w# t        $ r&}t        |      j	                  d      sJ Y d }~d }~ww xY w)NrS   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   rT   c                     | dz   S )NrS   r    r   s    r   r!   z6TestF77Callback.test_hidden_callback.<locals>.<lambda>   r   r   r   c                     | dz   S )NrT   r    r   s    r   r!   z6TestF77Callback.test_hidden_callback.<locals>.<lambda>   s    1q5r   r$   )r   )r   hidden_callbackrp   str
startswithhidden_callback2global_f)r   msgrE   s      r   test_hidden_callbackz$TestF77Callback.test_hidden_callback   s   	HKK''*	LKK((+  /KK''*Avv.KK''*AvvKK 	HKK''*  1KK''*Avv KK((+Avv9  	Hs8&&'FGGG	H
  	Ls8&&'JKKK	L  	Hs8&&'FGGG	HsF   D! E .F !	E*EE	FE??F	F6F11F6N)r<   r=   r>   r   getpathsourcespytestmarkparametrizesplitslowr   xfailr   r   r   skipifsysplatformrL   rc   r   r   r    r   r   r   r      s	   t||GUJ@AG[[VV\\#%67[["  8" [[wL  N1N1:!F [[/J  L	L	 [[/J  LL(&)Pr   r   c                       e Zd ZdZdgZy)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    
 ''Gr   r   c                   p    e Zd Z ej                  dddd      gZej                  j                  d        Z	y)TestF90Callbackr   r	   r
   zgh17797.f90c                     d }t        j                  g dt         j                        }| j                  j	                  ||      }|dk(  sJ y )Nc                     | dz   S rg   r    r   s    r   incrz*TestF90Callback.test_gh17797.<locals>.incr   s    s7Nr   )r   rS   rT   )rV      )rW   r]   int64r   gh17797)r   r   yrE   s       r   test_gh17797zTestF90Callback.test_gh17797   sA    	 HHYbhh/KKa(O###r   N)
r<   r=   r>   r   r   r   r   r   r   r   r    r   r   r   r      s7    t||GUJFGG[[$ $r   r   c                   t    e Zd ZdZ ej
                  dddd      gZej                  j                  d        Z
y)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                 N    d }| j                   j                  |      }|dk(  sJ y )Nc                     | dxx   dz  cc<   y )Nr   r   r    r   s    r   fooz%TestGH18335.test_gh18335.<locals>.foo   s    aDAIDr   |   )r   gh18335)r   r   rE   s      r   test_gh18335zTestGH18335.test_gh18335   s)    	 KK$G||r   N)r<   r=   r>   r   r   r   r   r   r   r   r   r    r   r   r   r      s>    
 t||GUJFGG[[ r   r   c                   j    e Zd Z ej                  dddd       ej                  dddd      gZdZd Zy)	TestGH25211r   r	   r
   z	gh25211.fzgh25211.pyf	callback2c                 N    d }| j                   j                  |      }|dk(  sJ y )Nc                     | | z  S r   r    r   s    r   barz%TestGH25211.test_gh25211.<locals>.bar   s    Q3Jr   n   )r   r   )r   r   rb   s      r   test_gh25211zTestGH25211.test_gh25211   s'    	 kkooc"czzr   N)r<   r=   r>   r   r   r   module_namer   r    r   r   r   r      s<    t||GUJDt||GUJFHGKr   r   )r.   r   r   r   r{   rr   rj   numpyrW   numpy.testingr   rQ   r   F2PyTestr   r   r   r   r   r    r   r   <module>r      sr      
      ! tdmm tn( (
$dmm 
$$-- "
$-- 
r   