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$   $





$
