
    hhMH                       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          ZGdS )    )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	d}d            Z
d~dZddZddZddZddZddZdd#Zdd%Zdd(Zdd-Zedd/            Zdd1Zdd4Zdd5Zdd6Zdd8Zedd:            Zdd;Zdd>ZddAZddDZ ddGZ!ddJZ"ddOZ#ddSZ$ddXZ%ddYZ&ddZZ'dd[Z(dd\Z)dd]Z*ddaZ+dddZ,ddiZ-ddnZ.ddoZ/ddqZ0ddvZ1ddyZ2 e3            Z4dzS )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       O/var/www/histauto/venv/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   exprsr!   c           	         t          | g|R  }|                      | j        j        di t	          |                    S )Nrf   )r   rn   rj   assigndict)r@   r|   
new_seriess      rA   with_columnszDaskLazyFrame.with_columnso   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.collects   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      )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                   |(|                      t          | j        |                    S |                                 }| j        }|                    dd                               |                              t          j	                  }|
                    |                              d                              g |          dz
  }|                     |                              | |j
        |           S )Nr   )valuedtypeF)reverse)partition_byr   )rn   r   rj   rd   rt   litalias	broadcastr   LITERALr   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))++,WW1DW1177==GGHXYY
GGDMM!!%!00552PX5YY 	   ,,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nlargestlenr  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               N    | j                             |j         ||dd|f          S )Nr    r  r  r   suffixes)rj   r   )r@   r  r  r  r  s        rA   _join_innerzDaskLazyFrame._join_inner$  s8     {  L&\ ! 
 
 	
rC   c                     j                             |j         d||df          } fdt          ||          D             }|                    |          S )N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>9  sM     
 
 
#)H$$ #$,66IIy<R&<R<R$$$rC   r   )rj   r   r   r   )r@   r  r  r  r  result_nativeextras   `   `  rA   
_join_leftzDaskLazyFrame._join_left/  s     ))L&\ * 
 

 
 
 
 
'1'8'D'D
 
 

 !!%!000rC   c                  t          |||          }|j                            |          }t          |j                   t          |                                          }| j                            |||dd|f          S )Nr   outerr  r  )r   rj   r   r   rt   r   valuesr   )r@   r  r  r  r  right_on_mapperother_nativeright_suffixeds           rA   
_join_fullzDaskLazyFrame._join_full@  s     06JJ|**?*CC%l&:;;;o446677{  #&\ ! 
 
 	
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_crossR  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||          S )Nr  columns_to_selectcolumns_mappingr   )r   r  r  )_join_filter_renamer   r   ziprj   r   )r@   r  r  r  r/  s        rA   
_join_semizDaskLazyFrame._join_semib  si     //"8nn Xw!7!788 0 
 

 {  gw ! 
 
 	
rC   c          
     P   t          dg | j        |j        R d          }|                     |t          |          t	          t          ||                              }| j                            |d|||          }|||         dk                                 |g          S )	Nr   join_indicator_r   r7  r#  )r   	indicatorr  r  	left_onlyr   )	r   rt   r:  r   r   r;  rj   r   r   )r@   r  r  r  indicator_tokenr/  rl   s          rA   
_join_antizDaskLazyFrame._join_antin  s     9>>>>GX
 
 
 //"8nn Xw!7!788 0 
 

 [%  
 
 "_%45::OCT:UUUrC   r8  r9  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  r8  r9  r/  s        rA   r:  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)	r5  r   r!  rB  r<  r*  r1  r   rn   )r@   r  r   r  r  r  r   s          rA   joinz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  rK  rL  rM  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"   )rV  )narwhals._dask.group_byr#   )r@   rT  rV  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   r[  zDaskLazyFrame.tail  s]    {#/1$$T[%5%55%5%I%IJJJZ 	 "#&&&rC   offsetc                F   t          d| j        d          }|                                 }|                     |d                               |                    |          |k    |                    |          |z
  |z  dk    z                                |gd          S )Nr   
row_index_r   )r   r   Fr   )r   rt   rd   r   r   r   r   )r@   r   r_  row_index_tokenr   s        rA   gather_everyzDaskLazyFrame.gather_every  s    8t|L
 
 
 ))++$??V))V3GGO,,v5:a?A  T?#ET22	
rC   r   indexvariable_name
value_namec                d    |                      | j                            ||||                    S )N)id_vars
value_varsvar_namerf  )rn   rj   melt)r@   r   rd  re  rf  s        rA   unpivotzDaskLazyFrame.unpivot  sB       K&%	   
 
 	
rC   filestr | Path | BytesIOc                :    | j                             |           d S r:   )rj   
to_parquet)r@   rm  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   )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   r8  r   r9  rC  r7   r4   )r  r   r   r-   r  r   r  r   r  r   r7   r   )r  r   r  r   r  r   rK  r   rL  r   rM  r,   r  r   r7   r   )rT  rU  rV  r6   r7   r#   )r   r   r_  r   r7   r   )
r   r   rd  r   re  r   rf  r   r7   r   )rm  rn  r7   r8   )5__name__
__module____qualname__r   r\   r[   rB   staticmethodrK   classmethodrR   rY   ra   rd   rg   rk   rn   ru   r{   r   r   propertyrt   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r!  r*  r1  r5  r<  rB  r:  rJ  rS  rY  r[  rc  rl  rq  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"
 
 
 
$
 
 
 
 

 

 

 

V V V V(
 
 
 
"!) !) !) !)F
 
 
 
2J J J J	' 	' 	' 	'
 
 
 

 
 
 
 % % % % oGGGrC   r1   )r!   r4   rS   )H
__future__r   typingr   r   dask.dataframe	dataframerI   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!   rX  r#   rc   r%   narwhals._typingr&   r'   r(   narwhals.dataframer)   narwhals.dtypesr*   narwhals.exceptionsr+   r,   r-   r.   r/   __annotations__r1   rf   rC   rA   <module>r     s   " " " " " " " % % % % % % % %       > > > > > > > > 1 1 1 1 1 1 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
    N  N  N  N  N LMN  N  N  N  N rC   