Ë
    ðmxi [  ã                  óø  — 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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-Z.d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8 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mDZDmEZE d dlFmGZG d dlHmIZI d dlJmKZKmLZL e2eeeeef   ZMeZNdeOd<   	  G d „ d!ed"   e«      ZPy)#é    )Ú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Ú
zip_strict)ÚInvalidOperationError)ÚIterableÚIteratorÚMappingÚSequence)ÚBytesIO)ÚPath)Ú
ModuleTypeN)ÚColumn)ÚBaseDataFrame©ÚWindow)ÚSelfÚ	TypeAliasÚ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        úU/home/htdocs/ttos/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©rD   s    rH   rL   z#SparkLikeLazyFrame._backend_versionP   s   € à×#Ñ#×4Ñ4Ó6Ð6rJ   c                óH   — t         rddlm} |S t        | j                  «      S )Nr   )Ú	functions)r   Úsqlframe.baserO   r   r?   )rD   rO   s     rH   Ú_FzSparkLikeLazyFrame._FT   s   € åÝ/àÐÜ × 4Ñ 4Ó5Ð5rJ   c                óH   — t         rddlm} |S t        | j                  «      S )Nr   )Útypes)r   rP   rS   r   r?   )rD   rS   s     rH   Ú_native_dtypesz!SparkLikeLazyFrame._native_dtypes\   s   € åÝ+àˆLÜ# D×$8Ñ$8Ó9Ð9rJ   c                óH   — t         rddlm} |S t        | j                  «      S )Nr   r%   )r   Úsqlframe.base.windowr&   r   r?   )rD   r&   s     rH   Ú_WindowzSparkLikeLazyFrame._Windowd   s   € åÝ3àˆMÜ˜T×1Ñ1Ó2Ð2rJ   c                ó   — t        | «      S r=   r	   )Úobjs    rH   Ú
_is_nativezSparkLikeLazyFrame._is_nativel   s   € ä# CÓ(Ð(rJ   c              ó@   —  | ||j                   |j                  ¬«      S ©N©rF   rG   )r@   r?   )ÚclsÚdataÚcontexts      rH   Úfrom_nativezSparkLikeLazyFrame.from_nativep   s   € á�4 ×!1Ñ!1À'×BYÑBYÔZÐZrJ   c                ó<   — | j                   j                  | d¬«      S )NÚlazy)Úlevel)r@   Ú	lazyframerM   s    rH   Úto_narwhalszSparkLikeLazyFrame.to_narwhalst   s   € Ø�}‰}×&Ñ& t°6Ð&Ó:Ð:rJ   c                ó6   — | j                   j                  «       S r=   )r?   Úto_native_namespacerM   s    rH   Ú__native_namespace__z'SparkLikeLazyFrame.__native_namespace__w   s   € Ø×#Ñ#×7Ñ7Ó9Ð9rJ   c                óJ   — ddl m}  || j                  | j                  ¬«      S )Nr   r.   r]   )Únarwhals._spark_like.namespacer/   r@   r?   )rD   r/   s     rH   Ú__narwhals_namespace__z)SparkLikeLazyFrame.__narwhals_namespace__z   s!   € ÝEá!Ø—M‘M°$×2FÑ2Fô
ð 	
rJ   c                ó   — | S r=   © rM   s    rH   Ú__narwhals_lazyframe__z)SparkLikeLazyFrame.__narwhals_lazyframe__�   s   € ØˆrJ   c                óR   — | j                  | j                  || j                  ¬«      S r\   )Ú	__class__Únativer?   )rD   rF   s     rH   Ú_with_versionz SparkLikeLazyFrame._with_version„   s)   € Ø�~‰~Ø�K‰K ¸×9MÑ9Mð ó 
ð 	
rJ   c                óR   — | j                  || j                  | j                  ¬«      S r\   )rq   r@   r?   )rD   Údfs     rH   Ú_with_nativezSparkLikeLazyFrame._with_native‰   s)   € Ø�~‰~Ø˜Ÿ™°d×6JÑ6Jð ó 
ð 	
rJ   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.utilsrx   Úcollect_schemarr   ÚschemaÚitemsr@   ÚappendÚ	ExceptionÚdataTyperT   ÚNullTypeÚ
isinstancer   ÚUserWarningÚnull)rD   Úparx   r|   Ú	nw_schemaÚnative_schemaÚkeyÚvalueÚnative_dtypeÚexcÚnative_spark_dtypeÚ	null_types               rH   Ú_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_pysparkrL   ry   ÚTableÚfrom_batchesrr   Ú_collect_as_arrowÚ
ValueErrorÚstrÚcolumnsrŽ   Úfrom_pydictÚis_pyspark_connectÚfrom_pandasÚtoPandasr   ÚtoArrow)rD   r…   r‹   Úkr_   Ú	pa_schemas         rH   Ú_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˜   rQ   Úcol)rD   r¢   s     rH   Ú_iter_columnsz SparkLikeLazyFrame._iter_columns¿   s,   è ø€ Ø—<‘<ò 	#ˆCØ—'‘'—+‘+˜cÓ"Ó"ñ	#ùs   ‚02c                óª   — | j                   €<| j                  �t        | j                  «      n| j                  j
                  | _         | j                   S r=   )rB   rA   Úlistr|   rr   r˜   rM   s    rH   r˜   zSparkLikeLazyFrame.columnsÃ   sM   € à×ÑÐ'ð ×&Ñ&Ð2ô �T—[‘[Ô!à—[‘[×(Ñ(ð Ô ð
 ×#Ñ#Ð#rJ   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)rG   r;   rF   Úvalidate_column_names)ÚArrowDataFrame)r;   rF   r¨   )ÚPolarsDataFrame)r;   rF   zUnsupported `backend` value: )r   ÚPANDASÚnarwhals._pandas_like.dataframer§   rr   rœ   r@   ÚPYARROWÚnarwhals._arrow.dataframer©   r    ÚPOLARSÚpolarsÚnarwhals._polars.dataframerª   Ú
from_arrowr–   )rD   ÚbackendÚkwargsr§   r©   Úplrª   Úmsgs           rH   Ú_collectzSparkLikeLazyFrame._collectÍ   sß   € ð ”n×+Ñ+Ñ+ÝKá&Ø—‘×$Ñ$Ó&Ü-×4Ñ4Ø)-ØŸ™Ø&*ôð ð ˆ?˜g¬×)?Ñ)?Ñ?Ý@á!Ø×&Ñ&Ó(Ø)-ØŸ™Ø&*ô	ð ð ”n×+Ñ+Ñ+ÛåBá"Ø—‘˜d×4Ñ4Ó6Ó7Ø)-ØŸ™ôð ð .¨g¨YÐ7ˆÜ˜‹oÐrJ   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   )rD   r³   r´   Úes       rH   Ú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=   )rv   rr   Úselect)rD   Úcolumn_namess     rH   Úsimple_selectz SparkLikeLazyFrame.simple_selectý   s%   € Ø× Ñ Ð!3 §¡×!3Ñ!3°\Ð!BÓCÐCrJ   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’   rv   rr   Úaggr   r   ©rD   ÚexprsÚnew_columnsÚcol_namer¢   Únew_columns_listr¹   s          rH   Ú	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’   rv   rr   r¼   r   r   rÂ   s          rH   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’   rv   rr   ÚwithColumnsÚdictr   r   )rD   rÃ   rÄ   r¹   s       rH   Ú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’   rv   rr   Úwherer   r   )rD   Ú	predicateÚ	conditionr¹   s       rH   Ú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=   )	rA   rr   r|   Únamer   r€   r@   rT   ÚsparkSession)rD   Úfields     rH   r|   zSparkLikeLazyFrame.schema)  s   € à×ÑÐ&ð "Ÿ[™[×/Ñ/ö#ð ð —
‘
Ô4Ø—N‘NØ—M‘MØ×'Ñ'Ø—K‘K×,Ñ,ó	ñ ò#ˆDÔð ×"Ñ"Ð"ùò#s   ¥ABc                ó   — | j                   S r=   r‘   rM   s    rH   r{   z!SparkLikeLazyFrame.collect_schema7  s   € Ø�{‰{ÐrJ   c               ón   — t        | ||¬«      }| j                   | j                  j                  |Ž «      S )N)Ústrict)r   rv   rr   Údrop)rD   r˜   rÛ   Úcolumns_to_drops       rH   rÜ   zSparkLikeLazyFrame.drop:  s3   € Ü/°°gÀfÔMˆØ× Ñ Ð!1 §¡×!1Ñ!1°?Ð!CÓDÐDrJ   c                óV   — | j                  | j                  j                  |«      «      S r=   )rv   rr   Úlimit)rD   Úns     rH   ÚheadzSparkLikeLazyFrame.head>  s"   € Ø× Ñ  §¡×!2Ñ!2°1Ó!5Ó6Ð6rJ   c               ó$   — ddl m}  || ||¬«      S )Nr   r,   )Údrop_null_keys)Únarwhals._spark_like.group_byr-   )rD   Úkeysrã   r-   s       rH   Úgroup_byzSparkLikeLazyFrame.group_byA  s   € õ 	Gá# D¨$¸~ÔNÐNrJ   c               ó  ‡ — t        |t        |«      «      }|rˆ fd„|D «       }nˆ fd„|D «       }t        ||«      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=   ©rQ   Údesc_nulls_lastÚasc_nulls_last©Ú.0ÚdrD   s     €rH   ú	<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=   )rQ   Údesc_nulls_firstÚasc_nulls_firstrì   s     €rH   rï   z*SparkLikeLazyFrame.sort.<locals>.<genexpr>P  s4   øè ø€ ò àñ -.�—‘×(Ò(°4·7±7×3JÑ3JÓJñùrð   )r   Úlenr   rv   rr   Úsort)rD   Ú
descendingÚ
nulls_lastÚbyÚ
sort_funcsr¢   Úsort_fÚ	sort_colss   `       rH   rõ   zSparkLikeLazyFrame.sortH  s�   ø€ Ü  ¬S°«WÓ5ˆ
Ùóà#ô‰Jó
à#ôˆJô
 5?¸rÀ:Ó4N×O¡[ S¨&‘V˜C•[ÐOˆ	ÑOØ× Ñ Ð!1 §¡×!1Ñ!1°9Ð!=Ó>Ð>ùó Ps   ¿A<c               ó  ‡ — t        |«      }t        |t        |«      «      }ˆ fd„|D «       }t        ||«      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     €rH   rï   z+SparkLikeLazyFrame.top_k.<locals>.<genexpr>[  s1   øè ø€ ò 
ØMN©1ˆD�G‰G×#Ò#°$·'±'×2HÑ2HÓHñ
ùrð   )Útupler   rô   r   rv   rr   rõ   rß   )rD   rž   rø   Úreverserù   r¢   rú   rû   s   `       rH   Útop_kzSparkLikeLazyFrame.top_kX  sƒ   ø€ Ü�2‹YˆÜ˜g¤s¨2£wÓ/ˆó
ØRYô
ˆ
ô 5?¸rÀ:Ó4N×O¡[ S¨&‘V˜C•[ÐOˆ	ÑOØ× Ñ Ð!1 §¡×!1Ñ!1°9Ð!=×!CÑ!CÀAÓ!FÓGÐGùó Ps   ¼Bc                óv   — |rt        |«      nd }| j                  | j                  j                  |¬«      «      S )N)Úsubset)r¥   rv   rr   Údropna)rD   r  s     rH   Ú
drop_nullszSparkLikeLazyFrame.drop_nullsa  s2   € Ù!'”�f”¨TˆØ× Ñ  §¡×!3Ñ!3¸6Ð!3Ó!BÓCÐCrJ   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˜   Úgetrv   rr   r¼   r}   rQ   r¢   rÀ   )rD   ÚmappingÚcolnameÚrename_mappingÚoldÚnews         rH   Ú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   rW   ÚpartitionByÚorderByrQ   rê   ró   ÚlitÚcountÚoverÚ
row_numberrr   Ú
withColumnrÔ   r¢   rÜ   rv   )rD   r  ÚkeepÚorder_byÚsubset_ÚerrorÚtmp_nameÚwindowÚxÚexprru   s              rH   Ú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 �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 «       «      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Úfull>   ÚleftÚcrossÚinnerc              3  ó0   •K  — | ]  }|‰vr‰|   –— Œ y ­wr=   rn   )rí   r  r	  Ú	right_on_s     €€rH   rï   z*SparkLikeLazyFrame.join.<locals>.<genexpr>µ  s&   øè ø€ ò àØ )Ñ+ð ˜wÕ'ñùs   ƒc              3  ój   •K  — | ]*  \  }}t        ‰j                  |«      t        ‰|«      k(  –— Œ, y ­wr=   )Úgetattrrr   )rí   Úleft_keyÚ	right_keyÚother_nativerD   s      €€rH   rï   z*SparkLikeLazyFrame.join.<locals>.<genexpr>Á  s4   øè ø€ ò á+˜ )ô ˜DŸK™K¨Ó2´g¸lÈIÓ6VÕVñùs   ƒ03r)  Ú
full_outer)ÚonÚhow)r˜   r¥   rÌ   Úziprr   r¼   r}   rQ   r¢   rÀ   ÚcopyÚextendÚvaluesr   r   r   rv   Újoin)rD   Úotherr4  Ú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_nativer1  r	  r,  s   `                 @@@rH   r9  zSparkLikeLazyFrame.joinŒ  s  û€ ð —|‘|ˆØŸ™ˆà19Ð1Eœt Hœ~È2ˆ	Ø/6Ð/Bœd 7œmÈˆð �fŠ}ð &Ö<�1¨°)Ò);ŠQÓ<àð 	ð
Ü”3�y (Ó+Ó,ð
ð  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Š}ô Üôä/9¸(ÐDUÓ/Vôôð �gŠ~ñ àð 	ð &)¨F¢]‘\¸ˆ
Ø× Ñ Ø�K‰K×Ñ˜\¨c°zÐÓB×IÑIÈ)ÓTó
ð 	
ùò[ =ùòùó Qùò" Cs   Á	G
ÁG
Á1GÂ14G
Å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Ï   )rQ   ÚisnullÚ
array_size)rÅ   rD   s    €rH   Únull_conditionz2SparkLikeLazyFrame.explode.<locals>.null_conditionù  s0   ø€ Ø—w‘w—~‘~ hÓ/°4·7±7×3EÑ3EÀhÓ3OÐSTÑ3TÑUÐUrJ   z[Unreachable code, please report an issue at https://github.com/narwhals-dev/narwhals/issues)rÅ   r—   Úreturnr#   )r@   Údtypesr{   ÚListr   r˜   rô   ÚNotImplementedErrorr?   r’   rš   rv   rr   r¼   rQ   r¢   rÀ   Úexplode_outerÚis_sqlframeÚexplodeÚunionrÔ   r  ÚAssertionError)
rD   r˜   rM  r|   Úcol_to_explodeÚdtyper¶   r½   rÅ   rK  s
   `         rH   rR  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.rn   )Úidsr8  ÚvariableColumnNameÚvalueColumnName)r?   rQ  rO  rþ   Úsetr˜   Ú
differencerr   ÚunpivotrÜ   rv   )	rD   r3  ÚindexÚvariable_nameÚ
value_namer¶   rY  r8  Úunpivoted_native_frames	            rH   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Ð8rJ   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  )Ú	TypeErrorrQ   r  r  rW   r  r  r  rÀ   rv   rr   r¼   r˜   )rD   rÖ   r  r¶   Úrow_index_exprs        rH   Úwith_row_indexz!SparkLikeLazyFrame.with_row_index2  s¥   € ØÐØOˆCÜ˜C“.Ð à�G‰G×ÑÓ ×%Ñ%Ø@�—‘×(Ñ(¨¯©¯©°Q«Ó8×@Ñ@À(ÐKóð ñ÷ ‰%�‹+ð 	ð × Ñ Ð!3 §¡×!3Ñ!3°NÐ!RÀTÇ\Á\Ò!RÓSÐSrJ   c                óN   — | j                   j                  j                  |«       y r=   )rr   ÚwriteÚparquet)rD   Úfiles     rH   Úsink_parquetzSparkLikeLazyFrame.sink_parquet>  s   € Ø�‰×Ñ×!Ñ! $Õ'rJ   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)rF   rG   r;   )	Úimportlib.utilrm  rQ  rL   Úto_arrowÚ	to_pandasrþ   Ú	iter_rowsÚcreateDataFrame)	r^   ÚframeÚsessionrG   rF   rm  ÚimplÚis_spark_v4r_   s	            rH   Ú_from_compliant_dataframez,SparkLikeLazyFrame._from_compliant_dataframeA  s�   € õ 	-àˆØ×+Ñ+Ó-Ð-ÒW°4×3HÑ3HÓ3JÈiÑ3WˆÙð Ÿ™Ó(‰DÙ�xÔ Ø—?‘?Ó$‰Dä˜Ÿ™¨tÀ˜ÓEÓFˆDáØ×#Ñ# DÓ)ØØ)Ø%)ô	
ð 	
rJ   N)
rE   ÚSQLFrameDataFramerF   r2   rG   r   r;   ÚboolrL  ÚNone)rL  ztuple[int, ...])rL  ztype[Window])rY   zSQLFrameDataFrame | AnyrL  zTypeIs[SQLFrameDataFrame])r_   r{  r`   r3   rL  r'   )rL  úLazyFrame[SQLFrameDataFrame])rL  r"   )rL  r/   )rL  r'   )rF   r2   rL  r'   )ru   r{  rL  r'   )rL  z	pa.Schema)rL  zpa.Table)rL  zIterator[Column])rL  z	list[str])r³   z_EagerAllowedImpl | Noner´   r   rL  r*   )r½   r—   rL  r'   )rÃ   r+   rL  r'   )rÒ   r+   rL  r'   )rL  zdict[str, DType])r˜   úSequence[str]rÛ   r|  rL  r'   )rà   ÚintrL  r'   )rå   z'Sequence[str] | Sequence[SparkLikeExpr]rã   r|  rL  r-   )rø   r—   rö   úbool | Sequence[bool]r÷   r|  rL  r'   )rž   r€  rø   zIterable[str]rÿ   r�  rL  r'   )r  úSequence[str] | NonerL  r'   )r  zMapping[str, str]rL  r'   )r  r‚  r  r7   r  r‚  rL  r'   )r:  r'   r4  r6   r;  r‚  r<  r‚  r=  r—   rL  r'   )r˜   r  rL  r'   )
r3  r‚  r_  r‚  r`  r—   ra  r—   rL  r'   )rÖ   r—   r  r  rL  r'   )rj  zstr | Path | BytesIOrL  r}  )
rv  r*   rw  r0   rG   r   rF   r2   rL  r:   )0Ú__name__Ú
__module__Ú__qualname__rI   ÚpropertyrL   rQ   rT   rW   ÚstaticmethodrZ   Úclassmethodra   rf   ri   rl   ro   rs   rv   rŽ   r    r£   r˜   r·   rº   r¾   rÇ   r¼   rÍ   rÔ   r|   r{   rÜ   rá   ræ   rõ   r   r  r  r%  r9  rR  r^  rf  rk  rz  r   Ú	join_asofrn   rJ   rH   r:   r:   <   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ó
ð%à$ð%ð !ð	%ð
 'ð%ð 
ó%ð:B
àðB
ð ð	B
ð
 &ðB
ð 'ðB
ð ðB
ð 
óB
óH@"ðD9à ð9ð $ð9ð ð	9ð
 ð9ð 
ó9ó@
Tó(ð ð
à$ð
ð
 ð
ð 'ð
ð ð
ð 
ò
ó ð
ñ:  Ó!�IrJ   r:   )r+   r{  r~  )QÚ
__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   r   Únarwhals.exceptionsr   Úcollections.abcr   r   r   r   Úior    Úpathlibr!   rS   r"   ry   r…   Úsqlframe.base.columnr#   Úsqlframe.base.dataframer$   rV   r&   Útyping_extensionsr'   r(   r)   Únarwhals._compliant.typingr*   Únarwhals._spark_like.exprr+   rä   r-   rk   r/   r0   Únarwhals._typingr1   r2   r3   Únarwhals.dataframer4   Únarwhals.dtypesr5   Únarwhals.typingr6   r7   r{  r8   Ú__annotations__r:   rn   rJ   rH   ú<module>r¡     s¼   ðÞ "å Ý ß %å .Ý 1÷÷ ñ õ 1÷	÷ 	ó 	õ 6áßEÓEÝÝÝ ãÝ+Ý5Ý+ß9Ñ9å@Ý7ÝBÝAÝ7Ý2ß8Ý,Ý%ß@à% c¨3°°S¸#Ð&=Ñ>Ðà€
ˆIÓ Ø 7ôc"ØÐUÑVØõc"rJ   