Ë
    7Ò^j² ã                  ó¸  — 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mZ d dlmZ d dlmZmZ d dl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* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE d dlFmGZGmHZHmIZImJZJ e"�rYd dlmKZK d dlLmMZM d dl!mNZNmOZO d dlPZQd dlRZSd dlTZUd dlVmWZWmXZXmYZYmZZZ d dl[m\Z\m]Z]m^Z^ d dl_m`Z` d dlambZbmcZcmdZdmeZe d dlfmgZg d dlhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZt d dlumvZvmwZwmxZx d dlymzZzm{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£m¤Z¤ e¥Z¦d!e§d"<    e(d#e�e#   eŒe#   z  e‘e#   z  ¬$«      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 d0„ d1e'«      Z² G d2„ d3e'«      Z³ e(d4«      Z´ e(d5d6¬7«      Zµ e(d8d6¬7«      Z¶d9Z·d!e§d:<    e(d;e·¬$«      Z¸d<Z¹d!e§d=<   d>Zºd!e§d?<    G d@„ dAe'eµ   «      Z» G dB„ dCe'e¶   «      Z¼ G dD„ dEe'«      Z½ G dF„ dGe'«      Z¾ G dH„ dIe'«      Z¿ G dJ„ dKe¿e¾e'«      ZÀ G dL„ dMe¿e½e'«      ZÁ G dN„ dOe¿e'«      ZÂ G dP„ dQe«      ZÃ G dR„ dSe,«      ZÄdÐdT„ZÅeÄ�jŒ                  dUeÄ�jŽ                  dVeÄ�j�                  dWeÄ�j’                  dXeÄ�j”                  dYeÄ�j–                  dYeÄ�j˜                  dZeÄ�jš                  d[eÄ�jœ                  d\eÄ�jž                  d]eÄ�j                   d^iZÑd_e§d`<   eÄ�jš                  daeÄ�jŽ                  dbeÄ�j”                  dceÄ�j–                  ddiZÒdee§df<   	  edg¬h«      dÑdi„«       ZÓedÒdj„«       ZÔdÓdk„ZÕdÔdl„ZÖdÕdm„Z×dÖdn„ZØd×do„ZÙe*	 	 	 	 	 	 dØdp„«       ZÚe*	 	 	 	 	 	 dÙdq„«       ZÚe*	 	 	 	 	 	 dÚdr„«       ZÚe*	 	 	 	 	 	 dÛds„«       ZÚe*	 	 	 	 	 	 dÜdt„«       ZÚe*	 	 	 	 	 	 dÝdu„«       ZÚe*	 	 	 	 	 	 dÞdv„«       ZÚdßdw„ZÚdàdx„ZÛ	 	 	 	 	 	 dády„ZÜdâdz„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ì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“„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ÿ�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À¬h«      �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 e�jB                  dÊk7  r�ddË„�Z"n�ddÌ„�Z"	 	 	 	 	 	 �ddÍ„�Z# G dÎ„ dÏe«      �Z$�e$�jJ                  �Z&�e&�Z% �e'd«      �Z(y(  é    )ÚannotationsN)ÚCallableÚ
CollectionÚ	ContainerÚIterableÚIteratorÚMappingÚSequence)Útimezone)ÚEnumÚauto)ÚcacheÚ	lru_cacheÚwraps)Ú	find_spec)Úgetattr_staticÚgetdoc)Ú
attrgetter)ÚPath)Ú	token_hex)	ÚTYPE_CHECKINGÚAnyÚFinalÚGenericÚLiteralÚProtocolÚTypeVarÚ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Ú
ShapeError)ÚSet)Ú
ModuleType)ÚConcatenateÚ	TypeAlias)ÚLiteralStringÚ	ParamSpecÚSelfÚ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ÚNestedLiteralÚSingleIndexSelectorÚSizedMultiBoolSelectorÚSizedMultiIndexSelectorÚSizeUnitÚSupportsNativeNamespaceÚTimeUnitÚ_1DArrayÚ_SliceIndexÚ
_SliceNameÚ
_SliceNoner>   Ú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__© ó    úZ/var/www/ramen.bs-engineer-server.com/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   rK   )rÊ   ÚV1Únarwhals.stable.v1._namespacerL   ÚV2Únarwhals.stable.v2._namespaceÚnarwhals._namespace)r¢   ÚNamespaceV1ÚNamespaceV2rL   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   )rn   )rÊ   rÞ   rè   rn   rà   ré   Únarwhals.dataframe)r¢   ÚDataFrameV1ÚDataFrameV2rn   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   )ro   )rÊ   rÞ   rè   ro   rà   ré   rî   )r¢   ÚLazyFrameV1ÚLazyFrameV2ro   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   rr   )rÊ   rÞ   rè   rs   rà   ré   Únarwhals.series)r¢   ÚSeriesV1ÚSeriesV2rs   s       rœ   ÚserieszVersion.series:  s2   € à”7—:‘:ÑÝ=àˆOØ”7—:‘:ÑÝ=àˆOÝ*àˆr›   N)r§   ztype[Namespace[Any]])r§   rw   )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__e  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'   ÚIBISr.   ÚSQLFRAMEr,   ÚPYSPARK_CONNECTÚgetÚUNKNOWN)ÚclsÚnative_namespaceÚmappings      rœ   Úfrom_native_namespacez$Implementation.from_native_namespaceh  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_string€  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_ibis:  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_sqlframeG  s   € ð ”~×.Ñ.Ð.Ð.r›   c                ó   — t        | «      S )zReturns backend version.©Úbackend_versionr«   s    rœ   rÅ   zImplementation._backend_versionT  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Î   I  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Î   c                óp   — | j                  «       xs | j                  «       xr | j                  «       dk  S )zJWhether implementation is PySpark (or PySpark Connect) with version < 4.0.)é   r   )r<  r?  rÅ   ©Úimplementations    rœ   Úis_pyspark_pre_4rU  Y  s9   € ð 	×!Ñ!Ó#ÒJ ~×'HÑ'HÓ'Jò5à
×
)Ñ
)Ó
+¨fÑ
4ð5r›   )é   é   rR  )r   é   r   )é   é
   )é   )rW  é   )r   é   rR  )iè  é   )rV  rV  )é   )rW  rX  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)Ú	importlibrd  )r+  rd  s     rœ   r)  r)  w  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  )rT  Úimplr+  r  r  Úinto_versionr  r  ÚversionÚmin_versionr*  s              rœ   rL  rL  �  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 )NrV  r   )ÚlistÚlenÚ_is_iterable)Úargss    rœ   Úflattenrr     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#  rn  Útuple)Úargs    rœ   Útupleifyrv  ¤  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   rr   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ø   rs   r)   r#  rn   r*   ÚExprro   Úqualified_type_nameÚ	TypeErrorr   r“   Úbytes)ru  rs   ÚpdÚplr*  s        rœ   rp  rp  ª  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†  rt  Úsplit)rk  Úversion_strs     rœ   rh  rh  Ã  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   rp   )Únarwhals.dtypesrq   r#  ÚtypeÚ
issubclass)r�  r�  rq   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   rm   c              3  ó6   •K  — | ]  }t        |‰«      –— Œ y ­wr    ©r#  )r‡  Úitemrn   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   ro   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î   rn   ro   Úallr›  rz  )Úitemsr   r*  rn   ro   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_index1  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®  ro  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_nativer5   r6   r«  )ÚobjÚobj_anyÚ
native_objs      rœ   Úmaybe_get_indexr¿  l  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 SeriesrS  )Únarwhals.translater»  r   r  rp  r5   r²  r­  r³  rÂ  r6   Ú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»  r5   Ú__native_namespace__Ú_has_default_indexr²  r­  r³  Úreset_indexr6   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›   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   rV  )r«  rÒ  ÚstartÚstopro  Ústep)Únative_frame_or_seriesr  r«  s      rœ   rÍ  rÍ    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‡   )rT  r1  r²  Ú
_compliantr³  r»  Úconvert_dtypesr   )r¼  rq  Ú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
    >   Úbr{  >   Ú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ë  K  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)rV  é    zpl.CategoricalÚphysical)Úis_dictionary)Únarwhals._interchange.seriesrí  r®  rË   rç   r#  ÚdtypeÚCategoricalrº   Údescribe_categoricalr   r»  rT  r5  rÅ   r   Úorderingr1  rO  ÚcatÚorderedrA  Únarwhals._arrow.utilsrñ  r›  )rû   rí  rç   rÁ   rÜ  rº   ri  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
  «      › �x}|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   rV  é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Ø
Ø�x¤	¨'°A©+Ó 6Ð7Ð8Ð8ˆEÀÑHØˆLà�1‰ˆØ�SŠ=ðØ�*˜L¨¨	ð3ð ô ! Ó%Ð%ð r›   c              ó°   — |s-t        t        | j                  «      j                  |«      «      S t        |«      }t	        || j                  ¬«      x}r|‚|S )N)Ú	available)rn  Úsetr¬   ÚintersectionÚcheck_columns_exist)ÚframeÚsubsetÚstrictÚ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  ro  Úis_single_index_selectorr4   r1   Ú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  r2   r/   Ú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_ranger$    s   € Ü�cœ5Ó!Ð!r›   c                óZ   — t        t        | t        «      xr t        | t         «       «      S r    )rO  r#  r„  r  s    rœ   r  r    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_selectorr'    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  ro  r#  rO  r3   r0   Úis_compliant_series_boolr  s    rœ   Úis_boolean_selectorr*  #  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#  rn  )r¼  Útps     rœ   Ú
is_list_ofr-  .  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>6  s   è ø€ Ò=¨$Œz˜$¤×%Ñ=ùs   ‚©Úany)Ú
predicatess    rœ   Ú predicates_contains_list_of_boolr4  3  s   € ô Ñ=°*Ô=Ó=Ð=r›   c                óx   — t        t        | «      xr% t        t        | «      d «      x}xr t	        ||«      «      S r    )rO  r  ÚnextÚiterr#  )r¼  r,  Úfirsts      rœ   Úis_sequence_ofr9  9  s>   € äÜ Ó$ò 	"Üœ4 ›9 dÓ+Ð+ˆUò	"ä�u˜bÓ!óð r›   c                ó8   — t        | t        t        t        f«      S r    )r#  rn  rt  Údictr  s    rœ   Úis_nested_literalr<  B  s   € Ü�cœD¤%¬Ð.Ó/Ð/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_thoughr?  F  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–   )rq  Úkwdsr$  r  r*  ÚfnrA  r@  s        €€€rœ   Úwrapperz=deprecate_native_namespace.<locals>.decorate.<locals>.wrapperf  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›   )rq  úP.argsrF  úP.kwargsr§   rŽ   )r   )rG  rH  rA  r@  s   ` €€rœ   Údecoratez,deprecate_native_namespace.<locals>.decoratee  s    ù€ Ü	ˆr‹ö	%ó 
ð	%ð* ˆr›   )rG  úCallable[P, R]r§   rL  rš   )r@  rA  rK  s   `` rœ   Údeprecate_native_namespacerM  X  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_samplesrV  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  r9   )rO  rR  r*  s      rœ   Ú_validate_rolling_argumentsrT  �  s‹   € ô �œS¨]Õ;Ü�œS¤$ t£*¸ÕGà�Q‚Ø;ˆÜ˜‹oÐàÐØ˜Š?Ø?ˆCÜ˜S“/Ð!à˜Ò$ØJˆCÜ'¨Ó,Ð,ð ˜Ð#Ð#ð "ˆà˜Ð#Ð#r›   c                óª   — | �|�d}t        |«      ‚| �| }n|�t        ||z  «      }nd}|dk  rd|› �}t        |«      ‚||kD  r|sd}t        |«      ‚|S )aí  Resolve the concrete number of rows to draw for `DataFrame.sample`/`Series.sample`.

    At most one of `n` or `fraction` may be set; if neither is given a single row is
    sampled. `fraction` is interpreted relative to `height` and truncated towards zero.

    Raises:
        ValueError: If both `n` and `fraction` are specified.
        InvalidOperationError: If the resolved size is negative.
        ShapeError: If the resolved size exceeds `height` and `with_replacement` is False.
    z&cannot specify both `n` and `fraction`rV  r   z.sample size must be a positive integer, found zScannot take a larger sample than the total population when `with_replacement=false`)r  r„  r9   r:   )ÚnÚfractionÚheightÚwith_replacementr*  Úsizes         rœ   Ú_resolve_sample_sizer[  ™  s}   € ð 	€}˜Ð-Ø6ˆÜ˜‹oÐØ€}Ø‰Ø	Ð	Ü�6˜HÑ$Ó%‰àˆàˆa‚xØ>¸t¸fÐEˆÜ# CÓ(Ð(Øˆf‚}Ñ-ØcˆÜ˜‹oÐØ€Kr›   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    )ro  )r‡  Úlines     rœ   r‰  z generate_repr.<locals>.<genexpr>¿  s   è ø€ Ò>¨œ3˜tŸ9Ñ>ùó   ‚é   u   â”Œu   â”€u   â”�
ú|ú z|
ú-u   â””u   â”˜é'   uu   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u   â”�
|u/   |
| Use `.to_native` to see native output |
â””)
ÚosÚget_terminal_sizer¬   ÚOSErrorr„  ÚgetenvÚ
expandtabsÚ
splitlinesÚmaxro  )ÚheaderÚnative_reprÚterminal_widthÚnative_linesÚmax_native_widthÚlengthÚoutputÚheader_extraÚstart_extraÚ	end_extrar`  Ú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  Ú
differencer7   Ú'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   )ÚCounterrV  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:)ro  r  Úcollectionsr  r¤  Újoinr8   )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œ   rG  z$passthrough_column_names.<locals>.fn  s   ø€ Øˆr›   )rž  r   r§   r­   rš   )r™  rG  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  5  s   € ô ˜3Ð 5Ó6Ð6r›   c                óP   — t        | «      xr | j                  j                  «       S r    )r  ró  Ú
is_integerr  s    rœ   r  r  ;  ó!   € ô ˜sÓ#Ò>¨¯	©	×(<Ñ(<Ó(>Ð>r›   c                óP   — t        | «      xr | j                  j                  «       S r    )r  ró  Ú
is_booleanr  s    rœ   r)  r)  A  r¯  r›   c                ó6   — t        | d«      xr t        | d«      S )NrÁ   Ú	_accessorr¦  r  s    rœ   Ú_is_namespace_accessorr´  G  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  ©ri  s    rœ   Úis_eager_allowedr·  Q  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¹  \  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»  a  sS   € àÜ×ÑÜ×ÑÜ×ÑÜ×ÑÜ×ÑÜ×&Ñ&Ü×Ñðð ð r›   c                ó   — t        | d«      S )NrÌ  r¦  r  s    rœ   Úhas_native_namespacer½  n  s   € Ü˜3Ð 6Ó7Ð7r›   c                ó   — t        | d«      S )NÚ__arrow_c_stream__r¦  r  s    rœ   Úsupports_arrow_c_streamrÀ  r  s   € Ü˜3Ð 4Ó5Ð5r›   c                óL   ‡ ‡— ˆ ˆfd„|D «       }t        t        ||d¬«      «      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¡  F)r  )r;  Úzip)rÄ  Úright_onrÅ  Úright_keys_suffixeds   ` ` rœ   Ú_remap_full_join_keysrÉ  v  s*   ù€ ô Ø?GôÐô ”�HÐ1¸%Ô@ÓAÐAr›   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º   ry  Ú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:
        >>> @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š   )rG  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ÚZr1  )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:
        >>> 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¤   rT  Ú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¢   rq  rF  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   )rq  r   rF  r   r§   r   )rð  r?   r§   rA   )r–   r—   r˜   r¼   rÞ  rã  rç  r¥   rî  rP  r#   rš   r›   rœ   rÚ  rÚ  Ä  sU   „ ñ!ôF(ó
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:
        >>> 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>O  s   è ø€ Ò8 1˜1˜#›Ñ8ùs   ‚)rƒ  rK  s    rœ   Ú_unparse_versionzrequires._unparse_versionM  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_nameQ  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_contextV  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£   rk  r$  rü  Úfoundr*  s          rœ   Ú_ensure_versionzrequires._ensure_version^  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£   rq  rF  rG  r¢   s      €€rœ   rH  z"requires.__call__.<locals>.wrappern  s&   ø€ à× Ñ  Ô*Ù�hÐ. Ò.¨Ñ.Ð.r›   )r£   r´   rq  rI  rF  rJ  r§   rŽ   )r–   rù  r   )r¢   rG  rH  s   `` rœ   rî  zrequires.__call__i  s.   ù€ ð  Ÿ[™[ˆÔä	ˆr‹õ	/ó 
ð	/ð
 ˆr›   N)r‚  )rý  r“   rü  rÇ   r§   rA   )rL  rÇ   r§   r“   )rþ  rG   r§   rÛ   )r£   r³   r§   ztuple[tuple[int, ...], str])r£   r³   r§   rÛ   )rG  ú_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 )NrV  )rÔ  r«  rÕ  rÖ  )Ú	str_slicer¬   rÔ  rÕ  rÖ  s        rœ   Úconvert_str_slice_to_int_slicer  w  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˜   rz  )Ú
init_childr*  Ú	tp_parents     €rœ   rK  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  rK  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œ   ry  ry  ›  sL   € Ü˜3¤Ô%‰¬4°«9€BØ Ÿm™m¨zÒ9ˆR�]Š]¸r€FØˆX�Q�r—{‘{�mÐ$×+Ñ+¨CÓ0Ð0r›   rP  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:
        >>> 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.DataFrame', got: 'polars.dataframe.frame.DataFrame'
            df=polars.dataframe.frame.DataFrame(...)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    z | c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr    )ry  )r‡  r,  s     rœ   r‰  zensure_type.<locals>.<genexpr>Â  s   è ø€ ÒL¸"Ô1°"×5ÑLùra  z	Expected z, got: z    é(   z(...)ú=rd  ú^r	  N)r#  rƒ  ry  ré  ro  rz  )	r¼  rQ  Úvalid_typesÚtp_namesr*  Úleft_padr  ÚassignÚ	underlines	            rœ   rS  rS  ¡  s¾   € ô@ �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#  rt  )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__0  s   € ð .1r›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__5  s   € ØKNr›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__7  r“  r›   c                 ó   — y r    rš   r¡   s      rœ   r¥   z_Implementation.__get__;  s   € ØQTr›   c                ó6   — |€| S |j                   j                  S r    )rÙ  rÏ   r¡   s      rœ   r¥   z_Implementation.__get__=  s   € ØÐ'ˆtÐP¨X×-@Ñ-@×-PÑ-PÐPr›   N)r¤   ú	type[Any]ræ  r“   r§   rÛ   )r£   zNarwhals[NativePolars]r¤   r   r§   ri   )r£   zNarwhals[NativePandas]r¤   r   r§   rg   )r£   zNarwhals[NativeModin]r¤   r   r§   rf   )r£   zNarwhals[NativeCuDF]r¤   r   r§   r_   )r£   zNarwhals[NativePandasLike]r¤   r   r§   rh   )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§   ra   )r£   zNarwhals[NativeSQLFrame]r¤   r   r§   rl   )r£   zNarwhals[NativeDask]r¤   r   r§   r`   )r£   zNarwhals[NativeIbis]r¤   r   r§   rc   )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§   rb   )r£   zLazyFrame[Any]r¤   r   r§   rd   )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[  A  s/   € Ûä�#�r×+Ñ+Ô,Ø�x‰x×$Ñ$ SÓ)Ð)Ø€Jr›   Úwin32c               óN   — t        | t        «      r| S t        t        | «      «      S r    )r#  r“   r   ©Úsources    rœ   Únormalize_pathr`  K  s   € Ü# F¬CÔ0ˆvÐG´c¼$¸v»,Ó6GÐGr›   c               ó4   — t        | «      j                  «       S r    )r   Úas_posixr^  s    rœ   r`  r`  T  s   € Ü�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  rt  )r
  Ún_matchs     rœ   Úextend_boolre  X  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__h  s   € Ør›   NrM  )r–   r—   r˜   Ú
no_defaultrã  rš   r›   rœ   rg  rg  c  s   „ ð €Jôr›   rg  )rT  rÎ   r§   rO  )r+  r“   r§   r<   )rT  rÎ   r§   rÇ   )rq  r   r§   z	list[Any])ru  r   r§   r   )ru  zAny | Iterable[Any]r§   rO  )r  zIterable[_T] | Anyr§   zTypeIs[Iterator[_T]])rk  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�  rk  r�  rl  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�  rk  r�  rm  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¤  z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¼  r   r  r   r§   zTypeIs[pd.RangeIndex])r×  zpd.Series[Any] | pd.DataFramer  r   r§   rO  )r¼  r‡   rq  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¼  rp  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]])r3  zCollection[Any]r§   zTypeIs[Collection[list[bool]]])r¼  r   r,  rñ  r§   rq  )r¼  r   r§   zTypeIs[NestedLiteral])r  úbool | NonerÁ  rr  r>  rO  r§   rO  )r@  r“   rA  rO  r§   z*Callable[[Callable[P, R]], Callable[P, R]])rO  r„  rR  ú
int | Noner§   ztuple[int, int])
rV  rs  rW  zfloat | NonerX  r„  rY  rO  r§   r„  )rn  r“   ro  r“   r§   r“   )r  úCollection[str]r  rt  r§   zColumnNotFoundError | None)r¬   rt  r§   rÛ   )r‹  z$TimeUnit | Iterable[TimeUnit] | NonerŒ  z7str | timezone | Iterable[str | timezone | None] | Noner§   z%tuple[Set[TimeUnit], Set[str | None]])
ró  rq   rç   rw   r�  zSet[TimeUnit]r�  zSet[str | None]r§   rO  )r
  r©   r§   r­   )r
  r©   r™  ro  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]])ri  rÎ   r§   zTypeIs[_EagerAllowedImpl])ri  rÎ   r§   zTypeIs[_LazyFrameCollectImpl])ri  rÎ   r§   zTypeIs[_LazyAllowedImpl])r¼  r   r§   zTypeIs[SupportsNativeNamespace])r¼  r   r§   zTypeIs[ArrowStreamExportable])rÄ  rt  rÇ  rt  rÅ  r“   r§   zdict[str, str])rÏ  rZ   rË  rÑ   r§   úpa.Table)rG  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  rQ  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§   ru  )r_  rx   r§   r“   )r
  zbool | Iterable[bool]rd  r„  r§   zSequence[bool]()  Ú
__future__r   rg  r…  ÚsysÚcollections.abcr   r   r   r   r   r	   r
   Údatetimer   Úenumr   r   Ú	functoolsr   r   r   Úimportlib.utilr   Úinspectr   r   Úoperatorr   Úpathlibr   Úsecretsr   Útypingr   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-   r.   r/   r0   r1   r2   r3   r4   r5   r6   Únarwhals.exceptionsr7   r8   r9   r:   r;   Útypesr<   r=   r>   rþ   r|  r  r}  r  rZ  Útyping_extensionsr?   r@   rA   rB   Únarwhals._compliantrC   rD   rE   Ú!narwhals._compliant.any_namespacerF   Únarwhals._compliant.typingrG   rH   rI   rJ   râ   rL   Únarwhals._nativerM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   Únarwhals._translaterY   rZ   r[   Únarwhals._typingr\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rî   rn   ro   rš  rq   rø   rs   Únarwhals.typingrt   ru   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Î   rU  r  r  r  r  r  r  r  r  r  r  r  r`  r(  r)  rL  rr  rv  rp  r€  rh  r‘  r¥  r¹  r¿  rÉ  rÏ  rÒ  rÍ  rÝ  rë  rú  r   rÿ  r  r  r  r  r  r!  r$  r  r'  r*  r-  r4  r9  r<  r?  rM  rT  r[  ry  r	  r…  r�  r”  r—  r›  rŸ  Úobjectr   r£  r§  rª  r  r  r)  r´  r·  r¹  r»  r½  rÀ  rÉ  rÐ  rÒ  rØ  rÚ  rê  rö  r  r  ry  rS  r(  r5  r8  r:  r<  r?  r[  Úplatformr`  re  rg  rj  rh  r›  r   rš   r›   rœ   ú<module>r’     s÷	  ðÞ "ã 	Û 	Û 
÷÷ ñ õ ß ß -Ñ -Ý $ß *Ý Ý Ý ÷
÷ 
õ 
õ &Ý :ß <÷÷ ÷ ÷ ÷ ñ ÷*ó ò Ý#Ý ß-ãÛÛßHÓHçVÑVÝC÷ó õ .÷÷ ÷ ó ÷ ZÑY÷÷ ÷ ÷ õ ÷& 8Ý%Ý&÷÷ ÷ ÷ ÷ ð* %(Ð˜	Ó'áØ 	¨#¡°¸3±Ñ ?À&ÈÁ+Ñ Mô€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%ó`5ð ×Ò˜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,ó^8ð	Ø9ð	ØMPð	à	ó	ð&*Ø	ð&*Ø $ð&*Ø0:ð&*àó&*óRó*?ðF :>ð[Øð[Ø)ð[Ø36ð[àó[ð :>ð)&Øð)&Ø)ð)&Ø36ð)&àó)&ðXØðØ#0ðØ@DðàóóLó9ðØ	ðàHóðØ	ðà2óó	ó"óDðØ	ðàYóðØ	ðàGóóJð
>Øð>à#ó>óó0ðØðàðð ð	ð
 
óð& °ñ&Øð&Ø)-ð&à/ó&ðR$Øð$Ø#-ð$àó$ð0Ø
ðØ ,ðØ69ðØMQðàóó@ð<ØðØ.=ðàôô"ð"Ø3ð"àFð"ð +ô"ð*
Øð
Ø ð
Ø.;ð
ØIXð
à	ô
ôôMõò “8�	ˆ5Ó õAð:ð

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

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