Ë
    ›2Úi  ã                   óð   — 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y)é    N)ÚIS_PYPYé   )Úutilc                   ó²  — e Zd Z ej                  dddd«      gZej                  j                  ddj                  d«      «      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/html/acx/venv/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>6   ó   � r   r   c                  ó   — y©Né   r    ©Úas    r   r!   z0TestF77Callback.check_function.<locals>.<lambda>8   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__K   ó   € Ør   c                  ó   — y)Né	   r    r7   s    r   Úmthz-TestF77Callback.check_function.<locals>.A.mthN   r9   r   N)Ú__name__Ú
__module__Ú__qualname__r8   r<   r    r   r   ÚAr5   J   s   „ òór   r@   r,   r;   )	Úgetattrr   r/   Úpir0   ÚfuncÚfunc0Ú	_cpointerr<   )r   r   r   Úrr@   r'   s         r   r   zTestF77Callback.check_function4   sN  € Ü�D—K‘K Ó&ˆÙ‰i‹LˆØ�AŠvˆˆvÙ‰k¨%Ô0ˆØ�AŠvˆˆvÙ‰k¨%Ô0ˆØ�AŠvˆˆvÙ‰o¨eÔ4ˆØ�BŠwˆˆwÙÑ'¼¿¹¸ÔDˆØ�CŠxˆˆxÙŒd�l‰l¬D¯G©G¨;Ô7ˆØ�CŠxˆˆxáˆd�k‰k×Ñ¨uÔ5ˆØ�BŠwˆˆwÙˆd�k‰k×ÑÓ ˆØ�BŠwˆˆwÙˆd�k‰k×Ñ×)Ñ)Ó*ˆØ�BŠwˆˆw÷	ñ 	ñ ‹CˆÙˆa‹DˆØ�AŠvˆˆvÙˆa�e‰e‹HˆØ�AŠvˆ‰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)NrF   r   r   r    )Úcodes    r   r
   z6TestF77Callback.test_string_callback.<locals>.callbackZ   s   € Ø�sŠ{Øàr   Ústring_callbackr   )rA   r   )r   r
   ÚfrF   s       r   Útest_string_callbackz$TestF77Callback.test_string_callbackW   s.   € ò	ô �D—K‘KÐ!2Ó3ˆÙˆh‹KˆØ�AŠvˆ‰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   rO   é   r   é   r   )ÚshapeÚdtypeÚnpÚall)ÚcuÚlencus     r   r
   z<TestF77Callback.test_string_callback_array.<locals>.callbackl   s8   € Ø�x‰x˜E˜8Ò#ØØ�x‰x˜4ÒØÜ—6‘6˜" ™)Ô$ØØr   Ústring_callback_arrayr   )rX   ÚzerosÚarrayrA   r   Úsize)r   Úcu1Úcu2Úcu3r
   rL   rZ   Úress           r   Útest_string_callback_arrayz*TestF77Callback.test_string_callback_arrayd   s€   € ô �h‰h�u˜dÓ#ˆÜ�h‰h�v˜sÓ#ˆÜ�h‰h˜�t˜TÓ"ˆò	ô �D—K‘KÐ!8Ó9ˆØ˜˜S�/ò 	ˆBÙ�H˜b "§'¡'Ó*ˆCØ˜!“8ˆO�8ñ	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)Ngü©ñÒMbP?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   ø€ ô �J‰J�tÔð —‘—‘™kÓ*ˆAØ˜’8ˆO�8à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)Né2   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Ø š7�N˜7Ø×'Ñ'¨Õ-ñ.øô ò 6Ø—‘œi×2Ñ2Ó4Ö5ð6ús   ƒ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_threadsafetyz   s´   ú€ ð ˆô		ö	6ð #÷
à¬E°"«Iò
à'(ô ×Ñ F°#°Ö9ð
Ø9ð
ˆñ 
ð
 ò 	ˆAØ�G‰G�Ið	ð ò 	ˆAØ�F‰F�Hð	ð —‘˜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
   € ¨1¨q©5€ 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‰K×'Ñ'¨Ô*ð	LØ�K‰K×(Ñ(¨Ô+ñ  /ˆ�‰ÔØ�K‰K×'Ñ'¨Ó*ˆØ�AŠvˆˆvá.ˆ�‰ÔØ�K‰K×'Ñ'¨Ó*ˆØ�AŠvˆˆvà�K‰KÐ ð	HØ�K‰K×'Ñ'¨Ô*ò  1ˆ�‰ÔØ�K‰K×'Ñ'¨Ó*ˆØ�AŠvˆˆvð �K‰K×(Ñ(¨Ó+ˆØ�AŠvˆ‰vøô9 ò 	HÜ�s“8×&Ñ&Ð'FÔGÐGÖGûð	Hûô
 ò 	LÜ�s“8×&Ñ&Ð'JÔKÐKÖKûð	Lûô ò 	HÜ�s“8×&Ñ&Ð'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Úsplitr   Úxfailr   r   r   ÚskipifÚsysÚplatformrM   rd   r„   r’   r    r   r   r   r      s÷   „ Øˆt�|‰|˜G U¨J¸Ó@ÐA€Gà‡[�[×Ñ˜V V§\¡\°#Ó%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                   ó>   — e Zd Z ej                  dddd«      gZ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   € Ø�s‘7ˆNr   )r   rT   rU   )rW   é�   )rX   r^   Úint64r   Úgh17797)r   r¤   ÚyrF   s       r   Útest_gh17797zTestF90Callback.test_gh17797Ð   sA   € ò	ô �H‰H’Y¤b§h¡hÔ/ˆØ�K‰K×Ñ  aÓ(ˆØ�OÒ#Ð#Ñ#r   N)r=   r>   r?   r   r“   r”   r©   r    r   r   r¡   r¡   Í   s    „ Øˆt�|‰|˜G U¨J¸ÓFÐG€Gó$r   r¡   c                   óB   — e Zd ZdZ ej
                  dddd«      gZd„ Zy)ÚTestGH18335zäThe 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   € Øˆa‹D�A‰IŒDr   é|   )r   Úgh18335)r   r®   rF   s      r   Útest_gh18335zTestGH18335.test_gh18335á   s)   € ò	ð �K‰K×Ñ Ó$ˆØ�GŠ|Ð‰|r   N)r=   r>   r?   r   r   r“   r”   r±   r    r   r   r«   r«   Ù   s'   „ ñð
 ˆt�|‰|˜G U¨J¸ÓFÐG€Gór   r«   )r/   r   r›   r•   r|   rs   rk   ÚnumpyrX   Únumpy.testingr   rR   r   ÚF2PyTestr   rž   r¡   r«   r    r   r   ú<module>rµ      sb   ðÛ Û Û 
Û Û Û Û ã Ý !Ý ôs�d—m‘mô sôl(˜ô (ô	$�d—m‘mô 	$ô�$—-‘-õ r   