o
    8Î®c¹  ã                   @   s  d dl mZmZmZ ddlZddlmZmZmZm	Z	m
Z
mZmZmZmZ ddlmZ e	ejƒG dd„ deƒƒZe	eƒG d	d
„ d
eƒƒZe	ejƒG dd„ deƒƒZe	ejƒG dd„ deƒƒZe	ejƒG dd„ deƒƒZe	ejƒG dd„ deƒƒZeG dd„ deƒƒZeG dd„ deƒƒZdS )é   )ÚtypesÚutilsÚerrorsé    Né   )	ÚAttributeTemplateÚConcreteTemplateÚAbstractTemplateÚinfer_globalÚinferÚinfer_getattrÚ	signatureÚbound_functionÚmake_callable_template)Únormalize_1d_indexc                   @   ó   e Zd ZejZdd„ ZdS )ÚInContainerc                 C   s(   |\}}t |tjƒrttj||jƒS d S ©N)Ú
isinstancer   Ú	Containerr   ÚbooleanÚdtype)ÚselfÚargsÚkwsÚcontÚitem© r   úD/tmp/pip-target-vg8gfxp4/lib/python/numba/core/typing/collections.pyÚgeneric   s   ÿzInContainer.genericN)Ú__name__Ú
__module__Ú__qualname__ÚoperatorÚcontainsÚkeyr   r   r   r   r   r   	   ó    r   c                   @   ó   e Zd Zdd„ ZdS )ÚContainerLenc                 C   ó*   |rJ ‚|\}t |tjƒrttj|ƒS d S r   )r   r   r   r   Úintp©r   r   r   Úvalr   r   r   r      ó
   ÿzContainerLen.genericN©r    r!   r"   r   r   r   r   r   r(      s    r(   c                   @   r   )ÚSequenceBoolc                 C   r)   r   )r   r   ÚSequencer   r   r+   r   r   r   r       r-   zSequenceBool.genericN)r    r!   r"   r#   Útruthr%   r   r   r   r   r   r/      r&   r/   c                   @   r   )ÚGetItemSequencec                 C   sf   |\}}t |tjƒr/t|ƒ}t |tjƒr"t |tjƒs t|||ƒS d S t |tjƒr1t|j||ƒS d S d S r   )	r   r   r0   r   Ú	SliceTypeÚ	BaseTupler   ÚIntegerr   ©r   r   r   ÚseqÚidxr   r   r   r   +   s   ÿùzGetItemSequence.genericN)r    r!   r"   r#   Úgetitemr%   r   r   r   r   r   r2   '   r&   r2   c                   @   r'   )ÚSetItemSequencec                 C   sŽ   |\}}}t |tjƒrCt|ƒ}t |tjƒrttj|||ƒS t |tjƒrE| j 	||j
¡s:d}t | t |¡|j
¡¡‚ttj|||j
ƒS d S d S )Nz1invalid setitem with value of {} to element of {})r   r   ÚMutableSequencer   r3   r   Únoner5   ÚcontextÚcan_convertr   r   ÚTypingErrorÚformatÚ	unliteral)r   r   r   r7   r8   ÚvalueÚmsgr   r   r   r   8   s   
øzSetItemSequence.genericNr.   r   r   r   r   r:   6   ó    r:   c                   @   r'   )ÚDelItemSequencec                 C   s.   |\}}t |tjƒrt|ƒ}ttj||ƒS d S r   )r   r   r;   r   r   r<   r6   r   r   r   r   G   s
   þzDelItemSequence.genericNr.   r   r   r   r   rE   E   rD   rE   c                   @   s"   e Zd ZejZdd„ Zdd„ ZdS )ÚNamedTupleAttributec                 C   s   t  |j¡S r   )r   ÚNamedTupleClassÚinstance_class)r   Útupr   r   r   Úresolve___class__U   s   z%NamedTupleAttribute.resolve___class__c                 C   s,   z|j  |¡}W || S  ty   Y d S w r   )ÚfieldsÚindexÚ
ValueError)r   rI   ÚattrrL   r   r   r   Úgeneric_resolveX   s   þÿz#NamedTupleAttribute.generic_resolveN)r    r!   r"   r   ÚBaseNamedTupler%   rJ   rO   r   r   r   r   rF   Q   s    rF   c                   @   r   )ÚNamedTupleClassAttributec                    s6   |j ‰ t ˆ ¡‰‡ ‡fdd„}ˆ|_t t| j|ƒ¡S )zW
        Resolve the named tuple constructor, aka the class's __call__ method.
        c               
      s^   z
ˆj | i |¤Ž}W n ty! } zdˆ |f }|f|_‚ d }~ww |jr'J ‚tj |jˆ ¡S )NzIn '%s': %s)ÚbindÚ	TypeErrorr   Úkwargsr   r4   Ú
from_types)r   r   ÚboundÚerC   ©rH   Úpysigr   r   Útyperl   s   €ý
z8NamedTupleClassAttribute.resolve___call__.<locals>.typer)rH   r   ÚpysignaturerY   r   ÚFunctionr   r%   )r   ÚclasstyrZ   r   rX   r   Úresolve___call__e   s
   
z)NamedTupleClassAttribute.resolve___call__N)r    r!   r"   r   rG   r%   r^   r   r   r   r   rQ   a   r&   rQ   )Ú r   r   r   r#   Ú	templatesr   r   r	   r
   r   r   r   r   r   Úbuiltinsr   r$   r   Úlenr(   r1   r/   r9   r2   Úsetitemr:   ÚdelitemrE   rF   rQ   r   r   r   r   Ú<module>   s(    ,	
