Ë
    ÚÍ: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lFmGZGmHZHmIZI e"�rYd dlmJZJ d dlKmLZL d dl!mMZMmNZN d dlOZPd dlQZRd dlSZTd dlUmVZVmWZWmXZXmYZY d dlZm[Z[m\Z\m]Z] d dl^m_Z_ d dl`maZambZbmcZcmdZd d dlemfZf d dlgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZs d dltmuZumvZvmwZw d dlxmyZymzZzm{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« eWd*«      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þ 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�j>                  dÉk7  r�ddÊ„�Z n�ddË„�Z 	 	 	 	 	 	 �ddÌ„�Z! G dÍ„ dÎe«      �Z"�e"�jF                  �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)Ú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__© ó    úd/home/mcse/projects/srt_converter/srt-converter-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   rJ   )rÉ   ÚV1Únarwhals.stable.v1._namespacerK   ÚV2Únarwhals.stable.v2._namespaceÚnarwhals._namespace)r¡   ÚNamespaceV1ÚNamespaceV2rK   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   )rm   )rÉ   rÝ   rç   rm   rß   rè   Únarwhals.dataframe)r¡   ÚDataFrameV1ÚDataFrameV2rm   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   )rn   )rÉ   rÝ   rç   rn   rß   rè   rí   )r¡   ÚLazyFrameV1ÚLazyFrameV2rn   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   rq   )rÉ   rÝ   rç   rr   rß   rè   Únarwhals.series)r¡   ÚSeriesV1ÚSeriesV2rr   s       r›   ÚserieszVersion.series5  s2   € à”7—:‘:ÑÝ=àˆOØ”7—:‘:ÑÝ=àˆOÝ*àˆrš   N)r¦   ztype[Namespace[Any]])r¦   rv   )r¦   ztype[DataFrame[Any]])r¦   ztype[LazyFrame[Any]])r¦   ztype[Series[Any]])r•   r–   r—   r   rÝ   rß   ÚMAINr­   rä   ræ   rð   rõ   rú   r™   rš   r›   rÉ   rÉ   ø   sy   „ Ù	‹€BÙ	‹€BÙ‹6€Dàòó ðð òó ðð òó ðð òó ðð òó ñrš   rÉ   c                  ó&  — e Zd ZdZdZ	 dZ	 dZ	 dZ	 dZ	 dZ		 dZ
	 d	Z	 d
Z	 dZ	 dZ	 dZ	 d"d„Ze	 	 	 	 	 	 d#d„«       Zed$d„«       Ze	 	 	 	 	 	 d%d„«       Zd&d„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Zd'd„Z d'd„Z!d'd„Z"d(d „Z#y!))rÍ   z?Implementation of native object (pandas, Polars, PyArrow, ...).ÚpandasÚmodinÚcudfÚpyarrowÚpysparkÚpolarsÚdaskÚduckdbÚibisÚsqlframezpyspark[connect]Úunknownc                ó,   — t        | j                  «      S rŸ   )r’   Úvaluerª   s    r›   Ú__str__zImplementation.__str__`  s   € Ü�4—:‘:‹Ðrš   c                óV  — t        «       t        j                  t        «       t        j                  t        «       t        j                  t        «       t        j                  t        «       t        j                  t        «       t        j                  t        «       t        j                  t        «       t        j                   t#        «       t        j$                  t'        «       t        j(                  t+        «       t        j,                  i}|j/                  |t        j0                  «      S )zŽInstantiate Implementation object from a native namespace module.

        Arguments:
            native_namespace: Native namespace.
        )r)   rÍ   ÚPANDASr(   ÚMODINr$   ÚCUDFr+   ÚPYARROWr-   ÚPYSPARKr*   ÚPOLARSr%   ÚDASKr&   ÚDUCKDBr'   ÚIBISr.   ÚSQLFRAMEr,   ÚPYSPARK_CONNECTÚgetÚUNKNOWN)ÚclsÚnative_namespaceÚmappings      r›   Úfrom_native_namespacez$Implementation.from_native_namespacec  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  r7  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_ibis5  r7  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_sqlframeB  s   € ð ”~×.Ñ.Ð.Ð.rš   c                ó   — t        | «      S )zReturns backend version.©Úbackend_versionrª   s    r›   rÄ   zImplementation._backend_versionO  s   € ä˜tÓ$Ð$rš   N©r¦   r’   )r  ú
type[Self]r  r;   r¦   rÍ   )r  rM  r  r’   r¦   rÍ   )r  rM  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-  r0  r2  r4  r6  r9  r;  r>  r@  rB  rD  rF  rH  rÄ   r™   rš   r›   rÍ   rÍ   D  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_4rT  T  s9   € ð 	×!Ñ!Ó#ÒJ ~×'HÑ'HÓ'Jò5à
×
)Ñ
)Ó
+¨fÑ
4ð5rš   )é   é   rQ  )r   é   r   )é   é
   )é   )rV  é   )r   é   rQ  )iè  é   )rU  rU  )é   )rV  rW  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)Ú	importlibrc  )r*  rc  s     r›   r(  r(  r  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(  rH  Úsqlframe._versionrÊ   r;  r>  r  rB  r  Úparse_versionr_  r  )rS  Úimplr*  r  r  Úinto_versionr  r  ÚversionÚmin_versionr)  s              r›   rK  rK  |  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 )NrU  r   )ÚlistÚlenÚ_is_iterable)Úargss    r›   Úflattenrq  ›  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"  rm  Útuple)Úargs    r›   Útupleifyru  Ÿ  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   rq   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÷   rr   r)   r"  rm   r*   ÚExprrn   Úqualified_type_nameÚ	TypeErrorr   r’   Úbytes)rt  rr   ÚpdÚplr)  s        r›   ro  ro  ¥  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…  rs  Úsplit)rj  Úversion_strs     r›   rg  rg  ¾  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   ro   )Únarwhals.dtypesrp   r"  ÚtypeÚ
issubclass)rŽ  r�  rp   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   rl   c              3  ó6   •K  — | ]  }t        |‰«      –— Œ y ­wrŸ   ©r"  )r†  Úitemrm   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Ÿ  rn   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í   rm   rn   Úallrš  ry  )ÚitemsrŸ  r)  rm   rn   s      @@r›   Úvalidate_lazinessr¤     sW   ù€ ß7ä
Ó
9°5Ô
9Ô9ÜÓ:°EÔ:Ô:àØSÐlqÖTrÐdhÔUYÐZ^ÕU_ÒTrÐSsÐ
t€CÜ
�C‹.Ðùò Uss   ¹Ac                óæ  — ddl m} ddlm} dd„}t	        d| «      }t	        d|«      }t        t        |dd«      |«      rÌt        t        |dd«      |«      rµ ||j                  j                  j                  «        ||j                  j                  j                  «       |j                  |j                  j                  |j                  j                  j                  |j                  j                  j                     «      «      S t        t        |dd«      |«      rÌt        t        |dd«      |«      rµ ||j                  j                  j                  «        ||j                  j                  j                  «       |j                  |j                  j                  |j                  j                  j                  |j                  j                  j                     «      «      S t        t        |dd«      |«      rÌt        t        |dd«      |«      rµ ||j                  j                  j                  «        ||j                  j                  j                  «       |j                  |j                  j                  |j                  j                  j                  |j                  j                  j                     «      «      S t        t        |dd«      |«      rÌt        t        |dd«      |«      rµ ||j                  j                  j                  «        ||j                  j                  j                  «       |j                  |j                  j                  |j                  j                  j                  |j                  j                  j                     «      «      S t        |«      t        |«      k7  r%d	t        |«      › d
t        |«      › �}t        |«      ‚| S )a¬  Align `lhs` to the Index of `rhs`, if they're both pandas-like.

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

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

    Examples:
        >>> import pandas as pd
        >>> import polars as pl
        >>> import narwhals as nw
        >>> df_pd = pd.DataFrame({"a": [1, 2]}, index=[3, 4])
        >>> s_pd = pd.Series([6, 7], index=[4, 3])
        >>> df = nw.from_native(df_pd)
        >>> s = nw.from_native(s_pd, series_only=True)
        >>> nw.to_native(nw.maybe_align_index(df, s))
           a
        4  2
        3  1
    r   )ÚPandasLikeDataFrame)ÚPandasLikeSeriesr   c                ó6   — | j                   sd}t        |«      ‚y )Nz'given index doesn't have a unique index)Ú	is_uniquer  )Úindexr)  s     r›   Ú_validate_indexz*maybe_align_index.<locals>._validate_index,  s   € Ø�ŠØ;ˆCÜ˜S“/Ð!ð rš   Ú_compliant_frameNÚ_compliant_seriesz6Expected `lhs` and `rhs` to have the same length, got z and )rª  r   r¦   rÚ   )Únarwhals._pandas_like.dataframer¦  Únarwhals._pandas_like.seriesr§  r   r"  Úgetattrr¬  r¹   rª  Ú_with_compliantÚ_with_nativeÚlocr­  rn  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¾  g  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 SeriesrR  )Únarwhals.translaterº  r   r  ro  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   rU  )rª  rÑ  ÚstartÚstoprn  Ú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†   )rS  r0  r±  Ú
_compliantr²  rº  Úconvert_dtypesr   )r»  rp  Ú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
    >   Úbrz  >   ÚkbÚ	kilobytesi   >   ÚmbÚ	megabytesi   >   ÚgbÚ	gigabytesi   @>   ÚtbÚ	terabytesl        z9`unit` must be one of {'b', 'kb', 'mb', 'gb', 'tb'}, got ©r  )ÚszÚunitr)  s      r›   Úscale_bytesrê  F  ss   € ð ˆ~ÑØˆ	ØÐ"Ñ"Ø�D‰yÐØÐ"Ñ"Ø�G‰|ÐØÐ"Ñ"Ø�G‰|ÐØÐ"Ñ"Ø�G‰|ÐØGÈÀxÐ
P€CÜ
�S‹/Ðrš   c                ó  — ddl m} | j                  j                  j                  }| j                  }d}t        ||«      r;t        | j                  |j                  «      r|j                  j                  d   }|S | j                  |j                  k(  rd}|S | j                  |j                  k7  rd}|S | j                  «       }| j                  }|j                  «       r8|j                  «       dk  r%t        d|j                  «      j                   dk(  }|S |j#                  «       r!t%        |j&                  j(                  «      }|S |j+                  «       r0dd	lm}  ||j0                  «      xr |j0                  j(                  }|S )
aŒ  Return whether indices of categories are semantically meaningful.

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

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

    Arguments:
        series: Input Series.

    Examples:
        >>> import narwhals as nw
        >>> import pandas as pd
        >>> import polars as pl
        >>> data = ["x", "y"]
        >>>
        >>> s_pd = nw.from_native(
        ...     pd.Series(data, dtype=pd.CategoricalDtype(ordered=True)), series_only=True
        ... )
        >>> nw.is_ordered_categorical(s_pd)
        True
        >>> s_pl = nw.from_native(
        ...     pl.Series(data, dtype=pl.Categorical()), series_only=True
        ... )
        >>> nw.is_ordered_categorical(s_pl)
        False
    r   )ÚInterchangeSeriesFÚ
is_orderedT)rU  é    zpl.CategoricalÚphysical)Úis_dictionary)Únarwhals._interchange.seriesrì  r­  rÊ   ræ   r"  ÚdtypeÚCategoricalr¹   Údescribe_categoricalr   rº  rS  r4  rÄ   r   Úorderingr0  rN  ÚcatÚorderedr@  Únarwhals._arrow.utilsrð  rš  )rú   rì  ræ   rÀ   rÛ  r¹   rh  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   rU  é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)rm  Ú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  rn  Ú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Ÿ   )rN  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  rn  r"  rN  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  )rN  r"  rm  )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,  rN  )r†  Úpreds     r›   rˆ  z3predicates_contains_list_of_bool.<locals>.<genexpr>1  s   è ø€ Ò=¨$Œz˜$¤×%Ñ=ùs   ‚©Úany)Ú
predicatess    r›   Ú predicates_contains_list_of_boolr3  .  s   € ô Ñ=°*Ô=Ó=Ð=rš   c                óx   — t        t        | «      xr% t        t        | «      d «      x}xr t	        ||«      «      S rŸ   )rN  r  ÚnextÚiterr"  )r»  r+  Úfirsts      r›   Úis_sequence_ofr8  4  s>   € äÜ Ó$ò 	"Üœ4 ›9 dÓ+Ð+ˆUò	"ä�u˜bÓ!óð rš   c                ó8   — t        | t        t        t        f«      S rŸ   )r"  rm  rs  Údictr  s    r›   Úis_nested_literalr;  =  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>  A  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•   )rp  Úkwdsr#  r  r)  Úfnr@  r?  s        €€€r›   Úwrapperz=deprecate_native_namespace.<locals>.decorate.<locals>.wrappera  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š   )rp  úP.argsrE  úP.kwargsr¦   r�   )r   )rF  rG  r@  r?  s   ` €€r›   Údecoratez,deprecate_native_namespace.<locals>.decorate`  s    ù€ Ü	ˆr‹ö	%ó 
ð	%ð* ˆrš   )rF  úCallable[P, R]r¦   rK  r™   )r?  r@  rJ  s   `` r›   Údeprecate_native_namespacerL  S  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_samplesrU  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   )rN  rQ  r)  s      r›   Ú_validate_rolling_argumentsrS  |  s‹   € ô �œS¨]Õ;Ü�œS¤$ t£*¸ÕGà�Q‚Ø;ˆÜ˜‹oÐàÐØ˜Š?Ø?ˆCÜ˜S“/Ð!à˜Ò$ØJˆCÜ'¨Ó,Ð,ð ˜Ð#Ð#ð "ˆà˜Ð#Ð#rš   c           
     ó¼  — 	 t        j                  «       j                  }|j                  «       j                  «       }t        d„ |D «       «      }|dz   |k  r§t        |t        | «      «      }dd|z  › d�}|t        | «      z
  }|dd	|dz  z  › | › d	|dz  |dz  z   z  › d
�z  }|dd|z  › d
�z  }||z
  dz  }||z
  dz  ||z
  dz  z   }	|D ]$  }
|dd	|z  › |
› d	|	|z   t        |
«      z
  z  › d
�z  }Œ& |dd|z  › d�z  }|S dt        | «      z
  }dd› dd	|dz  z  › | › d	|dz  |dz  z   z  › dd› d�	S # t        $ r# t	        t        j
                  dd«      «      }Y �Œ:w xY w)NÚCOLUMNSéP   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrŸ   )rn  )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Úmaxrn  )ÚheaderÚnative_reprÚterminal_widthÚnative_linesÚmax_native_widthÚlengthÚoutputÚheader_extraÚstart_extraÚ	end_extrarX  Údiffs               r›   Úgenerate_reprrq  ”  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   )ÚCounterrU  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:)rn  r  Úcollectionsrw  r£  Újoinr8   )r«   rw  r  ry  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›   rF  z$passthrough_column_names.<locals>.fnò  s   ø€ Øˆrš   )r–  r   r¦   r¬   r™   )r‘  rF  s   ` r›   Úpassthrough_column_namesr—  ñ  s   ø€ õð €Irš   r   Ú	_SENTINELc                ó0   — t        | |t        «      t        uS rŸ   )r   r˜  )r»  Úattrs     r›   Ú_hasattr_staticr›  û  s   € Ü˜#˜t¤YÓ/´yÐ@Ð@rš   c                ó   — t        | d«      S )NÚ__narwhals_dataframe__©r›  r  s    r›   Úis_compliant_dataframerŸ  ÿ  s   € ô ˜3Ð 8Ó9Ð9rš   c                ó   — t        | d«      S )NÚ__narwhals_lazyframe__rž  r  s    r›   Úis_compliant_lazyframer¢  
  s   € ô ˜3Ð 8Ó9Ð9rš   c                ó   — t        | d«      S )NÚ__narwhals_series__rž  r  s    r›   r  r    s   € ô ˜3Ð 5Ó6Ð6rš   c                óP   — t        | «      xr | j                  j                  «       S rŸ   )r  rò  Ú
is_integerr  s    r›   r  r    ó!   € ô ˜sÓ#Ò>¨¯	©	×(<Ñ(<Ó(>Ð>rš   c                óP   — t        | «      xr | j                  j                  «       S rŸ   )r  rò  Ú
is_booleanr  s    r›   r(  r(    r§  rš   c                ó6   — t        | d«      xr t        | d«      S )NrÀ   Ú	_accessorrž  r  s    r›   Ú_is_namespace_accessorr¬  "  s   € ô ˜3 Ó,ÒR´ÀÀkÓ1RÐRrš   c               ó    — | t         j                  t         j                  t         j                  t         j                  t         j
                  hv S )z.Return True if `impl` allows eager operations.)rÍ   r  r  r  r  r  ©rh  s    r›   Úis_eager_allowedr¯  ,  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±  7  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³  <  sS   € àÜ×ÑÜ×ÑÜ×ÑÜ×ÑÜ×ÑÜ×&Ñ&Ü×Ñðð ð rš   c                ó   — t        | d«      S )NrË  rž  r  s    r›   Úhas_native_namespacerµ  I  s   € Ü˜3Ð 6Ó7Ð7rš   c                ó   — t        | d«      S )NÚ__arrow_c_stream__rž  r  s    r›   Úsupports_arrow_c_streamr¸  M  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>a  s*   øè ø€ ò Ø8;˜C 7™Nˆ3ˆ%�ˆxÑ°Ó3ñùr   F)r  )r:  Úzip)r¼  Úright_onr½  Úright_keys_suffixeds   ` ` r›   Ú_remap_full_join_keysrÁ  Q  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¹   rx  ÚModuleNotFoundError)ÚdatarÃ  r�  r)  s       r›   Ú_into_arrow_tablerÈ  g  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™   )rF  s    r›   ÚunstablerÊ  w  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ÚZr0  )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£   rS  Ú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¡   rp  rE  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Ú   rL  )r£   útype[_T]rÞ  r’   r¦   rÚ   )r¢   z_T | Literal['raise'] | Noner£   ztype[_T] | Noner¦   r   )rp  r   rE  r   r¦   r   )rè  r>   r¦   r@   )r•   r–   r—   r»   rÖ  rÛ  rß  r¤   ræ  rO  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›   rK  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>*  s   è ø€ Ò8 1˜1˜#›Ñ8ùs   ‚)r{  rJ  s    r›   Ú_unparse_versionzrequires._unparse_version(  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_name,  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_context1  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¢   rj  r#  rô  Úfoundr)  s          r›   Ú_ensure_versionzrequires._ensure_version9  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¢   rp  rE  rF  r¡   s      €€r›   rG  z"requires.__call__.<locals>.wrapperI  s&   ø€ à× Ñ  Ô*Ù�hÐ. Ò.¨Ñ.Ð.rš   )r¢   r³   rp  rH  rE  rI  r¦   r�   )r•   rñ  r   )r¡   rF  rG  s   `` r›   ræ  zrequires.__call__D  s.   ù€ ð  Ÿ[™[ˆÔä	ˆr‹õ	/ó 
ð	/ð
 ˆrš   N)r�  )rõ  r’   rô  rÆ   r¦   r@   )rK  rÆ   r¦   r’   )rý  rF   r¦   rÚ   )r¢   r²   r¦   ztuple[tuple[int, ...], str])r¢   r²   r¦   rÚ   )rF  ú_Method[_IntoContextT, P, R]r¦   r  )r•   r–   r—   r»   r˜   rO  rK  Ú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 )NrU  )rÓ  rª  rÔ  rÕ  )Ú	str_slicer«   rÓ  rÔ  rÕ  s        r›   Úconvert_str_slice_to_int_slicer
  R  sZ   € ð /8¯o©oÐ.IˆG�M‰M˜)Ÿ/™/Ô*Èt€EØ09·±Ð0Jˆ7�=‰=˜Ÿ™Ó(¨1Ò,ÐPT€DØ�>‰>€DØ�4˜ÐÐrš   c               ó   ‡ — dˆ fd„}|S )zÍSteal the class-level docstring from parent and attach to child `__init__`.

    Returns:
        Decorated constructor.

    Notes:
        - Passes static typing (mostly)
        - Passes at runtime
    c               óÔ   •— | j                   dk(  r+t        t        ‰«      t        «      rt        ‰«      | _        | S dt
        j                   › d| j                  ›d‰›�}t        |«      ‚)NrÖ  z`@zL` is only allowed to decorate an `__init__` with a class-level doc.
Method: z	
Parent: )r•   r›  rš  r   r»   Úinherit_docr—   ry  )Ú
init_childr)  Ú	tp_parents     €r›   rJ  zinherit_doc.<locals>.decorateh  sp   ø€ Ø×Ñ *Ò,´¼DÀ»OÌTÔ1RÜ!'¨	Ó!2ˆJÔØÐà”×%Ñ%Ð&ð 'Ø!×.Ñ.Ð1ð 2Ø �mð%ð 	ô
 ˜‹nÐrš   )r  ú_Constructor[_T, P, R2]r¦   r  r™   )r  rJ  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›   rx  rx  v  sL   € Ü˜3¤Ô%‰¬4°«9€BØ Ÿm™m¨zÒ9ˆR�]Š]¸r€FØˆX�Q�r—{‘{�mÐ$×+Ñ+¨CÓ0Ð0rš   rO  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Ÿ   )rx  )r†  r+  s     r›   rˆ  zensure_type.<locals>.<genexpr>�  s   è ø€ ÒL¸"Ô1°"×5ÑLùrY  z	Expected z, got: z    é(   z(...)ú=r\  ú^r  N)r"  r{  rx  rá  rn  ry  )	r»  rP  Úvalid_typesÚtp_namesr)  Úleft_padr~  ÚassignÚ	underlines	            r›   rR  rR  |  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"  rs  )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&  r)  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_attrgetterr-  ¹  s%   € á(.ˆ3�8‰8�T�O˜F‘OÔ$°D€DÜ�dÓÐrš   c                ó&   —  t        |g|¢­Ž | «      S )z+Perform a nested attribute lookup on `obj`.)r-  )r»  Úname_1r,  s      r›   Údeep_getattrr0  ¿  s   € à+Œ?˜6Ð+ FÒ+¨CÓ0Ð0rš   c                  ó   — e Zd Zy)Ú	CompliantN)r•   r–   r—   r™   rš   r›   r2  r2  Ä  s   „ àrš   r2  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›   r4  r4  É  s   „ ñð0 Ú6ó Ù6rš   r4  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__ñ  r:  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__û  r=  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__  r:  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__  r?  rš   c                 ó   — y rŸ   r™   r    s      r›   r¤   z_Implementation.__get__	  r?  rš   c                 ó   — y rŸ   r™   r    s      r›   r¤   z_Implementation.__get__  s   € ð .1rš   c                 ó   — y rŸ   r™   r    s      r›   r¤   z_Implementation.__get__  s   € ØKNrš   c                 ó   — y rŸ   r™   r    s      r›   r¤   z_Implementation.__get__  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¦   rh   )r¢   zNarwhals[NativePandas]r£   r   r¦   rf   )r¢   zNarwhals[NativeModin]r£   r   r¦   re   )r¢   zNarwhals[NativeCuDF]r£   r   r¦   r^   )r¢   zNarwhals[NativePandasLike]r£   r   r¦   rg   )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¦   r`   )r¢   zNarwhals[NativeSQLFrame]r£   r   r¦   rk   )r¢   zNarwhals[NativeDask]r£   r   r¦   r_   )r¢   zNarwhals[NativeIbis]r£   r   r¦   rb   )r¢   z.Narwhals[NativePySpark | NativePySparkConnect]r£   r   r¦   z"_PySparkImpl | _PySparkConnectImpl)r¢   rÚ   r£   ztype[Narwhals[Any]]r¦   r@   )r¢   zDataFrame[Any] | Series[Any]r£   r   r¦   ra   )r¢   zLazyFrame[Any]r£   r   r¦   rc   )r¢   zNarwhals[Any] | Noner£   r   r¦   r   )r•   r–   r—   r»   rß  r   r¤   r™   rš   r›   r7  r7  æ  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š   r7  c                óp   — dd l }t        | |j                  «      r|j                  j	                  | «      S | S r  )r   r"  ÚRecordBatchReaderÚTableÚfrom_batches)ÚtblÚpas     r›   Úto_pyarrow_tablerS    s/   € Ûä�#�r×+Ñ+Ô,Ø�x‰x×$Ñ$ SÓ)Ð)Ø€Jrš   Úwin32c               óN   — t        | t        «      r| S t        t        | «      «      S rŸ   )r"  r’   r   ©Úsources    r›   Únormalize_pathrX  &  s   € Ü# F¬CÔ0ˆvÐG´c¼$¸v»,Ó6GÐGrš   c               ó4   — t        | «      j                  «       S rŸ   )r   Úas_posixrV  s    r›   rX  rX  /  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"  rN  rs  )r	  Ún_matchs     r›   Úextend_boolr]  3  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__C  s   € Ørš   NrL  )r•   r–   r—   Ú
no_defaultrÛ  r™   rš   r›   r_  r_  >  s   „ ð €Jôrš   r_  )rS  rÍ   r¦   rN  )r*  r’   r¦   r;   )rS  rÍ   r¦   rÆ   )rp  r   r¦   z	list[Any])rt  r   r¦   r   )rt  zAny | Iterable[Any]r¦   rN  )r~  zIterable[_T] | Anyr¦   zTypeIs[Iterator[_T]])rj  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Ž  rc  r�  rd  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Ž  rc  r�  re  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¦   rN  )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¦   rN  )r»  r†   rp  rN  rÚ  z
bool | strr¦   r†   )rè  rƒ  ré  r~   r¦   zint | float)rú   zSeries[Any]r¦   rN  )Únw)rü  rƒ  r«   úContainer[str]rý  r’   r¦   r’   )r	  r¨   r
  zIterable[str]r  rN  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»  rh  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]])r2  zCollection[Any]r¦   zTypeIs[Collection[list[bool]]])r»  r   r+  ré  r¦   ri  )r»  r   r¦   zTypeIs[NestedLiteral])r  úbool | NonerÀ  rj  r=  rN  r¦   rN  )r?  r’   r@  rN  r¦   z*Callable[[Callable[P, R]], Callable[P, R]])rN  rƒ  rQ  z
int | Noner¦   ztuple[int, int])rf  r’   rg  r’   r¦   r’   )r
  úCollection[str]r  rk  r¦   zColumnNotFoundError | None)r«   rk  r¦   rÚ   )rƒ  z$TimeUnit | Iterable[TimeUnit] | Noner„  z7str | timezone | Iterable[str | timezone | None] | Noner¦   z%tuple[Set[TimeUnit], Set[str | None]])
rò  rp   ræ   rv   r…  zSet[TimeUnit]r‡  zSet[str | None]r¦   rN  )r	  r¨   r¦   r¬   )r	  r¨   r‘  rg  r¦   r¬   )r‘  r¬   r¦   zEvalNames[Any])r»  r   rš  r’   r¦   rN  )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]])rh  rÍ   r¦   zTypeIs[_EagerAllowedImpl])rh  rÍ   r¦   zTypeIs[_LazyFrameCollectImpl])rh  rÍ   r¦   zTypeIs[_LazyAllowedImpl])r»  r   r¦   zTypeIs[SupportsNativeNamespace])r»  r   r¦   zTypeIs[ArrowStreamExportable])r¼  rk  r¿  rk  r½  r’   r¦   zdict[str, str])rÇ  rY   rÃ  rÐ   r¦   úpa.Table)rF  r‹   r¦   r‹   )rÎ  r’   r¦   rN  )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  rL  rP  r’   r¦   rÚ   )rš  r’   r,  r’   r¦   zattrgetter[Any])r»  r   r/  r’   r,  r’   r¦   r   )rQ  zpa.Table | pa.RecordBatchReaderr¦   rl  )rW  rw   r¦   r’   )r	  zbool | Iterable[bool]r\  rƒ  r¦   zSequence[bool]('  Ú
__future__r   r_  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:   Útypesr;   r<   r=   rý   r{  r  r|  r   rR  Útyping_extensionsr>   r?   r@   rA   Únarwhals._compliantrB   rC   rD   Ú!narwhals._compliant.any_namespacerE   Únarwhals._compliant.typingrF   rG   rH   rI   rá   rK   Únarwhals._nativerL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   Únarwhals._translaterX   rY   rZ   Únarwhals._typingr[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rí   rm   rn   r™  rp   r÷   rr   Únarwhals.typingrs   rt   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Í   rT  r  r  r  r  r  r  r  r  r  r  r  r_  r'  r(  rK  rq  ru  ro  r  rg  r�  r¤  r¸  r¾  rÈ  rÎ  rÑ  rÌ  rÜ  rê  rù  rÿ  rþ  r  r  r  r  r  r   r#  r  r&  r)  r,  r3  r8  r;  r>  rL  rS  rq  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  rx  rR  r   r-  r0  r2  r4  r7  rS  ÚplatformrX  r]  r_  rb  r`  rš  r  r™   rš   r›   ú<module>r‰     sÆ	  ðÞ "ã 	Û 	Û 
÷÷ ñ õ ß ß -Ñ -Ý $ß *Ý Ý Ý ÷
÷ 
õ 
õ &Ý :ß <÷÷ ÷ ÷ ÷ ñ ÷* [Ñ ZâÝ#Ý ß-ãÛÛß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ð<ØðØ.=ðàóó"ð"Ø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š   