§
    2@ÄjÎU  ã                   ó’  — 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j!        ¦  «        Z" G d„ dej!        ¦  «        Z# ej$        ej%        e"¦  «          ej$        ej&        e#¦  «          ej$        ej'        ej(        ¦  «         d„ Z)dZ*d„ Z+e G d„ de,¦  «        ¦   «         Z-d„ Z.d„ Z/d„ Z0d„ Z1 G d„ dej2        ¦  «        Z3d„ Z4 G d„ de5¦  «        Z6ej7         G d„ d ej8        ¦  «        ¦   «         Z9e6j:         ;                    ej%        ¦  «        d!„ ¦   «         Z<e6j:         =                    ej%        ¦  «        d"„ ¦   «         Z>d#„ Z?e6j:         @                    ej'         ejA        ejB        ¦  «        ¦  «        d$„ ¦   «         ZCdS )%é    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          | ¦  «                             |||¦  «         d S )NzOpaque.ÚmeminfoÚdata)	r   ÚClassDataTypeÚOpaqueÚstrÚMemInfoPointerÚCPointerÚsuperr   Ú__init__)ÚselfÚdmmÚfe_typÚcls_data_tyÚdtypeÚmembersÚ	__class__s         €úQC:\Projects\Historical\venv\Lib\site-packages\numba/experimental/jitclass/base.pyr   zInstanceModel.__init__   s‡   ø€ ÝÔ)¨&Ñ1Ô1ˆõ
 ”˜Y­¨[Ñ)9Ô)9Ñ9Ñ:Ô:ˆà�Ô,¨UÑ3Ô3Ð4Ø•U”^ KÑ0Ô0Ð1ð
ˆõ 	�m˜TÑ"Ô"×+Ò+¨C°¸ÑAÔAÐAÐAÐAó    ©Ú__name__Ú
__module__Ú__qualname__r   Ú__classcell__©r&   s   @r'   r   r      sA   ø€ € € € € ðBð Bð Bð Bð Bð Bð Bð Bð Br(   r   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ÚInstanceDataModelc                 ó°   •— |j         }d„ |j                             ¦   «         D ¦   «         }t          t          | ¦  «                             |||¦  «         d S )Nc                 ó6   — g | ]\  }}t          |¦  «        |f‘ŒS © )Ú_mangle_attr©Ú.0ÚkÚvs      r'   ú
<listcomp>z.InstanceDataModel.__init__.<locals>.<listcomp>(   s'   € ÐIÐIÐI©D¨A¨q•L ‘O”O QÐ'ÐIÐIÐIr(   )Ú
class_typeÚstructÚitemsr   r0   r   )r    r!   r"   Úclstyr%   r&   s        €r'   r   zInstanceDataModel.__init__&   sU   ø€ ØÔ!ˆØIÐI°E´L×4FÒ4FÑ4HÔ4HÐIÑIÔIˆÝÕ Ñ&Ô&×/Ò/°°V¸WÑEÔEÐEÐEÐEr(   r)   r.   s   @r'   r0   r0   %   sA   ø€ € € € € ðFð Fð Fð Fð Fð Fð Fð Fð Fr(   r0   c                 ó   — d| z   S )zZ
    Mangle attributes.
    The resulting name does not startswith an underscore '_'.
    Úm_r3   )Únames    r'   r4   r4   1   s   € ð
 �$‰;Ðr(   z3
def ctor({args}):
    return __numba_cls_({args})
c                 óâ   — | j         }g }|                     ¦   «         D ]P\  }}|j        |j        z  |j        k    r|                     |¦  «         Œ3d|j        z  }t          j        |¦  «        ‚|S )zI
    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Úargsr7   r8   Úmsgs         r'   Ú_getargsrK   B   sw   € ð Ô€FØ€DØ—’‘”ð /ð /‰ˆˆ1ØŒF�QÔ,Ñ,°Ô1HÒHÐHØ�KŠK˜‰NŒNˆNˆNà<¸q¼vÑEˆCÝÔ)¨#Ñ.Ô.Ð.Ø€Kr(   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚJitClassTypez#
    The type of any jitclass.
    c                 ó  — t          |¦  «        dk    rt          d¦  «        ‚|\  }t          |t          ¦  «        rt          d¦  «        ‚d|v s
J d¦   «         ‚t                               | |||¦  «        }|                     ¦   «          |S )Né   z must have exactly one base classzcannot subclass from a jitclassr:   zmissing "class_type" attr)ÚlenÚ	TypeErrorÚ
isinstancerM   ÚtypeÚ__new__Ú	_set_init)Úclsr@   ÚbasesÚdctÚbaseÚoutclss         r'   rT   zJitClassType.__new__V   s�   € Ýˆu‰:Œ:˜Š?ˆ?ÝÐ>Ñ?Ô?Ð?Ø‰ˆÝ�d�LÑ)Ô)ð 	?ÝÐ=Ñ>Ô>Ð>Ø˜sÐ"Ð"Ð"Ð$?Ñ"Ô"Ð"Ý—’˜c 4¨°Ñ4Ô4ˆØ×ÒÑÔÐØˆr(   c                 óT  — | j         j        j        d         }t          j        |¦  «        }t          |¦  «        dd…         }|| _        t                               d 	                    |¦  «        ¬¦  «        }d| i}t          ||¦  «         |d         }t          |¦  «        | _        dS )z’
        Generate a wrapper for calling the constructor from pure Python.
        Note the wrapper will only accept positional arguments.
        r   rO   Nú, ©rI   Ú__numba_cls_Úctor)r:   Úinstance_typeÚmethodsr   ÚpysignaturerK   Ú	_ctor_sigÚ_ctor_templateÚformatÚjoinÚexecr   Ú_ctor)rV   ÚinitÚinit_sigrI   Úctor_sourceÚglblsr_   s          r'   rU   zJitClassType._set_inita   s™   € ð
 Œ~Ô+Ô3°JÔ?ˆÝÔ$ TÑ*Ô*ˆõ ˜Ñ!Ô! ! " "Ô%ˆØ ˆŒÝ$×+Ò+°·²¸4±´Ð+ÑAÔAˆØ Ð%ˆÝˆ[˜%Ñ Ô Ð Ø�VŒ}ˆÝ˜‘J”JˆŒ	ˆ	ˆ	r(   c                 ó`   — t          |t          j        ¦  «        r|j        j        | j        u S dS )NF)rR   r   ÚBoxÚ_numba_type_r:   )rV   Úinstances     r'   Ú__instancecheck__zJitClassType.__instancecheck__r   s/   € Ý�h¥¤Ñ)Ô)ð 	FØÔ(Ô3°s´~ÐEÐEØˆur(   c                 ó”   —  | j         j        d g|¢R i |¤Ž}|                     ¦   «           | j        |j        dd …         i |j        ¤ŽS )NrO   )rc   ÚbindÚapply_defaultsrh   rI   Úkwargs)rV   rI   ru   rs   s       r'   Ú__call__zJitClassType.__call__w   s]   € ð "ˆsŒ}Ô! $Ð8¨Ð8Ð8Ð8°Ð8Ð8ˆØ×ÒÑÔÐØˆsŒy˜$œ) A B Bœ-Ð7¨4¬;Ð7Ð7Ð7r(   N)r*   r+   r,   Ú__doc__rT   rU   rq   rv   r3   r(   r'   rM   rM   Q   sZ   € € € € € ðð ð	ð 	ð 	ðð ð ð"ð ð ð
8ð 8ð 8ð 8ð 8r(   rM   c                 óà   — |                       ¦   «         D ]X\  }}t          |t          ¦  «        st          d|›�¦  «        ‚t          |t          j        ¦  «        st          d|›�¦  «        ‚ŒYd S )Nz!spec keys should be strings, got z0spec values should be Numba type instances, got )r<   rR   r   rQ   r   ÚType)Úspecr7   r8   s      r'   Ú_validate_specr{   ‚   s†   € Ø—
’
‘”ð $ð $‰ˆˆ1Ý˜!�SÑ!Ô!ð 	JÝ�)ÀQÀQÐHÑIÔIÐIÝ˜!�UœZÑ(Ô(ð 	$Ý�)Ø ˜qð#ñ $ô $ð $ð	$ð$ð $r(   c                 óÄ   — t          ¦   «         }|                     ¦   «         D ]<\  }}|                     d¦  «        r|                     d¦  «        sd| z   |z   }|||<   Œ=|S )zB
    Apply the same changes to dunder names as CPython would.
    Ú__Ú_)r   r<   Ú
startswithÚendswith)Úclsnamerz   Úoutr7   r8   s        r'   Ú_fix_up_private_attrrƒ   ‹   sm   € õ ‰-Œ-€CØ—
’
‘”ð ð ‰ˆˆ1Ø�<Š<˜ÑÔð 	" a§j¢j°Ñ&6Ô&6ð 	"Ø�g‘ Ñ!ˆAØˆˆA‰ˆØ€Jr(   c                 óZ   — t          |dd¦  «        }|r|                      |¦  «         dS dS )zC
    Add the required libs for the callable to allow inlining.
    Úlibsr3   N)ÚgetattrÚadd_linking_libs)ÚcontextÚcallr…   s      r'   Ú_add_linking_libsrŠ   —   sA   € õ �4˜ Ñ$Ô$€DØð 'Ø× Ò  Ñ&Ô&Ð&Ð&Ð&ð'ð 'r(   c                 óº  — |€t          ¦   «         }n$t          |t          ¦  «        rt          |¦  «        }t          j        | ¦  «                             ¦   «         D ]\  }}||vrt          |¦  «        ||<   Œt          |¦  «         t          | j	        |¦  «        }i }t          t          j        | ¦  «        ¦  «        D ]}|                     |j        ¦  «         Œi i i i f\  }}	}
}|                     ¦   «         D ]`\  }}t          |t          j        ¦  «        r|||<   Œ%t          |t"          ¦  «        r||	|<   Œ@t          |t$          ¦  «        r||
|<   Œ[|||<   Œat'          |¦  «        t'          |	¦  «        z  t'          |
¦  «        z  t'          |¦  «        z  }|r5t)          d                     d                     |¦  «        ¦  «        ¦  «        ‚|                     dd¦  «        }t1          |¦  «         |rKd}d                     |                     ¦   «         ¦  «        }t5          |                     |¦  «        ¦  «        ‚|	                     ¦   «         D ].\  }}|j        �"t5          d                     |¦  «        ¦  «        ‚Œ/d„ |                     ¦   «         D ¦   «         }i }|	                     ¦   «         D ]H\  }}i }|j        rt;          |j        ¦  «        |d	<   |j        rt;          |j        ¦  «        |d
<   |||<   ŒId„ |
                     ¦   «         D ¦   «         } || t>          ||||¦  «        }tA          ||¬¦  «        }|                     |¦  «         tC          | j	        | f|¦  «        } tD          j#        }| $                    | |¦  «         tD          j%        } ||||¦  «         &                    ¦   «          t          j&        | |j'        ¦  «         | S )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
    Nzname shadowing: {0}r\   rw   Ú z(class members are not yet supported: {0}zdeleter is not supported: {0}c                 ó4   — i | ]\  }}|t          |¦  «        “ŒS r3   r   r5   s      r'   ú
<dictcomp>z'register_class_type.<locals>.<dictcomp>Û   s$   € Ð:Ð:Ð:¡$ ! Q�1•d˜1‘g”gÐ:Ð:Ð:r(   ÚgetÚsetc                 ó>   — i | ]\  }}|t          |j        ¦  «        “ŒS r3   )r   Ú__func__r5   s      r'   rŽ   z'register_class_type.<locals>.<dictcomp>æ   s;   € ð @ð @ð @Ù $  1ˆ�4�”
ÑÔð@ð @ð @r(   )r:   rw   )(r   rR   r   ÚptÚget_type_hintsr<   r   r{   rƒ   r*   ÚreversedÚinspectÚgetmroÚupdateÚ__dict__ÚpytypesÚFunctionTypeÚpropertyÚstaticmethodr�   Ú	NameErrorre   rf   ÚpopÚ_drop_ignored_attrsÚkeysrQ   ÚfdelÚfgetr   ÚfsetÚConstructorTemplateÚdictrM   r   Útyping_contextÚinsert_globalÚtarget_contextÚregisterr`   )rV   rz   Ú
class_ctorÚbuilderÚattrÚpy_typeÚclsdctÚbaseclsra   ÚpropsÚstatic_methodsÚothersr7   r8   ÚshadowedÚ	docstringrJ   r%   Újit_methodsÚ	jit_propsrX   Újit_static_methodsr:   Újit_class_dctÚ	typingctxÚ	targetctxs                             r'   Úregister_class_typer¼       sú  € ð €|Ý‰}Œ}ˆˆÝ	�D�(Ñ	#Ô	#ð !Ý˜4Ñ Ô ˆõ Ô*¨3Ñ/Ô/×5Ò5Ñ7Ô7ð 0ð 0‰ˆˆgØ�tÐÐÝ& wÑ/Ô/ˆD�‰Jøå�4ÑÔÐõ   ¤¨dÑ3Ô3€Dð €FÝ�GœN¨3Ñ/Ô/Ñ0Ô0ð (ð (ˆØ�Š�gÔ&Ñ'Ô'Ð'Ð'à-/°°R¸¨^Ñ*€GˆU�N FØ—’‘”ð ð ‰ˆˆ1Ý�a�Ô-Ñ.Ô.ð 	ØˆG�A‰JˆJÝ˜�8Ñ$Ô$ð 	ØˆE�!‰HˆHÝ˜�<Ñ(Ô(ð 	Ø !ˆN˜1ÑÐàˆF�1‰IˆIõ �G‘”�s 5™zœzÑ)­C°Ñ,?Ô,?Ñ?Å3ÀtÁ9Ä9ÑL€HØð KÝÐ-×4Ò4°T·Y²Y¸xÑ5HÔ5HÑIÔIÑJÔJÐJà—
’
˜9 bÑ)Ô)€IÝ˜ÑÔÐØð -Ø8ˆØ—)’)˜FŸKšK™MœMÑ*Ô*ˆÝ˜Ÿ
š
 7Ñ+Ô+Ñ,Ô,Ð,à—’‘”ð Gð G‰ˆˆ1ØŒ6ÐÝÐ;×BÒBÀ1ÑEÔEÑFÔFÐFð ð ;Ð:¨'¯-ª-©/¬/Ð:Ñ:Ô:€Kà€IØ—’‘”ð ð ‰ˆˆ1ØˆØŒ6ð 	&Ý˜aœf™œˆC�‰JØŒ6ð 	&Ý˜aœf™œˆC�‰JØˆ	�!‰ˆð@ð @Ø(6×(<Ò(<Ñ(>Ô(>ð@ñ @ô @Ðð �ØÝØØØØñô €Jõ  J¸	ÐBÑBÔB€MØ×ÒÐ+Ñ,Ô,Ð,Ý
�s”| c V¨]Ñ
;Ô
;€Cõ Ô)€IØ×Ò˜C Ñ,Ô,Ð,õ Ô)€IØ€GˆJ˜	 9Ñ-Ô-×6Ò6Ñ8Ô8Ð8ÝÔ˜3 
Ô 8Ñ9Ô9Ð9à€Jr(   c                   ó   — e Zd ZdZd„ ZdS )r¥   z8
    Base class for jitclass constructor templates.
    c                 ó~  — | j         j        }|j        d         }|                     ¦   «         f|z   }t	          j        |¦  «        }|                     | j        ||¦  «        }t          |j	        t          j
        ¦  «        st          j        d|j	        › d�¦  «        ‚t          j        |g|j        dd …         ¢R Ž }|S )Nr   z$__init__() should return None, not 'ú'rO   )Úkeyr`   r¶   Úget_reference_typer   Ú
DispatcherÚget_call_typerˆ   rR   Úreturn_typeÚNoneTyper	   ÚNumbaTypeErrorr   Ú	signaturerI   )	r    rI   Úkwsr`   r_   Ú	boundargsÚ	disp_typeÚsigr‚   s	            r'   ÚgenericzConstructorTemplate.generic  sÃ   € àœÔ.ˆØÔ(¨Ô4ˆØ"×5Ò5Ñ7Ô7Ð9¸DÑ@ˆ	ÝÔ$ TÑ*Ô*ˆ	Ø×%Ò% d¤l°I¸sÑCÔCˆå˜#œ/­5¬>Ñ:Ô:ð 	KÝÔ'ØI°s´ÐIÐIÐIñKô Kð Kõ Ô! -Ð?°#´(¸1¸2¸2´,Ð?Ð?Ð?ˆØˆ
r(   N)r*   r+   r,   rw   rÌ   r3   r(   r'   r¥   r¥     s-   € € € € € ðð ðð ð ð ð r(   r¥   c                 ó$  — t          g d¢¦  «        }t          j        dv r|t          ddg¦  «        z  }dD ]}|| v r|                     |¦  «         Œ|                      ¦   «         D ]n\  }}t          |t          j        t          j        f¦  «        r|                     |¦  «         ŒAt          |dd ¦  «        t          u r|                     |¦  «         Œod| v r| d         €|                     d¦  «         |D ]}|                      |¦  «         Œd S )N)Ú__weakref__r+   r™   ))é   é   )rÏ   é   )rÏ   é   Ú__firstlineno__Ú__static_attributes__)Ú__annotations__Ú__annotate_func__Ú__annotations_cache__Ú__objclass__Ú__hash__)r�   r   Ú	PYVERSIONÚaddr<   rR   rš   ÚBuiltinFunctionTypeÚBuiltinMethodTyper†   ÚobjectrŸ   )rX   ÚdropÚattr7   r8   s        r'   r    r      s>  € åð ð ð ñ ô €Dõ „Ð5Ð5Ð5à•Ð&Ð(?Ð@ÑAÔAÑAˆð)ð ð ˆð �#ˆ:ˆ:Ø�HŠH�S‰MŒMˆMøà—	’	‘”ð ð ‰ˆˆ1Ý�a�'Ô5Ý!Ô3ð5ñ 6ô 6ð 	à�HŠH�Q‰KŒKˆKˆKÝ�Q˜¨Ñ-Ô-µÐ7Ð7Ø�HŠH�Q‰KŒKˆKøð
 �SÐÐ˜S œ_Ð4Ø�Š�ÑÔÐàð ð ˆØ�Š�‰
Œ
ˆ
ˆ
ðð r(   c                   ó^   — e Zd ZdZ ej        d¦  «        Z e¦   «         Zd„ Z	d„ Z
d„ Zd„ ZdS )Ú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                 ó0   — || _         || _        || _        d S ©N)r:   rº   r»   )r    r:   rº   r»   s       r'   r   zClassBuilder.__init__@  s   € Ø$ˆŒØ"ˆŒØ"ˆŒˆˆr(   c                 óŽ   — |                       | j        | j        j        ¦  «         | j                             | j        ¦  «         dS )z7
        Register to the frontend and backend.
        N)Ú_register_methodsÚclass_impl_registryr:   r`   r»   Úinstall_registry)r    s    r'   rª   zClassBuilder.registerE  sJ   € ð
 	×Ò˜tÔ7Ø#œÔ<ñ	>ô 	>ð 	>ð 	Œ×'Ò'¨Ô(@ÑAÔAÐAÐAÐAr(   c                 óÔ   — t          |j        ¦  «        t          |j        ¦  «        z   }|D ];}|| j        vr0|                      ||¦  «         | j                             |¦  «         Œ<dS )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  s~   € õ ˜=Ô4Ñ5Ô5Ý�Ô1Ñ2Ô2ñ3ˆàð 	3ð 	3ˆDð
 ˜4Ô3Ð3Ð3Ø×&Ò& x°Ñ6Ô6Ð6ØÔ(×,Ò,¨TÑ2Ô2Ð2øð	3ð 	3r(   c                 ó  ‡‡— ˆfd„Šˆfd„}‰                      d¦  «        }|dv r ||¦  «         d S  |                     t          j        ‰ft          j        t          j        t          j        ¦  «        ¦  «         ‰¦   «         ¦  «         d S )Nc                  ó   •— ˆfd„} | S )Nc                 ó–  •— |j         d         }‰	|j        v r|j        ‰	         }nC‰	|j        v r:|j        ‰	         }|                     |j         dd …         ¬¦  «        }|dd …         }t	          j        |¦  «        }|                      ||¦  «        } |||¦  «        }t          | |¦  «         t          j	        | ||j
        |¦  «        S )Nr   rO   r]   )rI   r¶   r¸   Úreplacer   rÂ   Úget_functionrŠ   r
   Úimpl_ret_new_refrÄ   )
rˆ   r¬   rË   rI   r`   ÚmethodrÊ   r‰   r‚   r­   s
            €r'   Úimpz<ClassBuilder._implement_method.<locals>.get_imp.<locals>.impe  sÛ   ø€ Ø #¤¨¤�à˜=Ô4Ð4Ð4Ø*Ô6°tÔ<�F�FØ˜]Ô=Ð=Ð=Ø*Ô=¸dÔC�Fð Ÿ+š+¨3¬8°A°B°B¬<˜+Ñ8Ô8�CØ   œ8�Då!Ô,¨VÑ4Ô4�	Ø×+Ò+¨I°sÑ;Ô;�Ø�d˜7 DÑ)Ô)�Ý! '¨4Ñ0Ô0Ð0ÝÔ0°¸'Ø14´À#ñGô Gð Gr(   r3   )r÷   r­   s    €r'   Úget_impz/ClassBuilder._implement_method.<locals>.get_impd  s(   ø€ ðGð Gð Gð Gð 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
        ¦  «        ¦  «         ‰¦   «         ¦  «         d S )Nz__%s__c                   ó   •— e Zd Zˆ fd„ZdS )úKClassBuilder._implement_method.<locals>._getsetitem_gen.<locals>.GetSetItemc                 óà   •— |d         }t          |t          j        ¦  «        rH‰|j        v rA|j        ‰         }t          j        |¦  «        }|                     | j        ||¦  «        }|S d S d S )Nr   )rR   r   ÚClassInstanceTyper¶   rÂ   rÃ   rˆ   )r    rI   rÈ   rp   rï   rÊ   rË   Ú_dunder_meths          €r'   rÌ   zSClassBuilder._implement_method.<locals>._getsetitem_gen.<locals>.GetSetItem.generic  sz   ø€ Ø# Aœw�HÝ! (­EÔ,CÑDÔDð #Ø(¨HÔ,@Ð@Ð@Ø'Ô3°LÔA˜Ý$)Ô$4°TÑ$:Ô$:˜	Ø'×5Ò5°d´lÀDÈ#ÑNÔN˜Ø"˜
ð#ð #Ø@Ð@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ñ #ô #ñ (Ô'ð#ð<�HÔ"¥EÔ$;¸\Ð#JÝ#(Ô#:Ý#(¤<µ´	Ñ#:Ô#:ñ<ô <à<C¸G¹I¼IñGô Gð Gð<�HÔ" 2Ý#(Ô#:Ý#(¤<µ´	Ñ#:Ô#:ñ<ô <à<C¸G¹I¼IñGô Gð Gð Gð Gr(   r~   )ÚgetitemÚsetitem)ÚstripÚlowerr   rý   r  r  )r    rí   r­   r  Údunder_strippedrø   s     `  @r'   rì   zClassBuilder._implement_methodb  sÄ   øø€ ð	ð 	ð 	ð 	ð 	ð*	Gð 	Gð 	Gð 	Gð 	Gð0 Ÿ*š* S™/œ/ˆØÐ4Ð4Ð4ØˆO˜OÑ,Ô,Ð,Ð,Ð,ð4ˆH�NŠN�EÔ3°TÐ:Ý Ô2Ý œ<­¬	Ñ2Ô2ñ4ô 4à4;°G±I´Iñ?ô ?ð ?ð ?ð ?r(   N)r*   r+   r,   rw   r
   ÚRegistryrç   r�   rë   r   rª   ræ   rì   r3   r(   r'   râ   râ   8  s   € € € € € ðð ð ,˜(Ô+Ð,>Ñ?Ô?ÐØ˜#™%œ%Ðð#ð #ð #ð
	Bð 	Bð 	Bð3ð 3ð 3ð$5?ð 5?ð 5?ð 5?ð 5?r(   râ   c                   ó"   — e Zd Zej        Zd„ ZdS )ÚClassAttributec                 óV  ‡ ‡‡‡	— ‰‰j         v r‰j         ‰         S ‰‰j        v rS‰j        ‰         }t          j        |¦  «        Š	 G ˆˆ	ˆˆ fd„dt          j        ¦  «        }t          j        |‰¦  «        S ‰‰j        v rS‰j        ‰         }t          j        |¦  «        Š	 G ˆˆ	ˆˆ fd„dt          j        ¦  «        }t          j        |‰¦  «        S ‰‰j        v rM‰j        ‰         }|d         }t          j        |¦  «        Š	‰	 	                    ‰ j
        ‰fi ¦  «        }|j        S d S )Nc                   ó.   •— e Zd Z”j        ” fZˆˆfd„ZdS )ú6ClassAttribute.generic_resolve.<locals>.MethodTemplatec                 óŠ   •— ‰ft          |¦  «        z   }‰                     | j        ||¦  «        }|                     ¦   «         S rä   )ÚtuplerÃ   rˆ   Ú	as_method©r    rI   rÈ   rË   rÊ   rp   s       €€r'   rÌ   z>ClassAttribute.generic_resolve.<locals>.MethodTemplate.generic«  s<   ø€ Ø$˜;­¨t©¬Ñ4�DØ#×1Ò1°$´,ÀÀcÑJÔJ�CØŸ=š=™?œ?Ð*r(   N©r*   r+   r,   rÀ   rÌ   ©r­   rÊ   rp   r    s   €€€€r'   ÚMethodTemplater  ¨  s?   ø€ € € € € Ø”x Ð&�ð+ð +ð +ð +ð +ð +ð +ð +r(   r  c                   ó.   •— e Zd Z”j        ” fZˆˆfd„ZdS )ú<ClassAttribute.generic_resolve.<locals>.StaticMethodTemplatec                 óh   •— ‰                      | j        ||¦  «        }|                     ‰¬¦  «        S )N)Úrecvr)rÃ   rˆ   ró   r  s       €€r'   rÌ   zDClassAttribute.generic_resolve.<locals>.StaticMethodTemplate.genericº  s4   ø€ ð $×1Ò1°$´,ÀÀcÑJÔJ�Cð
 Ÿ;š;¨X˜;Ñ6Ô6Ð6r(   Nr  r  s   €€€€r'   ÚStaticMethodTemplater  ·  s?   ø€ € € € € Ø”x Ð&�ð7ð 7ð 7ð 7ð 7ð 7ð 7ð 7r(   r  r�   )r;   r¶   r   rÂ   r   r  ÚBoundFunctionr¸   r·   rÃ   rˆ   rÄ   )
r    rp   r­   rï   r  r  ÚimpdctÚgetterrË   rÊ   s
   ```      @r'   Úgeneric_resolvezClassAttribute.generic_resolvež  sŒ  øøøø€ Ø�8”?Ð"Ð"à”? 4Ô(Ð(à�XÔ)Ð)Ð)àÔ'¨Ô-ˆDÝÔ(¨Ñ.Ô.ˆIð+ð +ð +ð +ð +ð +ð +ð +ð +ð +¥Ô!;ñ +ô +ð +õ Ô& ~°xÑ@Ô@Ð@à�XÔ0Ð0Ð0àÔ.¨tÔ4ˆDÝÔ(¨Ñ.Ô.ˆIð7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7¥yÔ'Añ 7ô 7ð 7õ Ô&Ð';¸XÑFÔFÐFà�XÔ'Ð'Ð'àÔ'¨Ô-ˆFØ˜E”]ˆFÝÔ(¨Ñ0Ô0ˆIØ×)Ò)¨$¬,¸¸ÀRÑHÔHˆCØ”?Ð"ð (Ð'r(   N)r*   r+   r,   r   rý   rÀ   r#  r3   r(   r'   r  r  š  s+   € € € € € à
Ô
!€Cð.#ð .#ð .#ð .#ð .#r(   r  c                 óÆ  — ||j         v r†|                      |||¬¦  «        }|j        }|                      ||                     ¦   «         |¬¦  «        }t          j        | ||j         |         t          |t          |¦  «        ¦  «        ¦  «        S ||j	        v r¨|j	        |         d         }t          j        d|¦  «        }	t          j        |¦  «        }
|
                     | j        |gi ¦  «        }	|                      |
|	¦  «        } |||g¦  «        }t#          | |¦  «         t          j        | ||	j        |¦  «        S t)          d                     |¦  «        ¦  «        ‚)z4
    Generic getattr() for @jitclass instances.
    ©Úvalue©Úrefr�   Núattribute {0!r} not implemented)r;   Úmake_helperr   Úmake_data_helperÚget_data_typer
   Úimpl_ret_borrowedr†   r4   r·   r   rÇ   r   rÂ   rÃ   r§   rô   rŠ   rõ   rÄ   ÚNotImplementedErrorre   )rˆ   r¬   Útypr&  r­   ÚinstÚdata_pointerr   r"  rË   Ú
dispatcherr‰   r‚   s                r'   Úget_attr_implr3  Ï  sf  € ð
 ˆsŒzÐÐà×"Ò" 7¨C°uÐ"Ñ=Ô=ˆØ”yˆØ×'Ò'¨°×1BÒ1BÑ1DÔ1DØ,8ð (ñ :ô :ˆåÔ)¨'°7Ø*-¬*°TÔ*:Ý*1°$½ÀTÑ8JÔ8JÑ*KÔ*KñMô Mð 	Mð 
�”Ð	Ð	à”˜tÔ$ UÔ+ˆÝÔ! $¨Ñ,Ô,ˆÝÔ% fÑ-Ô-ˆ
Ø×&Ò& wÔ'=À¸uÀbÑIÔIˆØ×#Ò# J°Ñ4Ô4ˆØˆd�7˜U˜GÑ$Ô$ˆÝ˜' 4Ñ(Ô(Ð(ÝÔ(¨°'¸3¼?ÈCÑPÔPÐPå
Ð?×FÒFÀtÑLÔLÑ
MÔ
MÐMr(   c                 ó  — |j         \  }}|\  }}||j        v rË|                      |||¬¦  «        }	|	j        }
|                      ||                     ¦   «         |
¬¦  «        }|j        |         }t          |t          |¦  «        ¦  «        }t          |t          |¦  «        |¦  «         | j	         
                    |||¦  «         | j	                             |||¦  «         dS ||j        v r{|j        |         d         }t          j        |¦  «        }|                     | j        ||fi ¦  «        }|                      ||¦  «        } ||||f¦  «         t%          | |¦  «         dS t'          d                     |¦  «        ¦  «        ‚)z4
    Generic setattr() for @jitclass instances.
    r%  r'  r�   r)  N)rI   r;   r*  r   r+  r,  r†   r4   ÚsetattrÚnrtÚincrefÚdecrefr·   r   rÂ   rÃ   r§   rô   rŠ   r.  re   )rˆ   r¬   rË   rI   r­   r/  ÚvaltyÚtargetÚvalr0  Údata_ptrr   Ú	attr_typeÚoldvalueÚsetterrÊ   r‰   s                    r'   Úset_attr_implr@  ë  s¥  € ð
 ”�J€CˆØ�K€FˆCàˆsŒzÐÐà×"Ò" 7¨C°vÐ"Ñ>Ô>ˆØ”9ˆØ×'Ò'¨°×1BÒ1BÑ1DÔ1DØ,4ð (ñ 6ô 6ˆð ”J˜tÔ$ˆ	Ý˜4¥¨dÑ!3Ô!3Ñ4Ô4ˆõ 	�•l 4Ñ(Ô(¨#Ñ.Ô.Ð.ØŒ×Ò˜7 I¨sÑ3Ô3Ð3ð 	Œ×Ò˜7 I¨xÑ8Ô8Ð8Ð8Ð8à	�”Ð	Ð	à”˜tÔ$ UÔ+ˆÝÔ$ VÑ,Ô,ˆ	Ø×%Ò% gÔ&<Ø'*¨E l°Bñ8ô 8ˆà×#Ò# I¨sÑ3Ô3ˆØˆˆW�v˜s�mÑ$Ô$Ð$Ý˜' 4Ñ(Ô(Ð(Ð(Ð(å!Ø-×4Ò4°TÑ:Ô:ñ<ô <ð 	<r(   c                 óú  — |                       t          j        ¦  «        }|                       t          j        ¦  «        }t	          j        t	          j        ¦   «         |||g¦  «        }d                     |j        ¦  «        }t          j
        |||¦  «        }|j        rÜt	          j        |                     ¦   «         ¦  «        }|                     ¦   «         }	|                       |	¦  «        }
|                     |j        d         |
                     ¦   «         ¦  «        }|                      ||	|¬¦  «        }| j                             ||	|                     ¦   «         ¦  «         |                     ¦   «          |S )Nz	_Dtor.{0}r   r'  )Úget_value_typer   ÚvoidptrÚuintpÚllvmirr›   ÚVoidTypere   r@   r   Úget_or_insert_functionÚis_declarationÚ	IRBuilderÚappend_basic_blockr,  ÚbitcastrI   Ú
as_pointerr*  r6  r8  Ú	_getvalueÚret_void)rˆ   Úmoduler`   Ú	llvoidptrÚllsizeÚ
dtor_ftypeÚfnameÚdtor_fnr¬   Úalloc_fe_typeÚ
alloc_typeÚptrr   s                r'   Úimp_dtorrX    sE  € Ø×&Ò&¥u¤}Ñ5Ô5€IØ×#Ò#¥E¤KÑ0Ô0€FÝÔ$¥V¤_Ñ%6Ô%6Ø&/°¸Ð%CñEô E€Jð ×Ò˜}Ô1Ñ2Ô2€EÝÔ,¨V°ZÀÑGÔG€GØÔð åÔ" 7×#=Ò#=Ñ#?Ô#?Ñ@Ô@ˆà%×3Ò3Ñ5Ô5ˆØ×+Ò+¨MÑ:Ô:ˆ
à�oŠo˜gœl¨1œo¨z×/DÒ/DÑ/FÔ/FÑGÔGˆØ×"Ò" 7¨M¸sÐ"ÑCÔCˆàŒ×Ò˜7 M°4·>²>Ñ3CÔ3CÑDÔDÐDà×ÒÑÔÐà€Nr(   c           	      óÀ  — |j         }|                      |                     ¦   «         ¦  «        }|                      |¦  «        }| j                             ||                      t          j        |¦  «        t          | |j	        |¦  «        ¦  «        }| j         
                    ||¦  «        }|                     ||                     ¦   «         ¦  «        }|                     t          j        |¦  «        |¦  «         |                      ||¦  «        }	||	_        ||	_        |j         f|j        z   }
|j        d         }t          j        |¦  «        }|                      |t          j        |
Ž ¦  «        }t1          | |¦  «         |	                     ¦   «         gt5          |¦  «        z   } |||¦  «         |	                     ¦   «         }t7          j        | |||¦  «        S )z7
    Generic constructor (__new__) for jitclasses.
    r   )rÄ   r,  Úget_abi_sizeofr6  Úmeminfo_alloc_dtorÚget_constantr   rD  rX  rO  Úmeminfo_datarK  rL  Ústorer   Úget_null_valuer*  r   r   rI   r¶   rÂ   rô   ÚvoidrŠ   rM  rê   r
   rõ   )rˆ   r¬   rË   rI   Úinst_typrV  Ú
alloc_sizer   r1  Úinst_structrj   ri   rÊ   r‰   ÚrealargsÚrets                   r'   Ú	ctor_implrf  ,  sÀ  € ð Œ€HØ×&Ò& x×'=Ò'=Ñ'?Ô'?Ñ@Ô@€JØ×'Ò'¨
Ñ3Ô3€JàŒk×,Ò,ØØ×Ò�Uœ[¨*Ñ5Ô5Ý�˜'œ.¨(Ñ3Ô3ñô €Gð
 ”;×+Ò+¨G°WÑ=Ô=€LØ—?’? <Ø#-×#8Ò#8Ñ#:Ô#:ñ<ô <€Lð ‡M‚M•'Ô(¨Ñ4Ô4Øñ ô  ð  ð ×%Ò% g¨xÑ8Ô8€KØ!€KÔØ#€KÔð ”Ð! C¤HÑ,€HàÔ 
Ô+€DÝÔ  Ñ&Ô&€IØ×Ò 	­5¬:°xÐ+@ÑAÔA€DÝ�g˜tÑ$Ô$Ð$Ø×%Ò%Ñ'Ô'Ð(­4°©:¬:Ñ5€HØ€Dˆ�(ÑÔÐð ×
Ò
Ñ
!Ô
!€CåÔ$ W¨g°xÀÑEÔEÐEr(   )Dr–   r   r   rš   Útypingr“   Úcollectionsr   Úcollections.abcr   Úllvmliter   rE  Ú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   r0   rª   rý   r   Ú	ClassTypeÚOpaqueModelr4   rd   rK   rS   rM   r{   rƒ   rŠ   r¼   r  r¥   r    rÞ   râ   Úinfer_getattrÚAttributeTemplater  rç   Úlower_getattr_genericr3  Úlower_setattr_genericr@  rX  r  r  r  rf  r3   r(   r'   ú<module>rz     sã  ðØ €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $à !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø *Ð *Ð *Ð *Ð *Ð *Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ðBð Bð Bð Bð B�FÔ&ñ Bô Bð BðFð Fð Fð Fð F˜Ô*ñ Fô Fð Fð €Ô ˜Ô0°-Ñ @Ô @Ð @Ø €Ô ˜Ô,Ð.?Ñ @Ô @Ð @Ø €Ô ˜œ¨&Ô*<Ñ =Ô =Ð =ðð ð ð€ðð ð ð ð*8ð *8ð *8ð *8ð *8�4ñ *8ô *8ñ Ôð*8ð`$ð $ð $ð	ð 	ð 	ð'ð 'ð 'ð_ð _ð _ðDð ð ð ð ˜)Ô4ñ ô ð ð,ð ð ð@_?ð _?ð _?ð _?ð _?�6ñ _?ô _?ð _?ðD Ôð1#ð 1#ð 1#ð 1#ð 1#�YÔ0ñ 1#ô 1#ñ Ôð1#ðh Ô!×7Ò7¸Ô8OÑPÔPðNð Nñ QÔPðNð6 Ô!×7Ò7¸Ô8OÑPÔPð$<ð $<ñ QÔPð$<ðNð ð ð2 Ô!×'Ò'¨¬Ø(4¨¬°U´YÑ(?Ô(?ñAô Að(Fð (FñAô Að(Fð (Fð (Fr(   