
    }iM                       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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 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m@Z@ d dlmAZAmBZBmCZC dZDdeEd<   	  G d ded         e          ZFdS )    )annotations)TYPE_CHECKINGAnyN)add_row_indexevaluate_exprs)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)MultiOutputExpressionError)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	dd            Z
ddZddZddZddZddZddZdd#Zdd%Zdd(Zdd*Zdd/Zedd1            Zdd3Zdd6Zdd7Zdd8Zdd:Zedd<            Zdd=Zdd@ZddCZ ddFZ!ddIZ"ddLZ#ddQZ$ddUZ%ddZZ&dd[Z'dd\Z(dd]Z)dd^Z*dd_Z+ddcZ,ddfZ-ddkZ.ddpZ/ddqZ0ddsZ1ddxZ2dd{Z3 e4            Z5d|S )DaskLazyFrameF)validate_backend_versionnative_dataframedd.DataFrameversionr'   r2   boolreturnNonec               n    || _         || _        d | _        d | _        |r|                                  d S d S N)_native_frame_version_cached_schema_cached_columns_validate_backend_version)selfr3   r5   r2   s       L/home/jrussi/.local/lib/python3.11/site-packages/narwhals/_dask/dataframe.py__init__zDaskLazyFrame.__init__:   sM     ,<7;15# 	-**,,,,,	- 	-    objdd.DataFrame | AnyTypeIs[dd.DataFrame]c                6    t          | t          j                  S r:   )
isinstancedd	DataFrame)rD   s    rA   
_is_nativezDaskLazyFrame._is_nativeH   s    #r|,,,rC   datacontextr(   r   c              &     | ||j                   S Nr5   )r<   )clsrL   rM   s      rA   from_nativezDaskLazyFrame.from_nativeL   s    s4!12222rC   LazyFrame[dd.DataFrame]c                :    | j                             | d          S )Nlazy)level)r<   	lazyframer@   s    rA   to_narwhalszDaskLazyFrame.to_narwhalsP   s    }&&t6&:::rC   r   c                    | j         t          j        u r| j                                         S dt	          | j                    }t          |          )NzExpected dask, got: )_implementationr   DASKto_native_namespacetypeAssertionError)r@   msgs     rA   __native_namespace__z"DaskLazyFrame.__native_namespace__S   sN    >#666';;===AT$*>%?%?AAS!!!rC   r%   c                0    ddl m}  || j                  S )Nr   r$   rP   )narwhals._dask.namespacer%   r<   )r@   r%   s     rA   __narwhals_namespace__z$DaskLazyFrame.__narwhals_namespace__Z   s)    ::::::}T]3333rC   c                    | S r:    rX   s    rA   __narwhals_lazyframe__z$DaskLazyFrame.__narwhals_lazyframe___   s    rC   c                :    |                      | j        |          S rO   )	__class__native)r@   r5   s     rA   _with_versionzDaskLazyFrame._with_versionb   s    ~~dk7~;;;rC   dfr   c                :    |                      || j                  S rO   )ri   r<   )r@   rl   s     rA   _with_nativezDaskLazyFrame._with_nativee   s    ~~b$-~888rC   subsetSequence[str]ColumnNotFoundError | Nonec                .    t          || j                  S )N)	available)r   columns)r@   ro   s     rA   _check_columns_existz"DaskLazyFrame._check_columns_existh   s    "6T\BBBBrC   Iterator[dx.Series]c              #  P   K   | j                                         D ]	\  }}|V  
d S r:   )rj   items)r@   _colsers      rA   _iter_columnszDaskLazyFrame._iter_columnsk   s<      **,, 	 	ID#IIII	 	rC   r!   	dx.Seriesc                    |                     |           }t          |          dk    rd}t          |          |d         S )N   z4multi-output expressions not allowed in this contextr   )_calllenr   )r@   rD   resultsr`   s       rA   _evaluate_single_output_exprz*DaskLazyFrame._evaluate_single_output_expro   s?    ))D//w<<1HC,S111qzrC   exprsc           	         t          | g|R  }|                      | j        j        di t	          |                    S )Nrf   )r   rn   rj   assigndict)r@   r   
new_seriess      rA   with_columnszDaskLazyFrame.with_columnsv   sI    #D15111
  !3!3!G!Gd:6F6F!G!GHHHrC   backend_EagerAllowedImpl | Nonekwargsr    c                    | j         j        d
i |}||t          j        u r%ddlm}  ||t          j        d| j        d          S |t          j        u r0dd l}ddl	m
}  ||                    |          d| j                  S |t          j        u r6dd l}ddlm}  ||j                            |          d| j        d          S d	| }	t#          |	          )Nr   )PandasLikeDataFrameT)implementationr2   r5   validate_column_names)PolarsDataFrame)r2   r5   )ArrowDataFrame)r2   r5   r   zUnsupported `backend` value: rf   )rj   computer   PANDASnarwhals._pandas_like.dataframer   r<   POLARSpolarsnarwhals._polars.dataframer   from_pandasPYARROWpyarrownarwhals._arrow.dataframer   Table
ValueError)
r@   r   r   resultr   plr   par   r`   s
             rA   collectzDaskLazyFrame.collectz   sN    %$..v..?g)>>>KKKKKK&&-4)-&*    n+++BBBBBB"?v&&)-    n,,,    @@@@@@!>$$V,,)-&*	    8g77oorC   	list[str]c                    | j         >| j        t          | j                  n| j        j                                        | _         | j         S r:   )r>   r=   listschemarj   rt   tolistrX   s    rA   rt   zDaskLazyFrame.columns   sO    ' &2 T[!!![(//11  
 ##rC   	predicatec                n     ||           d         }|                      | j        j        |                   S )Nr   )rn   rj   loc)r@   r   masks      rA   filterzDaskLazyFrame.filter   s1    yq!  !6777rC   column_namesstrc                    | j         }t          |t          |          | j                  }|                     |          S r:   )rj   r	   r   r[   rn   )r@   r   rl   rj   s       rA   simple_selectzDaskLazyFrame.simple_select   s9    'D,>,>@TUU  (((rC   c                    t          | g|R  }t          j        d |D             d          }|                     |          S )Nc                >    g | ]\  }}|                     |          S rf   )rename).0namevals      rA   
<listcomp>z+DaskLazyFrame.aggregate.<locals>.<listcomp>   s(    EEEYT3

4((EEErC   r~   axis)r   rI   concatrn   r@   r   r   rl   s       rA   	aggregatezDaskLazyFrame.aggregate   sN    #D15111
YEE*EEEANNN  $$$rC   c           	         t          | g|R  }| j        }t           |j        di t	          |          d |D             | j                  }|                     |          S )Nc                    g | ]
}|d          S )r   rf   )r   ss     rA   r   z(DaskLazyFrame.select.<locals>.<listcomp>   s    &&&aQqT&&&rC   rf   )r   rj   r	   r   r   r[   rn   r   s       rA   selectzDaskLazyFrame.select   sw    #D15111
#BI))Z(())&&:&&& 
 

   $$$rC   Sequence[str] | Nonec                   |,|                      | j                                                  S |                                 }|                     |j        |                                 d           }|                     |          S )NT)ignore_nulls)rn   rj   dropnard   any_horizontalcolis_nullr   )r@   ro   plxr   s       rA   
drop_nullszDaskLazyFrame.drop_nulls   s|    >$$T[%7%7%9%9:::))++""737F#3#;#;#=#=D"QQQ{{4   rC   dict[str, DType]c                v      j         * j        j         fd j        j        D              _          j         S )Nc                T    i | ]$}|t          |         j        j                  %S rf   )r   r<   r[   )r   r   native_dtypesr@   s     rA   
<dictcomp>z(DaskLazyFrame.schema.<locals>.<dictcomp>   sI     # # #  -!#&t7K # # #rC   )r=   rj   dtypesrt   )r@   r   s   `@rA   r   zDaskLazyFrame.schema   sY    & K.M# # # # #  ;.	# # #D ""rC   c                    | j         S r:   )r   rX   s    rA   collect_schemazDaskLazyFrame.collect_schema   s
    {rC   rt   strictc                   t          | ||          }|                     | j                            |                    S )Nr   rt   )r   rn   rj   drop)r@   rt   r   to_drops       rA   r   zDaskLazyFrame.drop   s=    'gfEEE  !1!1'!1!B!BCCCrC   r   order_byc                6   |(|                      t          | j        |                    S |                                 }| j        }|                    dd                               |                                          }|                    |          	                    d          
                    g |          |                    dd                                           z
  }|                     |                              | |j        |           S )Nr~   dtypeF)reverse)partition_byr   )rn   r   rj   rd   rt   litalias	broadcastr   cum_sumoverr   r   )r@   r   r   r   rt   
const_exprrow_index_exprs          rA   with_row_indexzDaskLazyFrame.with_row_index   s     $$]4;%E%EFFF))++,WWQdW++11$77AACC
GGDMM!!%!00552PX5YYggatg$$..001 	   ,,33NGCGWDUVVVrC   mappingMapping[str, str]c                ^    |                      | j                            |                    S )Nr   )rn   rj   r   )r@   r   s     rA   r   zDaskLazyFrame.rename   s)      !3!3G!3!D!DEEErC   nintc                b    |                      | j                            |dd                    S )NFr   r   npartitions)rn   rj   head)r@   r   s     rA   r   zDaskLazyFrame.head   s.      !1!1AuRT!1!U!UVVVrC   keepr.   c               ^   |r|                      |          x}r||dk    r|p| j        }t          d|d          }| j                            |                                                              |          }||dk             }|                                                    |          }| j        	                    ||d          }nLd	d
i
                    ||          }	|r | j        |dddj        }
n| j        }
|
                    ||	          }|                     |          S )Nnone   count_n_bytesrt   prefixr~   r   inner)onhowanyfirstF)
descending
nulls_last)ro   r   )ru   rt   r   rj   groupbysizer   reset_indexr   mergegetsortdrop_duplicatesrn   )r@   ro   r   r   errortokenrz   uniquer   mapped_keeprj   s              rA   r  zDaskLazyFrame.unique   sI     	 9 9& A AAu 	K6>>+t|F26(  E +%%f--2244;;EBBCcQh-C__&&++E+::F[&&v&g&FFFF '*..tT::K %"H5QQQX++6+LLF  (((rC   byr   bool | Sequence[bool]r   c                   t          |t                    r| }nd |D             }|rdnd}|                     | j                            t          |          ||                    S )Nc                    g | ]}| S rf   rf   )r   ds     rA   r   z&DaskLazyFrame.sort.<locals>.<listcomp>  s    3331Q333rC   lastr   )	ascendingna_position)rH   r6   rn   rj   sort_valuesr   )r@   r   r   r	  r  positions         rA   r  zDaskLazyFrame.sort  sv    j$'' 	4/9>II33
333I'466W  K##DHH	x#XX
 
 	
rC   kIterable[str]r   c               0   | j         }| j        t          |          }t          |t                    rot          fd|D                       rT|r)|                     |                    ||                    S |                     |                    ||                    S t          |t                    r|gt          |          z  }|                     |
                    |t          |                                        |dd                    S )Nc              3  L   K   | ]}|                                          V  d S r:   )
is_numeric)r   xr   s     rA   	<genexpr>z&DaskLazyFrame.top_k.<locals>.<genexpr>  s3      ,P,PVAY-A-A-C-C,P,P,P,P,P,PrC   )r  Fr   r   )rj   r   r   rH   r6   allrn   	nsmallestnlargestr   r  r   )r@   r  r	  r   rl   r   s        @rA   top_kzDaskLazyFrame.top_k  s   ["XXgt$$ 	9,P,P,P,PR,P,P,P)P)P 	9 >((a)<)<===$$R[[B%7%7888gt$$ 	*i#b'')G  NN2gN77<<U =  
 
 	
rC   otherleft_onright_onsuffixc               x    | j                             |d                              |j         ||dd|f          S )Nr   ro   r   r    r  r   r   suffixes)rj   r   r  )r@   r  r  r   r!  s        rA   _join_innerzDaskLazyFrame._join_inner+  sL     {!!e!<<BBL&\ C 
 
 	
rC   c                     j                             |j                             |d          d||df          } fdt          ||          D             }|                    |          S )Nr   r#  leftr$  r   r  r   r&  c                D    g | ]\  }}||k    |j         vr|n|  S rf   r   )r   left_key	right_keyr@   r!  s      rA   r   z,DaskLazyFrame._join_left.<locals>.<listcomp>@  sM     
 
 
#)H$$ #$,66IIy<R&<R<R$$$rC   r   )rj   r  r   r   r   )r@   r  r  r   r!  result_nativeextras   `   `  rA   
_join_leftzDaskLazyFrame._join_left6  s     ))LxU;;&\ * 
 

 
 
 
 
'1'8'D'D
 
 

 !!%!000rC   c                  | j         }t          ||          }|j                             |          }t          |j                   t          |                                          }|t          |                                                                       d          }	||                                                             d          }
t          |j                  
                    | j                                      |          }||
                             fd|D                       }||	                              ||
          ||ddf          }t          j        |||	         |gdd	          S )
Nr   r~   r   c                    i | ]	}||  
S rf   rf   )r   r   r!  s     rA   r   z,DaskLazyFrame._join_full.<locals>.<dictcomp>X  s&    @@@sSS*&**@@@rC   outerr$  r%  r   )r   join)rj   r   r   r   rt   r   valuesisnar   setintersection
differencer  rI   r   )r@   r  r  r   r!  self_nativeright_on_mapperother_nativeright_suffixedleft_null_maskright_null_mask	to_renameright_null_rowsjoin_results       `         rA   
_join_fullzDaskLazyFrame._join_fullG  s   
 k/6JJ|**?*CC%l&:;;;o446677$T']]388::>>A>FF&~6;;==AAqAII &&33DLAALLXVV	&7>>@@@@i@@@ ? 
 
 ">/288/)*#&\ 9 
 
 y+n5G
 
 
 	
rC   c                   t          dg | j        |j        R d          } | j        j        d	i |di                     |j        j        d	i |did||d|f                              |          S )
Nr   cross_join_key_r   r   r   r$  r*  r   rf   )r   rt   rj   r   r  r   )r@   r  r!  	key_tokens       rA   _join_crosszDaskLazyFrame._join_crossh  s    2>>>>GX
 
 
	 DK00)Q00U##55y!n55!"f    T)T$$
	
rC   c          
         |                      |t          |          t          t          ||                              }| j                            |d                              |d||          S )Nr  columns_to_selectcolumns_mappingr   r#  r   )r   r  r   )_join_filter_renamer   r   ziprj   r   r  )r@   r  r  r   r<  s        rA   
_join_semizDaskLazyFrame._join_semix  s}     //"8nn Xw!7!788 0 
 

 {!!e!<<BBgw C 
 
 	
rC   c          
     z   t          dg | j        |j        R d          }|                     |t          |          t	          t          ||                              }| j                            |                    |d          d|||          }|||         d	k             	                    |g
          S )Nr   join_indicator_r   rI  r   r#  r)  )r   	indicatorr  r   	left_onlyr   )
r   rt   rL  r   r   rM  rj   r  r   r   )r@   r  r  r   indicator_tokenr<  rl   s          rA   
_join_antizDaskLazyFrame._join_anti  s     9>>>>GX
 
 
 //"8nn Xw!7!788 0 
 

 [wE::%  
 
 "_%45::OCT:UUUrC   rJ  rK  dict[str, str]c                    |j         }t          ||| 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   )rj   r	   r[   r   r  )r@   r  rJ  rK  r<  s        rA   rL  z!DaskLazyFrame._join_filter_rename  s?     $)< #<1BDDXYYVOV,,_	
rC   r   r-   c                  |dk    r|                      ||          }n||t          ||          |dk    r|                     ||||          }n|dk    r|                     |||          }nn|dk    r|                     |||          }nO|dk    r|                     ||||          }n/|d	k    r|                     ||||          }nt          |           |                     |          S )
Ncross)r  r!  r   )r  r  r   r!  anti)r  r  r   semir)  full)	rG  r   r'  rT  rN  r0  rC  r
   rn   )r@   r  r   r  r   r!  r   s          rA   r4  zDaskLazyFrame.join  s3    '>>%%E&%AAFF_ 0Wh///G^^%%Wx &  FF F]]__5'H_UUFFF]]__5'H_UUFFF]]__Wx %  FF F]]__Wx %  FF   (((rC   by_leftby_rightstrategyr,   c                   |                                  }|                     |                    | j        |j        |||||d|f                    S )Nr$  )r  r   left_byright_by	directionr&  )ra   rn   
merge_asofrj   )	r@   r  r  r   r\  r]  r^  r!  r   s	            rA   	join_asofzDaskLazyFrame.join_asof  sc     ''))  NN!!"f  	 	
 
 	
rC   keys"Sequence[str] | Sequence[DaskExpr]drop_null_keysr#   c               *    ddl m}  || ||          S )Nr   r"   )rg  )narwhals._dask.group_byr#   )r@   re  rg  r#   s       rA   group_byzDaskLazyFrame.group_by  s-     	<;;;;;tT.IIIIrC   c                    | j         }|j        }|dk    r/|                     | j                             |d                    S d}t	          |          )Nr~   F)r   r   zL`LazyFrame.tail` is not supported for Dask backend with multiple partitions.)rj   r   rn   tailNotImplementedError)r@   r   native_framen_partitionsr`   s        rA   rl  zDaskLazyFrame.tail  s]    {#/1$$T[%5%55%5%I%IJJJZ 	 "#&&&rC   offsetc                <   t          d| j        d          }|                                 }|                    |d                                           }|                    |d                                           }|                    dd                                           }|                     |d                               |                    |          |k    |                    |          |z
  |z  |k    z                                |gd          S )	Nr   
row_index_r   r   r   )r   Fr   )	r   rt   rd   r   r   r   r   r   r   )r@   r   rp  row_index_tokenr   offset_exprn_expr	zero_exprs           rA   gather_everyzDaskLazyFrame.gather_every  s   8t|L
 
 
 ))++ggfDg11;;==$''1133GGATG**4466	$??V))[8GGO,,{:fD	QS  T?#ET22	
rC   r   indexvariable_name
value_namec                d    |                      | j                            ||||                    S )N)id_vars
value_varsvar_namerz  )rn   rj   melt)r@   r   rx  ry  rz  s        rA   unpivotzDaskLazyFrame.unpivot  sB       K&%	   
 
 	
rC   filestr | Path | BytesIOc                :    | j                             |           d S r:   )rj   
to_parquet)r@   r  s     rA   sink_parquetzDaskLazyFrame.sink_parquet  s    t$$$$$rC   N)r3   r4   r5   r'   r2   r6   r7   r8   )rD   rE   r7   rF   )rL   r4   rM   r(   r7   r   )r7   rS   )r7   r   )r7   r%   )r7   r   )r5   r'   r7   r   )rl   r   r7   r   )ro   rp   r7   rq   )r7   rv   )rD   r!   r7   r|   )r   r!   r7   r   )r   r   r   r   r7   r    )r7   r   )r   r!   r7   r   )r   r   r7   r   )ro   r   r7   r   )r7   r   )rt   rp   r   r6   r7   r   )r   r   r   r   r7   r   )r   r   r7   r   )r   r   r7   r   )ro   r   r   r.   r   r   r7   r   )r	  r   r   r
  r   r6   r7   r   )r  r   r	  r  r   r
  r7   r   )
r  r   r  rp   r   rp   r!  r   r7   r4   )r  r   r!  r   r7   r4   )r  r   r  rp   r   rp   r7   r4   )r  r   rJ  r   rK  rU  r7   r4   )r  r   r   r-   r  r   r   r   r!  r   r7   r   )r  r   r  r   r   r   r\  r   r]  r   r^  r,   r!  r   r7   r   )re  rf  rg  r6   r7   r#   )r   r   rp  r   r7   r   )
r   r   rx  r   ry  r   rz  r   r7   r   )r  r  r7   r8   )6__name__
__module____qualname__r   r\   r[   rB   staticmethodrK   classmethodrR   rY   ra   rd   rg   rk   rn   ru   r{   r   r   r   propertyrt   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r'  r0  rC  rG  rN  rT  rL  r4  rd  rj  rl  rw  r  r  r   exploderf   rC   rA   r1   r1   4   s        %)O */- - - - - - - - - \- 3 3 3 [3; ; ; ;" " " "4 4 4 4
   < < < <9 9 9 9C C C C      I I I I( ( ( (T $ $ $ X$8 8 8 8
) ) ) )
% % % %
% % % %! ! ! ! 	# 	# 	# X	#   D D D D
W W W WF F F FW W W W) ) ) )6
 
 
 

 
 
 
 	
 	
 	
 	
1 1 1 1"
 
 
 
B
 
 
 
 

 

 

 

V V V V(
 
 
 
"!) !) !) !)F
 
 
 
2J J J J	' 	' 	' 	'
 
 
 
"
 
 
 
 % % % % oGGGrC   r1   )r!   r4   rS   )G
__future__r   typingr   r   dask.dataframe	dataframerI   narwhals._dask.utilsr   r   narwhals._pandas_like.utilsr   r	   narwhals._typing_compatr
   narwhals._utilsr   r   r   r   r   r   r   r   r   narwhals.exceptionsr   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!   ri  r#   rc   r%   narwhals._typingr&   r'   r(   narwhals.dataframer)   narwhals.dtypesr*   r+   r,   r-   r.   r/   __annotations__r1   rf   rC   rA   <module>r     s   " " " " " " " % % % % % % % %       > > > > > > > > X X X X X X X X 0 0 0 0 0 0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ; : : : : : . . . . . . SEEEEEEEEEEEE      )))))))))9999999999@@@@@@,,,,,,77777766666622222288888888,,,,,,%%%%%%777777RRRRRRRRRR
    g  g  g  g  g LMg  g  g  g  g rC   