
    ܙd,                     8   d Z ddlZddlmZ ddlmZmZmZ ddl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	lmZmZmZmZ dd
lmZ d Zd Zej        ej        ej        fej        ej         ej!        fej"        ej#        ej$        fiZ%e%&                                D ]\  Z'Z( ee'ge(R    eej)        ej)                  d             Z*ed             Z+d Z,ed             Z- eej.                  d             Z/ e0d          D ]\  Z1Z2 e,e1e2           dS )z=
Implementation of the range object for fixed-size integers.
    N)prange)typescgutilserrorsListIterInstance)
make_array)lower_builtin
lower_castiterator_implimpl_ret_untracked)	signature)	intrinsicoverloadoverload_attributeregister_jitable)internal_prangec                 *    t          j        |           S )zn
    Return the Structure representation of the given *typ* (an
    instance of types.RangeIteratorType).
    )r   create_struct_proxy)typs    6lib/python3.11/site-packages/numba/cpython/rangeobj.pymake_range_iteratorr      s    
 &s+++    c                 <   	 t          j                  	t          t                     t          t                     t          t
                     	 fd                                    }t          t                      t          t                      t          t
                      	 fd                                    }t          t                       t          t                       t          t
                       	fd                                    }t          t                    	 fd            }t          d          	fd            }t                     G  fddt                                          d S )	Nc                     |\  } | |          }|                      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_types	         r   range1_implz$make_range_impl.<locals>.range1_impl   sy     
7G,,**8Q77
))(A66
!'")"2"'//"3"35 5 	5r   c                     |\  }} | |          }||_         ||_        |                     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)   s
          r   range2_implz$make_range_impl.<locals>.range2_impl-   sk     t
7G,,
))(A66
!'")"2"'//"3"35 5 	5r   c                     |\  }}} | |          }||_         ||_        ||_        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)   s
           r   range3_implz$make_range_impl.<locals>.range3_impl>   s^     #d
7G,,

!'")"2"'//"3"35 5 	5r   c                     |\  } | ||          }                     | ||          }t          | |	|                    |j                            S )z
        len(range)
        )from_range_stater   loadcount)
r"   r#   r$   r%   valuer&   res	RangeIterr'   r(   s
          r   	range_lenz"make_range_impl.<locals>.range_lenO   sX    
 
7GU33(('5AA!'7Hgll39>U>UVVVr   getiterc                     |\  } | ||          }                     | ||                                          }t          | |	|          S )z 
        range.__iter__
        )r0   r!   r   )
r"   r#   r$   r%   r3   r&   r4   r5   r'   range_iter_types
          r   getiter_range32_implz-make_range_impl.<locals>.getiter_range32_implY   sV    
 
7GU33(('5AAKKMM!'7OSIIIr   c                   4    e Zd Ze fd            Z fdZdS )"make_range_impl.<locals>.RangeIterc           
      L    | ||          }|j         }|j        }|j        }t          j        ||j                  }|                    ||           t          j        ||j                  }	||_        ||_        ||_        |	|_        |	                    ||          }
|
                    d          }|
                    d          }|                    d|
|          }|                    d||          }|                    ||          }|                    d||          }t          j        ||          5  |j                            |t"          d           ddd           n# 1 swxY w Y   |                    |          5 \  }}|5  |                    ||j                   ddd           n# 1 swxY w Y   |5  |                    |
|          }|                    |||                    |                    }|                    d||          }|                    |                    |
|          |                    |||                    }|                    ||j                   ddd           n# 1 swxY w Y   ddd           n# 1 swxY w 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iterr2   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newcountr(   s                         r   r0   z3make_range_impl.<locals>.RangeIter.from_range_statef   s   
 3w((DKE:D:D*7EJ??HMM%****7EJ??H DIDIDI!DJ;;tU++D''!44D&&x33C**3d;;H**3d;;H";;x::L--dD$??I$Wi88 W W!11':2UW W WW W W W W W W W W W W W W W W
 .. 
8.4 4 4MM$
3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4  8 8!,,tT22C!..3C8H8HIIC$00c4@@F&{{7<<d+C+C+2>>&#t+L+L N  NHMM(DJ7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8	
8 
8 
8 
8 
8 
8 
8 
8 
8 
8 
8 
8 
8 
8 
8 Ksm   ;"E))E-0E-	JF7+J7F;	;J>F;	?JB2J6JJ	J	J	
JJ Jc                 l   |                     
d          }| j        }|                    |          }|                    d||          }|                    |           |                    |          5  |                    | j                  }|                    |           |                     
d          }	|                    |	                    ||	dg          |           |                    |
                    || j                  | j                   d d d            d S # 1 swxY w Y   d S )Nr   r>   r   nsw)flags)r   r2   r1   rD   	set_validif_thenrB   yield_rA   rC   rO   r    )rR   r"   r#   resultrV   rT   r2   is_validr3   rW   r(   s             r   iternextz+make_range_impl.<locals>.RangeIter.iternext   sm   ''!44DzHLL**E**3t<<HX&&&** H HTY//e$$$**8Q77gkk%UGkDDhOOOgkk%;;TYGGGH H H H H H H H H H H H H H H H H Hs   5B'D))D-0D-N)__name__
__module____qualname__classmethodr0   ri   )r(   s   r   r5   r<   c   s[         
,	 ,	 ,	 ,	 
,	\	H 	H 	H 	H 	H 	H 	Hr   r5   )	r   r   r
   ranger   r   lenr   r   )
r(   r)   r9   r*   r,   r.   r6   r:   r5   r'   s
   ```     @@r   make_range_implrp      s?   ,-=>>J5(##68$$?H--5 5 5 5 5 5 .- %$ $#5 5(H--68X..?Hh775 5 5 5 5 5 87 /. .-5 5(Hh7768Xx88?HhAA5 5 5 5 5 BA 98 875 3())W W W W W W *)W 9.//J J J J J J 0/J #_55>H >H >H >H >H >H >H'88 >H >H 65>H >H >Hr   c                      t          j        |d          } fd|D             }t          j        |          S )N   c                 T    g | ]$}                     |j        j                  %S  )castdtype).0vr#   r"   fromtytotys     r   
<listcomp>z"range_to_range.<locals>.<listcomp>   s?           \\'1flDJ??      r   )r   unpack_tuplemake_anonymous_struct)r"   r#   ry   rz   valolditemsitemss   ````   r   range_to_ranger      sd    #GS!44H                  E(%888r   c                 h   t          |t          j                  r|j        fd}t	          |          |fS t          |t          j                  rd }t	          t          j        |          |fS t          |t          j                  rd }t	          t          j        |          |fS t          |t          j                  rd }t	          t          j        |          |fS t          |t          j	                  rd }t	          t          j        |          |fS d}t          j        |          )z
    An implementation of len(iter) for internal use.
    Primary use is for array comprehensions (see inline_closurecall).
    c                     |\  }t                    d         } t          j        |          | ||          }|j        j        }t          | |||                    |j                            S )Nr   )range_impl_mapr   r   r2   r@   r   r1   )	r"   r#   r$   r%   r3   	iter_typeiterobjr(   val_types	           r   codegenz#length_of_iterator.<locals>.codegen   sc    HU&x03I<g1)<<WguUUG})H%gw',,w}B]B]^^^r   c                     |\  }|                      t          j                  }t          | ||j        d         |          }t          | |||j                  S )Nr   )get_value_typer   intpr   r%   r   size)r"   r#   r$   r%   r3   intp_tr   s          r   r   z#length_of_iterator.<locals>.codegen   sM    HU++EJ77F&w!eLLG%gwMMMr   c                 <   |j         \  }|\  }|                     t          j                  }|                     |||          }|j        } t          |          | ||j                  }	t          j	        ||	j
                  }
t          | |||
d                   S )N)r3   r   )r%   r   r   r   make_helper
array_typer	   arrayr   r|   shaper   )r"   r#   r$   r%   itertyr3   r   r   arraytyaryr   s              r   r   z#length_of_iterator.<locals>.codegen   s    IVHU++EJ77F))'6)GGG'G%*W%%gwgmLLLC(#)<<E%gwaIIIr   c                     |j         \  }|j        }|                     t          j                  } ||j                  }t          | |||          S N)r%   	containerr   r   r   r2   r   )r"   r#   r$   r%   r   tupletyr   count_consts           r   r   z#length_of_iterator.<locals>.codegen   sM    IV&G++EJ77F &//K%gwLLLr   c                     |\  }|                      t          j                  }ddlm}  || ||j        d         |          }t          | |||j                  S )Nr   r   )r   r   r   numba.typed.listobjectr   r%   r   r   )r"   r#   r$   r%   r3   r   r   r   s           r   r   z#length_of_iterator.<locals>.codegen   sb    HU++EJ77F??????&&w!eLLG%gwMMMr   zdUnsupported iterator found in array comprehension, try preallocating the array and filling manually.)
isinstancer   RangeIteratorType
yield_typer   ListIterr   ArrayIteratorUniTupleIterListTypeIteratorTyper   TypingError)	typingctxr~   r   msgr   s       @r   length_of_iteratorr      sm    #u.// 0&>	_ 	_ 	_ 	_ 	_ 3''00	C	(	( '&	N 	N 	N
 S))722	C,	-	-  &		J 		J 		J S))722	C+	,	, &	M 	M 	M S))722	C3	4	4 &	N 	N 	N S))722? %%%r   c                 x     t            fd            t          t          j        |          fd            }d S )Nc                 t    t          |t          j                  rfd}t          |j        |          |fS d S )Nc                 r    |\  }t          j        ||d          }t          | ||j        |                   S )Nrr   )r   r|   r   return_type)r"   r#   r$   r%   r~   r   indexs         r   r   z?make_range_attr.<locals>.rangetype_attr_getter.<locals>.codegen   s?    ,Wc1==)'7CO*/,8 8 8r   )r   r   	RangeTyper   rv   )r   ar   r   s      r   rangetype_attr_getterz.make_range_attr.<locals>.rangetype_attr_getter   sS    a)) 	28 8 8 8 8
 QWa(('11	2 	2r   c                     fd}|S )Nc                      |           S r   rt   )rnger   s    r   getz0make_range_attr.<locals>.range_attr.<locals>.get   s    ((...r   rt   )r   r   r   s     r   
range_attrz#make_range_attr.<locals>.range_attr   s!    	/ 	/ 	/ 	/ 	/
r   )r   r   r   r   )r   	attributer   r   s   `  @r   make_range_attrr      sc    2 2 2 2 Y2 33    43  r   c                     | 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        z
  | j         z  dk    S )Nr   F)r    r   r   robjr~   s     r   impl_contains_helperr      sk    y1}}#
**cTY.>.>u	QC49,,dj0@0@u4:*q00r   c                 R   d }t          | t          j                  sd S t          |t          j        t          j        f          rt
          S t          |t          j                  rd }|S t          |t          j                  rd }|S t          |t          j                  s|S d S )Nc                     dS )NFrt   r   s     r   
impl_falsez!impl_contains.<locals>.impl_false  s    ur   c                 R    |dz  dk    rdS t          | t          |                    S )Nr   r   F)r   intr   s     r   implzimpl_contains.<locals>.impl  s*    Qw!||u+D#c((;;;r   c                     |j         dk    rdS |j        dz  dk    rdS t          | t          |j                            S )Nr   Fr   )imagrealr   r   r   s     r   r   zimpl_contains.<locals>.impl  s@    x1}}uA""u+D#ch--@@@r   )	r   r   r   IntegerBooleanr   FloatComplexNumber)r   r~   r   r   s       r   impl_containsr   	  s       dEO,, 	C%-7	8	8 ##	C	%	% 	< 	< 	<
 	C	'	' 	A 	A 	A U\**  r   )r   r   r    )r   r   )3__doc__operatornumbar   
numba.corer   r   r   numba.cpython.listobjr   numba.np.arrayobjr	   numba.core.imputilsr
   r   r   r   numba.core.typingr   numba.core.extendingr   r   r   r   numba.parfors.parforr   r   rp   int32range_state32_typerange_iter32_typeint64range_state64_typerange_iter64_typeuint64unsigned_range_state64_typeunsigned_range_iter64_typer   r   r(   state_typesr   r   r   r   r   containsr   	enumerateixattrrt   r   r   <module>r      s|           - - - - - - - - - - 2 2 2 2 2 2 ( ( ( ( ( (G G G G G G G G G G G G ' ' ' ' ' ' Z Z Z Z Z Z Z Z Z Z Z Z 0 0 0 0 0 0, , ,IH IH IHZ 
K5+U-DE	K5+U-DE	LE5u7WX ,1133 , ,HkOH+{+++++EOU_--9 9 .-9 5& 5& 5&n  $ 1 1 1 
(
  @ 	344 . .HBO"-----. .r   