U
    |eA                     @   s  d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
 ddlmZmZmZ ddlmZmZmZ eejeejdd Zeejejejdd	 Zd
d Zeejejejdd Zeejejejdd Zeejejejdd Z eej!ejejdd Z"eej#ejejdd Z$eej%ejejdd Z&eej'dd Z(eej)eej*dd Z+eej,eej-dd Z+edej)edej*dd Z.ed ej/ee
j0d!d" Z1eej2d#d$ Z3ed%ejejd&d' Z4eej2ej)ej5eej2ej)ej6eej2ej*ej5eej2ej*ej6d(d) Z7ed*ej8ej9ed*ej:ej;ed*ej:ej<ed*ejej;ed*ejej<d+d, Z=eejejd-d. Z>eejd/d0d1 Z?eej@d2d3 ZAdS )4z!
Implementation of tuple objects
    N)lower_builtinlower_getattr_generic
lower_castlower_constantiternext_implimpl_ret_borrowedimpl_ret_untrackedRefType)typingtypescgutils)overload_methodoverload	intrinsicc           	      C   s`   g }t |D ].\}}| |||j| |j| }|| q| ||jt|}t| ||j|S N)	enumeratecastargsreturn_typeappend
make_tupletupler   )	contextbuildersigr   newargsiargcastedres r    S/var/www/website-v5/atlas_env/lib/python3.8/site-packages/numba/cpython/tupleobj.pynamedtuple_constructor   s    r"   c                    s:    fdd|D \}}|   |j|| }t|  |j|S )Nc                    s   g | ]}t  |qS r    )r   unpack_tuple).0xr   r    r!   
<listcomp>   s     ztuple_add.<locals>.<listcomp>)r   r   r   )r   r   r   r   leftrightr   r    r&   r!   	tuple_add   s    r*   c              
   C   s  |j \}}|\}}t|tj}	|d}
tt|j|jD ]\}\}}|||}|||}| 	|t
j||f||f}||4 | 	||||f||f}|||	 ||
 W 5 Q R X q<|t|jt|j}| tj|}|||	 ||
 ||
 ||	S )NZcmp_end)r   r   alloca_once_valuetrue_bitappend_basic_blockr   zipr   extract_valuegeneric_compareoperatorneif_thenstorebranchlenget_constantbooleanposition_at_endload)r   r   opr   r   tutvuvr   bbendr   tatbab	not_equalpredZlen_comparer    r    r!   tuple_cmp_ordered$   s$    



rG   c                 C   s   |j \}}|\}}t|jt|jkrD| tjd}t| ||j|S | tjd}tt|j|jD ]J\}	\}
}|	||	}|	||	}| 
|tj|
|f||f}|||}qdt| ||j|S )NFT)r   r6   r   r7   r8   r   r   r   r.   r/   r0   r1   eqand_)r   r   r   r   r<   r=   r>   r?   r   r   rA   rB   rC   rD   rF   r    r    r!   tuple_eq:   s    
rJ   c                 C   s$   | t| |||}t| ||j|S r   )not_rJ   r   r   r   r   r   r   r   r    r    r!   tuple_neI   s    rM   c                 C   s"   t | |tj||}t| ||j|S r   )rG   r1   ltr   r   rL   r    r    r!   tuple_ltN   s    rO   c                 C   s"   t | |tj||}t| ||j|S r   )rG   r1   ler   r   rL   r    r    r!   tuple_leS   s    rQ   c                 C   s"   t | |tj||}t| ||j|S r   )rG   r1   gtr   r   rL   r    r    r!   tuple_gtX   s    rS   c                 C   s"   t | |tj||}t| ||j|S r   )rG   r1   ger   r   rL   r    r    r!   tuple_ge]   s    rU   c                 C   s*   |j |}|||}t| ||| |S )z%
    Fetch a namedtuple's field.
    )fieldsindexr/   r   )r   r   typvalueattrrW   r   r    r    r!   namedtuple_getattrd   s    r[   c                    s,    fdd|D }t  t |S )z.
    Create a homogeneous tuple constant.
    c                    s   g | ]}  j|qS r    )get_constant_genericdtype)r$   r?   r   r   tyr    r!   r'   t   s   %unituple_constant.<locals>.<listcomp>)r   r   
pack_arrayr   r   r_   pyvalconstsr    r^   r!   unituple_constantn   s       
re   c                    s0    fddt |D }t t |S )z0
    Create a heterogeneous tuple constant.
    c                    s$   g | ]\}}  j| |qS r    )r\   r   )r$   r   r?   r^   r    r!   r'      s   r`   )r   r   r   pack_structrb   r    r^   r!   re   z   s       
getiterc           
      C   sl   |j \}|\}| |t|}| tjd}t||j}|	|| ||_
||_| }	t| ||j|	S )Nr   )r   make_helperr   UniTupleIterr7   intpr   alloca_oncetyper4   rW   r   	_getvaluer   r   )
r   r   r   r   tuptytupitervalZindex0indexptrr   r    r    r!   getiter_unituple   s    rr   iternextc              	   C   s   |j \}|\}| j|||d}|j}|j}	||	}
| tj|jj	}|
d|
|}|| ||v t|jj|jtj}t| ||||
g}| jr| j||jj| || ||
| tjd}|||j W 5 Q R X d S )N)rY   <   )r   rh   r   rW   r:   r7   r   rj   	containercounticmp_signed	set_validr3   r
   	signaturer]   getitem_unituple
enable_nrtnrtdecrefyield_addr4   )r   r   r   r   resultZ	tupitertyZtupiterrp   ro   idxptridxrw   is_validgetitem_sigZgetitem_outnidxr    r    r!   iternext_unituple   s,    



r   c                    s2   t | tjrt |tjsdS |j  fdd}|S )z
    Overloads BaseTuple getitem to cover cases where constant
    inference and RewriteConstGetitems cannot replace it
    with a static_getitem.
    Nc                    s   |   S r   r    )ro   r   idx_valr    r!   getitem_literal_idx_impl   s    z5getitem_literal_idx.<locals>.getitem_literal_idx_impl)
isinstancer   	BaseTupleIntegerLiteralliteral_value)ro   r   r   r    r   r!   getitem_literal_idx   s    
r   typed_getitemc              
   C   s:  |j \}}|\}}d}t|dkrf|tj | j|t| W 5 Q R X | |j	}	t
| ||j	|	S |d}
|d}|||
}||
 | j|t| W 5 Q R X | |j	}| tj}|| ||}W 5 Q R X t|jD ]}| tj|}|d| }||| | tj|j | }||| || |||}| j|j d | |j	|j	k}|r|j|d| d}| |||j d | |j	}||| n |j|jd| d}||| ||||| | | W 5 Q R X q|!| |||" }	|#|	}	t$| ||j	|	S d S )Nztuple index out of ranger   ztyped_switch.elseztyped_switch.endztyped_switch.%dzTYPED_VALUE_SLOT%s)name)%r   r6   r3   r   r,   	call_convreturn_user_exc
IndexErrorget_constant_nullr   r   r-   switch
goto_blockget_value_typer   voidptrphirangerw   r7   rj   add_caser/   typing_contextunify_typesallocar   r4   rl   add_incomingbitcastr5   r9   
as_pointerr:   r   )r   r   r   r   rn   _ro   r   
errmsg_oobr   bbelser@   r   lrtty	voidptrtyphinoder   kibbikinrY   ZDOCASTZ
value_slotr   r    r    r!   getitem_typed   sr    

 




r   c              
   C   s  |j \}}|\}}d}t|dkrf|tj | j|t| W 5 Q R X | |j	}	t
| ||j	|	S |d}
|d}|||
}||
 | j|t| W 5 Q R X | |j}|| ||}W 5 Q R X t|jD ]}| tj|}|d| }||| | tj|j | }||| ||( |||}|| ||| W 5 Q R X q|| |}	|j	|jkstt| ||j	|	S d S )Nr   r   zswitch.elsez
switch.endz	switch.%d)r   r6   r3   r   r,   r   r   r   r   r   r   r-   r   r   r   r]   r   r   rw   r7   r   rj   r   r/   r5   r   r9   AssertionErrorr   )r   r   r   r   rn   r   ro   r   r   r   r   r@   r   r   r   r   r   r   r   rY   r    r    r!   r{   #  sJ    

 




r{   static_getitemc                 C   s   |j \}}|\}}t|trh|dk r0|t|7 }d|  krHt|k sZn td||f |||}nnt|trt||| }	| 	||j
|	}nBt|tjr|j}
|j|
}|||}ntd||j d f t| ||j
|S )Nr   zcannot index at %d in %szunexpected index %r for %s)r   r   intr6   r   r/   slicer   r#   r   r   r   LiteralStrKeyDictr   rV   rW   NotImplementedErrorr   )r   r   r   r   rn   idxtyro   r   r   itemsr   Z
idx_offsetr    r    r!   static_getitem_tupleZ  s&    


r   c                    sl   t |tjst |tjrtt|t|kr0tt |t|} fddt|||D } ||S )Nc                    s"   g | ]\}}}  |||qS r    )r   )r$   r?   ftr   r   r    r!   r'     s   z"tuple_to_tuple.<locals>.<listcomp>)	r   r   BaseNamedTupler   r6   r   r#   r.   r   )r   r   fromtytotyvalolditemsr   r    r   r!   tuple_to_tupley  s    

r   rW   c                 C   s   dd }|S )Nc                 S   s2   t t| D ]}| | |kr|  S qtdd S )Nztuple.index(x): x not in tuple)r   r6   
ValueError)ro   rY   r   r    r    r!   tuple_index_impl  s    
z%tuple_index.<locals>.tuple_index_implr    )ro   rY   r   r    r    r!   tuple_index  s    r   c                 C   s   t | tjr| jsdd S d S )Nc                 S   s   dS )NFr    r%   yr    r    r!   <lambda>      z$in_seq_empty_tuple.<locals>.<lambda>)r   r   Tupler   r    r    r!   in_seq_empty_tuple  s    r   )B__doc__r1   numba.core.imputilsr   r   r   r   r   r   r   r	   
numba.corer
   r   r   numba.core.extendingr   r   r   NamedTupleClassVarArgAnyr"   r   r   r*   rG   rH   rJ   r2   rM   rN   rO   rP   rQ   rR   rS   rT   rU   r   r[   UniTupleNamedUniTuplere   r   
NamedTuplerr   ri   BORROWEDr   getitemr   r   rj   uintpr{   r   StringLiteralLiteralListr   SliceLiteralr   r   r   containsr   r    r    r    r!   <module>   sp   (








	





T3


