o
    Td                     @   s   d Z ddlmZmZ ddlmZmZmZmZm	Z	m
Z
mZ edejdd Zeeejeeejejdd Zed	ejeejd
d Zeeeejdd Zed	ejeejdd Zed	ejeejdd ZdS )z8
Implementation of various iterable and iterator types.
    )typescgutils)lower_builtiniternext_implcall_iternextcall_getiterimpl_ret_borrowedimpl_ret_new_refRefTypegetiterc                 C   s   |\}t | ||j|S N)r   return_type)contextbuildersigargsit r   j/home/ncw/WWW/www-new/content/articles/pi-bbp/venv/lib/python3.10/site-packages/numba/cpython/iterators.pyiterator_getiter   s   r   c                 C   s   t |dkst |dksJ |jd }t |dkr%|d }| tjd}nt |dkr=|d }| ||d |jd tj}t| |||}| ||j}t	
||j}	|||	 |	|_||_| }
t| ||j|
S )N      r   )lenr   get_constantr   intpcastr   make_helperr   r   alloca_oncetypestorecountiter	_getvaluer	   )r   r   r   r   srctysrc	start_valiterobjenumcountptrresr   r   r   make_enumerate_object   s    
r*   iternextc              	   C   s   |j \}|\}| j|||d}||j}||| tjd}|||j t	| ||j
|j}	|	 }
||
 ||
 |	 }|| ||j||g W d    d S 1 s[w   Y  d S )Nvaluer   )r   r   loadr    addr   r   r   r   r   source_typer!   is_valid	set_validif_thenyielded_valueyield_
make_tuple
yield_type)r   r   r   r   resultenumtyr'   r    ncountsrcresr1   srcvalr   r   r   iternext_enumerate.   s   
"r=   c           
      C   sp   |j }t|t|jksJ | ||}tt||jD ]\}\}}t| |||||< q| }	t	| ||j |	S r   )
r   r   source_typesr   	enumeratezipr   r   r"   r	   )
r   r   r   r   zip_typezipobjiargr#   r)   r   r   r   make_zip_objectG   s   rE   c              	   C   sN  |j \}|\}| j|||d}t|dkr|  d S t|| |j}tj|tj	d}t
t||jD ]G\}	\}
}||}||/ t| |||
}||| }||| | }t||d|	}||| W d    n1 sww   Y  q5||}|| || ||| W d    d S 1 sw   Y  d S )Nr,   r   )r   r   r   set_exhaustedr   r   get_value_typer7   alloca_once_valuetrue_bitr?   r@   r>   r.   r3   r   and_r1   r   r4   gep_inboundsr2   r5   )r   r   r   r   r8   rA   rB   	p_ret_tup
p_is_validrC   r&   r#   r1   r;   valptrr   r   r   iternext_zipU   s4   



"rP   c           
   	   C   s  |j \}|\}| |}|| |||\}}	| t|dd t||j |d ||	 W d    n1 s:w   Y  t	||j
 |  W d    n1 sUw   Y  t	|||j||j
 | j|| W d    d S 1 s|w   Y  d S )Nlibsr   T)r   get_generator_impladd_linking_libsgetattrr   	if_likelyis_okr2   r5   if_unlikelyis_stop_iterationrF   rJ   is_errornot_	call_convreturn_status_propagate)
r   r   r   r   r8   gentygenimplstatusretvalr   r   r   rP   {   s&   



"N)__doc__
numba.corer   r   numba.core.imputilsr   r   r   r   r   r	   r
   IteratorTyper   r?   IterableTypeIntegerr*   EnumerateTypeNEWr=   r@   VarArgAnyrE   ZipTyperP   	GeneratorBORROWEDr   r   r   r   <module>   s&    $






$