Ë
    ÚÍ:jkP  ã                  óæ  — d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	 d dl
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mZmZmZmZmZmZ d d
l m!Z! d dl"m#Z# er€d 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/Z0d dl1Z2d dl
m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ d dlmAZA d dlBmCZC d dlmDZD d dlEmFZF d dlGmHZH d dlImJZK d dlLmMZMmNZNmOZO  G d„ ded    e«      ZPy)!é    )Úannotations)Úreduce)Úand_)ÚTYPE_CHECKINGÚAnyÚLiteralN)ÚStarExpression)	ÚDeferredTimeZoneÚFÚcatch_duckdb_exceptionÚcolÚevaluate_exprs_and_aliasesÚjoin_column_namesÚlitÚnative_to_narwhals_dtypeÚwindow_expression)ÚSQLLazyFrame)ÚImplementationÚValidateBackendVersionÚVersionÚextend_boolÚgenerate_temporary_column_nameÚparse_columns_to_dropÚrequires©Ú
get_duckdb)ÚInvalidOperationError)ÚIterableÚIteratorÚMappingÚSequence)ÚBytesIO)ÚPath)Ú
ModuleType)Ú
Expression)ÚSelfÚTypeIs)ÚCompliantDataFrameAny)Ú
DuckDBExpr©ÚDuckDBGroupBy©ÚDuckDBNamespace©ÚDuckDBInterchangeSeries)Úduckdb_dtypes)Ú_EagerAllowedImpl)Ú_LimitedContext)Ú	LazyFrame)ÚDType©Ú	DataFrame)ÚAsofJoinStrategyÚJoinStrategyÚUniqueKeepStrategyc                  óZ  — e Zd Zej                  Zddœ	 	 	 	 	 	 	 d,d„Zed-d„«       Ze	d.d„«       Z
e	 	 	 	 	 	 d/d„«       Z	 	 	 	 	 	 d0d„Zd1d„Zd1d	„Zd2d
„Zd3d„Zd4d„Zd5d„Z	 	 	 	 	 	 d6d„Zd7d„Zd8d„Zd9d„Zd9d„Zd:d„Zd;d<d„Zd9d„Zd=d„Zed>d„«       Zed?d„«       Zd@d„ZdAd„Z dBd„Z!dCd„Z"	 	 	 	 	 	 dDd„Z#dEd„Z$	 	 	 	 	 	 	 	 	 	 	 	 dFd „Z%	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dGd!„Z&d>d"„Z'	 	 	 	 	 	 	 	 dHd#„Z(dId$„Z)dJd%„Z*dKd&„Z+dLd'„Z,	 	 	 	 	 	 	 	 	 	 dMd(„Z- e.j^                  d)«      dNd*„«       Z0dOd+„Z1y)PÚDuckDBLazyFrameF)Úvalidate_backend_versionc               ób   — || _         || _        d | _        d | _        |r| j	                  «        y y ©N)Ú_native_frameÚ_versionÚ_cached_native_schemaÚ_cached_columnsÚ_validate_backend_version)ÚselfÚdfÚversionr<   s       úo/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/narwhals/_duckdb/dataframe.pyÚ__init__zDuckDBLazyFrame.__init__E   s7   € ð 79ˆÔØˆŒØSWˆÔ"Ø15ˆÔÙ#Ø×*Ñ*Õ,ð $ó    c                ó6   — | j                   j                  «       S r>   )Ú_implementationÚ_backend_version©rD   s    rG   rL   z DuckDBLazyFrame._backend_versionS   s   € à×#Ñ#×4Ñ4Ó6Ð6rI   c                ó6   — t        | t        j                  «      S r>   )Ú
isinstanceÚduckdbÚDuckDBPyRelation)Úobjs    rG   Ú
_is_nativezDuckDBLazyFrame._is_nativeW   s   € ä˜#œv×6Ñ6Ó7Ð7rI   c              ó*   —  | ||j                   ¬«      S ©N©rF   )r@   )ÚclsÚdataÚcontexts      rG   Úfrom_nativezDuckDBLazyFrame.from_native[   s   € ñ �4 ×!1Ñ!1Ô2Ð2rI   c                ó”   — | j                   t        j                  u rddlm}  || d¬«      S | j                   j                  | d¬«      S )Nr   r5   Úinterchange)ÚlevelÚlazy)r@   r   ÚV1Únarwhals.stable.v1r6   Ú	lazyframe)rD   ÚargsÚkwdsÚDataFrameV1s       rG   Úto_narwhalszDuckDBLazyFrame.to_narwhalsa   s>   € ð �=‰=œGŸJ™JÑ&ÝCá˜t¨=Ô9Ð9Ø�}‰}×&Ñ& t°6Ð&Ó:Ð:rI   c                óX   — | j                   t        j                  urd}t        |«      ‚| S )Nz=__narwhals_dataframe__ is not implemented for DuckDBLazyFrame)r@   r   r_   ÚAttributeError)rD   Úmsgs     rG   Ú__narwhals_dataframe__z&DuckDBLazyFrame.__narwhals_dataframe__j   s'   € à�=‰=¤§
¡
Ñ*ØQˆCÜ  Ó%Ð%ØˆrI   c                ó   — | S r>   © rM   s    rG   Ú__narwhals_lazyframe__z&DuckDBLazyFrame.__narwhals_lazyframe__q   s   € ØˆrI   c                ó   — t        «       S r>   r   rM   s    rG   Ú__native_namespace__z$DuckDBLazyFrame.__native_namespace__t   s
   € Ü‹|ÐrI   c                ó4   — ddl m}  || j                  ¬«      S )Nr   r,   rV   )Únarwhals._duckdb.namespacer-   r@   )rD   r-   s     rG   Ú__narwhals_namespace__z&DuckDBLazyFrame.__narwhals_namespace__w   s   € Ý>á t§}¡}Ô5Ð5rI   c                óh   — ddl m}  || j                  j                  |«      | j                  ¬«      S )Nr   r.   rV   )Únarwhals._duckdb.seriesr/   ÚnativeÚselectr@   )rD   Únamer/   s      rG   Ú
get_columnzDuckDBLazyFrame.get_column|   s%   € ÝCá& t§{¡{×'9Ñ'9¸$Ó'?ÈÏÉÔWÐWrI   c              #  óH   K  — | j                   D ]  }t        |«      –— Œ y ­wr>   )Úcolumnsr   )rD   rv   s     rG   Ú_iter_columnszDuckDBLazyFrame._iter_columns�   s"   è ø€ Ø—L‘Lò 	ˆDÜ�d“)‹Oñ	ùs   ‚ "c                ó<  — |�|t         j                  u r_ddlm} | j                  dk\  r| j
                  j                  «       n| j
                  j                  «       } ||d| j                  d¬«      S |t         j                  u rCddl
m}  || j
                  j                  «       t         j                  d| j                  d¬«      S |t         j                  u r3ddlm}  || j
                  j!                  «       d| j                  ¬	«      S d
|› �}t#        |«      ‚)Nr   )ÚArrowDataFrame)é   é   T)r<   rF   Úvalidate_column_names)ÚPandasLikeDataFrame)Úimplementationr<   rF   r   )ÚPolarsDataFrame)r<   rF   zUnsupported `backend` value: )r   ÚPYARROWÚnarwhals._arrow.dataframer|   rL   rt   Úto_arrow_tableÚfetch_arrow_tabler@   ÚPANDASÚnarwhals._pandas_like.dataframer€   rE   ÚPOLARSÚnarwhals._polars.dataframer‚   ÚplÚ
ValueError)rD   ÚbackendÚkwargsr|   Ú
res_nativer€   r‚   rh   s           rG   ÚcollectzDuckDBLazyFrame.collect…   s  € ð ˆ?˜g¬×)?Ñ)?Ñ?Ý@ð ×(Ñ(¨FÒ2ð —‘×*Ñ*Ô,à—[‘[×2Ñ2Ó4ð ñ
 "ØØ)-ØŸ™Ø&*ô	ð ð ”n×+Ñ+Ñ+ÝKá&Ø—‘—‘Ó Ü-×4Ñ4Ø)-ØŸ™Ø&*ôð ð ”n×+Ñ+Ñ+ÝBá"Ø—‘—‘Ó ¸4ÈÏÉôð ð .¨g¨YÐ7ˆÜ˜‹oÐrI   c                óV   — | j                  | j                  j                  |«      «      S r>   )Ú_with_nativert   Úlimit)rD   Úns     rG   ÚheadzDuckDBLazyFrame.head¬   s"   € Ø× Ñ  §¡×!2Ñ!2°1Ó!5Ó6Ð6rI   c                óR   — | j                   | j                  j                  |Ž «      S r>   )r’   rt   ru   )rD   Úcolumn_namess     rG   Úsimple_selectzDuckDBLazyFrame.simple_select¯   s%   € Ø× Ñ Ð!3 §¡×!3Ñ!3°\Ð!BÓCÐCrI   c                óú   — t        | g|¢­Ž D ��cg c]  \  }}|j                  |«      ‘Œ }}}	 | j                  | j                  j	                  |«      «      S c c}}w # t
        $ r}t        || «      d ‚d }~ww xY wr>   )r   Úaliasr’   rt   Ú	aggregateÚ	Exceptionr   )rD   Úexprsrv   ÚvalÚ	selectionÚes         rG   r›   zDuckDBLazyFrame.aggregate²   s}   € ä-GÈÐ-UÈuÒ-U÷
Ù )  cˆC�I‰I�d�Oð
ˆ	ñ 
ð	<Ø×$Ñ$ T§[¡[×%:Ñ%:¸9Ó%EÓFÐFùó	
øô
 ò 	<Ü(¨¨DÓ1°tÐ;ûð	<ús   �A¯)A Á	A:Á(A5Á5A:c                ó¶   — d„ t        | g|¢­Ž D «       }	 | j                   | j                  j                  |Ž «      S # t        $ r}t        || «      d ‚d }~ww xY w)Nc              3  óD   K  — | ]  \  }}|j                  |«      –— Œ y ­wr>   ©rš   )Ú.0rv   rž   s      rG   ú	<genexpr>z)DuckDBLazyFrame.select.<locals>.<genexpr>¼   s!   è ø€ ò 
Ù )  cˆC�I‰I�d�Oñ
ùó   ‚ )r   r’   rt   ru   rœ   r   )rD   r�   rŸ   r    s       rG   ru   zDuckDBLazyFrame.select»   sb   € ñ
Ü-GÈÐ-UÈuÒ-Uô
ˆ	ð	<Ø×$Ñ$Ð%7 T§[¡[×%7Ñ%7¸Ð%CÓDÐDøÜò 	<Ü(¨¨DÓ1°tÐ;ûð	<ús   •'= ½	AÁAÁAc               óÆ   — t        | ||¬«      }| j                  D �cg c]  }||vsŒt        |«      ‘Œ }}| j                   | j                  j
                  |Ž «      S c c}w )N©Ústrict)r   ry   r   r’   rt   ru   )rD   ry   r©   Úcolumns_to_droprv   rŸ   s         rG   ÚdropzDuckDBLazyFrame.dropÄ   s[   € Ü/°°gÀfÔMˆØ+/¯<©<ÖW 4¸4ÀÒ;V”S˜•YÐWˆ	ÐWØ× Ñ Ð!3 §¡×!3Ñ!3°YÐ!?Ó@Ð@ùò Xs
   �	A§ANc                ó$   — |�d}t        |«      ‚| S )Nz.`backend` argument is not supported for DuckDB)rŒ   )rD   r�   Ú_rh   s       rG   r^   zDuckDBLazyFrame.lazyÉ   s   € ð
 ÐØBˆCÜ˜S“/Ð!ØˆrI   c                óœ  — t        t        | g|¢­Ž «      }| j                  D �cg c]1  }||v r |j                  |«      j	                  |«      n
t        |«      ‘Œ3 }}|j                  d„ |j                  «       D «       «       	 | j                   | j                  j                  |Ž «      S c c}w # t        $ r}t        || «      d ‚d }~ww xY w)Nc              3  óD   K  — | ]  \  }}|j                  |«      –— Œ y ­wr>   r£   )r¤   rv   Úvalues      rG   r¥   z/DuckDBLazyFrame.with_columns.<locals>.<genexpr>Û   s   è ø€ ÒS©K¨D°%�e—k‘k $×'ÑSùr¦   )Údictr   ry   Úpoprš   r   ÚextendÚitemsr’   rt   ru   rœ   r   )rD   r�   Únew_columns_maprv   Úresultr    s         rG   Úwith_columnszDuckDBLazyFrame.with_columnsÓ   sÓ   € ÜÔ9¸$ÐGÀÒGÓHˆð
 Ÿ™ö	
ð ð �Ñ&ð ×Ñ Ó%×+Ñ+¨DÔ1ä�T“ñð
ˆð 
ð 	�‰ÑS¸?×;PÑ;PÓ;RÔSÔSð	<Ø×$Ñ$Ð%7 T§[¡[×%7Ñ%7¸Ð%@ÓAÐAùò
øô ò 	<Ü(¨¨DÓ1°tÐ;ûð	<ús   ¤6B+Â'B0 Â0	CÂ9CÃCc                óª   —  || «      d   }	 | j                  | j                  j                  |«      «      S # t        $ r}t	        || «      |‚d }~ww xY w)Nr   )r’   rt   Úfilterrœ   r   )rD   Ú	predicateÚmaskr    s       rG   Ú_filterzDuckDBLazyFrame._filterá   sT   € á˜‹˜qÑ!ˆð	9Ø×$Ñ$ T§[¡[×%7Ñ%7¸Ó%=Ó>Ð>øÜò 	9Ü(¨¨DÓ1°qÐ8ûð	9ús   �)7 ·	AÁ AÁAc           
     ó‚  — | j                   €:t        t        | j                  | j                  j
                  d¬«      «      | _         t        | j                  «      }t        | j                  j                  | j                  j
                  d¬«      D ��ci c]  \  }}|t        || j                  |«      “Œ c}}S c c}}w )NFr¨   T)	rA   r±   Úzipry   rt   Útypesr
   r   r@   )rD   Údeferred_time_zoneÚcolumn_nameÚduckdb_dtypes       rG   ÚschemazDuckDBLazyFrame.schemaé   s©   € à×%Ñ%Ð-ô *.Ü�D—L‘L $§+¡+×"3Ñ"3¸EÔBó*ˆDÔ&ô .¨d¯k©kÓ:Ðô
 .1Ø—‘×#Ñ# T§[¡[×%6Ñ%6¸tô.÷	
ñ *�˜\ð Ô1Ø˜dŸm™mÐ-?óñ ó
ð 	
ùó 
s   Â"B;c                óª   — | j                   €<| j                  �t        | j                  «      n| j                  j
                  | _         | j                   S r>   )rB   rA   ÚlistrÃ   rt   ry   rM   s    rG   ry   zDuckDBLazyFrame.columnsü   sM   € à×ÑÐ'ð ×-Ñ-Ð9ô �T—[‘[Ô!à—[‘[×(Ñ(ð Ô ð
 ×#Ñ#Ð#rI   c                ó6   — | j                   j                  «       S r>   )rt   rE   rM   s    rG   Ú	to_pandaszDuckDBLazyFrame.to_pandas  s   € à�{‰{�~‰~ÓÐrI   c                óp   — | j                  «       j                  t        j                  «      j                  S r>   )r^   r�   r   rƒ   rt   rM   s    rG   Úto_arrowzDuckDBLazyFrame.to_arrow
  s%   € à�y‰y‹{×"Ñ"¤>×#9Ñ#9Ó:×AÑAÐArI   c                ó<   — | j                  | j                  |¬«      S rU   )Ú	__class__rt   )rD   rF   s     rG   Ú_with_versionzDuckDBLazyFrame._with_version  s   € Ø�~‰~˜dŸk™k°7ˆ~Ó;Ð;rI   c                ó<   — | j                  || j                  ¬«      S rU   )rË   r@   )rD   rE   s     rG   r’   zDuckDBLazyFrame._with_native  s   € Ø�~‰~˜b¨$¯-©-ˆ~Ó8Ð8rI   c               ó$   — ddl m}  || ||¬«      S )Nr   r*   )Údrop_null_keys)Únarwhals._duckdb.group_byr+   )rD   ÚkeysrÏ   r+   s       rG   Úgroup_byzDuckDBLazyFrame.group_by  s   € õ 	<á˜T 4¸ÔGÐGrI   c                ó–   ‡— | j                   }ˆfd„|j                  D «       }| j                   | j                   j                  |Ž «      S )Nc              3  óv   •K  — | ]0  }|‰v rt        |«      j                  ‰|   «      n
t        |«      –— Œ2 y ­wr>   )r   rš   )r¤   rv   Úmappings     €rG   r¥   z)DuckDBLazyFrame.rename.<locals>.<genexpr>  s9   øè ø€ ò 
àð /3°g©oŒC�‹I�O‰O˜G D™MÔ*Ä3ÀtÃ9ÓLñ
ùs   ƒ69)rt   ry   r’   ru   )rD   rÕ   rE   rŸ   s    `  rG   ÚrenamezDuckDBLazyFrame.rename  sD   ø€ Ø�[‰[ˆó
àŸ
™
ô
ˆ	ð × Ñ Ð!3 §¡×!3Ñ!3°YÐ!?Ó@Ð@rI   c               óv  — |dk(  rdn|}|dk(  rm| j                   dk  rd| j                   › �}t        |«      ‚| j                  j                  d«      j	                  |j                  j                  d«      «      }ns|€J ‚|€J ‚d„ t        ||d	¬
«      D «       }	t        t        |	«      }
| j                  j                  d«      j                  |j                  j                  d«      |
|¬«      }|dv rþ| j                  D �cg c]  }t        d|› d�«      ‘Œ }}|j                  D ]–  }|| j                  v }|dk(  r!|s|j                  t        d|› d�«      «       Œ7|dk(  s|r8|�||vr2|j                  t        d|› d�«      j                  |› |› �«      «       Œv|�||vsŒ}|j                  t        |«      «       Œ˜  |j                  |Ž j                  | j                  j                  «      }n4|j                  d«      j                  | j                  j                  «      }| j                  |«      S c c}w )NÚfullÚouterÚcross)r}   r}   é   z;'duckdb>=1.1.4' is required for cross-join, found version: ÚlhsÚrhsc              3  ó`   K  — | ]&  \  }}t        d |› d�«      t        d|› d�«      k(  –— Œ( y­w©úlhs."ú"úrhs."N©r   ©r¤   ÚleftÚrights      rG   r¥   z'DuckDBLazyFrame.join.<locals>.<genexpr>9  s<   è ø€ ò á�D˜%ô �e˜D˜6 �OÓ$¬¨e°E°7¸!Ð,<Ó(=Õ=ñùó   ‚,.Tr¨   )Ú	conditionÚhow>   rå   rÚ   ÚinnerrÙ   rà   rá   râ   úlhs.*)rL   ÚNotImplementedErrorrt   Ú	set_aliasrÚ   r¾   r   r   Újoinry   r   Úappendrš   ru   r’   )rD   Úotherré   Úleft_onÚright_onÚsuffixÚ
native_howrh   ÚrelÚitrè   Úxru   rv   Ú
col_in_lhsÚress                   rG   rî   zDuckDBLazyFrame.join#  s)  € ð ˜f’}‰G¨#ð 	ð ˜Ò Ø×$Ñ$ yÒ0ØSÐTX×TiÑTiÐSjÐk�Ü)¨#Ó.Ð.Ø—+‘+×'Ñ'¨Ó.×4Ñ4°U·\±\×5KÑ5KÈEÓ5RÓS‰Cð Ð&Ð&Ð&ØÐ'Ð'Ð'ñä#& w°ÀÔ#FôˆBô %+¬4°Ó$4ˆIØ—+‘+×'Ñ'¨Ó.×3Ñ3Ø—‘×&Ñ& uÓ-à#Øð	 4ó ˆCð Ð<Ñ<Ø15·±Ö>¨A”c˜E !  A˜,Õ'Ð>ˆFÐ>ØŸ™ò 	-�Ø#'¨4¯<©<Ð#7�
Ø Ò(±Ø—M‘M¤#¨¨d¨V°1 oÓ"6Õ7Ø  GÒ+Ù HÐ$4¸ÀHÑ8Là—M‘M¤#¨¨d¨V°1 oÓ"6×"<Ñ"<À¸vÀfÀXÐ=NÓ"OÕPØÐ%¨°XÒ)=Ø—M‘M¤# d£)Õ,ð	-ð �#—*‘*˜fÐ%×/Ñ/°·±×0AÑ0AÓB‰Cà—*‘*˜WÓ%×/Ñ/°·±×0AÑ0AÓBˆCà× Ñ  Ó%Ð%ùò ?s   ÄH6c          	     óø  — | j                   }|j                   }	g }
|�'|�%|
j                  d„ t        ||d¬«      D «       «       ng x}}|dk(  r/|
j                  t	        d|› d�«      t	        d|› d�«      k\  «       nA|dk(  r/|
j                  t	        d|› d�«      t	        d|› d�«      k  «       nd	}t        |«      ‚t        t        |
«      }d
g}|	j                  D ]a  }||j                  v r$|�||h|£vr|j                  d|› d|› |› d�«       Œ5|�||h|£vsŒ?|j                  t        t	        |«      «      «       Œc ddj                  |«      › d|› d�}| j                  t        j                  |«      «      S )Nc              3  ó`   K  — | ]&  \  }}t        d |› d�«      t        d|› d�«      k(  –— Œ( y­wrß   rã   rä   s      rG   r¥   z,DuckDBLazyFrame.join_asof.<locals>.<genexpr>f  s<   è ø€ ò á�D˜%ô �e˜D˜6 �OÓ$¬¨e°E°7¸!Ð,<Ó(=Õ=ñùrç   Tr¨   Úbackwardrà   rá   râ   ÚforwardzKOnly 'backward' and 'forward' strategies are currently supported for DuckDBrë   z" as "z
            SELECT ú,zD
            FROM lhs
            ASOF LEFT JOIN rhs
            ON ú
            )rt   r³   r¾   rï   r   rì   r   r   ry   Ústrrî   r’   rP   Úsql)rD   rð   rñ   rò   Úby_leftÚby_rightÚstrategyró   rÜ   rÝ   Ú
conditionsrh   rè   ru   rv   Úquerys                   rG   Ú	join_asofzDuckDBLazyFrame.join_asofW  s«  € ð �k‰kˆØ�l‰lˆØ')ˆ
ØÐ 8Ð#7Ø×Ññ ä#& w°ÀÔ#Fôõ ð
 "$Ð#ˆG�hØ�zÒ!Ø×Ñœc E¨'¨°!Ð"4Ó5¼¸uÀXÀJÈaÐ=PÓ9QÑQÕRØ˜Ò"Ø×Ñœc E¨'¨°!Ð"4Ó5¼¸uÀXÀJÈaÐ=PÓ9QÑQÕRà_ˆCÜ% cÓ*Ð*Ü &¤t¨ZÓ 8ˆ	Ø�ˆØ—K‘Kò 	.ˆDØ�s—{‘{Ñ"ØÐ  D°Ð0E¸HÐ0EÑ$Eà—‘  d V¨6°$°¸°x¸qÐAÕBØÐ! T°(Ð1F¸XÐ1FÒ%FØ—‘œc¤# d£)›nÕ-ð	.ðØ—H‘H˜VÓ$Ð%ð &ð ˆ{ð ð	ˆð × Ñ ¤§¡¨EÓ!2Ó3Ð3rI   c                ó   — | j                   S r>   )rÃ   rM   s    rG   Úcollect_schemazDuckDBLazyFrame.collect_schema†  s   € Ø�{‰{ÐrI   c               ó:  — |xs | j                   }| j                  |«      x}r|‚t        d| j                   d¬«      }|r|dk(  rt        dt	        |«      «      nd }|dk(  r't        t        dt        «       «      ||xs d||¬	«      }nt        t        d
«      ||xs d||¬	«      }| j                  | j                  j                  t        «       |j                  |«      «      j                  t        |«      t        d«      k(  «      «      j                  |gd¬«      S )Né   Ú
row_index_)ÚprefixÚlastTÚnoneÚcountrk   )Ú
descendingÚ
nulls_lastÚ
row_numberr}   Fr¨   )ry   Ú_check_columns_existr   r   Úlenr   r   r	   r’   rt   ru   rš   r¹   r   r   r«   )	rD   ÚsubsetÚkeepÚorder_byÚsubset_ÚerrorÚtmp_nameÚflagsÚexprs	            rG   ÚuniquezDuckDBLazyFrame.unique‰  s  € ð Ò(˜DŸL™LˆØ×-Ñ-¨gÓ6Ð6ˆ5Ð6ØˆKÜ1°!°T·\±\È,ÔWˆÙ4<ÀÈÂ”˜D¤# h£-Ô0ÐUYˆØ�6Š>Ü$Ü�'œ>Ó+Ó,ØØ’˜BØ Ø ô‰Dô %Ü�,“ØØ’˜BØ Ø ôˆDð × Ñ Ø�K‰K×Ñœ~Ó/°·±¸HÓ1EÓF×MÑMÜ�H“¤ Q£Ñ'óó
÷ ‰$�ˆz %ˆ$Ó
(ð		)rI   c               óÖ   — t        |t        |«      «      }|rd„ t        ||d¬«      D «       }nd„ t        ||d¬«      D «       }| j                   | j                  j
                  |Ž «      S )Nc              3  ó¦   K  — | ]I  \  }}|st        |«      j                  «       n&t        |«      j                  «       j                  «       –— ŒK y ­wr>   )r   r  Údesc©r¤   rv   r!  s      rG   r¥   z'DuckDBLazyFrame.sort.<locals>.<genexpr>®  sD   è ø€ ò á�D˜$ñ /3”�D“	×$Ñ$Ô&¼¸D»	¿¹Ó8H×8SÑ8SÓ8UÓUñùó   ‚AATr¨   c              3  ó¦   K  — | ]I  \  }}|st        |«      j                  «       n&t        |«      j                  «       j                  «       –— ŒK y ­wr>   )r   Únulls_firstr!  r"  s      rG   r¥   z'DuckDBLazyFrame.sort.<locals>.<genexpr>³  sD   è ø€ ò á�D˜$ñ 04”�D“	×%Ñ%Ô'¼¸T»¿¹Ó9I×9UÑ9UÓ9WÓWñùr#  )r   r  r¾   r’   rt   Úsort)rD   r  r  Úbyrö   s        rG   r&  zDuckDBLazyFrame.sort«  sj   € Ü  ¬S°«WÓ5ˆ
Ùñä"% b¨*¸TÔ"Bô‰Bñ
ä"% b¨*¸TÔ"BôˆBð × Ñ Ð!1 §¡×!1Ñ!1°2Ð!6Ó7Ð7rI   c               óh  — | j                   }t        |«      }t        |t        «      rt	        | t        |«      «      }nt        d„ |D «       «      }t        t        d«      ||t	        dt        |«      «      ¬«      }|t        |«      k  }d|› d�}| j                  t        j                  |«      «      S )Nc              3  ó"   K  — | ]  }| –— Œ	 y ­wr>   rk   )r¤   Úrevs     rG   r¥   z(DuckDBLazyFrame.top_k.<locals>.<genexpr>¿  s   è ø€ Ò:¨3 3œwÑ:ùs   ‚r  T)r  r  r  z@
            SELECT *
            FROM _rel
            QUALIFY z	
        )rt   rÅ   rO   Úboolr   r  Útupler   r   r   r’   rP   r  )	rD   Úkr'  ÚreverseÚ_relr  r  rè   r  s	            rG   Útop_kzDuckDBLazyFrame.top_k¹  s¨   € Ø�{‰{ˆÜ�"‹XˆÜ�gœtÔ$Ü$¨ [´#°b³'Ó:‰JäÑ:°'Ô:Ó:ˆJÜ Üˆl‹OØØ!Ü" 4¬¨R«Ó1ô	
ˆð œC ›F‘Nˆ	ðð �Kð  	ðˆð
 × Ñ ¤§¡¨EÓ!2Ó3Ð3rI   c                ó¤   — |�|n| j                   }t        t        d„ |D «       «      }| j                  | j                  j                  |«      «      S )Nc              3  óN   K  — | ]  }t        |«      j                  «       –— Œ y ­wr>   )r   Ú	isnotnull)r¤   rv   s     rG   r¥   z-DuckDBLazyFrame.drop_nulls.<locals>.<genexpr>Ð  s   è ø€ Ò&QÀ¤s¨4£y×':Ñ':×'<Ñ&Qùs   ‚#%)ry   r   r   r’   rt   r¹   )rD   r  r  Úkeep_conditions       rG   Ú
drop_nullszDuckDBLazyFrame.drop_nullsÎ  sD   € Ø"Ð.‘&°D·L±LˆÜ¤Ñ&QÈÔ&QÓRˆØ× Ñ  §¡×!3Ñ!3°NÓ!CÓDÐDrI   c                ób  ‡‡— | j                   j                  }| j                  «       }‰D ]'  }||   }||j                  k7  sŒd|› d�}t	        |«      ‚ t        ‰«      dk7  rd}t        |«      ‚t        ‰d   «      Š| j                  }| j                  }t        d«      }	‰j                  «       t        d‰«      z  |	kD  }
 |j                  |
«      j                  ˆˆfd„|D «       Ž } |j                  |
 «      j                  ˆfd„|D «       Ž }| j                  |j!                  |«      «      S )	Nz-`explode` operation not supported for dtype `z`, expected List typer}   z”Exploding on multiple columns is not supported with DuckDB backend since we cannot guarantee that the exploded columns have matching element counts.r   r  c              3  ó`   •K  — | ]%  }|‰v rt        d ‰«      j                  |«      n|–— Œ' y­w)ÚunnestN)r   rš   )r¤   rv   Úcol_to_explodery   s     €€rG   r¥   z*DuckDBLazyFrame.explode.<locals>.<genexpr>í  s8   øè ø€ ò àð <@À7¹?”�(˜NÓ+×1Ñ1°$Ô7ÐPTÓTñùs   ƒ+.c              3  ó^   •K  — | ]$  }|‰v rt        d «      j                  |«      n|–— Œ& y ­wr>   )r   rš   )r¤   rv   ry   s     €rG   r¥   z*DuckDBLazyFrame.explode.<locals>.<genexpr>ô  s1   øè ø€ ò àð *.°©”�D“	—‘ Ô%¸dÓBñùs   ƒ*-)r@   Údtypesr	  ÚListr   r  rì   r   rt   ry   r   r3  r   r¹   ru   r’   Úunion)rD   ry   r;  rÃ   rv   Údtyperh   rõ   Úoriginal_columnsÚzeroÚnot_null_conditionÚnon_null_relÚnull_relr9  s    `           @rG   ÚexplodezDuckDBLazyFrame.explodeÓ  sM  ù€ Ø—‘×%Ñ%ˆØ×$Ñ$Ó&ˆØò 	1ˆDØ˜4‘LˆEØ˜Ÿ™Ó#àCÀEÀ7ð K)ð )ð ô ,¨CÓ0Ð0ð	1ô ˆw‹<˜1Òð^ð ô & cÓ*Ð*ä˜W Q™Z›ˆØ�k‰kˆØŸ<™<Ðä�1‹vˆØ+×5Ñ5Ó7¼!¸EÀ>Ó:RÑRÐUYÑYÐØ<�s—z‘zÐ"4Ó5×<Ñ<ôà,ôð
ˆð :�3—:‘:Ð1Ð1Ó2×9Ñ9óà,ôð
ˆð × Ñ  ×!3Ñ!3°HÓ!=Ó>Ð>rI   c                óx  — |€g n|}|€| j                   D �cg c]	  }||vsŒ|‘Œ c}n|}|dk(  rd}t        |«      ‚|dk(  rd}t        |«      ‚t        |Ž }	| j                  }
d|	› dt	        |«      › dt	        |«      › d�}| j                   t        j                  |«      j                  g |¢|‘|‘Ž «      S c c}w )NÚ z:`variable_name` cannot be empty string for duckdb backend.z7`value_name` cannot be empty string for duckdb backend.z)
            unpivot _rel
            on z'
            into
                name z
                value rÿ   )	ry   rì   r   rt   r   r’   rP   r  ru   )rD   ÚonÚindexÚvariable_nameÚ
value_nameÚindex_ÚcÚon_rh   Ú
unpivot_onr/  r  s               rG   ÚunpivotzDuckDBLazyFrame.unpivotü  sê   € ð �}‘¨%ˆØ>@¸j˜$Ÿ,™,Ö:�Q¨!°6ª/ŠqÓ:Èbˆà˜BÒØNˆCÜ% cÓ*Ð*à˜ÒØKˆCÜ% cÓ*Ð*ä&¨Ð,ˆ
Ø�{‰{ˆðàˆ|ð ä˜-Ó(Ð)ð *Ü˜:“Ð'ð (ðˆð × Ñ Ø$ŒF�J‰J�uÓ×$Ñ$Ð&J¨Ð&J°Ð&J¸zÐ&JÐKó
ð 	
ùò+ ;s
   —	B7¡B7)r}   é   c                óè   — |€d}t        |«      ‚t        t        d«      |¬«      t        d«      z
  j	                  |«      }| j                  | j                  j                  |t        «       «      «      S )Nz5Cannot pass `order_by` to `with_row_index` for DuckDBr  )r  r}   )	Ú	TypeErrorr   r   r   rš   r’   rt   ru   r	   )rD   rv   r  rh   r  s        rG   Úwith_row_indexzDuckDBLazyFrame.with_row_index  se   € àÐØIˆCÜ˜C“.Ð Ü!¤! L£/¸HÔEÌÈAËÑN×UÑUØó
ˆð × Ñ  §¡×!3Ñ!3°D¼.Ó:JÓ!KÓLÐLrI   c                óR   — | j                   }d|› d�}t        j                  |«       y )Nz7
            COPY (SELECT * FROM _rel)
            TO 'z+'
            (FORMAT parquet)
            )rt   rP   r  )rD   Úfiler/  r  s       rG   Úsink_parquetzDuckDBLazyFrame.sink_parquet'  s/   € Ø�{‰{ˆðà�ð ðˆô
 	�
‰
�5ÕrI   )rE   úduckdb.DuckDBPyRelationrF   r   r<   r+  ÚreturnÚNone)rX  ztuple[int, ...])rR   zduckdb.DuckDBPyRelation | AnyrX  zTypeIs[duckdb.DuckDBPyRelation])rX   rW  rY   r2   rX  r&   )rb   r   rc   r   rX  úILazyFrame[duckdb.DuckDBPyRelation] | DataFrameV1[duckdb.DuckDBPyRelation])rX  r&   )rX  r$   )rX  r-   )rv   r   rX  r/   )rX  zIterator[Expression])r�   z_EagerAllowedImpl | NonerŽ   r   rX  r(   )r”   ÚintrX  r&   )r—   r   rX  r&   )r�   r)   rX  r&   )ry   úSequence[str]r©   r+  rX  r&   r>   )r�   rY  r­   rY  rX  r&   )rº   r)   rX  r&   )rX  zdict[str, DType])rX  z	list[str])rX  zpd.DataFrame)rX  zpa.Table)rF   r   rX  r&   )rE   rW  rX  r&   )rÑ   z$Sequence[str] | Sequence[DuckDBExpr]rÏ   r+  rX  r+   )rÕ   zMapping[str, str]rX  r&   )rð   r&   ré   r8   rñ   úSequence[str] | Nonerò   r]  ró   r   rX  r&   )rð   r&   rñ   r   rò   r   r  r]  r  r]  r  r7   ró   r   rX  r&   )r  r]  r  r9   r  r]  rX  r&   )r'  r   r  úbool | Sequence[bool]r  r+  rX  r&   )r-  r[  r'  zIterable[str]r.  r^  rX  r&   )r  r]  rX  r&   )ry   r\  rX  r&   )
rG  r]  rH  r]  rI  r   rJ  r   rX  r&   )rv   r   r  r\  rX  r&   )rU  zstr | Path | BytesIOrX  rY  )2Ú__name__Ú
__module__Ú__qualname__r   ÚDUCKDBrK   rH   ÚpropertyrL   ÚstaticmethodrS   ÚclassmethodrZ   re   ri   rl   rn   rq   rw   rz   r�   r•   r˜   r›   ru   r«   r^   r·   r¼   rÃ   ry   rÇ   rÉ   rÌ   r’   rÒ   rÖ   rî   r  r	  r  r&  r0  r5  rD  rO  r   Úbackend_versionrS  rV  rk   rI   rG   r;   r;   ;   s´  „ ð %×+Ñ+€Oð */ñ-à#ð-ð ð	-ð
 #'ð-ð 
ó-ð ò7ó ð7ð ò8ó ð8ð ð3Ø*ð3Ø;Jð3à	ò3ó ð3ð
;Øð;Ø"%ð;à	Ró;óóóó6ó
Xó
ð%Ø/ð%Ø;>ð%à	ó%óN7óDó<ó<óAô
ó<ó9ð ò
ó ð
ð$ ò$ó ð$ó óBó<ó9ðHØ8ðHØMQðHà	óHóAð2&àð2&ð ð	2&ð
 &ð2&ð 'ð2&ð ð2&ð 
ó2&ðh-4àð-4ð ð	-4ð
 ð-4ð &ð-4ð 'ð-4ð #ð-4ð ð-4ð 
ó-4ó^ð )à$ð )ð !ð	 )ð
 'ð )ð 
ó )óD8ó4ó*Eó
'?ðR
à ð
ð $ð
ð ð	
ð
 ð
ð 
ó
ðB €X×Ñ˜fÓ%òMó &ðMôrI   r;   )r)   rW  rZ  )QÚ
__future__r   Ú	functoolsr   Úoperatorr   Útypingr   r   r   rP   r	   Únarwhals._duckdb.utilsr
   r   r   r   r   r   r   r   r   Únarwhals._sql.dataframer   Únarwhals._utilsr   r   r   r   r   r   r   Únarwhals.dependenciesr   Únarwhals.exceptionsr   Úcollections.abcr   r   r    r!   Úior"   Úpathlibr#   r¿   r$   ÚpandasÚpdÚpyarrowÚpar%   Útyping_extensionsr&   r'   Únarwhals._compliant.typingr(   Únarwhals._duckdb.exprr)   rÐ   r+   rp   r-   rs   r/   r0   Únarwhals._typingr1   r2   Únarwhals.dataframer3   Únarwhals.dtypesr4   r`   r6   rd   Únarwhals.typingr7   r8   r9   r;   rk   rI   rG   ú<module>r~     s©   ðÝ "å Ý ß .Ñ .ã Ý !÷
÷ 
õ 
õ 1÷÷ ñ õ -Ý 5áßEÓEÝÝÝ ãÛÝ!ß.å@Ý0Ý7Ý:Ý?Ý4Ý2Ý/Ý,Ý%Ý;ßRÑRôsØð	Uñð
 õsrI   