Ë
    üÇ:joS  ã                   óæ  — 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mZ d dlmZmZmZmZmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlm Z   G d„ dejB                  «      Z" G d„ dejB                  «      Z# ejH                  ejJ                  e"«        ejH                  ejL                  e#«        ejH                  ejN                  ejP                  «       d„ Z)dZ*d„ Z+e G d„ de,«      «       Z-d„ Z.d„ Z/d„ Z0d„ Z1 G d„ dejd                  «      Z3d„ Z4 G d„ de5«      Z6ejn                   G d„ d ejp                  «      «       Z9e6jt                  jw                  ejJ                  «      d!„ «       Z<e6jt                  j{                  ejJ                  «      d"„ «       Z>d#„ Z?e6jt                  j�                  ejN                   ej‚                  ej„                  «      «      d$„ «       ZCy)%é    N)ÚOrderedDict)ÚSequence)Úir)Únjit)ÚcgutilsÚerrorsÚimputilsÚtypesÚutils)Údefault_managerÚmodels)Ú
cpu_target)Ú	templates)Úas_numba_type)Údisable_pickling)Ú_boxc                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ÚInstanceModelc                 óø   •— t        j                  |«      }t        j                  dt        |«      z   «      }dt        j                  |«      fdt        j
                  |«      fg}t        t        | �#  |||«       y )NzOpaque.ÚmeminfoÚdata)	r
   ÚClassDataTypeÚOpaqueÚstrÚMemInfoPointerÚCPointerÚsuperr   Ú__init__)ÚselfÚdmmÚfe_typÚcls_data_tyÚdtypeÚmembersÚ	__class__s         €úu/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/numba/experimental/jitclass/base.pyr   zInstanceModel.__init__   sm   ø€ Ü×)Ñ)¨&Ó1ˆô
 —‘˜Y¬¨[Ó)9Ñ9Ó:ˆàœ×,Ñ,¨UÓ3Ð4Ø”U—^‘^ KÓ0Ð1ð
ˆô 	Œm˜TÑ+¨C°¸ÕAó    ©Ú__name__Ú
__module__Ú__qualname__r   Ú__classcell__©r%   s   @r&   r   r      s   ø„ ÷Bð Br'   r   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ÚInstanceDataModelc                 óÂ   •— |j                   }|j                  j                  «       D ��cg c]  \  }}t        |«      |f‘Œ }}}t        t
        | �  |||«       y c c}}w ©N)Ú
class_typeÚstructÚitemsÚ_mangle_attrr   r/   r   )r   r    r!   ÚclstyÚkÚvr$   r%   s          €r&   r   zInstanceDataModel.__init__&   sU   ø€ Ø×!Ñ!ˆØ49·L±L×4FÑ4FÓ4H×I©D¨A¨q”L “O QÒ'ÐIˆÑIÜÔ Ñ/°°V¸WÕEùó Js   «Ar(   r-   s   @r&   r/   r/   %   s   ø„ ÷Fð Fr'   r/   c                 ó   — d| z   S )zZ
    Mangle attributes.
    The resulting name does not startswith an underscore '_'.
    Úm_© )Únames    r&   r5   r5   1   s   € ð
 �$‰;Ðr'   z3
def ctor({args}):
    return __numba_cls_({args})
c                 ó  — | j                   }g }|j                  «       D ]`  \  }}|j                  |j                  z  |j                  k(  r|j	                  |«       Œ>d|j                  z  }t        j                  |«      ‚ |S )zI
    Returns list of positional and keyword argument names in order.
    z(%s argument type unsupported in jitclass)Ú
parametersr4   ÚkindÚPOSITIONAL_OR_KEYWORDÚappendr   ÚUnsupportedError)Úfn_sigÚparamsÚargsr7   r8   Úmsgs         r&   Ú_getargsrG   B   s{   € ð ×Ñ€FØ€DØ—‘“ò /‰ˆˆ1Ø�F‰F�Q×,Ñ,Ñ,°×1HÑ1HÒHØ�K‰K˜�Nà<¸q¿v¹vÑEˆCÜ×)Ñ)¨#Ó.Ð.ð/ð €Kr'   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚJitClassTypez#
    The type of any jitclass.
    c                 óÜ   — t        |«      dk7  rt        d«      ‚|\  }t        |t        «      rt        d«      ‚d|v sJ d«       ‚t        j                  | |||«      }|j                  «        |S )Né   z must have exactly one base classzcannot subclass from a jitclassr2   zmissing "class_type" attr)ÚlenÚ	TypeErrorÚ
isinstancerI   ÚtypeÚ__new__Ú	_set_init)Úclsr<   ÚbasesÚdctÚbaseÚoutclss         r&   rP   zJitClassType.__new__V   so   € Üˆu‹:˜Š?ÜÐ>Ó?Ð?Ø‰ˆÜ�dœLÔ)ÜÐ=Ó>Ð>Ø˜sÑ"Ð?Ð$?Ó?Ð"Ü—‘˜c 4¨°Ó4ˆØ×ÑÔØˆr'   c                 ó2  — | j                   j                  j                  d   }t        j                  |«      }t        |«      dd }|| _        t        j                  dj                  |«      ¬«      }d| i}t        ||«       |d   }t        |«      | _        y)z’
        Generate a wrapper for calling the constructor from pure Python.
        Note the wrapper will only accept positional arguments.
        r   rK   Nú, ©rE   Ú__numba_cls_Úctor)r2   Úinstance_typeÚmethodsr   ÚpysignaturerG   Ú	_ctor_sigÚ_ctor_templateÚformatÚjoinÚexecr   Ú_ctor)rR   ÚinitÚinit_sigrE   Úctor_sourceÚglblsr[   s          r&   rQ   zJitClassType._set_inita   s‹   € ð
 �~‰~×+Ñ+×3Ñ3°JÑ?ˆÜ×$Ñ$ TÓ*ˆô ˜Ó! ! "Ð%ˆØ ˆŒÜ$×+Ñ+°·±¸4³Ð+ÓAˆØ Ð%ˆÜˆ[˜%Ô Ø�V‰}ˆÜ˜“Jˆ�	r'   c                 ó|   — t        |t        j                  «      r"|j                  j                  | j                  u S y)NF)rN   r   ÚBoxÚ_numba_type_r2   )rR   Úinstances     r&   Ú__instancecheck__zJitClassType.__instancecheck__r   s.   € Ü�h¤§¡Ô)Ø×(Ñ(×3Ñ3°s·~±~ÐEÐEØr'   c                 ó´   —  | j                   j                  d g|¢­i |¤Ž}|j                  «         | j                  |j                  dd  i |j
                  ¤ŽS )NrK   )r_   ÚbindÚapply_defaultsrd   rE   Úkwargs)rR   rE   rq   ro   s       r&   Ú__call__zJitClassType.__call__w   sT   € ð "ˆs�}‰}×!Ñ! $Ð8¨Ò8°Ñ8ˆØ×ÑÔØˆs�y‰y˜$Ÿ)™) A B˜-Ð7¨4¯;©;Ñ7Ð7r'   N)r)   r*   r+   Ú__doc__rP   rQ   rm   rr   r;   r'   r&   rI   rI   Q   s   „ ñò	òò"ó
8r'   rI   c                 óÀ   — | j                  «       D ]K  \  }}t        |t        «      st        d|›�«      ‚t        |t        j
                  «      rŒ?t        d|›�«      ‚ y )Nz!spec keys should be strings, got z0spec values should be Numba type instances, got )r4   rN   r   rM   r
   ÚType)Úspecr7   r8   s      r&   Ú_validate_specrw   ‚   sV   € Ø—
‘
“ò $‰ˆˆ1Ü˜!œSÔ!ÝÁQÐHÓIÐIÜ˜!œUŸZ™ZÕ(ÝÙ ð#ó $ð $ñ	$r'   c                 ó¨   — t        «       }|j                  «       D ]4  \  }}|j                  d«      r|j                  d«      sd| z   |z   }|||<   Œ6 |S )zB
    Apply the same changes to dunder names as CPython would.
    Ú__Ú_)r   r4   Ú
startswithÚendswith)Úclsnamerv   Úoutr7   r8   s        r&   Ú_fix_up_private_attrr   ‹   sY   € ô ‹-€CØ—
‘
“ò ‰ˆˆ1Ø�<‰<˜Ô a§j¡j°Ô&6Ø�g‘ Ñ!ˆAØˆˆAŠðð €Jr'   c                 óF   — t        |dd«      }|r| j                  |«       yy)zC
    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                 óp  — |€t        «       }nt        |t        «      rt        |«      }t        j                  | «      j                  «       D ]  \  }}||vsŒt        |«      ||<   Œ t        |«       t        | j                  |«      }i }t        t        j                  | «      «      D ]  }|j                  |j                  «       Œ i i i i f\  }}	}
}|j                  «       D ]V  \  }}t        |t        j                   «      r|||<   Œ&t        |t"        «      r||	|<   Œ<t        |t$        «      r||
|<   ŒR|||<   ŒX t'        |«      t'        |	«      z  t'        |
«      z  t'        |«      z  }|r)t)        dj+                  dj-                  |«      «      «      ‚|j/                  dd«      }t1        |«       |r;d}dj-                  |j3                  «       «      }t5        |j+                  |«      «      ‚|	j                  «       D ]+  \  }}|j6                  €Œt5        dj+                  |«      «      ‚ |j                  «       D ��ci c]  \  }}|t9        |«      “Œ }}}i }|	j                  «       D ]T  \  }}i }|j:                  rt9        |j:                  «      |d<   |j<                  rt9        |j<                  «      |d<   |||<   ŒV |
j                  «       D ��ci c]  \  }}|t9        |j>                  «      “Œ }}} || t@        ||||«      }tC        ||¬	«      }|j                  |«       tE        | j                  | f|«      } tF        jH                  }|jK                  | |«       tF        jL                  } ||||«      jO                  «        t        jN                  | |jP                  «       | S c c}}w c c}}w )
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}rX   rs   Ú z(class members are not yet supported: {0}zdeleter is not supported: {0}ÚgetÚset)r2   rs   ))r   rN   r   ÚptÚget_type_hintsr4   r   rw   r   r)   ÚreversedÚinspectÚgetmroÚupdateÚ__dict__ÚpytypesÚFunctionTypeÚpropertyÚstaticmethodrŠ   Ú	NameErrorra   rb   ÚpopÚ_drop_ignored_attrsÚkeysrM   Úfdelr   ÚfgetÚfsetÚ__func__ÚConstructorTemplateÚdictrI   r   Útyping_contextÚinsert_globalÚtarget_contextÚregisterr\   )rR   rv   Ú
class_ctorÚbuilderÚattrÚpy_typeÚclsdctÚbaseclsr]   ÚpropsÚstatic_methodsÚothersr7   r8   ÚshadowedÚ	docstringrF   r$   Újit_methodsÚ	jit_propsrT   Újit_static_methodsr2   Újit_class_dctÚ	typingctxÚ	targetctxs                             r&   Úregister_class_typerµ       sp  € ð €|Ü‹}‰Ü	�Dœ(Ô	#Ü˜4Ó ˆô ×*Ñ*¨3Ó/×5Ñ5Ó7ò 0‰ˆˆgØ�tÒÜ& wÓ/ˆD�ŠJð0ô �4Ôô   §¡¨dÓ3€Dð €FÜœGŸN™N¨3Ó/Ó0ò (ˆØ�‰�g×&Ñ&Õ'ð(ð .0°°R¸¨^Ñ*€GˆU�N FØ—‘“ò ‰ˆˆ1Ü�aœ×-Ñ-Ô.ØˆG�AŠJÜ˜œ8Ô$ØˆE�!ŠHÜ˜œ<Ô(Ø !ˆN˜1ÒàˆF�1ŠIðô �G“œs 5›zÑ)¬C°Ó,?Ñ?Ä3ÀtÃ9ÑL€HÙÜÐ-×4Ñ4°T·Y±Y¸xÓ5HÓIÓJÐJà—
‘
˜9 bÓ)€IÜ˜ÔÙØ8ˆØ—)‘)˜FŸK™K›MÓ*ˆÜ˜Ÿ
™
 7Ó+Ó,Ð,à—‘“ò G‰ˆˆ1Ø�6‰6ÑÜÐ;×BÑBÀ1ÓEÓFÐFðGð +2¯-©-«/×:¡$ ! Q�1”d˜1“g‘:Ð:€KÑ:à€IØ—‘“ò ‰ˆˆ1ØˆØ�6Š6Ü˜aŸf™f›ˆC�‰JØ�6Š6Ü˜aŸf™f›ˆC�‰JØˆ	�!Šðð )7×(<Ñ(<Ó(>÷@Ù $  1ˆŒ4�—
‘
ÓÑð@Ðñ @ñ ØÜØØØØó€Jô  J¸	ÔB€MØ×ÑÐ+Ô,Ü
�s—|‘| c V¨]Ó
;€Cô ×)Ñ)€IØ×Ñ˜C Ô,ô ×)Ñ)€IÙˆJ˜	 9Ó-×6Ñ6Ô8Ü×Ñ˜3 
× 8Ñ 8Ô9à€JùóI ;ùó@s   ÉN,Ë N2c                   ó   — e Zd ZdZd„ Zy)rž   z8
    Base class for jitclass constructor templates.
    c                 ó°  — | j                   j                  }|j                  d   }|j                  «       f|z   }t	        j
                  |«      }|j                  | j                  ||«      }t        |j                  t        j                  «      s#t        j                  d|j                  › d�«      ‚t        j                  |g|j                  dd  ¢­Ž }|S )Nr   z$__init__() should return None, not 'ú'rK   )Úkeyr\   r¯   Úget_reference_typer
   Ú
DispatcherÚget_call_typer„   rN   Úreturn_typeÚNoneTyper   ÚNumbaTypeErrorr   Ú	signaturerE   )	r   rE   Úkwsr\   r[   Ú	boundargsÚ	disp_typeÚsigr~   s	            r&   ÚgenericzConstructorTemplate.generic  s½   € àŸ™×.Ñ.ˆØ×(Ñ(¨Ñ4ˆØ"×5Ñ5Ó7Ð9¸DÑ@ˆ	Ü×$Ñ$ TÓ*ˆ	Ø×%Ñ% d§l¡l°I¸sÓCˆä˜#Ÿ/™/¬5¯>©>Ô:Ü×'Ñ'Ø6°s·±Ð6GÀqÐIóKð Kô ×!Ñ! -Ð?°#·(±(¸1¸2°,Ò?ˆØˆ
r'   N)r)   r*   r+   rs   rÅ   r;   r'   r&   rž   rž     s   „ ñór'   rž   c                 óò  — t        g d¢«      }t        j                  dv r|t        ddg«      z  }dD ]  }|| v sŒ|j                  |«       Œ | j	                  «       D ]f  \  }}t        |t        j                  t        j                  f«      r|j                  |«       ŒBt        |dd «      t        u sŒV|j                  |«       Œh d| v r| d   €|j                  d«       |D ]  }| j                  |«       Œ y )N)Ú__weakref__r*   r‘   ))é   é   )rÈ   é   Ú__firstlineno__Ú__static_attributes__)Ú__annotations__Ú__annotate_func__Ú__annotations_cache__Ú__objclass__Ú__hash__)rŠ   r   Ú	PYVERSIONÚaddr4   rN   r’   ÚBuiltinFunctionTypeÚBuiltinMethodTyper‚   Úobjectr—   )rT   ÚdropÚattr7   r8   s        r&   r˜   r˜     sö   € äò ó €Dô ‡�Ð,Ñ,à”Ð&Ð(?Ð@ÓAÑAˆð)ò ˆð �#Š:Ø�H‰H�S�Mð	ð —	‘	“ò ‰ˆˆ1Ü�aœ'×5Ñ5Ü!×3Ñ3ð5ô 6à�H‰H�Q�KÜ�Q˜¨Ó-´Ò7Ø�H‰H�Q�Kðð �SÑ˜S ™_Ð4Ø�‰�Ôàò ˆØ�‰��
ñr'   c                   óZ   — e Zd ZdZ ej
                  d«      Z e«       Zd„ Z	d„ Z
d„ Zd„ Zy)ÚClassBuilderz•
    A jitclass builder for a mutable jitclass.  This will register
    typing and implementation hooks to the given typing and target contexts.
    zjitclass builderc                 ó.   — || _         || _        || _        y r1   )r2   r³   r´   )r   r2   r³   r´   s       r&   r   zClassBuilder.__init__@  s   € Ø$ˆŒØ"ˆŒØ"ˆ�r'   c                 ó®   — | j                  | j                  | j                  j                  «       | j                  j                  | j                  «       y)z7
        Register to the frontend and backend.
        N)Ú_register_methodsÚclass_impl_registryr2   r\   r´   Úinstall_registry)r   s    r&   r£   zClassBuilder.registerE  sA   € ð
 	×Ñ˜t×7Ñ7Ø#Ÿ™×<Ñ<ô	>ð 	�‰×'Ñ'¨×(@Ñ(@ÕAr'   c                 óà   — t        |j                  «      t        |j                  «      z   }|D ]>  }|| j                  vsŒ| j	                  ||«       | j                  j                  |«       Œ@ y)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   Úregistryr\   Úto_registerÚmeths        r&   rÝ   zClassBuilder._register_methodsP  sj   € ô ˜=×4Ñ4Ó5Ü�×1Ñ1Ó2ñ3ˆàò 	3ˆDð
 ˜4×3Ñ3Ò3Ø×&Ñ& x°Ô6Ø×(Ñ(×,Ñ,¨TÕ2ñ	3r'   c                 ó  ‡‡— ˆfd„Šˆfd„}‰j                  d«      }|dv r	 ||«       y  |j                  t        j                  ‰ft        j                  t        j                  t        j
                  «      «       ‰«       «       y )Nc                  ó   •— ˆfd„} | S )Nc                 óœ  •— |j                   d   }‰	|j                  v r|j                  ‰	   }nA‰	|j                  v r3|j                  ‰	   }|j                  |j                   dd  ¬«      }|dd  }t	        j
                  «      }| j                  ||«      } |||«      }t        | |«       t        j                  | ||j                  |«      S )Nr   rK   rY   )rE   r¯   r±   Úreplacer
   r»   Úget_functionr†   r	   Úimpl_ret_new_refr½   )
r„   r¥   rÄ   rE   r\   ÚmethodrÃ   r…   r~   r¦   s
            €r&   Úimpz<ClassBuilder._implement_method.<locals>.get_imp.<locals>.impe  sÍ   ø€ Ø #§¡¨¡�à˜=×4Ñ4Ñ4Ø*×6Ñ6°tÑ<‘FØ˜]×=Ñ=Ñ=Ø*×=Ñ=¸dÑC�Fð Ÿ+™+¨3¯8©8°A°B¨<˜+Ó8�CØ  ˜8�Dä!×,Ñ,¨VÓ4�	Ø×+Ñ+¨I°sÓ;�Ù˜7 DÓ)�Ü! '¨4Ô0Ü×0Ñ0°¸'Ø14·±À#óGð Gr'   r;   )rî   r¦   s    €r&   Úget_impz/ClassBuilder._implement_method.<locals>.get_impd  s   ø€ ôGð$ ˆJr'   c                 óü  •‡— d| z  Št        t        | «      }t        j                  |«       G ˆfd„dt        j                  «      «       } t        j                  t        j                  ‰ft        j                  t        j                  t        j                  «      «       ‰«       «        t        j                  |t        j                  t        j                  t        j                  «      «       ‰«       «       y )Nz__%s__c                   ó   •— e Zd Zˆ fd„Zy)úKClassBuilder._implement_method.<locals>._getsetitem_gen.<locals>.GetSetItemc                 óè   •— |d   }t        |t        j                  «      rR‰|j                  v rC|j                  ‰   }t        j                  |«      }|j                  | j                  ||«      }|S y y )Nr   )rN   r
   ÚClassInstanceTyper¯   r»   r¼   r„   )r   rE   rÁ   rl   ræ   rÃ   rÄ   Ú_dunder_meths          €r&   rÅ   zSClassBuilder._implement_method.<locals>._getsetitem_gen.<locals>.GetSetItem.generic  ss   ø€ Ø# A™w�HÜ! (¬E×,CÑ,CÔDØ(¨H×,@Ñ,@Ñ@Ø'×3Ñ3°LÑA˜Ü$)×$4Ñ$4°TÓ$:˜	Ø'×5Ñ5°d·l±lÀDÈ#ÓN˜Ø"˜
ð	 Að Er'   N)r)   r*   r+   rÅ   )rõ   s   €r&   Ú
GetSetItemrò   }  s   ø„ õ#r'   rö   )r‚   Úoperatorr   Úinfer_globalÚAbstractTemplater	   Úlower_builtinr
   rô   ÚVarArgÚAny)ÚgetsetÚoprö   rõ   rï   s      @€r&   Ú_getsetitem_genz7ClassBuilder._implement_method.<locals>._getsetitem_geny  s¾   ù€ Ø# fÑ,ˆLÜœ 6Ó*ˆBä×#Ñ# BÓ'ö#œY×7Ñ7ó #ó (ð#ð<ŒH×"Ñ"¤E×$;Ñ$;¸\Ð#JÜ#(×#:Ñ#:Ü#(§<¡<´·	±	Ó#:ó<á<C»IôGð<ŒH×"Ñ" 2Ü#(×#:Ñ#:Ü#(§<¡<´·	±	Ó#:ó<á<C»IõGr'   rz   )ÚgetitemÚsetitem)ÚstripÚlowerr
   rô   rû   rü   )r   rä   r¦   rÿ   Údunder_strippedrï   s     `  @r&   rã   zClassBuilder._implement_methodb  sn   ù€ ô	ô*	Gð0 Ÿ*™* S›/ˆØÐ4Ñ4Ù˜OÕ,ð4ˆH�N‰NœE×3Ñ3°TÐ:Ü ×2Ñ2Ü Ÿ<™<¬¯	©	Ó2ó4á4;³Iõ?r'   N)r)   r*   r+   rs   r	   ÚRegistryrÞ   rŠ   râ   r   r£   rÝ   rã   r;   r'   r&   rÚ   rÚ   8  s:   „ ñð ,˜(×+Ñ+Ð,>Ó?ÐÙ›%Ðò#ò
	Bò3ó$5?r'   rÚ   c                   ó*   — e Zd Zej                  Zd„ Zy)ÚClassAttributec                 ó   ‡ ‡‡‡	— ‰‰j                   v r‰j                   ‰   S ‰‰j                  v rX‰j                  ‰   }t        j                  |«      Š	 G ˆˆ	ˆˆ fd„dt        j
                  «      }t        j                  |‰«      S ‰‰j                  v rX‰j                  ‰   }t        j                  |«      Š	 G ˆˆ	ˆˆ fd„dt        j
                  «      }t        j                  |‰«      S ‰‰j                  v rS‰j                  ‰   }|d   }t        j                  |«      Š	‰	j                  ‰ j                  ‰fi «      }|j                  S y )Nc                   ó:   •— e Zd ZW °j                  W ° fZˆˆfd„Zy)ú6ClassAttribute.generic_resolve.<locals>.MethodTemplatec                 ó|   •— ‰ft        |«      z   }‰j                  | j                  ||«      }|j                  «       S r1   )Útupler¼   r„   Ú	as_method©r   rE   rÁ   rÄ   rÃ   rl   s       €€r&   rÅ   z>ClassAttribute.generic_resolve.<locals>.MethodTemplate.generic«  s7   ø€ Ø$˜;¬¨t«Ñ4�DØ#×1Ñ1°$·,±,ÀÀcÓJ�CØŸ=™=›?Ð*r'   N©r)   r*   r+   r¹   rÅ   ©r¦   rÃ   rl   r   s   €€€€r&   ÚMethodTemplater
  ¨  s   ø„ Ù—x‘x¡Ð&�ö+r'   r  c                   ó:   •— e Zd ZW °j                  W ° fZˆˆfd„Zy)ú<ClassAttribute.generic_resolve.<locals>.StaticMethodTemplatec                 ób   •— ‰j                  | j                  ||«      }|j                  ‰¬«      S )N)Úrecvr)r¼   r„   rê   r  s       €€r&   rÅ   zDClassAttribute.generic_resolve.<locals>.StaticMethodTemplate.genericº  s0   ø€ ð $×1Ñ1°$·,±,ÀÀcÓJ�Cð
 Ÿ;™;¨X˜;Ó6Ð6r'   Nr  r  s   €€€€r&   ÚStaticMethodTemplater  ·  s   ø„ Ù—x‘x¡Ð&�ö7r'   r  r‰   )r3   r¯   r
   r»   r   rù   ÚBoundFunctionr±   r°   r¼   r„   r½   )
r   rl   r¦   ræ   r  r  ÚimpdctÚgetterrÄ   rÃ   s
   ```      @r&   Úgeneric_resolvezClassAttribute.generic_resolvež  s3  û€ Ø�8—?‘?Ñ"à—?‘? 4Ñ(Ð(à�X×)Ñ)Ñ)à×'Ñ'¨Ñ-ˆDÜ×(Ñ(¨Ó.ˆI÷+ñ +¤×!;Ñ!;ô +ô ×&Ñ& ~°xÓ@Ð@à�X×0Ñ0Ñ0à×.Ñ.¨tÑ4ˆDÜ×(Ñ(¨Ó.ˆI÷7ñ 7¤y×'AÑ'Aô 7ô ×&Ñ&Ð';¸XÓFÐFà�X×'Ñ'Ñ'à×'Ñ'¨Ñ-ˆFØ˜E‘]ˆFÜ×(Ñ(¨Ó0ˆIØ×)Ñ)¨$¯,©,¸¸ÀRÓHˆCØ—?‘?Ð"ð (r'   N)r)   r*   r+   r
   rô   r¹   r  r;   r'   r&   r  r  š  s   „ à
×
!Ñ
!€Có.#r'   r  c                 ó¬  — ||j                   v rz| j                  |||¬«      }|j                  }| j                  ||j	                  «       |¬«      }t        j                  | ||j                   |   t        |t        |«      «      «      S ||j                  v r¥|j                  |   d   }t        j                  d|«      }	t        j                  |«      }
|
j                  | j                  |gi «      }	| j!                  |
|	«      } |||g«      }t#        | |«       t        j$                  | ||	j&                  |«      S t)        dj+                  |«      «      ‚)z4
    Generic getattr() for @jitclass instances.
    ©Úvalue©Úrefr‰   Núattribute {0!r} not implemented)r3   Úmake_helperr   Úmake_data_helperÚget_data_typer	   Úimpl_ret_borrowedr‚   r5   r°   r   rÀ   r
   r»   r¼   r    rë   r†   rì   r½   ÚNotImplementedErrorra   )r„   r¥   Útypr  r¦   ÚinstÚdata_pointerr   r  rÄ   Ú
dispatcherr…   r~   s                r&   Úget_attr_implr*  Ï  sD  € ð
 ˆs�z‰zÑà×"Ñ" 7¨C°uÐ"Ó=ˆØ—y‘yˆØ×'Ñ'¨°×1BÑ1BÓ1DØ,8ð (ó :ˆä×)Ñ)¨'°7Ø*-¯*©*°TÑ*:Ü*1°$¼ÀTÓ8JÓ*KóMð 	Mð 
�—‘Ñ	à—‘˜tÑ$ UÑ+ˆÜ×!Ñ! $¨Ó,ˆÜ×%Ñ% fÓ-ˆ
Ø×&Ñ& w×'=Ñ'=À¸uÀbÓIˆØ×#Ñ# J°Ó4ˆÙ�7˜U˜GÓ$ˆÜ˜' 4Ô(Ü×(Ñ(¨°'¸3¿?¹?ÈCÓPÐPä
Ð?×FÑFÀtÓLÓ
MÐMr'   c                 óä  — |j                   \  }}|\  }}||j                  v r·| j                  |||¬«      }	|	j                  }
| j	                  ||j                  «       |
¬«      }|j                  |   }t        |t        |«      «      }t        |t        |«      |«       | j                  j                  |||«       | j                  j                  |||«       y||j                  v rp|j                  |   d   }t        j                  |«      }|j                  | j                   ||fi «      }| j#                  ||«      } ||||f«       t%        | |«       yt'        dj)                  |«      «      ‚)z4
    Generic setattr() for @jitclass instances.
    r  r  rŠ   r   N)rE   r3   r!  r   r"  r#  r‚   r5   ÚsetattrÚnrtÚincrefÚdecrefr°   r
   r»   r¼   r    rë   r†   r%  ra   )r„   r¥   rÄ   rE   r¦   r&  ÚvaltyÚtargetÚvalr'  Údata_ptrr   Ú	attr_typeÚoldvalueÚsetterrÃ   r…   s                    r&   Úset_attr_implr7  ë  sb  € ð
 —‘�J€CˆØ�K€FˆCàˆs�z‰zÑà×"Ñ" 7¨C°vÐ"Ó>ˆØ—9‘9ˆØ×'Ñ'¨°×1BÑ1BÓ1DØ,4ð (ó 6ˆð —J‘J˜tÑ$ˆ	Ü˜4¤¨dÓ!3Ó4ˆô 	�”l 4Ó(¨#Ô.Ø�‰×Ñ˜7 I¨sÔ3ð 	�‰×Ñ˜7 I¨xÕ8à	�—‘Ñ	à—‘˜tÑ$ UÑ+ˆÜ×$Ñ$ VÓ,ˆ	Ø×%Ñ% g×&<Ñ&<Ø'*¨E l°Bó8ˆà×#Ñ# I¨sÓ3ˆÙˆW�v˜s�mÔ$Ü˜' 4Õ(ä!Ø-×4Ñ4°TÓ:ó<ð 	<r'   c                 óÔ  — | j                  t        j                  «      }| j                  t        j                  «      }t	        j
                  t	        j                  «       |||g«      }dj                  |j                  «      }t        j                  |||«      }|j                  rÀt	        j                  |j                  «       «      }|j                  «       }	| j                  |	«      }
|j                  |j                   d   |
j#                  «       «      }| j%                  ||	|¬«      }| j&                  j)                  ||	|j+                  «       «       |j-                  «        |S )Nz	_Dtor.{0}r   r  )Úget_value_typer
   ÚvoidptrÚuintpÚllvmirr“   ÚVoidTypera   r<   r   Úget_or_insert_functionÚis_declarationÚ	IRBuilderÚappend_basic_blockr#  ÚbitcastrE   Ú
as_pointerr!  r-  r/  Ú	_getvalueÚret_void)r„   Úmoduler\   Ú	llvoidptrÚllsizeÚ
dtor_ftypeÚfnameÚdtor_fnr¥   Úalloc_fe_typeÚ
alloc_typeÚptrr   s                r&   Úimp_dtorrO    s   € Ø×&Ñ&¤u§}¡}Ó5€IØ×#Ñ#¤E§K¡KÓ0€FÜ×$Ñ$¤V§_¡_Ó%6Ø&/°¸Ð%CóE€Jð ×Ñ˜}×1Ñ1Ó2€EÜ×,Ñ,¨V°ZÀÓG€GØ×Òä×"Ñ" 7×#=Ñ#=Ó#?Ó@ˆà%×3Ñ3Ó5ˆØ×+Ñ+¨MÓ:ˆ
à�o‰o˜gŸl™l¨1™o¨z×/DÑ/DÓ/FÓGˆØ×"Ñ" 7¨M¸sÐ"ÓCˆà�‰×Ñ˜7 M°4·>±>Ó3CÔDà×ÑÔà€Nr'   c           	      ó�  — |j                   }| j                  |j                  «       «      }| j                  |«      }| j                  j	                  || j                  t        j                  |«      t        | |j                  |«      «      }| j                  j                  ||«      }|j                  ||j                  «       «      }|j                  t        j                  |«      |«       | j!                  ||«      }	||	_        ||	_        |j                   f|j&                  z   }
|j(                  d   }t        j*                  |«      }| j-                  |t        j.                  |
Ž «      }t1        | |«       |	j3                  «       gt5        |«      z   } |||«       |	j3                  «       }t7        j8                  | |||«      S )z7
    Generic constructor (__new__) for jitclasses.
    r   )r½   r#  Úget_abi_sizeofr-  Úmeminfo_alloc_dtorÚget_constantr
   r;  rO  rF  Úmeminfo_datarB  rC  Ústorer   Úget_null_valuer!  r   r   rE   r¯   r»   rë   Úvoidr†   rD  rá   r	   rì   )r„   r¥   rÄ   rE   Úinst_typrM  Ú
alloc_sizer   r(  Úinst_structrf   re   rÃ   r…   ÚrealargsÚrets                   r&   Ú	ctor_implr]  ,  sŽ  € ð �‰€HØ×&Ñ& x×'=Ñ'=Ó'?Ó@€JØ×'Ñ'¨
Ó3€Jà�k‰k×,Ñ,ØØ×ÑœUŸ[™[¨*Ó5Ü�˜'Ÿ.™.¨(Ó3ó€Gð
 —;‘;×+Ñ+¨G°WÓ=€LØ—?‘? <Ø#-×#8Ñ#8Ó#:ó<€Lð ‡M�M”'×(Ñ(¨Ó4Øô ð ×%Ñ% g¨xÓ8€KØ!€KÔØ#€KÔð —‘Ð! C§H¡HÑ,€Hà×Ñ 
Ñ+€DÜ× Ñ  Ó&€IØ×Ñ 	¬5¯:©:°xÐ+@ÓA€DÜ�g˜tÔ$Ø×%Ñ%Ó'Ð(¬4°«:Ñ5€HÙˆ�(Ôð ×
Ñ
Ó
!€Cä×$Ñ$ W¨g°xÀÓEÐEr'   )DrŽ   r÷   r
   r’   Útypingr‹   Úcollectionsr   Úcollections.abcr   Úllvmliter   r<  Ú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   r/   r£   rô   r   Ú	ClassTypeÚOpaqueModelr5   r`   rG   rO   rI   rw   r   r†   rµ   rù   rž   r˜   rÖ   rÚ   Úinfer_getattrÚAttributeTemplater  rÞ   Úlower_getattr_genericr*  Úlower_setattr_genericr7  rO  r  rû   rü   r]  r;   r'   r&   ú<module>rq     sß  ðÛ Û Û Û Ý #Ý $å !Ý ß >Õ >ß 8Ý *Ý 'Ý 7Ý 1Ý ,ôB�F×&Ñ&ô BôF˜×*Ñ*ô Fð €× Ñ ˜×0Ñ0°-Ô @Ø €× Ñ ˜×,Ñ,Ð.?Ô @Ø €× Ñ ˜Ÿ™¨&×*<Ñ*<Ô =òð€òð ô*8�4ó *8ó ð*8ò`$ò	ò'ò_ôD˜)×4Ñ4ô ò,ô@_?�6ô _?ðD ×Ñô1#�Y×0Ñ0ó 1#ó ð1#ðh ×!Ñ!×7Ñ7¸×8OÑ8OÓPñNó QðNð6 ×!Ñ!×7Ñ7¸×8OÑ8OÓPñ$<ó Qð$<òNð2 ×!Ñ!×'Ñ'¨¯©Ø(4¨¯©°U·Y±YÓ(?óAñ(FóAñ(Fr'   