Ë
    bÀZh]¡ ã                  ó¶  — U d dl mZ d dlZd dlmZmZmZ d dl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r]d 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m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:  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@y)é    )ÚannotationsN)ÚIterableÚMappingÚSequence)ÚTYPE_CHECKINGÚAnyÚCallable)Ú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                  ó(  — e Zd Zdwd„Zdxd„Zdxd„Z	 	 	 	 dxd„Zdxd„Zdxd„Zdxd„Z	dxd„Z
dyd	„Zdzd
„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d$„Z&dd%„Z'dzd&„Z(dzd'„Z)dzd(„Z*d)d)d)d)d*d+d,d-œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d€d.„Z+dzd/„Z,dzd0„Z-d+d1œdd2„Z.d+d1œdd3„Z/	 d‚	 	 	 	 	 dƒd4„Z0dzd5„Z1dzd6„Z2d„d7„Z3dzd8„Z4dzd9„Z5dzd:„Z6dzd;„Z7dzd<„Z8dzd=„Z9dzd>„Z:dzd?„Z;d,d@œd…dA„Z<dzdB„Z=d†dC„Z>	 d‚d)dDœ	 	 	 	 	 	 	 d‡dE„Z?d,d,dFœdˆdG„Z@	 d‰	 	 	 	 	 	 	 dŠdH„ZAddI„ZBd‹dJ„ZCdzdK„ZDdzdL„ZEdzdM„ZF	 	 	 dŒ	 	 	 	 	 	 	 ddN„ZGdzdO„ZH	 d‚d)d,d)dPœ	 	 	 	 	 	 	 	 	 dŽdQ„ZId)dRœ	 	 	 	 	 ddS„ZJdzdT„ZKdzdU„ZLdzdV„ZMdzdW„ZNdzdX„ZO	 	 	 	 	 	 ddY„ZPd‘d†dZ„ZQd‘d†d[„ZRd’d“d\„ZSdzd]„ZTd’d”d^„ZU	 	 d•	 	 	 	 	 d–d_„ZVdzd`„ZWdzda„ZXd,d@œd…db„ZYd,d@œd…dc„ZZd,d@œd…dd„Z[d,d@œd…de„Z\d)d,dfœ	 	 	 	 	 	 	 d—dg„Z]d)d,dfœ	 	 	 	 	 	 	 d—dh„Z^d)d,d+diœ	 	 	 	 	 	 	 	 	 d˜dj„Z_d)d,d+diœ	 	 	 	 	 	 	 	 	 d˜dk„Z`d™d,dlœdšdm„ZaebjÆ                  fd›dn„Zddzdo„Zedzdp„Zfegdœdq„«       Zhegddr„«       Ziegdžds„«       ZjegdŸdt„«       Zkegd du„«       Zlegd¡dv„«       Zmy))¢ÚExprc                ó2   ‡ ‡— dˆ ˆfd„}|‰ _         |‰ _        y )Nc                ó:   •—  ‰| «      }‰j                   |_         |S ©N©Ú	_metadata)ÚplxÚresultÚselfÚto_compliant_exprs     €€ú\/mounts/lovelace/software/anaconda3/envs/py312/lib/python3.12/site-packages/narwhals/expr.pyÚfunczExpr.__init__.<locals>.func:   s   ø€ Ù& sÓ+ˆFØ#Ÿ~™~ˆFÔØˆMó    )r<   zCompliantNamespace[Any, Any]ÚreturnúCompliantExpr[Any, Any])Ú_to_compliant_exprr;   )r>   r?   ÚmetadatarA   s   ``  r@   Ú__init__zExpr.__init__8   s   ù€ ö	ð
 15ˆÔØ!ˆrB   c                óV   — | j                  || j                  j                  «       «      S r9   )Ú	__class__r;   Úwith_elementwise_op©r>   r?   s     r@   Ú_with_elementwise_opzExpr._with_elementwise_opB   s!   € Ø~‰~Ð/°·±×1SÑ1SÓ1UÓVÐVrB   c                óV   — | j                  || j                  j                  «       «      S r9   )rI   r;   Úwith_aggregationrK   s     r@   Ú_with_aggregationzExpr._with_aggregationE   s!   € Ø~‰~Ð/°·±×1PÑ1PÓ1RÓSÐSrB   c                óV   — | j                  || j                  j                  «       «      S r9   )rI   r;   Úwith_orderable_aggregationrK   s     r@   Ú_with_orderable_aggregationz Expr._with_orderable_aggregationH   s'   € ð ~‰~Ø˜tŸ~™~×HÑHÓJó
ð 	
rB   c                óV   — | j                  || j                  j                  «       «      S r9   )rI   r;   Úwith_orderable_windowrK   s     r@   Ú_with_orderable_windowzExpr._with_orderable_windowO   s!   € Ø~‰~Ð/°·±×1UÑ1UÓ1WÓXÐXrB   c                óV   — | j                  || j                  j                  «       «      S r9   )rI   r;   Úwith_unorderable_windowrK   s     r@   Ú_with_unorderable_windowzExpr._with_unorderable_windowR   s!   € Ø~‰~Ð/°·±×1WÑ1WÓ1YÓZÐZrB   c                óV   — | j                  || j                  j                  «       «      S r9   )rI   r;   Úwith_filtrationrK   s     r@   Ú_with_filtrationzExpr._with_filtrationU   s!   € Ø~‰~Ð/°·±×1OÑ1OÓ1QÓRÐRrB   c                óV   — | j                  || j                  j                  «       «      S r9   )rI   r;   Úwith_orderable_filtrationrK   s     r@   Ú_with_orderable_filtrationzExpr._with_orderable_filtrationX   s%   € Ø~‰~Ø˜tŸ~™~×GÑGÓIó
ð 	
rB   c                ó"   — d| j                   › dS )NzNarwhals Expr
metadata: ú
r:   ©r>   s    r@   Ú__repr__zExpr.__repr__]   s   € Ø*¨4¯>©>Ð*:¸"Ð=Ð=rB   c                ó,   ‡ — ‰ j                  ˆ fd„«      S )Nc                ó^   •— ‰j                  | «      j                  «       j                  «       S r9   )rE   ÚabsÚsum©r<   r>   s    €r@   ú<lambda>z$Expr._taxicab_norm.<locals>.<lambda>d   s$   ø€ ˜×/Ñ/°Ó4×8Ñ8Ó:×>Ñ>Ó@€ rB   ©rO   ra   s   `r@   Ú_taxicab_normzExpr._taxicab_norm`   s   ø€ ð ×%Ñ%Û@ó
ð 	
rB   c                óF   ‡ ‡— ‰ j                  ˆˆ 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                óD   •— ‰j                  | «      j                  ‰«      S r9   )rE   Úalias)r<   Únamer>   s    €€r@   rh   zExpr.alias.<locals>.<lambda>   s   ø€ ˜×/Ñ/°Ó4×:Ñ:¸4Ó@€ rB   )rI   r;   )r>   rn   s   ``r@   rm   z
Expr.aliash   s   ù€ ð0 ~‰~Ü@À$Ç.Á.ó
ð 	
rB   c                ó   —  || g|¢­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   |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        © )r>   ÚfunctionÚargsÚkwargss       r@   Úpipez	Expr.pipe„   s   € ñ@ ˜Ð.˜tÒ. vÑ.Ð.rB   c                óF   ‡ ‡— t        ‰«       ‰ j                  ˆˆ 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                óD   •— ‰j                  | «      j                  ‰«      S r9   )rE   Úcast)r<   Údtyper>   s    €€r@   rh   zExpr.cast.<locals>.<lambda>À   s   ø€ ˜×/Ñ/°Ó4×9Ñ9¸%Ó@€ rB   )r   rL   )r>   rx   s   ``r@   rw   z	Expr.cast¦   s#   ù€ ô0 	˜ÔØ×(Ñ(Ü@ó
ð 	
rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó   — | |k(  S r9   rp   ©ÚxÚys     r@   rh   z/Expr.__eq__.<locals>.<lambda>.<locals>.<lambda>Ç   ó
   €  ! q¡&€ rB   T©Ú
str_as_lit©r   ©r<   Úotherr>   s    €€r@   rh   zExpr.__eq__.<locals>.<lambda>Æ   ó   ø€ Ô-ØÑ(¨$°À$ô€ rB   ©rI   r
   Úfrom_binary_op©r>   r„   s   ``r@   Ú__eq__zExpr.__eq__Ä   ó+   ù€ Ø~‰~ôô ×'Ñ'¨¨eÓ4ó	
ð 	
rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó   — | |k7  S r9   rp   r|   s     r@   rh   z/Expr.__ne__.<locals>.<lambda>.<locals>.<lambda>Ï   r   rB   Tr€   r‚   rƒ   s    €€r@   rh   zExpr.__ne__.<locals>.<lambda>Î   r…   rB   r†   rˆ   s   ``r@   Ú__ne__zExpr.__ne__Ì   rŠ   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó   — | |z  S r9   rp   r|   s     r@   rh   z0Expr.__and__.<locals>.<lambda>.<locals>.<lambda>×   ó
   €  ! a¡%€ rB   Tr€   r‚   rƒ   s    €€r@   rh   zExpr.__and__.<locals>.<lambda>Ö   ó   ø€ Ô-ØÑ'¨¨uÀô€ rB   r†   rˆ   s   ``r@   Ú__and__zExpr.__and__Ô   rŠ   rB   c                ó*   — | |z  j                  d«      S ©NÚliteral©rm   rˆ   s     r@   Ú__rand__zExpr.__rand__Ü   ó   € Øu‘×#Ñ# IÓ.Ð.rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó   — | |z  S r9   rp   r|   s     r@   rh   z/Expr.__or__.<locals>.<lambda>.<locals>.<lambda>â   r’   rB   Tr€   r‚   rƒ   s    €€r@   rh   zExpr.__or__.<locals>.<lambda>á   r“   rB   r†   rˆ   s   ``r@   Ú__or__zExpr.__or__ß   rŠ   rB   c                ó*   — | |z  j                  d«      S r–   r˜   rˆ   s     r@   Ú__ror__zExpr.__ror__ç   rš   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó   — | |z   S r9   rp   r|   s     r@   rh   z0Expr.__add__.<locals>.<lambda>.<locals>.<lambda>í   r’   rB   Tr€   r‚   rƒ   s    €€r@   rh   zExpr.__add__.<locals>.<lambda>ì   r“   rB   r†   rˆ   s   ``r@   Ú__add__zExpr.__add__ê   rŠ   rB   c                ó*   — | |z   j                  d«      S r–   r˜   rˆ   s     r@   Ú__radd__zExpr.__radd__ò   rš   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó   — | |z
  S r9   rp   r|   s     r@   rh   z0Expr.__sub__.<locals>.<lambda>.<locals>.<lambda>ø   r’   rB   Tr€   r‚   rƒ   s    €€r@   rh   zExpr.__sub__.<locals>.<lambda>÷   r“   rB   r†   rˆ   s   ``r@   Ú__sub__zExpr.__sub__õ   rŠ   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó$   — | j                  |«      S r9   )Ú__rsub__r|   s     r@   rh   z1Expr.__rsub__.<locals>.<lambda>.<locals>.<lambda>   ó   €  !§*¡*¨Q£-€ rB   Tr€   r‚   rƒ   s    €€r@   rh   zExpr.__rsub__.<locals>.<lambda>ÿ   ó   ø€ Ô-ØÑ/°°uÈô€ rB   r†   rˆ   s   ``r@   r®   zExpr.__rsub__ý   rŠ   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó   — | |z  S r9   rp   r|   s     r@   rh   z4Expr.__truediv__.<locals>.<lambda>.<locals>.<lambda>  r’   rB   Tr€   r‚   rƒ   s    €€r@   rh   z"Expr.__truediv__.<locals>.<lambda>  r“   rB   r†   rˆ   s   ``r@   Ú__truediv__zExpr.__truediv__  rŠ   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó$   — | j                  |«      S r9   )Ú__rtruediv__r|   s     r@   rh   z5Expr.__rtruediv__.<locals>.<lambda>.<locals>.<lambda>  s   €  !§.¡.°Ó"3€ rB   Tr€   r‚   rƒ   s    €€r@   rh   z#Expr.__rtruediv__.<locals>.<lambda>  s   ø€ Ô-ØÑ3°T¸5ÈTô€ rB   r†   rˆ   s   ``r@   r¸   zExpr.__rtruediv__  rŠ   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó   — | |z  S r9   rp   r|   s     r@   rh   z0Expr.__mul__.<locals>.<lambda>.<locals>.<lambda>  r’   rB   Tr€   r‚   rƒ   s    €€r@   rh   zExpr.__mul__.<locals>.<lambda>  r“   rB   r†   rˆ   s   ``r@   Ú__mul__zExpr.__mul__  rŠ   rB   c                ó*   — | |z  j                  d«      S r–   r˜   rˆ   s     r@   Ú__rmul__zExpr.__rmul__  rš   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó   — | |k  S r9   rp   r|   s     r@   rh   z/Expr.__le__.<locals>.<lambda>.<locals>.<lambda>#  r   rB   Tr€   r‚   rƒ   s    €€r@   rh   zExpr.__le__.<locals>.<lambda>"  r…   rB   r†   rˆ   s   ``r@   Ú__le__zExpr.__le__   rŠ   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó   — | |k  S r9   rp   r|   s     r@   rh   z/Expr.__lt__.<locals>.<lambda>.<locals>.<lambda>+  r’   rB   Tr€   r‚   rƒ   s    €€r@   rh   zExpr.__lt__.<locals>.<lambda>*  r“   rB   r†   rˆ   s   ``r@   Ú__lt__zExpr.__lt__(  rŠ   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó   — | |kD  S r9   rp   r|   s     r@   rh   z/Expr.__gt__.<locals>.<lambda>.<locals>.<lambda>3  r’   rB   Tr€   r‚   rƒ   s    €€r@   rh   zExpr.__gt__.<locals>.<lambda>2  r“   rB   r†   rˆ   s   ``r@   Ú__gt__zExpr.__gt__0  rŠ   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó   — | |k\  S r9   rp   r|   s     r@   rh   z/Expr.__ge__.<locals>.<lambda>.<locals>.<lambda>;  r   rB   Tr€   r‚   rƒ   s    €€r@   rh   zExpr.__ge__.<locals>.<lambda>:  r…   rB   r†   rˆ   s   ``r@   Ú__ge__zExpr.__ge__8  rŠ   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó   — | |z  S r9   rp   r|   s     r@   rh   z0Expr.__pow__.<locals>.<lambda>.<locals>.<lambda>C  s
   €  ! Q¡$€ rB   Tr€   r‚   rƒ   s    €€r@   rh   zExpr.__pow__.<locals>.<lambda>B  s   ø€ Ô-ØÑ&¨¨eÀô€ rB   r†   rˆ   s   ``r@   Ú__pow__zExpr.__pow__@  rŠ   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó$   — | j                  |«      S r9   )Ú__rpow__r|   s     r@   rh   z1Expr.__rpow__.<locals>.<lambda>.<locals>.<lambda>K  r¯   rB   Tr€   r‚   rƒ   s    €€r@   rh   zExpr.__rpow__.<locals>.<lambda>J  r°   rB   r†   rˆ   s   ``r@   rÖ   zExpr.__rpow__H  rŠ   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó   — | |z  S r9   rp   r|   s     r@   rh   z5Expr.__floordiv__.<locals>.<lambda>.<locals>.<lambda>S  r   rB   Tr€   r‚   rƒ   s    €€r@   rh   z#Expr.__floordiv__.<locals>.<lambda>R  r…   rB   r†   rˆ   s   ``r@   Ú__floordiv__zExpr.__floordiv__P  rŠ   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó$   — | j                  |«      S r9   )Ú__rfloordiv__r|   s     r@   rh   z6Expr.__rfloordiv__.<locals>.<lambda>.<locals>.<lambda>[  s   €  !§/¡/°!Ó"4€ rB   Tr€   r‚   rƒ   s    €€r@   rh   z$Expr.__rfloordiv__.<locals>.<lambda>Z  s   ø€ Ô-ØÑ4°d¸EÈdô€ rB   r†   rˆ   s   ``r@   rÞ   zExpr.__rfloordiv__X  rŠ   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó   — | |z  S r9   rp   r|   s     r@   rh   z0Expr.__mod__.<locals>.<lambda>.<locals>.<lambda>c  r’   rB   Tr€   r‚   rƒ   s    €€r@   rh   zExpr.__mod__.<locals>.<lambda>b  r“   rB   r†   rˆ   s   ``r@   Ú__mod__zExpr.__mod__`  rŠ   rB   c                óZ   ‡ ‡— ‰ j                  ˆˆ fd„t        j                  ‰ ‰«      «      S )Nc                ó&   •— t        | d„ ‰‰d¬«      S )Nc                ó$   — | j                  |«      S r9   )Ú__rmod__r|   s     r@   rh   z1Expr.__rmod__.<locals>.<lambda>.<locals>.<lambda>k  r¯   rB   Tr€   r‚   rƒ   s    €€r@   rh   zExpr.__rmod__.<locals>.<lambda>j  r°   rB   r†   rˆ   s   ``r@   ræ   zExpr.__rmod__h  rŠ   rB   c                ó,   ‡ — ‰ j                  ˆ fd„«      S )Nc                óB   •— ‰j                  | «      j                  «       S r9   )rE   Ú
__invert__rg   s    €r@   rh   z!Expr.__invert__.<locals>.<lambda>s  ó   ø€ ˜×/Ñ/°Ó4×?Ñ?ÓA€ rB   ©rL   ra   s   `r@   ré   zExpr.__invert__q  s   ø€ Ø×(Ñ(ÛAó
ð 	
rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úanyrg   s    €r@   rh   zExpr.any.<locals>.<lambda>‹  ó   ø€ °$×2IÑ2IÈ#Ó2N×2RÑ2RÓ2T€ rB   ri   ra   s   `r@   rî   zExpr.anyv  ó   ø€ ð* ×%Ñ%Ó&TÓUÐUrB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úallrg   s    €r@   rh   zExpr.all.<locals>.<lambda>¢  rï   rB   ri   ra   s   `r@   ró   zExpr.all  rð   rB   NTé   F©ÚcomÚspanÚ	half_lifeÚalphaÚadjustÚmin_samplesÚignore_nullsc          
     óH   ‡ ‡‡‡‡‡‡‡— ‰ j                  ˆˆˆˆˆˆˆ ˆ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           	     óR   •— ‰j                  | «      j                  ‰‰‰‰‰‰‰¬«      S )Nrõ   )rE   Úewm_mean)	r<   rú   rù   rö   rø   rü   rû   r>   r÷   s	    €€€€€€€€r@   rh   zExpr.ewm_mean.<locals>.<lambda>û  s7   ø€ ˜×/Ñ/°Ó4×=Ñ=ØØØ#ØØØ'Ø)ð >ó € rB   ©rU   )r>   rö   r÷   rø   rù   rú   rû   rü   s   ````````r@   rÿ   zExpr.ewm_mean¤  s#   ÿ€ ðl ×*Ñ*÷ò ó

ð 
	
rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úmeanrg   s    €r@   rh   zExpr.mean.<locals>.<lambda>  ó   ø€ °$×2IÑ2IÈ#Ó2N×2SÑ2SÓ2U€ rB   ri   ra   s   `r@   r  z	Expr.mean  ó   ø€ ð& ×%Ñ%Ó&UÓVÐVrB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úmedianrg   s    €r@   rh   zExpr.median.<locals>.<lambda>1  s   ø€ °$×2IÑ2IÈ#Ó2N×2UÑ2UÓ2W€ rB   ri   ra   s   `r@   r  zExpr.median  s   ø€ ð, ×%Ñ%Ó&WÓXÐXrB   ©Úddofc               ó0   ‡ ‡— ‰ j                  ˆˆ 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                óF   •— ‰j                  | «      j                  ‰¬«      S ©Nr	  )rE   Ústd©r<   r
  r>   s    €€r@   rh   zExpr.std.<locals>.<lambda>K  ó    ø€ ˜×/Ñ/°Ó4×8Ñ8¸dÐ8ÓC€ rB   ri   ©r>   r
  s   ``r@   r  zExpr.std3  ó   ù€ ð. ×%Ñ%ÜCó
ð 	
rB   c               ó0   ‡ ‡— ‰ j                  ˆˆ 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                óF   •— ‰j                  | «      j                  ‰¬«      S r  )rE   Úvarr  s    €€r@   rh   zExpr.var.<locals>.<lambda>f  r  rB   ri   r  s   ``r@   r  zExpr.varN  r  rB   c                ó4   ‡ ‡‡— ‰ j                  ˆˆˆ 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                óH   •— ‰j                  | «      j                  ‰‰¬«      S )N)rq   Úreturn_dtype)rE   Úmap_batches)r<   rq   r  r>   s    €€€r@   rh   z"Expr.map_batches.<locals>.<lambda>’  s(   ø€ ˜×/Ñ/°Ó4×@Ñ@Ø!°ð Aó € rB   )r^   )r>   rq   r  s   ```r@   r  zExpr.map_batchesi  s   ú€ ðP ×.Ñ.õó
ð 	
rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úskewrg   s    €r@   rh   zExpr.skew.<locals>.<lambda>ª  r  rB   ri   ra   s   `r@   r  z	Expr.skew—  r  rB   c                ó,   ‡ — ‰ j                  ˆ fd„«      S )uÏ  Compute the kurtosis (Fisher's definition) without bias correction.

        Kurtosis is the fourth central moment divided by the square of the variance.
        The Fisher's definition is used where 3.0 is subtracted from the result to give 0.0 for a normal distribution.

        Returns:
            An expression representing the kurtosis (Fisher's definition) without bias correction 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").kurtosis())
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |      a         b |
            | 0 -1.3  0.210657 |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úkurtosisrg   s    €r@   rh   zExpr.kurtosis.<locals>.<lambda>Â  ó   ø€ °$×2IÑ2IÈ#Ó2N×2WÑ2WÓ2Y€ rB   ri   ra   s   `r@   r  zExpr.kurtosis¬  s   ø€ ð, ×%Ñ%Ó&YÓZÐZrB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   rf   rg   s    €r@   rh   zExpr.sum.<locals>.<lambda>Ý  rï   rB   ri   ra   s   `r@   rf   zExpr.sumÄ  s   ø€ ð2 ×%Ñ%Ó&TÓUÐUrB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úminrg   s    €r@   rh   zExpr.min.<locals>.<lambda>ò  rï   rB   ri   ra   s   `r@   r%  zExpr.minß  ó   ø€ ð& ×%Ñ%Ó&TÓUÐUrB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úmaxrg   s    €r@   rh   zExpr.max.<locals>.<lambda>  rï   rB   ri   ra   s   `r@   r)  zExpr.maxô  r&  rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úarg_minrg   s    €r@   rh   zExpr.arg_min.<locals>.<lambda>  ó   ø€ ˜×/Ñ/°Ó4×<Ñ<Ó>€ rB   ©rR   ra   s   `r@   r,  zExpr.arg_min	  ó   ø€ ð& ×/Ñ/Û>ó
ð 	
rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úarg_maxrg   s    €r@   rh   zExpr.arg_max.<locals>.<lambda>4  r-  rB   r.  ra   s   `r@   r2  zExpr.arg_max   r/  rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úcountrg   s    €r@   rh   zExpr.count.<locals>.<lambda>J  s   ø€ °$×2IÑ2IÈ#Ó2N×2TÑ2TÓ2V€ rB   ri   ra   s   `r@   r5  z
Expr.count7  s   ø€ ð& ×%Ñ%Ó&VÓWÐWrB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Ún_uniquerg   s    €r@   rh   zExpr.n_unique.<locals>.<lambda>_  r   rB   ri   ra   s   `r@   r8  zExpr.n_uniqueL  s   ø€ ð& ×%Ñ%Ó&YÓZÐZrB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úuniquerg   s    €r@   rh   zExpr.unique.<locals>.<lambda>t  s   ø€ °×1HÑ1HÈÓ1M×1TÑ1TÓ1V€ rB   ©r[   ra   s   `r@   r;  zExpr.uniquea  s   ø€ ð& ×$Ñ$Ó%VÓWÐWrB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   re   rg   s    €r@   rh   zExpr.abs.<locals>.<lambda>Š  ó   ø€ °T×5LÑ5LÈSÓ5Q×5UÑ5UÓ5W€ rB   rë   ra   s   `r@   re   zExpr.absv  s   ø€ ð( ×(Ñ(Ó)WÓXÐXrB   ©Úreversec               ó0   ‡ ‡— ‰ j                  ˆˆ 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                óF   •— ‰j                  | «      j                  ‰¬«      S ©Nr@  )rE   Úcum_sum©r<   rA  r>   s    €€r@   rh   zExpr.cum_sum.<locals>.<lambda>«  ó    ø€ ˜×/Ñ/°Ó4×<Ñ<ÀWÐ<ÓM€ rB   r   ©r>   rA  s   ``r@   rE  zExpr.cum_sumŒ  s   ù€ ð< ×*Ñ*ÜMó
ð 	
rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Údiffrg   s    €r@   rh   zExpr.diff.<locals>.<lambda>Ù  s   ø€ ˜×/Ñ/°Ó4×9Ñ9Ó;€ rB   r   ra   s   `r@   rK  z	Expr.diff®  s   ø€ ðT ×*Ñ*Û;ó
ð 	
rB   c                óT   ‡ ‡— t        ‰t        d¬«       ‰ j                  ˆˆ 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       â”‚ |
            |â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜ |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        Ún)Ú
param_namec                óD   •— ‰j                  | «      j                  ‰«      S r9   )rE   Úshift©r<   rM  r>   s    €€r@   rh   zExpr.shift.<locals>.<lambda>  s   ø€ ˜×/Ñ/°Ó4×:Ñ:¸1Ó=€ rB   )r   ÚintrU   )r>   rM  s   ``r@   rP  z
Expr.shiftÜ  s(   ù€ ôZ 	A”s sÕ+à×*Ñ*Ü=ó
ð 	
rB   ©r  c               óÚ   ‡ ‡‡‡— ‰€Ot        ‰t        «      sd}t        |«      ‚t        ‰j	                  «       «      Št        ‰j                  «       «      Š‰ j                  ˆˆˆˆ 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    |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        zB`new` argument is required if `old` argument is not a Mapping typec                óJ   •— ‰j                  | «      j                  ‰‰‰¬«      S )NrS  )rE   Úreplace_strict)r<   ÚnewÚoldr  r>   s    €€€€r@   rh   z%Expr.replace_strict.<locals>.<lambda>E  s*   ø€ ˜×/Ñ/°Ó4×CÑCØS |ð Dó € rB   )Ú
isinstancer   Ú	TypeErrorÚlistÚvaluesÚkeysrL   )r>   rX  rW  r  Úmsgs   ```` r@   rV  zExpr.replace_strict  s\   û€ ðZ ˆ;Ü˜c¤7Ô+ØZÜ “nÐ$äs—z‘z“|Ó$ˆCÜs—x‘x“zÓ"ˆCà×(Ñ(öó
ð 	
rB   ©Ú
descendingÚ
nulls_lastc               óR   ‡ ‡‡— d}t        |d¬«       ‰ j                  ˆˆˆ 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                óH   •— ‰j                  | «      j                  ‰‰¬«      S )Nr_  )rE   Úsort)r<   r`  ra  r>   s    €€€r@   rh   zExpr.sort.<locals>.<lambda>c  s'   ø€ ˜×/Ñ/°Ó4×9Ñ9Ø%°*ð :ó € rB   )r   rU   )r>   r`  ra  r^  s   ``` r@   rg  z	Expr.sortJ  s2   ú€ ð$^ð 	ô 	" #°Õ9Ø×*Ñ*õó
ð 	
rB   c                óv   ‡ ‡‡‡‡— 	 	 	 	 	 	 	 	 dˆfd„Š‰ j                  ˆˆˆ ˆ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    |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óz   •— ‰dk(  r| |k\  | |k  z  S ‰dk(  r| |kD  | |k  z  S ‰dk(  r| |kD  | |k  z  S | |k\  | |k  z  S )NÚleftÚrightÚnonerp   )Úcompliant_exprÚlbÚubÚcloseds      €r@   rA   zExpr.is_between.<locals>.func‹  sq   ø€ ð
 ˜ÒØ&¨"Ñ,°À"Ñ1DÑEÐEØ˜7Ò"Ø&¨Ñ+°À"Ñ0DÑEÐEØ˜6Ò!Ø&¨Ñ+°ÀÑ0CÑDÐDØ" bÑ(¨^¸rÑ-AÑBÐBrB   c                ó&   •— t        | ‰‰‰‰d¬«      S )NFr€   r‚   )r<   rA   Úlower_boundr>   Úupper_bounds    €€€€r@   rh   z!Expr.is_between.<locals>.<lambda>™  s   ø€ Ô-ØT˜4 ¨kÀeô€ rB   F©r   Úallow_multi_outputÚto_single_output)rm  rD   rn  rD   ro  rD   rC   rD   ©rI   r   )r>   rr  rs  rp  rA   s   ````@r@   Ú
is_betweenzExpr.is_betweeni  sf   ü€ ðD	CØ3ð	Cà'ð	Cð (ð	Cð %õ		Cð ~‰~öô ØØØØ Ø#(Ø!&ôó	
ð 	
rB   c                ó–   ‡ ‡— t        ‰t        «      r+t        ‰t        t        f«      s‰ j	                  ˆˆ 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                óZ   •— ‰j                  | «      j                  t        ‰d¬«      «      S )NT)Úpass_through)rE   Úis_inr    rƒ   s    €€r@   rh   zExpr.is_in.<locals>.<lambda>Á  s'   ø€ ˜D×3Ñ3°CÓ8×>Ñ>Ü˜e°$Ô7ó€ rB   zyNarwhals `is_in` doesn't accept expressions as an argument, as opposed to Polars. You should provide an iterable instead.)rY  r   ÚstrÚbytesrL   ÚNotImplementedError)r>   r„   r^  s   `` r@   r|  z
Expr.is_in¦  sG   ù€ ô2 eœXÔ&¬z¸%Ä#ÄuÀÔ/NØ×,Ñ,ôóð ð NˆCÜ% cÓ*Ð*rB   c                ó†   ‡ ‡— t        |«      Št        ‰ g‰¢­ddddœŽj                  «       }‰ j                  ˆˆ 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     |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        FTrt  c                ó(   •— t        | d„ ‰g‰¢­ddiŽS )Nc                 ó,   —  | d   j                   | dd  Ž S )Nr   rô   )Úfilter)Úexprss    r@   rh   z/Expr.filter.<locals>.<lambda>.<locals>.<lambda>ñ  s   € ˜˜u Q™xŸ™°°a°b°	Ð:€ rB   r   Fr‚   )r<   Úflat_predicatesr>   s    €€r@   rh   zExpr.filter.<locals>.<lambda>ï  s*   ø€ Ô-ØÙ:Øðð !ò	ð
 !ñ€ rB   )r   r   rZ   rI   )r>   Ú
predicatesrF   r…  s   `  @r@   rƒ  zExpr.filterÉ  s^   ù€ ô: " *Ó-ˆÜ#Øð
àñ
ð Ø#Ø"ò
÷ ‰/Ó
ð 	ð ~‰~ôð ó	
ð 		
rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úis_nullrg   s    €r@   rh   zExpr.is_null.<locals>.<lambda>  r-  rB   rë   ra   s   `r@   r‰  zExpr.is_nullù  s   ø€ ðB ×(Ñ(Û>ó
ð 	
rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úis_nanrg   s    €r@   rh   zExpr.is_nan.<locals>.<lambda>@  s   ø€ ˜×/Ñ/°Ó4×;Ñ;Ó=€ rB   rë   ra   s   `r@   rŒ  zExpr.is_nan  s   ø€ ðB ×(Ñ(Û=ó
ð 	
rB   c                óJ   ‡ — d}t        |d¬«       ‰ j                  ˆ 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.
rc  rd  c                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úarg_truerg   s    €r@   rh   zExpr.arg_true.<locals>.<lambda>O  s   ø€ °×1HÑ1HÈÓ1M×1VÑ1VÓ1X€ rB   ©r   r[   )r>   r^  s   ` r@   r  zExpr.arg_trueC  s,   ø€ ð^ð 	ô
 	" #°Õ9Ø×$Ñ$Ó%XÓYÐYrB   c                óþ   ‡ ‡‡‡— ‰‰d}t        |«      ‚‰€‰€d}t        |«      ‚‰‰dvrd‰› }t        |«      ‚‰ j                  ˆˆ ˆˆfd„‰‰ j                  j                  «       «      S ‰ 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                    â”‚|
            |â””â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        z*cannot specify both `value` and `strategy`z0must specify either a fill `value` or `strategy`>   ÚforwardÚbackwardzstrategy not supported: c                ób   •— ‰j                  | «      j                  t        | ‰d¬«      ‰‰¬«      S )NTr€   )ÚvalueÚstrategyÚlimit)rE   Ú	fill_nullr   )r<   r—  r>   r–  r•  s    €€€€r@   rh   z Expr.fill_null.<locals>.<lambda>¨  s4   ø€ ˜×/Ñ/°Ó4×>Ñ>Ü'¨¨U¸tÔDØ!Øð ?ó € rB   )Ú
ValueErrorrI   r;   rT   )r>   r•  r–  r—  r^  s   ```` r@   r˜  zExpr.fill_nullQ  s    û€ ðX Ð Ð!5Ø>ˆCÜ˜S“/Ð!Øˆ=˜XÐ-ØDˆCÜ˜S“/Ð!ØÐ HÐ4KÑ$KØ,¨X¨JÐ7ˆCÜ˜S“/Ð!à~‰~öð Ð#ð N‰N×0Ñ0Ó2ó	
ð 		
ð —‘ó	
ð 		
rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Ú
drop_nullsrg   s    €r@   rh   z!Expr.drop_nulls.<locals>.<lambda>Ö  rê   rB   r<  ra   s   `r@   rœ  zExpr.drop_nulls³  s   ø€ ðD ×$Ñ$ÛAó
ð 	
rB   ©ÚfractionÚwith_replacementÚseedc               óZ   ‡ ‡‡‡‡— d}t        |d¬«       ‰ j                  ˆˆˆˆ ˆ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.
rc  rd  c                óL   •— ‰j                  | «      j                  ‰‰‰‰¬«      S )Nr  )rE   Úsample)r<   rž  rM  r   r>   rŸ  s    €€€€€r@   rh   zExpr.sample.<locals>.<lambda>ü  s,   ø€ ˜×/Ñ/°Ó4×;Ñ;Ø˜HÐ7GÈdð <ó € rB   r  )r>   rM  rž  rŸ  r   r^  s   ````` r@   r£  zExpr.sampleÙ  s2   ü€ ð8^ð 	ô 	" #°Õ9Ø×$Ñ$÷ó
ð 	
rB   )Úorder_byc               ó  ‡ ‡‡— t        |«      Št        |t        «      r|gn|xs g Š‰s‰sd}t        |«      ‚‰ j                  }‰r|j                  «       }n‰sd}t        |«      ‚|j                  «       }‰ j                  ˆˆˆ 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                óF   •— ‰j                  | «      j                  ‰‰«      S r9   )rE   Úover)r<   Úflat_order_byÚflat_partition_byr>   s    €€€r@   rh   zExpr.over.<locals>.<lambda>?  s"   ø€ ˜×/Ñ/°Ó4×9Ñ9Ø! =ó€ rB   )	r   rY  r}  r™  r;   Úwith_ordered_overr   Úwith_partitioned_overrI   )r>   r¤  Úpartition_byr^  Úcurrent_metaÚ	next_metar¨  r©  s   `     @@r@   r§  z	Expr.over  s’   ú€ ô\ $ LÓ1ÐÜ&0°¼3Ô&?˜™
ÀhÂnÐRTˆÙ ©ØSˆCÜ˜S“/Ð!à—~‘~ˆÙØ$×6Ñ6Ó8‰IÙ"ØSˆCÜ'¨Ó,Ð,à$×:Ñ:Ó<ˆIà~‰~õð ó	
ð 	
rB   c                ó$   — | j                  «        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_uniquera   s    r@   Úis_duplicatedzExpr.is_duplicatedE  s   € ð, —‘Ó Ð Ð rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   r°  rg   s    €r@   rh   z Expr.is_unique.<locals>.<lambda>t  ó   ø€ ˜×/Ñ/°Ó4×>Ñ>Ó@€ rB   )rX   ra   s   `r@   r°  zExpr.is_unique]  s   ø€ ð, ×,Ñ,Û@ó
ð 	
rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Ú
null_countrg   s    €r@   rh   z!Expr.null_count.<locals>.<lambda>’  rê   rB   ri   ra   s   `r@   r·  zExpr.null_countw  s   ø€ ð4 ×%Ñ%ÛAó
ð 	
rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úis_first_distinctrg   s    €r@   rh   z(Expr.is_first_distinct.<locals>.<lambda>²  s   ø€ ˜×/Ñ/°Ó4×FÑFÓH€ rB   r   ra   s   `r@   rº  zExpr.is_first_distinct•  s   ø€ ð8 ×*Ñ*ÛHó
ð 	
rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úis_last_distinctrg   s    €r@   rh   z'Expr.is_last_distinct.<locals>.<lambda>Ò  s   ø€ ˜×/Ñ/°Ó4×EÑEÓG€ rB   r   ra   s   `r@   r½  zExpr.is_last_distinctµ  s   ø€ ð8 ×*Ñ*ÛGó
ð 	
rB   c                ó4   ‡ ‡‡— ‰ j                  ˆˆˆ 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                óF   •— ‰j                  | «      j                  ‰‰«      S r9   )rE   Úquantile)r<   ÚinterpolationrÀ  r>   s    €€€r@   rh   zExpr.quantile.<locals>.<lambda>ø  s   ø€ ˜×/Ñ/°Ó4×=Ñ=¸hÈÓV€ rB   ri   )r>   rÀ  rÁ  s   ```r@   rÀ  zExpr.quantileÕ  s   ú€ ðD ×%Ñ%ÝVó
ð 	
rB   c                óN   ‡ ‡— d}t        |d¬«       ‰ j                  ˆˆ 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.
rc  rd  c                óD   •— ‰j                  | «      j                  ‰«      S r9   )rE   ÚheadrQ  s    €€r@   rh   zExpr.head.<locals>.<lambda>  s   ø€ ˜×/Ñ/°Ó4×9Ñ9¸!Ó<€ rB   )r   r^   ©r>   rM  r^  s   `` r@   rÄ  z	Expr.headû  s0   ù€ ð"^ð 	ô 	" #°Õ9Ø×.Ñ.Ü<ó
ð 	
rB   c                óN   ‡ ‡— d}t        |d¬«       ‰ j                  ˆˆ 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.
rc  rd  c                óD   •— ‰j                  | «      j                  ‰«      S r9   )rE   ÚtailrQ  s    €€r@   rh   zExpr.tail.<locals>.<lambda>-  s   ø€ °×1HÑ1HÈÓ1M×1RÑ1RÐSTÓ1U€ rB   r  rÅ  s   `` r@   rÈ  z	Expr.tail  s,   ù€ ð"^ð 	ô 	" #°Õ9Ø×$Ñ$Ô%UÓVÐVrB   c                ó0   ‡ ‡— ‰ j                  ˆˆ 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                óD   •— ‰j                  | «      j                  ‰«      S r9   )rE   Úround)r<   Údecimalsr>   s    €€r@   rh   zExpr.round.<locals>.<lambda>Q  s   ø€ ˜×/Ñ/°Ó4×:Ñ:¸8ÓD€ rB   rë   )r>   rÌ  s   ``r@   rË  z
Expr.round/  s   ù€ ðB ×(Ñ(ÜDó
ð 	
rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úlenrg   s    €r@   rh   zExpr.len.<locals>.<lambda>l  rï   rB   ri   ra   s   `r@   rÏ  zExpr.lenT  s   ø€ ð0 ×%Ñ%Ó&TÓUÐUrB   c                óR   ‡ ‡‡— d}t        |d¬«       ‰ j                  ˆˆˆ 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.
rc  rd  c                óH   •— ‰j                  | «      j                  ‰‰¬«      S )N)rM  Úoffset)rE   Úgather_every)r<   rM  rÒ  r>   s    €€€r@   rh   z#Expr.gather_every.<locals>.<lambda>‡  s"   ø€ ˜×/Ñ/°Ó4×AÑAÀAÈfÐAÓU€ rB   r  )r>   rM  rÒ  r^  s   ``` r@   rÓ  zExpr.gather_everyn  s0   ú€ ð$^ð 	ô 	" #°Õ9Ø×$Ñ$ÝUó
ð 	
rB   c                óT   ‡ ‡‡— ‰ j                  ˆˆ ˆ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                ó.   •— t        | ˆˆfd„‰‰‰d¬«      S )Nc                 óR   •— | d   j                  ‰| d   nd ‰	| d   «      S d «      S )Nr   rô   é   )Úclip)r„  rr  rs  s    €€r@   rh   z-Expr.clip.<locals>.<lambda>.<locals>.<lambda>ª  s8   ø€ ˜u Q™xŸ}™}Ø +Ð 7E˜!’H¸TØ +Ð 7E˜!‘Hó € à=Aó € rB   Fr€   r‚   )r<   rr  r>   rs  s    €€€r@   rh   zExpr.clip.<locals>.<lambda>¨  s#   ø€ Ô-Øôð ØØØ ô
€ rB   Frt  rw  )r>   rr  rs  s   ```r@   rØ  z	Expr.clipŠ  s7   ú€ ð: ~‰~õ
ô ØØØØ Ø#(Ø!&ôó
ð 	
rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úmoderg   s    €r@   rh   zExpr.mode.<locals>.<lambda>Ò  s   ø€ °×1HÑ1HÈÓ1M×1RÑ1RÓ1T€ rB   r<  ra   s   `r@   rÛ  z	Expr.mode½  s   ø€ ð* ×$Ñ$Ó%TÓUÐUrB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Ú	is_finiterg   s    €r@   rh   z Expr.is_finite.<locals>.<lambda>ù  r´  rB   rë   ra   s   `r@   rÞ  zExpr.is_finiteÔ  s   ø€ ðH ×(Ñ(Û@ó
ð 	
rB   c               ó0   ‡ ‡— ‰ j                  ˆˆ 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                óF   •— ‰j                  | «      j                  ‰¬«      S rD  )rE   Ú	cum_countrF  s    €€r@   rh   z Expr.cum_count.<locals>.<lambda>  s    ø€ ˜×/Ñ/°Ó4×>Ñ>ÀwÐ>ÓO€ rB   r   rH  s   ``r@   rá  zExpr.cum_countü  s   ù€ ð@ ×*Ñ*ÜOó
ð 	
rB   c               ó0   ‡ ‡— ‰ j                  ˆˆ 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                óF   •— ‰j                  | «      j                  ‰¬«      S rD  )rE   Úcum_minrF  s    €€r@   rh   zExpr.cum_min.<locals>.<lambda>A  rG  rB   r   rH  s   ``r@   rä  zExpr.cum_min   ó   ù€ ð@ ×*Ñ*ÜMó
ð 	
rB   c               ó0   ‡ ‡— ‰ j                  ˆˆ 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                óF   •— ‰j                  | «      j                  ‰¬«      S rD  )rE   Úcum_maxrF  s    €€r@   rh   zExpr.cum_max.<locals>.<lambda>e  rG  rB   r   rH  s   ``r@   rè  zExpr.cum_maxD  rå  rB   c               ó0   ‡ ‡— ‰ j                  ˆˆ 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                óF   •— ‰j                  | «      j                  ‰¬«      S rD  )rE   Úcum_prodrF  s    €€r@   rh   zExpr.cum_prod.<locals>.<lambda>‰  s    ø€ ˜×/Ñ/°Ó4×=Ñ=ÀgÐ=ÓN€ rB   r   rH  s   ``r@   rë  zExpr.cum_prodh  s   ù€ ð@ ×*Ñ*ÜNó
ð 	
rB   )rû   Úcenterc               óX   ‡ ‡‡‡— t        ‰|¬«      \  ŠŠ‰ j                  ˆˆˆ ˆ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|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        ©Úwindow_sizerû   c                óJ   •— ‰j                  | «      j                  ‰‰‰¬«      S ©N)rï  rû   rì  )rE   Úrolling_sum)r<   rì  Úmin_samples_intr>   rï  s    €€€€r@   rh   z"Expr.rolling_sum.<locals>.<lambda>¾  s*   ø€ ˜×/Ñ/°Ó4×@Ñ@Ø'°_ÈVð Aó € rB   ©r   rU   )r>   rï  rû   rì  ró  s   `` `@r@   rò  zExpr.rolling_sumŒ  s5   û€ ôZ (CØ#°ô(
Ñ$ˆ_ð ×*Ñ*öó
ð 	
rB   c               óX   ‡ ‡‡‡— t        ‰‰¬«      \  ŠŠ‰ j                  ˆˆˆ ˆ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                óJ   •— ‰j                  | «      j                  ‰‰‰¬«      S rñ  )rE   Úrolling_mean)r<   rì  rû   r>   rï  s    €€€€r@   rh   z#Expr.rolling_mean.<locals>.<lambda>õ  s*   ø€ ˜×/Ñ/°Ó4×AÑAØ'°[Èð Bó € rB   rô  )r>   rï  rû   rì  s   ````r@   r÷  zExpr.rolling_meanÃ  s4   û€ ôZ $?Ø#°ô$
Ñ ˆ[ð ×*Ñ*öó
ð 	
rB   )rû   rì  r
  c               ó\   ‡ ‡‡‡‡— t        ‰‰¬«      \  ŠŠ‰ j                  ˆˆˆˆ ˆ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                óL   •— ‰j                  | «      j                  ‰‰‰‰¬«      S ©N)rï  rû   rì  r
  )rE   Úrolling_var©r<   rì  r
  rû   r>   rï  s    €€€€€r@   rh   z"Expr.rolling_var.<locals>.<lambda>2	  ó-   ø€ ˜×/Ñ/°Ó4×@Ñ@Ø'°[ÈÐVZð Aó € rB   rô  ©r>   rï  rû   rì  r
  s   `````r@   rû  zExpr.rolling_varú  ó4   ü€ ôf $?Ø#°ô$
Ñ ˆ[ð ×*Ñ*÷ó
ð 	
rB   c               ó\   ‡ ‡‡‡‡— t        ‰‰¬«      \  ŠŠ‰ j                  ˆˆˆˆ ˆ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                óL   •— ‰j                  | «      j                  ‰‰‰‰¬«      S rú  )rE   Úrolling_stdrü  s    €€€€€r@   rh   z"Expr.rolling_std.<locals>.<lambda>o	  rý  rB   rô  rþ  s   `````r@   r  zExpr.rolling_std7	  rÿ  rB   )r`  c               óf   ‡ ‡‡— h d£}‰|vrd‰› d}t        |«      ‚‰ j                  ˆˆˆ 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    |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        >   r)  r%  ÚdenseÚaverageÚordinalzTRanking method must be one of {'average', 'min', 'max', 'dense', 'ordinal'}. Found 'ú'c                óH   •— ‰j                  | «      j                  ‰‰¬«      S )N)Úmethodr`  )rE   Úrank)r<   r`  r	  r>   s    €€€r@   rh   zExpr.rank.<locals>.<lambda>®	  s'   ø€ ˜×/Ñ/°Ó4×9Ñ9Ø¨*ð :ó € rB   )r™  rX   )r>   r	  r`  Úsupported_rank_methodsr^  s   ```  r@   r
  z	Expr.rankt	  sP   ú€ òb "OÐØÐ/Ñ/ðØ ˜ ð$ð ô ˜S“/Ð!à×,Ñ,õó
ð 	
rB   c                ó0   ‡ ‡— ‰ j                  ˆˆ 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                óF   •— ‰j                  | «      j                  ‰¬«      S )N)Úbase)rE   Úlog)r<   r  r>   s    €€r@   rh   zExpr.log.<locals>.<lambda>Ó	  r  rB   rë   )r>   r  s   ``r@   r  zExpr.log³	  s   ù€ ð> ×(Ñ(ÜCó
ð 	
rB   c                ó,   ‡ — ‰ j                  ˆ 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                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úexprg   s    €r@   rh   zExpr.exp.<locals>.<lambda>î	  r?  rB   rë   ra   s   `r@   r  zExpr.expÖ	  s   ø€ ð0 ×(Ñ(Ó)WÓXÐXrB   c                ó,   ‡ — ‰ j                  ˆ fd„«      S )u  Compute the square root.

        Returns:
            A new expression.

        Examples:
            >>> import pyarrow as pa
            >>> import narwhals as nw
            >>> df_native = pa.table({"values": [1, 4, 9]})
            >>> df = nw.from_native(df_native)
            >>> result = df.with_columns(sqrt=nw.col("values").sqrt())
            >>> result
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
            |Narwhals DataFrame|
            |------------------|
            |pyarrow.Table     |
            |values: int64     |
            |sqrt: double      |
            |----              |
            |values: [[1,4,9]] |
            |sqrt: [[1,2,3]]   |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        c                óB   •— ‰j                  | «      j                  «       S r9   )rE   Úsqrtrg   s    €r@   rh   zExpr.sqrt.<locals>.<lambda>
  s   ø€ °T×5LÑ5LÈSÓ5Q×5VÑ5VÓ5X€ rB   rë   ra   s   `r@   r  z	Expr.sqrtð	  s   ø€ ð0 ×(Ñ(Ó)XÓYÐYrB   c                ó   — t        | «      S r9   r   ra   s    r@   r}  zExpr.str

  ó   € ä" 4Ó(Ð(rB   c                ó   — t        | «      S r9   r   ra   s    r@   ÚdtzExpr.dt
  s   € ä$ TÓ*Ð*rB   c                ó   — t        | «      S r9   r   ra   s    r@   ÚcatzExpr.cat
  s   € ä Ó%Ð%rB   c                ó   — t        | «      S r9   r   ra   s    r@   rn   z	Expr.name
  ó   € ä  Ó&Ð&rB   c                ó   — t        | «      S r9   r   ra   s    r@   r[  z	Expr.list
  r  rB   c                ó   — t        | «      S r9   r   ra   s    r@   ÚstructzExpr.struct
  r  rB   )r?   r4   rF   r
   rC   ÚNone)r?   zCallable[[Any], Any]rC   r$   )rC   r}  )rC   r$   )rn   r}  rC   r$   )rq   z"Callable[Concatenate[Self, PS], R]rr   zPS.argsrs   z	PS.kwargsrC   r3   )rx   r+   rC   r$   )r„   z
Self | AnyrC   r$   )r„   r   rC   r$   )rö   úfloat | Noner÷   r"  rø   r"  rù   r"  rú   Úboolrû   rR  rü   r#  rC   r$   )r
  rR  rC   r$   r9   )rq   z(Callable[[Any], CompliantExpr[Any, Any]]r  zDType | NonerC   r$   )rC   r6   )rA  r#  rC   r$   )rM  rR  rC   r$   )rX  z!Sequence[Any] | Mapping[Any, Any]rW  zSequence[Any] | Noner  zIntoDType | NonerC   r$   )r`  r#  ra  r#  rC   r$   )Úboth)rr  úAny | IntoExprrs  r%  rp  r)   rC   r$   )r†  r   rC   r$   )NNN)r•  zExpr | NonNestedLiteralr–  zFillNullStrategy | Noner—  ú
int | NonerC   r$   )
rM  r&  rž  r"  rŸ  r#  r   r&  rC   r$   )r¬  zstr | Sequence[str]r¤  zstr | Sequence[str] | NonerC   r$   )rÀ  ÚfloatrÁ  r0   rC   r$   )é
   )r   )rÌ  rR  rC   r$   )rM  rR  rÒ  rR  rC   r$   )NN)rr  ú2IntoExpr | NumericLiteral | TemporalLiteral | Noners  r)  rC   r$   )rï  rR  rû   r&  rì  r#  rC   r$   )
rï  rR  rû   r&  rì  r#  r
  rR  rC   r$   )r  )r	  r/   r`  r#  rC   r$   )r  r'  rC   r$   )rC   zExprStringNamespace[Self])rC   zExprDateTimeNamespace[Self])rC   zExprCatNamespace[Self])rC   zExprNameNamespace[Self])rC   zExprListNamespace[Self])rC   zExprStructNamespace[Self])nÚ__name__Ú
__module__Ú__qualname__rG   rL   rO   rR   rU   rX   r[   r^   rb   rj   rm   rt   rw   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  rf   r%  r)  r,  r2  r5  r8  r;  re   rE  rK  rP  rV  rg  rx  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  r  Úpropertyr}  r  r  rn   r[  r   rp   rB   r@   r6   r6   7   s¥  „ ó"óWóTð
Ø!5ð
à	ó
óYó[óSó
ó
>ó
ó
ð8 /à4ð /ð ð /ð ð	 /ð
 
ó /óD
ó<
ó
ó
ó/ó
ó/ó
ó/ó
ó
ó
ó
ó
ó/ó
ó
ó
ó
ó
ó
ó
ó
ó
ó
ó
ó
Vó.Vð4 !Ø!Ø"&Ø"ØØØ"ñ`
ð ð`
ð ð	`
ð
  ð`
ð ð`
ð ð`
ð ð`
ð ð`
ð 
ó`
óDWó*Yð0 "#õ 
ð6 "#õ 
ð< &*ð,
à:ð,
ð #ð,
ð 
ó	,
ó\Wó*[ó0Vó6Vó*Vó*
ó.
ó.Xó*[ó*Xó*Yð, */õ  
óD,
ó\1
ðl %)ð9
ð
 *.ñ9
à.ð9
ð "ð9
ð
 'ð9
ð 
ó9
ðv */À5õ 
ðF "(ð	;
à#ð;
ð $ð;
ð ð	;
ð
 
ó;
óz!+óF.
ó`#
óJ#
óJZð  *.Ø,0Ø ð	_
à&ð_
ð *ð_
ð ð	_
ð
 
ó_
óD$
ðP ð&
ð "&Ø!&Øñ&
àð&
ð ð	&
ð
 ð&
ð ð&
ð 
ó&
ðV 04ñB
à*ðB
ð -ðB
ð 
ó	B
óH!ó0
ó4
ó<
ó@
ð@$
Øð$
Ø.Hð$
à	ó$
ôL
ô6Wô2#
óJVô4
ð< KOØJNð1
àGð1
ð Hð1
ð 
ó	1
ófVó.&
ðP ,1õ "
ðH */õ "
ðH */õ "
ðH +0õ "
ðJ >BÐRWñ5
Øð5
Ø0:ð5
ØKOð5
à	ó5
ðp >BÐRWñ5
Øð5
Ø0:ð5
ØKOð5
à	ó5
ðv #'ØØñ;
àð;
ð  ð	;
ð
 ð;
ð ð;
ð 
ó;
ðB #'ØØñ;
àð;
ð  ð	;
ð
 ð;
ð ð;
ð 
ó;
ðz=
Èõ =
ð~ !%§¡ô !
óFYó4Zð4 ò)ó ð)ð ò+ó ð+ð ò&ó ð&ð ò'ó ð'ð ò'ó ð'ð ò)ó ñ)rB   r6   )AÚ
__future__r   r-  Úcollections.abcr   r   r   Útypingr   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__rp   rB   r@   ú<module>rC     sÂ   ðÞ "ã ß 7Ñ 7ß /Ñ /÷ó ÷ó õ ,Ý 5Ý .Ý 2Ý 0Ý 0Ý 1Ý 4Ý (áÝçIÓIçEÝ%÷
÷ 
õ 
ñ 
4‹€BÙ‹€AØ&Ø	˜C ˜HÑ	%Ð&¨°c¸3°hÑ(?Ð?ñ€L)ó ÷
i')ñ i')ðXO ˆ(rB   