U
    |e                     @   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   T/var/www/website-v5/atlas_env/lib/python3.8/site-packages/numba/cpython/iterators.pyiterator_getiter   s    r   c                 C   s   t |dkst |dkst|jd }t |dkrJ|d }| tjd}n0t |dkrz|d }| ||d |jd tj}t| |||}| ||j	}t
||j}	|||	 |	|_||_| }
t| ||j	|
S )N      r   )lenAssertionErrorr   get_constantr   intpcastr   make_helperr   r   alloca_oncetypestorecountiter	_getvaluer	   )r   r   r   r   srctysrcZ	start_valiterobjenumZ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 5 Q R X 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   resultZenumtyr'   r!   Zncountsrcresr0   Zsrcvalr   r   r   iternext_enumerate.   s    
r9   c           
      C   sp   |j }t|t|jkst| ||}tt||jD ]\}\}}t| |||||< q8|	 }	t
| ||j |	S r   )r   r   source_typesr   r   	enumeratezipr   r   r#   r	   )
r   r   r   r   zip_typezipobjiargr$   r(   r   r   r   make_zip_objectG   s    rA   c              
   C   s$  |j \}|\}| j|||d}t|dkr6|  d S t|| |j}tj|tj	d}t
t||jD ]z\}	\}
}||}||T t| |||
}||| }||| | }t||d|	}||| W 5 Q R X qj||}|| || ||| W 5 Q R X d S )Nr+   r   )r   r   r   set_exhaustedr   r   get_value_typer6   alloca_once_valuetrue_bitr;   r<   r:   r-   r2   r   and_r0   r    r3   gep_inboundsr1   r4   )r   r   r   r   r7   r=   r>   Z	p_ret_tupZ
p_is_validr?   r&   r$   r0   r8   valptrr   r   r   iternext_zipU   s.    



rJ   c           
   	   C   s   |j \}|\}| |}|| |||\}}	| t|dd t||j |d ||	 W 5 Q R X t	||j
 |  W 5 Q R X t	|||j||j
 | j|| W 5 Q R X d S )Nlibsr   T)r   get_generator_impladd_linking_libsgetattrr   	if_likelyis_okr1   r4   if_unlikelyis_stop_iterationrB   rF   is_errornot_	call_convreturn_status_propagate)
r   r   r   r   r7   gentygenimplstatusretvalr   r   r   rJ   {   s     


N)__doc__
numba.corer   r   numba.core.imputilsr   r   r   r   r   r	   r
   IteratorTyper   r;   IterableTypeIntegerr)   EnumerateTypeNEWr9   r<   VarArgAnyrA   ZipTyperJ   	GeneratorBORROWEDr   r   r   r   <module>   s$   $





$
