ó
    Lpˆjx, ã                  ó¨  • % S SK Jr  S SKrS SKrS SKJrJrJr  S SKJ	r	J
r
  S SKJrJrJrJrJr  S SKJrJrJrJrJrJrJrJrJrJr  S SKJrJrJrJ r   S SK!J"r"  S S	K#J$r$  S S
K%J&r&  S SK'J(r(J)r)  \	(       a]  S SK*J+r+  S SKJ,r,  S SK-J.r.J/r/  S SK0J1r1J2r2J3r3  S SK4J5r5  S SK6J7r7J8r8J9r9J:r:  S SK;J<r<J=r=  S SK>J?r?  S SK@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJ  SrKS\LS'   SS.SRS jjrM SS         STS jjrN SS         STS jjrO\" SS9 SSSSS.         SUS  jjj5       rP    SVS! jrQ SS       SWS" jjrR SS       SXS# jjrSSYS$ jrT      SZS% jrUS[S& jrVS[S' jrWS\S( jrXS)S*.         S]S+ jjrYS)S*.         S^S, jjrZ        S_S- jr[        S`S. jr\SaS/ jr]SaS0 jr^SbS1 jr_ScS2 jr`ScS3 jraSdS4 jrbSdS5 jrcSdS6 jrdSdS7 jreSdS8 jrfSeS9 jrgSfSgS: jjrhS;S<.ShS= jjriSiS> jrjSiS? jrkSiS@ jrl " SA SB5      rm " SC SD\$5      rnSjSE jroSkSF jrpSSSlSG jjrqSkSH jrrSiSI jrsSJSKSL.         SmSM jjrt      SnSN jruSoSO jrvSpSP jrwSqSQ jrxg)ré    )ÚannotationsN)ÚIterableÚMappingÚSequence)ÚTYPE_CHECKINGÚAny)ÚExprKindÚExprNodeÚ_parse_into_exprÚis_exprÚ	is_series)
ÚImplementationÚVersionÚdeprecate_native_namespaceÚflattenÚis_eager_allowedÚis_nested_literalÚis_sequence_ofÚnormalize_pathÚsupports_arrow_c_streamÚvalidate_laziness)Úis_narwhals_seriesÚis_numpy_arrayÚis_numpy_array_2dÚis_pyarrow_table)ÚInvalidOperationError)ÚExpr)ÚSchema)Úfrom_nativeÚ	to_native)Ú
ModuleType)Ú	TypeAlias)ÚSelfÚTypeIs)ÚNativeDataFrameÚNativeLazyFrameÚNativeSeries)ÚIntoArrowTable)ÚBackendÚEagerAllowedÚIntoBackendÚ
PluginName)Ú	DataFrameÚ	LazyFrame)ÚSeries)
ÚConcatMethodÚCorrelationMethodÚ
FileSourceÚFrameTÚ	IntoDTypeÚIntoExprÚ
IntoSchemaÚNonNestedLiteralÚPythonLiteralÚ_2DArrayú!IntoSchema | Sequence[str] | Noner"   Ú_IntoSchemaÚvertical©Úhowc               ón  • SSK Jn  U (       d  Sn[        U5      e[        U 5      n [	        U 5        US;  a  Sn[        U5      eU S   nU" U5      (       a  US:X  a  Sn[        U5      eUR                  5       nUR                  UR                  U  Vs/ s H  ofR                  PM     snUS95      $ s  snf )	uÿ  Concatenate multiple DataFrames, LazyFrames into a single entity.

Arguments:
    items: DataFrames, LazyFrames to concatenate.
    how: concatenating strategy

        - vertical: Concatenate vertically. Column names must match.
        - horizontal: Concatenate horizontally. If lengths don't match, then
            missing rows are filled with null values. This is only supported
            when all inputs are (eager) DataFrames.
        - diagonal: Finds a union between the column schemas and fills missing column
            values with null.

Raises:
    TypeError: The items to concatenate should either all be eager, or all lazy

Examples:
    Let's take an example of vertical concatenation:

    >>> import pandas as pd
    >>> import polars as pl
    >>> import pyarrow as pa
    >>> import narwhals as nw

    Let's look at one case a for vertical concatenation (pandas backed):

    >>> df_pd_1 = nw.from_native(pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]}))
    >>> df_pd_2 = nw.from_native(pd.DataFrame({"a": [5, 2], "b": [1, 4]}))
    >>> nw.concat([df_pd_1, df_pd_2], how="vertical")
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |        a  b      |
    |     0  1  4      |
    |     1  2  5      |
    |     2  3  6      |
    |     0  5  1      |
    |     1  2  4      |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Let's look at one case a for horizontal concatenation (polars backed):

    >>> df_pl_1 = nw.from_native(pl.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]}))
    >>> df_pl_2 = nw.from_native(pl.DataFrame({"c": [5, 2], "d": [1, 4]}))
    >>> nw.concat([df_pl_1, df_pl_2], how="horizontal")
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |    Narwhals DataFrame     |
    |---------------------------|
    |shape: (3, 4)              |
    |â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”|
    |â”‚ a   â”† b   â”† c    â”† d    â”‚|
    |â”‚ --- â”† --- â”† ---  â”† ---  â”‚|
    |â”‚ i64 â”† i64 â”† i64  â”† i64  â”‚|
    |â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•¡|
    |â”‚ 1   â”† 4   â”† 5    â”† 1    â”‚|
    |â”‚ 2   â”† 5   â”† 2    â”† 4    â”‚|
    |â”‚ 3   â”† 6   â”† null â”† null â”‚|
    |â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”˜|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Let's look at one case a for diagonal concatenation (pyarrow backed):

    >>> df_pa_1 = nw.from_native(pa.table({"a": [1, 2], "b": [3.5, 4.5]}))
    >>> df_pa_2 = nw.from_native(pa.table({"a": [3, 4], "z": ["x", "y"]}))
    >>> nw.concat([df_pa_1, df_pa_2], how="diagonal")
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |    Narwhals DataFrame    |
    |--------------------------|
    |pyarrow.Table             |
    |a: int64                  |
    |b: double                 |
    |z: string                 |
    |----                      |
    |a: [[1,2],[3,4]]          |
    |b: [[3.5,4.5],[null,null]]|
    |z: [[null,null],["x","y"]]|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
r   )Úis_narwhals_lazyframezNo items to concatenate.>   Údiagonalr<   Ú
horizontalzDOnly vertical, horizontal and diagonal concatenations are supported.rB   zdHorizontal concatenation is not supported for LazyFrames.

Hint: you may want to use `join` instead.r=   )Únarwhals.dependenciesr@   Ú
ValueErrorÚtupler   ÚNotImplementedErrorr   Ú__narwhals_namespace__Ú_with_compliantÚconcatÚ_compliant_frame)Úitemsr>   r@   ÚmsgÚ
first_itemÚplxÚdfs          ÚN/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/narwhals/functions.pyrI   rI   A   s½   € õ^ <æØ(ˆÜ˜‹oÐÜ%‹L€EÜeÔØ
Ð8Ó8ØTˆÜ! #Ó&Ð&Øq‘€JÙ˜Z×(Ñ(¨S°LÓ-@ð8ð 	ô $ CÓ(Ð(Ø
×
+Ñ
+Ó
-€CØ×%Ñ%Ø
‰
±%Ó8²%¨B×'Ô'±%Ñ8¸cˆ
ÐBóð ùÚ8s   ÂB2c               ó   • [        XX#S9$ )uŸ  Instantiate Narwhals Series from iterable (e.g. list or array).

Arguments:
    name: Name of resulting Series.
    values: Values of make Series from.
    dtype: (Narwhals) dtype. If not provided, the native library
        may auto-infer it from `values`.
    backend: specifies which eager backend instantiate to.

        `backend` can be specified in various ways

        - As `Implementation.<BACKEND>` with `BACKEND` being `PANDAS`, `PYARROW`,
            `POLARS`, `MODIN` or `CUDF`.
        - As a string: `"pandas"`, `"pyarrow"`, `"polars"`, `"modin"` or `"cudf"`.
        - Directly as a module `pandas`, `pyarrow`, `polars`, `modin` or `cudf`.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> values = [4, 1, 2, 3]
    >>> nw.new_series(name="a", values=values, dtype=nw.Int32, backend=pd)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |   Narwhals Series   |
    |---------------------|
    |0    4               |
    |1    1               |
    |2    2               |
    |3    3               |
    |Name: a, dtype: int32|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
©Úbackend)Ú_new_series_impl)ÚnameÚvaluesÚdtyperS   s       rP   Ú
new_seriesrX   §   s   € ôN ˜D¨%ÑAÐAó    c               ó  • [         R                  " U5      n[        U5      (       a]  [        R                  R
                  R                  U5      R                  nUR                  R                  XXRS9nUR                  5       $ U[         R                  L a<  UR                  5       n UR                  XU5      n[        USS9R                  U 5      $ U SU S3n
[!        U
5      e! [         a  n	Sn
[        U
5      U	eS n	A	ff = f)N)rU   ÚcontextrW   T)Úseries_onlyzDUnknown namespace is expected to implement `new_series` constructor.zÝ support in Narwhals is lazy-only, but `new_series` is an eager-only function.

Hint: you may want to use an eager backend and then call `.lazy`, e.g.:

    nw.new_series('a', [1,2,3], backend='pyarrow').to_frame().lazy('ú'))r   Úfrom_backendr   r   ÚMAINÚ	namespaceÚ	compliantÚ_seriesÚfrom_iterableÚto_narwhalsÚUNKNOWNÚto_native_namespacerX   r   ÚaliasÚAttributeErrorrD   )rU   rV   rW   rS   ÚimplementationÚnsÚseriesÚ_native_namespaceÚnative_seriesÚerL   s              rP   rT   rT   Ñ   s
  € ô $×0Ò0°Ó9€NÜ˜×'Ñ'Ü\‰\×#Ñ#×0Ñ0°Ó@×JÑJˆØ—‘×)Ñ)¨&ÀRÐ)ÐUˆØ×!Ñ!Ó#Ð#Øœ×/Ñ/Ò/Ø*×>Ñ>Ó@Ðð	-Ø*;×*FÑ*FØ˜eó+ˆMô ˜}¸$Ñ?×EÑEÀdÓKÐKð
 Ð
ð OàO]ÐN^Ð^`ð	bð ô
 S‹/Ðøô ó 	-ØXˆCÜ  Ó%¨1Ð,ûð	-ús   Â(*C& Ã&
DÃ0C>Ã>Dz1.26.0)Úwarn_version)rS   Únative_namespacec               óÚ  • Uc  [        U 5      u  pUb  [        U5      OSnU(       aT  U (       aM  [        UR                  5       5      R	                  U R                  5       5      =n(       a  SU 3n[        U5      e[        R                  " U5      n[        U5      (       a[  [        R                  R                  R                  U5      R                  nUR                  R                  XUS9R                  5       $ U[        R                   L a*  UR#                  5       n UR                  XS9n	['        U	SS9$ U SU S	3n[)        U5      e! [$         a  n
Sn[%        U5      U
eSn
A
ff = f)
u  Instantiate DataFrame from dictionary.

Indexes (if present, for pandas-like backends) are aligned following
the [left-hand-rule](../concepts/pandas_index.md).

Notes:
    For pandas-like dataframes, conversion to schema is applied after dataframe
    creation.

Arguments:
    data: Dictionary to create DataFrame from.
    schema: The DataFrame schema as Schema, dict of {name: type}, or a
        iterable of (name, type) tuples.
        If not specified, the schema will be inferred by the native library.
        If any `dtype` is `None`, the data type for that column will be
        inferred by the native library.
    backend: specifies which eager backend instantiate to. Only
        necessary if inputs are not Narwhals Series.

        `backend` can be specified in various ways

        - As `Implementation.<BACKEND>` with `BACKEND` being `PANDAS`, `PYARROW`,
            `POLARS`, `MODIN` or `CUDF`.
        - As a string: `"pandas"`, `"pyarrow"`, `"polars"`, `"modin"` or `"cudf"`.
        - Directly as a module `pandas`, `pyarrow`, `polars`, `modin` or `cudf`.
    native_namespace: deprecated, same as `backend`.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>> data = {"c": [5, 2], "d": [1, 4]}
    >>> nw.from_dict(data, backend="pandas")
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |        c  d      |
    |     0  5  1      |
    |     1  2  4      |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
NzIKeys in `schema` and `data` are expected to match, found unmatched keys: )Úschemar[   ©rr   z@Unknown namespace is expected to implement `from_dict` function.T©Ú
eager_onlyzÑ support in Narwhals is lazy-only, but `from_dict` is an eager-only function.

Hint: you may want to use an eager backend and then call `.lazy`, e.g.:

    nw.from_dict({'a': [1, 2]}, backend='pyarrow').lazy('r]   )Ú_from_dict_no_backendÚdictÚsetÚkeysÚsymmetric_differencer   r   r^   r   r   r_   r`   ra   Ú
_dataframeÚ	from_dictrd   re   rf   rh   r   rD   )Údatarr   rS   rp   ÚdiffrL   ri   rj   rl   Únative_framern   s              rP   r|   r|   ï   sd  € ð` Ü-¨dÓ3‰ˆØ#Ñ/ŒT&Œ\°T€FÞ–$¤C¨¯©«Ó$6×$KÑ$KÈDÏIÉIËKÓ$XÐX˜DÕXØYÐZ^ÐY_Ð`ˆÜ# CÓ(Ð(Ü#×0Ò0°Ó9€NÜ˜×'Ñ'Ü\‰\×#Ñ#×0Ñ0°Ó@×JÑJˆØ}‰}×&Ñ& tÀBÐ&ÐG×SÑSÓUÐUØœ×/Ñ/Ò/Ø*×>Ñ>Ó@Ðð	-ð ->×,GÑ,GØð -Hð -ˆLô ˜<°DÑ9Ð9àÐ
ð FàFTÐEUÐUWð	Yð ô
 S‹/Ðøô ó 	-ØTˆCÜ  Ó%¨1Ð,ûð	-ús   Ä!E Å
E*ÅE%Å%E*c          
     óú   • U R                  5        H%  n[        U5      (       d  M  UR                  5       n  O   Sn[        U5      eU R	                  5        VVs0 s H  u  pEU[        USS9_M     n nnX4$ s  snnf )NzgCalling `from_dict` without `backend` is only supported if all input values are already Narwhals SeriesT)Úpass_through)rV   r   Ú__native_namespace__Ú	TypeErrorrK   r    )r}   Úvalrp   rL   ÚkeyÚvalues         rP   rv   rv   =  sz   € ð {‰{Ž}ˆÜ˜c×"Ó"Ø"×7Ñ7Ó9ÐÙñ ð
 xˆÜ˜‹nÐØGKÇzÁzÄ|ÔTÂ|¹¸ˆC”˜5¨tÑ4Ò4Á|€DÑTØÐ!Ð!ùó Us   ÁA7c               óR   • [         R                  R                  R                  XUS9$ )uŸ	  Instantiate DataFrame from a sequence of dictionaries representing rows.

Notes:
    Keys missing from some (or all) rows are filled with null.

    For pandas-like dataframes, conversion to schema is applied after dataframe
    creation. A `schema` requesting a dtype which cannot hold null values (e.g.
    `Int64` or `Boolean` with the default numpy dtypes) will therefore coerce or
    raise on those missing values.

Arguments:
    data: Sequence with dictionaries mapping column name to value.
    schema: The DataFrame schema as Schema, dict of {name: type}, or a
        iterable of (name, type) tuples.
        If not specified, the schema will be inferred by the native library.
        If any `dtype` is `None`, the data type for that column will be
        inferred by the native library.
    backend: Specifies which eager backend instantiate to.

        `backend` can be specified in various ways

        - As `Implementation.<BACKEND>` with `BACKEND` being `PANDAS`, `PYARROW`,
            `POLARS`, `MODIN` or `CUDF`.
        - As a string: `"pandas"`, `"pyarrow"`, `"polars"`, `"modin"` or `"cudf"`.
        - Directly as a module `pandas`, `pyarrow`, `polars`, `modin` or `cudf`.

Tip:
    If you expect non-uniform keys in `data`, consider passing `schema` for
    more consistent results, as **inference varies between backends**:

    - pandas uses all rows
    - polars uses the first 100 rows
    - pyarrow uses only the first row

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>> data = [
    ...     {"item": "apple", "weight": 80, "price": 0.60},
    ...     {"item": "egg", "weight": 55, "price": 0.40},
    ... ]
    >>> nw.DataFrame.from_dicts(data, backend="polars")
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |    Narwhals DataFrame    |
    |--------------------------|
    |shape: (2, 3)             |
    |â”Œâ”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”|
    |â”‚ item  â”† weight â”† price â”‚|
    |â”‚ ---   â”† ---    â”† ---   â”‚|
    |â”‚ str   â”† i64    â”† f64   â”‚|
    |â•žâ•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•¡|
    |â”‚ apple â”† 80     â”† 0.6   â”‚|
    |â”‚ egg   â”† 55     â”† 0.4   â”‚|
    |â””â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”˜|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
rR   )r   r_   Ú	dataframeÚ
from_dicts)r}   rr   rS   s      rP   r‰   r‰   K  s%   € ô| <‰<×!Ñ!×,Ñ,¨TÀ7Ð,ÐKÐKrY   c               ó¦  • [        U 5      (       d  Sn[        U5      e[        U5      (       d  S[        U5       S3n[	        U5      eUb   [        U[        5      (       d  [        U5      n[        R                  " U5      n[        U5      (       aR  [        R                  R                  R                  U5      R                  nUR                  X5      R!                  5       $ U[        R"                  L a*  UR%                  5       n UR                  XS9n[)        USS9$ U S	U S
3n[        U5      e! [&         a  nSn['        U5      UeSnAff = f)u¹  Construct a DataFrame from a NumPy ndarray.

Notes:
    Only row orientation is currently supported.

    For pandas-like dataframes, conversion to schema is applied after dataframe
    creation.

Arguments:
    data: Two-dimensional data represented as a NumPy ndarray.
    schema: The DataFrame schema as Schema, dict of {name: type}, an iterable
        of (name, type) tuples, or a sequence of str.
    backend: specifies which eager backend instantiate to.

        `backend` can be specified in various ways

        - As `Implementation.<BACKEND>` with `BACKEND` being `PANDAS`, `PYARROW`,
            `POLARS`, `MODIN` or `CUDF`.
        - As a string: `"pandas"`, `"pyarrow"`, `"polars"`, `"modin"` or `"cudf"`.
        - Directly as a module `pandas`, `pyarrow`, `polars`, `modin` or `cudf`.

Examples:
    >>> import numpy as np
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> arr = np.array([[5, 2, 1], [1, 4, 3]])
    >>> schema = {"c": nw.Int16(), "d": nw.Float32(), "e": nw.Int8()}
    >>> nw.from_numpy(arr, schema=schema, backend="pyarrow")
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |  pyarrow.Table   |
    |  c: int16        |
    |  d: float        |
    |  e: int8         |
    |  ----            |
    |  c: [[5,1]]      |
    |  d: [[2,4]]      |
    |  e: [[1,3]]      |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
z)`from_numpy` only accepts 2D numpy arraysz`schema` is expected to be one of the following types: Schema | Mapping[str, IntoDType] | Iterable[tuple[str, IntoDType]] | Sequence[str].
Got Ú.Nrs   zAUnknown namespace is expected to implement `from_numpy` function.Trt   zÉ support in Narwhals is lazy-only, but `from_numpy` is an eager-only function.

Hint: you may want to use an eager backend and then call `.lazy`, e.g.:

    nw.from_numpy(arr, backend='pyarrow').lazy('r]   )r   rD   Ú_is_into_schemaÚtyperƒ   r   Ústrr   r   r^   r   r   r_   r`   ra   Ú
from_numpyrd   re   rf   rh   r   )	r}   rr   rS   rL   ri   rj   rl   r   rn   s	            rP   r   r   Œ  sW  € ô` ˜T×"Ñ"Ø9ˆÜ˜‹oÐÜ˜6×"Ñ"ðä˜“<. ð#ð 	ô
 ˜‹nÐØ‰Nœn¨V´S×9Ñ9Ü˜“ˆÜ#×0Ò0°Ó9€NÜ˜×'Ñ'Ü\‰\×#Ñ#×0Ñ0°Ó@×JÑJˆØ}‰}˜TÓ*×6Ñ6Ó8Ð8Øœ×/Ñ/Ò/Ø*×>Ñ>Ó@Ðð	-ð ->×,HÑ,HØð -Ið -ˆLô ˜<°DÑ9Ð9àÐ
ð ;à;IÐ:JÈ"ð	Nð ô
 S‹/Ðøô ó 	-ØUˆCÜ  Ó%¨1Ð,ûð	-ús   ÄD3 Ä3
EÄ=EÅEc                óª   • U S L =(       dI    [        U [        [        45      =(       d,    [        U [        5      =(       a    [        U [        5      (       + $ ©N)Ú
isinstancer   r   r   rŽ   )Úobjs    rP   rŒ   rŒ   à  sB   € àˆtˆ÷ 	DÜcœG¤VÐ,Ó-÷	DäsœHÓ%×B¬j¸¼cÓ.BÔ*BðrY   c               óZ  • [        U 5      (       d*  [        U 5      (       d  S[        U 5       S3n[        U5      e[        R
                  " U5      n[        U5      (       aZ  [        R                  R                  R                  U5      R                  nUR                  R                  XS9R                  5       $ U[        R                  L a,  UR                  5       n UR!                  U 5      n[%        USS9$ U SU S	3n['        U5      e! ["         a  nSn[#        U5      UeSnAff = f)
u  Construct a DataFrame from an object which supports the PyCapsule Interface.

Arguments:
    native_frame: Object which implements `__arrow_c_stream__`.
    backend: specifies which eager backend instantiate to.

        `backend` can be specified in various ways

        - As `Implementation.<BACKEND>` with `BACKEND` being `PANDAS`, `PYARROW`,
            `POLARS`, `MODIN` or `CUDF`.
        - As a string: `"pandas"`, `"pyarrow"`, `"polars"`, `"modin"` or `"cudf"`.
        - Directly as a module `pandas`, `pyarrow`, `polars`, `modin` or `cudf`.

Examples:
    >>> import pandas as pd
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> df_native = pd.DataFrame({"a": [1, 2], "b": [4.2, 5.1]})
    >>> nw.from_arrow(df_native, backend="polars")
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |  shape: (2, 2)   |
    |  â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”   |
    |  â”‚ a   â”† b   â”‚   |
    |  â”‚ --- â”† --- â”‚   |
    |  â”‚ i64 â”† f64 â”‚   |
    |  â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡   |
    |  â”‚ 1   â”† 4.2 â”‚   |
    |  â”‚ 2   â”† 5.1 â”‚   |
    |  â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜   |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
zGiven object of type z% does not support PyCapsule interface)r[   zuUnknown namespace is expected to implement `DataFrame` class which accepts object which supports PyCapsule Interface.NTrt   zÈ support in Narwhals is lazy-only, but `from_arrow` is an eager-only function.

Hint: you may want to use an eager backend and then call `.lazy`, e.g.:

    nw.from_arrow(df, backend='pyarrow').lazy('r]   )r   r   r   rƒ   r   r^   r   r   r_   r`   ra   r{   Ú
from_arrowrd   re   rf   r-   rh   r   rD   )r   rS   rL   ri   rj   rl   Únativern   s           rP   r•   r•   è  s*  € ôJ $ L×1Ñ1Ô5EÀl×5SÑ5SØ%¤d¨<Ó&8Ð%9Ð9^Ð_ˆÜ˜‹nÐÜ#×0Ò0°Ó9€NÜ˜×'Ñ'Ü\‰\×#Ñ#×0Ñ0°Ó@×JÑJˆØ}‰}×'Ñ'¨Ð'ÐA×MÑMÓOÐOØœ×/Ñ/Ò/Ø*×>Ñ>Ó@Ðð	-ð '8×&AÑ&AÀ,Ó&OˆFô ˜6¨dÑ3Ð3àÐ
ð :à:HÐ9IÈð	Mð ô
 S‹/Ðøô ó 	-ð JˆCÜ  Ó%¨1Ð,ûð	-ús   ÃD Ä
D*ÄD%Ä%D*c                 ó°   • [         R                  R                  SS5      n SU 4S[         R                  4S[        R                  " 5       44n[        U5      $ )zƒSystem information.

Returns system and Python version information

Copied from sklearn

Returns:
    Dictionary with system info.
Ú
Ú ÚpythonÚ
executableÚmachine)ÚsysÚversionÚreplacer›   Úplatformrw   )rš   Úblobs     rP   Ú_get_sys_infor¢   &  sT   € ô [‰[× Ñ   sÓ+€Fð 
6ÐØ	”s—~‘~Ð&Ø	”H×%Ò%Ó'Ð(ð€Dô ‹:ÐrY   c                 ó~  ^	• SSK Jn   Sn[        R                  nSS1m	[	        U	4S j/ UQUQ7 5       5      n[
        R                  US5      nU " 5        Hd  nUR                  R                  5       UR                  pvXd;   a  XtU'   M3  U H+  nXH   (       a  M  UR                  U5      (       d  M&  XtU'     Mb     Mf     U$ )al  Overview of the installed version of main dependencies.

This function does not import the modules to collect the version numbers
but instead relies on standard Python package metadata.

Returns version information on relevant Python libraries

This function and show_versions were copied from sklearn and adapted

Returns:
    Mapping from dependency to version.
r   )Údistributions)ÚnarwhalsÚnumpyÚPYSPARK_CONNECTre   c              3  óR   >#   • U  H  oT;  d  M
  UR                  5       v •  M     g 7fr‘   )Úlower)Ú.0rU   Úexcludes     €rP   Ú	<genexpr>Ú!_get_deps_info.<locals>.<genexpr>M  s$   øé € ð Ú!>˜ÈgÑBU‹ˆ
‰
ˆÒ!>ùs   ƒ	''Ú )Úimportlib.metadatar¤   r   Ú_member_names_rE   rw   ÚfromkeysrU   r©   rž   Ú
startswith)
r¤   Úextra_namesÚmember_namesÚtarget_namesÚresultÚdistÚ	dist_nameÚdist_versionÚtargetr«   s
            @rP   Ú_get_deps_infor»   ;  s¾   ø€ õ 1à'€KÜ!×0Ñ0€LØ  )Ð,€GÜô Ø!> ;Ð!>°Ò!>óó €Lô ]‰]˜<¨Ó,€Fá–ˆØ"&§)¡)§/¡/Ó"3°T·\±\<àÓØ ,9Óã&Ø—~‘~¨)×*>Ñ*>Ø÷+ó +ð &2˜6‘NÚó 'ñ  ð €MrY   c                 ó   • [        5       n [        5       n[        S5        U R                  5        H  u  p#[        US SU 35        M     [        S5        UR                  5        H  u  p#[        US SU 35        M     g)z„Print useful debugging information.

Examples:
    >>> from narwhals import show_versions
    >>> show_versions()  # doctest: +SKIP
z
System:z>10z: z
Python dependencies:z>13N)r¢   r»   ÚprintrK   )Úsys_infoÚ	deps_infoÚkÚstats       rP   Úshow_versionsrÂ   b  sv   € ô ‹€HÜÓ €Iä	ˆ+ÔØ—>‘>Ö#‰ˆÜ3r˜$˜Ð Ö!ñ $ô 
Ð
"Ô#Ø—?‘?Ö$‰ˆÜ3r˜$˜Ð Ö!ò %rY   Ú,©Ú	separatorc               ó  • [         R                  " U5      n[        U5      (       aa  [        R                  R
                  R                  U5      R                  nUR                  " [        U 5      4SU0UD6nUR                  5       $ U[         R                  L a/  UR                  5       n UR                  " SSU 0UD6n[        USS9$ SU SU  S	U S
3n
[        U
5      e! [         a  n	Sn
[        U
5      U	eSn	A	ff = f)u>  Read a CSV file into a DataFrame.

Arguments:
    source: Path to a file.
    backend: The eager backend for DataFrame creation.
        `backend` can be specified in various ways

        - As `Implementation.<BACKEND>` with `BACKEND` being `PANDAS`, `PYARROW`,
            `POLARS`, `MODIN` or `CUDF`.
        - As a string: `"pandas"`, `"pyarrow"`, `"polars"`, `"modin"` or `"cudf"`.
        - Directly as a module `pandas`, `pyarrow`, `polars`, `modin` or `cudf`.
    separator: Single byte character to use as separator in the file.
    kwargs: Extra keyword arguments which are passed to the native CSV reader.
        For example, you could use
        `nw.read_csv('file.csv', backend='pandas', engine='pyarrow')`.

Examples:
    >>> import narwhals as nw
    >>> nw.read_csv("file.csv", backend="pandas")  # doctest:+SKIP
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |        a   b     |
    |     0  1   4     |
    |     1  2   5     |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
rÅ   Úsourcez?Unknown namespace is expected to implement `read_csv` function.NTrt   úExpected eager backend, found z .

Hint: use nw.scan_csv(source=ú
, backend=Ú)© )r   r^   r   r   r_   r`   ra   Úread_csvr   rd   re   rf   rh   r   rD   )rÇ   rS   rÅ   ÚkwargsÚimplrj   Úframerp   r   rn   rL   s              rP   rÌ   rÌ   u  s  € ôD ×&Ò& wÓ/€DÜ˜×ÑÜ\‰\×#Ñ#×0Ñ0°Ó6×@Ñ@ˆØ—’œN¨6Ó2ÑR¸iÐRÈ6ÑRˆØ× Ñ Ó"Ð"ØŒ~×%Ñ%Ò%Ø×3Ñ3Ó5Ðð	-ð -=×,EÒ,Eñ -Øð-Ø!'ñ-ˆLô ˜<°DÑ9Ð9à
(¨¨ð /(Ø(. x¨z¸'¸À!ð	Eð ô S‹/Ðøô ó 	-ØSˆCÜ  Ó%¨1Ð,ûð	-ús   Â,C! Ã!
C>Ã+C9Ã9C>c               óò  • [         R                  " U5      nU[         R                  L a>  UR                  5       n UR                  " SSU 0UD6n[        U5      R                  5       $ [        R                  R                  R                  U5      R                  n	U	R                  " [        U 5      4SU0UD6n
U
R                  5       R                  5       nU$ ! [
         a  nSn[        U5      UeSnAff = f)uF  Lazily read from a CSV file.

For the libraries that do not support lazy dataframes, the function reads
a csv file eagerly and then converts the resulting dataframe to a lazyframe.

Arguments:
    source: Path to a file.
    backend: The eager backend for DataFrame creation.
        `backend` can be specified in various ways

        - As `Implementation.<BACKEND>` with `BACKEND` being `PANDAS`, `PYARROW`,
            `POLARS`, `MODIN` or `CUDF`.
        - As a string: `"pandas"`, `"pyarrow"`, `"polars"`, `"modin"` or `"cudf"`.
        - Directly as a module `pandas`, `pyarrow`, `polars`, `modin` or `cudf`.
    separator: Single byte character to use as separator in the file.
    kwargs: Extra keyword arguments which are passed to the native CSV reader.
        For example, you could use
        `nw.scan_csv('file.csv', backend=pd, engine='pyarrow')`.

Examples:
    >>> import duckdb
    >>> import narwhals as nw
    >>>
    >>> nw.scan_csv("file.csv", backend="duckdb").to_native()  # doctest:+SKIP
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”
    â”‚    a    â”‚   b   â”‚
    â”‚ varchar â”‚ int32 â”‚
    â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”¤
    â”‚ x       â”‚     1 â”‚
    â”‚ y       â”‚     2 â”‚
    â”‚ z       â”‚     3 â”‚
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”˜
rÇ   z?Unknown namespace is expected to implement `scan_csv` function.NrÅ   rË   )r   r^   re   rf   Úscan_csvrh   r   Úlazyr   r_   r`   ra   r   rd   )rÇ   rS   rÅ   rÍ   rÎ   rp   r   rn   rL   rj   rÏ   r¶   s               rP   rÑ   rÑ   ¯  sí   € ôP ×&Ò& wÓ/€DØŒ~×%Ñ%Ò%Ø×3Ñ3Ó5Ðð	-ð ?O×>WÒ>Wñ ?Øð?Ø!'ñ?ˆLô ˜<Ó(×-Ñ-Ó/Ð/Ü	‰×	Ñ	×	,Ñ	,¨TÓ	2×	<Ñ	<€BØKŠKœ vÓ.ÑN¸)ÐNÀvÑN€EØ"×.Ñ.Ó0×5Ñ5Ó7€FØ€Møô ó 	-ØSˆCÜ  Ó%¨1Ð,ûð	-ús   »C Ã
C6Ã#C1Ã1C6c               óþ  • [         R                  " U5      n[        U5      (       a_  [        R                  R
                  R                  U5      R                  nUR                  " [        U 5      40 UD6nUR                  5       $ U[         R                  L a/  UR                  5       n UR                  " S
SU 0UD6n[        USS9$ SU SU  SU S	3n	[        U	5      e! [         a  nSn	[        U	5      UeSnAff = f)u€  Read into a DataFrame from a parquet file.

Arguments:
    source: Path to a file.
    backend: The eager backend for DataFrame creation.
        `backend` can be specified in various ways

        - As `Implementation.<BACKEND>` with `BACKEND` being `PANDAS`, `PYARROW`,
            `POLARS`, `MODIN` or `CUDF`.
        - As a string: `"pandas"`, `"pyarrow"`, `"polars"`, `"modin"` or `"cudf"`.
        - Directly as a module `pandas`, `pyarrow`, `polars`, `modin` or `cudf`.
    kwargs: Extra keyword arguments which are passed to the native parquet reader.
        For example, you could use
        `nw.read_parquet('file.parquet', backend=pd, engine='pyarrow')`.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> nw.read_parquet("file.parquet", backend="pyarrow")  # doctest:+SKIP
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |pyarrow.Table     |
    |a: int64          |
    |c: double         |
    |----              |
    |a: [[1,2]]        |
    |c: [[0.2,0.1]]    |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
rÇ   zCUnknown namespace is expected to implement `read_parquet` function.NTrt   rÈ   z$.

Hint: use nw.scan_parquet(source=rÉ   rÊ   rË   )r   r^   r   r   r_   r`   ra   Úread_parquetr   rd   re   rf   rh   r   rD   )
rÇ   rS   rÍ   rÎ   rj   rÏ   rp   r   rn   rL   s
             rP   rÔ   rÔ   ê  s  € ôD ×&Ò& wÓ/€DÜ˜×ÑÜ\‰\×#Ñ#×0Ñ0°Ó6×@Ñ@ˆØ—’¤¨vÓ 6ÑA¸&ÑAˆØ× Ñ Ó"Ð"ØŒ~×%Ñ%Ò%Ø×3Ñ3Ó5Ðð	-ð -=×,IÒ,Iñ -Øð-Ø!'ñ-ˆLô ˜<°DÑ9Ð9à
(¨¨ð /,Ø,2¨8°:¸g¸YÀað	Ið ô S‹/Ðøô ó 	-ØWˆCÜ  Ó%¨1Ð,ûð	-ús   Â*C Ã
C<Ã)C7Ã7C<c               óî  • [         R                  " U5      nU[         R                  L a>  UR                  5       n UR                  " SSU 0UD6n[        U5      R                  5       $ [        R                  R                  R                  U5      R                  nUR                  " [        U 5      40 UD6n	U	R                  5       R                  5       n
U
$ ! [
         a  nSn[        U5      UeSnAff = f)uF  Lazily read from a parquet file.

For the libraries that do not support lazy dataframes, the function reads
a parquet file eagerly and then converts the resulting dataframe to a lazyframe.

Note:
    Spark like backends require a session object to be passed in `kwargs`.

    For instance:

    ```py
    import narwhals as nw
    from sqlframe.duckdb import DuckDBSession

    nw.scan_parquet(source, backend="sqlframe", session=DuckDBSession())
    ```

Arguments:
    source: Path to a file.
    backend: The eager backend for DataFrame creation.
        `backend` can be specified in various ways

        - As `Implementation.<BACKEND>` with `BACKEND` being `PANDAS`, `PYARROW`,
            `POLARS`, `MODIN`, `CUDF`, `PYSPARK` or `SQLFRAME`.
        - As a string: `"pandas"`, `"pyarrow"`, `"polars"`, `"modin"`, `"cudf"`,
            `"pyspark"` or `"sqlframe"`.
        - Directly as a module `pandas`, `pyarrow`, `polars`, `modin`, `cudf`,
            `pyspark.sql` or `sqlframe`.
    kwargs: Extra keyword arguments which are passed to the native parquet reader.
        For example, you could use
        `nw.scan_parquet('file.parquet', backend=pd, engine='pyarrow')`.

Examples:
    >>> import dask.dataframe as dd
    >>> from sqlframe.duckdb import DuckDBSession
    >>> import narwhals as nw
    >>>
    >>> nw.scan_parquet("file.parquet", backend="dask").collect()  # doctest:+SKIP
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |        a   b     |
    |     0  1   4     |
    |     1  2   5     |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
    >>> nw.scan_parquet(
    ...     "file.parquet", backend="sqlframe", session=DuckDBSession()
    ... ).collect()  # doctest:+SKIP
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |  pyarrow.Table   |
    |  a: int64        |
    |  b: int64        |
    |  ----            |
    |  a: [[1,2]]      |
    |  b: [[4,5]]      |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
rÇ   zCUnknown namespace is expected to implement `scan_parquet` function.NrË   )r   r^   re   rf   Úscan_parquetrh   r   rÒ   r   r_   r`   ra   r   rd   )rÇ   rS   rÍ   rÎ   rp   r   rn   rL   rj   rÏ   r¶   s              rP   rÖ   rÖ   $  sâ   € ô| ×&Ò& wÓ/€DØŒ~×%Ñ%Ò%Ø×3Ñ3Ó5Ðð	-ð !×-Ò-ÑF°VÐF¸vÑFð ô ˜<Ó(×-Ñ-Ó/Ð/Ü	‰×	Ñ	×	,Ñ	,¨TÓ	2×	<Ñ	<€BØOŠOœN¨6Ó2Ñ=°fÑ=€EØ"×.Ñ.Ó0×5Ñ5Ó7€FØ€Møô ó 	-ØWˆCÜ  Ó%¨1Ð,ûð	-ús   »C Ã
C4Ã!C/Ã/C4c                 ó\   • [        U 5      n[        [        [        R                  SUS95      $ )ug  Creates an expression that references one or more columns by their name(s).

Arguments:
    names: Name(s) of the columns to use.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> df_native = pl.DataFrame({"a": [1, 2], "b": [3, 4], "c": ["x", "z"]})
    >>> nw.from_native(df_native).select(nw.col("a", "b") * nw.col("b"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |  shape: (2, 2)   |
    |  â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”   |
    |  â”‚ a   â”† b   â”‚   |
    |  â”‚ --- â”† --- â”‚   |
    |  â”‚ i64 â”† i64 â”‚   |
    |  â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•¡   |
    |  â”‚ 3   â”† 9   â”‚   |
    |  â”‚ 8   â”† 16  â”‚   |
    |  â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜   |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
Úcol©Únames)r   r   r
   r	   ÚCOL)rÚ   Ú
flat_namess     rP   rØ   rØ   u  s%   € ô4 ˜“€JÜ”œŸ™ u°JÑ?Ó@Ð@rY   c                 ój   • [        [        [        R                  S[	        [        U 5      5      S95      $ )u%  Creates an expression that excludes columns by their name(s).

Arguments:
    names: Name(s) of the columns to exclude.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> df_native = pl.DataFrame({"a": [1, 2], "b": [3, 4], "c": ["x", "z"]})
    >>> nw.from_native(df_native).select(nw.exclude("c", "a"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |  shape: (2, 1)   |
    |  â”Œâ”€â”€â”€â”€â”€â”         |
    |  â”‚ b   â”‚         |
    |  â”‚ --- â”‚         |
    |  â”‚ i64 â”‚         |
    |  â•žâ•â•â•â•â•â•¡         |
    |  â”‚ 3   â”‚         |
    |  â”‚ 4   â”‚         |
    |  â””â”€â”€â”€â”€â”€â”˜         |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
r«   rÙ   )r   r
   r	   ÚEXCLUDEÚ	frozensetr   rÙ   s    rP   r«   r«   “  s'   € ô4 ”œ×)Ñ)¨9¼IÄgÈeÃnÓ<UÑVÓWÐWrY   c                 ó\   • [        U 5      n[        [        [        R                  SUS95      $ )u)  Creates an expression that references one or more columns by their index(es).

Notes:
    `nth` is not supported for Polars version<1.0.0. Please use
    [`narwhals.col`][] instead.

Arguments:
    indices: One or more indices representing the columns to retrieve.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> df_native = pa.table({"a": [1, 2], "b": [3, 4], "c": [0.123, 3.14]})
    >>> nw.from_native(df_native).select(nw.nth(0, 2) * 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |pyarrow.Table     |
    |a: int64          |
    |c: double         |
    |----              |
    |a: [[2,4]]        |
    |c: [[0.246,6.28]] |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
Únth)Úindices)r   r   r
   r	   ÚNTH)râ   Úflat_indicess     rP   rá   rá   °  s&   € ô6 ˜7Ó#€LÜ”œŸ™ u°lÑCÓDÐDrY   c                 óH   • [        [        [        R                  S5      5      $ )uû  Instantiate an expression representing all columns.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> df_native = pd.DataFrame({"a": [1, 2], "b": [3.14, 0.123]})
    >>> nw.from_native(df_native).select(nw.all() * 2)
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |      a      b    |
    |   0  2  6.280    |
    |   1  4  0.246    |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
Úall)r   r
   r	   ÚALLrË   rY   rP   Úall_rè   Ð  s   € ô" ”œŸ™ uÓ-Ó.Ð.rY   c                 óH   • [        [        [        R                  S5      5      $ )u‘  Return the number of rows.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> df_native = pl.DataFrame({"a": [1, 2], "b": [5, None]})
    >>> nw.from_native(df_native).select(nw.len())
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |  shape: (1, 1)   |
    |  â”Œâ”€â”€â”€â”€â”€â”         |
    |  â”‚ len â”‚         |
    |  â”‚ --- â”‚         |
    |  â”‚ u32 â”‚         |
    |  â•žâ•â•â•â•â•â•¡         |
    |  â”‚ 2   â”‚         |
    |  â””â”€â”€â”€â”€â”€â”˜         |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
Úlen©r   r
   r	   ÚAGGREGATIONrË   rY   rP   Úlen_rí   å  s   € ô, ”œ×-Ñ-¨uÓ5Ó6Ð6rY   c                 ó.   • [        U 6 R                  5       $ )uL  Sum all values.

Note:
    Syntactic sugar for ``nw.col(columns).sum()``

Arguments:
    columns: Name(s) of the columns to use in the aggregation function

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> df_native = pd.DataFrame({"a": [1, 2], "b": [-1.4, 6.2]})
    >>> nw.from_native(df_native).select(nw.sum("a", "b"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |       a    b     |
    |    0  3  4.8     |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
)rØ   Úsum©Úcolumnss    rP   rï   rï   þ  ó   € ô, ˆ=×ÑÓÐrY   c                 ó.   • [        U 6 R                  5       $ )u  Get the mean value.

Note:
    Syntactic sugar for ``nw.col(columns).mean()``

Arguments:
    columns: Name(s) of the columns to use in the aggregation function

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> df_native = pa.table({"a": [1, 8, 3], "b": [3.14, 6.28, 42.1]})
    >>> nw.from_native(df_native).select(nw.mean("a", "b"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |   Narwhals DataFrame    |
    |-------------------------|
    |pyarrow.Table            |
    |a: double                |
    |b: double                |
    |----                     |
    |a: [[4]]                 |
    |b: [[17.173333333333336]]|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
)rØ   Úmeanrð   s    rP   rô   rô     s   € ô4 ˆ=×ÑÓÐrY   c                 ó.   • [        U 6 R                  5       $ )uŸ  Get the median value.

Notes:
    - Syntactic sugar for ``nw.col(columns).median()``
    - Results might slightly differ across backends due to differences in the
        underlying algorithms used to compute the median.

Arguments:
    columns: Name(s) of the columns to use in the aggregation function

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> df_native = pl.DataFrame({"a": [4, 5, 2]})
    >>> nw.from_native(df_native).select(nw.median("a"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |  shape: (1, 1)   |
    |  â”Œâ”€â”€â”€â”€â”€â”         |
    |  â”‚ a   â”‚         |
    |  â”‚ --- â”‚         |
    |  â”‚ f64 â”‚         |
    |  â•žâ•â•â•â•â•â•¡         |
    |  â”‚ 4.0 â”‚         |
    |  â””â”€â”€â”€â”€â”€â”˜         |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
)rØ   Úmedianrð   s    rP   rö   rö   4  s   € ô< ˆ=×ÑÓ!Ð!rY   c                 ó.   • [        U 6 R                  5       $ )u´  Return the minimum value.

Note:
   Syntactic sugar for ``nw.col(columns).min()``.

Arguments:
    columns: Name(s) of the columns to use in the aggregation function.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> df_native = pa.table({"a": [1, 2], "b": [5, 10]})
    >>> nw.from_native(df_native).select(nw.min("a", "b"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |  pyarrow.Table   |
    |  a: int64        |
    |  b: int64        |
    |  ----            |
    |  a: [[1]]        |
    |  b: [[5]]        |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
)rØ   Úminrð   s    rP   rø   rø   U  s   € ô4 ˆ=×ÑÓÐrY   c                 ó.   • [        U 6 R                  5       $ )uS  Return the maximum value.

Note:
   Syntactic sugar for ``nw.col(columns).max()``.

Arguments:
    columns: Name(s) of the columns to use in the aggregation function.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> df_native = pd.DataFrame({"a": [1, 2], "b": [5, 10]})
    >>> nw.from_native(df_native).select(nw.max("a", "b"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |        a   b     |
    |     0  2  10     |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
)rØ   Úmaxrð   s    rP   rú   rú   r  rò   rY   c                ó†   • U(       d  SU  S3n[        U5      e[        [        [        R                  U 4SU0UDSS0D65      $ )Nz+At least one expression must be passed to `Ú`ÚexprsÚallow_multi_outputT)rD   r   r
   r	   ÚELEMENTWISE)rU   rý   rÍ   rL   s       rP   Ú_expr_with_horizontal_opr   ‹  sU   € ÞØ;¸D¸6ÀÐCˆÜ˜‹oÐÜÜÜ× Ñ  $ñ	
Ø.3ð	
Ø7=ñ	
ØRVò	
óð rY   c           	     óJ   • [        [        [        R                  SX4US95      $ )uu  Compute the Pearson's or Spearman rank correlation between two columns.

Arguments:
    a: Column name or Expression
    b: Column name or Expression
    method: Correlation method ('pearson' or 'spearman')

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> df_native = pl.DataFrame({"a": [1, 2, 3], "b": [0, 3, 2]})
    >>> nw.from_native(df_native).select(
    ...     pearson=nw.corr("a", "b", method="pearson"),
    ...     spearman=nw.corr("a", "b", method="spearman"),
    ... )
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |  Narwhals DataFrame   |
    |-----------------------|
    |shape: (1, 2)          |
    |â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”|
    |â”‚ pearson  â”† spearman â”‚|
    |â”‚ ---      â”† ---      â”‚|
    |â”‚ f64      â”† f64      â”‚|
    |â•žâ•â•â•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•¡|
    |â”‚ 0.654654 â”† 0.5      â”‚|
    |â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
Úcorr)rý   Úmethodrë   )ÚaÚbr  s      rP   r  r  –  s"   € ô< ”œ×-Ñ-¨v¸a¸VÈFÑSÓTÐTrY   é   )Úddofc          	     óJ   • [        [        [        R                  SX4US95      $ )u•  Compute the covariance between two columns.

Arguments:
    a: Column name or Expression
    b: Column name or Expression
    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.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> df_native = pl.DataFrame({"a": [1, 2, 3], "b": [0, 3, 2]})
    >>> nw.from_native(df_native).select(
    ...     sample=nw.cov("a", "b"), population=nw.cov("a", "b", ddof=0)
    ... )
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |  Narwhals DataFrame   |
    |-----------------------|
    |shape: (1, 2)          |
    |â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”|
    |â”‚ sample â”† population â”‚|
    |â”‚ ---    â”† ---        â”‚|
    |â”‚ f64    â”† f64        â”‚|
    |â•žâ•â•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•â•¡|
    |â”‚ 1.0    â”† 0.666667   â”‚|
    |â””â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
Úcov)rý   r  rë   )r  r  r  s      rP   r	  r	  ·  s"   € ô< ”œ×-Ñ-¨u¸Q¸FÈÑNÓOÐOrY   c                 ó,   • [        S/[        U 5      Q76 $ )uP  Sum all values horizontally across columns.

Warning:
    Unlike Polars, we support horizontal sum over numeric columns only.

Arguments:
    exprs: Name(s) of the columns to use in the aggregation function. Accepts
        expression input.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> df_native = pl.DataFrame({"a": [1, 2, 3], "b": [5, 10, None]})
    >>> nw.from_native(df_native).with_columns(sum=nw.sum_horizontal("a", "b"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    | Narwhals DataFrame |
    |--------------------|
    |shape: (3, 3)       |
    |â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”|
    |â”‚ a   â”† b    â”† sum â”‚|
    |â”‚ --- â”† ---  â”† --- â”‚|
    |â”‚ i64 â”† i64  â”† i64 â”‚|
    |â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•¡|
    |â”‚ 1   â”† 5    â”† 6   â”‚|
    |â”‚ 2   â”† 10   â”† 12  â”‚|
    |â”‚ 3   â”† null â”† 3   â”‚|
    |â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
Úsum_horizontal©r   r   ©rý   s    rP   r  r  Ø  ó   € ô> $Ð$4ÐF´w¸u³~ÒFÐFrY   c                 ó,   • [        S/[        U 5      Q76 $ )uH  Get the minimum value horizontally across columns.

Notes:
    We support `min_horizontal` over numeric columns only.

Arguments:
    exprs: Name(s) of the columns to use in the aggregation function. Accepts
        expression input.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> df_native = pa.table({"a": [1, 8, 3], "b": [4, 5, None]})
    >>> nw.from_native(df_native).with_columns(h_min=nw.min_horizontal("a", "b"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    | pyarrow.Table    |
    | a: int64         |
    | b: int64         |
    | h_min: int64     |
    | ----             |
    | a: [[1,8,3]]     |
    | b: [[4,5,null]]  |
    | h_min: [[1,5,3]] |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
Úmin_horizontalr  r  s    rP   r  r  ú  s   € ô: $Ð$4ÐF´w¸u³~ÒFÐFrY   c                 ó,   • [        S/[        U 5      Q76 $ )uy  Get the maximum value horizontally across columns.

Notes:
    We support `max_horizontal` over numeric columns only.

Arguments:
    exprs: Name(s) of the columns to use in the aggregation function. Accepts
        expression input.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> df_native = pl.DataFrame({"a": [1, 8, 3], "b": [4, 5, None]})
    >>> nw.from_native(df_native).with_columns(h_max=nw.max_horizontal("a", "b"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |  Narwhals DataFrame  |
    |----------------------|
    |shape: (3, 3)         |
    |â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”|
    |â”‚ a   â”† b    â”† h_max â”‚|
    |â”‚ --- â”† ---  â”† ---   â”‚|
    |â”‚ i64 â”† i64  â”† i64   â”‚|
    |â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•¡|
    |â”‚ 1   â”† 4    â”† 4     â”‚|
    |â”‚ 8   â”† 5    â”† 8     â”‚|
    |â”‚ 3   â”† null â”† 3     â”‚|
    |â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”˜|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
Úmax_horizontalr  r  s    rP   r  r    r  rY   c                  ó4   • \ rS rSr      SS jrSS jrSrg)ÚWheni<  c               óB   • [        [        U5      SS06U l        Xl        g )NÚignore_nullsF)Úall_horizontalr   Ú
_predicateÚ_chain)ÚselfÚchainÚ
predicatess      rP   Ú__init__ÚWhen.__init__=  s   € ô
 )¬'°*Ó*=ÐRÈEÑRˆŒØrY   c                óf   • / U R                   QU R                  U4P7n[        R                  U5      $ r‘   )r  r  ÚThenÚ_from_chain)r  r†   Ú	new_chains      rP   ÚthenÚ	When.thenE  s/   € Ø<d—k‘kÐ< D§O¡O°UÐ#;Ñ<ˆ	Ü×Ñ 	Ó*Ð*rY   )r  r  N)r  úIntoExpr | Iterable[IntoExpr]r  ú4tuple[tuple[Expr, IntoExpr | NonNestedLiteral], ...]ÚreturnÚNone)r†   úIntoExpr | NonNestedLiteralr'  r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r  r#  Ú__static_attributes__rË   rY   rP   r  r  <  s)   † ðà2ðð Dðð 
ô	÷+rY   r  c                  ó¨   • \ rS rSr% S\S'   SrS\S'   SrS\S'   \SS	 j5       r\R                  SS
 j5       r\
    SS j5       rSS jrSS jrSrg)r   iJ  r&  r  Nztuple[ExprNode, ...] | NoneÚ_cached_nodesz"IntoExpr | NonNestedLiteral | NoneÚ
_otherwisec           
     óT  • U R                   (       a  U R                   $ U R                  n[        U R                  5       H3  u  p#Uc  X#4nOX#U4n[	        [        [        R                  SUSS95      nM5     [        U[        5      (       d   eUR                  U l         U R                   $ )NÚ	when_thenF©rý   rþ   )
r0  r1  Úreversedr  r   r
   r	   rÿ   r’   Ú_nodes)r  ÚexprÚ	predicateÚ
then_valuerý   s        rP   r6  ÚThen._nodesO  sž   € à××Ø×%Ñ%Ð%Ø‰ˆÜ%-¨d¯k©kÖ%:Ñ!ˆIØ‰|ØBKÐAX‘à"°Ð5ÜÜÜ×(Ñ(ØØØ',ñ	óŠDñ &;ô ˜$¤×%Ñ%Ð%Ð%Ø!Ÿ[™[ˆÔØ×!Ñ!Ð!rY   c                ó.   • U R                   b   eXl         g r‘   ©r0  )r  Únodess     rP   r6  r:  e  s   € à×!Ñ!Ñ)Ð)Ð)Ø"ÕrY   c                ó    • U " 5       nXl         U$ r‘   )r  )Úclsr  r¶   s      rP   r!  ÚThen._from_chainj  s   € ñ “ˆØŒØˆrY   c                óh   • U R                  U R                  5      nXl        [        UR                  6 $ r‘   )r!  r  r1  r   r6  )r  Úotherwise_valuer7  s      rP   Ú	otherwiseÚThen.otherwiser  s*   € Ø×Ñ §¡Ó,ˆØ)ŒÜT—[‘[Ð!Ð!rY   c                ó,   • [        USU R                  06$ )Nr  )r  r  )r  r  s     rP   ÚwhenÚ	Then.whenw  s   € ÜZÐ3 t§{¡{Ñ3Ð3rY   r<  )r'  útuple[ExprNode, ...])r=  rH  r'  r(  )r  r&  r'  r#   )rB  r)  r'  r   ©r  r%  r'  r  )r*  r+  r,  r-  Ú__annotations__r0  r1  Úpropertyr6  ÚsetterÚclassmethodr!  rC  rF  r.  rË   rY   rP   r   r   J  sv   ‡ Ø@Ó@Ø15€MÐ.Ó5Ø59€JÐ2Ó9àó"ó ð"ð* ‡]]ó#ó ð#ð ðØHðà	óó ðô"÷
4rY   r   c                 ó   • [        U SS06$ )u_  Start a `when-then-otherwise` expression.

Expression similar to an `if-else` statement in Python. Always initiated by a
`nw.when(<condition>).then(<value if condition>)`, and optionally followed by
chained `.when(<condition>).then(<value>)` calls.
An `.otherwise(<value if condition is false>)` can be appended at the end.
If not appended, and the condition is not `True`, `None` will be returned.

Arguments:
    predicates: Condition(s) that must be met in order to apply the subsequent
        statement. Accepts one or more boolean expressions, which are implicitly
        combined with `&`. String input is parsed as a column name.

Returns:
    A "When" object, which `.then` can be called on.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> data = {"a": [1, 2, 3], "b": [5, 10, 15]}
    >>> df_native = pd.DataFrame(data)
    >>> nw.from_native(df_native).with_columns(
    ...     nw.when(nw.col("a") < 2)
    ...     .then(5)
    ...     .when(nw.col("a") < 3)
    ...     .then(6)
    ...     .otherwise(6)
    ...     .alias("a_when")
    ... )
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |    a   b  a_when |
    | 0  1   5       5 |
    | 1  2  10       6 |
    | 2  3  15       6 |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
r  rË   )r  )r  s    rP   rF  rF  {  s   € ôP Ð& 2Ñ&Ð&rY   c                ó2   • [        S/[        U5      Q7SU 06$ )uB  Compute the bitwise AND horizontally across columns.

Arguments:
    exprs: Name(s) of the columns to use in the aggregation function. Accepts
        expression input.
    ignore_nulls: Whether to ignore nulls:

        - If `True`, null values are ignored. If there are no elements, the result
          is `True`.
        - If `False`, Kleene logic is followed. Note that this is not allowed for
          pandas with classical NumPy dtypes when null values are present.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> data = {
    ...     "a": [False, False, True, True, False, None],
    ...     "b": [False, True, True, None, None, None],
    ... }
    >>> df_native = pa.table(data)
    >>> nw.from_native(df_native).select(
    ...     "a", "b", all=nw.all_horizontal("a", "b", ignore_nulls=False)
    ... )
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |           Narwhals DataFrame            |
    |-----------------------------------------|
    |pyarrow.Table                            |
    |a: bool                                  |
    |b: bool                                  |
    |all: bool                                |
    |----                                     |
    |a: [[false,false,true,true,false,null]]  |
    |b: [[false,true,true,null,null,null]]    |
    |all: [[false,false,true,null,false,null]]|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
r  r  r  ©r  rý   s     rP   r  r  ¦  s)   € ôL $ØðÜ" 5›>òØ8Dñð rY   c           	     ó¨  • [        U 5      (       a  Sn[        U5      e[        U 5      (       a„  U (       d  U(       d  Sn[        U5      eOh[        U [        5      (       a3  [        S U R                  5        5       5      (       a  Sn[        U5      eO [        U S   5      (       a  Sn[        U5      e[        [        [        R                  SXS95      $ )u<
  Return an expression representing a literal value.

Arguments:
    value: The value to use as literal. Can be a scalar value, list, tuple, or dict.
        Lists and tuples are converted to `List` dtype, dicts to `Struct` dtype.
    dtype: The data type of the literal value. If not provided, the data type will
        be inferred by the native library. For empty lists/dicts, dtype must be
        specified explicitly.

Examples:
    Scalar literals:

    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> df_nw = nw.from_native(pa.table({"a": [1, 2]}))
    >>> df_nw.with_columns(nw.lit(3))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    | pyarrow.Table    |
    | a: int64         |
    | literal: int64   |
    | ----             |
    | a: [[1,2]]       |
    | literal: [[3,3]] |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    List literals (creates a List column):

    >>> df_nw.with_columns(nw.lit([1, 2, 3]).alias("list_col"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |     Narwhals DataFrame      |
    |-----------------------------|
    |pyarrow.Table                |
    |a: int64                     |
    |list_col: list<item: int64>  |
    |  child 0, item: int64       |
    |----                         |
    |a: [[1,2]]                   |
    |list_col: [[[1,2,3],[1,2,3]]]|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    Dict literals (creates a Struct column):

    >>> df_nw.with_columns(nw.lit({"x": 1, "y": 2}).alias("struct_col"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |          Narwhals DataFrame          |
    |--------------------------------------|
    |pyarrow.Table                         |
    |a: int64                              |
    |struct_col: struct<x: int64, y: int64>|
    |  child 0, x: int64                   |
    |  child 1, y: int64                   |
    |----                                  |
    |a: [[1,2]]                            |
    |struct_col: [                         |
    |  -- is_valid: all not null           |
    |  -- child 0 type: int64              |
    |[1,1]                                 |
    |  -- child 1 type: int64              |
    |[2,2]]                                |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
zvnumpy arrays are not supported as literal values. Consider using `with_columns` to create a new column from the array.zZCannot infer dtype for empty nested structure. Please provide an explicit dtype parameter.c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr‘   )r   )rª   Úvs     rP   r¬   Úlit.<locals>.<genexpr>  s   é € Ð@²¨AÔ$ Q×'Ð'²ùó   ‚z7Nested structures with nested values are not supported.r   Úlit)r†   rW   )r   rD   r   r’   rw   ÚanyrV   rF   r   r
   r	   ÚLITERAL)r†   rW   rL   s      rP   rV  rV  Ñ  sÃ   € ôB e×ÑðSð 	ô ˜‹oÐÜ˜×ÑÞÞØrÜ  “oÐ%ð ô ˜œt×$Ñ$ÜÑ@°·±´Ó@×@Ñ@ØOÜ)¨#Ó.Ð.ð Aô ˜u Q™x×(Ñ(ØKˆCÜ% cÓ*Ð*Ü”œ×)Ñ)¨5¸ÑKÓLÐLrY   c                ó2   • [        S/[        U5      Q7SU 06$ )uÃ  Compute the bitwise OR horizontally across columns.

Arguments:
    exprs: Name(s) of the columns to use in the aggregation function. Accepts
        expression input.
    ignore_nulls: Whether to ignore nulls:

        - If `True`, null values are ignored. If there are no elements, the result
          is `False`.
        - If `False`, Kleene logic is followed. Note that this is not allowed for
          pandas with classical NumPy dtypes when null values are present.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> data = {
    ...     "a": [False, False, True, True, False, None],
    ...     "b": [False, True, True, None, None, None],
    ... }
    >>> df_native = pl.DataFrame(data)
    >>> nw.from_native(df_native).select(
    ...     "a", "b", any=nw.any_horizontal("a", "b", ignore_nulls=False)
    ... )
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |   Narwhals DataFrame    |
    |-------------------------|
    |shape: (6, 3)            |
    |â”Œâ”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”|
    |â”‚ a     â”† b     â”† any   â”‚|
    |â”‚ ---   â”† ---   â”† ---   â”‚|
    |â”‚ bool  â”† bool  â”† bool  â”‚|
    |â•žâ•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•¡|
    |â”‚ false â”† false â”† false â”‚|
    |â”‚ false â”† true  â”† true  â”‚|
    |â”‚ true  â”† true  â”† true  â”‚|
    |â”‚ true  â”† null  â”† true  â”‚|
    |â”‚ false â”† null  â”† null  â”‚|
    |â”‚ null  â”† null  â”† null  â”‚|
    |â””â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”˜|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
Úany_horizontalr  r  rP  s     rP   rZ  rZ  '  s)   € ôV $ØðÜ" 5›>òØ8Dñð rY   c                 ó,   • [        S/[        U 5      Q76 $ )u5  Compute the mean of all values horizontally across columns.

Arguments:
    exprs: Name(s) of the columns to use in the aggregation function. Accepts
        expression input.

Examples:
    >>> import pyarrow as pa
    >>> import narwhals as nw
    >>>
    >>> data = {"a": [1, 8, 3], "b": [4, 5, None], "c": ["x", "y", "z"]}
    >>> df_native = pa.table(data)

    We define a dataframe-agnostic function that computes the horizontal mean of "a"
    and "b" columns:

    >>> nw.from_native(df_native).select(nw.mean_horizontal("a", "b"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    | pyarrow.Table    |
    | a: double        |
    | ----             |
    | a: [[2.5,6.5,3]] |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
Úmean_horizontalr  r  s    rP   r\  r\  W  s   € ô6 $Ð$5ÐG¼À»ÒGÐGrY   r®   F©rÅ   r  c               óR   • [        / [        U /5      QUQ5      n[        S/UQ7XS.6$ )u¸  Horizontally concatenate columns into a single string column.

Arguments:
    exprs: Columns to concatenate into a single string column. Accepts expression
        input. Strings are parsed as column names, other non-expression inputs are
        parsed as literals. Non-`String` columns are cast to `String`.
    *more_exprs: Additional columns to concatenate into a single string column,
        specified as positional arguments.
    separator: String that will be used to separate the values of each column.
    ignore_nulls: Ignore null values (default is `False`).
        If set to `False`, null values will be propagated and if the row contains any
        null values, the output is null.

Examples:
    >>> import pandas as pd
    >>> import narwhals as nw
    >>>
    >>> data = {
    ...     "a": [1, 2, 3],
    ...     "b": ["dogs", "cats", None],
    ...     "c": ["play", "swim", "walk"],
    ... }
    >>> df_native = pd.DataFrame(data)
    >>> (
    ...     nw.from_native(df_native).select(
    ...         nw.concat_str(
    ...             [nw.col("a") * 2, nw.col("b"), nw.col("c")], separator=" "
    ...         ).alias("full_sentence")
    ...     )
    ... )
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |   full_sentence  |
    | 0   2 dogs play  |
    | 1   4 cats swim  |
    | 2           NaN  |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
Ú
concat_strr]  )r   r   )rý   rÅ   r  Ú
more_exprsÚ
flat_exprss        rP   r_  r_  u  sA   € ôZ Ð9œ7 E 7Ó+Ð9¨jÐ9Ó:€JÜ#ØðØ!ñØ-6òð rY   c           	     óˆ  • [        / [        U /5      QUQ5      nU Vs/ s H@  n[        U[        5      (       a  M  [        U5      (       a  M,  [	        U5      (       a  M>  UPMB     nnU(       a.  S[        < SSR                  S U 5       5       3n[        U5      e[        [        [        R                  SUSS95      $ s  snf )u€  Folds the columns from left to right, keeping the first non-null value.

Arguments:
    exprs: Columns to coalesce, must be a str, nw.Expr, or nw.Series
        where strings are parsed as column names and both nw.Expr/nw.Series
        are passed through as-is. Scalar values must be wrapped in `nw.lit`.

    *more_exprs: Additional columns to coalesce, specified as positional arguments.

Raises:
    TypeError: If any of the inputs are not a str, nw.Expr, or nw.Series.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>> data = [
    ...     (1, 5, None),
    ...     (None, 6, None),
    ...     (None, None, 9),
    ...     (4, 8, 10),
    ...     (None, None, None),
    ... ]
    >>> df = pl.DataFrame(data, schema=["a", "b", "c"], orient="row")
    >>> nw.from_native(df).select(nw.coalesce("a", "b", "c", nw.lit(-1)))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |Narwhals DataFrame|
    |------------------|
    |  shape: (5, 1)   |
    |  â”Œâ”€â”€â”€â”€â”€â”         |
    |  â”‚ a   â”‚         |
    |  â”‚ --- â”‚         |
    |  â”‚ i64 â”‚         |
    |  â•žâ•â•â•â•â•â•¡         |
    |  â”‚ 1   â”‚         |
    |  â”‚ 6   â”‚         |
    |  â”‚ 9   â”‚         |
    |  â”‚ 4   â”‚         |
    |  â”‚ -1  â”‚         |
    |  â””â”€â”€â”€â”€â”€â”˜         |
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
z,All arguments to `coalesce` must be of type zJ, Expr, or Series.
Got the following invalid arguments (type, value):
    z, c              3  óN   #   • U  H  n[        [        U5      U45      v •  M     g 7fr‘   )Úreprr   ©rª   rn   s     rP   r¬   Úcoalesce.<locals>.<genexpr>ß  s    é € ÐEº9°aœt¤T¨!£W¨a L×1Ð1º9ùs   ‚#%ÚcoalesceTr4  )r   r’   rŽ   r   r   Újoinrƒ   r   r
   r	   rÿ   )rý   r`  ra  r7  Ú	non_exprsrL   s         rP   rg  rg  ¨  sÍ   € ôX Ð9œ7 E 7Ó+Ð9¨jÐ9Ó:€Jñ óâˆDÜ˜4¤×%ó 	ä)0°¯ó 	ä:CÀD¿/÷ 	Ùð ð ö
 à:¼3¹'ð Bà—Y‘YÑE¹9ÓEÓEÐFðHð 	ô
 ˜‹nÐäÜÜ× Ñ  *°JÐSWñ	
óð ùòs   žB?»B?ÁB?ÁB?c                ó†  • U R                  S5      =n[        U5      :w  a  SU S[        U5       S3n[        U5      e/ n[        U5      n[	        U R                  S5      5       HP  u  pgUS:”  a  UR                  [        U5      5        [        U5      S:”  d  M6  UR                  [        U5      5        MR     [        USS9$ )uð  Format expressions as a string.

Arguments:
    f_string: A string that with placeholders.
    args: Expression(s) that fill the placeholders.

Examples:
    >>> import duckdb
    >>> import narwhals as nw
    >>> rel = duckdb.sql("select * from values ('a', 1), ('b', 2), ('c', 3) df(a, b)")
    >>> df = nw.from_native(rel)
    >>> df.with_columns(formatted=nw.format("foo_{}_bar_{}", nw.col("a"), "b"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |       Narwhals LazyFrame        |
    |---------------------------------|
    |â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”|
    |â”‚    a    â”‚   b   â”‚  formatted  â”‚|
    |â”‚ varchar â”‚ int32 â”‚   varchar   â”‚|
    |â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¤|
    |â”‚ a       â”‚     1 â”‚ foo_a_bar_1 â”‚|
    |â”‚ b       â”‚     2 â”‚ foo_b_bar_2 â”‚|
    |â”‚ c       â”‚     3 â”‚ foo_c_bar_3 â”‚|
    |â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
z{}zFnumber of placeholders should equal the number of arguments. Expected z arguments, got r‹   r   r®   rÄ   )
Úcountrê   rD   ÚiterÚ	enumerateÚsplitÚappendÚnextrV  r_  )Úf_stringÚargsÚn_placeholdersrL   rý   ÚitÚiÚss           rP   Úformatrw  ê  sÀ   € ð4 #Ÿ.™.¨Ó.Ð.ˆ´3°t³9Ó<ØVÐWeÐVfÐfvÔwzÐ{ó  xAð  wBð  BCð  DˆÜ˜‹oÐà€EÜ	ˆd‹€BÜ˜(Ÿ.™.¨Ó.Ö/‰ˆØˆq‹5ØL‰Lœ˜b›Ô"Üˆq‹6A:ØL‰Lœ˜Q›Ö ñ	 0ô
 e rÑ*Ð*rY   c            	     óÆ   • / S [        U 5       5       QS UR                  5        5       QnU(       d  Sn[        U5      e[        [	        [
        R                  SUSS95      $ )u8  Collect columns into a struct column.

Arguments:
    *exprs: Column(s) to collect into a struct column, specified as
        positional arguments. Accepts only expression input. Strings are parsed
        as column names, other non-expression inputs are not allowed.
    **named_exprs: Additional columns to collect into the struct column,
        specified as keyword arguments. The columns will be renamed to the
        keyword used.

Examples:
    Collect all columns of a dataframe into a struct by passing `pl.all()`.

    >>> import duckdb
    >>> import narwhals as nw
    >>> rel = duckdb.sql(
    ...     "select * from values (1, 'a', True, [1, 2]), (2, 'b', False, [3]) df(int, str, bool, list)"
    ... )
    >>> df = nw.from_native(rel)
    >>> df.select(nw.struct(nw.all()).alias("my_struct"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |                         Narwhals LazyFrame                         |
    |--------------------------------------------------------------------|
    |â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”|
    |â”‚                            my_struct                             â”‚|
    |â”‚ struct("int" integer, str varchar, bool boolean, list integer[]) â”‚|
    |â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¤|
    |â”‚ {'int': 1, 'str': a, 'bool': true, 'list': [1, 2]}               â”‚|
    |â”‚ {'int': 2, 'str': b, 'bool': false, 'list': [3]}                 â”‚|
    |â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    It's possible to specify the column names directly and use named expressions:

    >>> df.select(
    ...     nw.struct("int", x=nw.col("str").str.len_chars(), q="bool").alias(
    ...         "my_struct"
    ...     )
    ... )
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |              Narwhals LazyFrame              |
    |----------------------------------------------|
    |â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”|
    |â”‚                 my_struct                  â”‚|
    |â”‚ struct("int" integer, x bigint, q boolean) â”‚|
    |â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¤|
    |â”‚ {'int': 1, 'x': 1, 'q': true}              â”‚|
    |â”‚ {'int': 2, 'x': 1, 'q': false}             â”‚|
    |â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr‘   )r   re  s     rP   r¬   Ústruct.<locals>.<genexpr>G  s   é € Ð	6¢~ !Ô
˜1×
Ð
¢~ùrU  c              3  óZ   #   • U  H!  u  p[        U5      R                  U5      v •  M#     g 7fr‘   )r   rg   )rª   Únrn   s      rP   r¬   rz  H  s(   é € Ð	GÒ3F©4¨1Ô
˜1Ó
×
#Ñ
# A×
&Ð
&Ò3Fùs   ‚)+z*expected at least 1 expression in 'struct'ÚstructTr4  )r   rK   rD   r   r
   r	   rÿ   )rý   Únamed_exprsra  rL   s       rP   r}  r}    sj   € ðhÙ	6¤w¨u¤~Ó	6ðá	G°;×3DÑ3DÔ3FÓ	Gð€Jö Ø:ˆÜ˜‹oÐäÜÜ× Ñ  (°*ÐQUñ	
óð rY   c            	     óÂ   • [        U 5       Vs/ s H  n[        U5      PM     nnU(       d  Sn[        U5      e[        [	        [
        R                  SUSS95      $ s  snf )uß  Collect columns into a list column.

Arguments:
    *exprs: Column(s) to collect into a list column, specified as
        positional arguments. Accepts only expression input. Strings are parsed
        as column names, other non-expression inputs are not allowed.

Examples:
    >>> import polars as pl
    >>> import narwhals as nw
    >>>
    >>> data = {"a": [1, 2, 3], "b": [4, 5, 6]}
    >>> df = nw.from_native(pl.DataFrame(data))
    >>> df.with_columns(nw.list("a", "b").alias("a_b"))
    â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”
    |   Narwhals DataFrame    |
    |-------------------------|
    |shape: (3, 3)            |
    |â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”|
    |â”‚ a   â”† b   â”† a_b       â”‚|
    |â”‚ --- â”† --- â”† ---       â”‚|
    |â”‚ i64 â”† i64 â”† list[i64] â”‚|
    |â•žâ•â•â•â•â•â•ªâ•â•â•â•â•â•ªâ•â•â•â•â•â•â•â•â•â•â•â•¡|
    |â”‚ 1   â”† 4   â”† [1, 4]    â”‚|
    |â”‚ 2   â”† 5   â”† [2, 5]    â”‚|
    |â”‚ 3   â”† 6   â”† [3, 6]    â”‚|
    |â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜|
    â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
z(expected at least 1 expression in 'list'ÚlistTr4  )r   r   rD   r   r
   r	   rÿ   )rý   rn   ra  rL   s       rP   Úlist_r  U  s[   € ô< 07°u¬~Ó>ª~¨!Ô" 1Ö%©~€JÐ>ÞØ8ˆÜ˜‹oÐäÜ”×%Ñ% v°ZÐTXÑYóð ùò ?s   ŽA)rK   zIterable[FrameT]r>   r0   r'  r3   r‘   )
rU   rŽ   rV   r   rW   úIntoDType | NonerS   ú&IntoBackend[EagerAllowed | PluginName]r'  zSeries[Any])
r}   zMapping[str, Any]rr   ú2IntoSchema | Mapping[str, IntoDType | None] | NonerS   z-IntoBackend[EagerAllowed | PluginName] | Nonerp   zModuleType | Noner'  úDataFrame[Any])r}   zMapping[str, Series[Any] | Any]r'  z/tuple[dict[str, Series[Any] | Any], ModuleType])r}   zSequence[Mapping[str, Any]]rr   r„  rS   rƒ  r'  r…  )r}   r9   rr   r:   rS   rƒ  r'  r…  )r“   r   r'  zTypeIs[_IntoSchema])r   r(   rS   rƒ  r'  r…  )r'  zdict[str, str])r'  r(  )
rÇ   r2   rS   rƒ  rÅ   rŽ   rÍ   r   r'  r…  )
rÇ   r2   rS   ú!IntoBackend[Backend | PluginName]rÅ   rŽ   rÍ   r   r'  úLazyFrame[Any])rÇ   r2   rS   rƒ  rÍ   r   r'  r…  )rÇ   r2   rS   r†  rÍ   r   r'  r‡  )rÚ   zstr | Iterable[str]r'  r   )râ   zint | Sequence[int]r'  r   )r'  r   )rñ   rŽ   r'  r   )rU   rŽ   rý   r5   rÍ   r   r'  r   )Úpearson)r  r5   r  r5   r  r1   r'  r   )r  r5   r  r5   r  Úintr'  r   )rý   r%  r'  r   rI  )rý   r%  r  Úboolr'  r   )r†   r8   rW   r‚  r'  r   )
rý   r%  r`  r5   rÅ   rŽ   r  rŠ  r'  r   )rý   r%  r`  r)  r'  r   )rq  rŽ   rr  r5   r'  r   )rý   úIntoExpr | Sequence[IntoExpr]r~  r5   r'  r   )rý   r‹  r'  r   )yÚ
__future__r   r    r   Úcollections.abcr   r   r   Útypingr   r   Únarwhals._expression_parsingr	   r
   r   r   r   Únarwhals._utilsr   r   r   r   r   r   r   r   r   r   rC   r   r   r   r   Únarwhals.exceptionsr   Únarwhals.exprr   Únarwhals.schemar   Únarwhals.translater   r    Útypesr!   r"   Útyping_extensionsr#   r$   Únarwhals._nativer%   r&   r'   Únarwhals._translater(   Únarwhals._typingr)   r*   r+   r,   Únarwhals.dataframer-   r.   Únarwhals.seriesr/   Únarwhals.typingr0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r;   rJ  rI   rX   rT   r|   rv   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  rV  rZ  r\  r_  rg  rw  r}  r  rË   rY   rP   Ú<module>r     sï  ðÞ "ã Û 
ß 7Ñ 7ß %÷õ ÷÷ ÷ ÷ó õ 6Ý Ý "ß 5æÝ Ý ç.çOÑOÝ2ßOÓOß7Ý&÷÷ ÷ ð A€KÓ@ð <F÷ cðR #ð'BØ
ð'Bàð'Bð ð'Bð
 4ð'Bð õ'BðZ #ðØ
ðàðð ðð
 4ðð õñ< ¨Ñ2ð BFðJð >BØ*.ñJØ
ðJà>ðJð ;ð	Jð
 (ðJð õJó 3ðJðZ"Ø
)ð"à4ô"ð  BFð>LØ
%ð>Là>ð>Lð 4ð	>Lð
 õ>LðF 15ðQØ
ðQà-ðQð 4ð	Qð
 õQôhð;Ø ð;Ø.Tð;àô;ô|ô*$ôN"ð. ñ	7Øð7ð 4ð7ð ð	7ð
 ð7ð õ7ð| ñ	8Øð8ð /ð8ð ð	8ð
 ð8ð õ8ðv7Øð7Ø$Jð7ØVYð7àô7ðtNØðNØ$EðNØQTðNàôNôbAô<Xô:Eô@/ô*7ô2ô2 ô:"ôBô:ô2öUðB 23÷ PôBGôDGô@G÷D+ñ +ô.4ˆ4ô .4ôb('ôV(öVSMôl-ô`HðB Øñ	0Ø(ð0àð0ð ð0ð ð	0ð
 
õ0ðf?Ø(ð?Ø7Rð?à	ô?ôD%+ôP@õF%rY   