
    bir:                    $   d dl mZ d dlZd dlmZ d dlZd dlZd dl	m
Z
 d dlmZ d dlmZmZmZmZmZ d dlmZ d dlmZ d d	lm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# 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. d dl/m0Z0m1Z1  G d d      Z2 G d de2      Z3 G d de2      Z4d Z5 G d de      Z6 G d de      Z7 G d de      Z8 G d de7      Z9 G d  d!e7      Z: G d" d#e:      Z; G d$ d%e7      Z< G d& d'e      Z= G d( d)e      Z>d* Z?d+ Z@y),    )annotationsN)Callable)is_bool_dtype)IndexingError)AliasDataNodeTaskTaskRefconvert_legacy_graph)Array)methods)from_dask_array)Seriesnew_collection)	BlockwiseExprMaybeAlignPartitions
Partitions
Projectionare_co_alignedplain_column_projection)meta_nonempty)_coerce_loc_index_maybe_partial_time_string_partition_of_index_value_partitions_of_index_values)	is_scalar)Key)is_arraylikeis_series_likec                      e Zd Zd Zy)Indexerc                    || _         y N)obj)selfr%   s     ]/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/dataframe/dask_expr/_indexing.py__init__zIndexer.__init__&   s	        N)__name__
__module____qualname__r(    r)   r'   r"   r"   %   s    r)   r"   c                      e Zd Zd Zy)ILocIndexerc                   d}t        |t              st        |      t        |      dkD  rt	        d      |\  }}|t        d       k7  rt        |      t        | j                  j                        t        t        | j                  j                              k(  rN| j                  j                  |   }t        |      st        |      }t        t        | j                  |            S t        )Nzd'DataFrame.iloc' only supports selecting columns. It must be used like 'df.iloc[:, column_indexer]'.   Too many indexers)
isinstancetupleNotImplementedErrorlen
ValueErrorslicer%   columnssetr   listr   r   )r&   keymsgiindexercindexer	col_namess         r'   __getitem__zILocIndexer.__getitem__+   s    A 	 #u%%c**s8a<011 (uT{"%c**txx CDHH,<,<(=$>>((2IY' O	!*TXXy"ABB%%r)   N)r*   r+   r,   rA   r-   r)   r'   r/   r/   *   s    &r)   r/   c                  8    e Zd Zd Zd Zd	dZd Zd Zd Zd Z	y)

LocIndexerc                   t        |t              rt        |      | j                  j                  kD  rt        d      |d   }|d   }| j                  j                  j                  d d |f   }t        |t        j                        rt        |j                        }n|}d }t        |t        j                        r|j                         }| j                  ||      S )Nr2   r      )r3   r4   r6   r%   ndimr   _metalocpd	DataFramer;   r9   npgenericitem_loc)r&   r<   r>   r?   pd_locs        r'   rA   zLocIndexer.__getitem__E   s    c5!3x$((--'#$7881vH1vHXX^^''84F&",,//HHh

+}}Hyy8,,r)   c                <   |t        |t              r=|t        d       k(  r/t        |t              st        t	        | j
                  |            S t        |t              r| j                  ||      S t        |t              r| j                  ||      S t        |      r"| j                   || j
                        |      S | j
                  j                  r=| j
                  j                  j                  }t        |d      r|j                   nd }| j#                  ||      }t        |t              r| j%                  ||      S t'        |      r?t)        |j*                        s*t        t-        | j
                  |j.                  |            S t        |t0              st3        |      rWt5        |      dk(  r)t        t7        | j
                  j                  |            S t        t-        | j
                  ||            S | j9                  ||      S t        |t0        t:        j<                  f      s t'        |      r"t)        |j*                        sd}t?        |      t        |t              st        ||      }t        tA        | j
                  ||            S )Nunit)rQ   r   z^Cannot index with list against unknown division. Try setting divisions using ``ddf.set_index``)!r3   r8   r   r   r   r%   r   _loc_seriesr   
_loc_arraycallablerN   known_divisionsindexrG   hasattrrQ   r   
_loc_slicer    r   dtypeLocListvaluesr;   r   r6   LocEmpty_loc_elementrK   ndarrayKeyError
LocUnknown)r&   r>   r?   idxrQ   r=   s         r'   rN   zLocIndexer._locX   s   z(E:x5QU;?Vh1%j8&DEEh'##Hh77%(??8X66h99Xdhh/::88##((..&&C&sF3388D66xd6KH(E*x::)-2O%gdhh&RSSHd+|H/Ex=A%)(488>>8*LMM%gdhh(&KLL ((8<<(T2::$67x(x~~1N
D  sm#%0 84!*TXXx"JKKr)   c                   t        |j                        st        d      | j                  j                  }|t        ||      }|r+t        ||j                        st        t        ||            S t        t        ||            S )NzuCannot index with non-boolean dask Series. Try passing computed values instead (e.g. ``ddf.loc[iindexer.compute()]``))
r   rY   r_   r%   exprr   r   r   LocAlignLoc)r&   r>   r?   check_alignmentframes        r'   rR   zLocIndexer._loc_series   sv    X^^,H  uh/E>%#G!(5(";<<c%233r)   c                n    t        |d| j                  j                        }| j                  ||d      S )N_)r9   rV   F)rf   )r   r%   rV   rR   )r&   r>   r?   iindexer_seriess       r'   rS   zLocIndexer._loc_array   s0    )(Ctxx~~V5QQr)   c                r    t        | j                  j                  j                        }t	        |||      }|S )z{
        Convert index-indexer for partial time string slicing
        if obj.index is DatetimeIndex / PeriodIndex
        )r   r%   rG   rV   r   )r&   r>   rQ   ra   s       r'   r   z%LocIndexer._maybe_partial_time_string   s/    
 DHHNN001-c8TBr)   c                D   t        |t              sJ |j                  Q|j                  dk  rBt        | j                        }t        |j
                  |j                  |j                         }n| j                  }|j                  dv sJ t        t        |||            S )Nr   NrE   )	r3   r8   stepReverseDataFramer%   startstopr   LocSlice)r&   r>   r?   r%   s       r'   rX   zLocIndexer._loc_slice   s    (E***==$):"488,CX^^X]]X]]NKH((C}}	)))hsHh?@@r)   c                    || j                   j                  d   k  s|| j                   j                  d   kD  rt        dt        |      z        t	        t        | j                   ||            S )Nr   z"the label [%s] is not in the index)r%   	divisionsr_   strr   
LocElement)r&   r>   r?   s      r'   r]   zLocIndexer._loc_element   s\    dhh((++x$((:L:LR:P/P?#h-OPPj8XFGGr)   N)T)
r*   r+   r,   rA   rN   rR   rS   r   rX   r]   r-   r)   r'   rC   rC   D   s*    -&)LV4RAHr)   rC   c                &    | j                   d d d   S Nrt   )rH   )dfs    r'   _reverse_partitionr{      s    66$B$<r)   c                  n    e Zd ZdgZej
                  d        Zd Zej
                  d        Zd Z	ddZ
y)	ro   rg   c                .    | j                   j                  S r$   )rg   rG   r&   s    r'   rG   zReverseDataFrame._meta   s    zzr)   c                :    d| j                   j                  dz   z  S )Nr$   rE   rg   npartitionsr~   s    r'   
_divisionszReverseDataFrame._divisions   s    $**001455r)   c                .    | j                   j                  S r$   r   r~   s    r'   r   zReverseDataFrame.npartitions   s    zz%%%r)   c                >    t        |t              rt        | ||      S y r$   )r3   r   r   )r&   parent
dependentss      r'   _simplify_upzReverseDataFrame._simplify_up   s     fj)*4DD *r)   c                   | j                   }t        | j                         D ci c]Z  }| j                  |ft        t	        | j                  |f      t
        t	        | j                  j                  ||z
  dz
  f            \ c}S c c}w rm   )r   range_namer	   r
   r{   rg   )r&   r   is      r'   _layerzReverseDataFrame._layer   s    && 4++,
  ZZOTQ("));?Q+>?@ 
 	
 
s   ABNreturndict)r*   r+   r,   _parameters	functoolscached_propertyrG   r   r   r   r   r-   r)   r'   ro   ro      sK    )K   6 & &E	
r)   ro   c                      e Zd Zg dZ eej                        Zej                  d        Z
ej                  d        ZddZy)LocBaserg   r>   r?   c                    | j                   | j                  j                  S | j                  j                  j                  d d | j                   f   S r$   )r?   rg   rG   rH   r~   s    r'   rG   zLocBase._meta   s@    == ::###::##''4==(899r)   c                4    t        | j                               S r$   )r   r   r~   s    r'   _layer_cachezLocBase._layer_cache   s    #DKKM22r)   c                    | j                   | j                  |f   }t        |t              rt        ||j                        S |j
                  |k7  rt        |d |      S |S )Nc                    | S r$   r-   )xs    r'   <lambda>zLocBase._task.<locals>.<lambda>   s     r)   )r   r   r3   r   targetr<   r	   )r&   namerV   ts       r'   _taskzLocBase._task   sU    tzz512aqxx((UUd]k1--r)   N)r   r   rV   intr   r	   )r*   r+   r,   r   staticmethodr   rH   	operationr   r   rG   r   r   r-   r)   r'   r   r      sL    3KW[[)I: : 3 3r)   r   c                  8    e Zd Zg dZ eej                        Zy)r`   r   N)r*   r+   r,   r   r   r   try_locr   r-   r)   r'   r`   r`      s    3KW__-Ir)   r`   c                       e Zd Zd Zd ZddZy)rw   c                2    | j                   | j                   fS r$   )r>   r~   s    r'   r   zLocElement._divisions   s    t}}--r)   c                    | j                   j                  dk(  ry t        | j                   | j                        } t	        |       t        | j                   |g      | j                  | j                        S rm   )rg   r   _get_partitionsr>   typer   r?   r&   parts     r'   _lowerzLocElement._lower   sU    ::!!Q&tzz4==9tDz*TZZ$8$--WWr)   c           
     >   t        | j                  | j                        }| j                  dft	        | j                  dft
        j                  t        | j                  j                  |f      t        | j                  | j                        | j                        iS Nr   )
r   rg   r>   r   r	   r   rH   r
   r8   r?   r   s     r'   r   zLocElement._layer   st    tzz4==9ZZOTQ))401dmmT]]3
 	
r)   Nr   )r*   r+   r,   r   r   r   r-   r)   r'   rw   rw      s    .X

r)   rw   c                  D    e Zd Zd Zej
                  d        Zd ZddZy)rZ   c                R   t        | j                  | j                        }t        |j	                               }t        |      dk(  rdg}| j                  j                  t        |      k(  ry  t        |       t        | j                  |      | j                  | j                        S r   )
r   rg   r>   sortedkeysr6   r   r   r   r?   r&   partss     r'   r   zLocList._lower  sy    

DMM:uzz|$u:?CE::!!SZ/tDz*TZZ7VVr)   c           	        i }t        | j                  | j                        }t        | j                        rg }t	        |j                               }t        |      D ]  \  }\  }}t        | j                  |ft        j                  t        | j                  j                  |f      || j                        || j                  |f<   |j                  t	        |      d           |j                  t	        |d   d         d          ||fS d d g}| j                  dft        | j                  df| j                        i}||fS Nr   rt   rE   )r   rg   r>   r6   r   items	enumerater	   r   r   rH   r
   r?   appendr   rG   )r&   dskr   ru   r   r   divindexers           r'   _layer_informationzLocList._layer_information  s    

DMM:t}}I5;;=)E%.u%5 5!>C%)ZZOKKTZZ--s34MM&DJJM"   !345 VE"IaL1"56	>!tIJJ?Hdjj!_djj$IJC	>!r)   c                     | j                   d   S rm   r   r~   s    r'   r   zLocList._divisions%      &&q))r)   c                     | j                   d   S r   r   r~   s    r'   r   zLocList._layer(  r   r)   Nr   )	r*   r+   r,   r   r   r   r   r   r   r-   r)   r'   rZ   rZ     s,    W " ",**r)   rZ   c                  b    e Zd ZddgZd Zej                  d        Zej                  d        Zy)r\   metar?   c                     y r$   r-   r~   s    r'   r   zLocEmpty._lower/  s    r)   c                    | j                   | j                  d      S | j                  d      j                  d d | j                   f   S )Nr   )r?   operandrH   r~   s    r'   rG   zLocEmpty._meta2  s>    == <<''<<'++At}},<==r)   c                r    d d g}| j                   dft        | j                   df| j                        i}||fS r   )r   r   rG   )r&   ru   r   s      r'   r   zLocEmpty._layer_information9  s:    4L	

A$**a$** EFI~r)   N)	r*   r+   r,   r   r   r   r   rG   r   r-   r)   r'   r\   r\   ,  sE    :&K > >  r)   r\   c                      e Zd ZdZej
                  d        Zej
                  d        Zej
                  d        Zej
                  d        Z	d Z
d Zd
dZy	)rr   Tc                    | j                   j                  ,t        | j                  | j                   j                        }|S d}|S r   )r>   rp   r   rg   )r&   rp   s     r'   rp   zLocSlice.startC  s?    ==*#DJJ0C0CDE  Er)   c                    | j                   j                  ,t        | j                  | j                   j                        }|S | j                  j                  dz
  }|S rm   )r>   rq   r   rg   r   )r&   rq   s     r'   rq   zLocSlice.stopK  sN    ==)"4::t}}/A/ABD  ::))A-Dr)   c                   | j                   j                  | j                  j                  rj| j                   j                  | j                  j
                  d   }|S t        | j                  j
                  d   | j                   j                        }|S t        | j                  | j                   j                        }|S r   )r>   rp   rg   rU   rq   ru   mincoerce_loc_index)r&   istarts     r'   r   zLocSlice.istartS  s    ==&4::+E+E ==%%- 

$$Q'  	 --a0$--2D2DE   &djj$--2E2EFFr)   c                   | j                   j                  | j                  j                  rj| j                   j                  | j                  j
                  d   }|S t        | j                  j
                  d   | j                   j                        }|S t        | j                  | j                   j                        }|S ry   )r>   rq   rg   rU   rp   ru   maxr   )r&   istops     r'   r   zLocSlice.istop_  s    ==%$***D*D ==&&. 

$$R(  	 --b14==3F3FG   %TZZ1C1CDEr)   c                |   | j                   | j                  k(  r| j                  | j                  fS | j                  j                  | j
                  j                  d   }n7t        | j                  | j
                  j                  | j                           }| j                  j                   | j
                  j                  d   }n:t        | j                  | j
                  j                  | j                   dz            }|f| j
                  j                  | j                  dz   | j                   dz    z   |fz   S r   )	rq   rp   r   r   r>   rg   ru   r   r   )r&   	div_startdiv_stops      r'   r   zLocSlice._divisionsk  s    99

"KK,,==&

,,Q/IDKK)=)=djj)IJI==%zz++B/H4::tzz';';DIIM'JKH Ljj""4::>DIIMBCk	
r)   c                   t        t        | j                  | j                  dz               }| j                  j
                  t        |      k(  ry  t        |       t        | j                  |      | j                  | j                        S rm   )r;   r   rp   rq   rg   r   r6   r   r   r>   r?   r   s     r'   r   zLocSlice._lower  s`    U4::tyy1}56::!!SZ/tDz*TZZ7VVr)   c           
        | j                   | j                  k(  r| j                  dft        | j                  dft        j
                  t        | j                  j                  | j                  f      t        | j                  j                  | j                  j                         | j                        iS | j                  dft        | j                  dft        j
                  t        | j                  j                  | j                  f      t        | j                  j                  d       | j                        i}t        d| j                   | j                  z
        D ]  }| j                  >t        | j                  j                  | j                  |z   f      || j                  |f<   Mt        | j                  |ft        j
                  t        | j                  j                  | j                  |z   f      t        d d       | j                        || j                  |f<    t        | j                  | j                   | j                  z
  ft        j
                  t        | j                  j                  | j                   f      t        d | j                  j                         | j                        || j                  | j                   | j                  z
  f<   |S )Nr   rE   )rq   rp   r   r	   r   rH   r
   rg   r8   r>   r?   r   r   )r&   r   r   s      r'   r   zLocSlice._layer  s   99

"QZZOKKTZZ--tzz:;$----t}}/A/ABMM"  ZZOTQ))4::67dmm))40
 q$))djj01 
	A}}$%*DJJ,<,<djj1n+M%NDJJM"%)ZZOKKTZZ--tzzA~>?$%MM&DJJM"	
	 37ZZTZZ/0KKTZZ%%tyy12$**+MM3
DJJ		DJJ../ 
r)   Nr   )r*   r+   r,   _projection_passthroughr   r   rp   rq   r   r   r   r   r   r-   r)   r'   rr   rr   @  s~    "    	 	 	 	
(W(r)   rr   c                  @    e Zd Zg dZddiZ eej                        Zy)re   r   r?   N)	r*   r+   r,   r   	_defaultsr   r   rH   r   r-   r)   r'   re   re     s    3KT"IW[[)Ir)   re   c                       e Zd Zg dZddiZeZy)rd   r   r?   N)r*   r+   r,   r   r   re   	_expr_clsr-   r)   r'   rd   rd     s    3KT"IIr)   rd   c                .    t        | j                  |      S r$   )r   ru   )r%   r<   s     r'   r   r     s    S]]C00r)   c                    t        |t              st        |      rt        | j                  |      S t        | j                  |      S r$   )r3   r;   r   r   ru   r   )r%   r   s     r'   r   r     s7    $d!3*3==$?? )==r)   )A
__future__r   r   collections.abcr   numpyrK   pandasrI   pandas.api.typesr   pandas.errorsr   dask._task_specr   r   r	   r
   r   
dask.arrayr   dask.dataframer   dask.dataframe.dask_exprr   $dask.dataframe.dask_expr._collectionr   r   dask.dataframe.dask_expr._exprr   r   r   r   r   r   r   dask.dataframe.dispatchr   dask.dataframe.indexingr   r   r   r   dask.dataframe.utilsr   dask.typingr   
dask.utilsr   r    r"   r/   rC   r{   ro   r   r`   rw   rZ   r\   rr   re   rd   r   r   r-   r)   r'   <module>r      s    "  $   * ' P P  " 4 G   2  +  3 
&' &4fH fHR
t 
<i 0. .

 
0%*g %*Pw (mw m`*) *# 1>r)   