
    -Ph>                    \   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Zd dlmZ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mZ d dlmZ erMd dlmZ d dl m	c m!Z" d d	l#m$Z$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l0m1Z1 d dl2m3Z3 d dlm4Z4m5Z5m6Z6  G d ded                   Z7dS )    )annotations)TYPE_CHECKINGAnyIteratorMappingSequenceN)add_row_indexevaluate_exprs)native_to_narwhals_dtypeselect_columns_by_name)Implementation_remap_full_join_keyscheck_column_names_are_uniquegenerate_temporary_column_namenot_implementedparse_columns_to_dropparse_versionvalidate_backend_version)CompliantLazyFrame)
ModuleType)SelfTypeIs)CompliantDataFrameAny)DaskExprDaskLazyGroupByDaskNamespace)Version_FullContext)	LazyFrame)DType)AsofJoinStrategyJoinStrategyLazyUniqueKeepStrategyc                  b   e Zd Zdfd	Zedgd            Zedhd            ZdidZdjdZ	dkdZ
dldZdmdZdndZdodZdpd"Zdqd'Zedrd)            Zdsd+Zdtd.Zdpd/Zdpd0Zdud3Zedvd5            Zdvd6Zdwd;Zdxd=Zdyd@ZdzdCZd{dFZd|dKZd}dRZ d~dWZ!dd\Z"dzd]Z#dd_Z$dddZ% e&            Z'deS )DaskLazyFramenative_dataframedd.DataFramebackend_versiontuple[int, ...]versionr   returnNonec                   || _         || _        t          j        | _        || _        d | _        d | _        t          | j        | j                   d S N)	_native_frame_backend_versionr   DASK_implementation_version_cached_schema_cached_columnsr   )selfr(   r*   r,   s       X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/narwhals/_dask/dataframe.py__init__zDaskLazyFrame.__init__)   sR     ,< /-27;15 !5t7LMMMMM    objdd.DataFrame | AnyTypeIs[dd.DataFrame]c                6    t          | t          j                  S r0   )
isinstancedd	DataFrame)r<   s    r9   
_is_nativezDaskLazyFrame._is_native8   s    #r|,,,r;   datacontextr    r   c              2     | ||j         |j                  S Nr*   r,   )r2   r5   )clsrD   rE   s      r9   from_nativezDaskLazyFrame.from_native<   s(    s'":GDT
 
 
 	
r;   LazyFrame[dd.DataFrame]c                :    | j                             | d          S )Nlazy)level)r5   	lazyframer8   s    r9   to_narwhalszDaskLazyFrame.to_narwhalsB   s    }&&t6&:::r;   r   c                    | j         t          j        u r| j                                         S dt	          | j                    }t          |          )NzExpected dask, got: )r4   r   r3   to_native_namespacetypeAssertionError)r8   msgs     r9   __native_namespace__z"DaskLazyFrame.__native_namespace__E   sN    >#666';;===AT$*>%?%?AAS!!!r;   r   c                <    ddl m}  || j        | j                  S )Nr   r   rH   )narwhals._dask.namespacer   r2   r5   )r8   r   s     r9   __narwhals_namespace__z$DaskLazyFrame.__narwhals_namespace__L   s.    ::::::}T-BDMZZZZr;   c                    | S r0    rP   s    r9   __narwhals_lazyframe__z$DaskLazyFrame.__narwhals_lazyframe__Q   s    r;   c                F    |                      | j        | j        |          S rG   )	__class__nativer2   )r8   r,   s     r9   _with_versionzDaskLazyFrame._with_versionT   s)    ~~K)>  
 
 	
r;   dfr   c                F    |                      || j        | j                  S rG   )r_   r2   r5   )r8   rb   s     r9   _with_nativezDaskLazyFrame._with_nativeY   s)    ~~ 5t}  
 
 	
r;   Iterator[dx.Series]c              #  P   K   | j                                         D ]	\  }}|V  
d S r0   )r`   items)r8   _colsers      r9   _iter_columnszDaskLazyFrame._iter_columns^   s<      **,, 	 	ID#IIII	 	r;   exprsr   c           	         t          | g|R  }|                      | j        j        di t	          |                    S )Nr\   )r
   rd   r`   assigndict)r8   rk   
new_seriess      r9   with_columnszDaskLazyFrame.with_columnsb   sI    #D15111
  !3!3!G!Gd:6F6F!G!GHHHr;   backendImplementation | Nonekwargsr   c                    | j         j        d
i |}||t          j        u r7ddlm}  ||t          j        t          t                    | j        d          S |t          j	        u r=dd l
}ddlm}  ||                    |          t          |          | j                  S |t          j        u rCdd l}ddlm}  ||j                            |          t          |          | j        d          S d	| }	t'          |	          )Nr   )PandasLikeDataFrameT)implementationr*   r,   validate_column_names)PolarsDataFramerH   )ArrowDataFrame)r*   r,   rw   zUnsupported `backend` value: r\   )r`   computer   PANDASnarwhals._pandas_like.dataframeru   r   pdr5   POLARSpolarsnarwhals._polars.dataframerx   from_pandasPYARROWpyarrownarwhals._arrow.dataframery   Table
ValueError)
r8   rq   rs   resultru   plrx   pary   rV   s
             r9   collectzDaskLazyFrame.collectf   sf    %$..v..?g)>>>KKKKKK&&-4 -b 1 1&*    n+++BBBBBB"?v&& -b 1 1    n,,,    @@@@@@!>$$V,, -b 1 1&*	    8g77oor;   	list[str]c                    | j         >| j        t          | j                  n| j        j                                        | _         | j         S r0   )r7   r6   listschemar`   columnstolistrP   s    r9   r   zDaskLazyFrame.columns   sO    ' &2 T[!!![(//11  
 ##r;   	predicatec                n     ||           d         }|                      | j        j        |                   S )Nr   )rd   r`   loc)r8   r   masks      r9   filterzDaskLazyFrame.filter   s1    yq!  !6777r;   column_namesstrc                    t          | j        t          |          | j        | j                  }|                     |          S r0   )r   r`   r   r2   r4   rd   )r8   r   r`   s      r9   simple_selectzDaskLazyFrame.simple_select   s@    'Kl++T-BDDX
 
   (((r;   c                    t          | g|R  }t          j        d |D             d          }|                     |          S )Nc                >    g | ]\  }}|                     |          S r\   )rename).0namevals      r9   
<listcomp>z+DaskLazyFrame.aggregate.<locals>.<listcomp>   s(    EEEYT3

4((EEEr;      )axis)r
   rA   concatrd   r8   rk   ro   rb   s       r9   	aggregatezDaskLazyFrame.aggregate   sN    #D15111
YEE*EEEANNN  $$$r;   c           	         t          | g|R  }t           | j        j        di t	          |          d |D             | j        | j                  }|                     |          S )Nc                    g | ]
}|d          S )r   r\   )r   ss     r9   r   z(DaskLazyFrame.select.<locals>.<listcomp>   s    &&&aQqT&&&r;   r\   )r
   r   r`   rm   rn   r2   r4   rd   r   s       r9   selectzDaskLazyFrame.select   sy    #D15111
#DK22j!1!122&&:&&&! 	
 
   $$$r;   subsetSequence[str] | Nonec                   |,|                      | j                                                  S |                                 }|                     |                     |j        |                                                      S r0   )rd   r`   dropnarZ   r   any_horizontalcolis_null)r8   r   plxs      r9   
drop_nullszDaskLazyFrame.drop_nulls   sr    >$$T[%7%7%9%9:::))++{{C..wsw/?/G/G/I/IJJJKKKr;   dict[str, DType]c                v      j         * j        j         fd j        j        D              _          j         S )Nc                T    i | ]$}|t          |         j        j                  %S r\   )r   r5   r4   )r   r   native_dtypesr8   s     r9   
<dictcomp>z(DaskLazyFrame.schema.<locals>.<dictcomp>   sI     # # #  -!#&t7K # # #r;   )r6   r`   dtypesr   )r8   r   s   `@r9   r   zDaskLazyFrame.schema   sY    & K.M# # # # #  ;.	# # #D ""r;   c                    | j         S r0   )r   rP   s    r9   collect_schemazDaskLazyFrame.collect_schema   s
    {r;   r   Sequence[str]strictboolc                   t          | ||          }|                     | j                            |                    S )Nr   r   )r   rd   r`   drop)r8   r   r   to_drops       r9   r   zDaskLazyFrame.drop   s=    'gfEEE  !1!1'!1!B!BCCCr;   r   c                j    |                      t          | j        || j        | j                            S r0   )rd   r	   r`   r2   r4   )r8   r   s     r9   with_row_indexzDaskLazyFrame.with_row_index   s5       $+tT-BDDXYY
 
 	
r;   mappingMapping[str, str]c                ^    |                      | j                            |                    S )Nr   )rd   r`   r   )r8   r   s     r9   r   zDaskLazyFrame.rename   s)      !3!3G!3!D!DEEEr;   nintc                b    |                      | j                            |dd                    S )NF)r   rz   npartitions)rd   r`   head)r8   r   s     r9   r   zDaskLazyFrame.head   s.      !1!1AuRT!1!U!UVVVr;   keepr%   c               ,   |r|                      |          x}r||dk    r|p| j        }t          d|          }| j                            |                                                              |          }||dk             }|                                                    |          }| j        	                    ||d          }n4dd	i
                    ||          }| j                            ||
          }|                     |          S )Nnone   n_bytesr   r   r   inner)onhowanyfirst)r   r   )_check_columns_existr   r   r`   groupbysizer   reset_indexr   mergegetdrop_duplicatesrd   )	r8   r   r   errortokenri   uniquer   mapped_keeps	            r9   r   zDaskLazyFrame.unique   s     	 9 9& A AAu 	K6>>+t|F21fMMME+%%f--2244;;EBBCcQh-C__&&++E+::F[&&v&g&FFFF '*..tT::K[00[0QQF  (((r;   by
descendingbool | Sequence[bool]
nulls_lastc                   t          |t                    r| }nd |D             }|rdnd}|                     | j                            t          |          ||                    S )Nc                    g | ]}| S r\   r\   )r   ds     r9   r   z&DaskLazyFrame.sort.<locals>.<listcomp>   s    3331Q333r;   lastr   )	ascendingna_position)r@   r   rd   r`   sort_valuesr   )r8   r   r   r   r   positions         r9   sortzDaskLazyFrame.sort   sv    j$'' 	4/9>II33
333I'466W  K##DHH	x#XX
 
 	
r;   otherr   r$   left_onright_onsuffixc          
        |dk    rt          dg | j        |j                  }|                      | j        j        di |di                     |j        j        di |did||d|f                              |                    S |d	k    rt          dg | j        |j                  }|d
}t          |          t          |j        t          |          | j
        | j                                      t          t          ||                                                              }	| j                            |	d|||          }
|                     |
|
|         dk                                 |g                    S |dk    r|d}t          |          t          |j        t          |          | j
        | j                                      t          t          ||                                                              }	|                     | j                            |	d||                    S |dk    r| j                            |j        d||d|f          }g }t          ||          D ]H\  }}||k    r|| j        vr|                    |           *||k    r|                    | d           I|                     |                    |                    S |dk    r|J |J t#          |||          }|j                            |          }	t%          |	j                   t          |                                          }|                     | j                            |	||dd|f                    S |                     | j                            |j        |||d|f                    S )Ncrossr   r   r   r    )r   r   r   suffixesr   antiz(`right_on` cannot be `None` in anti-joinouter)r   	indicatorr   r   	left_onlysemiz(`right_on` cannot be `None` in semi-join)r   r   r   left_rightfull)r   r   r   r   r\   )r   r   rd   r`   rm   r   r   	TypeErrorr   r   r2   r4   r   rn   zipr   appendr   r   values)r8   r   r   r   r   r   	key_tokenindicator_tokenrV   other_nativerb   result_nativeextraleft_key	right_keyright_on_mappers                   r9   joinzDaskLazyFrame.join   sy    '>>6#BT\#BEM#B  I $$""44i^44'EL'999a.99%& &\    i((
 
 
 &==<#BT\#BEM#B  O @nn$&LNN)(	   Xw!7!788    !""  "")  #  B $$2o&+56;;_DU;VV   &==@nn$&LNN)(	   Xw!7!788    !""  $$!! gw "     &== K--!f .  M E'*7H'='= 7 7#)((Ydl-J-JLL++++(**LLI!5!5!5666$$]%7%7%7%F%FGGG&==
 &&&'''3GXvNNO <...GGL),*>???O224455H$$!! #% &\ "       K!f   
 
 	
r;   by_leftby_rightstrategyr#   c                   |                                  }|                     |                    | j        |j        |||||d|f                    S )Nr   )r   r   left_byright_by	directionr   )rW   rd   
merge_asofr`   )	r8   r   r   r   r  r  r  r   r   s	            r9   	join_asofzDaskLazyFrame.join_asofu  sc     ''))  NN!!"f  	 	
 
 	
r;   keys"Sequence[str] | Sequence[DaskExpr]drop_null_keysr   c               *    ddl m}  || ||          S )Nr   r   )r  )narwhals._dask.group_byr   )r8   r  r  r   s       r9   group_byzDaskLazyFrame.group_by  s-     	<;;;;;tT.IIIIr;   c                    | j         }|j        }|dk    r/|                     | j                             |d                    S d}t	          |          )Nr   F)r   rz   zL`LazyFrame.tail` is not supported for Dask backend with multiple partitions.)r`   r   rd   tailNotImplementedError)r8   r   native_framen_partitionsrV   s        r9   r  zDaskLazyFrame.tail  sX    {#/1$$T[%5%55%5%I%IJJJ`C%c***r;   offsetc                @   t          d| j                  }|                                 }|                     |                              |                    |          |k    |                    |          |z
  |z  dk    z                                |gd          S )Nr   r   r   Fr   )r   r   rZ   r   r   r   r   )r8   r   r"  row_index_tokenr   s        r9   gather_everyzDaskLazyFrame.gather_every  s    8DLYYY))++00V))V3GGO,,v5:a?A  T?#ET22	
r;   r   indexvariable_name
value_namec                d    |                      | j                            ||||                    S )N)id_vars
value_varsvar_namer(  )rd   r`   melt)r8   r   r&  r'  r(  s        r9   unpivotzDaskLazyFrame.unpivot  sB       K&%	   
 
 	
r;   N)r(   r)   r*   r+   r,   r   r-   r.   )r<   r=   r-   r>   )rD   r)   rE   r    r-   r   )r-   rK   )r-   r   )r-   r   )r-   r   )r,   r   r-   r   )rb   r   r-   r   )r-   re   )rk   r   r-   r   )rq   rr   rs   r   r-   r   )r-   r   )r   r   r-   r   )r   r   r-   r   )r   r   r-   r   )r-   r   )r   r   r   r   r-   r   )r   r   r-   r   )r   r   r-   r   )r   r   r-   r   )r   r   r   r%   r-   r   )r   r   r   r   r   r   r-   r   )r   r   r   r$   r   r   r   r   r   r   r-   r   )r   r   r   r   r   r   r  r   r  r   r  r#   r   r   r-   r   )r  r  r  r   r-   r   )r   r   r"  r   r-   r   )
r   r   r&  r   r'  r   r(  r   r-   r   )(__name__
__module____qualname__r:   staticmethodrC   classmethodrJ   rQ   rW   rZ   r]   ra   rd   rj   rp   r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r%  r.  r   exploder\   r;   r9   r'   r'   &   s       N N N N - - - \- 
 
 
 [

; ; ; ;" " " "[ [ [ [
   
 
 
 


 
 
 

   I I I I( ( ( (T $ $ $ X$8 8 8 8
) ) ) )% % % %
% % % %L L L L 	# 	# 	# X	#   D D D D

 
 
 
F F F FW W W W) ) ) )"
 
 
 
}
 }
 }
 }
~
 
 
 
2J J J J+ + + +

 

 

 


 
 
 
  oGGGr;   r'   )r   r)   rK   )8
__future__r   typingr   r   r   r   r   dask.dataframe	dataframerA   pandasr}   narwhals._dask.utilsr	   r
   narwhals._pandas_like.utilsr   r   narwhals._utilsr   r   r   r   r   r   r   r   narwhals.typingr   typesr   dask.dataframe.dask_expr	dask_exprdxtyping_extensionsr   r   narwhals._compliant.typingr   narwhals._dask.exprr   r  r   rY   r   r   r    narwhals.dataframer!   narwhals.dtypesr"   r#   r$   r%   r'   r\   r;   r9   <module>rH     s<   " " " " " " B B B B B B B B B B B B B B           > > > > > > > > X X X X X X X X	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 / . . . . . W      )))))))))........@@@@@@,,,,,,77777766666655555555,,,,,,%%%%%%VVVVVVVVVVU  U  U  U  U LMU  U  U  U  U r;   