
    thh                        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                             ej                                                    dk    dd           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g          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namett2c                 0    |                      |           d S N)check_function)selfr   s     U/var/www/histauto/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moduler   __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  |t          j        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>:   s    a r   r   c                     dS N   r    as    r   r!   z0TestF77Callback.check_function.<locals>.<lambda><        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                       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__O       qr   c                     dS )N	   r    r4   s    r   mthz-TestF77Callback.check_function.<locals>.A.mthR   r6   r   N)__name__
__module____qualname__r5   r9   r    r   r   Ar2   N   s2              r   r=   r,   r8   )	getattrr   mathdegreespifuncfunc0	_cpointerr9   )r   r   r   rr=   r&   s         r   r   zTestF77Callback.check_function8   s   DK&&AiiLLAvvvvAkk%000AvvvvAkk%000AvvvvAooe444BwwwwAdlDG;777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                 J    d }| j         j        } ||          }|dk    sJ d S )Nc                     | dk    rdS dS )NrE   r   r   r    )codes    r   r
   z6TestF77Callback.test_string_callback.<locals>.callback^   s    s{{qqr   r   )r   string_callback)r   r
   frE   s       r   test_string_callbackz$TestF77Callback.test_string_callback[   s;    	 	 	 K'AhKKAvvvvvvr   c                     t          j        dd          }t          j        dd          }t          j        dgd          }d }| j        j        }|||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   rN      r      r   )shapedtypenpall)culencus     r   r
   z<TestF77Callback.test_string_callback_array.<locals>.callbackp   sH    xE8##qx4q6")$$ q1r   r   )rW   zerosarrayr   string_callback_arraysize)r   cu1cu2cu3r
   rK   rY   ress           r   test_string_callback_arrayz*TestF77Callback.test_string_callback_arrayh   s     hud##hvs##htT""	 	 	 K-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   rh   *   )timesleepr   r   )rE   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   ri   )ranger   r   r   	Exceptionappend	traceback
format_exc)r   jrE   rl   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)ro   	threadingThread).0argnrv   s      r   
<listcomp>z5TestF77Callback.test_threadsafety.<locals>.<listcomp>   sU     
 
 
E"II
 
'( F#999
 
 
 
r   )r   r   z

)startjoinAssertionError)r   threadsr   rl   ru   rv   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 )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   r   c                     | dz   S )NrT   r    r   s    r   r!   z6TestF77Callback.test_hidden_callback.<locals>.<lambda>   s
    1q5 r   r$   )r   )r   hidden_callbackrp   str
startswithhidden_callback2global_f)r   msgrE   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slowr   xfailr   r   r   skipifsysplatformrL   rc   r   r   r    r   r   r   r      se       t|GUJ@@AG[Vc4[11[" "  21" [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 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   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   rE   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    q5Lr   n   )r   r   )r   r   rb   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   darwinFz*Callback aborts cause CI failures on macOS)	conditionrunr   c                   B    e Zd Z ej        dddd          gZdgZd ZdS )TestCBFortranCallstatementr   r	   r
   zgh26681.f90z--lowerc                     t          j        t          d          5 }| j        j        j        | j        _        | j        j                            d           d d d            d S # 1 swxY w Y   d S )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66 	5#%)[%6%?DK"K**8444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   ;A$$A(+A(N)r:   r;   r<   r   r   r   r   r   r    r   r   r   r      sF        
 t|GUJFFGGkG5 5 5 5 5r   r   )r?   r   r   r   r{   rj   rr   r   numpyrW   numpy.testingr   rQ   r   F2PyTestr   r   r   r   r   r   r   r   systemlowerr   r    r   r   <module>r      s     



                ! ! ! ! ! !      t t t t tdm t t tn( ( ( ( ( ( ( (
$ 
$ 
$ 
$ 
$dm 
$ 
$ 
$    $-   "
 
 
 
 
$- 
 
 
 oho//55778CF  H H5 5 5 5 5 5 5H H 5 5 5r   