a
    DfA                     @   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   Znewargsiargcastedres r   c/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/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>       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}||> | 	||||f||f}|||	 ||
 W d    q<1 s0    Y  q<|t|jt|j}| tj|}|||	 ||
 ||
 ||	S )NZcmp_end)r   r   Z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$    

*

rF   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   r5   r   r6   r7   r   r   r   r-   r.   r/   r0   eqand_)r   r   r   r   r;   r<   r=   r>   r   r   r@   rA   rB   rC   rE   r   r   r    tuple_eq:   s    
rI   c                 C   s$   | t| |||}t| ||j|S r   )not_rI   r   r   r   r   r   r   r   r   r   r    tuple_neI   s    rL   c                 C   s"   t | |tj||}t| ||j|S r   )rF   r0   ltr   r   rK   r   r   r    tuple_ltN   s    rN   c                 C   s"   t | |tj||}t| ||j|S r   )rF   r0   ler   r   rK   r   r   r    tuple_leS   s    rP   c                 C   s"   t | |tj||}t| ||j|S r   )rF   r0   gtr   r   rK   r   r   r    tuple_gtX   s    rR   c                 C   s"   t | |tj||}t| ||j|S r   )rF   r0   ger   r   rK   r   r   r    tuple_ge]   s    rT   c                 C   s*   |j |}|||}t| ||| |S )z%
    Fetch a namedtuple's field.
    )fieldsindexr.   r   )r   r   typvalueattrrV   r   r   r   r    namedtuple_getattrd   s    rZ   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   Z
pack_arrayr   r   r^   ZpyvalZconstsr   r]   r    unituple_constantn   s    ra   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   Zpack_structr`   r   r]   r    ra   z   s    Zgetiterc           
      C   sl   |j \}|\}| |t|}| tjd}t||j}|	|| ||_
||_| }	t| ||j|	S )Nr   )r   make_helperr   UniTupleIterr6   intpr   Zalloca_oncetyper3   rV   r   Z	_getvaluer   r   )
r   r   r   r   tuptytupitervalZindex0Zindexptrr   r   r   r    getiter_unituple   s    ri   Ziternextc                 C   s   |j \}|\}| j|||d}|j}|j}	||	}
| tj|jj	}|
d|
|}|| || t|jj|jtj}t| ||||
g}| jr| j||jj| || ||
| tjd}|||j W d    n1 s0    Y  d S )N)rX   <   )r   rb   r   rV   r9   r6   r   rd   	containercountZicmp_signedZ	set_validr2   r
   	signaturer\   getitem_unitupleZ
enable_nrtZnrtZdecrefZyield_addr3   )r   r   r   r   resultZ	tupitertyZtupiterrh   rg   Zidxptridxrm   Zis_validZgetitem_sigZgetitem_outZnidxr   r   r    iternext_unituple   s,    



rs   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   )rg   rr   idx_valr   r    getitem_literal_idx_impl   s    z5getitem_literal_idx.<locals>.getitem_literal_idx_impl)
isinstancer   	BaseTupleIntegerLiteralliteral_value)rg   rr   rv   r   rt   r    getitem_literal_idx   s    
r{   Ztyped_getitemc              	   C   s  |j \}}|\}}d}t|dkrz|tj  | j|t| W d    n1 sT0    Y  | |j	}	t
| ||j	|	S |d}
|d}|||
}||
  | j|t| W d    n1 s0    Y  | |j	}| tj}|| ||}W d    n1 s0    Y  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 d    n1 sJ0    Y  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   r5   r2   r   r+   	call_convreturn_user_exc
IndexErrorget_constant_nullr   r   r,   switch
goto_blockget_value_typer   Zvoidptrphirangerm   r6   rd   add_caser.   Ztyping_contextZunify_typesZallocar   r3   re   add_incomingZbitcastr4   r8   Z
as_pointerr9   r   )r   r   r   r   rf   _rg   rr   
errmsg_oobr   bbelser?   r   lrttyZ	voidptrtyphinoder   kibbikinrX   ZDOCASTZ
value_slotr   r   r   r    getitem_typed   sp    

"


"*.

r   c              	   C   s  |j \}}|\}}d}t|dkrz|tj  | j|t| W d    n1 sT0    Y  | |j	}	t
| ||j	|	S |d}
|d}|||
}||
  | j|t| W d    n1 s0    Y  | |j}|| ||}W d    n1 s0    Y  t|jD ]}| tj|}|d| }||| | tj|j | }||| ||2 |||}|| ||| W d    n1 s0    Y  q || |}	|j	|jksJ t| ||j	|	S d S )Nr|   r   zswitch.elsez
switch.endz	switch.%d)r   r5   r2   r   r+   r~   r   r   r   r   r   r,   r   r   r   r\   r   r   rm   r6   r   rd   r   r.   r4   r   r8   r   )r   r   r   r   rf   r   rg   rr   r   r   r   r?   r   r   r   r   r   r   r   rX   r   r   r    ro   #  sH    

"


"*
0
ro   Z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   rw   intr5   r   r.   slicer   r"   r   r   r   LiteralStrKeyDictrz   rU   rV   NotImplementedErrorr   )r   r   r   r   rf   Zidxtyrg   rr   r   itemsru   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>)	rw   r   BaseNamedTupler   r5   r   r"   r-   r   )r   r   ZfromtyZtotyvalZolditemsr   r   r   r    tuple_to_tupley  s    

r   rV   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   r5   
ValueError)rg   rX   r   r   r   r    tuple_index_impl  s    
z%tuple_index.<locals>.tuple_index_implr   )rg   rX   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>  r'   z$in_seq_empty_tuple.<locals>.<lambda>)rw   r   Tupler   r   r   r    in_seq_empty_tuple  s    r   )B__doc__r0   Znumba.core.imputilsr   r   r   r   r   r   r   r	   Z
numba.corer
   r   r   Znumba.core.extendingr   r   r   ZNamedTupleClassZVarArgAnyr!   rp   rx   r*   rF   rG   rI   r1   rL   rM   rN   rO   rP   rQ   rR   rS   rT   r   rZ   ZUniTupleZNamedUniTuplera   r   
NamedTupleri   rc   ZBORROWEDrs   getitemr{   r   rd   Zuintpro   r   ZStringLiteralZLiteralListry   ZSliceLiteralr   r   r   containsr   r   r   r   r    <module>   sp   (








	





T3


