
    J/Ph$                     8   d 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mZmZmZmZmZmZmZ d Zd Zd Zd	 Zd
 Zd Zd Z ee ej        ej                            d             Z eej        d          d             Z eej        d          d             Z  eej        d          d             Z! edej        ej"                  d             Z#d Z$ eej                  d             Z% eej&        j'        ej                  d             Z(dS )z2
Implement slices and various slice computations.
    )zip_longest)ir)cgutilstypestypingutils)impl_ret_borrowedimpl_ret_new_refimpl_ret_untrackediternext_impllower_builtin
lower_castlower_constantlower_getattrc                     |                      d|t          j        |j        d                    }|                     ||          }|                     |||          S )z^
    Fix negative index by adding *size* to it.  Positive
    indices are left untouched.
    <r   )icmp_signedr   Constanttypeaddselect)builderidxsizeis_negativewrapped_indexs        U/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/cpython/slicing.py	fix_indexr      sR    
 %%c3DIq0I0IJJKKKT**M>>+}c:::    c                    	 t          j        j        d          	t          j        j        d          } 	fd}                     t	          j         j                            5 \  }}|5   |d	            |d	           ddd           n# 1 swxY w Y   |5  |}                     |          } |d||            |d||           ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )z
    Fix *slice* start and stop to be valid (inclusive and exclusive, resp)
    indexing bounds for a sequence of the given *size*.
    r   c                    t          |           }t          |          }t          | |                               d|	          }                    |d          5  t          | |           d d d            n# 1 swxY w Y                       d|          }                    |d          5  t          | |           d d d            d S # 1 swxY w Y   d S )Nr   Flikely>=)getattrr   setattrr   if_then)

bound_name
lower_repl
upper_replbound	underflowoverflowr   r   slicezeros
         r   	fix_boundzfix_slice.<locals>.fix_bound"   sn   z**'5$//z5)))''UD99	__Yu_55 	3 	3E:z222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 &&tUD99__Xe_44 	3 	3E:z222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s$   "B  BB9CCCstartstopN)r   r   r   if_elser   
is_neg_intstepr   )
r   r/   r   	minus_oner1   if_neg_stepif_pos_steplowerupperr0   s
   ```      @r   	fix_slicer<      s     ;ty!$$DDIr**I3 3 3 3 3 3 3 3 
+GUZ@@	A	A 
,E_kS^ 	* 	*IgtT***IfdD)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*  	, 	,EKKi00EIgue,,,IfeU+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,
, 
, 
, 
, 
, 
, 
, 
, 
, 
, 
, 
, 
, 
, 
, 
, 
, 
,sZ   .C?4BC?B	C?"B	#C?(3C'C?'C+	+C?.C+	/C??DDc           	      t   |j         }|j        }|j        }t          j        |j        d          }t          j        |j        d          }t          j        | |          }|                     ||          }|                     ||          }	| 	                    ||          }
| 
                    ||
|	          }| 	                    ||                     ||                    }| 
                    ||                     d||          |                     d||                    }| 
                    |||          S )a   
    Given a slice, compute the number of indices it spans, i.e. the
    number of iterations that for_range_slice() will execute.

    Pseudo-code:
        assert step != 0
        if step > 0:
            if stop <= start:
                return 0
            else:
                return (stop - start - 1) // step + 1
        else:
            if stop >= start:
                return 0
            else:
                return (stop - start + 1) // step + 1

    (see PySlice_GetIndicesEx() in CPython)
       r   r%   z<=)r2   r3   r6   r   r   r   r   r5   subr   r   sdivr   )r   slicestructr2   r3   r6   oner0   is_step_negativedeltapos_dividendneg_dividenddividendnominal_lengthis_zero_lengths                 r   get_slice_lengthrJ   =   s#   ( EDD
+ej!
$
$C;uz1%%D)'488KKe$$E ;;uc**L;;uc**L/|LLH[[gll8T&B&BCCN ^^$4$+$7$7eT$J$J$+$7$7eT$J$JL LN
 >>.$???r   c                 ^   |j         }|j        }|                    d          }|                    d          }|                     d|j        |          }|                     ||                     ||          |          }|                     ||                     ||          |          }||fS )z?
    Return the [lower, upper) indexing bounds of a slice.
    r   r>   r   )r2   r3   r   r   r6   r   r   )	r   rA   r2   r3   r0   rB   rC   r:   r;   s	            r   get_slice_boundsrL   i   s     ED::a==D
**Q--C **30@$GGNN+";;tS115: :ENN+";;uc22D: :E%<r   c                 8    |                      |j        |          S )z4
    Fix the given stride for the slice's step.
    )mulr6   )r   r/   strides      r   
fix_striderP   {   s     ;;uz6***r   c                 ^    |j         r%t          j        | ||j        t          df           dS dS )zP
    Guard against *slicestruct* having a zero step (and raise ValueError).
    slice step cannot be zeroN)has_stepr   
guard_nullr6   
ValueError)contextr   typrA   s       r   guard_invalid_slicerX      sQ     | F7G[-=&(CD	F 	F 	F 	F 	FF Fr   c                 8    d| j         dz
  z  dz
  }d||| dz
  dfS )z
    Get the default values for a slice's members:
    (start for positive step, start for negative step,
     stop for positive step, stop for negative step, step)
    r>   r   )address_size)rV   maxints     r   get_defaultsr\      s2     G(1,-2Fvvx!|Q//r   c                      fdt                     D             \  }}}}}d gdz  t          |          dk    r%|j        d         t          j        ur|d         d<   n>t          t          |j        |                    D ]\  }	\  }
}|
t          j        ur||	<   fd} |d|          }|                    d|                     t          j	        d                    }|
                    |||          }|
                    |||          } |d|          } |d|          }|j        }
                     ||j                  }||_        ||_        ||_        |                                }t#           ||j        |          S )Nc                 P    g | ]"}                     t          j        |          #S  get_constantr   intp.0xrV   s     r   
<listcomp>z*slice_constructor_impl.<locals>.<listcomp>   +    LLL		ej!	,	,LLLr      r>   r   c                      |          }||S |S Nr_   )idefaultval
slice_argss      r   get_arg_valuez-slice_constructor_impl.<locals>.get_arg_value   s    m;NJr      r   )r\   lenargsr   none	enumeratezipr   ra   rb   r   return_typemake_helperr2   r3   r6   	_getvaluer   )rV   r   sigrr   default_start_posdefault_start_negdefault_stop_posdefault_stop_negdefault_steprk   tyrm   ro   r6   rC   default_stopdefault_startr3   r2   sliresrn   s   `                    @r   slice_constructor_implr      s    	MLLLl76K6KLLL !J 4yyA~~#(1+UZ77Q
1%c#(D&9&9:: 	$ 	$LAyC## #
1     =L))D**3+2+?+?
A+N+NP P>>"2"24DF FLNN#3#46GI IM=L))DM!]++E	B


gs
7
7CCICHCH
--//CgwEEEr   r2   c                 >    |                      |||          }|j        S rj   )rw   r2   rV   r   rW   valuer   s        r   slice_start_implr      s!    


gsE
2
2C9r   r3   c                 >    |                      |||          }|j        S rj   )rw   r3   r   s        r   slice_stop_implr      s     


gsE
2
2C8Or   r6   c                     |j         r|                     |||          }|j        S |                     t          j        d          S )Nr>   )rS   rw   r6   ra   r   rb   r   s        r   slice_step_implr      sB    
| 3!!'366x##EJ222r   zslice.indicesc                 v   |d         }|                      ||j        d         |d                   }|                    t          j        ||          d          5  | j                            |t          d           d d d            n# 1 swxY w Y   |                    t          j        ||j	                  d          5  | j                            |t          d           d d d            n# 1 swxY w Y   t          |||           |                     ||j        |j        |j        |j	        f          S )Nr>   r   Fr#   )zlength should not be negative)rR   )rw   rr   r(   r   r5   	call_convreturn_user_excrU   is_scalar_zeror6   r<   
make_tuplerv   r2   r3   )rV   r   ry   rr   lengthr   s         r   slice_indicesr      s   !WF


gsx{DG
<
<C	+GV<<U	K	K 
 
))Z.	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
/BB5	Q	Q 
 
))Z*	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 gsF###	CHch'  s$   "B		BB"C11C58C5c                                           ||          }                     t          j                  } fdt	                     D             \  }}}}	}
|j        }|d}|
}n|dk     } ||          }|j        }||r|}n|}n ||          }|j        }||r|	}n|}n ||          }||_        ||_        ||_        |                                S )Nc                 P    g | ]"}                     t          j        |          #S r_   r`   rc   s     r   rf   z,make_slice_from_constant.<locals>.<listcomp>   rg   r   Fr   )	rw   get_value_typer   rb   r\   r6   r2   r3   rx   )rV   r   r   pyvalr   ltyrz   r{   r|   r}   r~   r6   step_is_negr2   r3   s   `              r   make_slice_from_constantr      s   


gr
*
*C

 
 
,
,C 	MLLLl76K6KLLL :D|Qhs4yyKE} 	&%EE%EEE

:D| 	$#DD#DDs4yyCICHCH==??r   c                 n    t          |t          j                  r|j        }n|}t	          | |||          S rj   )
isinstancer   Literalliteral_typer   )rV   r   r   r   rW   s        r   constant_slicer      s8    "em$$ o#GWc5AAAr   c                 0    t          | |||j                  S rj   )r   literal_value)rV   r   fromtytotyrm   s        r   cast_from_literalr   *  s     #$ 4  r   N))__doc__	itertoolsr   llvmliter   
numba.corer   r   r   r   numba.core.imputilsr	   r
   r   r   r   r   r   r   r   r<   rJ   rL   rP   rX   r\   r/   VarArgAnyr   	SliceTyper   r   r   Integerr   r   r   miscSliceLiteralr   r_   r   r   <module>r      s    " ! ! ! ! !       4 4 4 4 4 4 4 4 4 4 4 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; ; ;!, !, !,H)@ )@ )@X  $+ + +F F F0 0 0 ulel59--..,F ,F /.,F^ u((  )( u''  (' u''3 3 ('3 ??  @?0* * *Z   B B ! B EJ#U_55  65  r   