§
    µ³Ùg  ã            
       óR  — d dl mZmZ d dlm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 d dlmZ 	 d dlZdZn# e$ r dZY nw xY wd	Zd#d
„Zd„ Zd„ Zd„ Zej        ej        ej        ej        dœZd„ d„ d„ d„ d„ d„ d„ d„ d„ dœ	Zd„ d„ d„ d„ dœZeeej        dœZd„ Z d „ Z!d!„ Z"d"„ Z#dS )$é    )Úassert_equalÚassert_)ÚraisesN)Ú_ccallback_c)Ú_test_ccallback)ÚLowLevelCallableTFç       @c                 óN   — | t           k    rt          d¦  «        ‚|€| dz   S | |z   S )Nz	bad valueé   )ÚERROR_VALUEÚ
ValueError)ÚaÚ	user_datas     úU/granary/edev/quantum/lib/python3.11/site-packages/scipy/_lib/tests/test_ccallback.pyÚcallback_pythonr      s4   € Ø�KÒÐÝ˜Ñ%Ô%Ð%àÐØ�1‰uˆà�9‰}Ðó    c                 óÚ   — t           st          j        d¦  «         t          j        | t          j        ¦  «        }|j        }t          j        ¦   «         }|                     ||¦  «        }|S )Núcffi not installed)	Ú	HAVE_CFFIÚpytestÚskipÚctypesÚcastÚc_void_pÚvalueÚcffiÚFFI)ÚbaseÚ	signatureÚvoidpÚaddressÚffiÚfuncs         r   Ú_get_cffi_funcr$      s\   € Ýð *ÝŒÐ(Ñ)Ô)Ð)õ ŒK˜�fœoÑ.Ô.€EØŒk€Gõ Œ(‰*Œ*€CØ�8Š8�I˜wÑ'Ô'€DØ€Kr   c                  óŒ   — t          j        d¦  «        } t          j        t          j        | ¦  «        t           j        ¦  «        S ©Nr	   )r   Úc_doubler   ÚpointerÚc_voidp)r   s    r   Ú_get_ctypes_datar*   -   s/   € ÝŒO˜CÑ Ô €EÝŒ;•v”~ eÑ,Ô,­f¬nÑ=Ô=Ð=r   c                  óŠ   — t           st          j        d¦  «         t          j        ¦   «         } |                      dd¦  «        S )Nr   zdouble *r	   )r   r   r   r   r   Únew)r"   s    r   Ú_get_cffi_datar-   2   s:   € Ýð *ÝŒÐ(Ñ)Ô)Ð)Ý
Œ(‰*Œ*€CØ�7Š7�:˜sÑ#Ô#Ð#r   )ÚsimpleÚnodataÚnonlocalÚcythonc                  ó   — t           S ©N)r   © r   r   ú<lambda>r5   B   s   € •o€ r   c                  ó(   — t          j        ¦   «         S r3   )r   Útest_get_plus1_capsuler4   r   r   r5   r5   C   s   € •Ô=Ñ?Ô?€ r   c                  ó6   — t          j        t          d¦  «        S )NÚplus1_cython©r   Úfrom_cythonÚ_test_ccallback_cythonr4   r   r   r5   r5   D   s   € Õ&Ô2Õ3IØ3AñCô C€ r   c                  ó   — t           j        S r3   )r<   Úplus1_ctypesr4   r   r   r5   r5   F   s
   € Õ,Ô9€ r   c                  ó6   — t          t          j        d¦  «        S )Nz!double (*)(double, int *, void *))r$   r<   r>   r4   r   r   r5   r5   G   s   € •NÕ#9Ô#FØ#FñHô H€ r   c                  ó(   — t          j        ¦   «         S r3   )r   Útest_get_plus1b_capsuler4   r   r   r5   r5   I   s   € �Ô@ÑBÔB€ r   c                  ó6   — t          j        t          d¦  «        S )NÚplus1b_cythonr:   r4   r   r   r5   r5   J   s   € Õ(Ô4Õ5KØ5DñFô F€ r   c                  ó   — t           j        S r3   )r<   Úplus1b_ctypesr4   r   r   r5   r5   L   s
   € Õ.Ô<€ r   c                  ó6   — t          t          j        d¦  «        S )Nz)double (*)(double, double, int *, void *))r$   r<   rE   r4   r   r   r5   r5   M   s   € •nÕ%;Ô%IØ%PñRô R€ r   )	ÚpythonÚcapsuler1   r   r   Ú	capsule_bÚcython_bÚctypes_bÚcffi_bc                  ó(   — t          j        ¦   «         S r3   )r   Útest_get_plus1bc_capsuler4   r   r   r5   r5   S   s   € �/ÔBÑDÔD€ r   c                  ó6   — t          j        t          d¦  «        S )NÚplus1bc_cythonr:   r4   r   r   r5   r5   T   s   € Õ)Ô5Õ6LØ6FñHô H€ r   c                  ó   — t           j        S r3   )r<   Úplus1bc_ctypesr4   r   r   r5   r5   V   s
   € Õ/Ô>€ r   c                  ó6   — t          t          j        d¦  «        S )Nz1double (*)(double, double, double, int *, void *))r$   r<   rR   r4   r   r   r5   r5   W   s   € •~ÝÔ-Ø;ñô € r   )Ú
capsule_bcÚ	cython_bcÚ	ctypes_bcÚcffi_bc)r   r   rH   c                  ó  — d„ } t          t                               ¦   «         ¦  «        D ]a}t          t                               ¦   «         ¦  «        D ]8}t          t                               ¦   «         ¦  «        D ]} | |||¦  «         ŒŒ9Œbd S )Nc                 ón  ‡— t           |          } t          ‰         ¦   «         Št          |         ¦   «         }‰t          u rˆfd„}nt	          ‰|¦  «        }t	          ‰¦  «        Št           | ‰d¦  «        d¦  «         t          t          | ‰t          ¦  «         t           | |d¦  «        d¦  «         d S )Nc                 ó   •—  ‰| d¦  «        S r&   r4   ©Úxr#   s    €r   Úfunc2z,test_callbacks.<locals>.check.<locals>.func2k   ó   ø€ Ø�t˜A˜s‘|”|Ð#r   ç      ð?r	   g      @)	ÚCALLERSÚFUNCSÚ
USER_DATASr   r   r   Úassert_raisesr   r   )Úcallerr#   r   r]   s    `  r   Úcheckztest_callbacks.<locals>.checke   sÈ   ø€ Ý˜”ˆÝ�TŒ{‰}Œ}ˆÝ˜yÔ)Ñ+Ô+ˆ	à•?Ð"Ð"ð$ð $ð $ð $ð $ð $õ % T¨9Ñ5Ô5ˆEÝ# DÑ)Ô)ˆDõ 	�V�V˜D #Ñ&Ô&¨Ñ,Ô,Ð,õ 	•j &¨$µÑ<Ô<Ð<õ 	�V�V˜E 3Ñ'Ô'¨Ñ-Ô-Ð-Ð-Ð-r   )Úsortedr`   Úkeysra   rb   ©re   rd   r#   r   s       r   Útest_callbacksri   d   s�   € ð.ð .ð .õ* �Ÿš™œÑ(Ô(ð /ð /ˆÝ�5Ÿ:š:™<œ<Ñ(Ô(ð 	/ð 	/ˆDÝ#¥J§O¢OÑ$5Ô$5Ñ6Ô6ð /ð /�	Ø��f˜d IÑ.Ô.Ð.Ð.ð/ð	/ð/ð /r   c                  ó  — d„ } t          t                               ¦   «         ¦  «        D ]a}t          t                               ¦   «         ¦  «        D ]8}t          t                               ¦   «         ¦  «        D ]} | |||¦  «         ŒŒ9Œbd S )Nc                 ó  ‡— t           |          } t          |         ¦   «         }t          ‰         ¦   «         Š‰t          u rˆfd„}nt	          ‰|¦  «        }t	          ‰¦  «        Št          t          | t	          ‰¦  «        d¦  «         t          t          | |d¦  «         t	          ‰¦  «        }	  | |d¦  «         d S # t          $ rC}t          |¦  «        }t          |j	        |v |¦  «         t          d|v |¦  «         Y d }~d S d }~ww xY w)Nc                 ó   •—  ‰| d¦  «        S r&   r4   r[   s    €r   r]   z0test_bad_callbacks.<locals>.check.<locals>.func2‡   r^   r   r_   z&double (double, double, int *, void *))
r`   rb   Ú	BAD_FUNCSr   r   rc   r   Ústrr   r   )rd   r#   r   r]   ÚllfuncÚerrÚmsgs    `     r   re   z!test_bad_callbacks.<locals>.check�   sB  ø€ Ý˜”ˆÝ˜yÔ)Ñ+Ô+ˆ	Ý˜ŒÑ Ô ˆà•?Ð"Ð"ð$ð $ð $ð $ð $ð $õ % T¨9Ñ5Ô5ˆEÝ# DÑ)Ô)ˆDõ 	•j &Õ*:¸4Ñ*@Ô*@À#ÑFÔFÐFõ 	•j &¨%°Ñ5Ô5Ð5õ " $Ñ'Ô'ˆð	JØˆF�6˜3ÑÔÐÐÐøÝð 	Jð 	Jð 	JÝ�c‘(”(ˆCÝ�FÔ$¨Ð+¨SÑ1Ô1Ð1ÝÐ<ÀÐCÀSÑIÔIÐIÐIÐIÐIÐIÐIÐIøøøøð	Jøøøs   Â0B> Â>
DÃ8DÄD)rf   r`   rg   rm   rb   rh   s       r   Útest_bad_callbacksrr   €   s¢   € ðJð Jð Jõ6 �Ÿš™œÑ(Ô(ð /ð /ˆÝ�9Ÿ>š>Ñ+Ô+Ñ,Ô,ð 	/ð 	/ˆDÝ#¥J§O¢OÑ$5Ô$5Ñ6Ô6ð /ð /�	Ø��f˜d IÑ.Ô.Ð.Ð.ð/ð	/ð/ð /r   c                  ó>  — t           j        } t          j        ¦   «         }t          |d¬¦  «        }t	          |j        d¦  «         t          t          | |d¦  «         t          |d¬¦  «        }t	          |j        d¦  «         t	           | |d¦  «        d¦  «         d S )Nzbad signature)r   é   zdouble (double, int *, void *)é   )r   Útest_call_simpler7   r   r   r   rc   r   )rd   r#   Ú
llcallables      r   Útest_signature_overriderx   ¢   sš   € ÝÔ-€FÝÔ1Ñ3Ô3€Då! $°/ÐBÑBÔB€JÝ�Ô% Ñ7Ô7Ð7Ý•*˜f j°!Ñ4Ô4Ð4å! $Ð2RÐSÑSÔS€JÝ�Ô%Ð'GÑHÔHÐHÝ��˜
 AÑ&Ô&¨Ñ*Ô*Ð*Ð*Ð*r   c                  ój   ‡— ˆfd„Šˆfd„} t                                ¦   «         D ]} | |¦  «         Œd S )Nc                 óF   •‡— | dk    rdS  ‰ˆˆfd„| dz
  ¦  «        }d|z  S )Nr   r   c                 ó   •—  ‰| ‰¦  «        S r3   r4   ©r\   Úcallbackrd   s    €€r   r5   z5test_threadsafety.<locals>.callback.<locals>.<lambda>´   s   ø€  8 8¨A¨vÑ#6Ô#6€ r   é   r4   )r   rd   Úresr}   s    ` €r   r}   z#test_threadsafety.<locals>.callback°   s=   øø€ Ø�Š6ˆ6Ø�1à�&Ð6Ð6Ð6Ð6Ð6¸¸A¹Ñ>Ô>ˆCØ�S‘5ˆLr   c                 ó$  •‡ ‡‡‡— t           ‰          Š g ŠdŠˆˆ ˆˆfd„Šˆfd„t          d¦  «        D ¦   «         }|D ]}|                     ¦   «          Œ|D ]}|                     ¦   «          Œt	          ‰d‰z  gt          |¦  «        z  ¦  «         d S )Né
   c                  óz   •— t          j        d¦  «          ‰ˆˆfd„‰¦  «        } ‰                     | ¦  «         d S )Ng{®Gáz„?c                 ó   •—  ‰| ‰¦  «        S r3   r4   r|   s    €€r   r5   z?test_threadsafety.<locals>.check.<locals>.run.<locals>.<lambda>À   s   ø€   ¨!¨VÑ!4Ô!4€ r   )ÚtimeÚsleepÚappend)Úrr}   rd   ÚcountÚresultss    €€€€r   Úrunz-test_threadsafety.<locals>.check.<locals>.run¾   sI   ø€ ÝŒJ�tÑÔÐØ�Ð4Ð4Ð4Ð4Ð4°eÑ<Ô<ˆAØ�NŠN˜1ÑÔÐÐÐr   c                 ó:   •— g | ]}t          j        ‰¬ ¦  «        ‘ŒS ))Útarget)Ú	threadingÚThread)Ú.0ÚjrŠ   s     €r   ú
<listcomp>z4test_threadsafety.<locals>.check.<locals>.<listcomp>Ã   s'   ø€ ÐCÐCÐC°A•9Ô#¨3Ð/Ñ/Ô/ÐCÐCÐCr   é   r	   )r`   ÚrangeÚstartÚjoinr   Úlen)rd   ÚthreadsÚthreadrˆ   r‰   rŠ   r}   s   `  @@@€r   re   z test_threadsafety.<locals>.check·   sÇ   øøøøø€ Ý˜”ˆàˆàˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð
 DÐCÐCÐC½¸r¹¼ÐCÑCÔCˆØð 	ð 	ˆFØ�LŠL‰NŒNˆNˆNØð 	ð 	ˆFØ�KŠK‰MŒMˆMˆMå�W˜s E™z˜l­3¨w©<¬<Ñ7Ñ8Ô8Ð8Ð8Ð8r   )r`   rg   )re   rd   r}   s     @r   Útest_threadsafetyr™   ¯   sg   ø€ ðð ð ð ð ð9ð 9ð 9ð 9ð 9õ( —,’,‘.”.ð ð ˆØˆˆf‰Œˆˆðð r   r3   )$Únumpy.testingr   r   r   r   rc   r„   r   r�   Ú
scipy._libr   r<   r   Úscipy._lib._ccallbackr   r   r   ÚImportErrorr   r   r$   r*   r-   rv   Útest_call_nodataÚtest_call_nonlocalÚtest_call_cythonr`   ra   rm   Útest_get_data_capsulerb   ri   rr   rx   r™   r4   r   r   ú<module>r¢      s!  ðØ /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø *Ð *Ð *Ð *Ð *Ð *à €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =Ø &Ð &Ð &Ð &Ð &Ð &Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ðØ€K€K€KØ€I€IøØð ð ð Ø€I€I€Iðøøøð €ðð ð ð ðð ð ð>ð >ð >ð
$ð $ð $ð Ô.ØÔ.ØÔ2Ø$Ô5ð	ð €ð &Ð%Ø?Ð?ðCð Cà9Ð9ðHð HàBÐBðFð Fà<Ð<ðRð Rð	ð 	€ð$ EÐDðHð Hà>Ð>ðð ð	ð 	€	ð ØØÔ4ðð €
ð/ð /ð /ð8/ð /ð /ðD
+ð 
+ð 
+ðð ð ð ð s   ²9 ¹AÁA