Ë
    ÚÍ:ju[  ã                  óü  — U d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	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mZmZmZmZmZ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m,Z, d dl-Z.d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dlm@Z@ d dlAmBZB d dlmCZCmDZD d dlEmFZF d dlGmHZH d dlImJZJmKZK e2eeeeef   ZLeZMdeNd <   	  G d!„ d"ed#   e«      ZOy)$é    )Úannotations)Úreduce)Úand_)ÚTYPE_CHECKINGÚAny)Úissue_warning©Úis_native_spark_like)Úcatch_pyspark_connect_exceptionÚcatch_pyspark_sql_exceptionÚevaluate_exprsÚimport_functionsÚimport_native_dtypesÚimport_windowÚnative_to_narwhals_dtype)ÚSQLLazyFrame)ÚImplementationÚValidateBackendVersionÚextend_boolÚgenerate_temporary_column_nameÚnot_implementedÚparse_columns_to_dropÚto_pyarrow_table)ÚInvalidOperationError)ÚIterableÚIteratorÚMappingÚSequence)ÚBytesIO)ÚPath)Ú
ModuleType)Ú	TypeAliasN)ÚColumn)ÚBaseDataFrame©ÚWindow)ÚSelfÚTypeIs)ÚCompliantDataFrameAny)ÚSparkLikeExpr©ÚSparkLikeLazyGroupBy©ÚSparkLikeNamespace)ÚSparkSession)Ú_EagerAllowedImpl)ÚVersionÚ_LimitedContext)Ú	LazyFrame)ÚDType)ÚJoinStrategyÚUniqueKeepStrategyr"   Ú
Incompletec                  ó<  — e Zd Zddœ	 	 	 	 	 	 	 	 	 d,d„Zed-d„«       Zed„ «       Zed„ «       Ze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ed:d„«       Z	 	 	 	 	 	 d;d„Z	 	 	 	 	 	 d;d„Zd<d„Zd=d„Zd=d„Zd=d„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'	 	 	 	 	 	 	 	 	 	 	 	 dHd%„Z(dId&„Z)	 	 	 	 	 	 	 	 	 	 dJd'„Z*dKd(„Z+dLd)„Z,e	 	 	 	 	 	 	 	 	 	 dMd*„«       Z- e.«       Z/y+)NÚSparkLikeLazyFrameF)Úvalidate_backend_versionc               óp   — || _         || _        || _        d | _        d | _        |r| j                  «        y y ©N)Ú_native_frameÚ_implementationÚ_versionÚ_cached_schemaÚ_cached_columnsÚ_validate_backend_version)ÚselfÚnative_dataframeÚversionÚimplementationr:   s        ús/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/narwhals/_spark_like/dataframe.pyÚ__init__zSparkLikeLazyFrame.__init__@   s@   € ð 1AˆÔØ-ˆÔØˆŒØ7;ˆÔØ15ˆÔÙ#Ø×*Ñ*Õ,ð $ó    c                ó6   — | j                   j                  «       S r<   )r>   Ú_backend_version©rC   s    rG   rK   z#SparkLikeLazyFrame._backend_versionP   s   € à×#Ñ#×4Ñ4Ó6Ð6rI   c                óH   — t         rddlm} |S t        | j                  «      S )Nr   )Ú	functions)r   Úsqlframe.baserN   r   r>   )rC   rN   s     rG   Ú_FzSparkLikeLazyFrame._FT   s   € åÝ/àÐÜ × 4Ñ 4Ó5Ð5rI   c                óH   — t         rddlm} |S t        | j                  «      S )Nr   )Útypes)r   rO   rR   r   r>   )rC   rR   s     rG   Ú_native_dtypesz!SparkLikeLazyFrame._native_dtypes\   s   € åÝ+àˆLÜ# D×$8Ñ$8Ó9Ð9rI   c                óH   — t         rddlm} |S t        | j                  «      S )Nr   r%   )r   Úsqlframe.base.windowr&   r   r>   )rC   r&   s     rG   Ú_WindowzSparkLikeLazyFrame._Windowd   s   € åÝ3àˆMÜ˜T×1Ñ1Ó2Ð2rI   c                ó   — t        | «      S r<   r	   )Úobjs    rG   Ú
_is_nativezSparkLikeLazyFrame._is_nativel   s   € ä# CÓ(Ð(rI   c              ó@   —  | ||j                   |j                  ¬«      S ©N©rE   rF   )r?   r>   )ÚclsÚdataÚcontexts      rG   Úfrom_nativezSparkLikeLazyFrame.from_nativep   s   € á�4 ×!1Ñ!1À'×BYÑBYÔZÐZrI   c                ó<   — | j                   j                  | d¬«      S )NÚlazy)Úlevel)r?   Ú	lazyframerL   s    rG   Úto_narwhalszSparkLikeLazyFrame.to_narwhalst   s   € Ø�}‰}×&Ñ& t°6Ð&Ó:Ð:rI   c                ó6   — | j                   j                  «       S r<   )r>   Úto_native_namespacerL   s    rG   Ú__native_namespace__z'SparkLikeLazyFrame.__native_namespace__w   s   € Ø×#Ñ#×7Ñ7Ó9Ð9rI   c                óJ   — ddl m}  || j                  | j                  ¬«      S )Nr   r-   r\   )Únarwhals._spark_like.namespacer.   r?   r>   )rC   r.   s     rG   Ú__narwhals_namespace__z)SparkLikeLazyFrame.__narwhals_namespace__z   s!   € ÝEá!Ø—M‘M°$×2FÑ2Fô
ð 	
rI   c                ó   — | S r<   © rL   s    rG   Ú__narwhals_lazyframe__z)SparkLikeLazyFrame.__narwhals_lazyframe__�   s   € ØˆrI   c                óR   — | j                  | j                  || j                  ¬«      S r[   )Ú	__class__Únativer>   )rC   rE   s     rG   Ú_with_versionz SparkLikeLazyFrame._with_version„   s)   € Ø�~‰~Ø�K‰K ¸×9MÑ9Mð ó 
ð 	
rI   c                óR   — | j                  || j                  | j                  ¬«      S r[   )rp   r?   r>   )rC   Údfs     rG   Ú_with_nativezSparkLikeLazyFrame._with_native‰   s)   € Ø�~‰~Ø˜Ÿ™°d×6JÑ6Jð ó 
ð 	
rI   c                ó  — dd l }ddlm} g }| j                  «       }| j                  j
                  }|j                  «       D ],  \  }}	  ||| j                  «      }|j                  ||f«       Œ.  |j
                  |«      S # t        $ rs}	||   j                  }
| j                  j                  }t        |
|«      st        d|
› d|	›�t        «       |j                  | |j                   «       f«       Y d }	~	Œ¸d }	~	ww xY w)Nr   )Únarwhals_to_native_dtypezCould not convert dtype z to PyArrow dtype, )ÚpyarrowÚnarwhals._arrow.utilsrw   Úcollect_schemarq   ÚschemaÚitemsr?   ÚappendÚ	ExceptionÚdataTyperS   ÚNullTypeÚ
isinstancer   ÚUserWarningÚnull)rC   Úparw   r{   Ú	nw_schemaÚnative_schemaÚkeyÚvalueÚnative_dtypeÚexcÚnative_spark_dtypeÚ	null_types               rG   Ú_to_arrow_schemaz#SparkLikeLazyFrame._to_arrow_schemaŽ   sþ   € ÛåBà02ˆØ×'Ñ'Ó)ˆ	ØŸ™×*Ñ*ˆØ#Ÿ/™/Ó+ò 	3‰JˆC�ð3Ù7¸¸t¿}¹}ÓM�ð —‘˜s LÐ1Õ2ð!	3ð" ˆr�y‰y˜Ó Ð øô ò 0Ø%2°3Ñ%7×%@Ñ%@Ð"ð !×/Ñ/×8Ñ8�	Ü!Ð"4°iÔ@Ü!Ø2Ð3EÐ2FÐFYÐZ]ÐY`ÐaÜ#ôð —‘˜s G B§G¡G£IÐ.×/Ñ/ûð0ús   Á
BÂ	D ÂA)C;Ã;D c                óÐ  — | j                   j                  «       rG| j                  dk  r8dd l}	 |j                  j                  | j                  j                  «       «      S | j                   j                  «       rX| j                  dk  rIdd l}| j                  «       }|j                  j                  | j                  j                  «       |¬«      S t!        | j                  j#                  «       «      S # t        $ re}dt        |«      v rR| j                  D �ci c]  }|g “Œ nc c}w }}| j                  «       }|j                  j                  ||¬«      cY d }~S ‚ d }~ww xY w)N)é   r   zat least one RecordBatch©r{   )r>   Ú
is_pysparkrK   rx   ÚTableÚfrom_batchesrq   Ú_collect_as_arrowÚ
ValueErrorÚstrÚcolumnsr�   Úfrom_pydictÚis_pyspark_connectÚfrom_pandasÚtoPandasr   ÚtoArrow)rC   r„   rŠ   Úkr^   Ú	pa_schemas         rG   Ú_collect_to_arrowz$SparkLikeLazyFrame._collect_to_arrow©   s(  € Ø×Ñ×*Ñ*Ô,°×1FÑ1FÈÒ1MÛ ð	Ø—x‘x×,Ñ,¨T¯[©[×-JÑ-JÓ-LÓMÐMð ×!Ñ!×4Ñ4Ô6¸4×;PÑ;PÐSWÒ;WÛ à×-Ñ-Ó/ˆIØ—8‘8×'Ñ'¨¯©×(<Ñ(<Ó(>ÀyÐ'ÓQÐQä# D§K¡K×$7Ñ$7Ó$9Ó:Ð:øô ò Ø-´°S³Ñ9ð BFÇÁÖ1N¸A°!°R±%Ñ1NùÒ1N�DÐ1NØ $× 5Ñ 5Ó 7�IØŸ8™8×/Ñ/°¸YÐ/ÓGÕGØûðús/   ¯2C7 Ã7	E%Ä E Ä
D&Ä%4E ÅE%ÅE Å E%c              #  óh   K  — | j                   D ]  }| j                  j                  |«      –— Œ! y ­wr<   )r—   rP   Úcol)rC   r¡   s     rG   Ú_iter_columnsz SparkLikeLazyFrame._iter_columns¿   s,   è ø€ Ø—<‘<ò 	#ˆCØ—'‘'—+‘+˜cÓ"Ó"ñ	#ùs   ‚02c                óª   — | j                   €<| j                  �t        | j                  «      n| j                  j
                  | _         | j                   S r<   )rA   r@   Úlistr{   rq   r—   rL   s    rG   r—   zSparkLikeLazyFrame.columnsÃ   sM   € à×ÑÐ'ð ×&Ñ&Ð2ô �T—[‘[Ô!à—[‘[×(Ñ(ð Ô ð
 ×#Ñ#Ð#rI   c                óä  — |t         j                  u rCddlm}  || j                  j                  «       t         j                  d| j                  d¬«      S |�|t         j                  u r*ddlm	}  || j                  «       d| j                  d¬«      S |t         j                  u r<dd l}ddlm}  ||j                  | j                  «       «      d| j                  ¬«      S d	|› �}t!        |«      ‚)
Nr   )ÚPandasLikeDataFrameT)rF   r:   rE   Úvalidate_column_names)ÚArrowDataFrame)r:   rE   r§   )ÚPolarsDataFrame)r:   rE   zUnsupported `backend` value: )r   ÚPANDASÚnarwhals._pandas_like.dataframer¦   rq   r›   r?   ÚPYARROWÚnarwhals._arrow.dataframer¨   rŸ   ÚPOLARSÚpolarsÚnarwhals._polars.dataframer©   Ú
from_arrowr•   )rC   ÚbackendÚkwargsr¦   r¨   Úplr©   Úmsgs           rG   Ú_collectzSparkLikeLazyFrame._collectÍ   sß   € ð ”n×+Ñ+Ñ+ÝKá&Ø—‘×$Ñ$Ó&Ü-×4Ñ4Ø)-ØŸ™Ø&*ôð ð ˆ?˜g¬×)?Ñ)?Ñ?Ý@á!Ø×&Ñ&Ó(Ø)-ØŸ™Ø&*ô	ð ð ”n×+Ñ+Ñ+ÛåBá"Ø—‘˜d×4Ñ4Ó6Ó7Ø)-ØŸ™ôð ð .¨g¨YÐ7ˆÜ˜‹oÐrI   c                ó¾   — | j                   j                  «       r	  | j                  |fi |¤ŽS  | j                  |fi |¤ŽS # t        $ r}t	        |«      d ‚d }~ww xY wr<   )r>   r™   r¶   r~   r   )rC   r²   r³   Úes       rG   ÚcollectzSparkLikeLazyFrame.collectó   sk   € ð ×Ñ×2Ñ2Ô4ðCØ$�t—}‘} WÑ7°Ñ7Ð7ð ˆt�}‰}˜WÑ/¨Ñ/Ð/øô ò CÜ5°aÓ8¸dÐBûðCús   œA Á	AÁAÁAc                óR   — | j                   | j                  j                  |Ž «      S r<   )ru   rq   Úselect)rC   Úcolumn_namess     rG   Úsimple_selectz SparkLikeLazyFrame.simple_selectý   s%   € Ø× Ñ Ð!3 §¡×!3Ñ!3°\Ð!BÓCÐCrI   c                ó~  — t        | g|¢­Ž }|D ��cg c]  \  }}|j                  |«      ‘Œ }}}| j                  j                  «       r)	 | j	                   | j
                  j                  |Ž «      S | j	                   | j
                  j                  |Ž «      S c c}}w # t        $ r}t        || «      d ‚d }~ww xY wr<   )	r   Úaliasr>   r‘   ru   rq   Úaggr~   r   ©rC   ÚexprsÚnew_columnsÚcol_namer¡   Únew_columns_listr¸   s          rG   Ú	aggregatezSparkLikeLazyFrame.aggregate   s·   € Ü$ TÐ2¨EÒ2ˆàEP×Q±M°H¸c˜CŸI™I hÕ/ÐQÐÑQØ×Ñ×*Ñ*Ô,ðEØ×(Ñ(¨¨¯©¯©Ð:JÐ)KÓLÐLð × Ñ   §¡§¡Ð2BÐ!CÓDÐDùó Røô ò EÜ1°!°TÓ:ÀÐDûðEúó   ’BÁ'B! Â!	B<Â*B7Â7B<c                ó~  — t        | g|¢­Ž }|D ��cg c]  \  }}|j                  |«      ‘Œ }}}| j                  j                  «       r)	 | j	                   | j
                  j                  |Ž «      S | j	                   | j
                  j                  |Ž «      S c c}}w # t        $ r}t        || «      d ‚d }~ww xY wr<   )	r   r¿   r>   r‘   ru   rq   r»   r~   r   rÁ   s          rG   r»   zSparkLikeLazyFrame.select  s½   € Ü$ TÐ2¨EÒ2ˆØGR×S±O°X¸s˜CŸI™I hÕ/ÐSÐÑSØ×Ñ×*Ñ*Ô,ðEØ×(Ñ(Ð);¨¯©×);Ñ);Ð=MÐ)NÓOÐOð × Ñ Ð!3 §¡×!3Ñ!3Ð5EÐ!FÓGÐGùó Tøô ò EÜ1°!°TÓ:ÀÐDûðEúrÇ   c                óX  — t        | g|¢­Ž }| j                  j                  «       r4	 | j                  | j                  j                  t        |«      «      «      S | j                  | j                  j                  t        |«      «      «      S # t        $ r}t        || «      d ‚d }~ww xY wr<   )	r   r>   r‘   ru   rq   ÚwithColumnsÚdictr~   r   )rC   rÂ   rÃ   r¸   s       rG   Úwith_columnszSparkLikeLazyFrame.with_columns  s˜   € Ü$ TÐ2¨EÒ2ˆØ×Ñ×*Ñ*Ô,ðEØ×(Ñ(¨¯©×)@Ñ)@ÄÀkÓARÓ)SÓTÐTð × Ñ  §¡×!8Ñ!8¼¸kÓ9JÓ!KÓLÐLøô ò EÜ1°!°TÓ:ÀÐDûðEús   ¨2B Â	B)ÂB$Â$B)c                óD  — |j                  | «      d   }| j                  j                  «       r+	 | j                  | j                  j                  |«      «      S | j                  | j                  j                  |«      «      S # t        $ r}t        || «      d ‚d }~ww xY w©Nr   )Ú_callr>   r‘   ru   rq   Úwherer~   r   )rC   Ú	predicateÚ	conditionr¸   s       rG   Ú_filterzSparkLikeLazyFrame._filter  s’   € à—O‘O DÓ)¨!Ñ,ˆ	Ø×Ñ×*Ñ*Ô,ðEØ×(Ñ(¨¯©×):Ñ):¸9Ó)EÓFÐFð × Ñ  §¡×!2Ñ!2°9Ó!=Ó>Ð>øô ò EÜ1°!°TÓ:ÀÐDûðEús   °)B Â	BÂBÂBc           
     ó   — | j                   €r| j                  j                  D �ci c]M  }|j                  t	        |j
                  | j                  | j                  | j                  j                  «      “ŒO c}| _         | j                   S c c}w r<   )	r@   rq   r{   Únamer   r   r?   rS   ÚsparkSession)rC   Úfields     rG   r{   zSparkLikeLazyFrame.schema)  s   € à×ÑÐ&ð "Ÿ[™[×/Ñ/ö#ð ð —
‘
Ô4Ø—N‘NØ—M‘MØ×'Ñ'Ø—K‘K×,Ñ,ó	ñ ò#ˆDÔð ×"Ñ"Ð"ùò#s   ¥ABc                ó   — | j                   S r<   r�   rL   s    rG   rz   z!SparkLikeLazyFrame.collect_schema7  s   € Ø�{‰{ÐrI   c               ón   — t        | ||¬«      }| j                   | j                  j                  |Ž «      S )N©Ústrict)r   ru   rq   Údrop)rC   r—   rÛ   Úcolumns_to_drops       rG   rÜ   zSparkLikeLazyFrame.drop:  s3   € Ü/°°gÀfÔMˆØ× Ñ Ð!1 §¡×!1Ñ!1°?Ð!CÓDÐDrI   c                óV   — | j                  | j                  j                  |«      «      S r<   )ru   rq   Úlimit)rC   Úns     rG   ÚheadzSparkLikeLazyFrame.head>  s"   € Ø× Ñ  §¡×!2Ñ!2°1Ó!5Ó6Ð6rI   c               ó$   — ddl m}  || ||¬«      S )Nr   r+   )Údrop_null_keys)Únarwhals._spark_like.group_byr,   )rC   Úkeysrã   r,   s       rG   Úgroup_byzSparkLikeLazyFrame.group_byA  s   € õ 	Gá# D¨$¸~ÔNÐNrI   c               ó  ‡ — t        |t        |«      «      }|rˆ fd„|D «       }nˆ fd„|D «       }t        ||d¬«      D ��cg c]  \  }} ||«      ‘Œ }}}‰ j                   ‰ j                  j
                  |Ž «      S c c}}w )Nc              3  óz   •K  — | ]2  }|r‰j                   j                  n‰j                   j                  –— Œ4 y ­wr<   ©rP   Údesc_nulls_lastÚasc_nulls_last©Ú.0ÚdrC   s     €rG   ú	<genexpr>z*SparkLikeLazyFrame.sort.<locals>.<genexpr>K  s4   øè ø€ ò àñ ,-�—‘×'Ò'°$·'±'×2HÑ2HÓHñùó   ƒ8;c              3  óz   •K  — | ]2  }|r‰j                   j                  n‰j                   j                  –— Œ4 y ­wr<   )rP   Údesc_nulls_firstÚasc_nulls_firstrì   s     €rG   rï   z*SparkLikeLazyFrame.sort.<locals>.<genexpr>P  s4   øè ø€ ò àñ -.�—‘×(Ò(°4·7±7×3JÑ3JÓJñùrð   TrÚ   )r   ÚlenÚzipru   rq   Úsort)rC   Ú
descendingÚ
nulls_lastÚbyÚ
sort_funcsr¡   Úsort_fÚ	sort_colss   `       rG   rö   zSparkLikeLazyFrame.sortH  sƒ   ø€ Ü  ¬S°«WÓ5ˆ
Ùóà#ô‰Jó
à#ôˆJô
 58¸¸JÈtÔ4T×U¡[ S¨&‘V˜C•[ÐUˆ	ÑUØ× Ñ Ð!1 §¡×!1Ñ!1°9Ð!=Ó>Ð>ùó Vs   ÁA>c               ó   ‡ — t        |«      }t        |t        |«      «      }ˆ fd„|D «       }t        ||d¬«      D ��cg c]  \  }} ||«      ‘Œ }}}‰ j	                   ‰ j
                  j                  |Ž j                  |«      «      S c c}}w )Nc              3  óz   •K  — | ]2  }|s‰j                   j                  n‰j                   j                  –— Œ4 y ­wr<   ré   rì   s     €rG   rï   z+SparkLikeLazyFrame.top_k.<locals>.<genexpr>[  s1   øè ø€ ò 
ØMN©1ˆD�G‰G×#Ò#°$·'±'×2HÑ2HÓHñ
ùrð   TrÚ   )Útupler   rô   rõ   ru   rq   rö   rß   )rC   r�   rù   Úreverserú   r¡   rû   rü   s   `       rG   Útop_kzSparkLikeLazyFrame.top_kX  s…   ø€ Ü�2‹YˆÜ˜g¤s¨2£wÓ/ˆó
ØRYô
ˆ
ô 58¸¸JÈtÔ4T×U¡[ S¨&‘V˜C•[ÐUˆ	ÑUØ× Ñ Ð!1 §¡×!1Ñ!1°9Ð!=×!CÑ!CÀAÓ!FÓGÐGùó Vs   ¾B
c                óv   — |rt        |«      nd }| j                  | j                  j                  |¬«      «      S )N)Úsubset)r¤   ru   rq   Údropna)rC   r  s     rG   Ú
drop_nullszSparkLikeLazyFrame.drop_nullsa  s2   € Ù!'”�f”¨TˆØ× Ñ  §¡×!3Ñ!3¸6Ð!3Ó!BÓCÐCrI   c                óR  — | j                   D �ci c]  }||j                  ||«      “Œ }}| j                  | j                  j	                  |j                  «       D ��cg c]/  \  }}| j                  j                  |«      j                  |«      ‘Œ1 c}}«      «      S c c}w c c}}w r<   )	r—   Úgetru   rq   r»   r|   rP   r¡   r¿   )rC   ÚmappingÚcolnameÚrename_mappingÚoldÚnews         rG   ÚrenamezSparkLikeLazyFrame.renamee  s•   € àBFÇ,Á,ö
Ø7>ˆG�W—[‘[ ¨'Ó2Ñ2ð
ˆð 
ð × Ñ Ø�K‰K×ÑØ=K×=QÑ=QÓ=S×T±°°c�—‘—‘˜SÓ!×'Ñ'¨Õ,ÓTóó
ð 	
ùò
ùó
 Us   �BÁ4B#c               óº  — |xs | j                   }| j                  |«      x}r|‚t        d| j                   d¬«      }| j                  j	                  |«      }|r<|dk(  r7 |j
                  |D �cg c]  }| j                  j                  |«      ‘Œ c}Ž }nc|r7 |j
                  |D �cg c]  }| j                  j                  |«      ‘Œ c}Ž }n*|j                  | j                  j                  d«      «      }|dk(  r+| j                  j                  d«      j                  |«      }	n)| j                  j                  «       j                  |«      }	| j                  j                  ||	«      j                  | j                  j!                  |«      | j                  j                  d«      k(  «      j#                  |«      }
| j%                  |
«      S c c}w c c}w )Né   Ú
row_index_)ÚprefixÚlasté   ÚnoneÚ*)r—   Ú_check_columns_existr   rV   ÚpartitionByÚorderByrP   rê   ró   ÚlitÚcountÚoverÚ
row_numberrq   Ú
withColumnÚfilterr¡   rÜ   ru   )rC   r  ÚkeepÚorder_byÚsubset_ÚerrorÚtmp_nameÚwindowÚxÚexprrt   s              rG   ÚuniquezSparkLikeLazyFrame.uniqueo  st  € ð Ò(˜DŸL™LˆØ×-Ñ-¨gÓ6Ð6ˆ5Ð6ØˆKÜ1°!°T·\±\È,ÔWˆØ—‘×)Ñ)¨'Ó2ˆÙ˜ šØ#�V—^‘^È(Ö%SÀQ d§g¡g×&=Ñ&=¸aÕ&@Ò%SÐT‰FÙØ#�V—^‘^È(Ö%SÀQ d§g¡g×&=Ñ&=¸aÕ&@Ò%SÐT‰Fà—^‘^ D§G¡G§K¡K°£NÓ3ˆFØ�6Š>Ø—7‘7—=‘= Ó%×*Ñ*¨6Ó2‰Dà—7‘7×%Ñ%Ó'×,Ñ,¨VÓ4ˆDà�K‰K×"Ñ" 8¨TÓ2ß‰V�D—G‘G—K‘K Ó)¨T¯W©W¯[©[¸«^Ñ;Ó<ß‰T�(‹^ð 	ð
 × Ñ  Ó$Ð$ùò &Tùâ%Ss   Á0"GÂ)"Gc          	     óÆ  ‡ ‡‡‡— ‰ j                   }|j                   }|�t        |«      ng Š|�t        |«      ng }|dk7  r|D �	cg c]	  }	|	‰vsŒ|	‘Œ c}	n|}
i t        t        ‰|d¬«      «      ¥|
D �ci c]  }|||v r|› |› �n|“Œ c}¥Š|j                  j                  ‰j                  «       D ��cg c]/  \  }}‰ j                  j                  |«      j                  |«      ‘Œ1 c}}«      Š|j                  «       }|dv r|j                  ˆˆfd„|D «       «       n$|dk(  r|j                  ‰j                  «       «       ‰D �	cg c]  }	‰|	   ‘Œ	 }}	|dk(  r&t        t        ˆˆ fd„t        ||d¬«      D «       «      n|dk(  rd n|}|dk(  rd	n|}‰ j                  ‰ j                  j!                  ‰||¬
«      j                  |«      «      S c c}	w c c}w c c}}w c c}	w )NÚfullFrÚ   >   ÚleftÚcrossÚinnerc              3  ó0   •K  — | ]  }|‰vr‰|   –— Œ y ­wr<   rm   )rí   r	  r
  Ú	right_on_s     €€rG   rï   z*SparkLikeLazyFrame.join.<locals>.<genexpr>µ  s&   øè ø€ ò àØ )Ñ+ð ˜wÕ'ñùs   ƒc              3  ój   •K  — | ]*  \  }}t        ‰j                  |«      t        ‰|«      k(  –— Œ, y ­wr<   )Úgetattrrq   )rí   Úleft_keyÚ	right_keyÚother_nativerC   s      €€rG   rï   z*SparkLikeLazyFrame.join.<locals>.<genexpr>Á  s4   øè ø€ ò á+˜ )ô ˜DŸK™K¨Ó2´g¸lÈIÓ6VÕVñùs   ƒ03Tr+  Ú
full_outer)ÚonÚhow)r—   r¤   rË   rõ   rq   r»   r|   rP   r¡   r¿   ÚcopyÚextendÚvaluesr   r   ru   Újoin)rC   Úotherr6  Úleft_onÚright_onÚsuffixÚleft_columnsÚright_columnsÚleft_on_ÚcÚright_cols_to_renamer	  r  r  Ú	col_orderÚright_on_remappedÚon_Ú
how_nativer3  r
  r.  s   `                 @@@rG   r:  zSparkLikeLazyFrame.joinŒ  s	  û€ ð —|‘|ˆØŸ™ˆà19Ð1Eœt Hœ~È2ˆ	Ø/6Ð/Bœd 7œmÈˆð �fŠ}ð &Ö<�1¨°)Ò);ŠQÓ<àð 	ð
Ü”3�y (°5Ô9Ó:ð
ð  4öàð °¸LÑ1H˜G˜9 V HÑ-ÈgÑUòð
ˆð —|‘|×*Ñ*Ø9G×9MÑ9MÓ9O×P©X¨S°#ˆT�W‰W�[‰[˜Ó×#Ñ# CÕ(ÓPó
ˆð !×%Ñ%Ó'ˆ	àÐ,Ñ,Ø×Ñô à,ôõ ð
 �FŠ]Ø×Ñ˜^×2Ñ2Ó4Ô5à8AÖB°1˜^¨AÓ.ÐBÐÐBð �fŠ}ô Üôä/2Ø Ð"3¸Dô0ôôð �gŠ~ñ àð 	ð &)¨F¢]‘\¸ˆ
Ø× Ñ Ø�K‰K×Ñ˜\¨c°zÐÓB×IÑIÈ)ÓTó
ð 	
ùò_ =ùòùó Qùò" Cs   Á	GÁGÁ3GÂ34G
ÅGc                ód  ‡ — ‰ j                   j                  }‰ j                  «       }|D ]'  }||   }||j                  k7  sŒd|› d�}t	        |«      ‚ ‰ j
                  }t        |«      dk7  rd}t        |«      ‚‰ j                  j                  «       s‰ j                  j                  «       r�‰ j                   ‰ j                  j                  |D �cg c]^  }||d   k7  r*‰ j                  j                  |«      j!                  |«      n)‰ j                  j#                  |«      j!                  |«      ‘Œ` c}Ž «      S ‰ j                  j%                  «       �r<dˆ fd„}	‰ j                   ‰ j                  j                  |D �cg c]^  }||d   k7  r*‰ j                  j                  |«      j!                  |«      n)‰ j                  j'                  |«      j!                  |«      ‘Œ` c}Ž j)                   ‰ j                  j+                   |	|d   «      «      j                  |D �cg c]^  }||d   k7  r*‰ j                  j                  |«      j!                  |«      n)‰ j                  j-                  d «      j!                  |«      ‘Œ` c}Ž «      «      S d}t/        |«      ‚c c}w c c}w c c}w )	Nz-`explode` operation not supported for dtype `z`, expected List typer  z—Exploding on multiple columns is not supported with SparkLike backend since we cannot guarantee that the exploded columns have matching element counts.r   c                óx   •— ‰j                   j                  | «      ‰j                   j                  | «      dk(  z  S rÎ   )rP   ÚisnullÚ
array_size)rÄ   rC   s    €rG   Únull_conditionz2SparkLikeLazyFrame.explode.<locals>.null_conditionû  s0   ø€ Ø—w‘w—~‘~ hÓ/°4·7±7×3EÑ3EÀhÓ3OÐSTÑ3TÑUÐUrI   z[Unreachable code, please report an issue at https://github.com/narwhals-dev/narwhals/issues)rÄ   r–   Úreturnr#   )r?   Údtypesrz   ÚListr   r—   rô   ÚNotImplementedErrorr>   r‘   r™   ru   rq   r»   rP   r¡   r¿   Úexplode_outerÚis_sqlframeÚexplodeÚunionr  r  ÚAssertionError)
rC   r—   rN  r{   Úcol_to_explodeÚdtyperµ   r¼   rÄ   rL  s
   `         rG   rS  zSparkLikeLazyFrame.explodeÒ  s¡  ø€ Ø—‘×%Ñ%ˆà×$Ñ$Ó&ˆØ%ò 	1ˆNØ˜>Ñ*ˆEà˜Ÿ™Ó#àCÀEÀ7ð K)ð )ð ô ,¨CÓ0Ð0ð	1ð —|‘|ˆäˆw‹<˜1Òð^ð ô & cÓ*Ð*à×Ñ×*Ñ*Ô,°×0DÑ0D×0WÑ0WÔ0YØ×$Ñ$Ø"�—‘×"Ñ"ð
 )5ö	ð %ð $ w¨q¡zÒ1ð Ÿ™Ÿ™ HÓ-×3Ñ3°HÔ=à!ŸW™W×2Ñ2°8Ó<×BÑBÀ8ÓLñMòðó	ð 	ð ×Ñ×+Ñ+Õ-õVð ×$Ñ$Ø"�—‘×"Ñ"ð
 )5ö	ð %ð $ w¨q¡zÒ1ð Ÿ™Ÿ™ HÓ-×3Ñ3°HÔ=à!ŸW™WŸ_™_¨XÓ6×<Ñ<¸XÓFñGòð÷ ‘%ØI�D—K‘K×&Ñ&¡~°g¸a±jÓ'AÓB×IÑIð
 -9ö	ð !)ð  (¨7°1©:Ò5ð !ŸG™GŸK™K¨Ó1×7Ñ7¸ÔAà!%§¡§¡¨TÓ!2×!8Ñ!8¸Ó!BñCòðó	óð ð& lˆÜ˜SÓ!Ð!ùòMùò(ùòs   ÃA#J#ÆA#J(È'A#J-c                ó¦  — | j                   j                  «       r$|dk(  rd}t        |«      ‚|dk(  rd}t        |«      ‚	 |rt        |«      nd}|€6t        t	        | j
                  «      j                  t	        |«      «      «      n
t        |«      }| j                  j                  ||||¬«      }|€ |j                  |Ž }| j                  |«      S )NÚ z<`variable_name` cannot be empty string for sqlframe backend.z9`value_name` cannot be empty string for sqlframe backend.rm   )Úidsr9  ÚvariableColumnNameÚvalueColumnName)r>   rR  rP  rÿ   Úsetr—   Ú
differencerq   ÚunpivotrÜ   ru   )	rC   r5  ÚindexÚvariable_nameÚ
value_namerµ   rZ  r9  Úunpivoted_native_frames	            rG   r_  zSparkLikeLazyFrame.unpivot  sÛ   € ð ×Ñ×+Ñ+Ô-Ø Ò"ØT�Ü)¨#Ó.Ð.à˜RÒØQ�Ü)¨#Ó.Ð.àá#Œe�EŒl¨ˆà=?¸ZŒE”#�d—l‘lÓ#×.Ñ.¬s°3«xÓ8Ô9ÌUÐSUËYð 	ð "&§¡×!4Ñ!4ØØØ,Ø&ð	 "5ó "
Ðð ˆ=Ø%@Ð%;×%@Ñ%@À#Ð%FÐ"Ø× Ñ Ð!7Ó8Ð8rI   c                ó€  — |€d}t        |«      ‚| j                  j                  «       j                   | j                  j                  | j                  j                  d«      «      j                  |Ž «      dz
  j                  |«      }| j                   | j                  j                  |g| j                  ¢­Ž «      S )Nz;Cannot pass `order_by` to `with_row_index` for PySpark-liker  )Ú	TypeErrorrP   r  r  rV   r  r  r  r¿   ru   rq   r»   r—   )rC   rÕ   r   rµ   Úrow_index_exprs        rG   Úwith_row_indexz!SparkLikeLazyFrame.with_row_index4  s¥   € ØÐØOˆCÜ˜C“.Ð à�G‰G×ÑÓ ×%Ñ%Ø@�—‘×(Ñ(¨¯©¯©°Q«Ó8×@Ñ@À(ÐKóð ñ÷ ‰%�‹+ð 	ð × Ñ Ð!3 §¡×!3Ñ!3°NÐ!RÀTÇ\Á\Ò!RÓSÐSrI   c                óN   — | j                   j                  j                  |«       y r<   )rq   ÚwriteÚparquet)rC   Úfiles     rG   Úsink_parquetzSparkLikeLazyFrame.sink_parquet@  s   € Ø�‰×Ñ×!Ñ! $Õ'rI   c              ó$  — ddl m} |}|j                  «        xr |j                  «       dk\  }|r|j	                  «       }n5 |d«      r|j                  «       }nt        |j                  dd¬«      «      } | |j                  |«      ||d¬«      S )	Nr   )Ú	find_spec)r�   r   r   ÚpandasTi   )ÚnamedÚbuffer_size)rE   rF   r:   )	Úimportlib.utilrn  rR  rK   Úto_arrowÚ	to_pandasrÿ   Ú	iter_rowsÚcreateDataFrame)	r]   ÚframeÚsessionrF   rE   rn  ÚimplÚis_spark_v4r^   s	            rG   Ú_from_compliant_dataframez,SparkLikeLazyFrame._from_compliant_dataframeC  s�   € õ 	-àˆØ×+Ñ+Ó-Ð-ÒW°4×3HÑ3HÓ3JÈiÑ3WˆÙð Ÿ™Ó(‰DÙ�xÔ Ø—?‘?Ó$‰Dä˜Ÿ™¨tÀ˜ÓEÓFˆDáØ×#Ñ# DÓ)ØØ)Ø%)ô	
ð 	
rI   N)
rD   ÚSQLFrameDataFramerE   r1   rF   r   r:   ÚboolrM  ÚNone)rM  ztuple[int, ...])rM  ztype[Window])rX   zSQLFrameDataFrame | AnyrM  zTypeIs[SQLFrameDataFrame])r^   r|  r_   r2   rM  r'   )rM  úLazyFrame[SQLFrameDataFrame])rM  r!   )rM  r.   )rM  r'   )rE   r1   rM  r'   )rt   r|  rM  r'   )rM  z	pa.Schema)rM  zpa.Table)rM  zIterator[Column])rM  z	list[str])r²   z_EagerAllowedImpl | Noner³   r   rM  r)   )r¼   r–   rM  r'   )rÂ   r*   rM  r'   )rÑ   r*   rM  r'   )rM  zdict[str, DType])r—   úSequence[str]rÛ   r}  rM  r'   )rà   ÚintrM  r'   )rå   z'Sequence[str] | Sequence[SparkLikeExpr]rã   r}  rM  r,   )rù   r–   r÷   úbool | Sequence[bool]rø   r}  rM  r'   )r�   r�  rù   zIterable[str]r   r‚  rM  r'   )r  úSequence[str] | NonerM  r'   )r  zMapping[str, str]rM  r'   )r  rƒ  r  r6   r   rƒ  rM  r'   )r;  r'   r6  r5   r<  rƒ  r=  rƒ  r>  r–   rM  r'   )r—   r€  rM  r'   )
r5  rƒ  r`  rƒ  ra  r–   rb  r–   rM  r'   )rÕ   r–   r   r€  rM  r'   )rk  zstr | Path | BytesIOrM  r~  )
rw  r)   rx  r/   rF   r   rE   r1   rM  r9   )0Ú__name__Ú
__module__Ú__qualname__rH   ÚpropertyrK   rP   rS   rV   ÚstaticmethodrY   Úclassmethodr`   re   rh   rk   rn   rr   ru   r�   rŸ   r¢   r—   r¶   r¹   r½   rÆ   r»   rÌ   rÓ   r{   rz   rÜ   rá   ræ   rö   r  r  r  r'  r:  rS  r_  rg  rl  r{  r   Ú	join_asofrm   rI   rG   r9   r9   <   s²  „ ð */ñ-à+ð-ð ð	-ð
 'ð-ð #'ð-ð 
ó-ð  ò7ó ð7ð ñ6ó ð6ð ñ:ó ð:ð ò3ó ð3ð ò)ó ð)ð ò[ó ð[ó;ó:ó
óó
ó

ó
!ó6;ó,#ð ò$ó ð$ð$Ø/ð$Ø;>ð$à	ó$ðL0Ø/ð0Ø;>ð0à	ó0óDó	EóHóMó?ð ò#ó ð#óóEó7ðOØ;ðOØPTðOà	óOó?ó HóDó
ð%à$ð%ð !ð	%ð
 'ð%ð 
ó%ð:D
àðD
ð ð	D
ð
 &ðD
ð 'ðD
ð ðD
ð 
óD
óL@"ðD9à ð9ð $ð9ð ð	9ð
 ð9ð 
ó9ó@
Tó(ð ð
à$ð
ð
 ð
ð 'ð
ð ð
ð 
ò
ó ð
ñ:  Ó!�IrI   r9   )r*   r|  r  )PÚ
__future__r   Ú	functoolsr   Úoperatorr   Útypingr   r   Únarwhals._exceptionsr   Únarwhals._nativer
   Únarwhals._spark_like.utilsr   r   r   r   r   r   r   Únarwhals._sql.dataframer   Únarwhals._utilsr   r   r   r   r   r   r   Únarwhals.exceptionsr   Úcollections.abcr   r   r   r   Úior   Úpathlibr    rR   r!   r"   rx   r„   Úsqlframe.base.columnr#   Úsqlframe.base.dataframer$   rU   r&   Útyping_extensionsr'   r(   Únarwhals._compliant.typingr)   Únarwhals._spark_like.exprr*   rä   r,   rj   r.   r/   Únarwhals._typingr0   r1   r2   Únarwhals.dataframer3   Únarwhals.dtypesr4   Únarwhals.typingr5   r6   r|  r7   Ú__annotations__r9   rm   rI   rG   ú<module>r¢     s¼   ðÞ "å Ý ß %å .Ý 1÷÷ ñ õ 1÷÷ ñ õ 6áßEÓEÝÝÝ Ý ãÝ+Ý5Ý+ß.å@Ý7ÝBÝAÝ7Ý2ß8Ý,Ý%ß@à% c¨3°°S¸#Ð&=Ñ>Ðà€
ˆIÓ Ø 7ôe"ØÐUÑVØõe"rI   