
    tfd4                       d dl mZ d dlZd dlm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 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 d dlmZ d dlmZ  G d d      Z G d de      Z  G d de      Z!d Z"d Z#d Z$d Z%y)    )annotationsN)defaultdict)datetime)is_bool_dtype)Array)tokenize)methods)IndexingError)Seriesnew_dd_object)is_index_likeis_series_likemeta_nonempty)HighLevelGraph)is_arraylikec                  >    e Zd Zd Zed        Zed        Zd Zd Zy)_IndexerBasec                    || _         y N)obj)selfr   s     a/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/dask/dataframe/indexing.py__init__z_IndexerBase.__init__   s	        c                .    | j                   j                  S r   )r   _namer   s    r   r   z_IndexerBase._name   s    xx~~r   c                    t         r   )NotImplementedErrorr   s    r   _meta_indexerz_IndexerBase._meta_indexer   s    !!r   c                D    || j                   S | j                  dd|f   S )z
        get metadata
        N)r   r    )r   iindexercindexers      r   
_make_metaz_IndexerBase._make_meta!   s(     88O%%ak22r   c                V    t        |       j                  t        | j                        fS r   )type__name__r   r   r   s    r   __dask_tokenize__z_IndexerBase.__dask_tokenize__*   s     Dz""HTXX$666r   N)	r'   
__module____qualname__r   propertyr   r    r$   r(    r   r   r   r      s9       " "37r   r   c                  (    e Zd Zed        Zd Zd Zy)_iLocIndexerc                B    | j                   j                  j                  S r   )r   _metailocr   s    r   r    z_iLocIndexer._meta_indexer/   s    xx~~"""r   c                v   d}t        |t              st        |      t        |      dkD  rt	        d      |\  }}|t        d       k7  rt        |      | j                  j                  j                  s| j                  ||      S | j                  j                  |   }| j                  j                  |      S )Nzd'DataFrame.iloc' only supports selecting columns. It must be used like 'df.iloc[:, column_indexer]'.   Too many indexers)
isinstancetupler   len
ValueErrorslicer   columns	is_unique_iloc__getitem__)r   keymsgr"   r#   	col_namess         r   r=   z_iLocIndexer.__getitem__3   s    A 	 #u%%c**s8a<011 (uT{"%c**xx))::h11 ((2I88''	22r   c                    |t        d       k(  sJ | j                  ||      }| j                  j                  t        j
                  ||      S )Nmeta)r9   r$   r   map_partitionsr	   r1   r   r"   r#   rC   s       r   r<   z_iLocIndexer._ilocL   sD    5;&&&x2xx&&w||XD&IIr   N)r'   r)   r*   r+   r    r=   r<   r,   r   r   r.   r.   .   s    # #32Jr   r.   c                  \    e Zd ZdZed        Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zy)_LocIndexerz"Helper class for the .loc accessorc                B    | j                   j                  j                  S r   )r   r0   locr   s    r   r    z_LocIndexer._meta_indexerV   s    xx~~!!!r   c                    t        |t              r:t        |      | j                  j                  kD  rd}t        |      |d   }|d   }n|}d }| j                  ||      S )Nr4   r      )r5   r6   r7   r   ndimr
   _loc)r   r>   r?   r"   r#   s        r   r=   z_LocIndexer.__getitem__Z   s_    c5!3x$((--')#C((1vH1vH HHyy8,,r   c                   t        |t              r| j                  ||      S t        |t              r| j	                  ||      S t        |      r"| j                   || j                        |      S | j                  j                  r| j                  |      }t        |t              r| j                  ||      S t        |      r1t        |j                        s| j                  |j                   |      S t        |t"              st%        |      r| j                  ||      S | j'                  ||      S t        |t"        t(        j*                  f      s t        |      r"t        |j                        sd}t-        |      t        |t              st        ||      }| j/                  ||      }| j                  j1                  t2        j4                  |||      S )z%Helper function for the .loc accessorz^Cannot index with list against unknown division. Try setting divisions using ``ddf.set_index``rB   )r5   r   _loc_seriesr   
_loc_arraycallablerM   r   known_divisions_maybe_partial_time_stringr9   
_loc_slicer   r   dtype	_loc_listvalueslistr   _loc_elementnpndarrayKeyErrorr$   rD   r	   try_loc)r   r"   r#   r?   rC   s        r   rM   z_LocIndexer._locj   s   h'##Hh77%(??8X66h99Xdhh/::88##66x@H(E*x::)-2O~~hoox@@Hd+|H/E~~h99 ((8<<(T2::$67x(x~~1N
D  sm#%0 84??8X6D88**8$ +  r   c                p    t        | j                  j                  j                        }t	        ||      }|S )z{
        Convert index-indexer for partial time string slicing
        if obj.index is DatetimeIndex / PeriodIndex
        )r   r   r0   indexrS   )r   r"   idxs      r   rS   z&_LocIndexer._maybe_partial_time_string   s-    
 DHHNN001-c8<r   c                    t        |j                        st        d      | j                  ||      }| j                  j                  t        j                  ||d|      S )NzuCannot index with non-boolean dask Series. Try passing computed values instead (e.g. ``ddf.loc[iindexer.compute()]``)z
loc-series)tokenrC   )r   rU   r\   r$   r   rD   r	   rI   rE   s       r   rO   z_LocIndexer._loc_series   s^    X^^,H  x2xx&&KK8<d ' 
 	
r   c                r    |j                  d| j                  j                        }| j                  ||      S )N_)to_dask_dataframer   r_   rO   )r   r"   r#   iindexer_seriess       r   rP   z_LocIndexer._loc_array   s/    "44S$((..I::r   c                   dt        || j                        z  }| j                  |      }| j                  ||      }t	        |      ri }g }t        |j                               }t        |      D ]J  \  }	\  }
}t        j                  | j                  |
f||f|||	f<   |j                  t        |      d          L |j                  t        |d   d         d          t        j                  ||| j                  g      }n/d d g}|df|j                  d      i}t        j                  ||      }t        ||||      S )Nloc-%sr   rK   dependenciesrC   	divisions)r   r   _get_partitionsr$   r7   sorteditems	enumerater	   rI   r   appendr   from_collectionsheadr   )r   r"   r#   namepartsrC   dskrm   rp   idivindexergraphs                r   rV   z_LocIndexer._loc_list   s-   (8TXX66$$X.x2x=CI5;;=)E%.u%5 5!>C 'djj#->RD!G  !345
 VE"IaL1"56"33D#TXXJWEtI!9diil+C"33D#>EUDtyIIr   c                   dt        || j                        z  }| j                  |      }|| j                  j                  d   k  s|| j                  j                  d   kD  rt	        dt        |      z        |dft        j                  | j                  |ft        ||      |fi}| j                  ||      }t        j                  ||| j                  g      }t        |||||g      S )Nrh   r   ri   z"the label [%s] is not in the indexrj   rl   )r   r   rn   rm   r\   strr	   rI   r   r9   r$   r   rs   r   )r   r"   r#   ru   partrw   rC   r{   s           r   rY   z_LocIndexer._loc_element   s    (8TXX66##H-dhh((++x$((:L:LR:P/P?#h-OPP 1IT"h)	
 x2//c
SUDt(?STTr   c                    t        |t              st        |      r t        | j                  j
                  |      S t        | j                  j
                  |      S r   )r5   rX   r   _partitions_of_index_valuesr   rm   _partition_of_index_value)r   keyss     r   rn   z_LocIndexer._get_partitions   sC    dD!\$%7.txx/A/A4HH -TXX-?-?FFr   c                B    t        | j                  j                  |      S r   )_coerce_loc_indexr   rm   )r   r>   s     r   r   z_LocIndexer._coerce_loc_index   s     !3!3S99r   c                   dt        |||       z  }t        |t              sJ |j                  dv sJ |j                  | j                  |j                        }nd}|j                  | j                  |j                        }n| j                  j                  dz
  }|j                  i| j                  j                  rS|j                  | j                  j                  d   n,t        | j                  j                  d   |j                        }n| j                  |j                        }|j                  i| j                  j                  rS|j                  | j                  j                  d   n,t        | j                  j                  d   |j                        }n| j                  |j                        }||k(  rH|dft        j                  | j                   |ft        |j                  |j                        |fi}||g}	n|dft        j                  | j                   |ft        |j                  d       |fi}t#        d||z
        D ]M  }
|| j                   ||
z   f|||
f<   t        j                  | j                   ||
z   ft        d d       |f|||
f<   O t        j                  | j                   |ft        d |j                        |f||||z
  f<   |j                  | j                  j                  d   }n#t        || j                  j                  |         }|j                  | j                  j                  d   }n&t        || j                  j                  |dz            }|f| j                  j                  |dz   |dz    z   |fz   }	t%        |	      t%        |      dz   k(  sJ | j'                  ||      }t)        j*                  ||| j                  g      }t-        ||||	      S )Nrh   )NrK   r   rK   ri   rj   rl   )r   r5   r9   stepstartrn   stopr   npartitionsrR   rm   minr   maxr	   rI   r   ranger7   r$   r   rs   r   )r   r"   r#   ru   r   r   istartistoprw   rm   rx   	div_startdiv_stoprC   r{   s                  r   rT   z_LocIndexer._loc_slice   s   (8Xt<<(E***}}	)))>>%((8EE==$''6D88''!+D>>!dhh&>&> ==( ""1%++A.>  ++HNN;F== TXX%=%= >>) ""2&++B/@  **8==9E5=q	KKZZ'(..(--8	C  I q	KKZZ'(..$/	C 1dUl+ 	#$(JJ	#:CaL  UQY/dD) 	$CaL		 T"dHMM*	'CdUl"# ~~% HH..q1	(:(:5(AB	}}$88--b1udhh&8&8&BC txx11%!)dQhGG8+U  9~SA---x2//c
SUDtyIIr   N)r'   r)   r*   __doc__r+   r    r=   rM   rS   rO   rP   rV   rY   rn   r   rT   r,   r   r   rG   rG   S   sO    ," "- &P	
;J,U(G:WJr   rG   c                    | d   d}t        |      t        | |      }t        j                  | |      }t	        t        |       dz
  t        d|dz
              S )a'  In which partition does this value lie?

    >>> _partition_of_index_value([0, 5, 10], 3)
    0
    >>> _partition_of_index_value([0, 5, 10], 8)
    1
    >>> _partition_of_index_value([0, 5, 10], 100)
    1
    >>> _partition_of_index_value([0, 5, 10], 5)  # left-inclusive divisions
    1
    r   4Can not use loc on DataFrame without known divisionsr3   rK   )r8   r   bisectbisect_rightr   r7   r   )rm   valr?   rx   s       r   r   r   8  s[     |Do
Is
+CIs+As9~!3q!a%=11r   c           	         | d   d}t        |      t        t              }|D ]Q  }t        j                  | |      }t        t        |       dz
  t        d|dz
              }||   j                  |       S |S )aS  Return defaultdict of division and values pairs
    Each key corresponds to the division which values are index values belong
    to the division.

    >>> sorted(_partitions_of_index_values([0, 5, 10], [3]).items())
    [(0, [3])]
    >>> sorted(_partitions_of_index_values([0, 5, 10], [3, 8, 5]).items())
    [(0, [3]), (1, [8, 5])]
    r   r   r3   rK   )	r8   r   rX   r   r   r   r7   r   rr   )rm   rW   r?   resultsr   rx   ry   s          r   r   r   L  s     |Do$G !	3/#i.1$c!QUm4C ! Nr   c                    | r(t        | d   t              rt        j                  |      S | rNt        | d   t        j
                        r1t	        j
                  |      j                  | d   j                        S |S )zxTransform values to be comparable against divisions

    This is particularly valuable to use with pandas datetimes
    r   )r5   r   pd	TimestamprZ   
datetime64astyperU   )rm   os     r   r   r   b  s_    
 Z	!h7||AZ	!bmm<}}Q&&y|'9'9::Hr   c                d   t        |       sJ t        | t        j                  t        j                  f      s|S t        |t
              rt        |j                  t              r| j                  |j                  d      }n|j                  }t        |j                  t              r| j                  |j                  d      }n|j                  }t        ||      S t        |t              rD| j                  |d      }| j                  |d      }t        t        ||      t        ||            S |S )z`
    Convert indexer for partial string selection
    if data has DatetimeIndex/PeriodIndex
    leftright)r   r5   r   DatetimeIndexPeriodIndexr9   r   r}   _maybe_cast_slice_boundr   r   r   )r_   rz   r   r   s       r   rS   rS   n  s     eb..?@'5!gmmS)11'--HEMMEgllC(00wGD<<DUD!!	GS	!--gv>,,Wg>S%s5$'788Nr   )&
__future__r   r   collectionsr   r   numpyrZ   pandasr   pandas.api.typesr   dask.array.corer   	dask.baser   dask.dataframer	   dask.dataframe._compatr
   dask.dataframe.corer   r   dask.dataframe.utilsr   r   r   dask.highlevelgraphr   
dask.utilsr   r   r.   rG   r   r   r   rS   r,   r   r   <module>r      ss    "  #    * !  " 0 5 M M . #7 72"J< "JJbJ, bJJ2(,	r   