Ë
    ðmxiÓ ã                  ó¤  — U d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZ d dlmZ d dl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mZ d d	lmZ d d
lmZ d dlm Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZG d dlHmIZImJZJmKZK e"�rSd dlmLZL d dlMmNZN d dlOZPd dlQZRd dlSZTd dlUmVZVmWZWmXZXmYZYmZZZm[Z[ d dl\m]Z]m^Z^m_Z_ d dl`maZa d dlbmcZcmdZdmeZemfZf d dlgmhZh d dlimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZu d dlvmwZwmxZxmyZy d dlzm{Z{m|Z|m}Z}m~Z~mZm€Z€m�Z�m‚Z‚mƒZƒm„Z„m…Z…m†Z†m‡Z‡mˆZˆm‰Z‰mŠZŠm‹Z‹ d dlŒm�Z�mŽZŽ d dl�m�Z� d dl‘m’Z’ d dl“m”Z”m•Z•m–Z–m—Z—m˜Z˜m™Z™mšZšm›Z›mœZœm�Z�mžZžmŸZŸm Z m¡Z¡m¢Z¢m£Z£m¤Z¤ e¥Z¦d e§d!<    e)d"e*eŽe#   e�e#   e’e#   f   ¬#«      Z¨ e)d$«      Z© e)d%«      Zª e)d&«      Z« e)d'd(¬#«      Z¬ eXd)«      Z­ e)d*«      Z® e)d+«      Z¯ e)d,«      Z° G d-„ d.e(«      Z± G d/„ d0e(«      Z² G d1„ d2e(«      Z³ e)d3«      Z´ e)d4d5¬6«      Zµ e)d7d5¬6«      Z¶d8Z·d e§d9<    e)d:e·¬#«      Z¸d;Z¹d e§d<<   d=Zºd e§d><    G d?„ d@e(eµ   «      Z» G dA„ dBe(e¶   «      Z¼ G dC„ dDe(«      Z½ G dE„ dFe(«      Z¾ G dG„ dHe(«      Z¿ G dI„ dJe¿e¾e(«      ZÀ G dK„ dLe¿e½e(«      ZÁ G dM„ dNe¿e(«      ZÂ G dO„ dPe«      ZÃ G dQ„ dRe.«      ZÄeÄ�jŠ                  dSeÄ�jŒ                  dTeÄ�jŽ                  dUeÄ�j�                  dVeÄ�j’                  dWeÄ�j”                  dWeÄ�j–                  dXeÄ�j˜                  dYeÄ�jš                  dZeÄ�jœ                  d[eÄ�jž                  d\iZÐd]e§d^<   eÄ�j˜                  d_eÄ�jŒ                  d`eÄ�j’                  daeÄ�j”                  dbiZÑdce§dd<   	  ede¬f«      dÍdg„«       ZÒedÎdh„«       ZÓdÏdi„ZÔdÐdj„ZÕdÑdk„ZÖdÒdl„Z×dÓdm„ZØe,	 	 	 	 	 	 dÔdn„«       ZÙe,	 	 	 	 	 	 dÕdo„«       ZÙe,	 	 	 	 	 	 dÖdp„«       ZÙe,	 	 	 	 	 	 d×dq„«       ZÙe,	 	 	 	 	 	 dØdr„«       ZÙe,	 	 	 	 	 	 dÙds„«       ZÙe,	 	 	 	 	 	 dÚdt„«       ZÙdÛdu„ZÙdÜdv„ZÚ	 	 	 	 	 	 dÝdw„ZÛdÞdx„ZÜ	 dßddyœ	 	 	 	 	 	 	 dàdz„ZÝdád{„ZÞe"r eeßd5¬|«      Zàn#d dlZe�jÂ                  d}k\  r eeßd5¬|«      Zàndâd~„Zàdãd„Zâ	 	 	 	 	 	 däd€„Zã	 	 	 	 	 	 	 	 dåd�„Zädæd‚„Zådçdƒ„Zæ	 dè	 	 	 	 	 	 	 déd„„Zç	 dè	 	 	 	 	 	 	 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•d–œ	 	 	 	 	 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  �e«       �Zd¡e§d¢<   �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 G d³„ d´«      �Z�ddµ„�Z G d¶„ d·«      �Z	 	 	 	 	 	 �dd¸„�Z	 	 	 	 �dd¹„�Z�ddº„�Zd”d»œ�dd¼„�Z G d½„ d¾e&e´   «      �Z ed¿¬f«      �ddÀ„«       �Z�ddÁ„�Z G dÂ„ dÃe»eµ   e¿e(eµ   «      �Z G dÄ„ dÅe(eµ   «      �Z G dÆ„ dÇ«      �Z�ddÈ„�Z �ddÉ„�Z!	 	 	 	 	 	 �ddÊ„�Z" G dË„ dÌe«      �Z#�e#�jH                  �Z$ �e%d«      �Z&y(  é    )ÚannotationsN)Ú
CollectionÚ	ContainerÚIterableÚIteratorÚMappingÚSequence)Útimezone)ÚEnumÚauto)ÚcacheÚ	lru_cacheÚpartialÚwraps)Ú	find_spec)Úgetattr_staticÚgetdoc)Úchain)Ú
attrgetter)Ú	token_hex)ÚTYPE_CHECKINGÚAnyÚCallableÚFinalÚGenericÚLiteralÚProtocolÚTypeVarÚUnionÚcastÚoverload)Ú
NoAutoEnum)Úissue_deprecation_warning)Úassert_neverÚ
deprecated)Úget_cudfÚget_dask_dataframeÚ
get_duckdbÚget_ibisÚ	get_modinÚ
get_pandasÚ
get_polarsÚget_pyarrowÚget_pyspark_connectÚget_pyspark_sqlÚget_sqlframeÚis_narwhals_seriesÚis_narwhals_series_boolÚis_narwhals_series_intÚis_numpy_array_1dÚis_numpy_array_1d_boolÚis_numpy_array_1d_intÚis_pandas_like_dataframeÚis_pandas_like_series)ÚColumnNotFoundErrorÚDuplicateErrorÚInvalidOperationError)ÚSet)Ú
ModuleType)ÚConcatenateÚLiteralStringÚ	ParamSpecÚSelfÚ	TypeAliasÚTypeIs)ÚCompliantExprTÚCompliantSeriesTÚNativeSeriesT_co)ÚNamespaceAccessor)ÚAccessorÚ	EvalNamesÚNativeDataFrameTÚNativeLazyFrameT©Ú	Namespace)ÚNativeArrowÚ
NativeCuDFÚ
NativeDaskÚNativeDuckDBÚ
NativeIbisÚNativeModinÚNativePandasÚNativePandasLikeÚNativePolarsÚNativePySparkÚNativePySparkConnectÚNativeSQLFrame)ÚArrowStreamExportableÚIntoArrowTableÚToNarwhalsT_co)ÚBackendÚIntoBackendÚ
_ArrowImplÚ	_CuDFImplÚ	_DaskImplÚ_DuckDBImplÚ_EagerAllowedImplÚ	_IbisImplÚ_LazyAllowedImplÚ_LazyFrameCollectImplÚ
_ModinImplÚ_PandasImplÚ_PandasLikeImplÚ_PolarsImplÚ_PySparkConnectImplÚ_PySparkImplÚ_SQLFrameImpl©Ú	DataFrameÚ	LazyFrame©ÚDType©ÚSeries)ÚCompliantDataFrameÚCompliantLazyFrameÚCompliantSeriesÚDTypesÚ
FileSourceÚIntoSeriesTÚMultiIndexSelectorÚSingleIndexSelectorÚSizedMultiBoolSelectorÚSizedMultiIndexSelectorÚSizeUnitÚSupportsNativeNamespaceÚTimeUnitÚ_1DArrayÚ_SliceIndexÚ
_SliceNameÚ
_SliceNonerB   ÚUnknownBackendNameÚFrameOrSeriesT)ÚboundÚ_T1Ú_T2Ú_T3Ú_FnzCallable[..., Any]ÚPÚRÚR1ÚR2c                  ó   — e Zd ZU ded<   y)Ú_SupportsVersionÚstrÚ__version__N©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úF/home/htdocs/ttos/venv/lib/python3.12/site-packages/narwhals/_utils.pyr’   r’   ˜   s   … ØÔr›   r’   c                  ó   — e Zd Zddd„Zy)Ú_SupportsGetNc                ó   — y ©Nrš   ©ÚselfÚinstanceÚowners      rœ   Ú__get__z_SupportsGet.__get__œ   s   � r›   r    )r£   r   r¤   ú
Any | NoneÚreturnr   )r–   r—   r˜   r¥   rš   r›   rœ   rž   rž   ›   s   „ ÝQr›   rž   c                  ó   — e Zd Zedd„«       Zy)Ú_StoresColumnsc                 ó   — y r    rš   ©r¢   s    rœ   Úcolumnsz_StoresColumns.columnsŸ   s   € Ø,/r›   N)r§   úSequence[str])r–   r—   r˜   Úpropertyr¬   rš   r›   rœ   r©   r©   ž   s   „ Ø	Ú/ó 
Ù/r›   r©   Ú_TÚ
NativeT_coT)Ú	covariantÚCompliantT_coz._FullContext | NamespaceAccessor[_FullContext]Ú_IntoContextÚ_IntoContextTz*Callable[Concatenate[_IntoContextT, P], R]Ú_Methodz Callable[Concatenate[_T, P], R2]Ú_Constructorc                  ó"   — e Zd ZdZedd„«       Zy)Ú_StoresNativez’Provides access to a native object.

    Native objects have types like:

    >>> from pandas import Series
    >>> from pyarrow import Table
    c                 ó   — y)zReturn the native object.Nrš   r«   s    rœ   Únativez_StoresNative.nativeµ   ó   € ð 	r›   N)r§   r°   )r–   r—   r˜   Ú__doc__r®   rº   rš   r›   rœ   r¸   r¸   ¬   ó   „ ñð òó ñr›   r¸   c                  ó"   — e Zd ZdZedd„«       Zy)Ú_StoresCompliantzÓProvides access to a compliant object.

    Compliant objects have types like:

    >>> from narwhals._pandas_like.series import PandasLikeSeries
    >>> from narwhals._arrow.dataframe import ArrowDataFrame
    c                 ó   — y)zReturn the compliant object.Nrš   r«   s    rœ   Ú	compliantz_StoresCompliant.compliantÄ   r»   r›   N)r§   r²   )r–   r—   r˜   r¼   r®   rÁ   rš   r›   rœ   r¿   r¿   »   r½   r›   r¿   c                  ó   — e Zd Zedd„«       Zy)Ú_StoresBackendVersionc                 ó   — y)z#Version tuple for a native package.Nrš   r«   s    rœ   Ú_backend_versionz&_StoresBackendVersion._backend_versionË   r»   r›   N©r§   útuple[int, ...])r–   r—   r˜   r®   rÅ   rš   r›   rœ   rÃ   rÃ   Ê   s   „ Øòó ñr›   rÃ   c                  ó   — e Zd ZU ded<   y)Ú_StoresVersionÚVersionÚ_versionNr•   rš   r›   rœ   rÉ   rÉ   Ñ   s   … ØÓØ,r›   rÉ   c                  ó   — e Zd ZU ded<   y)Ú_StoresImplementationÚImplementationÚ_implementationNr•   rš   r›   rœ   rÍ   rÍ   Ö   s   … Ø#Ó#ØIr›   rÍ   c                  ó   — e Zd ZdZy)Ú_LimitedContextzEProvides 2 attributes.

    - `_implementation`
    - `_version`
    N©r–   r—   r˜   r¼   rš   r›   rœ   rÑ   rÑ   Û   ó   „ òr›   rÑ   c                  ó   — e Zd ZdZy)Ú_FullContextzMProvides 2 attributes.

    - `_implementation`
    - `_backend_version`
    NrÒ   rš   r›   rœ   rÕ   rÕ   ã   rÓ   r›   rÕ   c                  ó   — e Zd ZdZdd„Zy)ÚValidateBackendVersionz=Ensure the target `Implementation` is on a supported version.c                ó8   — | j                   j                  «       }y)z½Raise if installed version below `nw._utils.MIN_VERSIONS`.

        **Only use this when moving between backends.**
        Otherwise, the validation will have taken place already.
        N)rÏ   rÅ   )r¢   Ú_s     rœ   Ú_validate_backend_versionz0ValidateBackendVersion._validate_backend_versionî   s   € ð × Ñ ×1Ñ1Ó3‰r›   N)r§   ÚNone)r–   r—   r˜   r¼   rÚ   rš   r›   rœ   r×   r×   ë   s
   „ ÙGô4r›   r×   c                  ó�   — e Zd Z e«       Z e«       Z e«       Zedd„«       Zedd„«       Z	ed	d„«       Z
ed
d„«       Zedd„«       Zy)rÊ   c                óz   — | t         j                  u rddlm} |S | t         j                  u rddlm} |S ddlm} |S )Nr   rL   )rÊ   ÚV1Únarwhals.stable.v1._namespacerM   ÚV2Únarwhals.stable.v2._namespaceÚnarwhals._namespace)r¢   ÚNamespaceV1ÚNamespaceV2rM   s       rœ   Ú	namespacezVersion.namespaceü   s5   € à”7—:‘:ÑÝNàÐØ”7—:‘:ÑÝNàÐÝ1àÐr›   c                óz   — | t         j                  u rddlm} |S | t         j                  u rddlm} |S ddlm} |S )Nr   )Údtypes)rÊ   rÞ   Únarwhals.stable.v1rç   rà   Únarwhals.stable.v2Únarwhals)r¢   Ú	dtypes_v1Ú	dtypes_v2rç   s       rœ   rç   zVersion.dtypes
  s4   € à”7—:‘:ÑÝ>àÐØ”7—:‘:ÑÝ>àÐÝ#àˆr›   c                óz   — | t         j                  u rddlm} |S | t         j                  u rddlm} |S ddlm} |S )Nr   )ro   )rÊ   rÞ   rè   ro   rà   ré   Únarwhals.dataframe)r¢   ÚDataFrameV1ÚDataFrameV2ro   s       rœ   Ú	dataframezVersion.dataframe  ó5   € à”7—:‘:ÑÝCàÐØ”7—:‘:ÑÝCàÐÝ0àÐr›   c                óz   — | t         j                  u rddlm} |S | t         j                  u rddlm} |S ddlm} |S )Nr   )rp   )rÊ   rÞ   rè   rp   rà   ré   rî   )r¢   ÚLazyFrameV1ÚLazyFrameV2rp   s       rœ   Ú	lazyframezVersion.lazyframe&  rò   r›   c                óz   — | t         j                  u rddlm} |S | t         j                  u rddlm} |S ddlm} |S )Nr   rs   )rÊ   rÞ   rè   rt   rà   ré   Únarwhals.series)r¢   ÚSeriesV1ÚSeriesV2rt   s       rœ   ÚserieszVersion.series4  s2   € à”7—:‘:ÑÝ=àˆOØ”7—:‘:ÑÝ=àˆOÝ*àˆr›   N)r§   ztype[Namespace[Any]])r§   rx   )r§   ztype[DataFrame[Any]])r§   ztype[LazyFrame[Any]])r§   ztype[Series[Any]])r–   r—   r˜   r   rÞ   rà   ÚMAINr®   rå   rç   rñ   rö   rû   rš   r›   rœ   rÊ   rÊ   ÷   sy   „ Ù	‹€BÙ	‹€BÙ‹6€Dàòó ðð òó ðð òó ðð òó ðð òó ñr›   rÊ   c                  ó&  — e Zd ZdZdZ	 dZ	 dZ	 dZ	 dZ	 dZ		 dZ
	 d	Z	 d
Z	 dZ	 dZ	 dZ	 d"d„Ze	 	 	 	 	 	 d#d„«       Zed$d„«       Ze	 	 	 	 	 	 d%d„«       Zd&d„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Z d'd„Z!d'd„Z"d(d „Z#y!))rÎ   z?Implementation of native object (pandas, Polars, PyArrow, ...).ÚpandasÚmodinÚcudfÚpyarrowÚpysparkÚpolarsÚdaskÚduckdbÚibisÚsqlframezpyspark[connect]Úunknownc                ó,   — t        | j                  «      S r    )r“   Úvaluer«   s    rœ   Ú__str__zImplementation.__str___  s   € Ü�4—:‘:‹Ðr›   c                óV  — t        «       t        j                  t        «       t        j                  t        «       t        j                  t        «       t        j                  t        «       t        j                  t        «       t        j                  t        «       t        j                  t        «       t        j                   t#        «       t        j$                  t'        «       t        j(                  t+        «       t        j,                  i}|j/                  |t        j0                  «      S )zŽInstantiate Implementation object from a native namespace module.

        Arguments:
            native_namespace: Native namespace.
        )r+   rÎ   ÚPANDASr*   ÚMODINr&   ÚCUDFr-   ÚPYARROWr/   ÚPYSPARKr,   ÚPOLARSr'   ÚDASKr(   ÚDUCKDBr)   ÚIBISr0   ÚSQLFRAMEr.   ÚPYSPARK_CONNECTÚgetÚUNKNOWN)ÚclsÚnative_namespaceÚmappings      rœ   Úfrom_native_namespacez$Implementation.from_native_namespaceb  s·   € ô ‹Lœ.×/Ñ/Ü‹Kœ×-Ñ-Ü‹Jœ×+Ñ+Ü‹Mœ>×1Ñ1ÜÓœ~×5Ñ5Ü‹Lœ.×/Ñ/ÜÓ ¤.×"5Ñ"5Ü‹Lœ.×/Ñ/Ü‹Jœ×+Ñ+Ü‹NœN×3Ñ3ÜÓ!¤>×#AÑ#Að
ˆð �{‰{Ð+¬^×-CÑ-CÓDÐDr›   c                óR   — 	  | |«      S # t         $ r t        j                  cY S w xY w)zžInstantiate Implementation object from a native namespace module.

        Arguments:
            backend_name: Name of backend, expressed as string.
        )Ú
ValueErrorrÎ   r  )r  Úbackend_names     rœ   Úfrom_stringzImplementation.from_stringz  s-   € ð	*Ù�|Ó$Ð$øÜò 	*Ü!×)Ñ)Ò)ð	*ús   ‚
 Š&¥&c                óŠ   — t        |t        «      r| j                  |«      S t        |t        «      r|S | j	                  |«      S )z¢Instantiate from native namespace module, string, or Implementation.

        Arguments:
            backend: Backend to instantiate Implementation from.
        )Ú
isinstancer“   r!  rÎ   r  )r  Úbackends     rœ   Úfrom_backendzImplementation.from_backend†  sL   € ô ˜'¤3Ô'ð �O‰O˜GÓ$ð	
ô ˜'¤>Ô2ð ð	
ð
 ×*Ñ*¨7Ó3ð	
r›   c                ó¶   — | t         j                  u rd}t        |«      ‚| j                  «        t        j                  | | j                  «      }t        |«      S )zCReturn the native namespace module corresponding to Implementation.z:Cannot return native namespace from UNKNOWN Implementation)rÎ   r  ÚAssertionErrorrÅ   Ú_IMPLEMENTATION_TO_MODULE_NAMEr  r
  Ú_import_native_namespace)r¢   ÚmsgÚmodule_names      rœ   Úto_native_namespacez"Implementation.to_native_namespace—  sM   € à”>×)Ñ)Ñ)ØNˆCÜ  Ó%Ð%à×ÑÔÜ4×8Ñ8¸¸t¿z¹zÓJˆÜ'¨Ó4Ð4r›   c                ó&   — | t         j                  u S )a7  Return whether implementation is pandas.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.implementation.is_pandas()
            True
        )rÎ   r  r«   s    rœ   Ú	is_pandaszImplementation.is_pandas¡  ó   € ð ”~×,Ñ,Ð,Ð,r›   c                ód   — | t         j                  t         j                  t         j                  hv S )aL  Return whether implementation is pandas, Modin, or cuDF.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.implementation.is_pandas_like()
            True
        )rÎ   r  r  r  r«   s    rœ   Úis_pandas_likezImplementation.is_pandas_like®  s(   € ð œ×-Ñ-¬~×/CÑ/CÄ^×EXÑEXÐYÐYÐYr›   c                ód   — | t         j                  t         j                  t         j                  hv S )aI  Return whether implementation is pyspark or sqlframe.

        Examples:
            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.implementation.is_spark_like()
            False
        )rÎ   r  r  r  r«   s    rœ   Úis_spark_likezImplementation.is_spark_like»  s1   € ð Ü×"Ñ"Ü×#Ñ#Ü×*Ñ*ð
ð 
ð 	
r›   c                ó&   — | t         j                  u S )a7  Return whether implementation is Polars.

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.implementation.is_polars()
            True
        )rÎ   r  r«   s    rœ   Ú	is_polarszImplementation.is_polarsÌ  r/  r›   c                ó&   — | t         j                  u S )a4  Return whether implementation is cuDF.

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.implementation.is_cudf()
            False
        )rÎ   r  r«   s    rœ   Úis_cudfzImplementation.is_cudfÙ  ó   € ð ”~×*Ñ*Ð*Ð*r›   c                ó&   — | t         j                  u S )a6  Return whether implementation is Modin.

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.implementation.is_modin()
            False
        )rÎ   r  r«   s    rœ   Úis_modinzImplementation.is_modinæ  s   € ð ”~×+Ñ+Ð+Ð+r›   c                ó&   — | t         j                  u S )a:  Return whether implementation is PySpark.

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.implementation.is_pyspark()
            False
        )rÎ   r  r«   s    rœ   Ú
is_pysparkzImplementation.is_pysparkó  ó   € ð ”~×-Ñ-Ð-Ð-r›   c                ó&   — | t         j                  u S )aB  Return whether implementation is PySpark.

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.implementation.is_pyspark_connect()
            False
        )rÎ   r  r«   s    rœ   Úis_pyspark_connectz!Implementation.is_pyspark_connect   s   € ð ”~×5Ñ5Ð5Ð5r›   c                ó&   — | t         j                  u S )a:  Return whether implementation is PyArrow.

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.implementation.is_pyarrow()
            False
        )rÎ   r  r«   s    rœ   Ú
is_pyarrowzImplementation.is_pyarrow  r=  r›   c                ó&   — | t         j                  u S )a4  Return whether implementation is Dask.

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.implementation.is_dask()
            False
        )rÎ   r  r«   s    rœ   Úis_daskzImplementation.is_dask  r8  r›   c                ó&   — | t         j                  u S )a8  Return whether implementation is DuckDB.

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.implementation.is_duckdb()
            False
        )rÎ   r  r«   s    rœ   Ú	is_duckdbzImplementation.is_duckdb'  r/  r›   c                ó&   — | t         j                  u S )a4  Return whether implementation is Ibis.

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.implementation.is_ibis()
            False
        )rÎ   r  r«   s    rœ   Úis_ibiszImplementation.is_ibis4  r8  r›   c                ó&   — | t         j                  u S )a<  Return whether implementation is SQLFrame.

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.implementation.is_sqlframe()
            False
        )rÎ   r  r«   s    rœ   Úis_sqlframezImplementation.is_sqlframeA  s   € ð ”~×.Ñ.Ð.Ð.r›   c                ó   — t        | «      S )zReturns backend version.©Úbackend_versionr«   s    rœ   rÅ   zImplementation._backend_versionN  s   € ä˜tÓ$Ð$r›   N©r§   r“   )r  ú
type[Self]r  r=   r§   rÎ   )r  rN  r   r“   r§   rÎ   )r  rN  r$  z)IntoBackend[Backend] | UnknownBackendNamer§   rÎ   )r§   r=   )r§   ÚboolrÆ   )$r–   r—   r˜   r¼   r  r  r  r  r  r  r  r  r  r  r  r  r  Úclassmethodr  r!  r%  r,  r.  r1  r3  r5  r7  r:  r<  r?  rA  rC  rE  rG  rI  rÅ   rš   r›   rœ   rÎ   rÎ   C  s'  „ ÙIà€FØ Ø€EØØ€DØØ€GØ!Ø€GØ!Ø€FØ Ø€DØØ€FØ Ø€DØØ€HØ"Ø(€OØ)Ø€GØ!óð ðEØðEØ+5ðEà	òEó ðEð. ò	*ó ð	*ð ð
Øð
Ø"Kð
à	ò
ó ð
ó 5ó-óZó
ó"-ó+ó,ó.ó6ó.ó+ó-ó+ó/ô%r›   rÎ   )é   rQ  é   )r   é   é   )é   é
   )é   )rR  é   )r   é   é   )iè  rS  )rQ  rQ  )é   )rR  é   r   z(Mapping[Implementation, tuple[int, ...]]ÚMIN_VERSIONSzdask.dataframezmodin.pandaszpyspark.sqlzpyspark.sql.connectzMapping[Implementation, str]r(  é   )Úmaxsizec                ó   — ddl m}  || «      S )Nr   )Úimport_module)Ú	importlibra  )r+  ra  s     rœ   r)  r)  j  s   € å'á˜Ó%Ð%r›   c               óÜ  — t        | t        «      st        | «       | t        j                  u ry| }t        j                  ||j                  «      }t        |«      }|j                  «       rdd l	}|j                  }n@|j                  «       s|j                  «       rdd l}|}n|j                  «       rdd l}|}n|}t!        |«      }|t"        |   x}	k  rd|› d|	› d|› �}
t%        |
«      ‚|S )N)r   r   r   r   zMinimum version of z supported by Narwhals is z	, found: )r#  rÎ   r$   r  r(  r  r
  r)  rI  Úsqlframe._versionrË   r<  r?  r  rC  r  Úparse_versionr]  r  )ÚimplementationÚimplr+  r  r  Úinto_versionr  r  ÚversionÚmin_versionr*  s              rœ   rL  rL  t  sß   € ä�n¤nÔ5Ü�^Ô$Øœ×/Ñ/Ñ/Øà€DÜ0×4Ñ4°T¸4¿:¹:ÓF€KÜ/°Ó<ÐØ×ÑÔÛ à×(Ñ(‰Ø	�‰Ô	˜d×5Ñ5Ô7Ûà‰Ø	�‰ŒÛà‰à'ˆÜ˜LÓ)€GØ¤¨dÑ!3Ð3�+Ò4Ø# D 6Ð)CÀKÀ=ÐPYÐZaÐYbÐcˆÜ˜‹oÐØ€Nr›   c                ób   — t        t        | «      dk(  rt        | d   «      r	| d   «      S | «      S )NrQ  r   )ÚlistÚlenÚ_is_iterable)Úargss    rœ   Úflattenrp  “  s.   € ÜœC ›I¨šN¬|¸DÀ¹GÔ/D��Q‘ÓPÐPÈ4ÓPÐPr›   c                ó8   — t        | t        t        f«      s| fS | S r    )r#  rl  Útuple)Úargs    rœ   Útupleifyrt  —  s   € Ü�cœD¤%˜=Ô)ØˆvˆØ€Jr›   c                óz  — ddl m} t        «       x}�"t        | |j                  |j                  f«      sDt        «       x}�Rt        | |j                  |j                  |j                  |j                  f«      rdt        | «      ›d�}t        |«      ‚t        | t        «      xr t        | t        t        |f«       S )Nr   rs   z(Expected Narwhals class or scalar, got: z`.

Hint: Perhaps you
- forgot a `nw.from_native` somewhere?
- used `pl.col` instead of `nw.col`?)rø   rt   r+   r#  ro   r,   ÚExprrp   Úqualified_type_nameÚ	TypeErrorr   r“   Úbytes)rs  rt   ÚpdÚplr*  s        rœ   rn  rn  �  s©   € Ý&ô ‹|Ð	ˆÐ(¬Z¸¸b¿i¹iÈÏÉÐ=VÔ-Wä‹|Ð	ˆÐ(Ü�s˜RŸY™Y¨¯©°·±¸r¿|¹|ÐLÔMð 7Ô7JÈ3Ó7OÐ6Rð S3ð 3ð 	ô ˜‹nÐä�cœ8Ó$ÒR¬Z¸¼cÄ5È&Ð=QÓ-RÐ)RÐRr›   c                ó"   — t        | t        «      S r    )r#  r   )Úvals    rœ   Úis_iteratorr~  ²  s   € Ü�cœ8Ó$Ð$r›   c                ó®   — t        | t        «      r| n| j                  }t        j                  dd|«      }t        d„ |j                  d«      D «       «      S )z•Simple version parser; split into a tuple of ints for comparison.

    Arguments:
        version: Version string, or object with one, to parse.
    z(\D?dev.*$)Ú c              3  ó\   K  — | ]$  }t        t        j                  d d|«      «      –— Œ& y­w)z\Dr€  N)ÚintÚreÚsub)Ú.0Úvs     rœ   ú	<genexpr>z parse_version.<locals>.<genexpr>Á  s"   è ø€ ÒK¨q””R—V‘V˜E 2 qÓ)×*ÑKùs   ‚*,ú.)r#  r“   r”   rƒ  r„  rr  Úsplit)ri  Úversion_strs     rœ   re  re  ¶  sH   € ô (¨´Ô5‘'¸7×;NÑ;N€KÜ—&‘&˜¨¨[Ó9€KÜÑK°K×4EÑ4EÀcÓ4JÔKÓKÐKr›   c                 ó   — y r    rš   ©Ú
obj_or_clsÚcls_or_tuples     rœ   Úisinstance_or_issubclassr�  Ä  s   € ð r›   c                 ó   — y r    rš   rŒ  s     rœ   r�  r�  Ê  ó   € ð  r›   c                 ó   — y r    rš   rŒ  s     rœ   r�  r�  Ð  s   € ð "r›   c                 ó   — y r    rš   rŒ  s     rœ   r�  r�  Ö  s   € ð +.r›   c                 ó   — y r    rš   rŒ  s     rœ   r�  r�  Ü  s   € ð %(r›   c                 ó   — y r    rš   rŒ  s     rœ   r�  r�  â  s   € ð 7:r›   c                 ó   — y r    rš   rŒ  s     rœ   r�  r�  è  s   € ð r›   c                ó–   — ddl m} t        | |«      rt        | |«      S t        | |«      xs t        | t        «      xr t	        | |«      S )Nr   rq   )Únarwhals.dtypesrr   r#  ÚtypeÚ
issubclass)r�  rŽ  rr   s      rœ   r�  r�  î  sF   € Ý%ä�*˜eÔ$Ü˜* lÓ3Ð3Ü�j ,Ó/ò Ü�:œtÓ$ÒM¬°JÀÓ)Mðr›   c                óÀ   ‡‡— ddl mŠmŠ t        ˆfd„| D «       «      st        ˆfd„| D «       «      ry d| D �cg c]  }t	        |«      ‘Œ c}› �}t        |«      ‚c c}w )Nr   rn   c              3  ó6   •K  — | ]  }t        |‰«      –— Œ y ­wr    ©r#  )r…  Úitemro   s     €rœ   r‡  z$validate_laziness.<locals>.<genexpr>û  s   øè ø€ Ò
9¨4Œ:�d˜I×&Ñ
9ùó   ƒc              3  ó6   •K  — | ]  }t        |‰«      –— Œ y ­wr    r�  )r…  rž  rp   s     €rœ   r‡  z$validate_laziness.<locals>.<genexpr>ü  s   øè ø€ Ò:¨DŒJ�t˜Y×'Ñ:ùrŸ  zGThe items to concatenate should either all be eager, or all lazy, got: )rî   ro   rp   Úallr™  rx  )Úitemsrž  r*  ro   rp   s      @@rœ   Úvalidate_lazinessr£  ø  sW   ù€ ß7ä
Ó
9°5Ô
9Ô9ÜÓ:°EÔ:Ô:àØSÐlqÖTrÐdhÔUYÐZ^ÕU_ÒTrÐSsÐ
t€CÜ
�C‹.Ðùò Uss   ¹Ac                óæ  — ddl m} ddlm} dd„}t	        d| «      }t	        d|«      }t        t        |dd«      |«      rÌt        t        |dd«      |«      rµ ||j                  j                  j                  «        ||j                  j                  j                  «       |j                  |j                  j                  |j                  j                  j                  |j                  j                  j                     «      «      S t        t        |dd«      |«      rÌt        t        |dd«      |«      rµ ||j                  j                  j                  «        ||j                  j                  j                  «       |j                  |j                  j                  |j                  j                  j                  |j                  j                  j                     «      «      S t        t        |dd«      |«      rÌt        t        |dd«      |«      rµ ||j                  j                  j                  «        ||j                  j                  j                  «       |j                  |j                  j                  |j                  j                  j                  |j                  j                  j                     «      «      S t        t        |dd«      |«      rÌt        t        |dd«      |«      rµ ||j                  j                  j                  «        ||j                  j                  j                  «       |j                  |j                  j                  |j                  j                  j                  |j                  j                  j                     «      «      S t        |«      t        |«      k7  r%d	t        |«      › d
t        |«      › �}t        |«      ‚| S )a¬  Align `lhs` to the Index of `rhs`, if they're both pandas-like.

    Arguments:
        lhs: Dataframe or Series.
        rhs: Dataframe or Series to align with.

    Notes:
        This is only really intended for backwards-compatibility purposes,
        for example if your library already aligns indices for users.
        If you're designing a new library, we highly encourage you to not
        rely on the Index.
        For non-pandas-like inputs, this only checks that `lhs` and `rhs`
        are the same length.

    Examples:
        >>> import pandas as pd
        >>> import polars as pl
        >>> import narwhals as nw
        >>> df_pd = pd.DataFrame({"a": [1, 2]}, index=[3, 4])
        >>> s_pd = pd.Series([6, 7], index=[4, 3])
        >>> df = nw.from_native(df_pd)
        >>> s = nw.from_native(s_pd, series_only=True)
        >>> nw.to_native(nw.maybe_align_index(df, s))
           a
        4  2
        3  1
    r   )ÚPandasLikeDataFrame)ÚPandasLikeSeriesr   c                ó6   — | j                   sd}t        |«      ‚y )Nz'given index doesn't have a unique index)Ú	is_uniquer  )Úindexr*  s     rœ   Ú_validate_indexz*maybe_align_index.<locals>._validate_index$  s   € Ø�ŠØ;ˆCÜ˜S“/Ð!ð r›   Ú_compliant_frameNÚ_compliant_seriesz6Expected `lhs` and `rhs` to have the same length, got z and )r©  r   r§   rÛ   )Únarwhals._pandas_like.dataframer¥  Únarwhals._pandas_like.seriesr¦  r    r#  Úgetattrr«  rº   r©  Ú_with_compliantÚ_with_nativeÚlocr¬  rm  r  )ÚlhsÚrhsr¥  r¦  rª  Úlhs_anyÚrhs_anyr*  s           rœ   Úmaybe_align_indexr·    sI  € õ< DÝ=ó"ô
 �5˜#Ó€GÜ�5˜#Ó€GÜÜ�Ð+¨TÓ2Ð4Gôä
”W˜WÐ&8¸$Ó?ÐATÔ
UÙ˜×0Ñ0×7Ñ7×=Ñ=Ô>Ù˜×0Ñ0×7Ñ7×=Ñ=Ô>Ø×&Ñ&Ø×$Ñ$×1Ñ1Ø×(Ñ(×/Ñ/×3Ñ3°G×4LÑ4L×4SÑ4S×4YÑ4YÑZóó
ð 	
ô
 Ü�Ð+¨TÓ2Ð4Gôä
”W˜WÐ&9¸4Ó@ÐBRÔ
SÙ˜×0Ñ0×7Ñ7×=Ñ=Ô>Ù˜×1Ñ1×8Ñ8×>Ñ>Ô?Ø×&Ñ&Ø×$Ñ$×1Ñ1Ø×(Ñ(×/Ñ/×3Ñ3Ø×-Ñ-×4Ñ4×:Ñ:ñóó
ð 	
ô Ü�Ð,¨dÓ3Ð5Eôä
”W˜WÐ&8¸$Ó?ÐATÔ
UÙ˜×1Ñ1×8Ñ8×>Ñ>Ô?Ù˜×0Ñ0×7Ñ7×=Ñ=Ô>Ø×&Ñ&Ø×%Ñ%×2Ñ2Ø×)Ñ)×0Ñ0×4Ñ4Ø×,Ñ,×3Ñ3×9Ñ9ñóó
ð 	
ô Ü�Ð,¨dÓ3Ð5Eôä
”W˜WÐ&9¸4Ó@ÐBRÔ
SÙ˜×1Ñ1×8Ñ8×>Ñ>Ô?Ù˜×1Ñ1×8Ñ8×>Ñ>Ô?Ø×&Ñ&Ø×%Ñ%×2Ñ2Ø×)Ñ)×0Ñ0×4Ñ4Ø×-Ñ-×4Ñ4×:Ñ:ñóó
ð 	
ô ˆ7ƒ|”s˜7“|Ò#ØFÄsÈ7Ã|ÀnÐTYÔZ]Ð^eÓZfÐYgÐhˆÜ˜‹oÐØ€Jr›   c                ó€   — t        d| «      }|j                  «       }t        |«      st        |«      r|j                  S y)a’  Get the index of a DataFrame or a Series, if it's pandas-like.

    Arguments:
        obj: Dataframe or Series.

    Notes:
        This is only really intended for backwards-compatibility purposes,
        for example if your library already aligns indices for users.
        If you're designing a new library, we highly encourage you to not
        rely on the Index.
        For non-pandas-like inputs, this returns `None`.

    Examples:
        >>> import pandas as pd
        >>> import polars as pl
        >>> import narwhals as nw
        >>> df_pd = pd.DataFrame({"a": [1, 2], "b": [4, 5]})
        >>> df = nw.from_native(df_pd)
        >>> nw.maybe_get_index(df)
        RangeIndex(start=0, stop=2, step=1)
        >>> series_pd = pd.Series([1, 2])
        >>> series = nw.from_native(series_pd, series_only=True)
        >>> nw.maybe_get_index(series)
        RangeIndex(start=0, stop=2, step=1)
    r   N)r    Ú	to_nativer7   r8   r©  )ÚobjÚobj_anyÚ
native_objs      rœ   Úmaybe_get_indexr½  _  s=   € ô4 �5˜#Ó€GØ×"Ñ"Ó$€JÜ 
Ô+Ô/DÀZÔ/PØ×ÑÐØr›   )r©  c               óV  — ddl m} t        d| «      }|j                  «       }|�|�d}t        |«      ‚|s|€d}t        |«      ‚|�.t	        |«      r|D �cg c]  } ||d¬«      ‘Œ c}n	 ||d¬«      }n|}t        |«      r9|j                  |j                  j                  |j                  |«      «      «      S t        |«      r^ddlm	}	 |rd	}t        |«      ‚ |	||| j                  j                  ¬
«      }|j                  |j                  j                  |«      «      S |S c c}w )a¯  Set the index of a DataFrame or a Series, if it's pandas-like.

    Arguments:
        obj: object for which maybe set the index (can be either a Narwhals `DataFrame`
            or `Series`).
        column_names: name or list of names of the columns to set as index.
            For dataframes, only one of `column_names` and `index` can be specified but
            not both. If `column_names` is passed and `df` is a Series, then a
            `ValueError` is raised.
        index: series or list of series to set as index.

    Raises:
        ValueError: If one of the following conditions happens

            - none of `column_names` and `index` are provided
            - both `column_names` and `index` are provided
            - `column_names` is provided and `df` is a Series

    Notes:
        This is only really intended for backwards-compatibility purposes, for example if
        your library already aligns indices for users.
        If you're designing a new library, we highly encourage you to not
        rely on the Index.

        For non-pandas-like inputs, this is a no-op.

    Examples:
        >>> import pandas as pd
        >>> import polars as pl
        >>> import narwhals as nw
        >>> df_pd = pd.DataFrame({"a": [1, 2], "b": [4, 5]})
        >>> df = nw.from_native(df_pd)
        >>> nw.to_native(nw.maybe_set_index(df, "b"))  # doctest: +NORMALIZE_WHITESPACE
           a
        b
        4  1
        5  2
    r   )r¹  r   z8Only one of `column_names` or `index` should be providedz3Either `column_names` or `index` should be providedT)Úpass_through)Ú	set_indexz/Cannot set index using column names on a Series)rf  )Únarwhals.translater¹  r    r  rn  r7   r°  r«  r±  rÀ  r8   Únarwhals._pandas_like.utilsr¬  rÏ   )
rº  Úcolumn_namesr©  r¹  Údf_anyr¼  r*  ÚidxÚkeysrÀ  s
             rœ   Úmaybe_set_indexrÇ  €  s7  € õX -ä�%˜Ó€FØ×!Ñ!Ó#€JàÐ EÐ$5ØHˆÜ˜‹oÐá˜E˜MØCˆÜ˜‹oÐàÐô ˜EÔ"ð ;@Ö@°3‰Y�s¨Ö.Ó@á˜5¨tÔ4ñ 	ð ˆä 
Ô+Ø×%Ñ%Ø×#Ñ#×0Ñ0°×1EÑ1EÀdÓ1KÓLó
ð 	
ô ˜ZÔ(Ý9áØCˆCÜ˜S“/Ð!áØØØ×0Ñ0×@Ñ@ô
ˆ
ð
 ×%Ñ% f×&>Ñ&>×&KÑ&KÈJÓ&WÓXÐXØ€Mùò1 As   ÁD&c                óÊ  — t        d| «      }|j                  «       }t        |«      rX|j                  «       }t	        ||«      r|S |j                  |j                  j                  |j                  d¬«      «      «      S t        |«      rX|j                  «       }t	        ||«      r|S |j                  |j                  j                  |j                  d¬«      «      «      S |S )aÓ  Reset the index to the default integer index of a DataFrame or a Series, if it's pandas-like.

    Arguments:
        obj: Dataframe or Series.

    Notes:
        This is only really intended for backwards-compatibility purposes,
        for example if your library already resets the index for users.
        If you're designing a new library, we highly encourage you to not
        rely on the Index.
        For non-pandas-like inputs, this is a no-op.

    Examples:
        >>> import pandas as pd
        >>> import polars as pl
        >>> import narwhals as nw
        >>> df_pd = pd.DataFrame({"a": [1, 2], "b": [4, 5]}, index=([6, 7]))
        >>> df = nw.from_native(df_pd)
        >>> nw.to_native(nw.maybe_reset_index(df))
           a  b
        0  1  4
        1  2  5
        >>> series_pd = pd.Series([1, 2])
        >>> series = nw.from_native(series_pd, series_only=True)
        >>> nw.maybe_get_index(series)
        RangeIndex(start=0, stop=2, step=1)
    r   T)Údrop)r    r¹  r7   Ú__native_namespace__Ú_has_default_indexr°  r«  r±  Úreset_indexr8   r¬  )rº  r»  r¼  r  s       rœ   Úmaybe_reset_indexrÍ  Ö  sß   € ô8 �5˜#Ó€GØ×"Ñ"Ó$€JÜ 
Ô+Ø"×7Ñ7Ó9ÐÜ˜jÐ*:Ô;ØˆNØ×&Ñ&Ø×$Ñ$×1Ñ1°*×2HÑ2HÈdÐ2HÓ2SÓTó
ð 	
ô ˜ZÔ(Ø"×7Ñ7Ó9ÐÜ˜jÐ*:Ô;ØˆNØ×&Ñ&Ø×%Ñ%×2Ñ2°:×3IÑ3IÈtÐ3IÓ3TÓUó
ð 	
ð €Nr›   )Ústrict)rR  rV  c                 ó  ‡‡— t        | «      dk  rt        | Ž S dŠdˆfd„}dˆˆfd„}t        | «      }t        t	        |«       |«       «      }t        t        t        |«      «      Št        t        |g‰¢­Ž  |«       «      S )NrT  Fc               3  ó   •K  — dŠ y ­w)NTrš   )Úfirst_stoppeds   €rœ   Ú
first_tailzzip_strict.<locals>.first_tail  s   øè ø€ à $�Øùs   ƒc               3  óx   •K  — ‰sd} t        | «      ‚t        j                  ‰«      D ]  }d} t        | «      ‚ y ­w)Nz$zip_strict: first iterable is longerz%zip_strict: first iterable is shorter)r  r   Úfrom_iterable)r*  rÙ   rÑ  Úrests     €€rœ   Úzip_tailzzip_strict.<locals>.zip_tail  sB   øè ø€ Ù$Ø@�CÜ$ S›/Ð)Ü×,Ñ,¨TÓ2ò �AØA�CÜ$ S›/Ð)ñùs   ƒ7:)r§   r   )rm  ÚzipÚiterr   Únextrl  Úmap)Ú	iterablesrÒ  rÖ  Úiterables_itÚfirstrÑ  rÕ  s        @@rœ   Ú
zip_strictrÞ    sp   ù€ ä�9‹~ Ò!Ü˜I�Ð&à!ˆMõöô   	›?ˆLÜœ$˜|Ó,©j«lÓ;ˆEÜœœD ,Ó/Ó0ˆDÜœ˜UÐ* TÒ*©H«JÓ7Ð7r›   c                ó.   — t        | |j                  «      S r    )r#  Ú
RangeIndex)rº  r  s     rœ   Ú_is_range_indexrá  -  s   € Ü�cÐ+×6Ñ6Ó7Ð7r›   c                óª   — | j                   }t        ||«      xr: |j                  dk(  xr) |j                  t	        |«      k(  xr |j
                  dk(  S )Nr   rQ  )r©  rá  ÚstartÚstoprm  Ústep)Únative_frame_or_seriesr  r©  s      rœ   rË  rË  1  sW   € ð #×(Ñ(€Eä˜Ð/Ó0ò 	Ø�K‰K˜1Ñò	à�J‰Jœ#˜e›*Ñ$ò	ð �J‰J˜!‰Oð	r›   c           	     óâ   — | j                   j                  «       s| S | j                  | j                  j	                   | j                  «       j                  |i |¤Ž«      «      }t        d|«      S )a-  Convert columns or series to the best possible dtypes using dtypes supporting ``pd.NA``, if df is pandas-like.

    Arguments:
        obj: DataFrame or Series.
        *args: Additional arguments which gets passed through.
        **kwargs: Additional arguments which gets passed through.

    Notes:
        For non-pandas-like inputs, this is a no-op.
        Also, `args` and `kwargs` just get passed down to the underlying library as-is.

    Examples:
        >>> import pandas as pd
        >>> import polars as pl
        >>> import narwhals as nw
        >>> import numpy as np
        >>> df_pd = pd.DataFrame(
        ...     {
        ...         "a": pd.Series([1, 2, 3], dtype=np.dtype("int32")),
        ...         "b": pd.Series([True, False, np.nan], dtype=np.dtype("O")),
        ...     }
        ... )
        >>> df = nw.from_native(df_pd)
        >>> nw.to_native(
        ...     nw.maybe_convert_dtypes(df)
        ... ).dtypes  # doctest: +NORMALIZE_WHITESPACE
        a             Int32
        b           boolean
        dtype: object
    r‡   )rf  r1  r°  Ú
_compliantr±  r¹  Úconvert_dtypesr    )rº  ro  ÚkwargsÚresults       rœ   Úmaybe_convert_dtypesrì  =  sg   € ðB ×Ñ×,Ñ,Ô.Øˆ
Ø× Ñ Ø�‰×#Ñ#Ð$B C§M¡M£O×$BÑ$BÀDÐ$SÈFÑ$SÓTó€Fô Ð  &Ó)Ð)r›   c                óv   — |dv r| S |dv r| dz  S |dv r| dz  S |dv r| dz  S |dv r| d	z  S d
|›�}t        |«      ‚)z¥Scale size in bytes to other size units (eg: "kb", "mb", "gb", "tb").

    Arguments:
        sz: original size in bytes
        unit: size unit to convert into
    >   Úbry  >   ÚkbÚ	kilobytesi   >   ÚmbÚ	megabytesi   >   ÚgbÚ	gigabytesi   @>   ÚtbÚ	terabytesl        z9`unit` must be one of {'b', 'kb', 'mb', 'gb', 'tb'}, got ©r  )ÚszÚunitr*  s      rœ   Úscale_bytesrú  f  ss   € ð ˆ~ÑØˆ	ØÐ"Ñ"Ø�D‰yÐØÐ"Ñ"Ø�G‰|ÐØÐ"Ñ"Ø�G‰|ÐØÐ"Ñ"Ø�G‰|ÐØGÈÀxÐ
P€CÜ
�S‹/Ðr›   c                ó  — ddl m} | j                  j                  j                  }| j                  }d}t        ||«      r;t        | j                  |j                  «      r|j                  j                  d   }|S | j                  |j                  k(  rd}|S | j                  |j                  k7  rd}|S | j                  «       }| j                  }|j                  «       r8|j                  «       dk  r%t        d|j                  «      j                   dk(  }|S |j#                  «       r!t%        |j&                  j(                  «      }|S |j+                  «       r0dd	lm}  ||j0                  «      xr |j0                  j(                  }|S )
aŒ  Return whether indices of categories are semantically meaningful.

    This is a convenience function to accessing what would otherwise be
    the `is_ordered` property from the DataFrame Interchange Protocol,
    see https://data-apis.org/dataframe-protocol/latest/API.html.

    - For Polars:
      - Enums are always ordered.
      - Categoricals are ordered if `dtype.ordering == "physical"`.
    - For pandas-like APIs:
      - Categoricals are ordered if `dtype.cat.ordered == True`.
    - For PyArrow table:
      - Categoricals are ordered if `dtype.type.ordered == True`.

    Arguments:
        series: Input Series.

    Examples:
        >>> import narwhals as nw
        >>> import pandas as pd
        >>> import polars as pl
        >>> data = ["x", "y"]
        >>>
        >>> s_pd = nw.from_native(
        ...     pd.Series(data, dtype=pd.CategoricalDtype(ordered=True)), series_only=True
        ... )
        >>> nw.is_ordered_categorical(s_pd)
        True
        >>> s_pl = nw.from_native(
        ...     pl.Series(data, dtype=pl.Categorical()), series_only=True
        ... )
        >>> nw.is_ordered_categorical(s_pl)
        False
    r   )ÚInterchangeSeriesFÚ
is_orderedT)rQ  é    zpl.CategoricalÚphysical)Úis_dictionary)Únarwhals._interchange.seriesrü  r¬  rË   rç   r#  ÚdtypeÚCategoricalrº   Údescribe_categoricalr   r¹  rf  r5  rÅ   r    Úorderingr1  rO  ÚcatÚorderedrA  Únarwhals._arrow.utilsr   r™  )rû   rü  rç   rÁ   rë  rº   rg  r   s           rœ   Úis_ordered_categoricalr	  {  sa  € õF ?à×%Ñ%×.Ñ.×5Ñ5€FØ×(Ñ(€Ià€FÜ�)Ð.Ô/´JØ�‰�f×(Ñ(ô5ð ×!Ñ!×6Ñ6°|ÑDˆð& €Mð% 
�‰˜Ÿ™Ò	$Øˆð" €Mð! 
�‰˜×+Ñ+Ò	+Øˆð €Mð ×!Ñ!Ó#ˆØ×$Ñ$ˆØ�>‰>Ô × 5Ñ 5Ó 7¸'Ò Aô Ð*¨F¯L©LÓ9×BÑBÀjÑPˆFð €Mð × Ñ Ô"Ü˜&Ÿ*™*×,Ñ,Ó-ˆFð
 €Mð	 �_‰_ÔÝ;á" 6§;¡;Ó/ÒG°F·K±K×4GÑ4GˆFØ€Mr›   c                ó<   — d}t        |d¬«       t        | ||¬«      S )Nz}Use `generate_temporary_column_name` instead. `generate_unique_token` is deprecated and it will be removed in future versionsz1.13.0©rË   )Ún_bytesr¬   Úprefix)r#   Úgenerate_temporary_column_name)r  r¬   r  r*  s       rœ   Úgenerate_unique_tokenr  ½  s(   € ð	?ð ô ˜c¨HÕ5Ü)°'À7ÐSYÔZÐZr›   c                ót   — d}	 |› t        | dz
  «      › �}||vr|S |dz  }|dkD  rd| ›d|› �}t        |«      ‚Œ6)a  Generates a unique column name that is not present in the given list of columns.

    It relies on [python secrets token_hex](https://docs.python.org/3/library/secrets.html#secrets.token_hex)
    function to return a string nbytes random bytes.

    Arguments:
        n_bytes: The number of bytes to generate for the token.
        columns: The list of columns to check for uniqueness.
        prefix: prefix with which the temporary column name should start with.

    Returns:
        A unique token that is not present in the given list of columns.

    Raises:
        AssertionError: If a unique token cannot be generated after 100 attempts.

    Examples:
        >>> import narwhals as nw
        >>> columns = ["abc", "xyz"]
        >>> nw.generate_temporary_column_name(n_bytes=8, columns=columns) not in columns
        True
        >>> temp_name = nw.generate_temporary_column_name(
        ...     n_bytes=8, columns=columns, prefix="foo"
        ... )
        >>> temp_name not in columns and temp_name.startswith("foo")
        True
    r   rQ  éd   zMInternal Error: Narwhals was not able to generate a column name with n_bytes=z and not in )r   r'  )r  r¬   r  ÚcounterÚtokenr*  s         rœ   r  r  È  sm   € ð< €GØ
Ø�(œ9 W¨q¡[Ó1Ð2Ð3ˆØ˜ÑØˆLà�1‰ˆØ�SŠ=ðØ�*˜L¨¨	ð3ð ô ! Ó%Ð%ð r›   c              ó°   — |s-t        t        | j                  «      j                  |«      «      S t        |«      }t	        || j                  ¬«      x}r|‚|S )N)Ú	available)rl  Úsetr¬   ÚintersectionÚcheck_columns_exist)ÚframeÚsubsetrÎ  Úto_dropÚerrors        rœ   Úparse_columns_to_dropr  õ  sO   € ñ Ü”C˜Ÿ™Ó&×3Ñ3°FÓ;Ó<Ð<Ü�6‹l€GÜ# G°u·}±}ÔEÐE€uÐEØˆØ€Nr›   c                óH   — t        | t        «      xr t        | t        «       S r    )r#  r	   r“   )Úsequences    rœ   Úis_sequence_but_not_strr      s   € Ü�h¤Ó)ÒK´*¸XÄsÓ2KÐ.KÐKr›   c                óB   — t        | t        «      xr | t        d «      k(  S r    )r#  Úslice©rº  s    rœ   Úis_slice_noner$    s   € Ü�cœ5Ó!Ò8 c¬U°4«[Ñ&8Ð8r›   c                óÆ   — t        | «      xr. t        | «      dkD  xr t        | d   «      xs t        | «      dk(  xs% t        | «      xs t	        | «      xs t        | «      S ©Nr   )r   rm  Úis_single_index_selectorr6   r3   Úis_compliant_series_intr#  s    rœ   Úis_sized_multi_index_selectorr)    sl   € ô
 $ CÓ(ò YÜ�c“(˜Q‘,ÒCÔ#;¸CÀ¹FÓ#CÒWÌÈSËÐUVÉò	(ô ! Ó%ò		(ô
 " #Ó&ò	(ô # 3Ó'ðr›   c                óf   — t        | «      xs% t        | «      xs t        | «      xs t        | «      S r    )r   r4   r1   Úis_compliant_seriesr#  s    rœ   Úis_sequence_liker,    s:   € ô 	  Ó$ò 	$Ü˜SÓ!ò	$ä˜cÓ"ò	$ô ˜sÓ#ð	r›   c                ó  — t        | t        «      xrx t        | j                  t        «      xs\ t        | j                  t        «      xs@ t        | j
                  t        t        f«      xr | j                  d u xr | j                  d u S r    )r#  r"  rã  r‚  rä  rå  ÚNoneTyper#  s    rœ   Úis_slice_indexr/  !  sr   € Ü�cœ5Ó!ò Ü�3—9‘9œcÓ"ò 	
Ü�c—h‘h¤Ó$ò	
ô �s—x‘x¤#¤x Ó1ò !Ø—	‘	˜TÐ!ò!à—‘˜DÐ ðr›   c                ó"   — t        | t        «      S r    )r#  Úranger#  s    rœ   Úis_ranger2  -  s   € Ü�cœ5Ó!Ð!r›   c                óZ   — t        t        | t        «      xr t        | t         «       «      S r    )rO  r#  r‚  r#  s    rœ   r'  r'  1  s#   € Ü”
˜3¤Ó$ÒB¬Z¸¼TÓ-BÐ)BÓCÐCr›   c                óL   — t        | «      xs t        | «      xs t        | «      S r    )r'  r)  r/  r#  s    rœ   Úis_index_selectorr5  5  s+   € ô 	! Ó%ò 	Ü(¨Ó-ò	ä˜#Óðr›   c                ó°   — t        | «      xr# t        | «      dkD  xr t        | d   t        «      xs% t	        | «      xs t        | «      xs t        | «      S r&  )r   rm  r#  rO  r5   r2   Úis_compliant_series_boolr#  s    rœ   Úis_boolean_selectorr8  ?  sW   € ô 
! Ó	%Ò	U¬3¨s«8°a©<Ò+T¼JÀsÈ1ÁvÌtÓ<Tò 	)Ü! #Ó&ò	)ä" 3Ó'ò	)ô $ CÓ(ð	r›   c                ó^   — t        t        | t        «      xr | xr t        | d   |«      «      S r&  )rO  r#  rl  )rº  Útps     rœ   Ú
is_list_ofr;  J  s)   € ä”
˜3¤Ó%ÒH¨#ÒH´*¸SÀ¹VÀRÓ2HÓIÐIr›   c                ó&   — t        d„ | D «       «      S )Nc              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wr    )r;  rO  )r…  Úpreds     rœ   r‡  z3predicates_contains_list_of_bool.<locals>.<genexpr>R  s   è ø€ Ò=¨$Œz˜$¤×%Ñ=ùs   ‚©Úany)Ú
predicatess    rœ   Ú predicates_contains_list_of_boolrB  O  s   € ô Ñ=°*Ô=Ó=Ð=r›   c                óx   — t        t        | «      xr% t        t        | «      d «      x}xr t	        ||«      «      S r    )rO  r   rÙ  rØ  r#  )rº  r:  rÝ  s      rœ   Úis_sequence_ofrD  U  s>   € äÜ Ó$ò 	"Üœ4 ›9 dÓ+Ð+ˆUò	"ä�u˜bÓ!óð r›   c               óL   — | €|€|}|S | �|€|  }|S | €|�	 |S d}t        |«      ‚)Nz,Cannot pass both `strict` and `pass_through`r÷  )rÎ  r¿  Úpass_through_defaultr*  s       rœ   Úvalidate_strict_and_pass_thoughrG  ^  s_   € ð €~˜,Ð.Ø+ˆð Ðð 
Ð	 Ð 4Ø!�zˆð Ðð 
ˆ˜LÐ4Øð Ðð =ˆÜ˜‹oÐr›   r€  F)Úwarn_versionÚrequiredc                ó   ‡ ‡— dˆˆ fd„}|S )a8  Decorator to transition from `native_namespace` to `backend` argument.

    Arguments:
        warn_version: Emit a deprecation warning from this version.
        required: Raise when both `native_namespace`, `backend` are `None`.

    Returns:
        Wrapped function, with `native_namespace` **removed**.
    c               ó6   •‡ — t        ‰ «      dˆ ˆˆfd„«       }|S )Nc                 óú   •— |j                  dd «      }|j                  dd «      }|�|€‰rd}t        |‰¬«       |}n2|�|�d}t        |«      ‚|€|€‰rd‰j                  › d�}t        |«      ‚||d<    ‰| i |¤ŽS )Nr$  r  z×`native_namespace` is deprecated, please use `backend` instead.

Note: `native_namespace` will remain available in `narwhals.stable.v1`.
See https://narwhals-dev.github.io/narwhals/backcompat/ for more information.
r  z0Can't pass both `native_namespace` and `backend`z `backend` must be specified in `z`.)Úpopr#   r  r–   )ro  Úkwdsr$  r  r*  ÚfnrI  rH  s        €€€rœ   Úwrapperz=deprecate_native_namespace.<locals>.decorate.<locals>.wrapper~  s©   ø€ à—h‘h˜y¨$Ó/ˆGØ#Ÿx™xÐ(:¸DÓAÐØÐ+°°Ùðjð ô
 .¨c¸LÕIØ*‘Ø!Ð-°'Ð2EØH�Ü  “oÐ%Ø!Ð)¨g¨oÁ(Ø8¸¿¹¸ÀRÐH�Ü  “oÐ%Ø%ˆD�‰OÙ�tÐ$˜tÑ$Ð$r›   )ro  úP.argsrN  úP.kwargsr§   rŽ   )r   )rO  rP  rI  rH  s   ` €€rœ   Údecoratez,deprecate_native_namespace.<locals>.decorate}  s    ù€ Ü	ˆr‹ö	%ó 
ð	%ð* ˆr›   )rO  úCallable[P, R]r§   rT  rš   )rH  rI  rS  s   `` rœ   Údeprecate_native_namespacerU  p  s   ù€ öð2 €Or›   c                óâ   — t        | t        d¬«       t        |t        t        d «      d¬«       | dk  rd}t        |«      ‚|�(|dk  rd}t        |«      ‚|| kD  rd}t	        |«      ‚| |fS | }| |fS )NÚwindow_size©Ú
param_nameÚmin_samplesrQ  z+window_size must be greater or equal than 1z+min_samples must be greater or equal than 1z6`min_samples` must be less or equal than `window_size`)Úensure_typer‚  r™  r  r;   )rW  rZ  r*  s      rœ   Ú_validate_rolling_argumentsr\  ™  s‹   € ô �œS¨]Õ;Ü�œS¤$ t£*¸ÕGà�Q‚Ø;ˆÜ˜‹oÐàÐØ˜Š?Ø?ˆCÜ˜S“/Ð!à˜Ò$ØJˆCÜ'¨Ó,Ð,ð ˜Ð#Ð#ð "ˆà˜Ð#Ð#r›   c           
     ó¼  — 	 t        j                  «       j                  }|j                  «       j                  «       }t        d„ |D «       «      }|dz   |k  r§t        |t        | «      «      }dd|z  › d�}|t        | «      z
  }|dd	|dz  z  › | › d	|dz  |dz  z   z  › d
�z  }|dd|z  › d
�z  }||z
  dz  }||z
  dz  ||z
  dz  z   }	|D ]$  }
|dd	|z  › |
› d	|	|z   t        |
«      z
  z  › d
�z  }Œ& |dd|z  › d�z  }|S dt        | «      z
  }dd› dd	|dz  z  › | › d	|dz  |dz  z   z  › dd› d�	S # t        $ r# t	        t        j
                  dd«      «      }Y �Œ:w xY w)NÚCOLUMNSéP   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr    )rm  )r…  Úlines     rœ   r‡  z generate_repr.<locals>.<genexpr>·  s   è ø€ Ò>¨œ3˜tŸ9Ñ>ùó   ‚rT  u   â”Œu   â”€u   â”�
ú|ú z|
ú-u   â””u   â”˜é'   uu   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u   â”�
|u/   |
| Use `.to_native` to see native output |
â””)
ÚosÚget_terminal_sizer¬   ÚOSErrorr‚  ÚgetenvÚ
expandtabsÚ
splitlinesÚmaxrm  )ÚheaderÚnative_reprÚterminal_widthÚnative_linesÚmax_native_widthÚlengthÚoutputÚheader_extraÚstart_extraÚ	end_extrara  Údiffs               rœ   Úgenerate_reprry  ±  sõ  € ð7Ü×-Ñ-Ó/×7Ñ7ˆð ×)Ñ)Ó+×6Ñ6Ó8€LÜÑ>°Ô>Ó>Ðà˜!Ñ˜~Ò-ÜÐ%¤s¨6£{Ó3ˆØ�u˜v‘~Ð& eÐ,ˆØ¤ F£Ñ+ˆØ�A�c˜\¨QÑ.Ñ/Ð0°°¸ÀÐPQÑ@QÐT`ÐcdÑTdÑ@dÑ9eÐ8fÐfiÐjÑjˆØ�A�c˜V‘nÐ% SÐ)Ñ)ˆØÐ 0Ñ0°QÑ6ˆØÐ.Ñ.°1Ñ4¸ÐAQÑ8QÐUVÑ7VÑVˆ	Ø ò 	kˆDØ˜˜# Ñ-Ð.¨t¨f°S¸IÐHXÑ<XÔ[^Ð_cÓ[dÑ<dÑ5eÐ4fÐfiÐjÑj‰Fð	kà�C˜ ™Ð' sÐ+Ñ+ˆØˆà”�F“Ñ€Dà
ˆlˆ^ð Ø�4˜1‘9ÑÐ˜v˜h s¨d°a©i¸$À¹(Ñ.BÑ'CÐ&Dð E9àˆ,�cð	ðøô' ò 7ÜœRŸY™Y y°"Ó5Ó6‹ð7ús   ‚D/ Ä/(EÅEc              óh   — t        | «      j                  |«      x}rt        j                  ||«      S y r    )r  Ú
differencer9   Ú'from_missing_and_available_column_names)r  r  Úmissings      rœ   r  r  Ï  s;   € ô �f“+×(Ñ(¨Ó3Ð3€wÐ3Ü"×JÑJØ�Yó
ð 	
ð r›   c                ó*  — t        | «      t        t        | «      «      k7  rmddlm}  || «      }|j	                  «       D ��ci c]  \  }}|dkD  sŒ||“Œ }}}dj                  d„ |j	                  «       D «       «      }d|› �}t        |«      ‚y c c}}w )Nr   )ÚCounterrQ  r€  c              3  ó4   K  — | ]  \  }}d |› d|› d�–— Œ y­w)z
- 'z' z timesNrš   )r…  Úkr†  s      rœ   r‡  z0check_column_names_are_unique.<locals>.<genexpr>ß  s#   è ø€ ÒL±°°A˜˜a˜S  1 # VÔ,ÑLùs   ‚z"Expected unique column names, got:)rm  r  Úcollectionsr  r¢  Újoinr:   )r¬   r  r  r�  r†  Ú
duplicatesr*  s          rœ   Úcheck_column_names_are_uniquer…  Ù  sŠ   € Ü
ˆ7ƒ|”sœ3˜w›<Ó(Ò(Ý'á˜'Ó"ˆØ'.§}¡}£×@™t˜q !¸!¸a»%�a˜‘dÐ@ˆ
Ñ@Ø�g‰gÑL¸×9IÑ9IÓ9KÔLÓLˆØ2°3°%Ð8ˆÜ˜SÓ!Ð!ð )ùó As   ÁBÁBc                óä   — | €h d£nt        | t        «      r| hn
t        | «      }|€d hn>t        |t        t        f«      rt        |«      hn|D �ch c]  }|�t        |«      nd ’Œ c}}||fS c c}w )N>   ÚsÚmsÚnsÚus)r#  r“   r  r
   )Ú	time_unitÚ	time_zoneÚ
time_unitsÚtzÚ
time_zoness        rœ   Ú_parse_time_unit_and_time_zoner�  ä  sŒ   € ð Ðó 	 ô �i¤Ô%ð ‰[ä�‹^ð ð Ðð 
‰ô �i¤#¤x Ô1ô �)‹nÑà<EÖF°b˜˜Œc�"Œg¨TÑ1ÒFð ð �zÐ!Ð!ùò Gs   ÁA-c                óš   — t        | |j                  «      xr4 | j                  |v xr$ | j                  |v xs d|v xr | j                  d uS )NÚ*)r#  ÚDatetimer‹  rŒ  )r  rç   r�  r�  s       rœ   Ú%dtype_matches_time_unit_and_time_zoner”  ù  sW   € ô 	�5˜&Ÿ/™/Ó*ò 	
Ø�_‰_ 
Ð*ò	
ð �O‰O˜zÐ)ò CØ�zÐ!ÒA e§o¡o¸TÐ&Aðr›   c               ó   — | j                   S r    ©r¬   )r  s    rœ   Úget_column_namesr—    s   € Ø�=‰=Ðr›   c                óJ   — | j                   D �cg c]	  }||vsŒ|‘Œ c}S c c}w r    r–  )r  ÚnamesÚcol_names      rœ   Úexclude_column_namesr›  
  s!   € Ø%*§]¡]ÖL˜°hÀeÒ6KŠHÒLÐLùÒLs   �	 ™ c               ó   ‡ — dˆ fd„}|S )Nc               ó   •— ‰S r    rš   )Ú_framer™  s    €rœ   rO  z$passthrough_column_names.<locals>.fn  s   ø€ Øˆr›   )rž  r   r§   r­   rš   )r™  rO  s   ` rœ   Úpassthrough_column_namesrŸ    s   ø€ õð €Ir›   r   Ú	_SENTINELc                ó0   — t        | |t        «      t        uS r    )r   r   )rº  Úattrs     rœ   Ú_hasattr_staticr£    s   € Ü˜#˜t¤YÓ/´yÐ@Ð@r›   c                ó   — t        | d«      S )NÚ__narwhals_dataframe__©r£  r#  s    rœ   Úis_compliant_dataframer§    s   € ô ˜3Ð 8Ó9Ð9r›   c                ó   — t        | d«      S )NÚ__narwhals_lazyframe__r¦  r#  s    rœ   Úis_compliant_lazyframerª  '  s   € ô ˜3Ð 8Ó9Ð9r›   c                ó   — t        | d«      S )NÚ__narwhals_series__r¦  r#  s    rœ   r+  r+  -  s   € ô ˜3Ð 5Ó6Ð6r›   c                óP   — t        | «      xr | j                  j                  «       S r    )r+  r  Ú
is_integerr#  s    rœ   r(  r(  3  ó!   € ô ˜sÓ#Ò>¨¯	©	×(<Ñ(<Ó(>Ð>r›   c                óP   — t        | «      xr | j                  j                  «       S r    )r+  r  Ú
is_booleanr#  s    rœ   r7  r7  9  r¯  r›   c                ó6   — t        | d«      xr t        | d«      S )NrÁ   Ú	_accessorr¦  r#  s    rœ   Ú_is_namespace_accessorr´  ?  s   € ô ˜3 Ó,ÒR´ÀÀkÓ1RÐRr›   c               ó    — | t         j                  t         j                  t         j                  t         j                  t         j
                  hv S )z.Return True if `impl` allows eager operations.)rÎ   r  r  r  r  r  ©rg  s    rœ   Úis_eager_allowedr·  I  sA   € àÜ×ÑÜ×ÑÜ×ÑÜ×ÑÜ×Ñðð ð r›   c               ód   — | t         j                  t         j                  t         j                  hv S )z4Return True if `LazyFrame.collect(impl)` is allowed.)rÎ   r  r  r  r¶  s    rœ   Úcan_lazyframe_collectr¹  T  s&   € à”N×)Ñ)¬>×+@Ñ+@Ä.×BXÑBXÐYÐYÐYr›   c               óÜ   — | t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  hv S )z1Return True if `DataFrame.lazy(impl)` is allowed.)rÎ   r  r  r  r  r  r  r  r¶  s    rœ   Úis_lazy_allowedr»  Y  sS   € àÜ×ÑÜ×ÑÜ×ÑÜ×ÑÜ×ÑÜ×&Ñ&Ü×Ñðð ð r›   c                ó   — t        | d«      S )NrÊ  r¦  r#  s    rœ   Úhas_native_namespacer½  f  s   € Ü˜3Ð 6Ó7Ð7r›   c                ó   — t        | d«      S )NÚ__arrow_c_stream__r¦  r#  s    rœ   Úsupports_arrow_c_streamrÀ  j  s   € Ü˜3Ð 4Ó5Ð5r›   c                óH   ‡ ‡— ˆ ˆfd„|D «       }t        t        ||«      «      S )aO  Remap join keys to avoid collisions.

    If left keys collide with the right keys, append the suffix.
    If there's no collision, let the right keys be.

    Arguments:
        left_on: Left keys.
        right_on: Right keys.
        suffix: Suffix to append to right keys.

    Returns:
        A map of old to new right keys.
    c              3  ó6   •K  — | ]  }|‰v r|› ‰› �n|–— Œ y ­wr    rš   )r…  ÚkeyÚleft_onÚsuffixs     €€rœ   r‡  z(_remap_full_join_keys.<locals>.<genexpr>~  s*   øè ø€ ò Ø8;˜C 7™Nˆ3ˆ%�ˆxÑ°Ó3ñùrŸ  )Údictr×  )rÄ  Úright_onrÅ  Úright_keys_suffixeds   ` ` rœ   Ú_remap_full_join_keysrÉ  n  s(   ù€ ô Ø?GôÐô ”�HÐ1Ó2Ó3Ð3r›   c               óø   — t        d«      rV|j                  j                  j                  d«      j                  }|j
                  j                  | |¬«      j                  S dt        | «      ›d�}t        |«      ‚)z´Guards `ArrowDataFrame.from_arrow` w/ safer imports.

    Arguments:
        data: Object which implements `__arrow_c_stream__`.
        context: Initialized compliant object.
    r  )ÚcontextzB'pyarrow>=14.0.0' is required for `from_arrow` for object of type rˆ  )
r   rË   rå   r%  rÁ   Ú
_dataframeÚ
from_arrowrº   rw  ÚModuleNotFoundError)ÚdatarË  r‰  r*  s       rœ   Ú_into_arrow_tablerÐ  „  sp   € ô �ÔØ×Ñ×'Ñ'×4Ñ4°YÓ?×IÑIˆØ�}‰}×'Ñ'¨°bÐ'Ó9×@Ñ@Ð@ØNÔObÐcgÓOhÐNkÐklÐ
m€CÜ
˜cÓ
"Ð"r›   c               ó   — | S )aã  Visual-only marker for unstable functionality.

    Arguments:
        fn: Function to decorate.

    Returns:
        Decorated function (unchanged).

    Examples:
        >>> from narwhals._utils import unstable
        >>> @unstable
        ... def a_work_in_progress_feature(*args):
        ...     return args
        >>>
        >>> a_work_in_progress_feature.__name__
        'a_work_in_progress_feature'
        >>> a_work_in_progress_feature(1, 2, 3)
        (1, 2, 3)
    rš   )rO  s    rœ   ÚunstablerÒ  ”  s	   € ð( €Ir›   c                ó.   ‡ — t        ˆ fd„dD «       «       S )a¹  Determines if a datetime format string is 'naive', i.e., does not include timezone information.

    A format is considered naive if it does not contain any of the following

    - '%s': Unix timestamp
    - '%z': UTC offset
    - 'Z' : UTC timezone designator

    Arguments:
        format: The datetime format string to check.

    Returns:
        bool: True if the format is naive (does not include timezone info), False otherwise.
    c              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­wr    rš   )r…  ÚxÚformats     €rœ   r‡  z#_is_naive_format.<locals>.<genexpr>º  s   øè ø€ Ò: 1�1˜”;Ñ:ùs   ƒ)z%sz%zÚZr?  )rÖ  s   `rœ   Ú_is_naive_formatrØ  «  s   ø€ ô Ó:Ð(9Ô:Ó:Ð:Ð:r›   c                  óZ   — e Zd ZdZd	d
d„Zdd„Zdd„Z	 d		 	 	 	 	 dd„Zdd„Ze	dd„«       Z
y)Únot_implementeda¾  Mark some functionality as unsupported.

    Arguments:
        alias: optional name used instead of the data model hook [`__set_name__`].

    Returns:
        An exception-raising [descriptor].

    Notes:
        - Attribute/method name *doesn't* need to be declared twice
        - Allows different behavior when looked up on the class vs instance
        - Allows us to use `isinstance(...)` instead of monkeypatching an attribute to the function

    Examples:
        >>> from narwhals._utils import not_implemented
        >>> class Thing:
        ...     def totally_ready(self) -> str:
        ...         return "I'm ready!"
        ...
        ...     not_ready_yet = not_implemented()
        >>>
        >>> thing = Thing()
        >>> thing.totally_ready()
        "I'm ready!"
        >>> thing.not_ready_yet()
        Traceback (most recent call last):
            ...
        NotImplementedError: 'not_ready_yet' is not implemented for: 'Thing'.
        ...
        >>> isinstance(Thing.not_ready_yet, not_implemented)
        True

    [`__set_name__`]: https://docs.python.org/3/reference/datamodel.html#object.__set_name__
    [descriptor]: https://docs.python.org/3/howto/descriptor.html
    Nc               ó   — || _         y r    )Ú_alias)r¢   Úaliass     rœ   Ú__init__znot_implemented.__init__â  s   € ð #(ˆ�r›   c                óf   — dt        | «      j                  › d| j                  › d| j                  › �S )Nú<z>: rˆ  )r™  r–   Ú_name_ownerÚ_namer«   s    rœ   Ú__repr__znot_implemented.__repr__ç  s1   € Ø”4˜“:×&Ñ&Ð' s¨4×+;Ñ+;Ð*<¸A¸d¿j¹j¸\ÐJÐJr›   c                óP   — |j                   | _        | j                  xs || _        y r    )r–   rá  rÜ  râ  ©r¢   r¤   Únames      rœ   Ú__set_name__znot_implemented.__set_name__ê  s   € à %§¡ˆÔØŸ+™+Ò-¨ˆ�
r›   c               óÂ   — |€| S t        |dt        j                  «      }|t        j                  urt        |«      }n| j                  }t        | j                  |«       y )NrÏ   )r¯  rÎ   r  Úreprrá  Ú_raise_not_implemented_errorrâ  )r¢   r£   r¤   rf  Úwhos        rœ   r¥   znot_implemented.__get__ï  s\   € ð Ðð ˆKô ! Ð+<¼n×>TÑ>TÓUˆØ¤×!7Ñ!7Ñ7Ü�~Ó&‰Cà×"Ñ"ˆCÜ$ T§Z¡Z°Ô5Ør›   c                ó$   — | j                  d«      S )NÚraise)r¥   )r¢   ro  rN  s      rœ   Ú__call__znot_implemented.__call__  s   € ð �|‰|˜GÓ$Ð$r›   c               ó2   —  | «       } t        |«      |«      S )zÛAlt constructor, wraps with `@deprecated`.

        Arguments:
            message: **Static-only** deprecation message, emitted in an IDE.

        [descriptor]: https://docs.python.org/3/howto/descriptor.html
        )r%   )r  Úmessagerº  s      rœ   r%   znot_implemented.deprecated  s   € ñ ‹eˆØ"Œz˜'Ó" 3Ó'Ð'r›   r    )rÝ  z
str | Noner§   rÛ   rM  )r¤   útype[_T]ræ  r“   r§   rÛ   )r£   z_T | Literal['raise'] | Noner¤   ztype[_T] | Noner§   r   )ro  r   rN  r   r§   r   )rð  r?   r§   rA   )r–   r—   r˜   r¼   rÞ  rã  rç  r¥   rî  rP  r%   rš   r›   rœ   rÚ  rÚ  ½  sU   „ ñ"ôH(ó
Kó.ð PTðØ4ðØ=Lðà	óó$%ð
 ò	(ó ñ	(r›   rÚ  c               ó(   — | ›d|›d�}t        |«      ‚)Nz is not implemented for: z†.

If you would like to see this functionality in `narwhals`, please open an issue at: https://github.com/narwhals-dev/narwhals/issues)ÚNotImplementedError)Úwhatrë  r*  s      rœ   rê  rê    s,   € àˆ(Ð+¨C¨7ð 3Sð 	Sð ô
 ˜cÓ
"Ð"r›   c                  ó€   — e Zd ZU dZded<   ded<   ded<   	 eddd„«       Zedd„«       Zdd	„Z	dd
„Z
dd„Z	 	 	 	 dd„Zy)Úrequiresa#  Method decorator for raising under certain constraints.

    Attributes:
        _min_version: Minimum backend version.
        _hint: Optional suggested alternative.

    Examples:
        >>> from narwhals._utils import requires, Implementation
        >>> class SomeBackend:
        ...     _implementation = Implementation.PYARROW
        ...     _backend_version = 20, 0, 0
        ...
        ...     @requires.backend_version((9000, 0, 0))
        ...     def really_complex_feature(self) -> str:
        ...         return "hello"
        >>> backend = SomeBackend()
        >>> backend.really_complex_feature()
        Traceback (most recent call last):
            ...
        NotImplementedError: `really_complex_feature` is only available in 'pyarrow>=9000.0.0', found version '20.0.0'.
    rÇ   Ú_min_versionr“   Ú_hintÚ_wrapped_namec               óD   — | j                  | «      }||_        ||_        |S )z½Method decorator for raising below a minimum `_backend_version`.

        Arguments:
            minimum: Minimum backend version.
            hint: Optional suggested alternative.
        )Ú__new__r÷  rø  )r  ÚminimumÚhintrº  s       rœ   rL  zrequires.backend_version;  s&   € ð �k‰k˜#ÓˆØ"ˆÔØˆŒ	Øˆ
r›   c               ó2   — dj                  d„ | D «       «      S )Nrˆ  c              3  ó"   K  — | ]  }|› –— Œ	 y ­wr    rš   )r…  Úds     rœ   r‡  z,requires._unparse_version.<locals>.<genexpr>J  s   è ø€ Ò8 1˜1˜#›Ñ8ùs   ‚)rƒ  rK  s    rœ   Ú_unparse_versionzrequires._unparse_versionH  s   € à�x‰xÑ8¨Ô8Ó8Ð8r›   c               óN   — d| j                   vr|› d| j                   › �| _         y y ©Nrˆ  )rù  )r¢   r  s     rœ   Ú_qualify_accessor_namezrequires._qualify_accessor_nameL  s/   € à�d×(Ñ(Ñ(Ø$* 8¨1¨T×-?Ñ-?Ð,@Ð!AˆDÕð )r›   c               ó®   — t        |«      r(| j                  |j                  «       |j                  }n|}|j                  t        |j                  «      fS r    )r´  r  r³  rÁ   rÅ   r“   rÏ   )r¢   r£   rÁ   s      rœ   Ú_unwrap_contextzrequires._unwrap_contextQ  sJ   € Ü! (Ô+Ø×'Ñ'¨×(:Ñ(:Ô;Ø ×*Ñ*‰Ià ˆIØ×)Ñ)¬3¨y×/HÑ/HÓ+IÐIÐIr›   c          	     ó$  — | j                  |«      \  }}|| j                  k\  ry | j                  | j                  «      }| j                  |«      }d| j                  › d|› d|› d|›d�	}| j                  r|› d| j                  › �}t        |«      ‚)Nú`z` is only available in 'z>=z', found version rˆ  ú
)r  r÷  r  rù  rø  ró  )r¢   r£   ri  r$  rü  Úfoundr*  s          rœ   Ú_ensure_versionzrequires._ensure_versionY  s    € Ø×/Ñ/°Ó9Ñˆ�Ø�d×'Ñ'Ò'ØØ×'Ñ'¨×(9Ñ(9Ó:ˆØ×%Ñ% gÓ.ˆØ�$×$Ñ$Ð%Ð%=¸g¸YÀbÈÈ	ÐQbÐchÐbkÐklÐmˆØ�:Š:Ø�E˜˜DŸJ™J˜<Ð(ˆCÜ! #Ó&Ð&r›   c               óV   ‡ ‡— ‰j                   ‰ _        t        ‰«      dˆˆ fd„«       }|S )Nc                ó>   •— ‰j                  | «        ‰| g|¢­i |¤ŽS r    )r  )r£   ro  rN  rO  r¢   s      €€rœ   rP  z"requires.__call__.<locals>.wrapperi  s&   ø€ à× Ñ  Ô*Ù�hÐ. Ò.¨Ñ.Ð.r›   )r£   r´   ro  rQ  rN  rR  r§   rŽ   )r–   rù  r   )r¢   rO  rP  s   `` rœ   rî  zrequires.__call__d  s.   ù€ ð  Ÿ[™[ˆÔä	ˆr‹õ	/ó 
ð	/ð
 ˆr›   N)r€  )rý  r“   rü  rÇ   r§   rA   )rL  rÇ   r§   r“   )r  rH   r§   rÛ   )r£   r³   r§   ztuple[tuple[int, ...], str])r£   r³   r§   rÛ   )rO  ú_Method[_IntoContextT, P, R]r§   r  )r–   r—   r˜   r¼   r™   rP  rL  Ústaticmethodr  r  r  r  rî  rš   r›   rœ   rö  rö    sm   … ñð, "Ó!ØƒJØÓðð
 ó
ó ð
ð ò9ó ð9óBó
Jó	'ðØ.ðà	%ôr›   rö  c                óÎ   — | j                   �|j                  | j                   «      nd }| j                  �|j                  | j                  «      dz   nd }| j                  }|||fS )NrQ  )rã  r©  rä  rå  )Ú	str_slicer¬   rã  rä  rå  s        rœ   Úconvert_str_slice_to_int_slicer  r  sZ   € ð /8¯o©oÐ.IˆG�M‰M˜)Ÿ/™/Ô*Èt€EØ09·±Ð0Jˆ7�=‰=˜Ÿ™Ó(¨1Ò,ÐPT€DØ�>‰>€DØ�4˜ÐÐr›   c               ó   ‡ — dˆ fd„}|S )zÍSteal the class-level docstring from parent and attach to child `__init__`.

    Returns:
        Decorated constructor.

    Notes:
        - Passes static typing (mostly)
        - Passes at runtime
    c               óÔ   •— | j                   dk(  r+t        t        ‰«      t        «      rt        ‰«      | _        | S dt
        j                   › d| j                  ›d‰›�}t        |«      ‚)NrÞ  z`@zL` is only allowed to decorate an `__init__` with a class-level doc.
Method: z	
Parent: )r–   rš  r™  r   r¼   Úinherit_docr˜   rx  )Ú
init_childr*  Ú	tp_parents     €rœ   rS  zinherit_doc.<locals>.decorateˆ  sp   ø€ Ø×Ñ *Ò,´¼DÀ»OÌTÔ1RÜ!'¨	Ó!2ˆJÔØÐà”×%Ñ%Ð&ð 'Ø!×.Ñ.Ð1ð 2Ø �mð%ð 	ô
 ˜‹nÐr›   )r  ú_Constructor[_T, P, R2]r§   r  rš   )r  rS  s   ` rœ   r  r  {  s   ø€ õ	ð €Or›   c               ó¶   — t        | t        «      r| n
t        | «      }|j                  dk7  r|j                  nd}|› d|j                  › �j	                  d«      S )NÚbuiltinsr€  rˆ  )r#  r™  r—   r–   Úlstrip)rº  r:  Úmodules      rœ   rw  rw  –  sL   € Ü˜3¤Ô%‰¬4°«9€BØ Ÿm™m¨zÒ9ˆR�]Š]¸r€FØˆX�Q�r—{‘{�mÐ$×+Ñ+¨CÓ0Ð0r›   rX  c              ó:  — t        | |«      s�dj                  d„ |D «       «      }d|›dt        | «      ›�}|rYd}t        | «      }t	        |«      dkD  rt        | «      › d�}|› |› d�}d	t	        |«      z  d
t	        |«      z  z   }|› d|› |› d|› �}t        |«      ‚y)aÙ  Validate that an object is an instance of one or more specified types.

    Parameters:
        obj: The object to validate.
        *valid_types: One or more valid types that `obj` is expected to match.
        param_name: The name of the parameter being validated.
            Used to improve error message clarity.

    Raises:
        TypeError: If `obj` is not an instance of any of the provided `valid_types`.

    Examples:
        >>> from narwhals._utils import ensure_type
        >>> ensure_type(42, int, float)
        >>> ensure_type("hello", str)

        >>> ensure_type("hello", int, param_name="test")
        Traceback (most recent call last):
            ...
        TypeError: Expected 'int', got: 'str'
            test='hello'
                 ^^^^^^^
        >>> import polars as pl
        >>> import pandas as pd
        >>> df = pl.DataFrame([[1], [2], [3], [4], [5]], schema=[*"abcde"])
        >>> ensure_type(df, pd.DataFrame, param_name="df")
        Traceback (most recent call last):
            ...
        TypeError: Expected 'pandas.core.frame.DataFrame', got: 'polars.dataframe.frame.DataFrame'
            df=polars.dataframe.frame.DataFrame(...)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    z | c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr    )rw  )r…  r:  s     rœ   r‡  zensure_type.<locals>.<genexpr>¾  s   è ø€ ÒL¸"Ô1°"×5ÑLùrb  z	Expected z, got: z    é(   z(...)ú=rd  ú^r	  N)r#  rƒ  rw  ré  rm  rx  )	rº  rY  Úvalid_typesÚtp_namesr*  Úleft_padr}  ÚassignÚ	underlines	            rœ   r[  r[  œ  s¾   € ôB �c˜;Ô'Ø—:‘:ÑLÀÔLÓLˆØ˜(˜ WÔ-@ÀÓ-EÐ,HÐIˆÙØˆHÜ�s“)ˆCÜ�3‹x˜"Š}Ü,¨SÓ1Ð2°%Ð8�Ø �z * ¨QÐ/ˆFØœs 6›{Ñ*¨s´S¸³X©~Ñ>ˆIØ�E˜˜F˜8 C 5¨¨9¨+Ð6ˆCÜ˜‹nÐð (r›   c                  ó(   — e Zd ZdZdd„Zdd„Zdd„Zy)	Ú_DeferredIterablezLStore a callable producing an iterable to defer collection until we need it.c               ó   — || _         y r    ©Ú
_into_iter)r¢   Ú	into_iters     rœ   rÞ  z_DeferredIterable.__init__Î  s	   € Ø6?ˆ�r›   c              #  ó@   K  — | j                  «       E d {  –—†  y 7 Œ­wr    r*  r«   s    rœ   Ú__iter__z_DeferredIterable.__iter__Ñ  s   è ø€ Ø—?‘?Ó$×$Ò$ús   ‚–—c                ó\   — | j                  «       }t        |t        «      r|S t        |«      S r    )r+  r#  rr  )r¢   Úits     rœ   Úto_tuplez_DeferredIterable.to_tupleÔ  s&   € à�_‰_ÓˆÜ ¤EÔ*ˆrÐ9´°b³	Ð9r›   N)r,  zCallable[[], Iterable[_T]]r§   rÛ   )r§   zIterator[_T])r§   ztuple[_T, ...])r–   r—   r˜   r¼   rÞ  r.  r1  rš   r›   rœ   r(  r(  Ë  s   „ ÙVó@ó%ô:r›   r(  é@   c                óJ   — |rdj                  | g|¢­«      n| }t        |«      S r  )rƒ  r   )r¢  Únestedræ  s      rœ   Údeep_attrgetterr5  Ú  s%   € á(.ˆ3�8‰8�T�O˜F‘OÔ$°D€DÜ�dÓÐr›   c                ó&   —  t        |g|¢­Ž | «      S )z+Perform a nested attribute lookup on `obj`.)r5  )rº  Úname_1r4  s      rœ   Údeep_getattrr8  à  s   € à+Œ?˜6Ð+ FÒ+¨CÓ0Ð0r›   c                  ó   — e Zd Zy)Ú	CompliantN)r–   r—   r˜   rš   r›   rœ   r:  r:  å  s   „ àr›   r:  c                  ó"   — e Zd ZdZedd„«       Zy)ÚNarwhalsa¬  Minimal *Narwhals-level* protocol.

    Provides access to a compliant object:

        obj: Narwhals[NativeT_co]]
        compliant: Compliant[NativeT_co] = obj._compliant

    Which itself exposes:

        implementation: Implementation = compliant.implementation
        native: NativeT_co = compliant.native

    This interface is used for revealing which `Implementation` member is associated with **either**:
    - One or more [nominal] native type(s)
    - One or more [structural] type(s)
      - where the true native type(s) are [assignable to] *at least* one of them

    These relationships are defined in the `@overload`s of `_Implementation.__get__(...)`.

    [nominal]: https://typing.python.org/en/latest/spec/glossary.html#term-nominal
    [structural]: https://typing.python.org/en/latest/spec/glossary.html#term-structural
    [assignable to]: https://typing.python.org/en/latest/spec/glossary.html#term-assignable
    c                 ó   — y r    rš   r«   s    rœ   rè  zNarwhals._compliant  s   € Ø36r›   N)r§   zCompliant[NativeT_co])r–   r—   r˜   r¼   r®   rè  rš   r›   rœ   r<  r<  ê  s   „ ñð0 Ú6ó Ù6r›   r<  c                  ój  — e Zd ZdZdd„Zedd„«       Zedd„«       Zedd„«       Zedd„«       Ze	 	 	 	 	 	 dd„«       Zedd„«       Ze	 	 	 	 	 	 dd	„«       Zedd
„«       Ze	 	 	 	 	 	 dd„«       Zedd„«       Zedd„«       Ze	 	 	 	 	 	 d d„«       Zed!d„«       Ze	 	 	 	 	 	 d"d„«       Zed#d„«       Zd$d„Zy)%Ú_ImplementationzµDescriptor for matching an opaque `Implementation` on a generic class.

    Based on [pyright comment](https://github.com/microsoft/pyright/issues/3071#issuecomment-1043978070)
    c                ó   — || _         y r    )r–   rå  s      rœ   rç  z_Implementation.__set_name__  s	   € Ø!ˆ�r›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__  ó   € ØTWr›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__  rB  r›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__  ó   € ØRUr›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__  ó   € ØPSr›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__  s   € ð r›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__  rE  r›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__  s   € ð 25r›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__"  rB  r›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__$  s   € ð r›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__(  rG  r›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__*  rG  r›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__,  s   € ð .1r›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__1  s   € ØKNr›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__3  r‘  r›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__7  s   € ØQTr›   c                ó6   — |€| S |j                   j                  S r    )rè  rÏ   r¡   s      rœ   r¥   z_Implementation.__get__9  s   € ØÐ'ˆtÐP¨X×-@Ñ-@×-PÑ-PÐPr›   N)r¤   ú	type[Any]ræ  r“   r§   rÛ   )r£   zNarwhals[NativePolars]r¤   r   r§   rj   )r£   zNarwhals[NativePandas]r¤   r   r§   rh   )r£   zNarwhals[NativeModin]r¤   r   r§   rg   )r£   zNarwhals[NativeCuDF]r¤   r   r§   r`   )r£   zNarwhals[NativePandasLike]r¤   r   r§   ri   )r£   zNarwhals[NativeArrow]r¤   r   r§   r_   )r£   z3Narwhals[NativePolars | NativeArrow | NativePandas]r¤   r   r§   z&_PolarsImpl | _PandasImpl | _ArrowImpl)r£   zNarwhals[NativeDuckDB]r¤   r   r§   rb   )r£   zNarwhals[NativeSQLFrame]r¤   r   r§   rm   )r£   zNarwhals[NativeDask]r¤   r   r§   ra   )r£   zNarwhals[NativeIbis]r¤   r   r§   rd   )r£   z.Narwhals[NativePySpark | NativePySparkConnect]r¤   r   r§   z"_PySparkImpl | _PySparkConnectImpl)r£   rÛ   r¤   ztype[Narwhals[Any]]r§   rA   )r£   zDataFrame[Any] | Series[Any]r¤   r   r§   rc   )r£   zLazyFrame[Any]r¤   r   r§   re   )r£   zNarwhals[Any] | Noner¤   r   r§   r   )r–   r—   r˜   r¼   rç  r!   r¥   rš   r›   rœ   r?  r?    s|  „ ñó
"ð ÚWó ØWØÚWó ØWØÚUó ØUØÚSó ØSØðØ2ðØ;>ðà	òó ðð ÚUó ØUØð5ØKð5ØTWð5à	/ò5ó ð5ð ÚWó ØWØðØ0ðØ9<ðà	òó ðð ÚSó ØSØÚSó ØSØð1ØFð1ØORð1à	+ò1ó ð1ð ÚNó ØNØð Ø4ð Ø=@ð à	ò ó ð ð ÚTó ØTôQr›   r?  c                óp   — dd l }t        | |j                  «      r|j                  j	                  | «      S | S r&  )r  r#  ÚRecordBatchReaderÚTableÚfrom_batches)ÚtblÚpas     rœ   Úto_pyarrow_tabler[  =  s/   € Ûä�#�r×+Ñ+Ô,Ø�x‰x×$Ñ$ SÓ)Ð)Ø€Jr›   c               óT   — t        | t        «      r| S ddlm} t         || «      «      S )Nr   )ÚPath)r#  r“   Úpathlibr]  )Úsourcer]  s     rœ   Únormalize_pathr`  E  s#   € Ü�&œ#ÔØˆÝä‰t�F‹|ÓÐr›   c                óD   — t        | t        «      r| f|z  S t        | «      S )zÔEnsure the given bool or sequence of bools is the correct length.

    Stolen from https://github.com/pola-rs/polars/blob/b8bfb07a4a37a8d449d6d1841e345817431142df/py-polars/polars/_utils/various.py#L580-L594
    )r#  rO  rr  )r
  Ún_matchs     rœ   Úextend_boolrc  M  s#   € ô ",¨E´4Ô!8ˆEˆ8�gÑÐJ¼eÀE»lÐJr›   c                  ó   — e Zd ZdZdd„Zy)Ú
_NoDefaultÚ
NO_DEFAULTc                 ó   — y)Nz<no_default>rš   r«   s    rœ   rã  z_NoDefault.__repr__]  s   € Ør›   NrM  )r–   r—   r˜   Ú
no_defaultrã  rš   r›   rœ   re  re  X  s   „ ð €Jôr›   re  )r+  r“   r§   r=   )rf  rÎ   r§   rÇ   )ro  r   r§   z	list[Any])rs  r   r§   r   )rs  zAny | Iterable[Any]r§   rO  )r}  zIterable[_T] | Anyr§   zTypeIs[Iterator[_T]])ri  z#str | ModuleType | _SupportsVersionr§   rÇ   )r�  r™  rŽ  rñ  r§   zTypeIs[type[_T]])r�  úobject | typerŽ  rñ  r§   zTypeIs[_T | type[_T]])r�  r™  rŽ  útuple[type[_T1], type[_T2]]r§   zTypeIs[type[_T1 | _T2]])r�  ri  rŽ  rj  r§   z#TypeIs[_T1 | _T2 | type[_T1 | _T2]])r�  r™  rŽ  ú&tuple[type[_T1], type[_T2], type[_T3]]r§   zTypeIs[type[_T1 | _T2 | _T3]])r�  ri  rŽ  rk  r§   z/TypeIs[_T1 | _T2 | _T3 | type[_T1 | _T2 | _T3]])r�  r   rŽ  ztuple[type, ...]r§   zTypeIs[Any])r�  r   rŽ  r   r§   rO  )r¢  úIterable[Any]r§   rÛ   )r³  r‡   r´  z-Series[Any] | DataFrame[Any] | LazyFrame[Any]r§   r‡   )rº  z-DataFrame[Any] | LazyFrame[Any] | Series[Any]r§   r¦   r    )rº  r‡   rÃ  zstr | list[str] | Noner©  z6Series[IntoSeriesT] | list[Series[IntoSeriesT]] | Noner§   r‡   )rº  r‡   r§   r‡   )rÛ  rl  r§   zIterable[tuple[Any, ...]])rº  r   r  r   r§   zTypeIs[pd.RangeIndex])ræ  zpd.Series[Any] | pd.DataFramer  r   r§   rO  )rº  r‡   ro  rO  rê  z
bool | strr§   r‡   )rø  r‚  rù  r   r§   zint | float)rû   zSeries[Any]r§   rO  )Únw)r  r‚  r¬   úContainer[str]r  r“   r§   r“   )r  r©   r  zIterable[str]rÎ  rO  r§   z	list[str])r  úSequence[_T] | Anyr§   úTypeIs[Sequence[_T]])rº  r   r§   zTypeIs[_SliceNone])rº  r   r§   zCTypeIs[SizedMultiIndexSelector[Series[Any] | CompliantSeries[Any]]])rº  ro  r§   z-TypeIs[Sequence[_T] | Series[Any] | _1DArray])rº  r   r§   zTypeIs[_SliceIndex])rº  r   r§   zTypeIs[range])rº  r   r§   zTypeIs[SingleIndexSelector])rº  r   r§   zTTypeIs[SingleIndexSelector | MultiIndexSelector[Series[Any] | CompliantSeries[Any]]])rº  r   r§   zBTypeIs[SizedMultiBoolSelector[Series[Any] | CompliantSeries[Any]]])rº  r   r:  rñ  r§   zTypeIs[list[_T]])rA  zCollection[Any]r§   zTypeIs[Collection[list[bool]]])rº  r   r:  rñ  r§   rp  )rÎ  úbool | Noner¿  rq  rF  rO  r§   rO  )rH  r“   rI  rO  r§   z*Callable[[Callable[P, R]], Callable[P, R]])rW  r‚  rZ  z
int | Noner§   ztuple[int, int])rn  r“   ro  r“   r§   r“   )r  úCollection[str]r  rr  r§   zColumnNotFoundError | None)r¬   rr  r§   rÛ   )r‹  z$TimeUnit | Iterable[TimeUnit] | NonerŒ  z7str | timezone | Iterable[str | timezone | None] | Noner§   z%tuple[Set[TimeUnit], Set[str | None]])
r  rr   rç   rx   r�  zSet[TimeUnit]r�  zSet[str | None]r§   rO  )r  r©   r§   r­   )r  r©   r™  rn  r§   r­   )r™  r­   r§   zEvalNames[Any])rº  r   r¢  r“   r§   rO  )rº  z\CompliantDataFrame[CompliantSeriesT, CompliantExprT, NativeDataFrameT, ToNarwhalsT_co] | Anyr§   z^TypeIs[CompliantDataFrame[CompliantSeriesT, CompliantExprT, NativeDataFrameT, ToNarwhalsT_co]])rº  zJCompliantLazyFrame[CompliantExprT, NativeLazyFrameT, ToNarwhalsT_co] | Anyr§   zLTypeIs[CompliantLazyFrame[CompliantExprT, NativeLazyFrameT, ToNarwhalsT_co]])rº  z'CompliantSeries[NativeSeriesT_co] | Anyr§   z)TypeIs[CompliantSeries[NativeSeriesT_co]])rº  r³   r§   z'TypeIs[NamespaceAccessor[_FullContext]])rg  rÎ   r§   zTypeIs[_EagerAllowedImpl])rg  rÎ   r§   zTypeIs[_LazyFrameCollectImpl])rg  rÎ   r§   zTypeIs[_LazyAllowedImpl])rº  r   r§   zTypeIs[SupportsNativeNamespace])rº  r   r§   zTypeIs[ArrowStreamExportable])rÄ  rr  rÇ  rr  rÅ  r“   r§   zdict[str, str])rÏ  r[   rË  rÑ   r§   úpa.Table)rO  rŒ   r§   rŒ   )rÖ  r“   r§   rO  )rô  r“   rë  r“   r§   ró  )r  r„   r¬   r­   r§   z"tuple[int | None, int | None, Any])r  zCallable[P, R1]r§   z<Callable[[_Constructor[_T, P, R2]], _Constructor[_T, P, R2]])rº  zobject | type[Any]r§   r“   )rº  r   r"  rT  rY  r“   r§   rÛ   )r¢  r“   r4  r“   r§   zattrgetter[Any])rº  r   r7  r“   r4  r“   r§   r   )rY  zpa.Table | pa.RecordBatchReaderr§   rs  )r_  ry   r§   r“   )r
  zbool | Iterable[bool]rb  r‚  r§   zSequence[bool]('  Ú
__future__r   rg  rƒ  ÚsysÚcollections.abcr   r   r   r   r   r	   Údatetimer
   Úenumr   r   Ú	functoolsr   r   r   r   Úimportlib.utilr   Úinspectr   r   Ú	itertoolsr   Úoperatorr   Úsecretsr   Útypingr   r   r   r   r   r   r   r   r   r    r!   Únarwhals._enumr"   Únarwhals._exceptionsr#   Únarwhals._typing_compatr$   r%   Únarwhals.dependenciesr&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   Únarwhals.exceptionsr9   r:   r;   r<   Útypesr=   rþ   rz  r  r{  r  rZ  Útyping_extensionsr>   r?   r@   rA   rB   rC   Únarwhals._compliantrD   rE   rF   Ú!narwhals._compliant.any_namespacerG   Únarwhals._compliant.typingrH   rI   rJ   rK   râ   rM   Únarwhals._nativerN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   Únarwhals._translaterZ   r[   r\   Únarwhals._typingr]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rî   ro   rp   r˜  rr   rø   rt   Únarwhals.typingru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r“   r†   r™   r‡   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r’   rž   r©   r¯   r°   r²   r³   r´   rµ   r¶   r¸   r¿   rÃ   rÉ   rÍ   rÑ   rÕ   r×   rÊ   rÎ   r  r  r  r  r  r  r  r  r  r  r  r]  r(  r)  rL  rp  rt  rn  r~  re  r�  r£  r·  r½  rÇ  rÍ  r×  rÞ  Úversion_inforá  rË  rì  rú  r	  r  r  r  r   r$  r)  r,  r/  r2  r'  r5  r8  r;  rB  rD  rG  rU  r\  ry  r  r…  r�  r”  r—  r›  rŸ  Úobjectr   r£  r§  rª  r+  r(  r7  r´  r·  r¹  r»  r½  rÀ  rÉ  rÐ  rÒ  rØ  rÚ  rê  rö  r  r  rw  r[  r(  r5  r8  r:  r<  r?  r[  r`  rc  re  rh  r™  r.  rš   r›   rœ   ú<module>r�     sÑ	  ðÞ "ã 	Û 	Û 
ß X× XÝ ß ß 6Ó 6Ý $ß *Ý Ý Ý ÷÷ ÷ ñ õ &Ý :ß <÷÷ ÷ ÷ ÷ ñ ÷* [Ñ ZâÝ#Ý ãÛÛ÷÷ ÷ WÑVÝC÷ó õ .÷÷ ÷ ó ÷ ZÑY÷÷ ÷ ÷ õ ÷& 8Ý%Ý&÷÷ ÷ ÷ õ ð( %(Ð˜	Ó'áØ  i°¡n°iÀ±nÀfÈSÁkÐ&QÑ Rô€Nñ �%‹.€CÙ
�%‹.€CÙ
�%‹.€CÙ
�%Ð3Ô
4€CÙ�#‹€AÙ�‹€AÙ	�‹€BÙ	�‹€Bô˜8ô ôR�xô Rô0˜ô 0ñ
 ˆTƒ]€Ù�\¨TÔ2€
Ù˜°4Ô8€ØJ€ˆiÓ JÙ˜¨|Ô<€ØA€ˆÓ AØ<€ˆiÓ <ô�H˜ZÑ(ô ô�x Ñ.ô ô˜Hô ô-�Xô -ô
J˜Hô Jô
Ð+¨^¸Xô ôÐ(Ð*?Àô ô	4Ð2°Hô 	4ôIˆdô IôXM%�Zô M%ðb ×Ò˜9Ø×Ò˜)Ø×Ò˜Ø×Ò˜EØ×Ò˜FØ×"Ò" FØ×Ò˜:Ø×Ò˜Ø×Ò˜6Ø×Ò˜Ø×Ò˜Zð:€Ð6ó ð ×ÒÐ)Ø×Ò˜.Ø×Ò˜MØ×"Ò"Ð$9ð	@Ð Ð <ó ð Dñ �2Ôò&ó ð&ð òó ðó<QóóSó*%óLð 
ðØðØ$,ðàòó 
ðð
 
ð Øð Ø-5ð àò ó 
ð ð
 
ð"Øð"Ø$?ð"àò"ó 
ð"ð
 
ð.Øð.Ø-Hð.à(ò.ó 
ð.ð
 
ð(Øð(Ø$Jð(à"ò(ó 
ð(ð
 
ð:Øð:Ø-Sð:à4ò:ó 
ð:ð
 
ðØðØ#3ðàòó 
ðó
óðYØ	ðYØKðYàóYóxðF ,0ðSð EIñ	SØ	ðSà(ðSð Bð	Sð
 óSól,ñ^ Ù˜ TÔ*�Jãà
×Ò˜7Ò"Ù˜S¨Ô.‰
ó	8ó<8ð	Ø9ð	ØMPð	à	ó	ð&*Ø	ð&*Ø $ð&*Ø0:ð&*àó&*óRó*?ðF :>ð[Øð[Ø)ð[Ø36ð[àó[ð :>ð*&Øð*&Ø)ð*&Ø36ð*&àó*&ðZØðØ#0ðØ@DðàóóLó9ðØ	ðàHóðØ	ðà2óó	ó"óDðØ	ðàYóðØ	ðàGóóJð
>Øð>à#ó>óðØðàðð ð	ð
 
óð& °ñ&Øð&Ø)-ð&à/ó&ðR$Øð$Ø#-ð$àó$ó0ð<ØðØ.=ðàóó"ð"Ø3ð"àFð"ð +ó"ð*
Øð
Ø ð
Ø.;ð
ØIXð
à	ó
óôMõò “8�	ˆ5Ó õAð:ð

ð:ð
õ:ð:Ø	Sð:àQõ:ð7Ø	0ð7à.õ7ð?Ø	0ð?à.õ?ð?Ø	0ð?à.õ?õSõõZõ

õ8õ6ð4Øð4Ø(7ð4ØADð4àõ4õ,#õ õ.;÷$S(ò S(õl#÷Sò SðlØðØ$1ðà'õðØðàAõõ61ð IK÷ ,ô^:˜ ™õ :ñ �2Ôóó ñõ
1ô
Ø�*ÑÐ4°h¸zÑ6Jõô
7ˆx˜
Ñ#õ 7÷:3Qò 3QõlõðKØ ðKàðKð õKô�õ ñ ×"Ò"�
ò �‹:‚r›   