§
    ­-PhO™ ã                  óÔ  — U d dl mZ d dlZd dlmZmZmZmZmZm	Z	 d dl
mZmZmZmZ 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mZ d dlmZ d dl m!Z! d dl"m#Z# d dl$m%Z% erld dlm&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l0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9  e)d¦  «        Z: e&d¦  «        Z;ee.eef         ge-eef         f         Z<de=d<    G d„ d¦  «        Z>dgZ?dS )é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚCallableÚIterableÚMappingÚSequence)ÚExprMetadataÚapply_n_ary_operationÚcombine_metadataÚextract_compliant)Ú_validate_rolling_argumentsÚensure_typeÚflattenÚissue_deprecation_warning)Ú_validate_dtype)ÚInvalidOperationError©ÚExprCatNamespace©ÚExprDateTimeNamespace©ÚExprListNamespace©ÚExprNameNamespace©ÚExprStringNamespace©ÚExprStructNamespace)Ú	to_native)ÚTypeVar)ÚConcatenateÚ	ParamSpecÚSelfÚ	TypeAlias)ÚCompliantExprÚCompliantNamespace)ÚDType)	ÚClosedIntervalÚFillNullStrategyÚ	IntoDTypeÚIntoExprÚNonNestedLiteralÚNumericLiteralÚ
RankMethodÚRollingInterpolationMethodÚTemporalLiteralÚPSÚRr%   Ú_ToCompliantc                  óX  — e Z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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dÓd,„ZdÓd-„ZdÓd.„ZdÓd/„ZdÓd0„ZdÓd1„ZdÓd2„ZdÓd3„ZdÓd4„Z dÓd5„Z!dÓd6„Z"dÓd7„Z#dÓd8„Z$dÓd9„Z%dÓd:„Z&dÓd;„Z'dÎd<„Z(dÎd=„Z)dÎd>„Z*d?d?d?d?d@dAdBdCœdÔdN„Z+dÎdO„Z,dÎdP„Z-dAdQœdÕdS„Z.dAdQœdÕdT„Z/	 dÖd×dX„Z0dÎdY„Z1dØdZ„Z2dÎd[„Z3dÎd\„Z4dÎd]„Z5dÎd^„Z6dÎd_„Z7dÎd`„Z8dÎda„Z9dÎdb„Z:dBdcœdÙde„Z;dÎdf„Z<dÚdh„Z=	 dÖd?diœdÛdo„Z>dBdBdpœdÜds„Z?	 dÝdÞdz„Z@dÓd{„ZAdßd}„ZBdÎd~„ZCdÎd„ZDdÎd€„ZE	 	 	 dàdád‡„ZFdÎdˆ„ZG	 dÖd?dBd?d‰œdâd„ZHd?dŽœdãd“„ZIdÎd”„ZJdÎd•„ZKdÎd–„ZLdÎd—„ZMdÎd˜„ZNdäd„ZOdådÚdŸ„ZPdådÚd „ZQdædçd£„ZRdÎd¤„ZSdædèd¦„ZT	 	 dédêd¨„ZUdÎd©„ZVdÎdª„ZWdBdcœdÙd«„ZXdBdcœdÙd¬„ZYdBdcœdÙd­„ZZdBdcœdÙd®„Z[d?dBd¯œdëd²„Z\d?dBd¯œdëd³„Z]d?dBdAd´œdìdµ„Z^d?dBdAd´œdìd¶„Z_dídBd¸œdîd»„Z`eajb        fdïd½„ZcdÎd¾„ZdeedðdÀ„¦   «         ZfeedñdÂ„¦   «         ZgeedòdÄ„¦   «         ZheedódÆ„¦   «         ZieedôdÈ„¦   «         ZjeedõdÊ„¦   «         Zkd?S )öÚExprÚto_compliant_exprr4   Úmetadatar
   ÚreturnÚNonec                ó4   ‡ ‡— dˆ ˆfd„}|‰ _         |‰ _        d S )NÚplxúCompliantNamespace[Any, Any]r9   úCompliantExpr[Any, Any]c                ó6   •—  ‰| ¦  «        }‰j         |_         |S ©N©Ú	_metadata)r<   ÚresultÚselfr7   s     €€úM/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/narwhals/expr.pyÚfunczExpr.__init__.<locals>.func9   s"   ø€ Ø&Ð& sÑ+Ô+ˆFØ#œ~ˆFÔØˆMó    )r<   r=   r9   r>   )Ú_to_compliant_exprrB   )rD   r7   r8   rF   s   ``  rE   Ú__init__zExpr.__init__7   s<   øø€ ð	ð 	ð 	ð 	ð 	ð 	ð 	ð
 15ˆÔØ!ˆŒˆˆrG   úCallable[[Any], Any]r$   c                ó\   — |                       || j                             ¦   «         ¦  «        S r@   )Ú	__class__rB   Úwith_elementwise_op©rD   r7   s     rE   Ú_with_elementwise_opzExpr._with_elementwise_opA   s%   € Ø~Š~Ð/°´×1SÒ1SÑ1UÔ1UÑVÔVÐVrG   c                ó\   — |                       || j                             ¦   «         ¦  «        S r@   )rL   rB   Úwith_aggregationrN   s     rE   Ú_with_aggregationzExpr._with_aggregationD   s%   € Ø~Š~Ð/°´×1PÒ1PÑ1RÔ1RÑSÔSÐSrG   c                ó\   — |                       || j                             ¦   «         ¦  «        S r@   )rL   rB   Úwith_orderable_aggregationrN   s     rE   Ú_with_orderable_aggregationz Expr._with_orderable_aggregationG   s-   € ð ~Š~Ø˜tœ~×HÒHÑJÔJñ
ô 
ð 	
rG   c                ó\   — |                       || j                             ¦   «         ¦  «        S r@   )rL   rB   Úwith_orderable_windowrN   s     rE   Ú_with_orderable_windowzExpr._with_orderable_windowN   s%   € Ø~Š~Ð/°´×1UÒ1UÑ1WÔ1WÑXÔXÐXrG   c                ó\   — |                       || j                             ¦   «         ¦  «        S r@   )rL   rB   Úwith_unorderable_windowrN   s     rE   Ú_with_unorderable_windowzExpr._with_unorderable_windowQ   s%   € Ø~Š~Ð/°´×1WÒ1WÑ1YÔ1YÑZÔZÐZrG   c                ó\   — |                       || j                             ¦   «         ¦  «        S r@   )rL   rB   Úwith_filtrationrN   s     rE   Ú_with_filtrationzExpr._with_filtrationT   s%   € Ø~Š~Ð/°´×1OÒ1OÑ1QÔ1QÑRÔRÐRrG   c                ó\   — |                       || j                             ¦   «         ¦  «        S r@   )rL   rB   Úwith_orderable_filtrationrN   s     rE   Ú_with_orderable_filtrationzExpr._with_orderable_filtrationW   s+   € Ø~Š~Ø˜tœ~×GÒGÑIÔIñ
ô 
ð 	
rG   Ústrc                ó   — d| j         › dS )NzNarwhals Expr
metadata: ú
rA   ©rD   s    rE   Ú__repr__zExpr.__repr__\   s   € Ø=¨4¬>Ð=Ð=Ð=Ð=rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )Nc                óv   •— ‰                      | ¦  «                             ¦   «                              ¦   «         S r@   )rH   ÚabsÚsum©r<   rD   s    €rE   ú<lambda>z$Expr._taxicab_norm.<locals>.<lambda>c   s-   ø€ ˜×/Ò/°Ñ4Ô4×8Ò8Ñ:Ô:×>Ò>Ñ@Ô@€ rG   ©rR   re   s   `rE   Ú_taxicab_normzExpr._taxicab_norm_   s)   ø€ ð ×%Ò%Ø@Ð@Ð@Ð@ñ
ô 
ð 	
rG   Únamec                óD   ‡ ‡— ‰                       ˆˆ fd„‰ j        ¦  «        S )uÄ  Rename the expression.

        Arguments:
            name: The new name.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2], "b": [4, 5]})
            >>> df = nw.from_native(df_native)
            >>> df.select((nw.col("b") + 10).alias("c"))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |          c       |
            |      0  14       |
            |      1  15       |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óT   •— ‰                      | ¦  «                             ‰¦  «        S r@   )rH   Úalias)r<   ro   rD   s    €€rE   rl   zExpr.alias.<locals>.<lambda>€   s#   ø€ ˜×/Ò/°Ñ4Ô4×:Ò:¸4Ñ@Ô@€ rG   )rL   rB   )rD   ro   s   ``rE   rr   z
Expr.aliasg   s/   øø€ ð0 ~Š~Ø@Ð@Ð@Ð@Ð@À$Ä.ñ
ô 
ð 	
rG   Úfunctionú"Callable[Concatenate[Self, PS], R]ÚargsúPS.argsÚkwargsú	PS.kwargsr3   c                ó   —  || g|¢R i |¤ŽS )uŽ  Pipe function call.

        Arguments:
            function: Function to apply.
            args: Positional arguments to pass to function.
            kwargs: Keyword arguments to pass to function.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 3, 4]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(a_piped=nw.col("a").pipe(lambda x: x + 1))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |     a  a_piped   |
            |  0  1        2   |
            |  1  2        3   |
            |  2  3        4   |
            |  3  4        5   |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        © )rD   rs   ru   rw   s       rE   Úpipez	Expr.pipeƒ   s%   € ð@ ˆx˜Ð.˜tÐ.Ð.Ð. vÐ.Ð.Ð.rG   Údtyper+   c                óV   ‡ ‡— t          ‰¦  «         ‰                      ˆˆ fd„¦  «        S )u=  Redefine an object's data type.

        Arguments:
            dtype: Data type that the object will be cast into.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"foo": [1, 2, 3], "bar": [6.0, 7.0, 8.0]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("foo").cast(nw.Float32), nw.col("bar").cast(nw.UInt8))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |      foo  bar    |
            |   0  1.0    6    |
            |   1  2.0    7    |
            |   2  3.0    8    |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óT   •— ‰                      | ¦  «                             ‰¦  «        S r@   )rH   Úcast)r<   r|   rD   s    €€rE   rl   zExpr.cast.<locals>.<lambda>¿   s#   ø€ ˜×/Ò/°Ñ4Ô4×9Ò9¸%Ñ@Ô@€ rG   )r   rO   )rD   r|   s   ``rE   r   z	Expr.cast¥   s;   øø€ õ0 	˜ÑÔÐØ×(Ò(Ø@Ð@Ð@Ð@Ð@ñ
ô 
ð 	
rG   Úotherú
Self | Anyc                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó   — | |k    S r@   rz   ©ÚxÚys     rE   rl   z/Expr.__eq__.<locals>.<lambda>.<locals>.<lambda>Æ   ó
   €  ! q¢&€ rG   T©Ú
str_as_lit©r   ©r<   r€   rD   s    €€rE   rl   zExpr.__eq__.<locals>.<lambda>Å   ó&   ø€ Õ-ØÐ(Ð(¨$°À$ðñ ô € rG   ©rL   r
   Úfrom_binary_op©rD   r€   s   ``rE   Ú__eq__zExpr.__eq__Ã   óE   øø€ Ø~Š~ðð ð ð ð õ Ô'¨¨eÑ4Ô4ñ	
ô 
ð 	
rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó   — | |k    S r@   rz   r…   s     rE   rl   z/Expr.__ne__.<locals>.<lambda>.<locals>.<lambda>Î   rˆ   rG   Tr‰   r‹   rŒ   s    €€rE   rl   zExpr.__ne__.<locals>.<lambda>Í   r   rG   rŽ   r   s   ``rE   Ú__ne__zExpr.__ne__Ë   r’   rG   r   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó   — | |z  S r@   rz   r…   s     rE   rl   z0Expr.__and__.<locals>.<lambda>.<locals>.<lambda>Ö   ó
   €  ! a¡%€ rG   Tr‰   r‹   rŒ   s    €€rE   rl   zExpr.__and__.<locals>.<lambda>Õ   ó&   ø€ Õ-ØÐ'Ð'¨¨uÀðñ ô € rG   rŽ   r   s   ``rE   Ú__and__zExpr.__and__Ó   r’   rG   c                ó2   — | |z                        d¦  «        S ©NÚliteral©rr   r   s     rE   Ú__rand__zExpr.__rand__Û   ó   € Øu‘×#Ò# IÑ.Ô.Ð.rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó   — | |z  S r@   rz   r…   s     rE   rl   z/Expr.__or__.<locals>.<lambda>.<locals>.<lambda>á   rš   rG   Tr‰   r‹   rŒ   s    €€rE   rl   zExpr.__or__.<locals>.<lambda>à   r›   rG   rŽ   r   s   ``rE   Ú__or__zExpr.__or__Þ   r’   rG   c                ó2   — | |z                        d¦  «        S rž   r    r   s     rE   Ú__ror__zExpr.__ror__æ   r¢   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó   — | |z   S r@   rz   r…   s     rE   rl   z0Expr.__add__.<locals>.<lambda>.<locals>.<lambda>ì   rš   rG   Tr‰   r‹   rŒ   s    €€rE   rl   zExpr.__add__.<locals>.<lambda>ë   r›   rG   rŽ   r   s   ``rE   Ú__add__zExpr.__add__é   r’   rG   c                ó2   — | |z                         d¦  «        S rž   r    r   s     rE   Ú__radd__zExpr.__radd__ñ   r¢   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó   — | |z
  S r@   rz   r…   s     rE   rl   z0Expr.__sub__.<locals>.<lambda>.<locals>.<lambda>÷   rš   rG   Tr‰   r‹   rŒ   s    €€rE   rl   zExpr.__sub__.<locals>.<lambda>ö   r›   rG   rŽ   r   s   ``rE   Ú__sub__zExpr.__sub__ô   r’   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó,   — |                       |¦  «        S r@   )Ú__rsub__r…   s     rE   rl   z1Expr.__rsub__.<locals>.<lambda>.<locals>.<lambda>ÿ   ó   €  !§*¢*¨Q¡-¤-€ rG   Tr‰   r‹   rŒ   s    €€rE   rl   zExpr.__rsub__.<locals>.<lambda>þ   ó&   ø€ Õ-ØÐ/Ð/°°uÈðñ ô € rG   rŽ   r   s   ``rE   r¶   zExpr.__rsub__ü   r’   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó   — | |z  S r@   rz   r…   s     rE   rl   z4Expr.__truediv__.<locals>.<lambda>.<locals>.<lambda>  rš   rG   Tr‰   r‹   rŒ   s    €€rE   rl   z"Expr.__truediv__.<locals>.<lambda>  r›   rG   rŽ   r   s   ``rE   Ú__truediv__zExpr.__truediv__  r’   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó,   — |                       |¦  «        S r@   )Ú__rtruediv__r…   s     rE   rl   z5Expr.__rtruediv__.<locals>.<lambda>.<locals>.<lambda>  s   €  !§.¢.°Ñ"3Ô"3€ rG   Tr‰   r‹   rŒ   s    €€rE   rl   z#Expr.__rtruediv__.<locals>.<lambda>  s&   ø€ Õ-ØÐ3Ð3°T¸5ÈTðñ ô € rG   rŽ   r   s   ``rE   rÀ   zExpr.__rtruediv__  r’   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó   — | |z  S r@   rz   r…   s     rE   rl   z0Expr.__mul__.<locals>.<lambda>.<locals>.<lambda>  rš   rG   Tr‰   r‹   rŒ   s    €€rE   rl   zExpr.__mul__.<locals>.<lambda>  r›   rG   rŽ   r   s   ``rE   Ú__mul__zExpr.__mul__  r’   rG   c                ó2   — | |z                        d¦  «        S rž   r    r   s     rE   Ú__rmul__zExpr.__rmul__  r¢   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó   — | |k    S r@   rz   r…   s     rE   rl   z/Expr.__le__.<locals>.<lambda>.<locals>.<lambda>"  rˆ   rG   Tr‰   r‹   rŒ   s    €€rE   rl   zExpr.__le__.<locals>.<lambda>!  r   rG   rŽ   r   s   ``rE   Ú__le__zExpr.__le__  r’   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó   — | |k     S r@   rz   r…   s     rE   rl   z/Expr.__lt__.<locals>.<lambda>.<locals>.<lambda>*  ó
   €  ! a¢%€ rG   Tr‰   r‹   rŒ   s    €€rE   rl   zExpr.__lt__.<locals>.<lambda>)  r›   rG   rŽ   r   s   ``rE   Ú__lt__zExpr.__lt__'  r’   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó   — | |k    S r@   rz   r…   s     rE   rl   z/Expr.__gt__.<locals>.<lambda>.<locals>.<lambda>2  rÎ   rG   Tr‰   r‹   rŒ   s    €€rE   rl   zExpr.__gt__.<locals>.<lambda>1  r›   rG   rŽ   r   s   ``rE   Ú__gt__zExpr.__gt__/  r’   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó   — | |k    S r@   rz   r…   s     rE   rl   z/Expr.__ge__.<locals>.<lambda>.<locals>.<lambda>:  rˆ   rG   Tr‰   r‹   rŒ   s    €€rE   rl   zExpr.__ge__.<locals>.<lambda>9  r   rG   rŽ   r   s   ``rE   Ú__ge__zExpr.__ge__7  r’   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó   — | |z  S r@   rz   r…   s     rE   rl   z0Expr.__pow__.<locals>.<lambda>.<locals>.<lambda>B  s
   €  ! Q¡$€ rG   Tr‰   r‹   rŒ   s    €€rE   rl   zExpr.__pow__.<locals>.<lambda>A  s&   ø€ Õ-ØÐ&Ð&¨¨eÀðñ ô € rG   rŽ   r   s   ``rE   Ú__pow__zExpr.__pow__?  r’   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó,   — |                       |¦  «        S r@   )Ú__rpow__r…   s     rE   rl   z1Expr.__rpow__.<locals>.<lambda>.<locals>.<lambda>J  r·   rG   Tr‰   r‹   rŒ   s    €€rE   rl   zExpr.__rpow__.<locals>.<lambda>I  r¸   rG   rŽ   r   s   ``rE   rß   zExpr.__rpow__G  r’   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó   — | |z  S r@   rz   r…   s     rE   rl   z5Expr.__floordiv__.<locals>.<lambda>.<locals>.<lambda>R  s
   €  ! q¡&€ rG   Tr‰   r‹   rŒ   s    €€rE   rl   z#Expr.__floordiv__.<locals>.<lambda>Q  r   rG   rŽ   r   s   ``rE   Ú__floordiv__zExpr.__floordiv__O  r’   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó,   — |                       |¦  «        S r@   )Ú__rfloordiv__r…   s     rE   rl   z6Expr.__rfloordiv__.<locals>.<lambda>.<locals>.<lambda>Z  s   €  !§/¢/°!Ñ"4Ô"4€ rG   Tr‰   r‹   rŒ   s    €€rE   rl   z$Expr.__rfloordiv__.<locals>.<lambda>Y  s&   ø€ Õ-ØÐ4Ð4°d¸EÈdðñ ô € rG   rŽ   r   s   ``rE   rç   zExpr.__rfloordiv__W  r’   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó   — | |z  S r@   rz   r…   s     rE   rl   z0Expr.__mod__.<locals>.<lambda>.<locals>.<lambda>b  rš   rG   Tr‰   r‹   rŒ   s    €€rE   rl   zExpr.__mod__.<locals>.<lambda>a  r›   rG   rŽ   r   s   ``rE   Ú__mod__zExpr.__mod___  r’   rG   c                ó`   ‡ ‡— ‰                       ˆˆ fd„t          j        ‰ ‰¦  «        ¦  «        S )Nc                ó.   •— t          | d„ ‰‰d¬¦  «        S )Nc                ó,   — |                       |¦  «        S r@   )Ú__rmod__r…   s     rE   rl   z1Expr.__rmod__.<locals>.<lambda>.<locals>.<lambda>j  r·   rG   Tr‰   r‹   rŒ   s    €€rE   rl   zExpr.__rmod__.<locals>.<lambda>i  r¸   rG   rŽ   r   s   ``rE   rï   zExpr.__rmod__g  r’   rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )Nc                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Ú
__invert__rk   s    €rE   rl   z!Expr.__invert__.<locals>.<lambda>r  ó!   ø€ ˜×/Ò/°Ñ4Ô4×?Ò?ÑAÔA€ rG   ©rO   re   s   `rE   rò   zExpr.__invert__p  s'   ø€ Ø×(Ò(ØAÐAÐAÐAñ
ô 
ð 	
rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )uÜ  Return whether any of the values in the column are `True`.

        If there are no non-null elements, the result is `False`.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [True, False], "b": [True, True]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("a", "b").any())
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |        a     b   |
            |  0  True  True   |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úanyrk   s    €rE   rl   zExpr.any.<locals>.<lambda>Š  ó!   ø€ °$×2IÒ2IÈ#Ñ2NÔ2N×2RÒ2RÑ2TÔ2T€ rG   rm   re   s   `rE   r÷   zExpr.anyu  ó#   ø€ ð* ×%Ò%Ð&TÐ&TÐ&TÐ&TÑUÔUÐUrG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )uÔ  Return whether all values in the column are `True`.

        If there are no non-null elements, the result is `True`.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [True, False], "b": [True, True]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("a", "b").all())
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |         a     b  |
            |  0  False  True  |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úallrk   s    €rE   rl   zExpr.all.<locals>.<lambda>¡  rø   rG   rm   re   s   `rE   rü   zExpr.allŒ  rù   rG   NTé   F©ÚcomÚspanÚ	half_lifeÚalphaÚadjustÚmin_samplesÚignore_nullsrÿ   úfloat | Noner   r  r  r  Úboolr  Úintr  c          
     óP   ‡ ‡‡‡‡‡‡‡— ‰                       ˆˆˆˆˆˆˆ ˆfd„¦  «        S )u)  Compute exponentially-weighted moving average.

        Arguments:
            com: Specify decay in terms of center of mass, $\gamma$, with <br> $\alpha = \frac{1}{1+\gamma}\forall\gamma\geq0$
            span: Specify decay in terms of span, $\theta$, with <br> $\alpha = \frac{2}{\theta + 1} \forall \theta \geq 1$
            half_life: Specify decay in terms of half-life, $\tau$, with <br> $\alpha = 1 - \exp \left\{ \frac{ -\ln(2) }{ \tau } \right\} \forall \tau > 0$
            alpha: Specify smoothing factor alpha directly, $0 < \alpha \leq 1$.
            adjust: Divide by decaying adjustment factor in beginning periods to account for imbalance in relative weightings

                - When `adjust=True` (the default) the EW function is calculated
                  using weights $w_i = (1 - \alpha)^i$
                - When `adjust=False` the EW function is calculated recursively by
                  $$
                  y_0=x_0
                  $$
                  $$
                  y_t = (1 - \alpha)y_{t - 1} + \alpha x_t
                  $$
            min_samples: Minimum number of observations in window required to have a value, (otherwise result is null).
            ignore_nulls: Ignore missing values when calculating weights.

                - When `ignore_nulls=False` (default), weights are based on absolute
                  positions.
                  For example, the weights of $x_0$ and $x_2$ used in
                  calculating the final weighted average of $[x_0, None, x_2]$ are
                  $(1-\alpha)^2$ and $1$ if `adjust=True`, and
                  $(1-\alpha)^2$ and $\alpha$ if `adjust=False`.
                - When `ignore_nulls=True`, weights are based
                  on relative positions. For example, the weights of
                  $x_0$ and $x_2$ used in calculating the final weighted
                  average of $[x_0, None, x_2]$ are
                  $1-\alpha$ and $1$ if `adjust=True`,
                  and $1-\alpha$ and $\alpha$ if `adjust=False`.

        Returns:
            Expr

        Examples:
            >>> import pandas as pd
            >>> import polars as pl
            >>> import narwhals as nw
            >>> from narwhals.typing import IntoFrameT
            >>>
            >>> data = {"a": [1, 2, 3]}
            >>> df_pd = pd.DataFrame(data)
            >>> df_pl = pl.DataFrame(data)

            We define a library agnostic function:

            >>> def agnostic_ewm_mean(df_native: IntoFrameT) -> IntoFrameT:
            ...     df = nw.from_native(df_native)
            ...     return df.select(
            ...         nw.col("a").ewm_mean(com=1, ignore_nulls=False)
            ...     ).to_native()

            We can then pass either pandas or Polars to `agnostic_ewm_mean`:

            >>> agnostic_ewm_mean(df_pd)
                      a
            0  1.000000
            1  1.666667
            2  2.428571

            >>> agnostic_ewm_mean(df_pl)  # doctest: +NORMALIZE_WHITESPACE
            shape: (3, 1)
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            â”‚ a        â”‚
            â”‚ ---      â”‚
            â”‚ f64      â”‚
            â•žâ•â•â•â•â•â•â•â•â•â•â•¡
            â”‚ 1.0      â”‚
            â”‚ 1.666667 â”‚
            â”‚ 2.428571 â”‚
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c           	     ób   •— ‰                      | ¦  «                             ‰‰‰‰‰‰‰¬¦  «        S )Nrþ   )rH   Úewm_mean)	r<   r  r  rÿ   r  r  r  rD   r   s	    €€€€€€€€rE   rl   zExpr.ewm_mean.<locals>.<lambda>ú  s?   ø€ ˜×/Ò/°Ñ4Ô4×=Ò=ØØØ#ØØØ'Ø)ð >ñ ô € rG   ©rX   )rD   rÿ   r   r  r  r  r  r  s   ````````rE   r  zExpr.ewm_mean£  s\   øøøøøøøø€ ðl ×*Ò*ðð ð ð ð ð ð ð ð ð ð ñ

ô 

ð 
	
rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )ui  Get mean value.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [-1, 0, 1], "b": [2, 4, 6]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("a", "b").mean())
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |        a    b    |
            |   0  0.0  4.0    |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úmeanrk   s    €rE   rl   zExpr.mean.<locals>.<lambda>  ó!   ø€ °$×2IÒ2IÈ#Ñ2NÔ2N×2SÒ2SÑ2UÔ2U€ rG   rm   re   s   `rE   r  z	Expr.mean  ó#   ø€ ð& ×%Ò%Ð&UÐ&UÐ&UÐ&UÑVÔVÐVrG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )u  Get median value.

        Returns:
            A new expression.

        Notes:
            Results might slightly differ across backends due to differences in the underlying algorithms used to compute the median.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 8, 3], "b": [4, 5, 2]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("a", "b").median())
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |        a    b    |
            |   0  3.0  4.0    |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úmedianrk   s    €rE   rl   zExpr.median.<locals>.<lambda>0  s!   ø€ °$×2IÒ2IÈ#Ñ2NÔ2N×2UÒ2UÑ2WÔ2W€ rG   rm   re   s   `rE   r  zExpr.median  s#   ø€ ð, ×%Ò%Ð&WÐ&WÐ&WÐ&WÑXÔXÐXrG   ©Úddofr  c               ó8   ‡ ‡— ‰                       ˆˆ fd„¦  «        S )u_  Get standard deviation.

        Arguments:
            ddof: "Delta Degrees of Freedom": the divisor used in the calculation is N - ddof,
                where N represents the number of elements. By default ddof is 1.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [20, 25, 60], "b": [1.5, 1, -1.4]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("a", "b").std(ddof=0))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            | Narwhals DataFrame  |
            |---------------------|
            |          a         b|
            |0  17.79513  1.265789|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óV   •— ‰                      | ¦  «                             ‰¬¦  «        S ©Nr  )rH   Ústd©r<   r  rD   s    €€rE   rl   zExpr.std.<locals>.<lambda>J  ó&   ø€ ˜×/Ò/°Ñ4Ô4×8Ò8¸dÐ8ÑCÔC€ rG   rm   ©rD   r  s   ``rE   r  zExpr.std2  ó-   øø€ ð. ×%Ò%ØCÐCÐCÐCÐCñ
ô 
ð 	
rG   c               ó8   ‡ ‡— ‰                       ˆˆ fd„¦  «        S )un  Get variance.

        Arguments:
            ddof: "Delta Degrees of Freedom": the divisor used in the calculation is N - ddof,
                     where N represents the number of elements. By default ddof is 1.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [20, 25, 60], "b": [1.5, 1, -1.4]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("a", "b").var(ddof=0))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |  Narwhals DataFrame   |
            |-----------------------|
            |            a         b|
            |0  316.666667  1.602222|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óV   •— ‰                      | ¦  «                             ‰¬¦  «        S r  )rH   Úvarr  s    €€rE   rl   zExpr.var.<locals>.<lambda>e  r  rG   rm   r  s   ``rE   r!  zExpr.varM  r  rG   ú(Callable[[Any], CompliantExpr[Any, Any]]Úreturn_dtypeúDType | Nonec                ó<   ‡ ‡‡— ‰                       ˆˆˆ fd„¦  «        S )u¯  Apply a custom python function to a whole Series or sequence of Series.

        The output of this custom function is presumed to be either a Series,
        or a NumPy array (in which case it will be automatically converted into
        a Series).

        Arguments:
            function: Function to apply to Series.
            return_dtype: Dtype of the output Series.
                If not set, the dtype will be inferred based on the first non-null value
                that is returned by the function.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(
            ...     nw.col("a", "b")
            ...     .map_batches(lambda s: s.to_numpy() + 1, return_dtype=nw.Float64)
            ...     .name.suffix("_mapped")
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |    Narwhals DataFrame     |
            |---------------------------|
            |   a  b  a_mapped  b_mapped|
            |0  1  4       2.0       5.0|
            |1  2  5       3.0       6.0|
            |2  3  6       4.0       7.0|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óX   •— ‰                      | ¦  «                             ‰‰¬¦  «        S )N)rs   r#  )rH   Úmap_batches)r<   rs   r#  rD   s    €€€rE   rl   z"Expr.map_batches.<locals>.<lambda>‘  s0   ø€ ˜×/Ò/°Ñ4Ô4×@Ò@Ø!°ð Añ ô € rG   )ra   )rD   rs   r#  s   ```rE   r'  zExpr.map_batchesh  s>   øøø€ ðP ×.Ò.ðð ð ð ð ð ñ
ô 
ð 	
rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )u¾  Calculate the sample skewness of a column.

        Returns:
            An expression representing the sample skewness of the column.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 3, 4, 5], "b": [1, 1, 2, 10, 100]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("a", "b").skew())
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |      a         b |
            | 0  0.0  1.472427 |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úskewrk   s    €rE   rl   zExpr.skew.<locals>.<lambda>©  r  rG   rm   re   s   `rE   r*  z	Expr.skew–  r  rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )uÍ  Return the sum value.

        If there are no non-null elements, the result is zero.

        Returns:
            A new expression.

        Examples:
            >>> import duckdb
            >>> import narwhals as nw
            >>> df_native = duckdb.sql("SELECT * FROM VALUES (5, 50), (10, 100) df(a, b)")
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("a", "b").sum())
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals LazyFrame |
            |-------------------|
            |â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”|
            |â”‚   a    â”‚   b    â”‚|
            |â”‚ int128 â”‚ int128 â”‚|
            |â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”¤|
            |â”‚     15 â”‚    150 â”‚|
            |â””â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”˜|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   rj   rk   s    €rE   rl   zExpr.sum.<locals>.<lambda>Ä  rø   rG   rm   re   s   `rE   rj   zExpr.sum«  s#   ø€ ð2 ×%Ò%Ð&TÐ&TÐ&TÐ&TÑUÔUÐUrG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )uz  Returns the minimum value(s) from a column(s).

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2], "b": [4, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.min("a", "b"))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |        a  b      |
            |     0  1  3      |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úminrk   s    €rE   rl   zExpr.min.<locals>.<lambda>Ù  rø   rG   rm   re   s   `rE   r/  zExpr.minÆ  ó#   ø€ ð& ×%Ò%Ð&TÐ&TÐ&TÐ&TÑUÔUÐUrG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )u  Returns the maximum value(s) from a column(s).

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [10, 20], "b": [50, 100]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.max("a", "b"))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |        a    b    |
            |    0  20  100    |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úmaxrk   s    €rE   rl   zExpr.max.<locals>.<lambda>î  rø   rG   rm   re   s   `rE   r3  zExpr.maxÛ  r0  rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )uÍ  Returns the index of the minimum value.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [10, 20], "b": [150, 100]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("a", "b").arg_min().name.suffix("_arg_min"))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |  Narwhals DataFrame   |
            |-----------------------|
            |   a_arg_min  b_arg_min|
            |0          0          1|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úarg_minrk   s    €rE   rl   zExpr.arg_min.<locals>.<lambda>  ó!   ø€ ˜×/Ò/°Ñ4Ô4×<Ò<Ñ>Ô>€ rG   ©rU   re   s   `rE   r6  zExpr.arg_minð  ó)   ø€ ð& ×/Ò/Ø>Ð>Ð>Ð>ñ
ô 
ð 	
rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )uÍ  Returns the index of the maximum value.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [10, 20], "b": [150, 100]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("a", "b").arg_max().name.suffix("_arg_max"))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |  Narwhals DataFrame   |
            |-----------------------|
            |   a_arg_max  b_arg_max|
            |0          1          0|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úarg_maxrk   s    €rE   rl   zExpr.arg_max.<locals>.<lambda>  r7  rG   r8  re   s   `rE   r<  zExpr.arg_max  r9  rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )u‹  Returns the number of non-null elements in the column.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 3], "b": [None, 4, 4]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.all().count())
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |        a  b      |
            |     0  3  2      |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úcountrk   s    €rE   rl   zExpr.count.<locals>.<lambda>1  s!   ø€ °$×2IÒ2IÈ#Ñ2NÔ2N×2TÒ2TÑ2VÔ2V€ rG   rm   re   s   `rE   r?  z
Expr.count  s#   ø€ ð& ×%Ò%Ð&VÐ&VÐ&VÐ&VÑWÔWÐWrG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )uˆ  Returns count of unique values.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 3, 4, 5], "b": [1, 1, 3, 3, 5]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("a", "b").n_unique())
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |        a  b      |
            |     0  5  3      |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Ún_uniquerk   s    €rE   rl   zExpr.n_unique.<locals>.<lambda>F  s!   ø€ °$×2IÒ2IÈ#Ñ2NÔ2N×2WÒ2WÑ2YÔ2Y€ rG   rm   re   s   `rE   rB  zExpr.n_unique3  s#   ø€ ð& ×%Ò%Ð&YÐ&YÐ&YÐ&YÑZÔZÐZrG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )u•  Return unique values of this expression.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 1, 3, 5, 5], "b": [2, 4, 4, 6, 6]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("a", "b").unique().sum())
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |        a   b     |
            |     0  9  12     |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úuniquerk   s    €rE   rl   zExpr.unique.<locals>.<lambda>[  s!   ø€ °×1HÒ1HÈÑ1MÔ1M×1TÒ1TÑ1VÔ1V€ rG   ©r^   re   s   `rE   rE  zExpr.uniqueH  s#   ø€ ð& ×$Ò$Ð%VÐ%VÐ%VÐ%VÑWÔWÐWrG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )uÖ  Return absolute value of each element.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, -2], "b": [-3, 4]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(nw.col("a", "b").abs().name.suffix("_abs"))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            | Narwhals DataFrame  |
            |---------------------|
            |   a  b  a_abs  b_abs|
            |0  1 -3      1      3|
            |1 -2  4      2      4|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   ri   rk   s    €rE   rl   zExpr.abs.<locals>.<lambda>q  ó!   ø€ °T×5LÒ5LÈSÑ5QÔ5Q×5UÒ5UÑ5WÔ5W€ rG   rô   re   s   `rE   ri   zExpr.abs]  s#   ø€ ð( ×(Ò(Ð)WÐ)WÐ)WÐ)WÑXÔXÐXrG   ©ÚreverserK  c               ó8   ‡ ‡— ‰                       ˆˆ fd„¦  «        S )u	  Return cumulative sum.

        Info:
            For lazy backends, this operation must be followed by `Expr.over` with
            `order_by` specified, see [order-dependence](../concepts/order_dependence.md).

        Arguments:
            reverse: reverse the operation

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 1, 3, 5, 5], "b": [2, 4, 4, 6, 6]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(a_cum_sum=nw.col("a").cum_sum())
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |   a  b  a_cum_sum|
            |0  1  2          1|
            |1  1  4          2|
            |2  3  4          5|
            |3  5  6         10|
            |4  5  6         15|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óV   •— ‰                      | ¦  «                             ‰¬¦  «        S ©NrJ  )rH   Úcum_sum©r<   rK  rD   s    €€rE   rl   zExpr.cum_sum.<locals>.<lambda>’  ó&   ø€ ˜×/Ò/°Ñ4Ô4×<Ò<ÀWÐ<ÑMÔM€ rG   r  ©rD   rK  s   ``rE   rO  zExpr.cum_sums  s-   øø€ ð< ×*Ò*ØMÐMÐMÐMÐMñ
ô 
ð 	
rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )uÚ  Returns the difference between each element and the previous one.

        Info:
            For lazy backends, this operation must be followed by `Expr.over` with
            `order_by` specified, see [order-dependence](../concepts/order_dependence.md).

        Returns:
            A new expression.

        Notes:
            pandas may change the dtype here, for example when introducing missing
            values in an integer column. To ensure, that the dtype doesn't change,
            you may want to use `fill_null` and `cast`. For example, to calculate
            the diff and fill missing values with `0` in a Int64 column, you could
            do:

                nw.col("a").diff().fill_null(0).cast(nw.Int64)

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [1, 1, 3, 5, 5]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(a_diff=nw.col("a").diff())
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            | shape: (5, 2)    |
            | â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â” |
            | â”‚ a   â”† a_diff â”‚ |
            | â”‚ --- â”† ---    â”‚ |
            | â”‚ i64 â”† i64    â”‚ |
            | â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•¡ |
            | â”‚ 1   â”† null   â”‚ |
            | â”‚ 1   â”† 0      â”‚ |
            | â”‚ 3   â”† 2      â”‚ |
            | â”‚ 5   â”† 2      â”‚ |
            | â”‚ 5   â”† 0      â”‚ |
            | â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”˜ |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Údiffrk   s    €rE   rl   zExpr.diff.<locals>.<lambda>À  s!   ø€ ˜×/Ò/°Ñ4Ô4×9Ò9Ñ;Ô;€ rG   r  re   s   `rE   rU  z	Expr.diff•  s*   ø€ ðT ×*Ò*Ø;Ð;Ð;Ð;ñ
ô 
ð 	
rG   Únc                óf   ‡ ‡— t          ‰t          d¬¦  «         ‰                      ˆˆ fd„¦  «        S )u  Shift values by `n` positions.

        Info:
            For lazy backends, this operation must be followed by `Expr.over` with
            `order_by` specified, see [order-dependence](../concepts/order_dependence.md).

        Arguments:
            n: Number of positions to shift values by.

        Returns:
            A new expression.

        Notes:
            pandas may change the dtype here, for example when introducing missing
            values in an integer column. To ensure, that the dtype doesn't change,
            you may want to use `fill_null` and `cast`. For example, to shift
            and fill missing values with `0` in a Int64 column, you could
            do:

                nw.col("a").shift(1).fill_null(0).cast(nw.Int64)

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [1, 1, 3, 5, 5]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(a_shift=nw.col("a").shift(n=1))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |shape: (5, 2)     |
            |â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â” |
            |â”‚ a   â”† a_shift â”‚ |
            |â”‚ --- â”† ---     â”‚ |
            |â”‚ i64 â”† i64     â”‚ |
            |â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•¡ |
            |â”‚ 1   â”† null    â”‚ |
            |â”‚ 1   â”† 1       â”‚ |
            |â”‚ 3   â”† 1       â”‚ |
            |â”‚ 5   â”† 3       â”‚ |
            |â”‚ 5   â”† 5       â”‚ |
            |â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜ |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        rV  )Ú
param_namec                óT   •— ‰                      | ¦  «                             ‰¦  «        S r@   )rH   Úshift©r<   rV  rD   s    €€rE   rl   zExpr.shift.<locals>.<lambda>ó  s#   ø€ ˜×/Ò/°Ñ4Ô4×:Ò:¸1Ñ=Ô=€ rG   )r   r  rX   )rD   rV  s   ``rE   rZ  z
Expr.shiftÃ  sC   øø€ õZ 	A•s sÐ+Ñ+Ô+Ð+à×*Ò*Ø=Ð=Ð=Ð=Ð=ñ
ô 
ð 	
rG   ©r#  Úoldú!Sequence[Any] | Mapping[Any, Any]ÚnewúSequence[Any] | NoneúIntoDType | Nonec               ó  ‡ ‡‡‡— ‰€ht          ‰t          ¦  «        sd}t          |¦  «        ‚t          ‰                     ¦   «         ¦  «        Št          ‰                     ¦   «         ¦  «        Š‰                      ˆˆˆˆ fd„¦  «        S )u"  Replace all values by different values.

        This function must replace all non-null input values (else it raises an error).

        Arguments:
            old: Sequence of values to replace. It also accepts a mapping of values to
                their replacement as syntactic sugar for
                `replace_strict(old=list(mapping.keys()), new=list(mapping.values()))`.
            new: Sequence of values to replace by. Length must match the length of `old`.
            return_dtype: The data type of the resulting expression. If set to `None`
                (default), the data type is determined automatically based on the other
                inputs.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [3, 0, 1, 2]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(
            ...     b=nw.col("a").replace_strict(
            ...         [0, 1, 2, 3],
            ...         ["zero", "one", "two", "three"],
            ...         return_dtype=nw.String,
            ...     )
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |      a      b    |
            |   0  3  three    |
            |   1  0   zero    |
            |   2  1    one    |
            |   3  2    two    |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        NzB`new` argument is required if `old` argument is not a Mapping typec                óZ   •— ‰                      | ¦  «                             ‰‰‰¬¦  «        S )Nr\  )rH   Úreplace_strict)r<   r_  r]  r#  rD   s    €€€€rE   rl   z%Expr.replace_strict.<locals>.<lambda>,  s2   ø€ ˜×/Ò/°Ñ4Ô4×CÒCØS |ð Dñ ô € rG   )Ú
isinstancer   Ú	TypeErrorÚlistÚvaluesÚkeysrO   )rD   r]  r_  r#  Úmsgs   ```` rE   rd  zExpr.replace_strictö  s–   øøøø€ ðZ ˆ;Ý˜c¥7Ñ+Ô+ð %ØZÝ ‘n”nÐ$ås—z’z‘|”|Ñ$Ô$ˆCÝs—x’x‘z”zÑ"Ô"ˆCà×(Ò(ðð ð ð ð ð ð ñ
ô 
ð 	
rG   ©Ú
descendingÚ
nulls_lastrl  rm  c               ób   ‡ ‡‡— d}t          |d¬¦  «         ‰                      ˆˆˆ fd„¦  «        S )aN  Sort this column. Place null values first.

        Warning:
            `Expr.sort` is deprecated and will be removed in a future version.
            Hint: instead of `df.select(nw.col('a').sort())`, use
            `df.select(nw.col('a')).sort()` instead.
            Note: this will remain available in `narwhals.stable.v1`.
            See [stable api](../backcompat.md/) for more information.

        Arguments:
            descending: Sort in descending order.
            nulls_last: Place null values last instead of first.

        Returns:
            A new expression.
        a$  `Expr.sort` is deprecated and will be removed in a future version.

Hint: instead of `df.select(nw.col('a').sort())`, use `df.select(nw.col('a')).sort()`.

Note: this will remain available in `narwhals.stable.v1`.
See https://narwhals-dev.github.io/narwhals/backcompat/ for more information.
ú1.23.0©Ú_versionc                óX   •— ‰                      | ¦  «                             ‰‰¬¦  «        S )Nrk  )rH   Úsort)r<   rl  rm  rD   s    €€€rE   rl   zExpr.sort.<locals>.<lambda>J  s/   ø€ ˜×/Ò/°Ñ4Ô4×9Ò9Ø%°*ð :ñ ô € rG   )r   rX   )rD   rl  rm  rj  s   ``` rE   rs  z	Expr.sort1  s[   øøø€ ð$^ð 	õ 	" #°Ð9Ñ9Ô9Ð9Ø×*Ò*ðð ð ð ð ð ñ
ô 
ð 	
rG   ÚbothÚlower_boundúAny | IntoExprÚupper_boundÚclosedr)   c                óv   ‡ ‡‡‡‡— d
ˆfd„Š‰                       ˆˆˆ ˆfd„t          ‰ ‰‰ddd¬	¦  «        ¦  «        S )uK  Check if this expression is between the given lower and upper bounds.

        Arguments:
            lower_bound: Lower bound value. String literals are interpreted as column names.
            upper_bound: Upper bound value. String literals are interpreted as column names.
            closed: Define which sides of the interval are closed (inclusive).

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 3, 4, 5]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(b=nw.col("a").is_between(2, 4, "right"))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |      a      b    |
            |   0  1  False    |
            |   1  2  False    |
            |   2  3   True    |
            |   3  4   True    |
            |   4  5  False    |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        Úcompliant_exprr>   ÚlbÚubr9   c                ó   •— ‰dk    r| |k    | |k     z  S ‰dk    r| |k    | |k    z  S ‰dk    r| |k    | |k     z  S | |k    | |k    z  S )NÚleftÚrightÚnonerz   )rz  r{  r|  rx  s      €rE   rF   zExpr.is_between.<locals>.funcr  sz   ø€ ð
 ˜ÒÐØ&¨"Ò,°À"Ò1DÑEÐEØ˜7Ò"Ð"Ø&¨Ò+°À"Ò0DÑEÐEØ˜6Ò!Ð!Ø&¨Ò+°ÀÒ0CÑDÐDØ" bÒ(¨^¸rÒ-AÑBÐBrG   c                ó.   •— t          | ‰‰‰‰d¬¦  «        S )NFr‰   r‹   )r<   rF   ru  rD   rw  s    €€€€rE   rl   z!Expr.is_between.<locals>.<lambda>€  s$   ø€ Õ-ØT˜4 ¨kÀeðñ ô € rG   F©rŠ   Úallow_multi_outputÚto_single_output)rz  r>   r{  r>   r|  r>   r9   r>   ©rL   r   )rD   ru  rw  rx  rF   s   ````@rE   Ú
is_betweenzExpr.is_betweenP  s   øøøøø€ ðD	Cð 	Cð 	Cð 	Cð 	Cð 	Cð ~Š~ðð ð ð ð ð ð õ ØØØØ Ø#(Ø!&ðñ ô ñ	
ô 
ð 	
rG   c                ó¼   ‡ ‡— t          ‰t          ¦  «        r5t          ‰t          t          f¦  «        s‰                      ˆˆ fd„¦  «        S d}t          |¦  «        ‚)u1  Check if elements of this expression are present in the other iterable.

        Arguments:
            other: iterable

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 9, 10]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(b=nw.col("a").is_in([1, 2]))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |       a      b   |
            |   0   1   True   |
            |   1   2   True   |
            |   2   9  False   |
            |   3  10  False   |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                ór   •— ‰                      | ¦  «                             t          ‰d¬¦  «        ¦  «        S )NT)Úpass_through)rH   Úis_inr    rŒ   s    €€rE   rl   zExpr.is_in.<locals>.<lambda>¨  s5   ø€ ˜D×3Ò3°CÑ8Ô8×>Ò>Ý˜e°$Ð7Ñ7Ô7ñô € rG   zyNarwhals `is_in` doesn't accept expressions as an argument, as opposed to Polars. You should provide an iterable instead.)re  r   rb   ÚbytesrO   ÚNotImplementedError)rD   r€   rj  s   `` rE   rŠ  z
Expr.is_in  st   øø€ õ2 eXÑ&Ô&ð 	+­z¸%Å#ÅuÀÑ/NÔ/Nð 	+Ø×,Ò,ðð ð ð ð ñô ð ð NˆCÝ% cÑ*Ô*Ð*rG   Ú
predicatesc                ó    ‡ ‡— t          |¦  «        Št          ‰ g‰¢R ddddœŽ                     ¦   «         }‰                      ˆˆ fd„|¦  «        S )uè  Filters elements based on a condition, returning a new expression.

        Arguments:
            predicates: Conditions to filter by (which get ANDed together).

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame(
            ...     {"a": [2, 3, 4, 5, 6, 7], "b": [10, 11, 12, 13, 14, 15]}
            ... )
            >>> df = nw.from_native(df_native)
            >>> df.select(
            ...     nw.col("a").filter(nw.col("a") > 4),
            ...     nw.col("b").filter(nw.col("b") < 13),
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |        a   b     |
            |     3  5  10     |
            |     4  6  11     |
            |     5  7  12     |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        FTr‚  c                ó*   •— t          | d„ ‰g‰¢R ddiŽS )Nc                 ó2   —  | d         j         | dd …         Ž S )Nr   rý   )Úfilter)Úexprss    rE   rl   z/Expr.filter.<locals>.<lambda>.<locals>.<lambda>Ø  s   € ˜˜u Qœxœ°°a°b°b´	Ð:€ rG   rŠ   Fr‹   )r<   Úflat_predicatesrD   s    €€rE   rl   zExpr.filter.<locals>.<lambda>Ö  s<   ø€ Õ-ØØ:Ð:Øðð !ð	ð ð ð
 !ðð € rG   )r   r   r]   rL   )rD   r  r8   r“  s   `  @rE   r‘  zExpr.filter°  s   øø€ õ: " *Ñ-Ô-ˆÝ#Øð
àð
ð 
ð Ø#Ø"ð
ð 
ð 
÷ Š/Ñ
Ô
ð 	ð ~Š~ðð ð ð ð ð ñ	
ô 	
ð 		
rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )u  Returns a boolean Series indicating which values are null.

        Returns:
            A new expression.

        Notes:
            pandas handles null values differently from Polars and PyArrow.
            See [null_handling](../concepts/null_handling.md/)
            for reference.

        Examples:
            >>> import duckdb
            >>> import narwhals as nw
            >>> df_native = duckdb.sql(
            ...     "SELECT * FROM VALUES (null, CAST('NaN' AS DOUBLE)), (2, 2.) df(a, b)"
            ... )
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(
            ...     a_is_null=nw.col("a").is_null(), b_is_null=nw.col("b").is_null()
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |            Narwhals LazyFrame            |
            |------------------------------------------|
            |â”Œâ”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”|
            |â”‚   a   â”‚   b    â”‚ a_is_null â”‚ b_is_null â”‚|
            |â”‚ int32 â”‚ double â”‚  boolean  â”‚  boolean  â”‚|
            |â”œâ”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¤|
            |â”‚  NULL â”‚    nan â”‚ true      â”‚ false     â”‚|
            |â”‚     2 â”‚    2.0 â”‚ false     â”‚ false     â”‚|
            |â””â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úis_nullrk   s    €rE   rl   zExpr.is_null.<locals>.<lambda>  r7  rG   rô   re   s   `rE   r–  zExpr.is_nullà  s*   ø€ ðB ×(Ò(Ø>Ð>Ð>Ð>ñ
ô 
ð 	
rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )uÉ  Indicate which values are NaN.

        Returns:
            A new expression.

        Notes:
            pandas handles null values differently from Polars and PyArrow.
            See [null_handling](../concepts/null_handling.md/)
            for reference.

        Examples:
            >>> import duckdb
            >>> import narwhals as nw
            >>> df_native = duckdb.sql(
            ...     "SELECT * FROM VALUES (null, CAST('NaN' AS DOUBLE)), (2, 2.) df(a, b)"
            ... )
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(
            ...     a_is_nan=nw.col("a").is_nan(), b_is_nan=nw.col("b").is_nan()
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |           Narwhals LazyFrame           |
            |----------------------------------------|
            |â”Œâ”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”|
            |â”‚   a   â”‚   b    â”‚ a_is_nan â”‚ b_is_nan â”‚|
            |â”‚ int32 â”‚ double â”‚ boolean  â”‚ boolean  â”‚|
            |â”œâ”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¤|
            |â”‚  NULL â”‚    nan â”‚ NULL     â”‚ true     â”‚|
            |â”‚     2 â”‚    2.0 â”‚ false    â”‚ false    â”‚|
            |â””â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úis_nanrk   s    €rE   rl   zExpr.is_nan.<locals>.<lambda>'  s!   ø€ ˜×/Ò/°Ñ4Ô4×;Ò;Ñ=Ô=€ rG   rô   re   s   `rE   r™  zExpr.is_nan  s*   ø€ ðB ×(Ò(Ø=Ð=Ð=Ð=ñ
ô 
ð 	
rG   c                óZ   ‡ — d}t          |d¬¦  «         ‰                      ˆ fd„¦  «        S )zhFind elements where boolean expression is True.

        Returns:
            A new expression.
        zÐ`Expr.arg_true` is deprecated and will be removed in a future version.

Note: this will remain available in `narwhals.stable.v1`.
See https://narwhals-dev.github.io/narwhals/backcompat/ for more information.
ro  rp  c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úarg_truerk   s    €rE   rl   zExpr.arg_true.<locals>.<lambda>6  s!   ø€ °×1HÒ1HÈÑ1MÔ1M×1VÒ1VÑ1XÔ1X€ rG   ©r   r^   )rD   rj  s   ` rE   rœ  zExpr.arg_true*  sA   ø€ ð^ð 	õ
 	" #°Ð9Ñ9Ô9Ð9Ø×$Ò$Ð%XÐ%XÐ%XÐ%XÑYÔYÐYrG   ÚvalueúExpr | NonNestedLiteralÚstrategyúFillNullStrategy | NoneÚlimitú
int | Nonec                ó
  ‡ ‡‡‡— ‰‰d}t          |¦  «        ‚‰€‰€d}t          |¦  «        ‚‰‰dvrd‰› }t          |¦  «        ‚‰                      ˆˆ ˆˆfd„‰‰ j                             ¦   «         n‰ j        ¦  «        S )u  Fill null values with given value.

        Arguments:
            value: Value or expression used to fill null values.
            strategy: Strategy used to fill null values.
            limit: Number of consecutive null values to fill when using the 'forward' or 'backward' strategy.

        Returns:
            A new expression.

        Notes:
            pandas handles null values differently from Polars and PyArrow.
            See [null_handling](../concepts/null_handling.md/)
            for reference.

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame(
            ...     {
            ...         "a": [2, None, None, 3],
            ...         "b": [2.0, float("nan"), float("nan"), 3.0],
            ...         "c": [1, 2, 3, 4],
            ...     }
            ... )
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(
            ...     nw.col("a", "b").fill_null(0).name.suffix("_filled"),
            ...     nw.col("a").fill_null(nw.col("c")).name.suffix("_filled_with_c"),
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |                     Narwhals DataFrame                     |
            |------------------------------------------------------------|
            |shape: (4, 6)                                               |
            |â”Œâ”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”|
            |â”‚ a    â”† b   â”† c   â”† a_filled â”† b_filled â”† a_filled_with_c â”‚|
            |â”‚ ---  â”† --- â”† --- â”† ---      â”† ---      â”† ---             â”‚|
            |â”‚ i64  â”† f64 â”† i64 â”† i64      â”† f64      â”† i64             â”‚|
            |â•žâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡|
            |â”‚ 2    â”† 2.0 â”† 1   â”† 2        â”† 2.0      â”† 2               â”‚|
            |â”‚ null â”† NaN â”† 2   â”† 0        â”† NaN      â”† 2               â”‚|
            |â”‚ null â”† NaN â”† 3   â”† 0        â”† NaN      â”† 3               â”‚|
            |â”‚ 3    â”† 3.0 â”† 4   â”† 3        â”† 3.0      â”† 3               â”‚|
            |â””â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

            Using a strategy:

            >>> df.select(
            ...     nw.col("a", "b"),
            ...     nw.col("a", "b")
            ...     .fill_null(strategy="forward", limit=1)
            ...     .name.suffix("_nulls_forward_filled"),
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |                       Narwhals DataFrame                       |
            |----------------------------------------------------------------|
            |shape: (4, 4)                                                   |
            |â”Œâ”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”|
            |â”‚ a    â”† b   â”† a_nulls_forward_filled â”† b_nulls_forward_filled â”‚|
            |â”‚ ---  â”† --- â”† ---                    â”† ---                    â”‚|
            |â”‚ i64  â”† f64 â”† i64                    â”† f64                    â”‚|
            |â•žâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•¡|
            |â”‚ 2    â”† 2.0 â”† 2                      â”† 2.0                    â”‚|
            |â”‚ null â”† NaN â”† 2                      â”† NaN                    â”‚|
            |â”‚ null â”† NaN â”† null                   â”† NaN                    â”‚|
            |â”‚ 3    â”† 3.0 â”† 3                      â”† 3.0                    â”‚|
            |â””â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        Nz*cannot specify both `value` and `strategy`z0must specify either a fill `value` or `strategy`>   ÚforwardÚbackwardzstrategy not supported: c                óz   •— ‰                      | ¦  «                             t          | ‰d¬¦  «        ‰‰¬¦  «        S )NTr‰   )rž  r   r¢  )rH   Ú	fill_nullr   )r<   r¢  rD   r   rž  s    €€€€rE   rl   z Expr.fill_null.<locals>.<lambda>  sB   ø€ ˜×/Ò/°Ñ4Ô4×>Ò>Ý'¨¨U¸tÐDÑDÔDØ!Øð ?ñ ô € rG   )Ú
ValueErrorrL   rB   rW   )rD   rž  r   r¢  rj  s   ```` rE   r¨  zExpr.fill_null8  sÆ   øøøø€ ðX Ð Ð!5Ø>ˆCÝ˜S‘/”/Ð!Øˆ=˜XÐ-ØDˆCÝ˜S‘/”/Ð!ØÐ HÐ4KÐ$KÐ$KØ7¨XÐ7Ð7ˆCÝ˜S‘/”/Ð!à~Š~ðð ð ð ð ð ð ð Ð#ð ŒN×0Ò0Ñ2Ô2Ð2à”ñ	
ô 	
ð 		
rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )uÄ  Drop null values.

        Returns:
            A new expression.

        Notes:
            pandas handles null values differently from Polars and PyArrow.
            See [null_handling](../concepts/null_handling.md/)
            for reference.

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [2.0, 4.0, float("nan"), 3.0, None, 5.0]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("a").drop_nulls())
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |  shape: (5, 1)   |
            |  â”Œâ”€â”€â”€â”€â”€â”         |
            |  â”‚ a   â”‚         |
            |  â”‚ --- â”‚         |
            |  â”‚ f64 â”‚         |
            |  â•žâ•â•â•â•â•â•¡         |
            |  â”‚ 2.0 â”‚         |
            |  â”‚ 4.0 â”‚         |
            |  â”‚ NaN â”‚         |
            |  â”‚ 3.0 â”‚         |
            |  â”‚ 5.0 â”‚         |
            |  â””â”€â”€â”€â”€â”€â”˜         |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Ú
drop_nullsrk   s    €rE   rl   z!Expr.drop_nulls.<locals>.<lambda>½  ró   rG   rF  re   s   `rE   r¬  zExpr.drop_nullsš  s*   ø€ ðD ×$Ò$ØAÐAÐAÐAñ
ô 
ð 	
rG   ©ÚfractionÚwith_replacementÚseedr®  r¯  r°  c               ój   ‡ ‡‡‡‡— d}t          |d¬¦  «         ‰                      ˆˆˆˆ ˆfd„¦  «        S )aO  Sample randomly from this expression.

        Warning:
            `Expr.sample` is deprecated and will be removed in a future version.
            Hint: instead of `df.select(nw.col('a').sample())`, use
            `df.select(nw.col('a')).sample()` instead.
            Note: this will remain available in `narwhals.stable.v1`.
            See [stable api](../backcompat.md/) for more information.

        Arguments:
            n: Number of items to return. Cannot be used with fraction.
            fraction: Fraction of items to return. Cannot be used with n.
            with_replacement: Allow values to be sampled more than once.
            seed: Seed for the random number generator. If set to None (default), a random
                seed is generated for each sample operation.

        Returns:
            A new expression.
        a*  `Expr.sample` is deprecated and will be removed in a future version.

Hint: instead of `df.select(nw.col('a').sample())`, use `df.select(nw.col('a')).sample()`.

Note: this will remain available in `narwhals.stable.v1`.
See https://narwhals-dev.github.io/narwhals/backcompat/ for more information.
ro  rp  c                ó\   •— ‰                      | ¦  «                             ‰‰‰‰¬¦  «        S )Nr­  )rH   Úsample)r<   r®  rV  r°  rD   r¯  s    €€€€€rE   rl   zExpr.sample.<locals>.<lambda>ã  s4   ø€ ˜×/Ò/°Ñ4Ô4×;Ò;Ø˜HÐ7GÈdð <ñ ô € rG   r  )rD   rV  r®  r¯  r°  rj  s   ````` rE   r³  zExpr.sampleÀ  sg   øøøøø€ ð8^ð 	õ 	" #°Ð9Ñ9Ô9Ð9Ø×$Ò$ðð ð ð ð ð ð ð ñ
ô 
ð 	
rG   )Úorder_byÚpartition_byústr | Sequence[str]r´  ústr | Sequence[str] | Nonec               óH  ‡ ‡‡— t          |¦  «        Št          |t          ¦  «        r|gn|pg Š‰s‰sd}t          |¦  «        ‚‰ j        }‰r|                     ¦   «         }n'‰sd}t          |¦  «        ‚|                     ¦   «         }‰                      ˆˆˆ fd„|¦  «        S )uË  Compute expressions over the given groups (optionally with given order).

        Arguments:
            partition_by: Names of columns to compute window expression over.
                Must be names of columns, as opposed to expressions -
                so, this is a bit less flexible than Polars' `Expr.over`.
            order_by: Column(s) to order window functions by.
                For lazy backends, this argument is required when `over` is applied
                to order-dependent functions, see [order-dependence](../concepts/order_dependence.md).

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 4], "b": ["x", "x", "y"]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(a_min_per_group=nw.col("a").min().over("b"))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |   Narwhals DataFrame   |
            |------------------------|
            |   a  b  a_min_per_group|
            |0  1  x                1|
            |1  2  x                1|
            |2  4  y                4|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

            Cumulative operations are also supported, but (currently) only for
            pandas and Polars:

            >>> df.with_columns(a_cum_sum_per_group=nw.col("a").cum_sum().over("b"))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |     Narwhals DataFrame     |
            |----------------------------|
            |   a  b  a_cum_sum_per_group|
            |0  1  x                    1|
            |1  2  x                    3|
            |2  4  y                    4|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        z?At least one of `partition_by` or `order_by` must be specified.c                óV   •— ‰                      | ¦  «                             ‰‰¦  «        S r@   )rH   Úover)r<   Úflat_order_byÚflat_partition_byrD   s    €€€rE   rl   zExpr.over.<locals>.<lambda>&  s*   ø€ ˜×/Ò/°Ñ4Ô4×9Ò9Ø! =ñô € rG   )	r   re  rb   r©  rB   Úwith_ordered_overr   Úwith_partitioned_overrL   )rD   r´  rµ  rj  Úcurrent_metaÚ	next_metar»  r¼  s   `     @@rE   rº  z	Expr.overè  sÜ   øøø€ õ\ $ LÑ1Ô1ÐÝ&0°½3Ñ&?Ô&?ÐU˜˜
˜
ÀhÀnÐRTˆØ ð 	"¨ð 	"ØSˆCÝ˜S‘/”/Ð!à”~ˆØð 	=Ø$×6Ò6Ñ8Ô8ˆIˆIØ"ð 	=ØSˆCÝ'¨Ñ,Ô,Ð,à$×:Ò:Ñ<Ô<ˆIà~Š~ðð ð ð ð ð ð ñ	
ô 
ð 	
rG   c                ó,   — |                       ¦   «          S )uM  Return a boolean mask indicating duplicated values.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 3, 1], "b": ["a", "a", "b", "c"]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(nw.all().is_duplicated().name.suffix("_is_duplicated"))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |           Narwhals DataFrame            |
            |-----------------------------------------|
            |   a  b  a_is_duplicated  b_is_duplicated|
            |0  1  a             True             True|
            |1  2  a            False             True|
            |2  3  b            False            False|
            |3  1  c             True            False|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        )Ú	is_uniquere   s    rE   Úis_duplicatedzExpr.is_duplicated,  s   € ð, —’Ñ Ô Ð Ð rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )uÙ  Return a boolean mask indicating unique values.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 3, 1], "b": ["a", "a", "b", "c"]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(nw.all().is_unique().name.suffix("_is_unique"))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |       Narwhals DataFrame        |
            |---------------------------------|
            |   a  b  a_is_unique  b_is_unique|
            |0  1  a        False        False|
            |1  2  a         True        False|
            |2  3  b         True         True|
            |3  1  c        False         True|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   rÂ  rk   s    €rE   rl   z Expr.is_unique.<locals>.<lambda>[  ó!   ø€ ˜×/Ò/°Ñ4Ô4×>Ò>Ñ@Ô@€ rG   )r[   re   s   `rE   rÂ  zExpr.is_uniqueD  s)   ø€ ð, ×,Ò,Ø@Ð@Ð@Ð@ñ
ô 
ð 	
rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )uX  Count null values.

        Returns:
            A new expression.

        Notes:
            pandas handles null values differently from Polars and PyArrow.
            See [null_handling](../concepts/null_handling.md/)
            for reference.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame(
            ...     {"a": [1, 2, None, 1], "b": ["a", None, "b", None]}
            ... )
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.all().null_count())
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |        a  b      |
            |     0  1  2      |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Ú
null_countrk   s    €rE   rl   z!Expr.null_count.<locals>.<lambda>y  ró   rG   rm   re   s   `rE   rÉ  zExpr.null_count^  s)   ø€ ð4 ×%Ò%ØAÐAÐAÐAñ
ô 
ð 	
rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )uº  Return a boolean mask indicating the first occurrence of each distinct value.

        Info:
            For lazy backends, this operation must be followed by `Expr.over` with
            `order_by` specified, see [order-dependence](../concepts/order_dependence.md).

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 3, 1], "b": ["a", "a", "b", "c"]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(
            ...     nw.all().is_first_distinct().name.suffix("_is_first_distinct")
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |               Narwhals DataFrame                |
            |-------------------------------------------------|
            |   a  b  a_is_first_distinct  b_is_first_distinct|
            |0  1  a                 True                 True|
            |1  2  a                 True                False|
            |2  3  b                 True                 True|
            |3  1  c                False                 True|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úis_first_distinctrk   s    €rE   rl   z(Expr.is_first_distinct.<locals>.<lambda>™  s!   ø€ ˜×/Ò/°Ñ4Ô4×FÒFÑHÔH€ rG   r  re   s   `rE   rÌ  zExpr.is_first_distinct|  s)   ø€ ð8 ×*Ò*ØHÐHÐHÐHñ
ô 
ð 	
rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )u  Return a boolean mask indicating the last occurrence of each distinct value.

        Info:
            For lazy backends, this operation must be followed by `Expr.over` with
            `order_by` specified, see [order-dependence](../concepts/order_dependence.md).

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 3, 1], "b": ["a", "a", "b", "c"]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(
            ...     nw.all().is_last_distinct().name.suffix("_is_last_distinct")
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |              Narwhals DataFrame               |
            |-----------------------------------------------|
            |   a  b  a_is_last_distinct  b_is_last_distinct|
            |0  1  a               False               False|
            |1  2  a                True                True|
            |2  3  b                True                True|
            |3  1  c                True                True|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úis_last_distinctrk   s    €rE   rl   z'Expr.is_last_distinct.<locals>.<lambda>¹  s!   ø€ ˜×/Ò/°Ñ4Ô4×EÒEÑGÔG€ rG   r  re   s   `rE   rÏ  zExpr.is_last_distinctœ  s)   ø€ ð8 ×*Ò*ØGÐGÐGÐGñ
ô 
ð 	
rG   ÚquantileÚfloatÚinterpolationr0   c                ó<   ‡ ‡‡— ‰                       ˆˆˆ fd„¦  «        S )u  Get quantile value.

        Arguments:
            quantile: Quantile between 0.0 and 1.0.
            interpolation: Interpolation method.

        Returns:
            A new expression.

        Note:
            - pandas and Polars may have implementation differences for a given interpolation method.
            - [dask](https://docs.dask.org/en/stable/generated/dask.dataframe.Series.quantile.html) has
                its own method to approximate quantile and it doesn't implement 'nearest', 'higher',
                'lower', 'midpoint' as interpolation method - use 'linear' which is closest to the
                native 'dask' - method.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame(
            ...     {"a": list(range(50)), "b": list(range(50, 100))}
            ... )
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("a", "b").quantile(0.5, interpolation="linear"))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |        a     b   |
            |  0  24.5  74.5   |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óV   •— ‰                      | ¦  «                             ‰‰¦  «        S r@   )rH   rÐ  )r<   rÒ  rÐ  rD   s    €€€rE   rl   zExpr.quantile.<locals>.<lambda>ß  s%   ø€ ˜×/Ò/°Ñ4Ô4×=Ò=¸hÈÑVÔV€ rG   rm   )rD   rÐ  rÒ  s   ```rE   rÐ  zExpr.quantile¼  s2   øøø€ ðD ×%Ò%ØVÐVÐVÐVÐVÐVñ
ô 
ð 	
rG   é
   c                ó^   ‡ ‡— d}t          |d¬¦  «         ‰                      ˆˆ fd„¦  «        S )añ  Get the first `n` rows.

        Warning:
            `Expr.head` is deprecated and will be removed in a future version.
            Hint: instead of `df.select(nw.col('a').head())`, use
            `df.select(nw.col('a')).head()` instead.
            Note: this will remain available in `narwhals.stable.v1`.
            See [stable api](../backcompat.md/) for more information.

        Arguments:
            n: Number of rows to return.

        Returns:
            A new expression.
        a$  `Expr.head` is deprecated and will be removed in a future version.

Hint: instead of `df.select(nw.col('a').head())`, use `df.select(nw.col('a')).head()`.

Note: this will remain available in `narwhals.stable.v1`.
See https://narwhals-dev.github.io/narwhals/backcompat/ for more information.
ro  rp  c                óT   •— ‰                      | ¦  «                             ‰¦  «        S r@   )rH   Úheadr[  s    €€rE   rl   zExpr.head.<locals>.<lambda>ú  s#   ø€ ˜×/Ò/°Ñ4Ô4×9Ò9¸!Ñ<Ô<€ rG   )r   ra   ©rD   rV  rj  s   `` rE   rØ  z	Expr.headâ  sK   øø€ ð"^ð 	õ 	" #°Ð9Ñ9Ô9Ð9Ø×.Ò.Ø<Ð<Ð<Ð<Ð<ñ
ô 
ð 	
rG   c                ó^   ‡ ‡— d}t          |d¬¦  «         ‰                      ˆˆ fd„¦  «        S )að  Get the last `n` rows.

        Warning:
            `Expr.tail` is deprecated and will be removed in a future version.
            Hint: instead of `df.select(nw.col('a').tail())`, use
            `df.select(nw.col('a')).tail()` instead.
            Note: this will remain available in `narwhals.stable.v1`.
            See [stable api](../backcompat.md/) for more information.

        Arguments:
            n: Number of rows to return.

        Returns:
            A new expression.
        a$  `Expr.tail` is deprecated and will be removed in a future version.

Hint: instead of `df.select(nw.col('a').tail())`, use `df.select(nw.col('a')).tail()`.

Note: this will remain available in `narwhals.stable.v1`.
See https://narwhals-dev.github.io/narwhals/backcompat/ for more information.
ro  rp  c                óT   •— ‰                      | ¦  «                             ‰¦  «        S r@   )rH   Útailr[  s    €€rE   rl   zExpr.tail.<locals>.<lambda>  s$   ø€ °×1HÒ1HÈÑ1MÔ1M×1RÒ1RÐSTÑ1UÔ1U€ rG   r  rÙ  s   `` rE   rÜ  z	Expr.tailý  sE   øø€ ð"^ð 	õ 	" #°Ð9Ñ9Ô9Ð9Ø×$Ò$Ð%UÐ%UÐ%UÐ%UÐ%UÑVÔVÐVrG   r   Údecimalsc                ó8   ‡ ‡— ‰                       ˆˆ fd„¦  «        S )uð  Round underlying floating point data by `decimals` digits.

        Arguments:
            decimals: Number of decimals to round by.

        Returns:
            A new expression.


        Notes:
            For values exactly halfway between rounded decimal values pandas behaves differently than Polars and Arrow.

            pandas rounds to the nearest even value (e.g. -0.5 and 0.5 round to 0.0, 1.5 and 2.5 round to 2.0, 3.5 and
            4.5 to 4.0, etc..).

            Polars and Arrow round away from 0 (e.g. -0.5 to -1.0, 0.5 to 1.0, 1.5 to 2.0, 2.5 to 3.0, etc..).

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1.12345, 2.56789, 3.901234]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(a_rounded=nw.col("a").round(1))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |  Narwhals DataFrame  |
            |----------------------|
            |          a  a_rounded|
            |0  1.123450        1.1|
            |1  2.567890        2.6|
            |2  3.901234        3.9|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óT   •— ‰                      | ¦  «                             ‰¦  «        S r@   )rH   Úround)r<   rÝ  rD   s    €€rE   rl   zExpr.round.<locals>.<lambda>8  s#   ø€ ˜×/Ò/°Ñ4Ô4×:Ò:¸8ÑDÔD€ rG   rô   )rD   rÝ  s   ``rE   rà  z
Expr.round  s.   øø€ ðB ×(Ò(ØDÐDÐDÐDÐDñ
ô 
ð 	
rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )uK  Return the number of elements in the column.

        Null values count towards the total.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": ["x", "y", "z"], "b": [1, 2, 1]})
            >>> df = nw.from_native(df_native)
            >>> df.select(
            ...     nw.col("a").filter(nw.col("b") == 1).len().alias("a1"),
            ...     nw.col("a").filter(nw.col("b") == 2).len().alias("a2"),
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |       a1  a2     |
            |    0   2   1     |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úlenrk   s    €rE   rl   zExpr.len.<locals>.<lambda>S  rø   rG   rm   re   s   `rE   rã  zExpr.len;  s#   ø€ ð0 ×%Ò%Ð&TÐ&TÐ&TÐ&TÑUÔUÐUrG   Úoffsetc                ób   ‡ ‡‡— d}t          |d¬¦  «         ‰                      ˆˆˆ fd„¦  «        S )aQ  Take every nth value in the Series and return as new Series.

        Warning:
            `Expr.gather_every` is deprecated and will be removed in a future version.
            Hint: instead of `df.select(nw.col('a').gather_every())`, use
            `df.select(nw.col('a')).gather_every()` instead.
            Note: this will remain available in `narwhals.stable.v1`.
            See [stable api](../backcompat.md/) for more information.

        Arguments:
            n: Gather every *n*-th row.
            offset: Starting index.

        Returns:
            A new expression.
        a<  `Expr.gather_every` is deprecated and will be removed in a future version.

Hint: instead of `df.select(nw.col('a').gather_every())`, use `df.select(nw.col('a')).gather_every()`.

Note: this will remain available in `narwhals.stable.v1`.
See https://narwhals-dev.github.io/narwhals/backcompat/ for more information.
ro  rp  c                óX   •— ‰                      | ¦  «                             ‰‰¬¦  «        S )N)rV  rä  )rH   Úgather_every)r<   rV  rä  rD   s    €€€rE   rl   z#Expr.gather_every.<locals>.<lambda>n  s(   ø€ ˜×/Ò/°Ñ4Ô4×AÒAÀAÈfÐAÑUÔU€ rG   r  )rD   rV  rä  rj  s   ``` rE   rç  zExpr.gather_everyU  sO   øøø€ ð$^ð 	õ 	" #°Ð9Ñ9Ô9Ð9Ø×$Ò$ØUÐUÐUÐUÐUÐUñ
ô 
ð 	
rG   ú2IntoExpr | NumericLiteral | TemporalLiteral | Nonec                ód   ‡ ‡‡— ‰                       ˆˆ ˆfd„t          ‰ ‰‰ddd¬¦  «        ¦  «        S )u{  Clip values in the Series.

        Arguments:
            lower_bound: Lower bound value. String literals are treated as column names.
            upper_bound: Upper bound value. String literals are treated as column names.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(a_clipped=nw.col("a").clip(-1, 3))
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |    a  a_clipped  |
            | 0  1          1  |
            | 1  2          2  |
            | 2  3          3  |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                ó6   •— t          | ˆˆfd„‰‰‰d¬¦  «        S )Nc                 ód   •— | d                               ‰| d         nd ‰| d         nd ¦  «        S )Nr   rý   é   )Úclip)r’  ru  rw  s    €€rE   rl   z-Expr.clip.<locals>.<lambda>.<locals>.<lambda>‘  s9   ø€ ˜u QœxŸ}š}Ø +Ð 7E˜!”HH¸TØ +Ð 7E˜!”HH¸Tñ ô  € rG   Fr‰   r‹   )r<   ru  rD   rw  s    €€€rE   rl   zExpr.clip.<locals>.<lambda>  sA   ø€ Õ-Øðð ð ð ð ð ØØØ ð
ñ 
ô 
€ rG   Fr‚  r…  )rD   ru  rw  s   ```rE   rí  z	Expr.clipq  sa   øøø€ ð: ~Š~ð
ð 
ð 
ð 
ð 
ð 
õ ØØØØ Ø#(Ø!&ðñ ô ñ
ô 
ð 	
rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )u­  Compute the most occurring value(s).

        Can return multiple values.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 1, 2, 3], "b": [1, 1, 2, 2]})
            >>> df = nw.from_native(df_native)
            >>> df.select(nw.col("a").mode()).sort("a")
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |          a       |
            |       0  1       |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úmoderk   s    €rE   rl   zExpr.mode.<locals>.<lambda>¹  s!   ø€ °×1HÒ1HÈÑ1MÔ1M×1RÒ1RÑ1TÔ1T€ rG   rF  re   s   `rE   rð  z	Expr.mode¤  s#   ø€ ð* ×$Ò$Ð%TÐ%TÐ%TÐ%TÑUÔUÐUrG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )u  Returns boolean values indicating which original values are finite.

        Warning:
            pandas handles null values differently from Polars and PyArrow.
            See [null_handling](../concepts/null_handling.md/)
            for reference.
            `is_finite` will return False for NaN and Null's in the Dask and
            pandas non-nullable backend, while for Polars, PyArrow and pandas
            nullable backends null values are kept as such.

        Returns:
            Expression of `Boolean` data type.

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [float("nan"), float("inf"), 2.0, None]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(a_is_finite=nw.col("a").is_finite())
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |  Narwhals DataFrame  |
            |----------------------|
            |shape: (4, 2)         |
            |â”Œâ”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”|
            |â”‚ a    â”† a_is_finite â”‚|
            |â”‚ ---  â”† ---         â”‚|
            |â”‚ f64  â”† bool        â”‚|
            |â•žâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•â•¡|
            |â”‚ NaN  â”† false       â”‚|
            |â”‚ inf  â”† false       â”‚|
            |â”‚ 2.0  â”† true        â”‚|
            |â”‚ null â”† null        â”‚|
            |â””â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Ú	is_finiterk   s    €rE   rl   z Expr.is_finite.<locals>.<lambda>à  rÆ  rG   rô   re   s   `rE   ró  zExpr.is_finite»  s*   ø€ ðH ×(Ò(Ø@Ð@Ð@Ð@ñ
ô 
ð 	
rG   c               ó8   ‡ ‡— ‰                       ˆˆ fd„¦  «        S )u¸  Return the cumulative count of the non-null values in the column.

        Info:
            For lazy backends, this operation must be followed by `Expr.over` with
            `order_by` specified, see [order-dependence](../concepts/order_dependence.md).

        Arguments:
            reverse: reverse the operation

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": ["x", "k", None, "d"]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(
            ...     nw.col("a").cum_count().alias("a_cum_count"),
            ...     nw.col("a").cum_count(reverse=True).alias("a_cum_count_reverse"),
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |           Narwhals DataFrame            |
            |-----------------------------------------|
            |      a  a_cum_count  a_cum_count_reverse|
            |0     x            1                    3|
            |1     k            2                    2|
            |2  None            2                    1|
            |3     d            3                    1|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óV   •— ‰                      | ¦  «                             ‰¬¦  «        S rN  )rH   Ú	cum_countrP  s    €€rE   rl   z Expr.cum_count.<locals>.<lambda>  s&   ø€ ˜×/Ò/°Ñ4Ô4×>Ò>ÀwÐ>ÑOÔO€ rG   r  rR  s   ``rE   rö  zExpr.cum_countã  s.   øø€ ð@ ×*Ò*ØOÐOÐOÐOÐOñ
ô 
ð 	
rG   c               ó8   ‡ ‡— ‰                       ˆˆ fd„¦  «        S )ug  Return the cumulative min of the non-null values in the column.

        Info:
            For lazy backends, this operation must be followed by `Expr.over` with
            `order_by` specified, see [order-dependence](../concepts/order_dependence.md).

        Arguments:
            reverse: reverse the operation

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [3, 1, None, 2]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(
            ...     nw.col("a").cum_min().alias("a_cum_min"),
            ...     nw.col("a").cum_min(reverse=True).alias("a_cum_min_reverse"),
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |         Narwhals DataFrame         |
            |------------------------------------|
            |     a  a_cum_min  a_cum_min_reverse|
            |0  3.0        3.0                1.0|
            |1  1.0        1.0                1.0|
            |2  NaN        NaN                NaN|
            |3  2.0        1.0                2.0|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óV   •— ‰                      | ¦  «                             ‰¬¦  «        S rN  )rH   Úcum_minrP  s    €€rE   rl   zExpr.cum_min.<locals>.<lambda>(  rQ  rG   r  rR  s   ``rE   rù  zExpr.cum_min  ó.   øø€ ð@ ×*Ò*ØMÐMÐMÐMÐMñ
ô 
ð 	
rG   c               ó8   ‡ ‡— ‰                       ˆˆ fd„¦  «        S )ug  Return the cumulative max of the non-null values in the column.

        Info:
            For lazy backends, this operation must be followed by `Expr.over` with
            `order_by` specified, see [order-dependence](../concepts/order_dependence.md).

        Arguments:
            reverse: reverse the operation

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 3, None, 2]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(
            ...     nw.col("a").cum_max().alias("a_cum_max"),
            ...     nw.col("a").cum_max(reverse=True).alias("a_cum_max_reverse"),
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |         Narwhals DataFrame         |
            |------------------------------------|
            |     a  a_cum_max  a_cum_max_reverse|
            |0  1.0        1.0                3.0|
            |1  3.0        3.0                3.0|
            |2  NaN        NaN                NaN|
            |3  2.0        3.0                2.0|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óV   •— ‰                      | ¦  «                             ‰¬¦  «        S rN  )rH   Úcum_maxrP  s    €€rE   rl   zExpr.cum_max.<locals>.<lambda>L  rQ  rG   r  rR  s   ``rE   rý  zExpr.cum_max+  rú  rG   c               ó8   ‡ ‡— ‰                       ˆˆ fd„¦  «        S )u‰  Return the cumulative product of the non-null values in the column.

        Info:
            For lazy backends, this operation must be followed by `Expr.over` with
            `order_by` specified, see [order-dependence](../concepts/order_dependence.md).

        Arguments:
            reverse: reverse the operation

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 3, None, 2]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(
            ...     nw.col("a").cum_prod().alias("a_cum_prod"),
            ...     nw.col("a").cum_prod(reverse=True).alias("a_cum_prod_reverse"),
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |          Narwhals DataFrame          |
            |--------------------------------------|
            |     a  a_cum_prod  a_cum_prod_reverse|
            |0  1.0         1.0                 6.0|
            |1  3.0         3.0                 6.0|
            |2  NaN         NaN                 NaN|
            |3  2.0         6.0                 2.0|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óV   •— ‰                      | ¦  «                             ‰¬¦  «        S rN  )rH   Úcum_prodrP  s    €€rE   rl   zExpr.cum_prod.<locals>.<lambda>p  s&   ø€ ˜×/Ò/°Ñ4Ô4×=Ò=ÀgÐ=ÑNÔN€ rG   r  rR  s   ``rE   r   zExpr.cum_prodO  s.   øø€ ð@ ×*Ò*ØNÐNÐNÐNÐNñ
ô 
ð 	
rG   )r  ÚcenterÚwindow_sizer  c               óh   ‡ ‡‡‡— t          ‰|¬¦  «        \  ŠŠ‰                      ˆˆˆ ˆfd„¦  «        S )u0  Apply a rolling sum (moving sum) over the values.

        A window of length `window_size` will traverse the values. The resulting values
        will be aggregated to their sum.

        The window at a given row will include the row itself and the `window_size - 1`
        elements before it.

        Info:
            For lazy backends, this operation must be followed by `Expr.over` with
            `order_by` specified, see [order-dependence](../concepts/order_dependence.md).

        Arguments:
            window_size: The length of the window in number of elements. It must be a
                strictly positive integer.
            min_samples: The number of values in the window that should be non-null before
                computing a result. If set to `None` (default), it will be set equal to
                `window_size`. If provided, it must be a strictly positive integer, and
                less than or equal to `window_size`
            center: Set the labels at the center of the window.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1.0, 2.0, None, 4.0]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(
            ...     a_rolling_sum=nw.col("a").rolling_sum(window_size=3, min_samples=1)
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            | Narwhals DataFrame  |
            |---------------------|
            |     a  a_rolling_sum|
            |0  1.0            1.0|
            |1  2.0            3.0|
            |2  NaN            3.0|
            |3  4.0            6.0|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        ©r  r  c                óZ   •— ‰                      | ¦  «                             ‰‰‰¬¦  «        S ©N)r  r  r  )rH   Úrolling_sum)r<   r  Úmin_samples_intrD   r  s    €€€€rE   rl   z"Expr.rolling_sum.<locals>.<lambda>¥  s2   ø€ ˜×/Ò/°Ñ4Ô4×@Ò@Ø'°_ÈVð Añ ô € rG   ©r   rX   )rD   r  r  r  r  s   `` `@rE   r  zExpr.rolling_sums  se   øøøø€ õZ (CØ#°ð(
ñ (
ô (
Ñ$ˆ_ð ×*Ò*ðð ð ð ð ð ð ñ
ô 
ð 	
rG   c               óh   ‡ ‡‡‡— t          ‰‰¬¦  «        \  ŠŠ‰                      ˆˆˆ ˆfd„¦  «        S )uB  Apply a rolling mean (moving mean) over the values.

        A window of length `window_size` will traverse the values. The resulting values
        will be aggregated to their mean.

        The window at a given row will include the row itself and the `window_size - 1`
        elements before it.

        Info:
            For lazy backends, this operation must be followed by `Expr.over` with
            `order_by` specified, see [order-dependence](../concepts/order_dependence.md).

        Arguments:
            window_size: The length of the window in number of elements. It must be a
                strictly positive integer.
            min_samples: The number of values in the window that should be non-null before
                computing a result. If set to `None` (default), it will be set equal to
                `window_size`. If provided, it must be a strictly positive integer, and
                less than or equal to `window_size`
            center: Set the labels at the center of the window.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1.0, 2.0, None, 4.0]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(
            ...     a_rolling_mean=nw.col("a").rolling_mean(window_size=3, min_samples=1)
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |  Narwhals DataFrame  |
            |----------------------|
            |     a  a_rolling_mean|
            |0  1.0             1.0|
            |1  2.0             1.5|
            |2  NaN             1.5|
            |3  4.0             3.0|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        r  c                óZ   •— ‰                      | ¦  «                             ‰‰‰¬¦  «        S r  )rH   Úrolling_mean)r<   r  r  rD   r  s    €€€€rE   rl   z#Expr.rolling_mean.<locals>.<lambda>Ü  s2   ø€ ˜×/Ò/°Ñ4Ô4×AÒAØ'°[Èð Bñ ô € rG   r	  )rD   r  r  r  s   ````rE   r  zExpr.rolling_meanª  sd   øøøø€ õZ $?Ø#°ð$
ñ $
ô $
Ñ ˆ[ð ×*Ò*ðð ð ð ð ð ð ñ
ô 
ð 	
rG   )r  r  r  c               ól   ‡ ‡‡‡‡— t          ‰‰¬¦  «        \  ŠŠ‰                      ˆˆˆˆ ˆfd„¦  «        S )u›  Apply a rolling variance (moving variance) over the values.

        A window of length `window_size` will traverse the values. The resulting values
        will be aggregated to their variance.

        The window at a given row will include the row itself and the `window_size - 1`
        elements before it.

        Info:
            For lazy backends, this operation must be followed by `Expr.over` with
            `order_by` specified, see [order-dependence](../concepts/order_dependence.md).

        Arguments:
            window_size: The length of the window in number of elements. It must be a
                strictly positive integer.
            min_samples: The number of values in the window that should be non-null before
                computing a result. If set to `None` (default), it will be set equal to
                `window_size`. If provided, it must be a strictly positive integer, and
                less than or equal to `window_size`.
            center: Set the labels at the center of the window.
            ddof: Delta Degrees of Freedom; the divisor for a length N window is N - ddof.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1.0, 2.0, None, 4.0]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(
            ...     a_rolling_var=nw.col("a").rolling_var(window_size=3, min_samples=1)
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            | Narwhals DataFrame  |
            |---------------------|
            |     a  a_rolling_var|
            |0  1.0            NaN|
            |1  2.0            0.5|
            |2  NaN            0.5|
            |3  4.0            2.0|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        r  c                ó\   •— ‰                      | ¦  «                             ‰‰‰‰¬¦  «        S ©N)r  r  r  r  )rH   Úrolling_var©r<   r  r  r  rD   r  s    €€€€€rE   rl   z"Expr.rolling_var.<locals>.<lambda>	  ó5   ø€ ˜×/Ò/°Ñ4Ô4×@Ò@Ø'°[ÈÐVZð Añ ô € rG   r	  ©rD   r  r  r  r  s   `````rE   r  zExpr.rolling_vará  ój   øøøøø€ õf $?Ø#°ð$
ñ $
ô $
Ñ ˆ[ð ×*Ò*ðð ð ð ð ð ð ð ñ
ô 
ð 	
rG   c               ól   ‡ ‡‡‡‡— t          ‰‰¬¦  «        \  ŠŠ‰                      ˆˆˆˆ ˆfd„¦  «        S )u¹  Apply a rolling standard deviation (moving standard deviation) over the values.

        A window of length `window_size` will traverse the values. The resulting values
        will be aggregated to their standard deviation.

        The window at a given row will include the row itself and the `window_size - 1`
        elements before it.

        Info:
            For lazy backends, this operation must be followed by `Expr.over` with
            `order_by` specified, see [order-dependence](../concepts/order_dependence.md).

        Arguments:
            window_size: The length of the window in number of elements. It must be a
                strictly positive integer.
            min_samples: The number of values in the window that should be non-null before
                computing a result. If set to `None` (default), it will be set equal to
                `window_size`. If provided, it must be a strictly positive integer, and
                less than or equal to `window_size`.
            center: Set the labels at the center of the window.
            ddof: Delta Degrees of Freedom; the divisor for a length N window is N - ddof.

        Returns:
            A new expression.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1.0, 2.0, None, 4.0]})
            >>> df = nw.from_native(df_native)
            >>> df.with_columns(
            ...     a_rolling_std=nw.col("a").rolling_std(window_size=3, min_samples=1)
            ... )
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            | Narwhals DataFrame  |
            |---------------------|
            |     a  a_rolling_std|
            |0  1.0            NaN|
            |1  2.0       0.707107|
            |2  NaN       0.707107|
            |3  4.0       1.414214|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        r  c                ó\   •— ‰                      | ¦  «                             ‰‰‰‰¬¦  «        S r  )rH   Úrolling_stdr  s    €€€€€rE   rl   z"Expr.rolling_std.<locals>.<lambda>V	  r  rG   r	  r  s   `````rE   r  zExpr.rolling_std	  r  rG   Úaverage)rl  Úmethodr/   c               óv   ‡ ‡‡— h d£}‰|vrd‰› d}t          |¦  «        ‚‰                      ˆˆˆ fd„¦  «        S )u  Assign ranks to data, dealing with ties appropriately.

        Notes:
            The resulting dtype may differ between backends.

        Info:
            For lazy backends, this operation must be followed by `Expr.over` with
            `order_by` specified, see [order-dependence](../concepts/order_dependence.md).

        Arguments:
            method: The method used to assign ranks to tied elements.
                The following methods are available (default is 'average')

                - *"average"*: The average of the ranks that would have been assigned to
                    all the tied values is assigned to each value.
                - *"min"*: The minimum of the ranks that would have been assigned to all
                    the tied values is assigned to each value. (This is also referred to
                    as "competition" ranking.)
                - *"max"*: The maximum of the ranks that would have been assigned to all
                    the tied values is assigned to each value.
                - *"dense"*: Like "min", but the rank of the next highest element is
                    assigned the rank immediately after those assigned to the tied elements.
                - *"ordinal"*: All values are given a distinct rank, corresponding to the
                    order that the values occur in the Series.

            descending: Rank in descending order.

        Returns:
            A new expression with rank data.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [3, 6, 1, 1, 6]})
            >>> df = nw.from_native(df_native)
            >>> result = df.with_columns(rank=nw.col("a").rank(method="dense"))
            >>> result
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |       a  rank    |
            |    0  3   2.0    |
            |    1  6   3.0    |
            |    2  1   1.0    |
            |    3  1   1.0    |
            |    4  6   3.0    |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        >   r3  r/  Údenser  ÚordinalzTRanking method must be one of {'average', 'min', 'max', 'dense', 'ordinal'}. Found 'ú'c                óX   •— ‰                      | ¦  «                             ‰‰¬¦  «        S )N)r  rl  )rH   Úrank)r<   rl  r  rD   s    €€€rE   rl   zExpr.rank.<locals>.<lambda>•	  s/   ø€ ˜×/Ò/°Ñ4Ô4×9Ò9Ø¨*ð :ñ ô € rG   )r©  r[   )rD   r  rl  Úsupported_rank_methodsrj  s   ```  rE   r  z	Expr.rank[	  s   øøø€ ðb "OÐ!NÐ!NÐØÐ/Ð/Ð/ð$Ø ð$ð $ð $ð õ ˜S‘/”/Ð!à×,Ò,ðð ð ð ð ð ñ
ô 
ð 	
rG   Úbasec                ó8   ‡ ‡— ‰                       ˆˆ fd„¦  «        S )uÌ  Compute the logarithm to a given base.

        Arguments:
            base: Given base, defaults to `e`

        Returns:
            A new expression.

        Examples:
            >>> import pyarrow as pa
            >>> import narwhals as nw
            >>> df_native = pa.table({"values": [1, 2, 4]})
            >>> df = nw.from_native(df_native)
            >>> result = df.with_columns(
            ...     log=nw.col("values").log(), log_2=nw.col("values").log(base=2)
            ... )
            >>> result
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |               Narwhals DataFrame               |
            |------------------------------------------------|
            |pyarrow.Table                                   |
            |values: int64                                   |
            |log: double                                     |
            |log_2: double                                   |
            |----                                            |
            |values: [[1,2,4]]                               |
            |log: [[0,0.6931471805599453,1.3862943611198906]]|
            |log_2: [[0,1,2]]                                |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óV   •— ‰                      | ¦  «                             ‰¬¦  «        S )N)r!  )rH   Úlog)r<   r!  rD   s    €€rE   rl   zExpr.log.<locals>.<lambda>º	  r  rG   rô   )rD   r!  s   ``rE   r$  zExpr.logš	  s-   øø€ ð> ×(Ò(ØCÐCÐCÐCÐCñ
ô 
ð 	
rG   c                ó4   ‡ — ‰                       ˆ fd„¦  «        S )u²  Compute the exponent.

        Returns:
            A new expression.

        Examples:
            >>> import pyarrow as pa
            >>> import narwhals as nw
            >>> df_native = pa.table({"values": [-1, 0, 1]})
            >>> df = nw.from_native(df_native)
            >>> result = df.with_columns(exp=nw.col("values").exp())
            >>> result
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |               Narwhals DataFrame               |
            |------------------------------------------------|
            |pyarrow.Table                                   |
            |values: int64                                   |
            |exp: double                                     |
            |----                                            |
            |values: [[-1,0,1]]                              |
            |exp: [[0.36787944117144233,1,2.718281828459045]]|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óR   •— ‰                      | ¦  «                             ¦   «         S r@   )rH   Úexprk   s    €rE   rl   zExpr.exp.<locals>.<lambda>Õ	  rI  rG   rô   re   s   `rE   r'  zExpr.exp½	  s#   ø€ ð0 ×(Ò(Ð)WÐ)WÐ)WÐ)WÑXÔXÐXrG   úExprStringNamespace[Self]c                ó    — t          | ¦  «        S r@   r   re   s    rE   rb   zExpr.str×	  ó   € å" 4Ñ(Ô(Ð(rG   úExprDateTimeNamespace[Self]c                ó    — t          | ¦  «        S r@   r   re   s    rE   ÚdtzExpr.dtÛ	  s   € å$ TÑ*Ô*Ð*rG   úExprCatNamespace[Self]c                ó    — t          | ¦  «        S r@   r   re   s    rE   ÚcatzExpr.catß	  s   € å Ñ%Ô%Ð%rG   úExprNameNamespace[Self]c                ó    — t          | ¦  «        S r@   r   re   s    rE   ro   z	Expr.nameã	  ó   € å  Ñ&Ô&Ð&rG   úExprListNamespace[Self]c                ó    — t          | ¦  «        S r@   r   re   s    rE   rg  z	Expr.listç	  r3  rG   úExprStructNamespace[Self]c                ó    — t          | ¦  «        S r@   r   re   s    rE   ÚstructzExpr.structë	  r*  rG   )r7   r4   r8   r
   r9   r:   )r7   rJ   r9   r$   )r9   rb   )r9   r$   )ro   rb   r9   r$   )rs   rt   ru   rv   rw   rx   r9   r3   )r|   r+   r9   r$   )r€   r   r9   r$   )r€   r   r9   r$   )rÿ   r  r   r  r  r  r  r  r  r  r  r  r  r  r9   r$   )r  r  r9   r$   r@   )rs   r"  r#  r$  r9   r$   )r9   r6   )rK  r  r9   r$   )rV  r  r9   r$   )r]  r^  r_  r`  r#  ra  r9   r$   )rl  r  rm  r  r9   r$   )rt  )ru  rv  rw  rv  rx  r)   r9   r$   )r  r   r9   r$   )NNN)rž  rŸ  r   r¡  r¢  r£  r9   r$   )
rV  r£  r®  r  r¯  r  r°  r£  r9   r$   )rµ  r¶  r´  r·  r9   r$   )rÐ  rÑ  rÒ  r0   r9   r$   )rÕ  )r   )rÝ  r  r9   r$   )rV  r  rä  r  r9   r$   )NN)ru  rè  rw  rè  r9   r$   )r  r  r  r£  r  r  r9   r$   )
r  r  r  r£  r  r  r  r  r9   r$   )r  )r  r/   rl  r  r9   r$   )r!  rÑ  r9   r$   )r9   r(  )r9   r+  )r9   r.  )r9   r1  )r9   r4  )r9   r6  )lÚ__name__Ú
__module__Ú__qualname__rI   rO   rR   rU   rX   r[   r^   ra   rf   rn   rr   r{   r   r‘   r–   rœ   r¡   r¦   r¨   r¬   r®   r²   r¶   r¼   rÀ   rÄ   rÆ   rÊ   rÏ   rÓ   r×   rÛ   rß   rã   rç   rë   rï   rò   r÷   rü   r  r  r  r  r!  r'  r*  rj   r/  r3  r6  r<  r?  rB  rE  ri   rO  rU  rZ  rd  rs  r†  rŠ  r‘  r–  r™  rœ  r¨  r¬  r³  rº  rÃ  rÂ  rÉ  rÌ  rÏ  rÐ  rØ  rÜ  rà  rã  rç  rí  rð  ró  rö  rù  rý  r   r  r  r  r  r  ÚmathÚer$  r'  Úpropertyrb   r-  r0  ro   rg  r8  rz   rG   rE   r6   r6   6   su
  € € € € € ð"ð "ð "ð "ðWð Wð Wð WðTð Tð Tð Tð
ð 
ð 
ð 
ðYð Yð Yð Yð[ð [ð [ð [ðSð Sð Sð Sð
ð 
ð 
ð 
ð
>ð >ð >ð >ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð8 /ð  /ð  /ð  /ðD
ð 
ð 
ð 
ð<
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð/ð /ð /ð /ð
ð 
ð 
ð 
ð/ð /ð /ð /ð
ð 
ð 
ð 
ð/ð /ð /ð /ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð/ð /ð /ð /ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
Vð Vð Vð Vð.Vð Vð Vð Vð4 !Ø!Ø"&Ø"ØØØ"ð`
ð `
ð `
ð `
ð `
ð `
ðDWð Wð Wð Wð*Yð Yð Yð Yð0 "#ð 
ð 
ð 
ð 
ð 
ð 
ð6 "#ð 
ð 
ð 
ð 
ð 
ð 
ð< &*ð,
ð ,
ð ,
ð ,
ð ,
ð\Wð Wð Wð Wð*Vð Vð Vð Vð6Vð Vð Vð Vð*Vð Vð Vð Vð*
ð 
ð 
ð 
ð.
ð 
ð 
ð 
ð.Xð Xð Xð Xð*[ð [ð [ð [ð*Xð Xð Xð Xð*Yð Yð Yð Yð, */ð  
ð  
ð  
ð  
ð  
ð  
ðD,
ð ,
ð ,
ð ,
ð\1
ð 1
ð 1
ð 1
ðl %)ð9
ð
 *.ð9
ð 9
ð 9
ð 9
ð 9
ð 9
ðv */À5ð 
ð 
ð 
ð 
ð 
ð 
ðF "(ð	;
ð ;
ð ;
ð ;
ð ;
ðz!+ð !+ð !+ð !+ðF.
ð .
ð .
ð .
ð`#
ð #
ð #
ð #
ðJ#
ð #
ð #
ð #
ðJZð Zð Zð Zð  *.Ø,0Ø ð	_
ð _
ð _
ð _
ð _
ðD$
ð $
ð $
ð $
ðP ð&
ð "&Ø!&Øð&
ð &
ð &
ð &
ð &
ð &
ðV 04ðB
ð B
ð B
ð B
ð B
ð B
ðH!ð !ð !ð !ð0
ð 
ð 
ð 
ð4
ð 
ð 
ð 
ð<
ð 
ð 
ð 
ð@
ð 
ð 
ð 
ð@$
ð $
ð $
ð $
ðL
ð 
ð 
ð 
ð 
ð6Wð Wð Wð Wð Wð2#
ð #
ð #
ð #
ð #
ðJVð Vð Vð Vð4
ð 
ð 
ð 
ð 
ð< KOØJNð1
ð 1
ð 1
ð 1
ð 1
ðfVð Vð Vð Vð.&
ð &
ð &
ð &
ðP ,1ð "
ð "
ð "
ð "
ð "
ð "
ðH */ð "
ð "
ð "
ð "
ð "
ð "
ðH */ð "
ð "
ð "
ð "
ð "
ð "
ðH +0ð "
ð "
ð "
ð "
ð "
ð "
ðJ >BÐRWð5
ð 5
ð 5
ð 5
ð 5
ð 5
ðp >BÐRWð5
ð 5
ð 5
ð 5
ð 5
ð 5
ðv #'ØØð;
ð ;
ð ;
ð ;
ð ;
ð ;
ðB #'ØØð;
ð ;
ð ;
ð ;
ð ;
ð ;
ðz=
Èð =
ð =
ð =
ð =
ð =
ð =
ð~ !%¤ð !
ð !
ð !
ð !
ð !
ðFYð Yð Yð Yð4 ð)ð )ð )ñ „Xð)ð ð+ð +ð +ñ „Xð+ð ð&ð &ð &ñ „Xð&ð ð'ð 'ð 'ñ „Xð'ð ð'ð 'ð 'ñ „Xð'ð ð)ð )ð )ñ „Xð)ð )ð )rG   r6   )@Ú
__future__r   r<  Útypingr   r   r   r   r   r	   Únarwhals._expression_parsingr
   r   r   r   Únarwhals._utilsr   r   r   r   Únarwhals.dtypesr   Únarwhals.exceptionsr   Únarwhals.expr_catr   Únarwhals.expr_dtr   Únarwhals.expr_listr   Únarwhals.expr_namer   Únarwhals.expr_strr   Únarwhals.expr_structr   Únarwhals.translater    r!   Útyping_extensionsr"   r#   r$   r%   Únarwhals._compliantr&   r'   r(   Únarwhals.typingr)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   Ú__annotations__r6   Ú__all__rz   rG   rE   ú<module>rQ     sÛ  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ Lðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø .Ð .Ð .Ð .Ð .Ð .Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø (Ð (Ð (Ð (Ð (Ð (àð ØÐÐÐÐÐàIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIàEÐEÐEÐEÐEÐEÐEÐEØ%Ð%Ð%Ð%Ð%Ð%ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ˆ4‰Œ€BØˆ‰Œ€AØ&Ø	˜C ˜HÔ	%Ð&¨°c¸3°hÔ(?Ð?ô€Lð ð ð ñ ð
w&)ð w&)ð w&)ð w&)ð w&)ñ w&)ô w&)ð w&)ðtM ˆ(€€€rG   