o
    ۾in"                     @   sP  d Z ddlZddlmZ ddlmZmZmZmZ ddl	m
Z
mZmZmZ ddlmZ ddlmZmZmZmZ ddlmZ d	d
 Zdd Zejr_ejejejfejejejfej ej!ej"fiZ#n	ej$ej%ej&fiZ#e#' D ]\Z(Z)ee(ge)R   qleej*ej*dd Z+dd Z,edd Z-eej.dd Z/e0dD ]
\Z1Z2e,e1e2d qdS )z=
Implementation of the range object for fixed-size integers.
    N)prange)typescgutilserrorsconfig)lower_builtin
lower_castiterator_implimpl_ret_untracked)	signature)	intrinsicoverloadoverload_attributeregister_jitable)internal_prangec                 C   s
   t | S )zn
    Return the Structure representation of the given *typ* (an
    instance of types.RangeIteratorType).
    )r   create_struct_proxy)typ r   J/home/ubuntu/.local/lib/python3.10/site-packages/numba/cpython/rangeobj.pymake_range_iterator   s   
r   c                    s   t ttttttfdd}ttttttfdd}ttttttfdd}tt fdd}td	 fd
d}tG fdddt d S )Nc                    sD   |\} | |}|  d|_||_|  d|_t| || S )z2
        range(stop: int) -> range object
        r      )get_constantstartstopstepr
   	_getvalue)contextbuildersigargsr   state
RangeStateint_typerange_state_typer   r   range1_impl   s   
z$make_range_impl.<locals>.range1_implc                    s>   |\}} | |}||_ ||_| d|_t| || S )z>
        range(start: int, stop: int) -> range object
        r   )r   r   r   r   r
   r   )r   r   r   r   r   r   r    r!   r   r   range2_impl+   s   
z$make_range_impl.<locals>.range2_implc                    s8   |\}}} | |}||_ ||_||_t| || S )zI
        range(start: int, stop: int, step: int) -> range object
        )r   r   r   r
   r   )r   r   r   r   r   r   r   r    )r"   r$   r   r   range3_impl<   s   

z$make_range_impl.<locals>.range3_implc                    s6   |\}| ||}  | ||}t| |||jS )z
        len(range)
        )from_range_stater
   loadcountr   r   r   r   valuer    res)	RangeIterr"   r#   r   r   	range_lenM   s   z"make_range_impl.<locals>.range_lengetiterc                    s2   |\}| ||}  | || }t| ||S )z 
        range.__iter__
        )r(   r   r
   r+   )r.   r"   range_iter_typer   r   getiter_range32_implW   s   z-make_range_impl.<locals>.getiter_range32_implc                       s(   e Zd Ze fddZ fddZdS )z"make_range_impl.<locals>.RangeIterc              
      s  | ||}|j }|j}|j}t||j}||| t||j}	||_||_||_|	|_|	||}
|
 d}|
 d}|d|
|}|d||}|||}|d||}t|| |j|td W d   n1 stw   Y  ||k\}}| |||j W d   n1 sw   Y  |5 ||
|}|||||}|d||}|||
|||||}|||j W d   n1 sw   Y  W d   |S W d   |S 1 sw   Y  |S )z[
            Create a RangeIter initialized from the given RangeState *state*.
            r   r   >z==)zrange() arg 3 must not be zeroN)r   r   r   r   alloca_oncetypestoreiterr*   subr   icmp_signedxoricmp_unsignedif_unlikely	call_convreturn_user_exc
ValueErrorif_elsesremselectnegaddsdiv)clsr   r   r    selfr   r   r   startptrcountptrdiffzeroonepos_diffpos_stepsign_differs	zero_stepthenorelseremunevennewcountr#   r   r   r(   d   sV   



z3make_range_impl.<locals>.RangeIter.from_range_statec           
         s   |  d}| j}||}|d||}|| ||3 || j}|| |  d}	||j	||	dgd| ||
|| j| j W d    d S 1 sUw   Y  d S )Nr   r3   r   nsw)flags)r   r*   r)   r9   	set_validif_thenr7   yield_r6   r8   rD   r   )
rG   r   r   resultrK   rI   r*   is_validr,   rL   rV   r   r   iternext   s   


"z+make_range_impl.<locals>.RangeIter.iternextN)__name__
__module____qualname__classmethodr(   r^   r   rV   r   r   r.   a   s    .r.   )	r   r   r   ranger   r   lenr	   r   )r#   r$   r1   r%   r&   r'   r/   r2   r   )r.   r"   r#   r1   r$   r   make_range_impl   s&   



		re   c                    s2   t  |d} fdd|D }t  |S )N   c                    s    g | ]}  |jjqS r   )castdtype).0vr   r   fromtytotyr   r   
<listcomp>   s    z"range_to_range.<locals>.<listcomp>)r   unpack_tuplemake_anonymous_struct)r   r   rl   rm   valolditemsitemsr   rk   r   range_to_range   s
   rt   c                    s,   t  fddttj|fdd}d S )Nc                    s,   t |tjr fdd}t|j||fS d S )Nc                    s(   |\}t ||d}t| ||j|  S )Nrf   )r   ro   r
   return_type)r   r   r   r   rq   rs   indexr   r   codegen   s
   
z?make_range_attr.<locals>.rangetype_attr_getter.<locals>.codegen)
isinstancer   	RangeTyper   rh   )	typingctxarx   rv   r   r   rangetype_attr_getter   s   z.make_range_attr.<locals>.rangetype_attr_getterc                    s    fdd}|S )Nc                    s    | S )Nr   )rnger}   r   r   get   s   z0make_range_attr.<locals>.range_attr.<locals>.getr   )r~   r   r   r   r   
range_attr   s   z#make_range_attr.<locals>.range_attr)r   r   r   rz   )rw   	attributer   r   )rw   r}   r   make_range_attr   s   
	r   c                 C   sX   | j dkr|| jk s|| jkrdS | j dk r"|| jks || jkr"dS || j | j  dkS )Nr   F)r   r   r   robjrq   r   r   r   impl_contains_helper   s
   r   c                 C   sr   dd }t | tjsd S t |tjtjfrtS t |tjr#dd }|S t |tjr/dd }|S t |tjs7|S d S )Nc                 S   s   dS )NFr   r   r   r   r   
impl_false   s   z!impl_contains.<locals>.impl_falsec                 S   s   |d dkrdS t | t|S )Nr   r   F)r   intr   r   r   r   impl   s   zimpl_contains.<locals>.implc                 S   s0   |j dkrdS |jd dkrdS t| t|jS )Nr   Fr   )imagrealr   r   r   r   r   r   r      s
   
)	ry   r   rz   IntegerBooleanr   FloatComplexNumber)r   rq   r   r   r   r   r   impl_contains   s   r   )r   r   r   )rw   r   )3__doc__operatornumbar   
numba.corer   r   r   r   numba.core.imputilsr   r   r	   r
   numba.core.typingr   numba.core.extendingr   r   r   r   numba.parfors.parforr   r   re   USE_LEGACY_TYPE_SYSTEMint32range_state32_typerange_iter32_typeint64range_state64_typerange_iter64_typeuint64unsigned_range_state64_typeunsigned_range_iter64_typerange_impl_mappy_intr$   r1   rs   r#   state_typesrz   rt   r   r   containsr   	enumerateixattrr   r   r   r   <module>   s<     

	
 