
    sh5                      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        v/Users/tiagomarins/Projetos/claudeai/copy_bank/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    
 #)))6F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  pU	S	:X  a  M  U	R                  S
5      (       a*  U	R                  S
5      (       a  X;  a  [        SU	 S35      e[        X5      X'   M\     U R                   R                  5        H  u  p[        X5      X'   M     [#        U R$                  [&        R(                  4U5      nU[         U '   UR                  5        H  u  p[+        U[        5      (       d  M  [        X5      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__
__lshift__
__matmul__
__rshift____complex____getitem____ilshift____imatmul____irshift____rlshift____rmatmul____rrshift____setitem____truediv____contains____floordiv____itruediv____rtruediv____ifloordiv____rfloordiv____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**nn..C
 !%(!%(f-
 
 ,,.F?%e,FF?%e,Fjj<6::e#4<c9d+f#6
 /<z kk'')
:OOD!!d##-htf,?@AA$T0	 * ((..0
$T0	 1 #--$((c2F"(3
 		a""6%Dyy$yy LL#0	$$& DIItyy%)\\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    ++AIIs;G %S)NYY//			
>! 0 N
 ii>G
''
'
'
4C 

1((*I99$$Wi8L		!!'95I' 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JJqM,,.	!!!))S&9""3(<(<(>?yy~~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1Jaii+D   : :;K 7 78K 99$$[,,2C2CDDL		!!+yy~~>DI
..
CIIMMC-sQWW%8%8%:;;r   c                 ,    [        [        U 5      S5      $ )Nr*   )ru   r{   )r   r   s     r   _typeof_jitclass_boxr     s    49n--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   rp   rq   r'   rl   r   ClassInstanceTyper   r   registerr}   r   r   r   r   <module>r      s   
 %  % & 8 8 0 , 
 
  -8M!+- -8M!*, "  ~H U @ u<  <H dhh.  .r   