
    WhG                       U d dl mZ d dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZ d d	lmZ ersd d
l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c m*Z+ d dl,m-Z-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dlm:Z:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZA d dlmBZBmCZCmDZD dZEdeFd<   	  G d ded   e      ZGy)    )annotations)TYPE_CHECKINGAnyN)add_row_indexevaluate_exprs)ExprKind)native_to_narwhals_dtypeselect_columns_by_name)assert_never)	ImplementationValidateBackendVersion_remap_full_join_keyscheck_column_names_are_uniquecheck_columns_existgenerate_temporary_column_namenot_implementedparse_columns_to_drop
zip_strict)CompliantLazyFrame)IterableIteratorMappingSequence)BytesIO)Path)
ModuleType)Self	TypeAliasTypeIs)CompliantDataFrameAny)DaskExprDaskLazyGroupByDaskNamespace)_EagerAllowedImpl)Version_LimitedContext)	LazyFrame)DType)ColumnNotFoundError)AsofJoinStrategyJoinStrategyUniqueKeepStrategyr   r   
Incompletec                     e Zd Zej                  Zdd	 	 	 	 	 	 	 d.dZed/d       Ze	d0d       Z
d1dZd2dZd3dZd4d	Zd5d
Zd6dZd7dZd8dZd9dZ	 	 	 	 	 	 d:dZed;d       Zd<dZd=dZd9dZd9dZd>dZed?d       Zd?dZd@dZdAdZdBdZ dCdZ!	 	 	 	 	 	 	 	 dDdZ"dEdZ#dFdZ$	 	 	 	 	 	 	 	 	 	 dGdZ%	 	 	 	 	 	 	 	 	 	 dGd Z&	 	 	 	 	 	 	 	 	 	 dGd!Z'dHd"Z(	 	 	 	 	 	 	 	 dId#Z)	 	 	 	 	 	 	 	 dId$Z*	 	 	 	 	 	 	 	 dJd%Z+	 	 	 	 	 	 	 	 	 	 	 	 dKd&Z,	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dLd'Z-	 	 	 	 	 	 dMd(Z.dCd)Z/dNd*Z0	 	 	 	 	 	 	 	 	 	 dOd+Z1dPd,Z2 e3       Z4y-)QDaskLazyFrameF)validate_backend_versionc               b    || _         || _        d | _        d | _        |r| j	                          y y N)_native_frame_version_cached_schema_cached_columns_validate_backend_version)selfnative_dataframeversionr2   s       R/var/www/html/jupyter_env/lib/python3.12/site-packages/narwhals/_dask/dataframe.py__init__zDaskLazyFrame.__init__:   s7     ,<7;15#**, $    c                6    t        | t        j                        S r4   )
isinstancedd	DataFrame)objs    r=   
_is_nativezDaskLazyFrame._is_nativeH   s    #r||,,r?   c              *     | ||j                         S Nr<   )r6   )clsdatacontexts      r=   from_nativezDaskLazyFrame.from_nativeL   s    4!1!122r?   c                <    | j                   j                  | d      S )Nlazy)level)r6   	lazyframer:   s    r=   to_narwhalszDaskLazyFrame.to_narwhalsP   s    }}&&t6&::r?   c                    | j                   t        j                  u r| j                   j                         S dt	        | j                          }t        |      )NzExpected dask, got: )_implementationr   DASKto_native_namespacetypeAssertionError)r:   msgs     r=   __native_namespace__z"DaskLazyFrame.__native_namespace__S   sN    >#6#66'';;==$T$*>*>%?$@AS!!r?   c                4    ddl m}  || j                        S )Nr   r$   rH   )narwhals._dask.namespacer%   r6   )r:   r%   s     r=   __narwhals_namespace__z$DaskLazyFrame.__narwhals_namespace__Z   s    :T]]33r?   c                    | S r4    rQ   s    r=   __narwhals_lazyframe__z$DaskLazyFrame.__narwhals_lazyframe___   s    r?   c                <    | j                  | j                  |      S rG   )	__class__native)r:   r<   s     r=   _with_versionzDaskLazyFrame._with_versionb   s    ~~dkk7~;;r?   c                <    | j                  || j                        S rG   )rb   r6   )r:   dfs     r=   _with_nativezDaskLazyFrame._with_nativee   s    ~~b$--~88r?   c                0    t        || j                        S )N)	available)r   columns)r:   subsets     r=   _check_columns_existz"DaskLazyFrame._check_columns_existh   s    "6T\\BBr?   c              #  X   K   | j                   j                         D ]	  \  }}|  y wr4   )rc   items)r:   _colsers      r=   _iter_columnszDaskLazyFrame._iter_columnsk   s+     **, 	ID#I	s   (*c           	         t        | g| }| j                   | j                  j                  di t	        |            S )Nr_   )r   rg   rc   assigndict)r:   exprs
new_seriess      r=   with_columnszDaskLazyFrame.with_columnso   s<    #D151
  !3!3!3!Gd:6F!GHHr?   c                    | j                   j                  d
i |}||t        j                  u r+ddlm}  ||t        j                  d| j                  d      S |t        j                  u r.dd l}ddl	m
}  ||j                  |      d| j                        S |t        j                  u r9dd l}ddlm}  ||j                   j                  |      d| j                  d      S d	| }	t#        |	      )Nr   )PandasLikeDataFrameT)implementationr2   r<   validate_column_names)PolarsDataFrame)r2   r<   )ArrowDataFrame)r2   r<   r{   zUnsupported `backend` value: r_   )rc   computer   PANDASnarwhals._pandas_like.dataframery   r6   POLARSpolarsnarwhals._polars.dataframer|   from_pandasPYARROWpyarrownarwhals._arrow.dataframer}   Table
ValueError)
r:   backendkwargsresultry   plr|   par}   rY   s
             r=   collectzDaskLazyFrame.collects   s     %$$.v.?g)>)>>K&-44)-&*  n+++B"v&)-  n,,, @!$$V,)-&*	  .gY7or?   c                    | j                   J| j                  t        | j                        n#| j                  j
                  j                         | _         | j                   S r4   )r8   r7   listschemarc   rj   tolistrQ   s    r=   rj   zDaskLazyFrame.columns   sV    ' &&2 T[[![[((//1  
 ###r?   c                h     ||       d   }| j                  | j                  j                  |         S )Nr   )rg   rc   loc)r:   	predicatemasks      r=   filterzDaskLazyFrame.filter   s.    q!  !677r?   c                |    | j                   }t        |t        |      | j                        }| j	                  |      S r4   )rc   r
   r   rT   rg   )r:   column_namesrf   rc   s       r=   simple_selectzDaskLazyFrame.simple_select   s5    'D,>@T@TU  ((r?   c           	         t        | g| }t        j                  |D cg c]  \  }}|j                  |       c}}d      }| j	                  |      S c c}}w )N   )axis)r   rB   concatrenamerg   )r:   ru   rv   namevalrf   s         r=   	aggregatezDaskLazyFrame.aggregate   sP    #D151
YY*EYT3

4(EAN  $$ Fs   A
c           	         t        | g| }| j                  }t         |j                  di t	        |      |D cg c]  }|d   	 c}| j
                        }| j                  |      S c c}w )Nr   r_   )r   rc   r
   rs   rt   rT   rg   )r:   ru   rv   rf   ss        r=   selectzDaskLazyFrame.select   sm    #D151
#BII)Z()%&aQqT&  

   $$ 's   A+
c                    |)| j                  | j                  j                               S | j                         }|j	                   |j
                  | j                         d       }| j                  |      S )NT)ignore_nulls)rg   rc   dropnar]   any_horizontalcolis_nullr   )r:   rk   plxr   s       r=   
drop_nullszDaskLazyFrame.drop_nulls   sn    >$$T[[%7%7%9::))+""7377F#3#;#;#=D"QQ{{4  r?   c           	         | j                   b| j                  j                  }| j                  j                  D ci c]'  }|t	        ||   | j
                  | j                        ) c}| _         | j                   S c c}w r4   )r7   rc   dtypesrj   r	   r6   rT   )r:   native_dtypesr   s      r=   r   zDaskLazyFrame.schema   s|    & KK..M
  ;;..	#  -!#&t7K7K #D """#s   ,A;c                    | j                   S r4   )r   rQ   s    r=   collect_schemazDaskLazyFrame.collect_schema   s    {{r?   c               t    t        | ||      }| j                  | j                  j                  |            S )Nstrictrj   )r   rg   rc   drop)r:   rj   r   to_drops       r=   r   zDaskLazyFrame.drop   s3    'gfE  !1!1'!1!BCCr?   c                   |%| j                  t        | j                  |            S | j                         }| j                  }|j                  dd       j                  |      j                  t        j                        }|j                  |      j                  d      j                  g |      dz
  }| j                  |      j                  | |j                  |       S )Nr   )valuedtypeF)reverse)partition_byorder_by)rg   r   rc   r]   rj   litalias	broadcastr   LITERALr   cum_sumoverrw   r   )r:   r   r   r   rj   
const_exprrow_index_exprs          r=   with_row_indexzDaskLazyFrame.with_row_index   s     $$]4;;%EFF))+,,WW1DW177=GGHXHXY
GGDM!!%!0552PX5Y 	   ,33NGCGGWDUVVr?   c                X    | j                  | j                  j                  |            S )Nr   )rg   rc   r   )r:   mappings     r=   r   zDaskLazyFrame.rename   s%      !3!3G!3!DEEr?   c                \    | j                  | j                  j                  |dd            S )NFnr~   npartitions)rg   rc   head)r:   r   s     r=   r   zDaskLazyFrame.head   s*      !1!1AuRT!1!UVVr?   c               :   |r| j                  |      x}r||dk(  r|xs | j                  }t        d|      }| j                  j	                  |      j                         j                  |      }||dk(     }|j                         j                  |      }| j                  j                  ||d      }nSdd	ij                  ||      }	|r | j                  |d
d
dj                  }
n| j                  }
|
j                  ||	      }| j                  |      S )Nnone   n_bytesrj   r   r   inner)onhowanyfirstF)
descending
nulls_last)rk   keep)rl   rj   r   rc   groupbysizer   reset_indexr   mergegetsortdrop_duplicatesrg   )r:   rk   r   r   errortokenrp   uniquer   mapped_keeprc   s              r=   r   zDaskLazyFrame.unique   s     9 9& AAuAK6>+t||F21fME++%%f-224;;EBCcQh-C__&++E+:F[[&&v&g&FF '*..tT:K"H5QXX++6+LF  ((r?   c                   t        |t              r| }n|D cg c]  }|  }}|rdnd}| j                  | j                  j	                  t        |      ||            S c c}w )Nlastr   )	ascendingna_position)rA   boolrg   rc   sort_valuesr   )r:   r   r   byr   dpositions          r=   r   zDaskLazyFrame.sort  sf    j$'/9>I(231Q3I3'6W  KK##DH	x#X
 	
 4s   
A!c                  | j                   }| j                  t        |      }t        |t              rXt        fd|D              rD|r!| j                  |j                  ||            S | j                  |j                  ||            S t        |t              r|gt        |      z  }| j                  |j                  |t        |            j                  |dd            S )Nc              3  D   K   | ]  }|   j                           y wr4   )
is_numeric).0xr   s     r=   	<genexpr>z&DaskLazyFrame.top_k.<locals>.<genexpr>  s     ,PVAY-A-A-C,Ps    )r   Fr   r   )rc   r   r   rA   r   allrg   	nsmallestnlargestlenr   r   )r:   kr   r   rf   r   s        @r=   top_kzDaskLazyFrame.top_k  s    [["Xgt$,PR,P)P((a)<==$$R[[B%788gt$i#b')G  NN2gN7<<U = 
 	
r?   c               Z    | j                   j                  |j                   ||dd|f      S )Nr    left_onright_onr   suffixes)rc   r   )r:   otherr  r  suffixs        r=   _join_innerzDaskLazyFrame._join_inner"  s7     {{  LL&\ ! 
 	
r?   c                   | j                   j                  |j                   d||d|f      }t        ||      D cg c]   \  }}||k7  r|| j                  vr|n| | " }}}|j	                  |      S c c}}w )Nleftr   r   r  r  r  r   )rc   r   r   rj   r   )	r:   r  r  r  r  result_nativeleft_key	right_keyextras	            r=   
_join_leftzDaskLazyFrame._join_left-  s     ))LL&\ * 
 (2'8'D
#)H$ #$,,6Iyk&<RR
 

 !!%!00
s   %A6c                   t        |||      }|j                  j                  |      }t        |j                         t        |j                               }| j                  j                  |||dd|f      S )Nr   outerr   r   )r   rc   r   r   rj   r   valuesr   )r:   r  r  r  r  right_on_mapperother_nativeright_suffixeds           r=   
_join_fullzDaskLazyFrame._join_full>  sy     06J||**?*C%l&:&:;o4467{{  #&\ ! 
 	
r?   c                  t        dg | j                  |j                        } | j                  j                  di |dij	                   |j                  j                  di |did||d|f      j                  |      S )	Nr   r   r   r   r   r	  r   r_   )r   rj   rc   rs   r   r   )r:   r  r  	key_tokens       r=   _join_crosszDaskLazyFrame._join_crossP  s    2>>>
	 DKK0)Q0U###5y!n5!"f   T)T$
	
r?   c          
         | j                  |t        |      t        t        ||                  }| j                  j                  |d||      S )Nr  columns_to_selectcolumns_mappingr   )r   r  r  )_join_filter_renamer   rt   ziprc   r   )r:   r  r  r  r  s        r=   
_join_semizDaskLazyFrame._join_semi`  sY     //"8n Xw!78 0 

 {{  gw ! 
 	
r?   c          
     &   t        dg | j                  |j                        }| j                  |t        |      t	        t        ||                  }| j                  j                  |d|||      }|||   dk(     j                  |g      S )Nr   r   r  r  )r   	indicatorr  r  	left_onlyr   )	r   rj   r  r   rt   r  rc   r   r   )r:   r  r  r  indicator_tokenr  rf   s          r=   
_join_antizDaskLazyFrame._join_antil  s     9>>>
 //"8n Xw!78 0 

 [[%  
 "_%45::OCT:UUr?   c                    |j                   }t        ||| j                        j                  |      j	                         S )zHelper function to avoid creating extra columns and row duplication.

        Used in `"anti"` and `"semi`" join's.

        Notice that a native object is returned.
        r   )rc   r
   rT   r   r   )r:   r  r  r  r  s        r=   r  z!DaskLazyFrame._join_filter_rename  s;     $)<< #<1BDDXDXYVOV,_	
r?   c                  |dk(  r| j                  ||      }n||t        ||      |dk(  r| j                  ||||      }nu|dk(  r| j                  |||      }n[|dk(  r| j	                  |||      }nA|dk(  r| j                  ||||      }n&|d	k(  r| j                  ||||      }nt        |       | j                        S )
Ncross)r  r  r   )r  r  r  r  anti)r  r  r  semir  full)	r  r   r  r$  r  r  r  r   rg   )r:   r  r   r  r  r  r   s          r=   joinzDaskLazyFrame.join  s     '>%%E&%AF_ 0Wh//G^%%Wx & F F]__5'H_UFF]__5'H_UFF]__Wx % F F]__Wx % F   ((r?   c                   | j                         }| j                  |j                  | j                  |j                  |||||d|f            S )Nr   )r  r  left_byright_by	directionr  )rZ   rg   
merge_asofrc   )	r:   r  r  r  by_leftby_rightstrategyr  r   s	            r=   	join_asofzDaskLazyFrame.join_asof  sZ     '')  NN!!"f  	
 	
r?   c               $    ddl m}  || ||      S )Nr   r"   )drop_null_keys)narwhals._dask.group_byr#   )r:   keysr6  r#   s       r=   group_byzDaskLazyFrame.group_by  s     	<tT.IIr?   c                    | j                   }|j                  }|dk(  r,| j                  | j                   j                  |d            S d}t	        |      )Nr   F)r   r~   zL`LazyFrame.tail` is not supported for Dask backend with multiple partitions.)rc   r   rg   tailNotImplementedError)r:   r   native_framen_partitionsrY   s        r=   r;  zDaskLazyFrame.tail  sX    {{#//1$$T[[%5%55%5%IJJZ 	 "#&&r?   c                   t        d| j                        }| j                         }| j                  |d       j	                  |j                  |      |k\  |j                  |      |z
  |z  dk(  z        j                  |gd      S )Nr   r   )r   r   Fr   )r   rj   r]   r   r   r   r   )r:   r   offsetrow_index_tokenr   s        r=   gather_everyzDaskLazyFrame.gather_every  s    8DLLY))+$?V)V3GGO,v5:a?A T?#ET2	
r?   c                ^    | j                  | j                  j                  ||||            S )N)id_vars
value_varsvar_name
value_name)rg   rc   melt)r:   r   indexvariable_namerG  s        r=   unpivotzDaskLazyFrame.unpivot  s:       KK&%	  
 	
r?   c                :    | j                   j                  |       y r4   )rc   
to_parquet)r:   files     r=   sink_parquetzDaskLazyFrame.sink_parquet  s    t$r?   N)r;   dd.DataFramer<   r'   r2   r   returnNone)rD   zdd.DataFrame | AnyrQ  zTypeIs[dd.DataFrame])rJ   rP  rK   r(   rQ  r   )rQ  LazyFrame[dd.DataFrame])rQ  r   )rQ  r%   )rQ  r   )r<   r'   rQ  r   )rf   r   rQ  r   )rk   Sequence[str]rQ  zColumnNotFoundError | None)rQ  zIterator[dx.Series])ru   r!   rQ  r   )r   z_EagerAllowedImpl | Noner   r   rQ  r    )rQ  	list[str])r   r!   rQ  r   )r   strrQ  r   )rk   Sequence[str] | NonerQ  r   )rQ  zdict[str, DType])rj   rT  r   r   rQ  r   )r   rV  r   rW  rQ  r   )r   zMapping[str, str]rQ  r   )r   intrQ  r   )rk   rW  r   r.   r   rW  rQ  r   )r   rV  r   bool | Sequence[bool]r   r   rQ  r   )r   rX  r   zIterable[str]r   rY  rQ  r   )
r  r   r  rT  r  rT  r  rV  rQ  rP  )r  r   r  rV  rQ  rP  )r  r   r  rT  r  rT  rQ  rP  )r  r   r  rU  r  zdict[str, str]rQ  rP  )r  r   r   r-   r  rW  r  rW  r  rV  rQ  r   )r  r   r  rV  r  rV  r1  rW  r2  rW  r3  r,   r  rV  rQ  r   )r8  z"Sequence[str] | Sequence[DaskExpr]r6  r   rQ  r#   )r   rX  r@  rX  rQ  r   )
r   rW  rI  rW  rJ  rV  rG  rV  rQ  r   )rN  zstr | Path | BytesIOrQ  rR  )5__name__
__module____qualname__r   rU   rT   r>   staticmethodrE   classmethodrL   rR   rZ   r]   r`   rd   rg   rl   rq   rw   r   propertyrj   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r$  r  r+  r4  r9  r;  rB  rK  rO  r   exploder_   r?   r=   r1   r1   4   sI    %))O */-&- 	-
 #'- 
- - - 3 3;"4
<9CI(/(;>(	(T $ $8
)
%
%! 	# 	#D
WFW)$) !	)
 ') 
)2

 	
	
'4	
@M	
WZ	
		
11'41@M1WZ1	1"

'4
@M
WZ
	
$
 



'4

@M

	

VV'4V@MV	V(

.7
JX
	
"!)!) 	!)
 &!) '!) !) 
!)F

 	

 
 &
 '
 #
 
 

2J6JKOJ	J	'


 
 $
 	

 
 

 % Gr?   r1   )r!   rP  rS  )H
__future__r   typingr   r   dask.dataframe	dataframerB   narwhals._dask.utilsr   r   narwhals._expression_parsingr   narwhals._pandas_like.utilsr	   r
   narwhals._typing_compatr   narwhals._utilsr   r   r   r   r   r   r   r   r   narwhals.typingr   collections.abcr   r   r   r   ior   pathlibr   typesr   dask.dataframe.dask_expr	dask_exprdxtyping_extensionsr   r   r   narwhals._compliant.typingr    narwhals._dask.exprr!   r7  r#   r\   r%   narwhals._typingr&   r'   r(   narwhals.dataframer)   narwhals.dtypesr*   narwhals.exceptionsr+   r,   r-   r.   r/   __annotations__r1   r_   r?   r=   <module>rz     s    " %  > 1 X 0
 
 
 /EE ))99@,7628,%7RR
I J LMJ r?   