§
    ƒÛg&   ã                   óà   — d dl 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Zd dlZd dlm	Z	m
Z
 d dlmZ d dlmZ e	j        dk     rd dlZnd dlmZ edz
  Z G d	„ d
e¦  «        Z G d„ de¦  «        ZdS )é    N)Úmock)ÚconfigÚnjit)ÚTestCase)Ú_TIMEOUT)é   é	   )Úmetadatag      N@c                   ó   — e Zd Zd„ Zd„ ZdS )Ú_DummyClassc                 ó   — || _         d S ©N©Úvalue)Úselfr   s     úR/granary/edev/quantum/lib/python3.11/site-packages/numba/tests/test_entrypoints.pyÚ__init__z_DummyClass.__init__   s   € ØˆŒ
ˆ
ˆ
ó    c                 ó   — d| j         z  S )Nz_DummyClass(%f, %f)r   )r   s    r   Ú__repr__z_DummyClass.__repr__   s   € Ø$ t¤zÑ1Ð1r   N)Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      s2   € € € € € ðð ð ð2ð 2ð 2ð 2ð 2r   r   c                   óœ   — e Zd ZdZd„ Zd„ ZdZ ej        e	j
                             dd¦  «        ek    d¦  «        d„ ¦   «         Zd	„ Zd
„ ZdS )ÚTestEntrypointszE
    Test registration of init() functions from Numba extensions
    c                 óz  — t          j        d¬¦  «        }	 |t          j        |j        <   t          j        ddd¦  «        }t           j                             t
          dd|fi¬¦  «        5  dd	l	m
} d
|_        |                     ¦   «          |j                             ¦   «          |                     ¦   «          |j                             ¦   «          d d d ¦  «         n# 1 swxY w Y   |j        t          j        v rt          j        |j        = d S d S # |j        t          j        v rt          j        |j        = w xY w)NÚ_test_numba_extension©r   Úinitz_test_numba_extension:init_funcÚnumba_extensionsÚentry_points©Úreturn_valuer   ©ÚentrypointsF)r   ÚMockÚsysÚmodulesr   Úimportlib_metadataÚ
EntryPointÚpatchÚobjectÚ
numba.corer&   Ú_already_initializedÚinit_allÚ	init_funcÚassert_called_once)r   ÚmodÚmy_entrypointr&   s       r   Útest_init_entrypointz$TestEntrypoints.test_init_entrypoint$   sŠ  € õ ŒiÐ!8Ð9Ñ9Ô9ˆð	.à(+�CŒK˜œÑ%å.Ô9ØÐ9Ð;Mñô ˆMõ ”×"Ò"Ý"ØØ0°=Ð2BÐCð #ñ ô ð 3ð 3ð 3Ð2Ð2Ð2Ð2Ð2ð 49�Ô0à×$Ò$Ñ&Ô&Ð&ð ”×0Ò0Ñ2Ô2Ð2ð ×$Ò$Ñ&Ô&Ð&Ø”×0Ò0Ñ2Ô2Ð2ð%3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3ð* Œ|�sœ{Ð*Ð*Ý”K ¤Ð-Ð-Ð-ð +Ð*øˆsŒ|�sœ{Ð*Ð*Ý”K ¤Ð-Ð-Ð-Ð-Ð-s1   —AD Á+A(CÃD ÃC#Ã#D Ã&C#Ã'D Ä'D:c                 ó  — t          j        d¬¦  «        } |j        di dt          d¦  «        i¤Ž 	 |t          j        |j        <   t          j        ddd¦  «        }t           j	         
                    t          dd|fi¬	¦  «        5  d
dlm} d|_        t          j        d¬¦  «        5 }|                     ¦   «          d d d ¦  «         n# 1 swxY w Y   d}|D ]}|t#          |¦  «        v r nŒt          d¦  «        ‚|j                             ¦   «          d d d ¦  «         n# 1 swxY w Y   |j        t          j        v rt          j        |j        = d S d S # |j        t          j        v rt          j        |j        = w xY w)NÚ_test_numba_bad_extensionr   zinit_func.side_effectÚbrokenr    z#_test_numba_bad_extension:init_funcr!   r"   r#   r   r%   FT)Úrecordz2Numba extension module '_test_numba_bad_extension'z"Expected warning message not foundr   )r   r'   Úconfigure_mockÚ
ValueErrorr(   r)   r   r*   r+   r,   r-   r.   r&   r/   ÚwarningsÚcatch_warningsr0   Ústrr1   r2   )r   r3   r4   r&   ÚwÚbad_strÚxs          r   Útest_entrypoint_tolerancez)TestEntrypoints.test_entrypoint_toleranceJ   s2  € õ ŒiÐ!<Ð=Ñ=Ô=ˆØˆÔÐMÐMÐ5µzÀ(Ñ7KÔ7KÐLÐMÐMÐMð$	.à(+�CŒK˜œÑ%å.Ô9ØØ5Ø"ñô ˆMõ ”×"Ò"Ý"ØØ0°=Ð2BÐCð #ñ ô ð 3ð 3ð 3Ð2Ð2Ð2Ð2Ð2à38�Ô0åÔ,°DÐ9Ñ9Ô9ð +¸QØ×(Ò(Ñ*Ô*Ð*ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð O�Øð Kð K�AØ¥# a¡&¤&Ð(Ð(Ø˜ð )õ %Ð%IÑJÔJÐJð ”×0Ò0Ñ2Ô2Ð2ð+3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3ð2 Œ|�sœ{Ð*Ð*Ý”K ¤Ð-Ð-Ð-ð +Ð*øˆsŒ|�sœ{Ð*Ð*Ý”K ¤Ð-Ð-Ð-Ð-Ð-sU   ³AE Â#D$Â*CÂ?D$ÃC	ÃD$ÃC	ÃAD$ÄE Ä$D(Ä(E Ä+D(Ä,E Å'E?Ú	RUN_ENTRYÚ_EP_MAGIC_TOKENNzneeds tokenc                 ó   ‡— dd l Šˆfd„}t          j        d¦  «        }||_        	 |t          j        |j        <   t          j        ddd¦  «        }t          j
                             t          dd|fi¬¦  «        5  t          d	„ ¦   «         }t          d
¦  «        } ||¦  «         d d d ¦  «         n# 1 swxY w Y   |j        t          j        v rt          j        |j        = d S d S # |j        t          j        v rt          j        |j        = w xY w)Nr   c                  ó²  •‡‡—  G ˆfd„d‰j         j        ¦  «        Š‰j        j                             t
          ¦  «        ˆfd„¦   «         } ‰j                             ‰¦  «         G ˆˆfd„d‰j        j        j        ¦  «        ¦   «         Š‰j         	                    ‰¦  «        ˆfd„¦   «         }‰j         
                    ‰¦  «        ˆfd„¦   «         }d S )Nc                   ó"   •‡ — e Zd Zˆˆ fd„Zˆ xZS )úaTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.DummyTypec                 óP   •— t          ‰| ¦  «                             d¬¦  «         d S )NÚ	DummyType)Úname)Úsuperr   )r   rJ   Ú	__class__s    €€r   r   zjTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.DummyType.__init__…   s*   ø€ Ý˜) TÑ*Ô*×3Ò3¸Ð3ÑEÔEÐEÐEÐEr   ©r   r   r   r   Ú__classcell__)rM   rJ   s   @€r   rJ   rH   „   sH   øø€ € € € € ðFð Fð Fð Fð Fð Fð Fð Fð Fð Fr   rJ   c                 ó   •—  ‰¦   «         S r   r   )ÚvalÚcrJ   s     €r   Útyper_DummyClasszhTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.typer_DummyClassˆ   s   ø€ à �y‘{”{Ð"r   c                   ó$   •‡ — e Zd Zˆˆ ˆfd„Zˆ xZS )úbTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.DummyModelc                 óp   •— d‰j         j        fg}t          ‰| ¦  «                             |||¦  «         d S )Nr   )ÚtypesÚfloat64rL   r   )r   ÚdmmÚfe_typeÚmembersÚ
DummyModelrM   Únumbas       €€€r   r   zkTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.DummyModel.__init__Ž   s?   ø€ à  %¤+Ô"5Ð6ð:�Gå˜* dÑ+Ô+×4Ò4°S¸'À7ÑKÔKÐKÐKÐKr   rN   )rM   r\   r]   s   @€€r   r\   rU   Œ   sN   øø€ € € € € ðLð Lð Lð Lð Lð Lð Lð Lð Lð Lð Lr   r\   c                 óî  •— |j                              |d¦  «        }‰j        j                             | ¦  «        } ||j        |j        ¦  «        }|j                              |¦  «        |_        |j          	                    |¦  «         |j          
                    ¦   «         }‰j        j                             |j        |¦  «        }‰j                             |                     ¦   «         |¬¦  «        S )Nr   )Úis_error)ÚpyapiÚobject_getattr_stringÚcoreÚcgutilsÚcreate_struct_proxyÚcontextÚbuilderÚfloat_as_doubler   ÚdecrefÚerr_occurredÚis_not_nullÚ	extendingÚNativeValueÚ	_getvalue)	ÚtypÚobjrR   Ú	value_objÚdummy_struct_proxyÚdummy_structÚerr_flagr_   r]   s	           €r   Úunbox_dummyzcTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.unbox_dummy“   s×   ø€ àœG×9Ò9¸#¸wÑGÔG�	Ø%*¤ZÔ%7×%KÒ%KÈCÑ%PÔ%PÐ"Ø1Ð1°!´)¸Q¼YÑGÔG�Ø%&¤W×%<Ò%<¸YÑ%GÔ%G�Ô"Ø”—’˜yÑ)Ô)Ð)Øœ7×/Ò/Ñ1Ô1�Ø œ:Ô-×9Ò9¸!¼)ÀXÑNÔN�Ø”×2Ò2°<×3IÒ3IÑ3KÔ3KØ<Dð 3ñ Fô Fð Fr   c                 óÂ  •— ‰	j         j                             | ¦  «        } ||j        |j        ¦  «        }|j                             |j        ¦  «        }|j                             t          ¦  «        }|j         
                    |¦  «        }|j                             ||f¦  «        }|j                             |¦  «         |j                             |¦  «         |S r   )rb   rc   rd   re   rf   r`   Úfloat_from_doubler   Úserialize_objectr   ÚunserializeÚcall_function_objargsrh   )
rn   rQ   rR   rq   rr   rp   Úserialized_clazzÚ	class_objÚresr]   s
            €r   Ú	box_dummyzaTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function.<locals>.box_dummyŸ   s¼   ø€ à%*¤ZÔ%7×%KÒ%KÈCÑ%PÔ%PÐ"Ø1Ð1°!´)¸Q¼YÑGÔG�ØœG×5Ò5°lÔ6HÑIÔI�	Ø#$¤7×#;Ò#;½KÑ#HÔ#HÐ ØœG×/Ò/Ð0@ÑAÔA�	Ø”g×3Ò3°IÀ	¸|ÑLÔL�Ø”—’˜yÑ)Ô)Ð)Ø”—’˜yÑ)Ô)Ð)Ø�
r   )rW   ÚTyperk   Útypeof_implÚregisterr   Úregister_modelÚmodelsÚStructModelÚunboxÚbox)rS   rt   r}   r\   rJ   r]   s      @@€r   Úinit_functionzNTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.init_function€   se  øøø€ ðFð Fð Fð Fð Fð Fð F˜EœKÔ,ñ Fô Fð Fð Œ_Ô(×1Ò1µ+Ñ>Ô>ð#ð #ð #ð #ñ ?Ô>ð#ð Œ_×+Ò+¨IÑ6Ô6ðLð Lð Lð Lð Lð Lð Lð L˜Uœ_Ô3Ô?ñ Lô Lñ 7Ô6ðLð Œ_×"Ò" 9Ñ-Ô-ð	Fð 	Fð 	Fð 	Fñ .Ô-ð	Fð Œ_× Ò  Ñ+Ô+ð	ð 	ð 	ð 	ñ ,Ô+ð	ð 	ð 	r   Ú_test_numba_init_sequencer    z#_test_numba_init_sequence:init_funcr!   r"   r#   c                 ó   — | S r   r   )rA   s    r   ÚfoozDTestEntrypoints.test_entrypoint_handles_type_extensions.<locals>.foo½   s   € à�Hr   é
   )r]   rW   Ú
ModuleTyper1   r(   r)   r   r*   r+   r   r,   r-   r   r   )r   r†   r3   r4   r‰   Úivalr]   s         @r   Ú'test_entrypoint_handles_type_extensionsz7TestEntrypoints.test_entrypoint_handles_type_extensionsy   s|  ø€ ð
 	ˆˆˆð)	ð )	ð )	ð )	ð )	õV ÔÐ:Ñ;Ô;ˆØ%ˆŒð	.à(+�CŒK˜œÑ%å.Ô9ØØ5Ø"ñô ˆMõ ”×"Ò"Ý"ØØ0°=Ð2BÐCð #ñ ô ð 
ð 
õ
 ðð ñ ”ðõ # 2‘”�Ø��D‘	”	�	ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð Œ|�sœ{Ð*Ð*Ý”K ¤Ð-Ð-Ð-ð +Ð*øˆsŒ|�sœ{Ð*Ð*Ý”K ¤Ð-Ð-Ð-Ð-Ð-s0   §AC& Á;+B2Â&C& Â2B6Â6C& Â9B6Â:C& Ã&'Dc                 ó
  — t          j        |t           j        t           j        |¬¦  «        }t          j        t
          |j        ¦  «        }	 |                     ¦   «          |                     ¦   «         \  }}|j	        dk    r-t          d|j	        ›d|                     ¦   «         ›d�¦  «        ‚|                     ¦   «         |                     ¦   «         f|                     ¦   «          S # |                     ¦   «          w xY w)N)ÚstdoutÚstderrÚenvr   zprocess failed with code z: stderr follows
ú
)Ú
subprocessÚPopenÚPIPEÚ	threadingÚTimerÚ_TEST_TIMEOUTÚkillÚstartÚcommunicateÚ
returncodeÚAssertionErrorÚdecodeÚcancel)r   Úcmdliner‘   ÚpopenÚtimeoutÚoutÚerrs          r   Úrun_cmdzTestEntrypoints.run_cmdÈ   sè   € ÝÔ  Ý(2¬Ý(2¬Ø%(ð*ñ *ô *ˆõ
 ”/¥-°´Ñ<Ô<ˆð		Ø�MŠM‰OŒOˆOØ×(Ò(Ñ*Ô*‰HˆC�ØÔ 1Ò$Ð$Ý$�nàÔ%Ð%Ð% s§z¢z¡|¤| | |ð5ñ6ô 6ð 6ð —:’:‘<”< §¢¡¤Ð-à�NŠNÑÔÐÐøˆG�NŠNÑÔÐÐøøøs   ÁB
C, Ã,Dc                 ó<  — t           j                             ¦   «         }t          | j        ¦  «        |d<   | j        }t          | ¦  «        j        }d}|›d|›d|›�}t          j	        dd|g}|  
                    ||¦  «        \  }}d}	|	rt          ||¦  «         d S d S )NrD   r�   ú.z-mznumba.runtestsF)ÚosÚenvironÚcopyr>   rD   r   Útyper   r(   Ú
executabler¥   Úprint)
r   Úenv_copyÚthemodÚtheclsÚmethnameÚinjected_methodr    r£   r¤   Ú_DEBUGs
             r   Ú"test_entrypoint_extension_sequencez2TestEntrypoints.test_entrypoint_extension_sequenceÛ   s©   € Ý”:—?’?Ñ$Ô$ˆÝ&)¨$Ô*>Ñ&?Ô&?ˆÐ"Ñ#Ø”ˆÝ�d‘”Ô$ˆØ<ˆØ(.¨¨°°°¸¸ÐAˆÝ”> 4Ð)9¸?ÐKˆØ—<’< ¨Ñ2Ô2‰ˆˆSØˆØð 	Ý�#�s‰OŒOˆOˆOˆOð	ð 	r   )r   r   r   Ú__doc__r5   rB   rD   ÚunittestÚskipIfr¨   r©   Úgetr�   r¥   r´   r   r   r   r   r      s¬   € € € € € ðð ð$.ð $.ð $.ðL+.ð +.ð +.ðZ "€Oà€X„_�R”Z—^’^Ð$5°tÑ<Ô<ÀÒOØ"ñ$ô $ðK.ð K.ñ$ô $ðK.ðZð ð ð&ð ð ð ð r   r   )r(   r¶   r   rW   r<   r¨   r“   r–   r]   r   r   Únumba.tests.supportr   Únumba.testing.mainr   Ú_RUNNER_TIMEOUTÚ	PYVERSIONr*   Ú	importlibr
   r˜   r-   r   r   r   r   r   ú<module>r¾      s9  ðØ 
€
€
€
Ø Ð Ð Ð Ð Ð à €€€Ø €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø Ð Ð Ð à Ð Ð Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ø :Ð :Ð :Ð :Ð :Ð :à	Ô�fÒÐØÐÐÐÐà8Ð8Ð8Ð8Ð8Ð8à #Ñ%€ð2ð 2ð 2ð 2ð 2�&ñ 2ô 2ð 2ðGð Gð Gð Gð G�hñ Gô Gð Gð Gð Gr   