
    q-Ph6                        d dl mZ d dlmZmZ d dlmZ erd dlm	Z	m
Z
mZ ed         Z G d d          Z G d d	          ZdS )
    )annotations)TYPE_CHECKINGUnionN)	DataFrame	LazyFrameSeries)r   r   c                      e Zd ZU dZded<   ded<   ded<   ded<   ded<   d	ed
<   ddZedd            Zedd            ZddZ	ddZ
ddZddZdS ) PolarsSlicez}
    Apply Python slice object to Polars DataFrame or Series.

    Has full support for negative indexing and/or stride.
    intstopstartstrideslice_lengthboolis_unboundedFrameOrSeriesobjreturnNonec                    || _         d S Nr   selfr   s     S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/polars/_utils/slice.py__init__zPolarsSlice.__init__           lazyr   originalc                    |                                  }t          |t          j                  r|n|                                S )z.Return lazy variant back to its original type.)collect
isinstanceplr   	to_series)r   r    frames      r   _as_originalzPolarsSlice._as_original   s6     "8R\::Quu@Q@QQr   c                    t          | t          j                  r&|                                                                 n|                                 S )z2Make lazy to ensure efficient/consistent handling.)r#   r$   r   to_framer   r   s    r   _lazifyzPolarsSlice._lazify$   s<     )33	(B(BRs||~~""$$$

Rr   c                r    |                     | j        | j                                      | j                  S )z&Logic for slices with positive stride.)slicer   r   gather_everyr   r   s     r   _slice_positivezPolarsSlice._slice_positive)   s-     yyT%677DDT[QQQr   c                    t          | j                  }|                    | j        dz   | j                                                  }|dk    r|                    |          n|S )z&Logic for slices with negative stride.   )absr   r,   r   r   reverser-   )r   r   r   	lazyslices       r   _slice_negativezPolarsSlice._slice_negative.   sZ    T[!!IIdi!mT->??GGII	281**y%%f---9Lr   sr,   c                   t          | j                  }t          |j        |j        |j                                      |          \  }}}|dk    r|dk    o||k    | _        n|dk    o||dz
  k    | _        | j                                        rd| _	        nF| j        r|| _	        n7||k    s|dk    r||k    s|dk     r||k     rdnt          ||z
            | _	        |||c| _        | _        | _        dS )zENormalise slice bounds, identify unbounded and/or zero-length slices.r0   r   N)lenr   r,   r   r   stepindicesr   is_emptyr   r1   r   )r   r5   obj_lenr   r   r   s         r   _slice_setupzPolarsSlice._slice_setup4   s    dh--#AGQVQV<<DDWMMtV Q;;!&! B$'/D!% G%7Q;2FD 8 	 !D 	 'D
 d]]

ut||

ut||	  &&  .3D&*
DIt{{{r   c                   |                      |           | j        dk    r| j                                        S | j        rF| j        dv r=| j        dk     r| j                                        n| j                                        S | j        dk    r;| j	        dk    r0| j        dk    r%| j        
                    | j        | j                  S | j        dk     r.| j        dk    r#| j        
                    | j	        dz   d          S |                     | j                  }| j        dk    r|                     |          n|                     |          }|                     || j                  S )zFApply a slice operation, taking advantage of any potential fast paths.r   )r7   r0   r0   )r=   r   r   clearr   r   r2   cloner   r   r,   r*   r.   r4   r'   )r   r5   lazyobjsliceds       r   applyzPolarsSlice.applyQ   sX    	! !!8>>### 	74;'#9#9*.+//48##%%%@P@PPZ1__aDK14D4D8>>$*d.?@@@[1__!2a!7!78>>$)a-333 ll48,,G ;?? $$W---))'22 
 $$VTX666r   N)r   r   r   r   )r   r   r    r   r   r   )r   r   r   r   )r   r   r   r   )r5   r,   r   r   )r5   r,   r   r   )__name__
__module____qualname____doc____annotations__r   staticmethodr'   r*   r.   r4   r=   rC    r   r   r
   r
      s          IIIJJJKKK    R R R \R
 S S S \SR R R R
M M M MA A A A:7 7 7 7 7 7r   r
   c                  .    e Zd ZU dZded<   ddZdd	Zd
S )LazyPolarsSlicez
    Apply python slice object to Polars LazyFrame.

    Only slices with efficient computation paths that map directly
    to existing lazy methods are supported.
    r   r   r   r   c                    || _         d S r   r   r   s     r   r   zLazyPolarsSlice.__init__w   r   r   r5   r,   c                P   |j         pd}|j        pd}|j        r|j        dk     rd}t          |          |dk     r@|dk    s|j        3||j        k    r(|dcxk    r|k    r
n n|j        d}t          |          |dk    r|j        ||j        k    s.|dk     rA|j         :|j        3|j        |j         cxk    rdk    rn n| j                                        S |j         |j        |dk    r| j                                        S |dk    r| j                            |          S |dk    r| j                                        S |dk     r9| j                                                            t          |                    S n|dcxk    r|k    run nr|j        k| j        
                    |j         dz                                             }t          |          dk    r|n!|                    t          |                    S |dk    rI|j        pddk    r<| j        
                    |j                  }|dk    r|n|                    |          S |dk     rQ|j        J|dk    rD| j                            t          |                    }|dk    r|n|                    |          S |dk    r]|j        |j        dk    rK|j        dn	|j        |z
  }| j                            ||          }|dk    r|n|                    |          S d|d}t          |          )	a  
        Apply a slice operation.

        Note that LazyFrame is designed primarily for efficient computation and does not
        know its own length so, unlike DataFrame, certain slice patterns (such as those
        requiring negative stop/step) may not be supported.
        r   r0   z.negative stop is not supported for lazy slicesNz?negative stride is not supported in conjunction with start+stopr7   zthe given slice zv is not supported by lazy computation

Consider a more efficient approach, or construct explicitly with other methods.)r   r9   r   
ValueErrorr   r?   r@   r-   r2   r1   headtailr,   )r   r5   r   r9   msgr   r   s          r   rC   zLazyPolarsSlice.applyz   sS    1v{ 6 	"afqjjBCS//!!88af&8uA$$$$$$$$$W oo% 1HH!&,!&1HH$);!'@V@V@V@VUV@V@V@V@V@V8>>### W_qyyx~~'''x,,T222x'')))x''))66s4yyAAA  a$16>(--!,,4466Ct99>>330@0@T0K0KK aZZQV[qQ..(--''C199333+;+;D+A+AA QYY16>dQhh(--E

++C199333+;+;D+A+AA QYYAFNafkk$%FN44!&5.L(..55C199333+;+;D+A+AAbq b b b 	 oor   N)r   r   r   r   )r5   r,   r   r   )rD   rE   rF   rG   rH   r   rC   rJ   r   r   rL   rL   m   sY           NNN   ] ] ] ] ] ]r   rL   )
__future__r   typingr   r   polars._reexport	_reexportr$   polarsr   r   r   r   r
   rL   rJ   r   r   <module>rX      s    " " " " " " ' ' ' ' ' ' ' '       13333333333/0M]7 ]7 ]7 ]7 ]7 ]7 ]7 ]7@j j j j j j j j j jr   