
    shS                        S SK r S SKrS SKrS SKrS SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJrJrJrJrJr  S SKJrJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJ r    " S S\RB                  5      r" " S S\RB                  5      r#\RH                  " \RJ                  \"5        \RH                  " \RL                  \#5        \RH                  " \RN                  \RP                  5        S r)Sr*S r+\ " S S\,5      5       r-S r.S r/S r0S r1 " S S\Rd                  5      r3S r4 " S S\55      r6\Rn                   " S S \Rp                  5      5       r9\6Rt                  Rw                  \RJ                  5      S! 5       r<\6Rt                  R{                  \RJ                  5      S" 5       r>S# r?\6Rt                  R                  \RN                  \R                  " \R                  5      5      S$ 5       rCg)%    N)OrderedDict)Sequence)ir)njit)cgutilserrorsimputilstypesutils)default_managermodels)
cpu_target)	templates)as_numba_type)disable_pickling)_boxc                   (   ^  \ rS rSrU 4S jrSrU =r$ )InstanceModel   c                    > [         R                  " U5      n[         R                  " S[        U5      -   5      nS[         R                  " U5      4S[         R
                  " U5      4/n[        [        U ]#  XU5        g )NzOpaque.meminfodata)	r
   ClassDataTypeOpaquestrMemInfoPointerCPointersuperr   __init__)selfdmmfe_typcls_data_tydtypemembers	__class__s         t/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/experimental/jitclass/base.pyr   InstanceModel.__init__   sk    ))&1
 Y[)99:,,U34U^^K01
 	mT+CA     __name__
__module____qualname____firstlineno__r   __static_attributes____classcell__r&   s   @r'   r   r      s    B Br)   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )InstanceDataModel%   c                    > UR                   nUR                  R                  5        VVs/ s H  u  pE[        U5      U4PM     nnn[        [
        U ]  XU5        g s  snnf N)
class_typestructitems_mangle_attrr   r4   r   )r    r!   r"   clstykvr%   r&   s          r'   r   InstanceDataModel.__init__&   sT    !!49LL4F4F4HI4HDALOQ'4HI/WE Js   Ar*   r+   r2   s   @r'   r4   r4   %   s    F Fr)   r4   c                     SU -   $ )zN
Mangle attributes.
The resulting name does not startswith an underscore '_'.
m_r*   )names    r'   r;   r;   1   s    
 $;r)   z3
def ctor({args}):
    return __numba_cls_({args})
c                    U R                   n/ nUR                  5        Hb  u  p4UR                  UR                  -  UR                  :X  a  UR	                  U5        M?  SUR                  -  n[
        R                  " U5      e   U$ )zA
Returns list of positional and keyword argument names in order.
z(%s argument type unsupported in jitclass)
parametersr:   kindPOSITIONAL_OR_KEYWORDappendr   UnsupportedError)fn_sigparamsargsr=   r>   msgs         r'   _getargsrM   B   st     FDFFQ,,,1H1HHKKN<qvvEC))#..  Kr)   c                   0    \ rS rSrSrS rS rS rS rSr	g)	JitClassTypeQ   z
The type of any jitclass.
c                     [        U5      S:w  a  [        S5      eUu  n[        U[        5      (       a  [        S5      eSU;   d   S5       e[        R                  XX#5      nUR                  5         U$ )N   z must have exactly one base classzcannot subclass from a jitclassr8   zmissing "class_type" attr)len	TypeError
isinstancerO   type__new__	_set_init)clsrB   basesdctbaseoutclss         r'   rW   JitClassType.__new__V   sn    u:?>??dL))=>>s"?$??"c4r)   c                 *   U R                   R                  R                  S   n[        R                  " U5      n[        U5      SS nX l        [        R                  SR                  U5      S9nSU 0n[        XE5        US   n[        U5      U l        g)zz
Generate a wrapper for calling the constructor from pure Python.
Note the wrapper will only accept positional arguments.
r   rR   N, rK   __numba_cls_ctor)r8   instance_typemethodsr   pysignaturerM   	_ctor_sig_ctor_templateformatjoinexecr   _ctor)rY   initinit_sigrK   ctor_sourceglblsrc   s          r'   rX   JitClassType._set_inita   s    
 ~~++33J?$$T* !!"% $++4+A%[ V}J	r)   c                     [        U[        R                  5      (       a"  UR                  R                  U R                  L $ g)NF)rU   r   Box_numba_type_r8   )rY   instances     r'   __instancecheck__JitClassType.__instancecheck__r   s1    h))((33s~~EEr)   c                     U R                   R                  " S /UQ70 UD6nUR                  5         U R                  " UR                  SS  0 UR
                  D6$ )NrR   )rg   bindapply_defaultsrl   rK   kwargs)rY   rK   r{   ry   s       r'   __call__JitClassType.__call__w   sP     }}!!$888yy$))AB-74;;77r)   r*   N)
r,   r-   r.   r/   __doc__rW   rX   rv   r|   r0   r*   r)   r'   rO   rO   Q   s    	"
8r)   rO   c                     U R                  5        HW  u  p[        U[        5      (       d  [        SU< 35      e[        U[        R
                  5      (       a  MJ  [        SU< 35      e   g )Nz!spec keys should be strings, got z0spec values should be Numba type instances, got )r:   rU   r   rT   r
   Type)specr=   r>   s      r'   _validate_specr      sU    

!S!!QHII!UZZ(( # $ $	 r)   c                     [        5       nUR                  5        H=  u  p4UR                  S5      (       a  UR                  S5      (       d  SU -   U-   nXBU'   M?     U$ )z:
Apply the same changes to dunder names as CPython would.
___)r   r:   
startswithendswith)clsnamer   outr=   r>   s        r'   _fix_up_private_attrr      sV     -C

<<ajj&6&6g!AA  Jr)   c                 P    [        USS5      nU(       a  U R                  U5        gg)z;
Add the required libs for the callable to allow inlining.
libsr*   N)getattradd_linking_libs)contextcallr   s      r'   _add_linking_libsr      s(     4$D  & r)   c                    Uc  [        5       nO [        U[        5      (       a  [        U5      n[        R                  " U 5      R                  5        H  u  pEXA;  d  M  [        U5      X'   M     [        U5        [        U R                  U5      n0 n[        [        R                  " U 5      5       H  nUR                  UR                  5        M      0 0 0 0 4u  ppUR                  5        Hd  u  p[        U[        R                   5      (       a  XU'   M*  [        U["        5      (       a  XU'   ME  [        U[$        5      (       a  XU'   M`  XU'   Mf     ['        U5      ['        U	5      -  ['        U
5      -  ['        U5      -  nU(       a)  [)        SR+                  SR-                  U5      5      5      eUR/                  SS5      n[1        U5        U(       a;  SnSR-                  UR3                  5       5      n[5        UR+                  U5      5      eU	R                  5        H,  u  pUR6                  c  M  [5        SR+                  U5      5      e   UR                  5        VVs0 s H  u  pU[9        U5      _M     nnn0 nU	R                  5        H^  u  p0 nUR:                  (       a  [9        UR:                  5      US'   UR<                  (       a  [9        UR<                  5      US'   UUU'   M`     U
R                  5        VVs0 s H  u  pU[9        UR>                  5      _M     nnnU" U [@        UUUU5      n[C        UUS	9nUR                  U5        [E        U R                  U 4U5      n [F        RH                  nURK                  U U5        [F        RL                  nU" UUU5      RO                  5         [        RN                  " U URP                  5        U $ s  snnf s  snnf )
a  
Internal function to create a jitclass.

Args
----
cls: the original class object (used as the prototype)
spec: the structural specification contains the field types.
class_ctor: the numba type to represent the jitclass
builder: the internal jitclass builder
zname shadowing: {0}r`   r~    z(class members are not yet supported: {0}zdeleter is not supported: {0}getset)r8   r~   ))r   rU   r   ptget_type_hintsr:   r   r   r   r,   reversedinspectgetmroupdate__dict__pytypesFunctionTypepropertystaticmethodr   	NameErrorri   rj   pop_drop_ignored_attrskeysrT   fdelr   fgetfset__func__ConstructorTemplatedictrO   r   typing_contextinsert_globaltarget_contextregisterrd   )rY   r   
class_ctorbuilderattrpy_typeclsdctbaseclsre   propsstatic_methodsothersr=   r>   shadowed	docstringrL   r%   jit_methods	jit_propsr[   jit_static_methodsr8   jit_class_dct	typingctx	targetctxs                             r'   register_class_typer      sG    |}	D(	#	#4  **3/557&w/DJ 8 4  d3D FGNN3/0g&&' 1 .0R^*GNa--..AJ8$$!H<(( !11I  Gs5z)C,??3t9LH-44TYYx5HIJJ

9b)I8))FKKM*

7+,,66;BB1EFF  +2--/:/$!1d1g:/K:I66affCJ66affCJ	!  )7(<(<(>@(>4

(>  @ J J	BM+,
s||cV]
;C ))IC, ))IJ	9-6683
 8 89JI ;@s   &O"O$c                       \ rS rSrSrS rSrg)r   i  z0
Base class for jitclass constructor templates.
c                    U R                   R                  nUR                  S   nUR                  5       4U-   n[        R
                  " U5      nUR                  U R                  XR5      n[        UR                  [        R                  5      (       d$  [        R                  " SUR                   S35      e[        R                  " U/UR                  SS  Q76 nU$ )Nr   z$__init__() should return None, not ''rR   )keyrd   r   get_reference_typer
   
Dispatcherget_call_typer   rU   return_typeNoneTyper   NumbaTypeErrorr   	signaturerK   )	r    rK   kwsrd   rc   	boundargs	disp_typesigr   s	            r'   genericConstructorTemplate.generic  s    ..((4"5579D@	$$T*	%%dllIC#//5>>::''6s6GqIK K !!-?#((12,?
r)   r*   N)r,   r-   r.   r/   r~   r   r0   r*   r)   r'   r   r     s    r)   r   c                    [        / SQ5      n[        R                  S:X  a  U[        SS/5      -  nSU ;   a  UR                  S5        U R	                  5        Hn  u  p#[        U[        R                  [        R                  45      (       a  UR                  U5        MG  [        USS 5      [        L d  M]  UR                  U5        Mp     SU ;   a  U S   c  UR                  S5        U H  nU R                  U5        M     g )N)__weakref__r-   r   )      r/   r0   __annotations____objclass____hash__)r   r   	PYVERSIONaddr:   rU   r   BuiltinFunctionTypeBuiltinMethodTyper   objectr   )r[   dropr=   r>   s       r'   r   r     s      D '!&(?@AAC"#		a'55!335 6 6HHQKQ-7HHQK  SS_4
 r)   c                   b    \ rS rSrSr\R                  " S5      r\" 5       r	S r
S rS rS rSrg	)
ClassBuilderi5  z
A jitclass builder for a mutable jitclass.  This will register
typing and implementation hooks to the given typing and target contexts.
zjitclass builderc                 (    Xl         X l        X0l        g r7   )r8   r   r   )r    r8   r   r   s       r'   r   ClassBuilder.__init__=  s    $""r)   c                     U R                  U R                  U R                  R                  5        U R                  R                  U R                  5        g)z'
Register to the frontend and backend.
N)_register_methodsclass_impl_registryr8   rd   r   install_registry)r    s    r'   r   ClassBuilder.registerB  sA    
 	t77#<<	> 	''(@(@Ar)   c                     [        UR                  5      [        UR                  5      -   nU H@  nX@R                  ;  d  M  U R	                  X5        U R                  R                  U5        MB     g)z
Register method implementations.
This simply registers that the method names are valid methods.  Inside
of imp() below we retrieve the actual method to run from the type of
the receiver argument (i.e. self).
N)listr   r   implemented_methods_implement_methodr   )r    registryrd   to_registermeths        r'   r   ClassBuilder._register_methodsM  sa     =4451123D
 333&&x6((,,T2  r)   c                   ^^ U4S jmU4S jnTR                  S5      nUS;   a	  U" U5        g UR                  [        R                  T4[        R                  [        R                  " [        R
                  5      5      " T" 5       5        g )Nc                     > U4S jn U $ )Nc                   > UR                   S   nT	UR                  ;   a  UR                  T	   nO@T	UR                  ;   a0  UR                  T	   nUR                  UR                   SS  S9nUSS  n[        R
                  " W5      nU R                  Xb5      nU" X5      n[        X5        [        R                  " XUR                  U5      $ )Nr   rR   ra   )rK   r   r   replacer
   r   get_functionr   r	   impl_ret_new_refr   )
r   r   r   rK   rd   methodr   r   r   r   s
            r'   imp<ClassBuilder._implement_method.<locals>.get_imp.<locals>.impb  s     #=444*66t<F]===*==dCF ++388AB<+8C8D!,,V4	++I;7)!'00014#G Gr)   r*   )r   r   s    r'   get_imp/ClassBuilder._implement_method.<locals>.get_impa  s    G$ Jr)   c                   >^ SU -  m[        [        U 5      n[        R                  " U5       " U4S jS[        R                  5      5       n[
        R                  " [        R                  T4[        R                  [        R                  " [        R                  5      5      " T" 5       5        [
        R                  " U[        R                  [        R                  " [        R                  5      5      " T" 5       5        g )Nz__%s__c                   "   > \ rS rSrU 4S jrSrg)KClassBuilder._implement_method.<locals>._getsetitem_gen.<locals>.GetSetItemiz  c                    > US   n[        U[        R                  5      (       aT  TUR                  ;   aC  UR                  T   n[        R                  " U5      nUR                  U R                  X5      nU$ g g )Nr   )rU   r
   ClassInstanceTyper   r   r   r   )r    rK   r   ru   r   r   r   _dunder_meths          r'   r   SClassBuilder._implement_method.<locals>._getsetitem_gen.<locals>.GetSetItem.generic|  st    #AwH!(E,C,CDD(H,@,@@'33LA$)$4$4T$:	'55dllDN"
	 A Er)   r*   N)r,   r-   r.   r/   r   r0   )r   s   r'   
GetSetItemr   z  s    # #r)   r  )r   operatorr   infer_globalAbstractTemplater	   lower_builtinr
   r   VarArgAny)getsetopr  r   r   s      @r'   _getsetitem_gen7ClassBuilder._implement_method.<locals>._getsetitem_genv  s    #f,L6*B##B'#Y77 # (# ""E$;$;\#J#(#:#:#(<<		#:<<CIG ""2#(#:#:#(<<		#:<<CIGr)   r   )getitemsetitem)striplowerr
   r   r  r  )r    r   r   r  dunder_strippedr   s     `  @r'   r   ClassBuilder._implement_method_  sj    	*	G0 **S/44O,NNE33T: 22 <<		244;I?r)   )r8   r   r   N)r,   r-   r.   r/   r~   r	   Registryr   r   r   r   r   r   r   r0   r*   r)   r'   r   r   5  s8     #++,>?%#
	B3$5?r)   r   c                   2    \ rS rSr\R
                  rS rSrg)ClassAttributei  c                   ^ ^^^	 TTR                   ;   a  TR                   T   $ TTR                  ;   a[  TR                  T   n[        R                  " U5      m	 " UU	UU 4S jS[        R
                  5      n[        R                  " UT5      $ TTR                  ;   a[  TR                  T   n[        R                  " U5      m	 " UU	UU 4S jS[        R
                  5      n[        R                  " UT5      $ TTR                  ;   aT  TR                  T   nUS   n[        R                  " U5      m	T	R                  T R                  T40 5      nUR                  $ g )Nc                   D   > \ rS rSr YR                   Y 4rUU4S jrSrg)6ClassAttribute.generic_resolve.<locals>.MethodTemplatei  c                 z   > T4[        U5      -   nTR                  U R                  X5      nUR                  5       $ r7   )tupler   r   	as_methodr    rK   r   r   r   ru   s       r'   r   >ClassAttribute.generic_resolve.<locals>.MethodTemplate.generic  s5    $;t4D#11$,,JC==?*r)   r*   Nr,   r-   r.   r/   r   r   r0   r   r   ru   r    s   r'   MethodTemplater    s    xx&+ +r)   r   c                   D   > \ rS rSr YR                   Y 4rUU4S jrSrg)<ClassAttribute.generic_resolve.<locals>.StaticMethodTemplatei  c                 Z   > TR                  U R                  X5      nUR                  TS9$ )N)recvr)r   r   r   r  s       r'   r   DClassAttribute.generic_resolve.<locals>.StaticMethodTemplate.generic  s.     $11$,,JC
 ;;X;66r)   r*   Nr  r  s   r'   StaticMethodTemplater"    s    xx&7 7r)   r&  r   )r9   r   r
   r   r   r  BoundFunctionr   r   r   r   r   )
r    ru   r   r   r   r&  impdctgetterr   r   s
   ```      @r'   generic_resolveClassAttribute.generic_resolve  s3   8??"??4((X)))''-D((.I+ +!;!; + &&~x@@X000..t4D((.I7 7y'A'A 7 &&';XFFX'''''-FE]F((0I))$,,RHC??" (r)   r*   N)	r,   r-   r.   r/   r
   r   r   r*  r0   r*   r)   r'   r  r    s    

!
!C.#r)   r  c                    XBR                   ;   ar  U R                  XUS9nUR                  nU R                  XR	                  5       US9n[
        R                  " XUR                   U   [        U[        U5      5      5      $ XBR                  ;   a  UR                  U   S   n[        R                  " SU5      n	[        R                  " U5      n
U
R                  U R                  U/0 5      n	U R!                  X5      nU" X/5      n[#        X5        [
        R$                  " XU	R&                  U5      $ [)        SR+                  U5      5      e)z,
Generic getattr() for @jitclass instances.
valuerefr   Nattribute {0!r} not implemented)r9   make_helperr   make_data_helperget_data_typer	   impl_ret_borrowedr   r;   r   r   r   r
   r   r   r   r   r   r   r   NotImplementedErrorri   )r   r   typr.  r   instdata_pointerr   r)  r   
dispatcherr   r   s                r'   get_attr_implr;    s2   
 zz""7u"=yy''1B1B1D,8 ( :))'*-**T*:*1$T8J*KM 	M 
	t$U+!!$,%%f-
&&w'='=ubI##J47G$'(((3??CPP
?FFtL
MMr)   c                    UR                   u  pVUu  pxXER                  ;   a  U R                  XUS9n	U	R                  n
U R	                  XR                  5       U
S9nUR                  U   n[        U[        U5      5      n[        U[        U5      U5        U R                  R                  XU5        U R                  R                  XU5        gXER                  ;   an  UR                  U   S   n[        R                  " U5      nUR                  U R                   XV40 5      nU R#                  X5      nU" XU45        [%        U U5        g['        SR)                  U5      5      e)z,
Generic setattr() for @jitclass instances.
r-  r/  r   r1  N)rK   r9   r2  r   r3  r4  r   r;   setattrnrtincrefdecrefr   r
   r   r   r   r   r   r6  ri   )r   r   r   rK   r   r7  valtytargetvalr8  data_ptrr   	attr_typeoldvaluesetterr   r   s                    r'   set_attr_implrH    sL   
 JCKFzz""7v">99''1B1B1D,4 ( 6 JJt$	4d!34 	l4(#.7s3 	7x8		t$U+$$V,	%%g&<&<'*lB8##I3Wsm$'4(!-44T:< 	<r)   c                    U R                  [        R                  5      nU R                  [        R                  5      n[        R
                  " [        R                  " 5       X4U/5      nSR                  UR                  5      n[        R                  " XU5      nUR                  (       a  [        R                  " UR                  5       5      nUR                  5       n	U R                  U	5      n
UR                  UR                   S   U
R#                  5       5      nU R%                  XUS9nU R&                  R)                  XUR+                  5       5        UR-                  5         U$ )Nz	_Dtor.{0}r   r/  )get_value_typer
   voidptruintpllvmirr   VoidTyperi   rB   r   get_or_insert_functionis_declaration	IRBuilderappend_basic_blockr4  bitcastrK   
as_pointerr2  r>  r@  	_getvalueret_void)r   modulerd   	llvoidptrllsize
dtor_ftypefnamedtor_fnr   alloc_fe_type
alloc_typeptrr   s                r'   imp_dtorr`    s   &&u}}5I##EKK0F$$V__%6&/%CEJ }112E,,VGG""7#=#=#?@%335++M:
oogll1oz/D/D/FG""7s"C74>>3CDNr)   c           	         UR                   nU R                  UR                  5       5      nU R                  U5      nU R                  R	                  UU R                  [        R                  U5      [        XR                  U5      5      nU R                  R                  X5      nUR                  UUR                  5       5      nUR                  [        R                  " U5      U5        U R!                  X5      n	Xyl        Xl        UR                   4UR&                  -   n
UR(                  S   n[        R*                  " U5      nU R-                  U[        R.                  " U
6 5      n[1        X5        U	R3                  5       /[5        U5      -   nU" X5        U	R3                  5       n[6        R8                  " XXO5      $ )z/
Generic constructor (__new__) for jitclasses.
r   )r   r4  get_abi_sizeofr>  meminfo_alloc_dtorget_constantr
   rL  r`  rW  meminfo_datarS  rT  storer   get_null_valuer2  r   r   rK   r   r   r   voidr   rU  r   r	   r   )r   r   r   rK   inst_typr^  
alloc_sizer   r9  inst_structrn   rm   r   r   realargsrets                   r'   	ctor_implrn  )  s|    H&&x'='='?@J''
3Jkk,,U[[*5..(3G
 ;;++G=L??<#-#8#8#:<L MM'((4  %%g8K!# !CHH,H
+D  &I	5::x+@ADg$%%'(4:5H 


!C$$WxEEr)   )Dr   r  r
   r   typingr   collectionsr   collections.abcr   llvmliter   rM  numbar   
numba.corer   r   r	   r   numba.core.datamodelr   r   numba.core.registryr   numba.core.typingr   numba.core.typing.asnumbatyper   numba.core.serializer   numba.experimental.jitclassr   StructModelr   r4   r   r   r   	ClassTypeOpaqueModelr;   rh   rM   rV   rO   r   r   r   r   r  r   r   r   r   infer_getattrAttributeTemplater  r   lower_getattr_genericr;  lower_setattr_genericrH  r`  r  r  r  rn  r*   r)   r'   <module>r     s       # $ !  > > 8 * ' 7 1 ,BF&& BF** F   00- @   ,,.? @   &*<*< = *84 *8 *8`$	'_D)44 ,:_?6 _?D 1#Y00 1# 1#h !!778O8OPN QN6 !!778O8OP$< Q$<N2 !!''(-UYY(?A(FA(Fr)   