Ë
    ðmxiÆ0  ã                  ó„  — d dl mZ d dlZd dlmZmZmZmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dl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# erRd dl$m%Z% d dlm&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dlm6Z6 d dl7m8Z8m9Z9m:Z: e/e1e&f   Z;e*e&   Z< G d„ ded   «      Z=y)é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚCallableÚcast)ÚCoalesceOperatorÚStarExpression©ÚDuckDBExprDateTimeNamespace©ÚDuckDBExprListNamespace©ÚDuckDBExprStringNamespace©ÚDuckDBExprStructNamespace)	ÚDeferredTimeZoneÚFÚcolÚgenerate_order_by_sqlÚlitÚnarwhals_to_native_dtypeÚsql_expressionÚwhenÚwindow_expression)ÚSQLExpr)ÚImplementationÚVersionÚextend_boolÚ
no_default)ÚSequence)Ú
Expression)ÚSelf)ÚWindowInputs)Ú
AliasNamesÚ	EvalNamesÚ
EvalSeriesÚWindowFunction)ÚDuckDBLazyFrame©ÚDuckDBNamespace)Ú	NoDefault)Ú_LimitedContext)ÚFillNullStrategyÚ	IntoDTypeÚRollingInterpolationMethodc                  óþ  — e Zd Zej                  Z	 d ej                  dœ	 	 	 	 	 	 	 	 	 	 	 	 	 d!d„Zd"d„Z	 	 	 	 d#dddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 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ed+d„«       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d)d„Zd.d„Z	 	 	 	 	 	 	 	 d/d„Zd0d„Z	 	 	 	 	 	 	 	 	 	 d1d„Zed2d„«       Z ed3d„«       Z!ed4d„«       Z"ed5d„«       Z#y)6Ú
DuckDBExprN)Úimplementationc               óJ   — || _         || _        || _        || _        || _        y ©N)Ú_callÚ_evaluate_output_namesÚ_alias_output_namesÚ_versionÚ_window_function)ÚselfÚcallÚwindow_functionÚevaluate_output_namesÚalias_output_namesÚversionr2   s          úL/home/htdocs/ttos/venv/lib/python3.12/site-packages/narwhals/_duckdb/expr.pyÚ__init__zDuckDBExpr.__init__4   s*   € ð ˆŒ
Ø&;ˆÔ#Ø#5ˆÔ ØˆŒØ=LˆÕó    c                ó*   — t        dt        «       «      S ©NÚcount)r   r	   ©r:   s    r@   Ú_count_starzDuckDBExpr._count_starD   s   € Ü�œ.Ó*Ó+Ð+rB   ©Ú
descendingÚ
nulls_lastc          	     ó&   — t        |||||||¬«      S )NrH   )r   )r:   ÚexprÚpartition_byÚorder_byÚ
rows_startÚrows_endrI   rJ   s           r@   Ú_window_expressionzDuckDBExpr._window_expressionG   s&   € ô !ØØØØØØ!Ø!ô
ð 	
rB   c               ól   — t        dt        |«      «      }t        |||dœŽ}t        |› d|› d|› d�«      S )NFrH   ú(ú ú))r   Úlenr   r   )r:   ÚfunctionrL   rN   ÚflagsÚorder_by_sqls         r@   Ú_first_lastzDuckDBExpr._first_last\   sE   € ô ˜E¤3 x£=Ó1ˆÜ,Ø %°Eò
ˆô   
¨!¨D¨6°°<°.ÀÐBÓCÐCrB   c                ó(   — | j                  d||«      S )NÚfirst©rZ   ©r:   rL   rN   s      r@   Ú_firstzDuckDBExpr._firstf   s   € Ø×Ñ ¨¨xÓ8Ð8rB   c                ó(   — | j                  d||«      S )NÚlastr]   r^   s      r@   Ú_lastzDuckDBExpr._lasti   s   € Ø×Ñ ¨¨hÓ7Ð7rB   c               óN   — |r| j                  d|«      S | j                  d|«      S )NÚ	any_valuer\   )Ú	_function)r:   rL   Úignore_nullss      r@   Ú
_any_valuezDuckDBExpr._any_valuel   s1   € ñ
 ð �N‰N˜;¨Ó-ð	
ð —‘ ¨Ó.ð	
rB   c                ó4   — ddl m}  || j                  ¬«      S )Nr   r)   )r?   )Únarwhals._duckdb.namespacer*   r8   )r:   r*   s     r@   Ú__narwhals_namespace__z!DuckDBExpr.__narwhals_namespace__u   s   € Ý>á t§}¡}Ô5Ð5rB   c                ó:   — | j                  t        d«      gg «      S )Né   )Úoverr   rF   s    r@   Ú	broadcastzDuckDBExpr.broadcastz   s   € Ø�y‰yœ#˜a›&˜ 2Ó&Ð&rB   c              ó<   ‡— dˆfd„} | |‰d |j                   ¬«      S )Nc                óL   •—  ‰| «      D �cg c]  }t        |«      ‘Œ c}S c c}w r4   )r   )ÚdfÚnameÚevaluate_column_namess     €r@   Úfuncz*DuckDBExpr.from_column_names.<locals>.func…   s    ø€ Ù*?ÀÓ*CÖD $”C˜•IÒDÐDùÒDs   Œ!©r=   r>   r?   ©rq   r(   Úreturnúlist[Expression])r8   )Úclsrs   Úcontextrt   s    `  r@   Úfrom_column_nameszDuckDBExpr.from_column_names}   s*   ø€ õ	Eñ ØØ"7Ø#Ø×$Ñ$ô	
ð 	
rB   c               óZ   ‡— dˆfd„} | || j                  ‰«      d |j                  ¬«      S )Nc                ó^   •— | j                   }‰D �cg c]  }t        ||   «      ‘Œ c}S c c}w r4   )Úcolumnsr   )rq   r~   ÚiÚcolumn_indicess      €r@   rt   z,DuckDBExpr.from_column_indices.<locals>.func‘   s(   ø€ Ø—j‘jˆGØ-;Ö<¨”C˜ ™
•OÒ<Ð<ùÒ<s   ’*ru   rv   )Ú_eval_names_indicesr8   )ry   rz   r€   rt   s     ` r@   Úfrom_column_indiceszDuckDBExpr.from_column_indices�   s4   ø€ õ	=ñ ØØ"%×"9Ñ"9¸.Ó"IØ#Ø×$Ñ$ô	
ð 	
rB   c                ó$   — |j                  |«      S r4   )Úalias)ry   rL   rr   s      r@   Ú_alias_nativezDuckDBExpr._alias_nativeœ   s   € à�z‰z˜$ÓÐrB   c                óX   — t        dt        j                  «      }| j                  |«      S )NzCallable[..., Expression])r   ÚoperatorÚinvertÚ_with_elementwise)r:   rˆ   s     r@   Ú
__invert__zDuckDBExpr.__invert__    s$   € ÜÐ1´8·?±?ÓCˆØ×%Ñ% fÓ-Ð-rB   c                óX   ‡ ‡— ‰ j                   Šdd„}dˆˆ fd„}‰ j                  ||«      S )Nc           
     ó²  — t        d| «      }t        d| «      |t        d«      z
  z  t        d||t        d«      z
  z  «      z  }t        |t        d«      k(  t        d «      «      j                  t        |t        d«      k(  t        t	        d«      «      «      j                  t        |t        d«      k(  t        d«      «      j                  |«      «      «      S ©	NrE   Úskewnessé   Úsqrtrl   r   Únang        )r   r   r   Ú	otherwiseÚfloat)rL   rE   Úsample_skewnesss      r@   rt   zDuckDBExpr.skew.<locals>.func§   sº   € Ü�g˜tÓ$ˆEô �*˜dÓ#Øœ3˜q›6‘>ñ#ä�F˜E U¬S°«V¡^Ñ4Ó5ñ6ð ô
 ˜¤ Q£™¬¨T«Ó3×=Ñ=Ü�Uœc !›f‘_¤c¬%°«,Ó&7Ó8×BÑBÜ˜¤# a£&™¬#¨c«(Ó3×=Ñ=¸oÓNóóð rB   c                ó<  •— g } ‰| «      D �]  } ‰t        d|«      |j                  «      } ‰t        d|«      |j                  «      |t        d«      z
  z  t        d||t        d«      z
  z  «      z  }|j                  t	        |t        d«      k(  t        d «      «      j                  t	        |t        d«      k(  t        t        d«      «      «      j                  t	        |t        d«      k(  t        d«      «      j                  |«      «      «      «       �Œ |S r�   )r   rM   r   Úappendr   r’   r“   )rq   ÚinputsÚretrL   rE   r”   ÚWr:   s         €€r@   Úwindow_fz!DuckDBExpr.skew.<locals>.window_fµ   sû   ø€ ØˆCÙ˜R›ó �Ùœ!˜G TÓ*¨F×,?Ñ,?Ó@�ñ ”a˜
 DÓ)¨6×+>Ñ+>Ó?Øœs 1›v‘~ñ'ä˜ ¨´°Q³©Ñ 8Ó9ñ:ð  ð
 —
‘
Ü˜¤# a£&™¬#¨d«)Ó4×>Ñ>Ü˜U¤c¨!£f™_¬c´%¸³,Ó.?Ó@×JÑJÜ  ¬#¨a«&¡´#°c³(Ó;×EÑEÀoÓVóóöðð ˆJrB   ©rL   r!   rw   r!   ©rq   r(   r—   ÚDuckDBWindowInputsrw   rx   )rQ   Ú_with_callable)r:   rt   rš   r™   s   `  @r@   ÚskewzDuckDBExpr.skew¤   s-   ù€ Ø×#Ñ#ˆó	ö	ð& ×"Ñ" 4¨Ó2Ð2rB   c                ó&   — | j                  d„ «      S )Nc                ó   — t        d| «      S )NÚkurtosis_pop©r   ©rL   s    r@   ú<lambda>z%DuckDBExpr.kurtosis.<locals>.<lambda>Ë   s   € ´°.À$Ó0G€ rB   ©rž   rF   s    r@   ÚkurtosiszDuckDBExpr.kurtosisÊ   s   € Ø×"Ñ"Ñ#GÓHÐHrB   c                ó6   ‡‡— dˆˆfd„}| j                  |«      S )Nc                óT   •— ‰dk(  rt        d| t        ‰«      «      S d}t        |«      ‚)NÚlinearÚquantile_contzDOnly linear interpolation methods are supported for DuckDB quantile.)r   r   ÚNotImplementedError)rL   ÚmsgÚinterpolationÚquantiles     €€r@   rt   z!DuckDBExpr.quantile.<locals>.funcÐ   s.   ø€ Ø Ò(Ü˜¨$´°H³Ó>Ð>ØXˆCÜ% cÓ*Ð*rB   r›   r¦   )r:   r¯   r®   rt   s    `` r@   r¯   zDuckDBExpr.quantileÍ   s   ù€ ö	+ð ×"Ñ" 4Ó(Ð(rB   c                ó&   — | j                  d„ «      S )Nc                ó   — t        d«      S rD   r£   )Ú_exprs    r@   r¥   z DuckDBExpr.len.<locals>.<lambda>Ù   s
   € ´°7³€ rB   r¦   rF   s    r@   rV   zDuckDBExpr.lenØ   s   € Ø×"Ñ"Ñ#;Ó<Ð<rB   c                ó&   — | j                  d„ «      S )Nc                óT   — t        d| j                  «       j                  d«      «      S )NÚsumÚint)r   Úisnullr   r¤   s    r@   r¥   z'DuckDBExpr.null_count.<locals>.<lambda>Ü   s   € ´°%¸¿¹»×9KÑ9KÈEÓ9RÓ0S€ rB   r¦   rF   s    r@   Ú
null_countzDuckDBExpr.null_countÛ   s   € Ø×"Ñ"Ñ#SÓTÐTrB   c                ó&   — | j                  d„ «      S )Nc                ó   — t        d| «      S )NÚisnanr£   r¤   s    r@   r¥   z#DuckDBExpr.is_nan.<locals>.<lambda>ß   s   € ´1°W¸dÓ3C€ rB   ©r‰   rF   s    r@   Úis_nanzDuckDBExpr.is_nanÞ   s   € Ø×%Ñ%Ñ&CÓDÐDrB   c                ó&   — | j                  d„ «      S )Nc                ó   — t        d| «      S )NÚisfiniter£   r¤   s    r@   r¥   z&DuckDBExpr.is_finite.<locals>.<lambda>â   s   € ´1°ZÀÓ3F€ rB   r¼   rF   s    r@   Ú	is_finitezDuckDBExpr.is_finiteá   s   € Ø×%Ñ%Ñ&FÓGÐGrB   c                ó,   ‡— | j                  ˆfd„«      S )Nc                ó0   •— t        dt        ‰«      | «      S )NÚcontains)r   r   )rL   Úothers    €r@   r¥   z"DuckDBExpr.is_in.<locals>.<lambda>å   s   ø€ ´1°ZÄÀUÃÈTÓ3R€ rB   r¼   )r:   rÅ   s    `r@   Úis_inzDuckDBExpr.is_inä   s   ø€ Ø×%Ñ%Ó&RÓSÐSrB   c                óÀ   ‡ ‡‡— ‰�?‰ j                   dk  rd‰› d�}t        |«      ‚	 	 	 	 	 	 dˆˆ ˆfd„}‰ j                  |«      S dd„}|€J ‚‰ j                  ||¬«      S )	N)rl   é   z`fill_null` with `strategy=z'` is only available in 'duckdb>=1.3.0'.c                óÐ   •— ‰dk(  rdnd}‰dk(  r	‰�‰ nd dfnd‰f\  }} ‰| «      D �cg c]1  }t        t        ||«      |j                  |j                  ||d¬«      ‘Œ3 c}S c c}w )NÚforwardÚ
last_valueÚfirst_valuer   T)rO   rP   rf   )r   r   rM   rN   )	rq   r—   Ú	fill_funcrO   rP   rL   Úlimitr:   Ústrategys	         €€€r@   Ú_fill_with_strategyz1DuckDBExpr.fill_null.<locals>._fill_with_strategyï   s�   ø€ ð -5¸	Ò,A™LÀ}�	ð   9Ò,ð  %Ð0�e‘V°d¸AÑ>à˜U˜ñ %�
˜Hñ !% R£ö
ð ô &Ü˜) TÓ*Ø×+Ñ+ØŸ™Ø#-Ø!)Ø%)öò
ð 
ùò 
s   ª6A#c                ó   — t        | |«      S r4   )r   )rL   Úvalues     r@   Ú_fill_constantz,DuckDBExpr.fill_null.<locals>._fill_constant  s   € Ü# D¨%Ó0Ð0rB   )rÒ   )rq   r(   r—   r�   rw   zSequence[Expression])rL   r!   rÒ   r   rw   r!   )Ú_backend_versionr¬   Ú_with_window_functionr‰   )r:   rÒ   rÏ   rÎ   r­   rÐ   rÓ   s   ` ``   r@   Ú	fill_nullzDuckDBExpr.fill_nullç   s�   ú€ ð ÐØ×$Ñ$ vÒ-Ø3°H°:Ð=dÐe�Ü)¨#Ó.Ð.ðØ#ðØ-?ðà%÷ð* ×-Ñ-Ð.AÓBÐBó	1ð Ð Ð Ð Ø×%Ñ% n¸EÐ%ÓBÐBrB   c                óŠ   ‡ ‡— dˆˆ fd„}dˆˆ fd„}‰ j                  ||‰ j                  ‰ j                  ‰ j                  ¬«      S )Nc                ó°   •— t        | j                  «      }t        ‰‰j                  |«      } ‰| «      D �cg c]  }|j	                  |«      ‘Œ c}S c c}w r4   )r   Únativer   r8   r   )rq   ÚtzÚnative_dtyperL   Údtyper:   s       €€r@   rt   zDuckDBExpr.cast.<locals>.func  sD   ø€ Ü! "§)¡)Ó,ˆBÜ3°E¸4¿=¹=È"ÓMˆLÙ8<¸R»ÖA°�D—I‘I˜lÕ+ÒAÐAùÒAs   ¸Ac                óÄ   •— t        | j                  «      }t        ‰‰j                  |«      }‰j	                  | |«      D �cg c]  }|j                  |«      ‘Œ c}S c c}w r4   )r   rÙ   r   r8   r<   r   )rq   r—   rÚ   rÛ   rL   rÜ   r:   s        €€r@   rš   z!DuckDBExpr.cast.<locals>.window_f  sN   ø€ Ü! "§)¡)Ó,ˆBÜ3°E¸4¿=¹=È"ÓMˆLØ8<×8LÑ8LÈRÐQWÓ8XÖY°�D—I‘I˜lÕ+ÒYÐYùÒYs   ÁAru   rv   rœ   )Ú	__class__r6   r7   r8   )r:   rÜ   rt   rš   s   ``  r@   r   zDuckDBExpr.cast  sF   ù€ ö	Bö
	Zð
 �~‰~ØØØ"&×"=Ñ"=Ø#×7Ñ7Ø—M‘Mð ó 
ð 	
rB   c               ó  ‡ ‡‡‡‡	— ‰t         u rd}t        |«      ‚t        t        |«      «      t        t        |«      «      cŠ	}t	        d‰	|«      Šdˆˆˆ	ˆˆ fd„}‰ j                  |d ‰ j                  ‰ j                  ‰ j                  ¬«      S )NzM`replace_strict` requires an explicit value for `default` for duckdb backend.Úmapc                óˆ  •— | j                  ‰«      } ‰| «      D �cg c]G  }t        t        d‰	|«      t        dt        d‰|«      t        d«      «      «      j	                  |«      ‘ŒI }}‰
rKt        | j                  «      }t        ‰
‰j                  |«      }|D �cg c]  }|j                  |«      ‘Œ c}S |S c c}w c c}w )NrÄ   Úlist_extractÚmap_extractrl   )
Ú_evaluate_single_output_exprr   r   r   r’   r   rÙ   r   r8   r   )rq   Údefault_colrL   ÚresultsrÚ   rÛ   ÚresÚdefaultÚmapping_exprÚold_Úreturn_dtyper:   s          €€€€€r@   rt   z'DuckDBExpr.replace_strict.<locals>.func.  sÆ   ø€ Ø×9Ñ9¸'ÓBˆKñ ! ›Höð ô Ü�j $¨Ó-ô �n¤a¨°|ÀTÓ&JÌCÐPQËFÓSó	÷
 ‘)˜KÓ(ñ)ðˆGð ñ Ü% b§i¡iÓ0�Ü7¸ÀdÇmÁmÐUWÓX�Ø:AÖB°3˜Ÿ™ Õ.ÒBÐBØˆNùòùò Cs   �AB:ÂB?ru   rv   )	r   Ú
ValueErrorr   Úlistr   rÞ   r6   r7   r8   )
r:   rè   ÚoldÚnewrë   r­   Únew_rt   ré   rê   s
   ``  `   @@r@   Úreplace_strictzDuckDBExpr.replace_strict  s†   ü€ ð ”jÑ ØaˆCÜ˜S“/Ð!äœ˜c›“^¤S¬¨c«£^ˆ
ˆˆdÜ˜  dÓ+ˆ÷	ñ 	ð& �~‰~ØØØ"&×"=Ñ"=Ø#×7Ñ7Ø—M‘Mð ó 
ð 	
rB   c                ó   — t        | «      S r4   r   rF   s    r@   ÚstrzDuckDBExpr.strI  ó   € ä(¨Ó.Ð.rB   c                ó   — t        | «      S r4   r
   rF   s    r@   ÚdtzDuckDBExpr.dtM  s   € ä*¨4Ó0Ð0rB   c                ó   — t        | «      S r4   r   rF   s    r@   rí   zDuckDBExpr.listQ  s   € ä& tÓ,Ð,rB   c                ó   — t        | «      S r4   r   rF   s    r@   ÚstructzDuckDBExpr.structU  rô   rB   r4   )r;   z'EvalSeries[DuckDBLazyFrame, Expression]r<   zDuckDBWindowFunction | Noner=   úEvalNames[DuckDBLazyFrame]r>   zAliasNames | Noner?   r   r2   r   rw   ÚNone)rw   r!   )© rü   NN)rL   r!   rM   úSequence[str | Expression]rN   rý   rO   ú
int | NonerP   rþ   rI   úSequence[bool] | NonerJ   rÿ   rw   r!   )rW   ró   rL   r!   rN   zSequence[str]rw   r!   )rL   r!   rN   ró   rw   r!   )rL   r!   rf   Úboolrw   r!   )rw   r*   )rw   r"   )rs   rú   rz   r,   rw   r"   )r€   r¶   rz   r,   rw   r"   )rL   r!   rr   ró   rw   r!   )r¯   r“   r®   r/   rw   r"   )rÅ   úSequence[Any]rw   r"   )rÒ   zSelf | NonerÏ   zFillNullStrategy | NonerÎ   rþ   rw   r"   )rÜ   r.   rw   r"   )
rè   zDuckDBExpr | NoDefaultrî   r  rï   r  rë   zIntoDType | Nonerw   r"   )rw   r   )rw   r   )rw   r   )rw   r   )$Ú__name__Ú
__module__Ú__qualname__r   ÚDUCKDBÚ_implementationrA   rG   rQ   rZ   r_   rb   rg   rj   rn   Úclassmethodr{   r‚   r…   rŠ   rŸ   r§   r¯   rV   r¸   r½   rÁ   rÆ   rÖ   r   rñ   Úpropertyró   rö   rí   rù   rü   rB   r@   r1   r1   1   sƒ  „ Ø$×+Ñ+€Oð
 8<ðMð *8×)>Ñ)>ñMà5ðMð 5ðMð
  :ðMð .ðMð ðMð 'ðMð 
óMó ,ð 46Ø/1Ø!%Ø#ð
ð -1Ø,0ñ
àð
ð 1ð
ð -ð	
ð
 ð
ð ð
ð *ð
ð *ð
ð 
ó
ð*DØðDØ#-ðDØ9FðDà	óDó9ó8ó
ó6ó
'ð ð
à9ð
ð
 !ð
ð 
ò
ó ð
ð" ò

ó ð

ð ò ó ð ó.ó$3óLIð	)Øð	)Ø.Hð	)à	ó	)ó=óUóEóHóTð#CØ ð#CØ,Cð#CØLVð#Cà	ó#CóJ
ð&(
à'ð(
ð ð(
ð ð	(
ð 'ð(
ð 
ó(
ðT ò/ó ð/ð ò1ó ð1ð ò-ó ð-ð ò/ó ñ/rB   r1   )r(   r!   )>Ú
__future__r   r‡   Útypingr   r   r   r   Úduckdbr   r	   Únarwhals._duckdb.expr_dtr   Únarwhals._duckdb.expr_listr   Únarwhals._duckdb.expr_strr   Únarwhals._duckdb.expr_structr   Únarwhals._duckdb.utilsr   r   r   r   r   r   r   r   r   Únarwhals._sql.exprr   Únarwhals._utilsr   r   r   r   Úcollections.abcr    r!   Útyping_extensionsr"   Únarwhals._compliantr#   Únarwhals._compliant.typingr$   r%   r&   r'   Únarwhals._duckdb.dataframer(   ri   r*   Únarwhals._typingr+   r,   Únarwhals.typingr-   r.   r/   ÚDuckDBWindowFunctionr�   r1   rü   rB   r@   ú<module>r     s–   ðÝ "ã ß 5Ó 5ç 3å @Ý >Ý ?Ý B÷
÷ 
õ 
õ 'ß LÓ LáÝ(å!Ý&å0÷ó õ ;Ý:Ý*Ý/ßWÑWà)¨/¸:Ð*EÑFÐØ% jÑ1Ðôf/�Ð8Ñ9õ f/rB   