o
    TdA                     @   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    i/home/ncw/WWW/www-new/content/articles/pi-bbp/venv/lib/python3.10/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 ]K\}\}}|||}|||}| 	|t
j||f||f}|| | 	||||f||f}|||	 ||
 W d    n1 sdw   Y  q|t|jt|j}| tj|}|||	 ||
 ||
 ||	S )N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predlen_comparer    r    r!   tuple_cmp_ordered$   s(   




rI   c                 C   s   |j \}}|\}}t|jt|jkr"| tjd}t| ||j|S | tjd}tt|j|jD ]%\}	\}
}|	||	}|	||	}| 
|tj|
|f||f}|||}q2t| ||j|S )NFT)r   r7   r   r8   r9   r   r   r   r/   r0   r1   r2   eqand_)r   r   r   r   r=   r>   r?   r@   r   r   rB   rC   rD   rE   rG   r    r    r!   tuple_eq:   s   
rL   c                 C   s$   | t| |||}t| ||j|S r   )not_rL   r   r   r   r   r   r   r   r    r    r!   tuple_neI   s   rO   c                 C   "   t | |tj||}t| ||j|S r   )rI   r2   ltr   r   rN   r    r    r!   tuple_ltN      rR   c                 C   rP   r   )rI   r2   ler   r   rN   r    r    r!   tuple_leS   rS   rU   c                 C   rP   r   )rI   r2   gtr   r   rN   r    r    r!   tuple_gtX   rS   rW   c                 C   rP   r   )rI   r2   ger   r   rN   r    r    r!   tuple_ge]   rS   rY   c                 C   s*   |j |}|||}t| ||| |S )z%
    Fetch a namedtuple's field.
    )fieldsindexr0   r   )r   r   typvalueattrr[   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   rc   pyvalconstsr    rb   r!   unituple_constantn   s   ri   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@   rb   r    r!   r'      s    rd   )r   r   r   pack_structrf   r    rb   r!   ri   z   s   getiterc           
      C   sl   |j \}|\}| |t|}| tjd}t||j}|	|| ||_
||_| }	t| ||j|	S )Nr   )r   make_helperr   UniTupleIterr8   intpr   alloca_oncetyper5   r[   r   	_getvaluer   r   )
r   r   r   r   tuptytupitervalindex0indexptrr   r    r    r!   getiter_unituple   s   rw   iternextc                 C   s   |j \}|\}| j|||d}|j}|j}	||	}
| tj|jj	}|
d|
|}|| ||A t|jj|jtj}t| ||||
g}| jrV| j||jj| || ||
| tjd}|||j W d    d S 1 sxw   Y  d S )N)r]   <   )r   rl   r   r[   r;   r8   r   rn   	containercounticmp_signed	set_validr4   r
   	signaturera   getitem_unituple
enable_nrtnrtdecrefyield_addr5   )r   r   r   r   result	tupitertytupiterrt   rs   idxptridxr|   is_validgetitem_sig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    )rs   r   idx_valr    r!   getitem_literal_idx_impl   s   z5getitem_literal_idx.<locals>.getitem_literal_idx_impl)
isinstancer   	BaseTupleIntegerLiteralliteral_value)rs   r   r   r    r   r!   getitem_literal_idx   s   
r   typed_getitemc              	   C   s  |j \}}|\}}d}t|dkr=|tj | j|t| W d    n1 s*w   Y  | |j	}	t
| ||j	|	S |d}
|d}|||
}||
 | j|t| W d    n1 sew   Y  | |j	}| tj}|| ||}W d    n1 sw   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 s"w   Y  q|!| |||" }	|#|	}	t$| ||j	|	S )Nztuple index out of ranger   ztyped_switch.elseztyped_switch.endztyped_switch.%dzTYPED_VALUE_SLOT%s)name)%r   r7   r4   r   r-   	call_convreturn_user_exc
IndexErrorget_constant_nullr   r   r.   switch
goto_blockget_value_typer   voidptrphiranger|   r8   rn   add_caser0   typing_contextunify_typesallocar   r5   rp   add_incomingbitcastr6   r:   
as_pointerr;   r   )r   r   r   r   rr   _rs   r   
errmsg_oobr   bbelserA   r   lrtty	voidptrtyphinoder   kibbikinr]   DOCAST
value_slotr   r    r    r!   getitem_typed   sz   





%
r   c              	   C   s  |j \}}|\}}d}t|dkr=|tj | j|t| W d    n1 s*w   Y  | |j	}	t
| ||j	|	S |d}
|d}|||
}||
 | j|t| W d    n1 sew   Y  | |j}|| ||}W d    n1 sw   Y  t|jD ]M}| tj|}|d| }||| | tj|j | }||| || |||}|| ||| W d    n1 sw   Y  q|| |}	|j	|jksJ t| ||j	|	S )Nr   r   zswitch.elsez
switch.endz	switch.%d)r   r7   r4   r   r-   r   r   r   r   r   r   r.   r   r   r   ra   r   r   r|   r8   r   rn   r   r0   r6   r   r:   r   )r   r   r   r   rr   r   rs   r   r   r   r   rA   r   r   r   r   r   r   r   r]   r    r    r!   r   #  sR   






r   static_getitemc                 C   s   |j \}}|\}}t|tr4|dk r|t|7 }d|  kr$t|k s-n td||f |||}n7t|trJt||| }	| 	||j
|	}n!t|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   intr7   r   r0   slicer   r#   r   r   r   LiteralStrKeyDictr   rZ   r[   NotImplementedErrorr   )r   r   r   r   rr   idxtyrs   r   r   itemsr   
idx_offsetr    r    r!   static_getitem_tupleZ  s&   


r   c                    sl   t |tjst |tjrtt|t|krt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   r7   r   r#   r/   r   )r   r   fromtytotyvalolditemsr   r    r   r!   tuple_to_tupley  s   

r   r[   c                 C   s   dd }|S )Nc                 S   s.   t t| D ]}| | |kr|  S qtd)Nztuple.index(x): x not in tuple)r   r7   
ValueError)rs   r]   r   r    r    r!   tuple_index_impl  s
   z%tuple_index.<locals>.tuple_index_implr    )rs   r]   r   r    r    r!   tuple_index  s   r   c                 C   s"   t | tjr| jsdd S d S d S )Nc                 S   s   dS )NFr    r%   yr    r    r!   <lambda>  s    z$in_seq_empty_tuple.<locals>.<lambda>)r   r   Tupler   r    r    r!   in_seq_empty_tuple  s   r   )B__doc__r2   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*   rI   rJ   rL   r3   rO   rQ   rR   rT   rU   rV   rW   rX   rY   r   r_   UniTupleNamedUniTupleri   r   
NamedTuplerw   rm   BORROWEDr   getitemr   r   rn   uintpr   r   StringLiteralLiteralListr   SliceLiteralr   r   r   containsr   r    r    r    r!   <module>   sr    (








	





T3


