ó
    „ñ:ih   ã                   óR  • S r SSKJrJr  SSKJr  SSKJrJr  SSK	J
r
  SSKJrJrJr  SSKJr  SSKJr  S	rS
rSrS r\" \\SS9r\" \\SS9rS r0 rS r\" \R8                  5      S 5       r\" \R8                  5      S 5       r\R>                  " \R@                  5      S 5       r!g)z‚
Implement logic relating to wrapping (box) and unwrapping (unbox) instances
of jitclasses for use inside the python interpreter.
é    )ÚwrapsÚpartial)Úir)ÚtypesÚcgutils)Únjit)ÚboxÚunboxÚNativeValue)Útypeof_impl)Ú_boxz;
def accessor(__numba_self_):
    return __numba_self_.{0}
zN
def mutator(__numba_self_, __numba_val):
    __numba_self_.{0} = __numba_val
zL
def method(__numba_self_, *args):
    return __numba_self_.{method}(*args)
c                 óX   • UR                  U 5      n0 n[        X45        [        XB   5      $ )z?
Generate simple function that get/set a field of the instance
)ÚformatÚexecr   )ÚfieldÚtemplateÚfnameÚsourceÚglblss        Úe/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/numba/experimental/jitclass/boxing.pyÚ_generate_propertyr   !   s,   € ð �_‰_˜UÓ#€FØ€EÜˆÔÜ�‘ÓÐó    Úaccessor)r   r   Úmutatorc                 óŒ   ^• [         R                  U S9n0 n[        X#5        [        US   5      m[	        U5      U4S j5       nU$ )zc
Generate a wrapper for calling a method.  Note the wrapper will only
accept positional arguments.
)Úmethodr   c                  ó   >• T" U 0 UD6$ ©N© )ÚargsÚkwargsr   s     €r   ÚwrapperÚ!_generate_method.<locals>.wrapper;   s   ø€ á�tÐ&˜vÑ&Ð&r   )Ú_method_code_templater   r   r   r   )ÚnameÚfuncr   r   r"   r   s        @r   Ú_generate_methodr'   1   sP   ø€ ô
 #×)Ñ)°Ð)Ð6€FØ€EÜˆÔÜ�%˜‘/Ó"€Fä
ˆ4ƒ[ô'ó ð'ð €Nr   c                 ó  • U [         ;   a	  [         U    $ SU U R                  R                  S.nU R                   H&  n[	        U5      n[        U5      n[        X45      X'   M(     U R                  R                  5        Hv  u  p%SnSnSU;   a  [	        U5      nSU;   a  [        U5      nUR                  S5      =(       d    UR                  S5      =(       d    Sn[        USS5      n[        X4US9X'   Mx     1 SknU R                  R                  5        HZ  u  pšU	S	:X  a  M  U	R                  S
5      (       a*  U	R                  S
5      (       a  X˜;  a  [        SU	 S35      e[        Xš5      X'   M\     U R                   R                  5        H  u  pš[        Xš5      X'   M     [#        U R$                  [&        R(                  4U5      nU[         U '   UR                  5        H˜  u  pÍ[+        U[        5      (       d  M  [        X¼5      nUR,                  c  M6  UR,                  nUR/                  U 45      nUR1                  5         [3        X¼[        UUR4                  UR6                  UR8                  S95        Mš     U$ )zu
Create a subclass of Box that is specialized to the jitclass.

This function caches the result to avoid code bloat.
r   )Ú	__slots__Ú_numba_type_Ú__doc__NÚgetÚsetr+   )Údoc>=   Ú__eq__Ú__ge__Ú__gt__Ú__le__Ú__lt__Ú__ne__Ú__or__Ú__abs__Ú__add__Ú__and__Ú__int__Ú__ior__Ú__len__Ú__mod__Ú__mul__Ú__neg__Ú__pos__Ú__pow__Ú__ror__Ú__str__Ú__sub__Ú__xor__Ú__bool__Ú__hash__Ú__iadd__Ú__iand__Ú__imod__Ú__imul__Ú__ipow__Ú__isub__Ú__ixor__Ú__radd__Ú__rand__Ú__rmod__Ú__rmul__Ú__rpow__Ú__rsub__Ú__rxor__Ú	__float__Ú	__index__Ú
__invert__Ú
__lshift__Ú
__matmul__Ú
__rshift__Ú__complex__Ú__getitem__Ú__ilshift__Ú__imatmul__Ú__irshift__Ú__rlshift__Ú__rmatmul__Ú__rrshift__Ú__setitem__Ú__truediv__Ú__contains__Ú__floordiv__Ú__itruediv__Ú__rtruediv__Ú__ifloordiv__Ú__rfloordiv__Ú__annotate_func__Ú__init__Ú__zMethod 'z' is not supported.)Ú_cache_specialized_boxÚ
class_typeÚ	class_docÚstructÚ_generate_getterÚ_generate_setterÚpropertyÚ	jit_propsÚitemsr,   ÚgetattrÚmethodsÚ
startswithÚendswithÚ	TypeErrorr'   Ústatic_methodsÚtypeÚ	classnamer   ÚBoxÚ
isinstanceÚfgetÚcompileÚdisable_compileÚsetattrÚfsetÚfdelr+   )ÚtypÚdctr   ÚgetterÚsetterÚimpdctÚimpr.   Úsupported_dundersr%   r&   ÚsubclsÚkÚvÚpropr�   Ú	fast_fgets                    r   Ú_specialize_boxr“   E   s0  € ð Ô$Ó$Ü% cÑ*Ð*ØØØ—n‘n×.Ñ.ñ€Cð
 —”ˆÜ! %Ó(ˆÜ! %Ó(ˆÜ˜fÓ-ˆ‹
ñ ð
 Ÿ™×,Ñ,Ö.‰ˆØˆØˆØ�F‹?Ü% eÓ,ˆFØ�F‹?Ü% eÓ,ˆFà�j‰j˜Ó×< 6§:¡:¨eÓ#4×<¸ˆÜ�c˜9 dÓ+ˆÜ˜f°#Ñ6ˆ‹
ñ /ò>Ðð~ —k‘k×'Ñ'Ö)‰
ˆØ�:ÓÙà�O‰O˜D×!Ñ!Ø—‘˜d×#Ñ#ØÓ-ä˜h t fÐ,?Ð@ÓAÐAÜ$ TÓ0ˆ‹	ñ *ð ×(Ñ(×.Ñ.Ö0‰
ˆÜ$ TÓ0ˆ‹	ñ 1ô �#—-‘-¤$§(¡( ¨cÓ2€Fà"(Ô˜3Ñð
 —	‘	–‰ˆÜ�aœ×"Ó"Ü˜6Ó%ˆDØ�y‰yÓ$Ø—y‘y�Ø ŸL™L¨#¨Ó0�	Ø×$Ñ$Ô&Ü˜Ü  ¨D¯I©I°t·y±yØ%)§\¡\ñ3ö4ñ ð €Mr   c                 ó€  ^^^• [         R                  " TR                  U5      u  p4[        U 5      nTR                  R                  TR                  [        U5      SS9nTR                  R                  UTR                  R                  5      nTR                  R                  US5      m[        R                  " S5      R                  5       mTR                  R                  UT5      nTR                  R                  UT5      n	UUU4S jn
U
" [        R                  U5        U
" [        R                   U	5        T$ )NÚbox_class_instance)Úinfor   é   c                 ó(  >• TR                   R                  [        R                  U 5      n[        R
                  " TR                  TU5      nTR                  R                  UTR                  5       5      nTR                  R                  X5        g r   )
ÚcontextÚget_constantr   Úuintpr   Úpointer_addÚbuilderÚbitcastÚ
as_pointerÚstore)Úmember_offsetÚvalueÚoffsetÚptrÚcastedr	   ÚcÚ	llvoidptrs        €€€r   Ú
set_memberÚ'_box_class_instance.<locals>.set_memberà   sd   ø€ à—‘×'Ñ'¬¯©°]ÓCˆÜ×!Ò! !§)¡)¨S°&Ó9ˆØ—‘×"Ñ" 3¨	×(<Ñ(<Ó(>Ó?ˆØ	�	‰	�‰˜Õ&r   )r   Úunpack_tupler�   r“   r™   Úadd_dynamic_addrÚidrž   ÚpyapiÚpyobjÚcall_function_objargsr   ÚIntTyperŸ   r   Úbox_meminfoptr_offsetÚbox_dataptr_offset)r‡   Úvalr¦   ÚmeminfoÚdataptrÚbox_subclassedÚvoidptr_boxclsÚbox_clsÚaddr_meminfoÚ	addr_datar¨   r	   r§   s     `        @@r   Ú_box_class_instancer»   Ë   sù   ú€ ä×+Ò+¨A¯I©I°sÓ;Ñ€Gô % SÓ)€Nà—Y‘Y×/Ñ/Ø	�	‰	Ü
ˆ>ÓØ!ð 0ð €Nð
 �i‰i×Ñ °·±·±Ó>€Gà
�'‰'×
'Ñ
'¨°Ó
4€Cô —
’
˜1“×(Ñ(Ó*€IØ—9‘9×$Ñ$ W¨iÓ8€LØ—	‘	×!Ñ! '¨9Ó5€I÷'ñ Œt×)Ñ)¨<Ô8ÙŒt×&Ñ&¨	Ô2Ø€Jr   c                 óf  ^^• UU4S jn[         R                  " U 5      nU" TR                  TR                  5      nU" [        R
                  5      nU" [        R                  5      nTR                  R                  XeR                  R                  5      Ul        TR                  R                  XuR                  R                  5      Ul
        UR                  5       nTR                  R                  R                  TR                  X5        [        UTR                  R!                  5       S9$ )Nc                 ól  >• TR                   R                  [        R                  U 5      n[        R
                  " S5      R                  5       n[        R                  " TR                  TU5      nTR                  R                  X2R                  5       5      nTR                  R                  U5      $ )Nr—   )r™   rš   r   r›   r   r°   rŸ   r   rœ   r�   rž   Úload)r¡   r£   r§   r¤   r¥   r¦   r³   s        €€r   Úaccess_memberÚ,_unbox_class_instance.<locals>.access_memberî   s{   ø€ à—‘×'Ñ'¬¯©°]ÓCˆÜ—J’J˜q“M×,Ñ,Ó.ˆ	Ü×!Ò! !§)¡)¨S°&Ó9ˆØ—‘×"Ñ" 3×(<Ñ(<Ó(>Ó?ˆØ�y‰y�~‰~˜fÓ%Ð%r   )Úis_error)r   Úcreate_struct_proxyr™   r�   r   r±   r²   rž   r´   r}   ÚdataÚ	_getvalueÚnrtÚincrefr   r­   Úc_api_error)	r‡   r³   r¦   r¿   Ú
struct_clsÚinstÚptr_meminfoÚptr_dataptrÚrets	    ``      r   Ú_unbox_class_instancerÍ   ì   sÒ   ù€ ö&ô ×,Ò,¨SÓ1€JÙ�a—i‘i §¡Ó+€Dñ  ¤× :Ñ :Ó;€KÙ¤× 7Ñ 7Ó8€Kð —9‘9×$Ñ$ [·,±,×2CÑ2CÓD€D„LØ—	‘	×!Ñ! +¯y©y¯~©~Ó>€D„Ià
�.‰.Ó
€Cà‡I�I‡M�M×Ñ˜Ÿ™ CÔ-ä�s Q§W¡W×%8Ñ%8Ó%:Ñ;Ð;r   c                 ó,   • [        [        U 5      S5      $ )Nr*   )rw   r}   )r³   r¦   s     r   Ú_typeof_jitclass_boxrÏ     s   € ä”4˜“9˜nÓ-Ð-r   N)"r+   Ú	functoolsr   r   Úllvmliter   Ú
numba.corer   r   Únumba.core.decoratorsr   Únumba.core.pythonapir	   r
   r   Únumba.core.typing.typeofr   Únumba.experimental.jitclassr   Ú_getter_code_templateÚ_setter_code_templater$   r   rr   rs   r'   rn   r“   ÚClassInstanceTyper»   rÍ   Úregisterr   rÏ   r   r   r   Ú<module>rÛ      sâ   ðñ÷
 %å ç %Ý &ß 8Ñ 8Ý 0Ý ,ðÐ ð
Ð ð
Ð òñ Ð-Ð8MØ!+ñ-Ð áÐ-Ð8MØ!*ñ,Ð òð" Ð ò@ñL €U×ÑÓñó ðñ@ €u×ÑÓñ<ó  ð<ðH ×Ò�d—h‘hÓñ.ó  ñ.r   