
    Bwg                         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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ej(                  j*                  ej(                  j-                   ej.                         j1                         dk(  dd       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     U/var/www/horilla/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>8       r   r   c                      yN   r    as    r   r!   z0TestF77Callback.check_function.<locals>.<lambda>:   r"   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__M       r   c                      y)N	   r    r7   s    r   mthz-TestF77Callback.check_function.<locals>.A.mthP   r9   r   N)__name__
__module____qualname__r8   r<   r    r   r   Ar5   L   s    r   r@   r,   r;   )	getattrr   r/   pir0   funcfunc0	_cpointerr<   )r   r   r   rr@   r'   s         r   r   zTestF77Callback.check_function6   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 }| j                   j                  } ||      }|dk(  sJ y )Nc                     | dk(  ryy)NrF   r   r   r    )codes    r   r
   z6TestF77Callback.test_string_callback.<locals>.callback\   s    s{r   r   )r   string_callback)r   r
   frF   s       r   test_string_callbackz$TestF77Callback.test_string_callbackY   s,    	 KK''hKAvvr   c                    t        j                  dd      }t        j                  dd      }t        j                  dgd      }d }| j                  j                  }|||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   rO      r      r   )shapedtypenpall)culencus     r   r
   z<TestF77Callback.test_string_callback_array.<locals>.callbackn   s8    xxE8#xx466")$r   r   )rX   zerosarrayr   string_callback_arraysize)r   cu1cu2cu3r
   rL   rZ   ress           r   test_string_callback_arrayz*TestF77Callback.test_string_callback_arrayf   s~     hhud#hhvs#hhtT"	 KK--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>   r"   r   ri   *   )timesleepr   r   )rF   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   rj   )ranger   r   r   	Exceptionappend	traceback
format_exc)r   jrF   rm   errorsr   s      r   runnerz1TestF77Callback.test_threadsafety.<locals>.runner   sl    6r .Ab)A7N7''-.  6i22456s   AA ,A65A6)r   t2   )targetargsz

)rp   	threadingThreadstartjoinAssertionError)r   rw   argnthreadsr   rm   rv   s   `     @@r   test_threadsafetyz!TestF77Callback.test_threadsafety|   s     			6 #
E"I
'( F#9
9
 

  	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)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   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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platformrM   rd   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 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   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   rF   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   rc   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   darwinFz*Callback aborts cause CI failures on macOS)	conditionrunr   c                   D    e Zd Z ej                  dddd      gZdgZd Zy)TestCBFortranCallstatementr   r	   r
   zgh26681.f90z--lowerc                    t        j                  t        d      5 }| j                  j                  j
                  | j                  _        | j                  j                  j                  d       d d d        y # 1 sw Y   y xY w)Nhelpme)match)r   raises
ValueErrorr   utilsmy_abort
mypy_abortdo_something)r   excs     r   test_callstatement_fortranz5TestCBFortranCallstatement.test_callstatement_fortran  s[    ]]:X6 	5#%)[[%6%6%?%?DKK"KK**84	5 	5 	5s   AA::BN)r=   r>   r?   r   r   r   r   r   r    r   r   r   r      s)    
 t||GUJFGGkG5r   r   )r/   r   r   r   r|   rs   rk   r   numpyrX   numpy.testingr   rR   r   F2PyTestr   r   r   r   r   r   r   r   systemlowerr   r    r   r   <module>r      s      
       ! tdmm tn( (
$dmm 
$$-- "
$-- 
 ohoo/5578CF  H5 5H 5r   