§
    ÚóÉj3 ã                  óV  — 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" 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/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZG d dlHmIZImJZJmKZKmLZL e$�r‡d dlmMZM d dlNmOZO d dl#mPZPmQZQmRZR d dlSZTd dlUZVd dlWZXd dlYmZZZm[Z[m\Z\m]Z] d dl^m_Z_m`Z`maZa d dlbmcZc d dldmeZemfZfmgZgmhZh d dlimjZj d dlkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZw d dlxmyZymzZzm{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Ž 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¨m©Z©mªZª  e*d"e‘e%         e�e%         z  e•e%         z  ¬#¦  «        Z« e*d$¦  «        Z¬ e*d%¦  «        Z­ e*d&¦  «        Z® e*d'd(¬#¦  «        Z¯ e[d)¦  «        Z° e*d*¦  «        Z± e*d+¦  «        Z² e*d,¦  «        Z³ G d-„ d.e)¦  «        Z´ G d/„ d0e)¦  «        Zµ G d1„ d2e)¦  «        Z¶ e*d3¦  «        Z· e*d4d5¬6¦  «        Z¸ e*d7d5¬6¦  «        Z¹d8Zºd9e»d:<    e*d;eº¬#¦  «        Z¼d<Z½d9e»d=<   d>Z¾d9e»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Ç edR¬S¦  «        �d¨dW„¦   «         ZÈ edR¬S¦  «        �d©dY„¦   «         ZÉ edR¬S¦  «        �dªd[„¦   «         ZÊ edR¬S¦  «        �d«d]„¦   «         ZË edR¬S¦  «        �d¬d_„¦   «         ZÌ G d`„ dae.¦  «        ZÍ�d­dd„ZÎeÍjÏ        deeÍjÐ        dfeÍjÑ        dgeÍjÒ        dheÍjÓ        dieÍjÔ        dieÍjÕ        djeÍjÖ        dkeÍj×        dleÍjØ        dmeÍjÙ        dniZÚdoe»dp<   eÍjÖ        dqeÍjÐ        dreÍjÓ        dseÍjÔ        dtiZÛdue»dv<   	  edw¬S¦  «        �d®d{„¦   «         ZÜe�d¯d}„¦   «         ZÝ�d°d�„ZÞ�d±dƒ„Zß�d²d…„Zà�d³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ã�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É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ù„Zÿdúdûdüœ�dÚ�d „�Z �dÛ�d„�Z�dÜ�d„�Z�dÝ�d„�Z�dÞ�d„�Z�dß�d„�Z�dà�d„�Z�dá�d!„�Z�dâ�d#„�Z�dã�d%„�Z	�dä�d'„�Z
 �e¦   «         �Z�d(e»�d)<   �då�d+„�Z�dæ�d.„�Z�dç�d1„�Z�dè�d4„�Z�dè�d5„�Z�dè�d6„�Z�dé�d8„�Z�dê�d;„�Z�dë�d=„�Z�dì�d?„�Z�dí�dA„�Z�dî�dC„�Z�dï�dH„�Z�dð�dM„�Z�dñ�dO„�Z�dò�dQ„�Z G �dR„ �dS¦  «        �Z	 �dó�dô�dX„�Z�dõ�d[„�Z G �d\„ �d]¦  «        �Z �dö�da„�Z! G �db„ �dce)¦  «        �Z" e*�dd�e"¬#¦  «        �Z#�d÷�dg„�Z$�dø�dk„�Z%�dù�dm„�Z&dú�dnœ�dú�dr„�Z' G �ds„ �dte'e·         ¦  «        �Z( e�du¬S¦  «        �dû�dx„¦   «         �Z)�dü�dz„�Z* G �d{„ �d|e¿e¸         eÃe)e¸         ¦  «        �Z+ G �d}„ �d~e)e¸         ¦  «        �Z, G �d„ �d€¦  «        �Z-�dý�dƒ„�Z.�dþ�d‡„�Z/�dÿ�dŠ„�Z0�d �dŒ„�Z1�d�d’„�Z2�d�d•„�Z3�d�d›„�Z4e�j5        �dœk    r�d�dž„�Z6n�d�dŸ„�Z6�d�d¡„�Z7�d�d¥„�Z8 G �d¦„ �d§e¦  «        �Z9�e9�j:        �Z;�e;�Z: �e<d¦  «        �Z=dS (  é    )ÚannotationsN)ÚCallableÚ
CollectionÚ	ContainerÚIterableÚIteratorÚMappingÚSequence)Útimezone)ÚEnumÚauto)ÚcacheÚ	lru_cacheÚwraps)Ú	find_spec)Úgetattr_staticÚgetdoc)ÚIOBase)Ú
attrgetter)ÚPath)Ú	token_hex)	ÚTYPE_CHECKINGÚAnyÚFinalÚGenericÚLiteralÚProtocolÚTypeVarÚcastÚoverload)Ú
NoAutoEnum)Úissue_deprecation_warning)Úassert_neverÚ
deprecated)Úget_cudfÚget_dask_dataframeÚ
get_duckdbÚget_ibisÚ	get_modinÚ
get_pandasÚ
get_polarsÚget_pyarrowÚget_pyspark_connectÚget_pyspark_sqlÚget_sqlframeÚis_narwhals_seriesÚis_narwhals_series_boolÚis_narwhals_series_intÚis_numpy_array_1dÚis_numpy_array_1d_boolÚis_numpy_array_1d_intÚis_pandas_like_dataframeÚis_pandas_like_series)ÚColumnNotFoundErrorÚDuplicateErrorÚInvalidOperationErrorÚ
ShapeError)ÚSet)Ú
ModuleType)ÚIOÚ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Ú
PluginNameÚ
_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ÚNormalizedPathÚNormalizedSourceÚSingleIndexSelectorÚSizedMultiBoolSelectorÚSizedMultiIndexSelectorÚSizeUnitÚSupportsNativeNamespaceÚTimeUnitÚ_1DArrayÚ_SliceIndexÚ
_SliceNameÚ
_SliceNoneÚFrameOrSeriesT)ÚboundÚ_T1Ú_T2Ú_T3Ú_FnzCallable[..., Any]ÚPÚRÚR1ÚR2c                  ó   — e Zd ZU ded<   dS )Ú_SupportsVersionÚstrÚ__version__N©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úr/home/lighthouse/badge-speaker-benchmark/.benchmark-venv-community/lib/python3.11/site-packages/narwhals/_utils.pyr–   r–       s   € € € € € € ØÐÐÑÐÐrŸ   r–   c                  ó   — e Zd Zdd	d„ZdS )
Ú_SupportsGetNÚinstancer   Úownerú
Any | NoneÚreturnc               ó   — d S ©Nrž   ©Úselfr£   r¤   s      r    Ú__get__z_SupportsGet.__get__¤   ó   € € € rŸ   r¨   )r£   r   r¤   r¥   r¦   r   )rš   r›   rœ   r«   rž   rŸ   r    r¢   r¢   £   s   € € € € € ØQÐQÐQÐQÐQÐQÐQrŸ   r¢   c                  ó&   — e Zd Zedd„¦   «         ZdS )Ú_StoresColumnsr¦   úSequence[str]c                ó   — d S r¨   rž   ©rª   s    r    Úcolumnsz_StoresColumns.columns§   s   € Ø,/¨CrŸ   N)r¦   r¯   )rš   r›   rœ   Úpropertyr²   rž   rŸ   r    r®   r®   ¦   s&   € € € € € Ø	Ø/Ð/Ð/ñ 
ŒØ/Ð/Ð/rŸ   r®   Ú_TÚ
NativeT_coT)Ú	covariantÚCompliantT_coz._FullContext | NamespaceAccessor[_FullContext]r@   Ú_IntoContextÚ_IntoContextTz*Callable[Concatenate[_IntoContextT, P], R]Ú_Methodz Callable[Concatenate[_T, P], R2]Ú_Constructorc                  ó*   — e Zd ZdZedd„¦   «         ZdS )Ú_StoresNativez’Provides access to a native object.

    Native objects have types like:

    >>> from pandas import Series
    >>> from pyarrow import Table
    r¦   rµ   c                ó   — dS )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½   ´   ó>   € € € € € ðð ð ðð ð ñ „Xðð ð rŸ   r½   c                  ó*   — e Zd ZdZedd„¦   «         ZdS )Ú_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
    r¦   r·   c                ó   — dS )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dS )Ú_StoresBackendVersionr¦   útuple[int, ...]c                ó   — dS )z#Version tuple for a native package.Nrž   r±   s    r    Ú_backend_versionz&_StoresBackendVersion._backend_versionÓ   rÀ   rŸ   N©r¦   rÉ   )rš   r›   rœ   r³   rË   rž   rŸ   r    rÈ   rÈ   Ò   s2   € € € € € Øðð ð ñ „Xðð ð rŸ   rÈ   c                  ó   — e Zd ZU ded<   dS )Ú_StoresVersionÚVersionÚ_versionNr™   rž   rŸ   r    rÎ   rÎ   Ù   s   € € € € € € ØÐÐÑØ,Ð,rŸ   rÎ   c                  ó   — e Zd ZU ded<   dS )Ú_StoresImplementationÚImplementationÚ_implementationNr™   rž   rŸ   r    rÒ   rÒ   Þ   s   € € € € € € Ø#Ð#Ð#Ñ#ØIÐIrŸ   rÒ   c                  ó   — e Zd ZdZdS )Ú_LimitedContextzEProvides 2 attributes.

    - `_implementation`
    - `_version`
    N©rš   r›   rœ   rÁ   rž   rŸ   r    rÖ   rÖ   ã   ó   € € € € € ðð ð ð rŸ   rÖ   c                  ó   — e Zd ZdZdS )Ú_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dS )ÚValidateBackendVersionz=Ensure the target `Implementation` is on a supported version.r¦   ÚNonec                ó8   — | j                              ¦   «         }dS )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Ô3ˆˆˆrŸ   N)r¦   rÝ   )rš   r›   rœ   rÁ   rà   rž   rŸ   r    rÜ   rÜ   ó   s.   € € € € € ØGÐGð4ð 4ð 4ð 4ð 4ð 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dS )rÏ   r¦   útype[Namespace[Any]]c                ó    — t          | ¦  «        S r¨   )Ú_version_namespacer±   s    r    Ú	namespacezVersion.namespace  ó   € å! $Ñ'Ô'Ð'rŸ   rz   c                ó    — t          | ¦  «        S r¨   )Ú_version_dtypesr±   s    r    ÚdtypeszVersion.dtypes  ó   € å˜tÑ$Ô$Ð$rŸ   útype[DataFrame[Any]]c                ó    — t          | ¦  «        S r¨   )Ú_version_dataframer±   s    r    Ú	dataframezVersion.dataframe  ræ   rŸ   útype[LazyFrame[Any]]c                ó    — t          | ¦  «        S r¨   )Ú_version_lazyframer±   s    r    Ú	lazyframezVersion.lazyframe  ræ   rŸ   útype[Series[Any]]c                ó    — t          | ¦  «        S r¨   )Ú_version_seriesr±   s    r    ÚserieszVersion.series  rê   rŸ   N)r¦   râ   )r¦   rz   )r¦   rë   )r¦   rï   )r¦   ró   )rš   r›   rœ   r   ÚV1ÚV2ÚMAINr³   rå   ré   rî   rò   rö   rž   rŸ   r    rÏ   rÏ   ÿ   sÓ   € € € € € Ø	ˆ‰Œ€BØ	ˆ‰Œ€BØˆ4‰6Œ6€Dàð(ð (ð (ñ „Xð(ð ð%ð %ð %ñ „Xð%ð ð(ð (ð (ñ „Xð(ð ð(ð (ð (ñ „Xð(ð ð%ð %ð %ñ „Xð%ð %ð %rŸ   rÏ   é   )ÚmaxsizeÚversionr¦   râ   c               ój   — | 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÷   Únarwhals.stable.v1._namespacerN   rø   Únarwhals.stable.v2._namespaceÚnarwhals._namespace)rü   ÚNamespaceV1ÚNamespaceV2rN   s       r    rä   rä     sd   € à•'”*ÐÐØJÐJÐJÐJÐJÐJàÐØ•'”*ÐÐØJÐJÐJÐJÐJÐJàÐØ-Ð-Ð-Ð-Ð-Ð-àÐrŸ   rz   c               ój   — | t           j        u rddlm} |S | t           j        u rddlm} |S ddlm} |S )Nr   )ré   )rÏ   r÷   Únarwhals.stable.v1ré   rø   Únarwhals.stable.v2Únarwhals)rü   Ú	dtypes_v1Ú	dtypes_v2ré   s       r    rè   rè   (  sc   € à•'”*ÐÐØ:Ð:Ð:Ð:Ð:Ð:àÐØ•'”*ÐÐØ:Ð:Ð:Ð:Ð:Ð:àÐØÐÐÐÐÐà€MrŸ   rë   c               ój   — | 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  rq   rø   r  Únarwhals.dataframe)rü   ÚDataFrameV1ÚDataFrameV2rq   s       r    rí   rí   7  ód   € à•'”*ÐÐØ?Ð?Ð?Ð?Ð?Ð?àÐØ•'”*ÐÐØ?Ð?Ð?Ð?Ð?Ð?àÐØ,Ð,Ð,Ð,Ð,Ð,àÐrŸ   rï   c               ój   — | t           j        u rddlm} |S | t           j        u rddlm} |S ddlm} |S )Nr   )rr   )rÏ   r÷   r  rr   rø   r  r
  )rü   ÚLazyFrameV1ÚLazyFrameV2rr   s       r    rñ   rñ   F  r  rŸ   ró   c               ój   — | t           j        u rddlm} |S | t           j        u rddlm} |S ddlm} |S )Nr   ru   )rÏ   r÷   r  rv   rø   r  Únarwhals.series)rü   ÚSeriesV1ÚSeriesV2rv   s       r    rõ   rõ   U  sa   € à•'”*ÐÐØ9Ð9Ð9Ð9Ð9Ð9àˆØ•'”*ÐÐØ9Ð9Ð9Ð9Ð9Ð9àˆØ&Ð&Ð&Ð&Ð&Ð&à€MrŸ   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d0d„¦   «         Zd1d„Zd2d„Zd2d„Zd2d„Zd2d „Zd2d!„Zd2d"„Zd2d#„Zd2d$„Zd2d%„Zd2d&„Zd2d'„Z d2d(„Z!d2d)„Z"d3d+„Z#d,S )4rÓ   z?Implementation of native object (pandas, Polars, PyArrow, ...).ÚpandasÚmodinÚcudfÚpyarrowÚpysparkÚpolarsÚdaskÚduckdbÚibisÚsqlframezpyspark[connect]Úunknownr¦   r—   c                ó*   — t          | j        ¦  «        S r¨   )r—   Úvaluer±   s    r    Ú__str__zImplementation.__str__€  s   € Ý�4”:‰ŒÐrŸ   Úclsú
type[Self]Únative_namespacer=   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}|                     |t          j        ¦  «        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)r$  r&  Úmappings      r    Úfrom_native_namespacez$Implementation.from_native_namespaceƒ  s¯   € õ ‰LŒL�.Ô/Ý‰KŒK�Ô-Ý‰JŒJ�Ô+Ý‰MŒM�>Ô1ÝÑÔ�~Ô5Ý‰LŒL�.Ô/ÝÑ Ô ¥.Ô"5Ý‰LŒL�.Ô/Ý‰JŒJ�Ô+Ý‰NŒN�NÔ3ÝÑ!Ô!¥>Ô#Að
ˆð �{Š{Ð+­^Ô-CÑDÔDÐDrŸ   Úbackend_namec                ó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Ó   r4  )r$  r7  s     r    Úfrom_stringzImplementation.from_string›  sA   € ð	*Ø�3�|Ñ$Ô$Ð$øÝð 	*ð 	*ð 	*Ý!Ô)Ð)Ð)Ð)ð	*øøøs   ‚
 �&¥&Úbackendú!IntoBackend[Backend | PluginName]c                ó®   — t          |t          ¦  «        r|                      |¦  «        n+t          |t          ¦  «        r|n|                      |¦  «        S )z¢Instantiate from native namespace module, string, or Implementation.

        Arguments:
            backend: Backend to instantiate Implementation from.
        )Ú
isinstancer—   r:  rÓ   r6  )r$  r;  s     r    Úfrom_backendzImplementation.from_backend§  sU   € õ ˜'¥3Ñ'Ô'ð4ˆC�OŠO˜GÑ$Ô$Ð$õ ˜'¥>Ñ2Ô2ð4��à×*Ò*¨7Ñ3Ô3ð	
rŸ   c                óÆ   — | t           j        u rd}t          |¦  «        ‚|                      ¦   «          t                               | | j        ¦  «        }t          |¦  «        S )zCReturn the native namespace module corresponding to Implementation.z:Cannot return native namespace from UNKNOWN Implementation)rÓ   r4  ÚAssertionErrorrË   Ú_IMPLEMENTATION_TO_MODULE_NAMEr3  r"  Ú_import_native_namespace)rª   ÚmsgÚmodule_names      r    Úto_native_namespacez"Implementation.to_native_namespace¸  sZ   € à•>Ô)Ð)Ð)ØNˆCÝ  Ñ%Ô%Ð%à×ÒÑÔÐÝ4×8Ò8¸¸t¼zÑJÔJˆÝ'¨Ñ4Ô4Ð4rŸ   Úboolc                ó   — | 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                óL   — | 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Å^ÔEXÐYÐYÐYrŸ   c                óL   — | 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,  r1  r2  r±   s    r    Úis_spark_likezImplementation.is_spark_likeÜ  s(   € ð ÝÔ"ÝÔ#ÝÔ*ð
ð 
ð 	
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í  rJ  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Ó   r2  r±   s    r    Úis_pyspark_connectz!Implementation.is_pyspark_connect!  s   € ð •~Ô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.  rX  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;  rS  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_duckdbH  rJ  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Ó   r0  r±   s    r    Úis_ibiszImplementation.is_ibisU  rS  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Ó   r1  r±   s    r    Úis_sqlframezImplementation.is_sqlframeb  s   € ð •~Ô.Ð.Ð.rŸ   rÉ   c                ó    — t          | ¦  «        S )zReturns backend version.©Úbackend_versionr±   s    r    rË   zImplementation._backend_versiono  rê   rŸ   N©r¦   r—   )r$  r%  r&  r=   r¦   rÓ   )r$  r%  r7  r—   r¦   rÓ   )r$  r%  r;  r<  r¦   rÓ   )r¦   r=   )r¦   rG  rÌ   )$rš   r›   rœ   rÁ   r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r4  r#  Úclassmethodr6  r:  r?  rF  rI  rL  rN  rP  rR  rU  rW  rZ  r\  r^  r`  rb  rd  rË   rž   rŸ   r    rÓ   rÓ   d  s"  € € € € € ØIÐIà€FØ Ø€EØØ€DØØ€GØ!Ø€GØ!Ø€FØ Ø€DØØ€FØ Ø€DØØ€HØ"Ø(€OØ)Ø€GØ!ðð ð ð ð ðEð Eð Eñ „[ðEð. ð	*ð 	*ð 	*ñ „[ð	*ð ð
ð 
ð 
ñ „[ð
ð 5ð 5ð 5ð 5ð-ð -ð -ð -ðZð Zð Zð Zð
ð 
ð 
ð 
ð"-ð -ð -ð -ð+ð +ð +ð +ð,ð ,ð ,ð ,ð.ð .ð .ð .ð6ð 6ð 6ð 6ð.ð .ð .ð .ð+ð +ð +ð +ð-ð -ð -ð -ð+ð +ð +ð +ð/ð /ð /ð /ð%ð %ð %ð %ð %ð %rŸ   rÓ   ÚimplementationrG  c                ó‚   — |                       ¦   «         p|                      ¦   «         o|                      ¦   «         dk     S )zJWhether implementation is PySpark (or PySpark Connect) with version < 4.0.)é   r   )rW  rZ  rË   ©rj  s    r    Úis_pyspark_pre_4rn  t  sB   € ð 	×!Ò!Ñ#Ô#ÐJ ~×'HÒ'HÑ'JÔ'Jð5à
×
)Ò
)Ñ
+Ô
+¨fÒ
4ð5rŸ   )é   rú   rl  )r   é   r   )é   é
   )é   )rú   é   )r   é   rl  )iè  é   )ro  ro  )é   )rú   rp  r   z(Mapping[Implementation, tuple[int, ...]]ÚMIN_VERSIONSzdask.dataframezmodin.pandaszpyspark.sqlzpyspark.sql.connectzMapping[Implementation, str]rB  é   rE  r—   r=   c                ó$   — ddl m}  || ¦  «        S )Nr   )Úimport_module)Ú	importlibr{  )rE  r{  s     r    rC  rC  ’  s$   € à'Ð'Ð'Ð'Ð'Ð'àˆ=˜Ñ%Ô%Ð%rŸ   rÉ   c               ó   — t          | t          ¦  «        st          | ¦  «         | t          j        u rdS | }t                               ||j        ¦  «        }t          |¦  «        }|                     ¦   «         rdd l	}|j
        }nL|                     ¦   «         s|                     ¦   «         rdd l}|}n|                     ¦   «         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#   r4  rB  r3  r"  rC  rd  Úsqlframe._versionrÐ   rW  rZ  r  r^  r  Úparse_versionrx  r9  )rj  ÚimplrE  r&  r  Úinto_versionr  r  rü   Úmin_versionrD  s              r    rg  rg  œ  s4  € å�n¥nÑ5Ô5ð %Ý�^Ñ$Ô$Ð$Ø�Ô/Ð/Ð/Øˆyà€DÝ0×4Ò4°T¸4¼:ÑFÔF€KÝ/°Ñ<Ô<ÐØ×ÒÑÔð (Ø Ð Ð Ð àÔ(ˆˆØ	�ŠÑ	Ô	ð 	(˜d×5Ò5Ñ7Ô7ð 	(ØˆˆˆàˆˆØ	�Š‰Œð (Øˆˆˆàˆˆà'ˆÝ˜LÑ)Ô)€GØ¥¨dÔ!3Ð3�+Ò4Ð4Øc DÐcÐcÀKÐcÐcÐZaÐcÐcˆÝ˜‰oŒoÐØ€NrŸ   Úargsr   ú	list[Any]c                ó€   — t          t          | ¦  «        dk    rt          | d         ¦  «        r| d         n| ¦  «        S )Nro  r   )ÚlistÚlenÚ_is_iterable)rƒ  s    r    Úflattenr‰  »  s6   € Ý�C ™IœI¨šN˜N­|¸DÀ¼GÑ/DÔ/D˜N��Q”�È4ÑPÔPÐPrŸ   Úargc                óD   — t          | t          t          f¦  «        s| fS | S r¨   )r>  r†  Útuple)rŠ  s    r    Útupleifyr�  ¿  s$   € Ý�c�D¥%˜=Ñ)Ô)ð ØˆvˆØ€JrŸ   úAny | Iterable[Any]c                ó€  — ddl m} t          ¦   «         x}�t          | |j        |j        f¦  «        s8t          ¦   «         x}�Jt          | |j        |j        |j        |j        f¦  «        r"dt          | ¦  «        ›d�}t          |¦  «        ‚t          | t          ¦  «        ot          | t          t          |f¦  «         S )Nr   ru   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  rv   r*   r>  rq   r+   ÚExprrr   Úqualified_type_nameÚ	TypeErrorr   r—   Úbytes)rŠ  rv   ÚpdÚplrD  s        r    rˆ  rˆ  Å  sÊ   € Ø&Ð&Ð&Ð&Ð&Ð&õ ‰|Œ|Ð	ˆÐ(­Z¸¸b¼iÈÌÐ=VÑ-WÔ-WÐ(å‰|Œ|Ð	ˆÐ(Ý�s˜RœY¨¬°´¸r¼|ÐLÑMÔMð 	)ð
3Õ7JÈ3Ñ7OÔ7Oð 3ð 3ð 3ð 	õ ˜‰nŒnÐå�c�8Ñ$Ô$ÐR­Z¸½cÅ5È&Ð=QÑ-RÔ-RÐ)RÐRrŸ   ÚvalúIterable[_T] | AnyúTypeIs[Iterator[_T]]c                ó,   — t          | t          ¦  «        S r¨   )r>  r   )r–  s    r    Úis_iteratorrš  Ú  s   € Ý�c�8Ñ$Ô$Ð$rŸ   ú#str | ModuleType | _SupportsVersionc                óÂ   — t          | t          ¦  «        r| n| j        }t          j        dd|¦  «        }t          d„ |                     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|¦  «        ¦  «        V — Œ(dS )z\Dr�  N)ÚintÚreÚsub)Ú.0Úvs     r    ú	<genexpr>z parse_version.<locals>.<genexpr>é  s8   è è € ÐKÐK¨q••R”V˜E 2 qÑ)Ô)Ñ*Ô*ÐKÐKÐKÐKÐKÐKrŸ   ú.)r>  r—   r˜   r   r¡  rŒ  Úsplit)rü   Úversion_strs     r    r  r  Þ  s]   € õ (¨µÑ5Ô5ÐN�'�'¸7Ô;N€KÝ”&˜¨¨[Ñ9Ô9€KÝÐKÐK°K×4EÒ4EÀcÑ4JÔ4JÐKÑKÔKÑKÔKÐKrŸ   Ú
obj_or_clsÚtypeÚcls_or_tupleútype[_T]úTypeIs[type[_T]]c                ó   — d S r¨   rž   ©r¨  rª  s     r    Úisinstance_or_issubclassr¯  ì  s	   € ð �srŸ   úobject | typeúTypeIs[_T | type[_T]]c                ó   — d S r¨   rž   r®  s     r    r¯  r¯  ò  ó	   € ð  ˜CrŸ   útuple[type[_T1], type[_T2]]úTypeIs[type[_T1 | _T2]]c                ó   — d S r¨   rž   r®  s     r    r¯  r¯  ø  s	   € ð "˜crŸ   ú#TypeIs[_T1 | _T2 | type[_T1 | _T2]]c                ó   — d S r¨   rž   r®  s     r    r¯  r¯  þ  s	   € ð +.¨#rŸ   ú&tuple[type[_T1], type[_T2], type[_T3]]úTypeIs[type[_T1 | _T2 | _T3]]c                ó   — d S r¨   rž   r®  s     r    r¯  r¯    s	   € ð %( CrŸ   ú/TypeIs[_T1 | _T2 | _T3 | type[_T1 | _T2 | _T3]]c                ó   — d S r¨   rž   r®  s     r    r¯  r¯  
  s	   € ð 7:°crŸ   útuple[type, ...]úTypeIs[Any]c                ó   — d S r¨   rž   r®  s     r    r¯  r¯    s	   € ð �#rŸ   c                ó¸   — ddl m} t          | |¦  «        rt          | |¦  «        S t          | |¦  «        p$t          | t          ¦  «        ot	          | |¦  «        S )Nr   rs   )Únarwhals.dtypesrt   r>  r©  Ú
issubclass)r¨  rª  rt   s      r    r¯  r¯    si   € Ø%Ð%Ð%Ð%Ð%Ð%å�*˜eÑ$Ô$ð 4Ý˜* lÑ3Ô3Ð3Ý�j ,Ñ/Ô/ð Ý�:�tÑ$Ô$ÐM­°JÀÑ)MÔ)MðrŸ   ÚitemsúIterable[Any]rÝ   c                óÂ   ‡‡— ddl mŠmŠ t          ˆfd„| D ¦   «         ¦  «        st          ˆfd„| D ¦   «         ¦  «        rd S dd„ | D ¦   «         › �}t	          |¦  «        ‚)Nr   rp   c              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r¨   ©r>  )r¢  Úitemrq   s     €r    r¤  z$validate_laziness.<locals>.<genexpr>#  s-   øè è € Ð
9Ð
9¨4�:�d˜IÑ&Ô&Ð
9Ð
9Ð
9Ð
9Ð
9Ð
9rŸ   c              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r¨   rÈ  )r¢  rÉ  rr   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: c                ó,   — g | ]}t          |¦  «        ‘ŒS rž   )r©  )r¢  rÉ  s     r    ú
<listcomp>z%validate_laziness.<locals>.<listcomp>'  s#   € ÐTrÐTrÐTrÐdhÕUYÐZ^ÑU_ÔU_ÐTrÐTrÐTrrŸ   )r
  rq   rr   Úallr’  )rÄ  rD  rq   rr   s     @@r    Úvalidate_lazinessrÎ     s–   øø€ Ø7Ð7Ð7Ð7Ð7Ð7Ð7Ð7å
Ð
9Ð
9Ð
9Ð
9°5Ð
9Ñ
9Ô
9Ñ9Ô9ð ÝÐ:Ð:Ð:Ð:°EÐ:Ñ:Ô:Ñ:Ô:ðð 	ˆØ
tÐTrÐTrÐlqÐTrÑTrÔTrÐ
tÐ
t€CÝ
�C‰.Œ.ÐrŸ   ÚlhsÚrhsú-Series[Any] | DataFrame[Any] | LazyFrame[Any]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	                 ¦  «        ¦  «        S t          t          |d	d
¦  «        |¦  «        r¤t          t          |dd
¦  «        |¦  «        r… ||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	                 ¦  «        ¦  «        S t          t          |dd
¦  «        |¦  «        r¤t          t          |dd
¦  «        |¦  «        r… ||j        j        j	        ¦  «          ||j        j        j	        ¦  «         | 
                    |j                             |j        j        j        |j        j        j	                 ¦  «        ¦  «        S t          |¦  «        t          |¦  «        k    r1d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)ÚPandasLikeSeriesÚindexr   r¦   rÝ   c                ó6   — | j         sd}t          |¦  «        ‚d S )Nz'given index doesn't have a unique index)Ú	is_uniquer9  )rÕ  rD  s     r    Ú_validate_indexz*maybe_align_index.<locals>._validate_indexL  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Ú  r‡  r9  )rÏ  rÐ  rÓ  rÔ  rØ  Úlhs_anyÚrhs_anyrD  s           r    Úmaybe_align_indexrã  +  s¿  € ð< DÐCÐCÐCÐCÐCØ=Ð=Ð=Ð=Ð=Ð=ð"ð "ð "ð "õ
 �5˜#ÑÔ€GÝ�5˜#ÑÔ€GÝÝ�Ð+¨TÑ2Ô2Ð4Gñô ð 	
å
•W˜WÐ&8¸$Ñ?Ô?ÐATÑ
UÔ
Uð	
ð 	ˆ˜Ô0Ô7Ô=Ñ>Ô>Ð>Øˆ˜Ô0Ô7Ô=Ñ>Ô>Ð>Ø×&Ò&ØÔ$×1Ò1ØÔ(Ô/Ô3°GÔ4LÔ4SÔ4YÔZñô ñ
ô 
ð 	
õ
 Ý�Ð+¨TÑ2Ô2Ð4Gñô ð 
å
•W˜WÐ&9¸4Ñ@Ô@ÐBRÑ
SÔ
Sð
ð 	ˆ˜Ô0Ô7Ô=Ñ>Ô>Ð>Øˆ˜Ô1Ô8Ô>Ñ?Ô?Ð?Ø×&Ò&ØÔ$×1Ò1ØÔ(Ô/Ô3ØÔ-Ô4Ô:ôñô ñ
ô 
ð 	
õ Ý�Ð,¨dÑ3Ô3Ð5Eñô ð 
å
•W˜WÐ&8¸$Ñ?Ô?ÐATÑ
UÔ
Uð
ð 	ˆ˜Ô1Ô8Ô>Ñ?Ô?Ð?Øˆ˜Ô0Ô7Ô=Ñ>Ô>Ð>Ø×&Ò&ØÔ%×2Ò2ØÔ)Ô0Ô4ØÔ,Ô3Ô9ôñô ñ
ô 
ð 	
õ Ý�Ð,¨dÑ3Ô3Ð5Eñô ð 
å
•W˜WÐ&9¸4Ñ@Ô@ÐBRÑ
SÔ
Sð
ð 	ˆ˜Ô1Ô8Ô>Ñ?Ô?Ð?Øˆ˜Ô1Ô8Ô>Ñ?Ô?Ð?Ø×&Ò&ØÔ%×2Ò2ØÔ)Ô0Ô4ØÔ-Ô4Ô:ôñô ñ
ô 
ð 	
õ ˆ7�|„|•s˜7‘|”|Ò#Ð#ØhÅsÈ7Á|Ä|ÐhÐhÕZ]Ð^eÑZfÔZfÐhÐhˆÝ˜‰oŒoÐØ€JrŸ   Úobjú-DataFrame[Any] | LazyFrame[Any] | Series[Any]r¥   c                ó˜   — t          d| ¦  «        }|                     ¦   «         }t          |¦  «        st          |¦  «        r|j        S dS )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_nativer6   r7   rÕ  )rä  Úobj_anyÚ
native_objs      r    Úmaybe_get_indexrê  ‡  sR   € õ4 �5˜#ÑÔ€GØ×"Ò"Ñ$Ô$€JÝ 
Ñ+Ô+ð  Õ/DÀZÑ/PÔ/Pð  ØÔÐØˆ4rŸ   )rÕ  Úcolumn_namesústr | list[str] | NonerÕ  ú6Series[IntoSeriesT] | list[Series[IntoSeriesT]] | Nonec               ó†  ‡— ddl mŠ t          d| ¦  «        }|                     ¦   «         }|�|�d}t          |¦  «        ‚|s|€d}t          |¦  «        ‚|�+t	          |¦  «        rˆfd„|D ¦   «         n ‰|d¬	¦  «        }n|}t          |¦  «        r@|                     |j                             | 	                    |¦  «        ¦  «        ¦  «        S t          |¦  «        r^dd
lm	} |rd}t          |¦  «        ‚ |||| j        j        ¬¦  «        }|                     |j                             |¦  «        ¦  «        S |S )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   Nz8Only one of `column_names` or `index` should be providedz3Either `column_names` or `index` should be providedc                ó*   •— g | ]} ‰|d ¬¦  «        ‘ŒS )T©Úpass_throughrž   )r¢  Úidxrç  s     €r    rÌ  z#maybe_set_index.<locals>.<listcomp>ã  s(   ø€ Ð@Ð@Ð@°3ˆYˆY�s¨Ð.Ñ.Ô.Ð@Ð@Ð@rŸ   Trð  )Ú	set_indexz/Cannot set index using column names on a Seriesrm  )Únarwhals.translaterç  r   r9  rˆ  r6   rÞ  rÙ  rß  ró  r7   Únarwhals._pandas_like.utilsrÚ  rÔ   )	rä  rë  rÕ  Údf_anyré  rD  Úkeysró  rç  s	           @r    Úmaybe_set_indexrø  ¨  sœ  ø€ ðX -Ð,Ð,Ð,Ð,Ð,å�%˜ÑÔ€FØ×!Ò!Ñ#Ô#€JàÐ EÐ$5ØHˆÝ˜‰oŒoÐàð ˜E˜MØCˆÝ˜‰oŒoÐàÐõ ˜EÑ"Ô"ð5Ð@Ð@Ð@Ð@¸%Ð@Ñ@Ô@Ð@à�˜5¨tÐ4Ñ4Ô4ð 	ˆð ˆå 
Ñ+Ô+ð 
Ø×%Ò%ØÔ#×0Ò0°×1EÒ1EÀdÑ1KÔ1KÑLÔLñ
ô 
ð 	
õ ˜ZÑ(Ô(ð YØ9Ð9Ð9Ð9Ð9Ð9àð 	"ØCˆCÝ˜S‘/”/Ð!à�YØØØÔ0Ô@ð
ñ 
ô 
ˆ
ð
 ×%Ò% fÔ&>×&KÒ&KÈJÑ&WÔ&WÑXÔXÐXØ€MrŸ   c                ó&  — t          d| ¦  «        }|                     ¦   «         }t          |¦  «        rg|                     ¦   «         }t	          ||¦  «        r|S |                     |j                             |                     d¬¦  «        ¦  «        ¦  «        S t          |¦  «        rg|                     ¦   «         }t	          ||¦  «        r|S |                     |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ç  r6   Ú__native_namespace__Ú_has_default_indexrÞ  rÙ  rß  Úreset_indexr7   rÚ  )rä  rè  ré  r&  s       r    Úmaybe_reset_indexrþ  þ  s  € õ8 �5˜#ÑÔ€GØ×"Ò"Ñ$Ô$€JÝ 
Ñ+Ô+ð 
Ø"×7Ò7Ñ9Ô9ÐÝ˜jÐ*:Ñ;Ô;ð 	ØˆNØ×&Ò&ØÔ$×1Ò1°*×2HÒ2HÈdÐ2HÑ2SÔ2SÑTÔTñ
ô 
ð 	
õ ˜ZÑ(Ô(ð 
Ø"×7Ò7Ñ9Ô9ÐÝ˜jÐ*:Ñ;Ô;ð 	ØˆNØ×&Ò&ØÔ%×2Ò2°:×3IÒ3IÈtÐ3IÑ3TÔ3TÑUÔUñ
ô 
ð 	
ð €NrŸ   r&  úTypeIs[pd.RangeIndex]c                ó,   — t          | |j        ¦  «        S r¨   )r>  Ú
RangeIndex)rä  r&  s     r    Ú_is_range_indexr  -  s   € Ý�cÐ+Ô6Ñ7Ô7Ð7rŸ   Únative_frame_or_seriesúpd.Series[Any] | pd.DataFramec                óŒ   — | j         }t          ||¦  «        o-|j        dk    o"|j        t	          |¦  «        k    o
|j        dk    S )Nr   ro  )rÕ  r  ÚstartÚstopr‡  Ústep)r  r&  rÕ  s      r    rü  rü  1  sS   € ð #Ô(€Eå˜Ð/Ñ0Ô0ð 	ØŒK˜1Òð	àŒJ�#˜e™*œ*Ò$ð	ð ŒJ˜!ŠOð	rŸ   Úkwargsú
bool | strc           	     óì   — | j                              ¦   «         s| S |                      | 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‹   )rj  rL  rÞ  Ú
_compliantrß  rç  Úconvert_dtypesr   )rä  rƒ  r	  Úresults       r    Úmaybe_convert_dtypesr  =  sw   € ðB Ô×,Ò,Ñ.Ô.ð Øˆ
Ø× Ò ØŒ×#Ò#Ð$B C§M¢M¡O¤OÔ$BÀDÐ$SÈFÐ$SÐ$SÑTÔTñô €Fõ Ð  &Ñ)Ô)Ð)rŸ   ÚszrŸ  Úunitr„   úint | floatc                ó~   — |dv r| S |dv r| dz  S |dv r| dz  S |dv r| dz  S |dv r| d	z  S d
|›�}t          |¦  «        ‚)z¥Scale size in bytes to other size units (eg: "kb", "mb", "gb", "tb").

    Arguments:
        sz: original size in bytes
        unit: size unit to convert into
    >   Úbr“  >   ÚkbÚ	kilobytesi   >   ÚmbÚ	megabytesi   >   ÚgbÚ	gigabytesi   @>   ÚtbÚ	terabytesl        z9`unit` must be one of {'b', 'kb', 'mb', 'gb', 'tb'}, got ©r9  )r  r  rD  s      r    Úscale_bytesr  f  s…   € ð ˆ~ÐÐØˆ	ØÐ"Ð"Ð"Ø�D‰yÐØÐ"Ð"Ð"Ø�G‰|ÐØÐ"Ð"Ð"Ø�G‰|ÐØÐ"Ð"Ð"Ø�G‰|ÐØ
PÈÐ
PÐ
P€CÝ
�S‰/Œ/ÐrŸ   rö   úSeries[Any]c                ó   — ddl m} | j        j        j        }| j        }d}t          ||¦  «        r-t          | j        |j        ¦  «        r|j        j	        d         }nð| j        |j
        k    rd}nÝ| j        |j        k    rd}nÊ|                      ¦   «         }| j        }|                     ¦   «         r7|                     ¦   «         dk     rt          d|j        ¦  «        j        dk    }nd|                     ¦   «         rt%          |j        j        ¦  «        }n6|                     ¦   «         r"dd	lm}  ||j        ¦  «        o|j        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)ro  é    zpl.CategoricalÚphysical)Úis_dictionary)Únarwhals._interchange.seriesr!  rÚ  rÐ   ré   r>  ÚdtypeÚCategoricalr¿   Údescribe_categoricalr   rç  rj  rP  rË   r   ÚorderingrL  rG  ÚcatÚorderedr\  Únarwhals._arrow.utilsr%  r©  )rö   r!  ré   rÆ   r  r¿   r€  r%  s           r    Úis_ordered_categoricalr.  {  sq  € ðF ?Ð>Ð>Ð>Ð>Ð>àÔ%Ô.Ô5€FØÔ(€Ià€FÝ�)Ð.Ñ/Ô/ð HµJØŒ�fÔ(ñ5ô 5ð Hð Ô!Ô6°|ÔDˆˆØ	Œ˜œÒ	$Ð	$ØˆˆØ	Œ˜Ô+Ò	+Ð	+Øˆˆà×!Ò!Ñ#Ô#ˆØÔ$ˆØ�>Š>ÑÔð 
	H × 5Ò 5Ñ 7Ô 7¸'Ò AÐ Aõ Ð*¨F¬LÑ9Ô9ÔBÀjÒPˆFˆFØ× Ò Ñ"Ô"ð 	HÝ˜&œ*Ô,Ñ-Ô-ˆFˆFØ�_Š_ÑÔð 	HØ;Ð;Ð;Ð;Ð;Ð;à"�] 6¤;Ñ/Ô/ÐG°F´KÔ4GˆFØ€MrŸ   ÚnwÚn_bytesr²   úContainer[str]Úprefixc                óL   — 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Ð   )r0  r²   r2  )r"   Úgenerate_temporary_column_name)r0  r²   r2  rD  s       r    Úgenerate_unique_tokenr6  ½  s7   € ð	?ð õ ˜c¨HÐ5Ñ5Ô5Ð5Ý)°'À7ÐSYÐZÑZÔZÐZrŸ   c                ó†   — d}	 |› t          | dz
  ¦  «        › �x}|vr|S |dz  }|dk    rd| ›d|› �}t          |¦  «        ‚Œ?)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   Tro  éd   zMInternal Error: Narwhals was not able to generate a column name with n_bytes=z and not in )r   rA  )r0  r²   r2  ÚcounterÚtokenrD  s         r    r5  r5  È  s…   € ð< €Gð
&ØÐ8¥	¨'°A©+Ñ 6Ô 6Ð8Ð8Ð8ˆEÀÐHÐHØˆLà�1‰ˆØ�SŠ=ˆ=ð3Øð3ð 3Ø)0ð3ð 3ð õ ! Ñ%Ô%Ð%ð
&rŸ   ÚframeÚsubsetúIterable[str]Ústrictú	list[str]c              óÄ   — |s4t          t          | j        ¦  «                             |¦  «        ¦  «        S t          |¦  «        }t	          || j        ¬¦  «        x}r|‚|S )N)Ú	available)r†  Úsetr²   ÚintersectionÚcheck_columns_exist)r;  r<  r>  Úto_dropÚerrors        r    Úparse_columns_to_droprG  ô  sc   € ð ð =Ý•C˜œÑ&Ô&×3Ò3°FÑ;Ô;Ñ<Ô<Ð<Ý�6‰lŒl€GÝ# G°u´}ÐEÑEÔEÐE€uð ØˆØ€NrŸ   Ú
charactersú
str | Nonec                ó    — dd l }| €|j        n| S ©Nr   )ÚstringÚ
whitespace)rH  rL  s     r    Úparse_str_strip_charsrN  ÿ  s   € Ø€M€M€Mà *Ð 2ˆ6ÔÐ¸
ÐBrŸ   ÚsequenceúSequence[_T] | AnyúTypeIs[Sequence[_T]]c                óX   — t          | t          ¦  «        ot          | t          ¦  «         S r¨   )r>  r
   r—   )rO  s    r    Úis_sequence_but_not_strrS    s$   € Ý�h¥Ñ)Ô)ÐKµ*¸XÅsÑ2KÔ2KÐ.KÐKrŸ   úTypeIs[_SliceNone]c                óR   — t          | t          ¦  «        o| t          d ¦  «        k    S r¨   )r>  Úslice©rä  s    r    Úis_slice_nonerX  	  s"   € Ý�c�5Ñ!Ô!Ð8 c­U°4©[¬[Ò&8Ð8rŸ   úCTypeIs[SizedMultiIndexSelector[Series[Any] | CompliantSeries[Any]]]c                óð   — t          | ¦  «        o:t          | ¦  «        dk    rt          | d         ¦  «        pt          | ¦  «        dk    p,t          | ¦  «        pt	          | ¦  «        pt          | ¦  «        S rK  )rS  r‡  Úis_single_index_selectorr5   r2   Úis_compliant_series_intrW  s    r    Úis_sized_multi_index_selectorr]    s   € õ
 $ CÑ(Ô(ð YÝ�c‘(”(˜Q’,ÐCÕ#;¸CÀ¼FÑ#CÔ#CÐWÍÈSÉÌÐUVÊð	(õ ! Ñ%Ô%ð		(õ
 " #Ñ&Ô&ð	(õ # 3Ñ'Ô'ðrŸ   ú-TypeIs[Sequence[_T] | Series[Any] | _1DArray]c                óz   — t          | ¦  «        p,t          | ¦  «        pt          | ¦  «        pt          | ¦  «        S r¨   )rS  r3   r0   Úis_compliant_seriesrW  s    r    Úis_sequence_likera    sF   € õ 	  Ñ$Ô$ð 	$Ý˜SÑ!Ô!ð	$å˜cÑ"Ô"ð	$õ ˜sÑ#Ô#ð	rŸ   úTypeIs[_SliceIndex]c                óú   — t          | t          ¦  «        oft          | j        t          ¦  «        pLt          | j        t          ¦  «        p2t          | j        t          t          f¦  «        o| j        d u o| j        d u S r¨   )r>  rV  r  rŸ  r  r  ÚNoneTyperW  s    r    Úis_slice_indexre  &  st   € Ý�c�5Ñ!Ô!ð Ý�3”9�cÑ"Ô"ð 	
Ý�c”h¥Ñ$Ô$ð	
õ �s”x¥#¥x Ñ1Ô1ð !Ø”	˜TÐ!ð!à”˜DÐ ðrŸ   úTypeIs[range]c                ó,   — t          | t          ¦  «        S r¨   )r>  ÚrangerW  s    r    Úis_rangeri  2  s   € Ý�c�5Ñ!Ô!Ð!rŸ   úTypeIs[SingleIndexSelector]c                óX   — t          | t          ¦  «        ot          | t          ¦  «         S r¨   )r>  rŸ  rG  rW  s    r    r[  r[  6  s$   € Ý�c�3ÑÔÐ=­
°3½Ñ(=Ô(=Ð$=Ð=rŸ   úTTypeIs[SingleIndexSelector | MultiIndexSelector[Series[Any] | CompliantSeries[Any]]]c                ó\   — t          | ¦  «        pt          | ¦  «        pt          | ¦  «        S r¨   )r[  r]  re  rW  s    r    Úis_index_selectorrn  :  s4   € õ 	! Ñ%Ô%ð 	Ý(¨Ñ-Ô-ð	å˜#ÑÔðrŸ   úBTypeIs[SizedMultiBoolSelector[Series[Any] | CompliantSeries[Any]]]c                óÖ   — t          | ¦  «        r.t          | ¦  «        dk    rt          | d         t          ¦  «        p,t	          | ¦  «        pt          | ¦  «        pt          | ¦  «        S rK  )rS  r‡  r>  rG  r4   r1   Úis_compliant_series_boolrW  s    r    Úis_boolean_selectorrr  D  sh   € õ 
! Ñ	%Ô	%Ð	U­3¨s©8¬8°aª<Ð+T½JÀsÈ1ÄvÍtÑ<TÔ<Tð 	)Ý! #Ñ&Ô&ð	)å" 3Ñ'Ô'ð	)õ $ CÑ(Ô(ð	rŸ   ÚtpúTypeIs[list[_T]]c                óv   — t          t          | t          ¦  «        o| ot          | d         |¦  «        ¦  «        S rK  )rG  r>  r†  )rä  rs  s     r    Ú
is_list_ofrv  O  s2   € å•
˜3¥Ñ%Ô%ÐH¨#ÐHµ*¸SÀ¼VÀRÑ2HÔ2HÑIÔIÐIrŸ   Ú
predicatesúCollection[Any]úTypeIs[Collection[list[bool]]]c                ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r¨   )rv  rG  )r¢  Úpreds     r    r¤  z3predicates_contains_list_of_bool.<locals>.<genexpr>W  s,   è è € Ð=Ð=¨$�z˜$¥Ñ%Ô%Ð=Ð=Ð=Ð=Ð=Ð=rŸ   ©Úany)rw  s    r    Ú predicates_contains_list_of_boolr  T  s!   € õ Ð=Ð=°*Ð=Ñ=Ô=Ñ=Ô=Ð=rŸ   c                ó˜   — t          t          | ¦  «        o.t          t          | ¦  «        d ¦  «        x}ot	          ||¦  «        ¦  «        S r¨   )rG  rS  ÚnextÚiterr>  )rä  rs  Úfirsts      r    Úis_sequence_ofr„  Z  sN   € åÝ Ñ$Ô$ð 	"Ý�4 ™9œ9 dÑ+Ô+Ð+ˆUð	"å�u˜bÑ!Ô!ñô ð rŸ   úTypeIs[NestedLiteral]c                óF   — t          | t          t          t          f¦  «        S r¨   )r>  r†  rŒ  ÚdictrW  s    r    Úis_nested_literalrˆ  c  s   € Ý�c�D¥%­Ð.Ñ/Ô/Ð/rŸ   úbool | Nonerñ  Úpass_through_defaultc               óP   — | €|€|}n| �|€|  }n| €|�nd}t          |¦  «        ‚|S )Nz,Cannot pass both `strict` and `pass_through`r  )r>  rñ  rŠ  rD  s       r    Úvalidate_strict_and_pass_thoughrŒ  g  sM   € ð €~˜,Ð.Ø+ˆˆØ	Ð	 Ð 4Ø!�zˆˆØ	ˆ˜LÐ4Øà<ˆÝ˜‰oŒoÐØÐrŸ   r�  F)Úwarn_versionÚrequiredr�  rŽ  ú*Callable[[Callable[P, R]], Callable[P, R]]c                ó   ‡ ‡— 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**.
    ÚfnúCallable[P, R]r¦   c               óD   •‡ — t          ‰ ¦  «        dˆ ˆˆfd„¦   «         }|S )	Nrƒ  úP.argsÚkwdsúP.kwargsr¦   r’   c                 ó  •— |                      dd ¦  «        }|                      dd ¦  «        }|�|€‰rd}t          |‰¬¦  «         |}n5|�|�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.
r4  z0Can't pass both `native_namespace` and `backend`z `backend` must be specified in `ú`.)Úpopr"   r9  rš   )rƒ  r•  r;  r&  rD  r‘  rŽ  r�  s        €€€r    Úwrapperz=deprecate_native_namespace.<locals>.decorate.<locals>.wrapper‡  sË   ø€ à—h’h˜y¨$Ñ/Ô/ˆGØ#ŸxšxÐ(:¸DÑAÔAÐØÐ+°°Øð Jðjð õ
 .¨c¸LÐIÑIÔIÐIØ*��Ø!Ð-°'Ð2EØH�Ý  ‘o”oÐ%Ø!Ð)¨g¨oÀ(¨oØH¸¼ÐHÐHÐH�Ý  ‘o”oÐ%Ø%ˆD�‰OØ�2�tÐ$˜tÐ$Ð$Ð$rŸ   )rƒ  r”  r•  r–  r¦   r’   )r   )r‘  rš  rŽ  r�  s   ` €€r    Údecoratez,deprecate_native_namespace.<locals>.decorate†  sC   øø€ Ý	ˆr‰Œð	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%ñ 
Œð	%ð* ˆrŸ   )r‘  r’  r¦   r’  rž   )r�  rŽ  r›  s   `` r    Údeprecate_native_namespacerœ  y  s.   øø€ ðð ð ð ð ð ð ð2 €OrŸ   Úwindow_sizeÚmin_samplesú
int | Noneútuple[int, int]c                ó  — t          | t          d¬¦  «         t          |t          t          d ¦  «        d¬¦  «         | dk     rd}t          |¦  «        ‚|�/|dk     rd}t          |¦  «        ‚|| k    rd}t	          |¦  «        ‚n| }| |fS )Nr�  ©Ú
param_namerž  ro  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©  r9  r:   )r�  rž  rD  s      r    Ú_validate_rolling_argumentsr¥  ¢  s¥   € õ ��S¨]Ð;Ñ;Ô;Ð;Ý��S¥$ t¡*¤*¸ÐGÑGÔGÐGà�Q‚€Ø;ˆÝ˜‰oŒoÐàÐØ˜Š?ˆ?Ø?ˆCÝ˜S‘/”/Ð!à˜Ò$Ð$ØJˆCÝ'¨Ñ,Ô,Ð,ð %ð "ˆà˜Ð#Ð#rŸ   ÚnÚfractionúfloat | NoneÚheightÚwith_replacementc                óÎ   — | �|�d}t          |¦  «        ‚| �| }n|�t          ||z  ¦  «        }nd}|dk     rd|› �}t          |¦  «        ‚||k    r|sd}t          |¦  «        ‚|S )aí  Resolve the concrete number of rows to draw for `DataFrame.sample`/`Series.sample`.

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

    Raises:
        ValueError: If both `n` and `fraction` are specified.
        InvalidOperationError: If the resolved size is negative.
        ShapeError: If the resolved size exceeds `height` and `with_replacement` is False.
    Nz&cannot specify both `n` and `fraction`ro  r   z.sample size must be a positive integer, found zScannot take a larger sample than the total population when `with_replacement=false`)r9  rŸ  r:   r;   )r¦  r§  r©  rª  rD  Úsizes         r    Ú_resolve_sample_sizer­  º  s’   € ð 	€}˜Ð-Ø6ˆÝ˜‰oŒoÐØ€}ØˆˆØ	Ð	Ý�6˜HÑ$Ñ%Ô%ˆˆàˆàˆa‚x€xØE¸tÐEÐEˆÝ# CÑ(Ô(Ð(Øˆf‚}€}Ð-€}ØcˆÝ˜‰oŒoÐØ€KrŸ   ÚheaderÚnative_reprc           
     óü  — 	 t          j        ¦   «         j        }n2# t          $ r% t	          t          j        dd¦  «        ¦  «        }Y nw xY w|                     ¦   «                              ¦   «         }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 )NÚCOLUMNSéP   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r¨   )r‡  )r¢  Úlines     r    r¤  z generate_repr.<locals>.<genexpr>à  s(   è è € Ð>Ð>¨�3˜t™9œ9Ð>Ð>Ð>Ð>Ð>Ð>rŸ   é   u   â”Œu   â”€u   â”�
ú|ú z|
ú-u   â””u   â”˜é'   uu   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u   â”�
|u/   |
| Use `.to_native` to see native output |
â””)
ÚosÚget_terminal_sizer²   ÚOSErrorrŸ  ÚgetenvÚ
expandtabsÚ
splitlinesÚmaxr‡  )r®  r¯  Úterminal_widthÚnative_linesÚmax_native_widthÚlengthÚoutputÚheader_extraÚstart_extraÚ	end_extrar´  Údiffs               r    Úgenerate_reprrÊ  Ú  sE  € ð7ÝÔ-Ñ/Ô/Ô7ˆˆøÝð 7ð 7ð 7Ý�RœY y°"Ñ5Ô5Ñ6Ô6ˆˆˆð7øøøà×)Ò)Ñ+Ô+×6Ò6Ñ8Ô8€LÝÐ>Ð>°Ð>Ñ>Ô>Ñ>Ô>Ðà˜!Ñ˜~Ò-Ð-ÝÐ%¥s¨6¡{¤{Ñ3Ô3ˆØ,�u˜v‘~Ð,Ð,Ð,ˆØ¥ F¡¤Ñ+ˆØÐj�c˜\¨QÑ.Ñ/Ðj°Ðj¸ÀÐPQÑ@QÐT`ÐcdÑTdÑ@dÑ9eÐjÐjÐjÑjˆØÐ)�c˜V‘nÐ)Ð)Ð)Ñ)ˆØÐ 0Ñ0°QÑ6ˆØÐ.Ñ.°1Ñ4¸ÐAQÑ8QÐUVÑ7VÑVˆ	Ø ð 	kð 	kˆDØÐj˜# Ñ-Ðj¨tÐj°S¸IÐHXÑ<XÕ[^Ð_cÑ[dÔ[dÑ<dÑ5eÐjÐjÐjÑjˆFˆFØÐ+˜ ™Ð+Ð+Ð+Ñ+ˆØˆà•�F‘”Ñ€Dð	ˆlð 	ð 	Ø�4˜1‘9Ñð	Ø%ð	Ø'*¨d°a©i¸$À¹(Ñ.BÑ'Cð	ð 	ð ð	ð 	ð 	ðs   ‚ ›,A
Á	A
úCollection[str]rA  úColumnNotFoundError | Nonec              óx   — t          | ¦  «                             |¦  «        x}rt          j        ||¦  «        S d S r¨   )rB  Ú
differencer8   Ú'from_missing_and_available_column_names)r<  rA  Úmissings      r    rD  rD  ø  sF   € õ �f‘+”+×(Ò(¨Ñ3Ô3Ð3€wð 
Ý"ÔJØ�Yñ
ô 
ð 	
ð ˆ4rŸ   c                óH  — t          | ¦  «        t          t          | ¦  «        ¦  «        k    rtddlm}  || ¦  «        }d„ |                     ¦   «         D ¦   «         }d                     d„ |                     ¦   «         D ¦   «         ¦  «        }d|› �}t          |¦  «        ‚d S )Nr   )ÚCounterc                ó&   — i | ]\  }}|d k    ¯||“ŒS )ro  rž   ©r¢  Úkr£  s      r    ú
<dictcomp>z1check_column_names_are_unique.<locals>.<dictcomp>  s#   € Ð@Ð@Ð@™t˜q !¸!¸aº%¸%�a˜¸%¸%¸%rŸ   r�  c              3  ó.   K  — | ]\  }}d |› d|› d�V — ŒdS )z
- 'z' z timesNrž   rÔ  s      r    r¤  z0check_column_names_are_unique.<locals>.<genexpr>  s:   è è € ÐLÐL±°°AÐ,˜aÐ,Ð, 1Ð,Ð,Ð,ÐLÐLÐLÐLÐLÐLrŸ   z"Expected unique column names, got:)r‡  rB  ÚcollectionsrÒ  rÄ  Újoinr9   )r²   rÒ  r9  Ú
duplicatesrD  s        r    Úcheck_column_names_are_uniquerÛ    s¬   € Ý
ˆ7�|„|•s�3˜w™<œ<Ñ(Ô(Ò(Ð(Ø'Ð'Ð'Ð'Ð'Ð'à�'˜'Ñ"Ô"ˆØ@Ð@ w§}¢}¡¤Ð@Ñ@Ô@ˆ
Ø�gŠgÐLÐL¸×9IÒ9IÑ9KÔ9KÐLÑLÔLÑLÔLˆØ8°3Ð8Ð8ˆÝ˜SÑ!Ô!Ð!ð )Ð(rŸ   Ú	time_unitú$TimeUnit | Iterable[TimeUnit] | NoneÚ	time_zoneú7str | timezone | Iterable[str | timezone | None] | Noneú%tuple[Set[TimeUnit], Set[str | None]]c                óÞ   — | €h d£n&t          | t          ¦  «        r| hnt          | ¦  «        }|€d hn7t          |t          t          f¦  «        rt          |¦  «        hnd„ |D ¦   «         }||fS )N>   ÚsÚmsÚnsÚusc                ó4   — h | ]}|�t          |¦  «        nd ’ŒS r¨   )r—   )r¢  Útzs     r    ú	<setcomp>z1_parse_time_unit_and_time_zone.<locals>.<setcomp>  s&   € ÐFÐFÐF°b˜˜�c�"‰gŒgˆg¨TÐFÐFÐFrŸ   )r>  r—   rB  r   )rÜ  rÞ  Ú
time_unitsÚ
time_zoness       r    Ú_parse_time_unit_and_time_zonerë    s›   € ð Ðð 	 ÐÐÐõ �i¥Ñ%Ô%ðˆiˆ[ˆ[å�‰^Œ^ð ð Ðð 
ˆˆõ �i¥#¥x Ñ1Ô1ðG�c�)‰nŒnÐÐàFÐF¸IÐFÑFÔFð ð �zÐ!Ð!rŸ   r'  rt   ré   ré  úSet[TimeUnit]rê  úSet[str | None]c                ój   — t          | |j        ¦  «        o| j        |v o| j        |v pd|v o| j        d uS )NÚ*)r>  ÚDatetimerÜ  rÞ  )r'  ré   ré  rê  s       r    Ú%dtype_matches_time_unit_and_time_zonerñ  "  sR   € õ 	�5˜&œ/Ñ*Ô*ð 	
ØŒ_ 
Ð*ð	
ð ŒO˜zÐ)ð CØ�zÐ!ÐA e¤o¸TÐ&AðrŸ   r¯   c               ó   — | j         S r¨   ©r²   )r;  s    r    Úget_column_namesrô  /  s
   € ØŒ=ÐrŸ   Únamesc                ó*   ‡— ˆfd„| j         D ¦   «         S )Nc                ó   •— g | ]}|‰v¯|‘Œ	S rž   rž   )r¢  Úcol_namerõ  s     €r    rÌ  z(exclude_column_names.<locals>.<listcomp>4  s#   ø€ ÐLÐLÐL˜°hÀeÐ6KÐ6KˆHÐ6KÐ6KÐ6KrŸ   ró  )r;  rõ  s    `r    Úexclude_column_namesrù  3  s   ø€ ØLÐLÐLÐL U¤]ÐLÑLÔLÐLrŸ   úEvalNames[Any]c               ó   ‡ — dˆ fd„}|S )NÚ_framer   r¦   r¯   c               ó   •— ‰S r¨   rž   )rü  rõ  s    €r    r‘  z$passthrough_column_names.<locals>.fn8  s   ø€ ØˆrŸ   )rü  r   r¦   r¯   rž   )rõ  r‘  s   ` r    Úpassthrough_column_namesrþ  7  s(   ø€ ðð ð ð ð ð ð €IrŸ   r   Ú	_SENTINELÚattrc                ó<   — t          | |t          ¦  «        t          uS r¨   )r   rÿ  )rä  r   s     r    Ú_hasattr_staticr  A  s   € Ý˜#˜t¥YÑ/Ô/µyÐ@Ð@rŸ   ú\CompliantDataFrame[CompliantSeriesT, CompliantExprT, NativeDataFrameT, ToNarwhalsT_co] | Anyú^TypeIs[CompliantDataFrame[CompliantSeriesT, CompliantExprT, NativeDataFrameT, ToNarwhalsT_co]]c                ó"   — t          | d¦  «        S )NÚ__narwhals_dataframe__©r  rW  s    r    Úis_compliant_dataframer  E  s   € õ ˜3Ð 8Ñ9Ô9Ð9rŸ   úJCompliantLazyFrame[CompliantExprT, NativeLazyFrameT, ToNarwhalsT_co] | AnyúLTypeIs[CompliantLazyFrame[CompliantExprT, NativeLazyFrameT, ToNarwhalsT_co]]c                ó"   — t          | d¦  «        S )NÚ__narwhals_lazyframe__r  rW  s    r    Úis_compliant_lazyframer  P  s   € õ ˜3Ð 8Ñ9Ô9Ð9rŸ   ú'CompliantSeries[NativeSeriesT_co] | Anyú)TypeIs[CompliantSeries[NativeSeriesT_co]]c                ó"   — t          | d¦  «        S )NÚ__narwhals_series__r  rW  s    r    r`  r`  V  s   € õ ˜3Ð 5Ñ6Ô6Ð6rŸ   c                óR   — t          | ¦  «        o| j                             ¦   «         S r¨   )r`  r'  Ú
is_integerrW  s    r    r\  r\  \  ó%   € õ ˜sÑ#Ô#Ð>¨¬	×(<Ò(<Ñ(>Ô(>Ð>rŸ   c                óR   — t          | ¦  «        o| j                             ¦   «         S r¨   )r`  r'  Ú
is_booleanrW  s    r    rq  rq  b  r  rŸ   ú'TypeIs[NamespaceAccessor[_FullContext]]c                óB   — t          | d¦  «        ot          | d¦  «        S )NrÆ   Ú	_accessorr  rW  s    r    Ú_is_namespace_accessorr  h  s#   € õ ˜3 Ñ,Ô,ÐRµÀÀkÑ1RÔ1RÐRrŸ   r€  úTypeIs[_EagerAllowedImpl]c               óx   — | 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+  ©r€  s    r    Úis_eager_allowedr  r  s2   € àÝÔÝÔÝÔÝÔÝÔðð ð rŸ   úTypeIs[_LazyFrameCollectImpl]c               óL   — | t           j        t           j        t           j        hv S )z4Return True if `LazyFrame.collect(impl)` is allowed.)rÓ   r(  r-  r+  r  s    r    Úcan_lazyframe_collectr!  }  s   € à•NÔ)­>Ô+@Å.ÔBXÐYÐYÐYrŸ   úTypeIs[_LazyAllowedImpl]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/  r0  r-  r,  r2  r1  r  s    r    Úis_lazy_allowedr$  ‚  s>   € àÝÔÝÔÝÔÝÔÝÔÝÔ&ÝÔðð ð rŸ   úTypeIs[SupportsNativeNamespace]c                ó"   — t          | d¦  «        S )Nrû  r  rW  s    r    Úhas_native_namespacer'  �  s   € Ý˜3Ð 6Ñ7Ô7Ð7rŸ   úTypeIs[ArrowStreamExportable]c                ó"   — t          | d¦  «        S )NÚ__arrow_c_stream__r  rW  s    r    Úsupports_arrow_c_streamr+  “  s   € Ý˜3Ð 4Ñ5Ô5Ð5rŸ   Úleft_onÚright_onÚsuffixúdict[str, str]c                ób   ‡ ‡— ˆ ˆ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  ó0   •K  — | ]}|‰v r|› ‰› �n|V — Œd S r¨   rž   )r¢  Úkeyr,  r.  s     €€r    r¤  z(_remap_full_join_keys.<locals>.<genexpr>§  sL   øè è € ð ð Ø8;˜C 7˜N˜Nˆ3Ð�ÐÐÐ°ðð ð ð ð ð rŸ   F)r>  )r‡  Úzip)r,  r-  r.  Úright_keys_suffixeds   ` ` r    Ú_remap_full_join_keysr5  —  sR   øø€ ð ð ð ð ð Ø?Gðñ ô Ðõ •�HÐ1¸%Ð@Ñ@Ô@ÑAÔAÐArŸ   Údatar\   Úcontextúpa.Tablec               óî   — t          d¦  «        rE|j        j                             d¦  «        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  )r7  zB'pyarrow>=14.0.0' is required for `from_arrow` for object of type r¥  )
r   rÐ   rå   r?  rÆ   Ú
_dataframeÚ
from_arrowr¿   r‘  ÚModuleNotFoundError)r6  r7  rä  rD  s       r    Ú_into_arrow_tabler=  ­  sw   € õ �ÑÔð AØÔÔ'×4Ò4°YÑ?Ô?ÔIˆØŒ}×'Ò'¨°bÐ'Ñ9Ô9Ô@Ð@Ø
mÕObÐcgÑOhÔOhÐ
mÐ
mÐ
m€CÝ
˜cÑ
"Ô
"Ð"rŸ   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ž   )r‘  s    r    Úunstabler?  ½  s	   € ð& €IrŸ   Úformatc                ó<   ‡ — 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 V — Œ	d S r¨   rž   )r¢  Úxr@  s     €r    r¤  z#_is_naive_format.<locals>.<genexpr>â  s'   øè è € Ð:Ð: 1�1˜�;Ð:Ð:Ð:Ð:Ð:Ð:rŸ   )z%sz%zÚZr}  )r@  s   `r    Ú_is_naive_formatrE  Ó  s,   ø€ õ Ð:Ð:Ð:Ð:Ð(9Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:rŸ   c                  ó^   — e Zd ZdZdddœdd„Zdd„Zd d„Z	 dd!d„Zd"d„Ze	d#d„¦   «         Z
dS )$Únot_implementedaŠ  Mark some functionality as unsupported.

    Arguments:
        alias: optional name used instead of the data model hook [`__set_name__`].
        hint: optional explanation of why this is unsupported and what to do instead.
            When given, it replaces the "please open an issue" pointer, so use it for
            functionality we deliberately won't implement (see `length_changing_hint`).

    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
    Nr�  )ÚhintÚaliasrI  rH  r—   r¦   rÝ   c              ó"   — || _         || _        d S r¨   )Ú_aliasÚ_hint)rª   rI  rH  s      r    Ú__init__znot_implemented.__init__  s   € ð #(ˆŒØˆŒ
ˆ
ˆ
rŸ   c                óP   — dt          | ¦  «        j        › d| j        › d| j        › �S )Nú<z>: r¥  )r©  rš   Ú_name_ownerÚ_namer±   s    r    Ú__repr__znot_implemented.__repr__  s.   € ØJ•4˜‘:”:Ô&ÐJÐJ¨4Ô+;ÐJÐJ¸d¼jÐJÐJÐJrŸ   r¤   r«  Únamec                ó:   — |j         | _        | j        p|| _        d S r¨   )rš   rP  rK  rQ  ©rª   r¤   rS  s      r    Ú__set_name__znot_implemented.__set_name__  s   € à %¤ˆÔØœ+Ð-¨ˆŒ
ˆ
ˆ
rŸ   r£   ú_T | Literal['raise'] | Noneútype[_T] | Noner   c               óÄ   — |€| S t          |dt          j        ¦  «        }|t          j        urt          |¦  «        }n| j        }t          | j        || j        ¦  «         d S )NrÔ   )rÝ  rÓ   r4  ÚreprrP  Ú_raise_not_implemented_errorrQ  rL  )rª   r£   r¤   rj  Úwhos        r    r«   znot_implemented.__get__  sh   € ð Ðð ˆKõ ! Ð+<½nÔ>TÑUÔUˆØ¥Ô!7Ð7Ð7Ý�~Ñ&Ô&ˆCˆCàÔ"ˆCÝ$ T¤Z°°d´jÑAÔAÐAØˆtrŸ   rƒ  r•  c                ó,   — |                       d¦  «        S )NÚraise)r«   )rª   rƒ  r•  s      r    Ú__call__znot_implemented.__call__,  s   € ð �|Š|˜GÑ$Ô$Ð$rŸ   ÚmessagerA   rC   c               óF   —  | ¦   «         } 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$  r`  rä  s      r    r$   znot_implemented.deprecated1  s'   € ð ˆc‰eŒeˆØ"�z˜'Ñ"Ô" 3Ñ'Ô'Ð'rŸ   r¨   )rI  rI  rH  r—   r¦   rÝ   rh  )r¤   r«  rS  r—   r¦   rÝ   )r£   rW  r¤   rX  r¦   r   )rƒ  r   r•  r   r¦   r   )r`  rA   r¦   rC   )rš   r›   rœ   rÁ   rM  rR  rV  r«   r_  ri  r$   rž   rŸ   r    rG  rG  å  sÄ   € € € € € ð$ð $ðLÀ2ð ð ð ð ð ð ðKð Kð Kð Kð.ð .ð .ð .ð PTðð ð ð ð ð$%ð %ð %ð %ð
 ð	(ð 	(ð 	(ñ „[ð	(ð 	(ð 	(rŸ   rG  Úwhatr\  rH  ÚNotImplementedErrorc               ó@   — d}|p|}| ›d|›d|› �}t          |¦  «        ‚)NzƒIf you would like to see this functionality in `narwhals`, please open an issue at: https://github.com/narwhals-dev/narwhals/issuesz is not implemented for: z.

)rc  )rb  r\  rH  Úfallback_msgÚtailrD  s         r    r[  r[  >  sB   € ð	Sð ð Ð�<€DØÐ
@Ð
@¨cÐ
@Ð
@¸$Ð
@Ð
@€CÝ
˜cÑ
"Ô
"Ð"rŸ   Ú
instead_ofÚusec                ó   — d| › d|› d�S )aL  Explain why a length-changing expression isn't available, and what to use instead.

    Arguments:
        instead_of: Unsupported usage example, e.g. `"lf.select(nw.col('a').unique())"`.
        use: Supported alternative, e.g. `"lf.select('a').unique()"`.

    Returns:
        Message to pass as `not_implemented(hint=...)`.
    z¥Length-changing expressions (e.g. `unique`, `drop_nulls`, `filter`) are not
supported for this backend, not even when followed by an aggregation.

Hint: instead of `z`, use `r˜  rž   )rg  rh  s     r    Úlength_changing_hintrj  L  s+   € ð	9à'ð	9ð 	9à14ð	9ð 	9ð 	9ð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dS )#Ú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—   rL  Ú_wrapped_namer�  rH  Úminimumr¦   rC   c               óL   — |                       | ¦  «        }||_        ||_        |S )z½Method decorator for raising below a minimum `_backend_version`.

        Arguments:
            minimum: Minimum backend version.
            hint: Optional suggested alternative.
        )Ú__new__rm  rL  )r$  ro  rH  rä  s       r    rg  zrequires.backend_version{  s)   € ð �kŠk˜#ÑÔˆØ"ˆÔØˆŒ	Øˆ
rŸ   rg  c               ó@   — d                      d„ | D ¦   «         ¦  «        S )Nr¥  c              3  ó   K  — | ]}|› V — Œd S r¨   rž   )r¢  Úds     r    r¤  z,requires._unparse_version.<locals>.<genexpr>Š  s$   è è € Ð8Ð8 1˜1˜Ð8Ð8Ð8Ð8Ð8Ð8rŸ   )rÙ  rf  s    r    Ú_unparse_versionzrequires._unparse_versionˆ  s#   € à�xŠxÐ8Ð8¨Ð8Ñ8Ô8Ñ8Ô8Ð8rŸ   r2  rI   rÝ   c               ó>   — d| j         vr|› d| j         › �| _         d S d S ©Nr¥  )rn  )rª   r2  s     r    Ú_qualify_accessor_namezrequires._qualify_accessor_nameŒ  s7   € à�dÔ(Ð(Ð(Ø$*Ð!AÐ!A¨TÔ-?Ð!AÐ!AˆDÔÐÐð )Ð(rŸ   r£   r¸   útuple[tuple[int, ...], str]c               óž   — t          |¦  «        r"|                      |j        ¦  «         |j        }n|}|j        t          |j        ¦  «        fS r¨   )r  rx  r  rÆ   rË   r—   rÔ   )rª   r£   rÆ   s      r    Ú_unwrap_contextzrequires._unwrap_context‘  sQ   € Ý! (Ñ+Ô+ð 	!Ø×'Ò'¨Ô(:Ñ;Ô;Ð;Ø Ô*ˆIˆIà ˆIØÔ)­3¨yÔ/HÑ+IÔ+IÐIÐIrŸ   c          	     ó  — |                       |¦  «        \  }}|| j        k    rd S |                      | j        ¦  «        }|                      |¦  «        }d| j        › d|› d|› d|›d�	}| j        r|› d| j        › �}t          |¦  «        ‚)Nú`z` is only available in 'z>=z', found version r¥  ú
)r{  rm  ru  rn  rL  rc  )rª   r£   rü   r;  ro  ÚfoundrD  s          r    Ú_ensure_versionzrequires._ensure_version™  s¯   € Ø×/Ò/°Ñ9Ô9Ñˆ�Ø�dÔ'Ò'Ð'ØˆFØ×'Ò'¨Ô(9Ñ:Ô:ˆØ×%Ò% gÑ.Ô.ˆØm�$Ô$ÐmÐm¸gÐmÐmÈÐmÐmÐchÐmÐmÐmˆØŒ:ð 	)ØÐ(Ð(˜DœJÐ(Ð(ˆCÝ! #Ñ&Ô&Ð&rŸ   r‘  ú_Method[_IntoContextT, P, R]c               óZ   ‡ ‡— ‰j         ‰ _        t          ‰¦  «        d
ˆˆ fd	„¦   «         }|S )Nr£   r¹   rƒ  r”  r•  r–  r¦   r’   c                óF   •— ‰                      | ¦  «          ‰| g|¢R i |¤ŽS r¨   )r€  )r£   rƒ  r•  r‘  rª   s      €€r    rš  z"requires.__call__.<locals>.wrapper©  s7   ø€ à× Ò  Ñ*Ô*Ð*Ø�2�hÐ. Ð.Ð.Ð.¨Ð.Ð.Ð.rŸ   )r£   r¹   rƒ  r”  r•  r–  r¦   r’   )rš   rn  r   )rª   r‘  rš  s   `` r    r_  zrequires.__call__¤  sJ   øø€ ð  œ[ˆÔå	ˆr‰Œð	/ð 	/ð 	/ð 	/ð 	/ð 	/ñ 
Œð	/ð
 ˆrŸ   N©r�  )rH  r—   ro  rÉ   r¦   rC   )rg  rÉ   r¦   r—   )r2  rI   r¦   rÝ   )r£   r¸   r¦   ry  )r£   r¸   r¦   rÝ   )r‘  r�  r¦   r�  )rš   r›   rœ   rÁ   r�   ri  rg  Ústaticmethodru  rx  r{  r€  r_  rž   rŸ   r    rl  rl  ]  så   € € € € € € ðð ð* "Ð!Ð!Ñ!Ø€J€J�JØÐÐÑðð
 ð
ð 
ð 
ð 
ñ „[ð
ð ð9ð 9ð 9ñ „\ð9ðBð Bð Bð Bð
Jð Jð Jð Jð	'ð 	'ð 	'ð 	'ðð ð ð ð ð rŸ   rl  Ú	str_slicer‰   ú"tuple[int | None, int | None, Any]c                ó¬   — | j         �|                     | j         ¦  «        nd }| j        �|                     | j        ¦  «        dz   nd }| j        }|||fS )Nro  )r  rÕ  r  r  )r†  r²   r  r  r  s        r    Úconvert_str_slice_to_int_slicer‰  ²  s\   € ð /8¬oÐ.IˆG�MŠM˜)œ/Ñ*Ô*Ð*Èt€EØ09´Ð0Jˆ7�=Š=˜œÑ(Ô(¨1Ñ,Ð,ÐPT€DØŒ>€DØ�4˜ÐÐrŸ   c                  ó"   — e Zd ZdZdd„Zdd„ZdS )	ÚSupportsFloorModa  Object supporting `%` and `+` with a same-typed operand.

    Native expression types of backends whose `%` follows C sign semantics
    (duckdb `Expression`, pyspark `Column`, ibis `Value`, polars `Expr` and
    `Series` before 0.20.8) satisfy this structurally.
    ÚotherrC   r¦   c               ó   — d S r¨   rž   ©rª   rŒ  s     r    Ú__mod__zSupportsFloorMod.__mod__Ã  r¬   rŸ   c               ó   — d S r¨   rž   rŽ  s     r    Ú__add__zSupportsFloorMod.__add__Å  r¬   rŸ   N)rŒ  rC   r¦   rC   )rš   r›   rœ   rÁ   r�  r‘  rž   rŸ   r    r‹  r‹  »  s4   € € € € € ðð ð 3Ð2Ð2Ð2à2Ð2Ð2Ð2Ð2Ð2rŸ   r‹  Ú_SupportsFloorModTÚexprrŒ  c                ó   — | |z  |z   |z  S )a!  Restore Python-style (floored) modulo from C-style remainder semantics.

    Backends whose `%` follows C sign semantics (sign of the dividend, like
    `math.fmod`) can still compute the Python-style one (sign of the
    divisor) with the double-modulus identity `((a % b) + b) % b`.
    rž   )r“  rŒ  s     r    Ú	floor_modr•  Ë  s   € ð �E‰\˜UÑ" eÑ+Ð+rŸ   Ú	tp_parentúCallable[P, R1]ú<Callable[[_Constructor[_T, P, R2]], _Constructor[_T, P, R2]]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
    Ú
init_childú_Constructor[_T, P, R2]r¦   c               óÜ   •— | j         dk    r8t          t          ‰¦  «        t          ¦  «        rt          ‰¦  «        | _        | S dt
          j         › d| j        ›d‰›�}t          |¦  «        ‚)NrM  z`@zL` is only allowed to decorate an `__init__` with a class-level doc.
Method: z	
Parent: )rš   rÃ  r©  r   rÁ   Úinherit_docrœ   r’  )rš  rD  r–  s     €r    r›  zinherit_doc.<locals>.decorateâ  s€   ø€ ØÔ *Ò,Ð,µ½DÀ¹O¼OÍTÑ1RÔ1RÐ,Ý!'¨	Ñ!2Ô!2ˆJÔØÐð%•Ô%ð %ð %Ø!Ô.ð%ð %à ð%ð %ð 	õ
 ˜‰nŒnÐrŸ   )rš  r›  r¦   r›  rž   )r–  r›  s   ` r    r�  r�  Õ  s(   ø€ ð	ð 	ð 	ð 	ð 	ð 	ð €OrŸ   úobject | type[Any]c               ó´   — t          | t          ¦  «        r| nt          | ¦  «        }|j        dk    r|j        nd}|› d|j        › �                     d¦  «        S )NÚbuiltinsr�  r¥  )r>  r©  r›   rš   Úlstrip)rä  rs  Úmodules      r    r‘  r‘  ð  s[   € Ý˜3¥Ñ%Ô%Ð	4ˆˆ­4°©9¬9€BØ œm¨zÒ9Ð9ˆRŒ]ˆ]¸r€FØÐ$Ð$�r”{Ð$Ð$×+Ò+¨CÑ0Ô0Ð0rŸ   r¢  Úvalid_typesú	type[Any]r£  c              óŒ  — t          | |¦  «        s³d                     d„ |D ¦   «         ¦  «        }d|›dt          | ¦  «        ›�}|rnd}t          | ¦  «        }t	          |¦  «        dk    rt          | ¦  «        › d�}|› |› d�}d	t	          |¦  «        z  d
t	          |¦  «        z  z   }|› d|› |› d|› �}t          |¦  «        ‚dS )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  ó4   K  — | ]}t          |¦  «        V — Œd S r¨   )r‘  )r¢  rs  s     r    r¤  zensure_type.<locals>.<genexpr>  s+   è è € ÐLÐL¸"Õ1°"Ñ5Ô5ÐLÐLÐLÐLÐLÐLrŸ   z	Expected z, got: z    é(   z(...)ú=r·  ú^r~  N)r>  rÙ  r‘  rZ  r‡  r’  )	rä  r£  r£  Útp_namesrD  Úleft_padr–  ÚassignÚ	underlines	            r    r¤  r¤  ö  sú   € õ@ �c˜;Ñ'Ô'ð Ø—:’:ÐLÐLÀÐLÑLÔLÑLÔLˆØI˜(ÐIÐIÕ-@ÀÑ-EÔ-EÐIÐIˆØð 	7ØˆHÝ�s‘)”)ˆCÝ�3‰xŒx˜"Š}ˆ}Ý,¨SÑ1Ô1Ð8Ð8Ð8�Ø Ð/ *Ð/Ð/Ð/ˆFØ�s 6™{œ{Ñ*¨sµS¸±X´X©~Ñ>ˆIØÐ6Ð6˜FÐ6 CÐ6Ð6¨9Ð6Ð6ˆCÝ˜‰nŒnÐðð rŸ   c                  ó*   — e Zd ZdZdd„Zdd„Zdd
„ZdS )Ú_DeferredIterablezLStore a callable producing an iterable to defer collection until we need it.Ú	into_iterúCallable[[], Iterable[_T]]r¦   rÝ   c               ó   — || _         d S r¨   ©Ú
_into_iter)rª   r°  s     r    rM  z_DeferredIterable.__init__'  s   € Ø6?ˆŒˆˆrŸ   úIterator[_T]c              #  ó>   K  — |                       ¦   «         E d {V —† d S r¨   r³  r±   s    r    Ú__iter__z_DeferredIterable.__iter__*  s.   è è € Ø—?’?Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ð$rŸ   útuple[_T, ...]c                óv   — |                       ¦   «         }t          |t          ¦  «        r|nt          |¦  «        S r¨   )r´  r>  rŒ  )rª   Úits     r    Úto_tuplez_DeferredIterable.to_tuple-  s0   € à�_Š_ÑÔˆÝ ¥EÑ*Ô*Ð9ˆrˆrµ°b±	´	Ð9rŸ   N)r°  r±  r¦   rÝ   )r¦   rµ  )r¦   r¸  )rš   r›   rœ   rÁ   rM  r·  r»  rž   rŸ   r    r¯  r¯  $  sZ   € € € € € ØVÐVð@ð @ð @ð @ð%ð %ð %ð %ð:ð :ð :ð :ð :ð :rŸ   r¯  é@   Únestedúattrgetter[Any]c                óZ   — |rd                      | g|¢R ¦  «        n| }t          |¦  «        S rw  )rÙ  r   )r   r½  rS  s      r    Údeep_attrgetterrÀ  3  s3   € à(.Ð8ˆ3�8Š8�T�O˜F�O�OÑ$Ô$Ð$°D€DÝ�dÑÔÐrŸ   Úname_1c                ó.   —  t          |g|¢R Ž | ¦  «        S )z+Perform a nested attribute lookup on `obj`.)rÀ  )rä  rÁ  r½  s      r    Údeep_getattrrÃ  9  s"   € à+�?˜6Ð+ FÐ+Ð+Ð+¨CÑ0Ô0Ð0rŸ   c                  ó   — e Zd ZdS )Ú	CompliantN)rš   r›   rœ   rž   rŸ   r    rÅ  rÅ  >  s   € € € € € à€3rŸ   rÅ  c                  ó*   — e Zd ZdZedd„¦   «         ZdS )Ú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
    r¦   úCompliant[NativeT_co]c                ó   — d S r¨   rž   r±   s    r    r  zNarwhals._compliant\  s   € Ø36°3rŸ   N)r¦   rÈ  )rš   r›   rœ   rÁ   r³   r  rž   rŸ   r    rÇ  rÇ  C  s2   € € € € € ðð ð0 Ø6Ð6Ð6ñ „XØ6Ð6Ð6rŸ   rÇ  c                  óŠ  — 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dAd„¦   «         ZedBd„¦   «         ZedCd"„¦   «         ZedDd%„¦   «         ZedEd(„¦   «         ZedFd+„¦   «         ZedGd.„¦   «         ZedHd1„¦   «         ZedId4„¦   «         ZedJd7„¦   «         ZdKd9„Zd:S )LÚ_ImplementationzµDescriptor for matching an opaque `Implementation` on a generic class.

    Based on [pyright comment](https://github.com/microsoft/pyright/issues/3071#issuecomment-1043978070)
    r¤   r¤  rS  r—   r¦   rÝ   c                ó   — || _         d S r¨   )rš   rU  s      r    rV  z_Implementation.__set_name__f  s   € Ø!ˆŒˆˆrŸ   r£   úNarwhals[NativePolars]r   rl   c                ó   — d S r¨   rž   r©   s      r    r«   z_Implementation.__get__i  ó   € ØTWÐTWrŸ   úNarwhals[NativePandas]rj   c                ó   — d S r¨   rž   r©   s      r    r«   z_Implementation.__get__k  rÏ  rŸ   úNarwhals[NativeModin]ri   c                ó   — d S r¨   rž   r©   s      r    r«   z_Implementation.__get__m  ó   € ØRUÐRUrŸ   úNarwhals[NativeCuDF]rb   c                ó   — d S r¨   rž   r©   s      r    r«   z_Implementation.__get__o  ó   € ØPSÐPSrŸ   úNarwhals[NativePandasLike]rk   c                ó   — d S r¨   rž   r©   s      r    r«   z_Implementation.__get__q  s	   € ð ˜#rŸ   úNarwhals[NativeArrow]ra   c                ó   — d S r¨   rž   r©   s      r    r«   z_Implementation.__get__u  rÔ  rŸ   ú3Narwhals[NativePolars | NativeArrow | NativePandas]ú&_PolarsImpl | _PandasImpl | _ArrowImplc                ó   — d S r¨   rž   r©   s      r    r«   z_Implementation.__get__w  s	   € ð 25°rŸ   úNarwhals[NativeDuckDB]rd   c                ó   — d S r¨   rž   r©   s      r    r«   z_Implementation.__get__{  rÏ  rŸ   úNarwhals[NativeSQLFrame]ro   c                ó   — d S r¨   rž   r©   s      r    r«   z_Implementation.__get__}  s	   € ð ˜rŸ   úNarwhals[NativeDask]rc   c                ó   — d S r¨   rž   r©   s      r    r«   z_Implementation.__get__�  r×  rŸ   úNarwhals[NativeIbis]rf   c                ó   — d S r¨   rž   r©   s      r    r«   z_Implementation.__get__ƒ  r×  rŸ   ú.Narwhals[NativePySpark | NativePySparkConnect]ú"_PySparkImpl | _PySparkConnectImplc                ó   — d S r¨   rž   r©   s      r    r«   z_Implementation.__get__…  s	   € ð .1¨SrŸ   útype[Narwhals[Any]]rC   c                ó   — d S r¨   rž   r©   s      r    r«   z_Implementation.__get__Š  s   € ØKNÈ3rŸ   úDataFrame[Any] | Series[Any]re   c                ó   — d S r¨   rž   r©   s      r    r«   z_Implementation.__get__Œ  r³  rŸ   úLazyFrame[Any]rg   c                ó   — d S r¨   rž   r©   s      r    r«   z_Implementation.__get__�  s   € ØQTÐQTrŸ   úNarwhals[Any] | Nonec                ó"   — |€| n|j         j        S r¨   )r  rÔ   r©   s      r    r«   z_Implementation.__get__’  s   € ØÐ'ˆtˆt¨XÔ-@Ô-PÐPrŸ   N)r¤   r¤  rS  r—   r¦   rÝ   )r£   rÍ  r¤   r   r¦   rl   )r£   rÐ  r¤   r   r¦   rj   )r£   rÒ  r¤   r   r¦   ri   )r£   rÕ  r¤   r   r¦   rb   )r£   rØ  r¤   r   r¦   rk   )r£   rÚ  r¤   r   r¦   ra   )r£   rÜ  r¤   r   r¦   rÝ  )r£   rß  r¤   r   r¦   rd   )r£   rá  r¤   r   r¦   ro   )r£   rã  r¤   r   r¦   rc   )r£   rå  r¤   r   r¦   rf   )r£   rç  r¤   r   r¦   rè  )r£   rÝ   r¤   rê  r¦   rC   )r£   rì  r¤   r   r¦   re   )r£   rî  r¤   r   r¦   rg   )r£   rð  r¤   r   r¦   r   )rš   r›   rœ   rÁ   rV  r    r«   rž   rŸ   r    rË  rË  `  sÊ  € € € € € ðð ð
"ð "ð "ð "ð ØWÐWÐWñ „XØWØØWÐWÐWñ „XØWØØUÐUÐUñ „XØUØØSÐSÐSñ „XØSØðð ð ñ „Xðð ØUÐUÐUñ „XØUØð5ð 5ð 5ñ „Xð5ð ØWÐWÐWñ „XØWØðð ð ñ „Xðð ØSÐSÐSñ „XØSØØSÐSÐSñ „XØSØð1ð 1ð 1ñ „Xð1ð ØNÐNÐNñ „XØNØð ð  ð  ñ „Xð ð ØTÐTÐTñ „XØTðQð Qð Qð Qð Qð QrŸ   rË  Útblúpa.Table | pa.RecordBatchReaderc                ól   — dd l }t          | |j        ¦  «        r|j                             | ¦  «        S | S rK  )r  r>  ÚRecordBatchReaderÚTableÚfrom_batches)rò  Úpas     r    Úto_pyarrow_tablerù  –  s>   € ØÐÐÐå�#�rÔ+Ñ,Ô,ð *ØŒx×$Ò$ SÑ)Ô)Ð)Ø€JrŸ   rS  Úarg_namer"  c               óH   — |dk     rd| › d|› d|› d�}t          |¦  «        ‚dS )a  Reject a negative width/length for a `str` method that backends disagree on.

    Natively these either raise something inscrutable, or quietly return the input
    unchanged, so the public `Expr`/`Series` accessors validate up-front and every
    backend gets the same error.
    r   ú`str.z ` only supports a non-negative `z`, got r¥  Nr  )rS  rú  r"  rD  s       r    Úvalidate_str_non_negativerý  ž  s@   € ð ˆq‚y€yØU�dÐUÐU¸HÐUÐUÈUÐUÐUÐUˆÝ˜‰oŒoÐð €yrŸ   ÚoffsetrÄ  c                ó:   — |�| dcxk     r	| |z   k    rn ndS | |z   S )zITranslate Polars' `str.slice(offset, length)` into a Python-slice `stop`.Nr   rž   )rþ  rÄ  s     r    Ústr_slice_stopr   ª  s;   € à€~˜ !Ð6Ð6Ò6Ð6 v°¡Ò6Ð6Ð6Ð6Ð6ØˆtØ�F‰?ÐrŸ   Ú	fill_charc               ó~   — t          |¦  «        dk    rd| › d|›d�}t          |¦  «        ‚t          | d|¦  «         dS )zIReject `str.pad_start`/`str.pad_end` arguments that backends disagree on.ro  rü  z4` only supports a single-character `fill_char`, got r¥  rÄ  N)r‡  r9  rý  )rS  rÄ  r  rD  s       r    Úvalidate_pad_argumentsr  ±  sP   € å
ˆ9�~„~˜ÒÐØ^�dÐ^Ð^ÐPYÐ^Ð^Ð^ˆÝ˜‰oŒoÐÝ˜d H¨fÑ5Ô5Ð5Ð5Ð5rŸ   Ú	separatorÚnative_separatorsútuple[str, ...]r•  úMapping[str, Any]c          
     óx   — |D ]6}||v r0||         | k    r$d|› d| › d|› d||         › d�	}t          |¦  «        ‚Œ7dS )zSEnsure `separator` does not conflict with backend-native aliases passed via `kwds`.z`separator` and `z` do not match: `separator`=z and `z`=r¥  N)r’  )r  r  r•  Únative_separatorrD  s        r    Úvalidate_separatorsr
  ¹  s›   € ð .ð !ð !ÐØ˜tÐ#Ð#¨Ð-=Ô(>À)Ò(KÐ(Kð^Ð$4ð ^ð ^Ø(ð^ð ^Ø0@ð^ð ^ØDHÐIYÔDZð^ð ^ð ^ð õ ˜C‘.”.Ð øð!ð !rŸ   ÚobjectúTypeIs[IO[bytes] | IO[str]]c               ó,   — t          | t          ¦  «        S r¨   )r>  r   rW  s    r    Úis_file_liker  Æ  s   € Ý�c�6Ñ"Ô"Ð"rŸ   Úsourcer€   r;  úImplementation | PluginNamer   c               óN   — t          | ¦  «        rd|› d�}t          |¦  «        ‚| S )zJReject file-like objects for backends whose native reader requires a path.z9Reading from a file-like object is not supported for the zZ backend.

Hint: use 'pandas', 'polars' or 'pyarrow', or write the buffer to a file first.)r  r’  )r  r;  rD  s      r    Úensure_path_sourcer  Ê  sF   € õ �FÑÔð ð^Èð ^ð ^ð ^ð 	õ ˜‰nŒnÐØ€MrŸ   Úwin32ústr | os.PathLike[str]c               ó†   — ddl m}  |t          | t          ¦  «        r| nt          t	          | ¦  «        ¦  «        ¦  «        S ©Nr   )r   )Únarwhals.typingr   r>  r—   r   ©r  r   s     r    Ú_normalize_pathr  Ù  sE   € Ø2Ð2Ð2Ð2Ð2Ð2àˆ~­
°6½3Ñ(?Ô(?ÐV˜f˜fÅSÍÈfÉÌÑEVÔEVÑWÔWÐWrŸ   c               ób   — ddl m}  |t          | ¦  «                             ¦   «         ¦  «        S r  )r  r   r   Úas_posixr  s     r    r  r  ä  s6   € Ø2Ð2Ð2Ð2Ð2Ð2àˆ~�d 6™lœl×3Ò3Ñ5Ô5Ñ6Ô6Ð6rŸ   r{   c               óB   — t          | ¦  «        r| nt          | ¦  «        S r¨   )r  r  )r  s    r    Únormalize_sourcer  ê  s!   € Ý! &Ñ)Ô)ÐFˆ6ˆ6­¸vÑ/FÔ/FÐFrŸ   úbool | Iterable[bool]Ún_matchúSequence[bool]c                óV   — t          | t          ¦  «        r| f|z  n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>  rG  rŒ  )r"  r  s     r    Úextend_boolr"  î  s+   € õ ",¨Eµ4Ñ!8Ô!8ÐJˆEˆ8�gÑÐ½eÀE¹l¼lÐJrŸ   c                  ó   — e Zd ZdZdd„ZdS )Ú
_NoDefaultÚ
NO_DEFAULTr¦   r—   c                ó   — dS )Nz<no_default>rž   r±   s    r    rR  z_NoDefault.__repr__þ  s   € Øˆ~rŸ   Nrh  )rš   r›   rœ   Ú
no_defaultrR  rž   rŸ   r    r$  r$  ù  s/   € € € € € ð €Jðð ð ð ð ð rŸ   r$  )rü   rÏ   r¦   râ   )rü   rÏ   r¦   rz   )rü   rÏ   r¦   rë   )rü   rÏ   r¦   rï   )rü   rÏ   r¦   ró   )rj  rÓ   r¦   rG  )rE  r—   r¦   r=   )rj  rÓ   r¦   rÉ   )rƒ  r   r¦   r„  )rŠ  r   r¦   r   )rŠ  rŽ  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´  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¦   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ä  r‹   r¦   r‹   )rä  r   r&  r   r¦   rÿ  )r  r  r&  r   r¦   rG  )rä  r‹   rƒ  rG  r	  r
  r¦   r‹   )r  rŸ  r  r„   r¦   r  )rö   r  r¦   rG  )r/  )r0  rŸ  r²   r1  r2  r—   r¦   r—   )r;  r®   r<  r=  r>  rG  r¦   r?  )rH  rI  r¦   r—   )rO  rP  r¦   rQ  )rä  r   r¦   rT  )rä  r   r¦   rY  )rä  rP  r¦   r^  )rä  r   r¦   rb  )rä  r   r¦   rf  )rä  r   r¦   rj  )rä  r   r¦   rl  )rä  r   r¦   ro  )rä  r   rs  r«  r¦   rt  )rw  rx  r¦   ry  )rä  r   rs  r«  r¦   rQ  )rä  r   r¦   r…  )r>  r‰  rñ  r‰  rŠ  rG  r¦   rG  )r�  r—   rŽ  rG  r¦   r�  )r�  rŸ  rž  rŸ  r¦   r   )
r¦  rŸ  r§  r¨  r©  rŸ  rª  rG  r¦   rŸ  )r®  r—   r¯  r—   r¦   r—   )r<  rË  rA  rË  r¦   rÌ  )r²   rË  r¦   rÝ   )rÜ  rÝ  rÞ  rß  r¦   rà  )
r'  rt   ré   rz   ré  rì  rê  rí  r¦   rG  )r;  r®   r¦   r¯   )r;  r®   rõ  r1  r¦   r¯   )rõ  r¯   r¦   rú  )rä  r   r   r—   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  )r€  rÓ   r¦   r"  )rä  r   r¦   r%  )rä  r   r¦   r(  )r,  rË  r-  rË  r.  r—   r¦   r/  )r6  r\   r7  rÖ   r¦   r8  )r‘  r�   r¦   r�   )r@  r—   r¦   rG  r„  )rb  r—   r\  r—   rH  r—   r¦   rc  )rg  r—   rh  r—   r¦   r—   )r†  r‰   r²   r¯   r¦   r‡  )r“  r’  rŒ  r’  r¦   r’  )r–  r—  r¦   r˜  )rä  rž  r¦   r—   )rä  r   r£  r¤  r£  r—   r¦   rÝ   )r   r—   r½  r—   r¦   r¾  )rä  r   rÁ  r—   r½  r—   r¦   r   )rò  ró  r¦   r8  )rS  r—   rú  r—   r"  rŸ  r¦   rÝ   )rþ  rŸ  rÄ  rŸ  r¦   rŸ  )rS  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   (>  Ú
__future__r   rº  r   ÚsysÚcollections.abcr   r   r   r   r   r	   r
   Údatetimer   Úenumr   r   Ú	functoolsr   r   r   Úimportlib.utilr   Úinspectr   r   Úior   Ú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/   r0   r1   r2   r3   r4   r5   r6   r7   Únarwhals.exceptionsr8   r9   r:   r;   r<   Útypesr=   r>   r?   r@   r  r”  r  r•  r  rø  Útyping_extensionsrA   rB   rC   rD   Únarwhals._compliantrE   rF   rG   Ú!narwhals._compliant.any_namespacerH   Únarwhals._compliant.typingrI   rJ   rK   rL   r   rN   Únarwhals._nativerO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   Únarwhals._translater[   r\   r]   Únarwhals._typingr^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   r
  rq   rr   rÂ  rt   r  rv   r  rw   rx   ry   rz   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   r�   rŽ   r�   r�   r‘   r’   r“   r”   r–   r¢   r®   r´   rµ   r·   r¸   r�   r¹   rº   r»   r½   rÄ   rÈ   rÎ   rÒ   rÖ   rÚ   rÜ   rÏ   rä   rè   rí   rñ   rõ   rÓ   rn  r(  r)  r*  r+  r,  r2  r-  r.  r/  r0  r1  rx  rB  rC  rg  r‰  r�  rˆ  rš  r  r¯  rÎ  rã  rê  rø  rþ  r  rü  r  r  r.  r6  r5  rG  rN  rS  rX  r]  ra  re  ri  r[  rn  rr  rv  r  r„  rˆ  rŒ  rœ  r¥  r­  rÊ  rD  rÛ  rë  rñ  rô  rù  rþ  r  rÿ  r  r  r  r`  r\  rq  r  r  r!  r$  r'  r+  r5  r=  r?  rE  rG  r[  rj  rl  r‰  r‹  r’  r•  r�  r‘  r¤  r¯  rÀ  rÃ  rÅ  rÇ  rË  rù  rý  r   r  r
  r  r  Úplatformr  r  r"  r$  r'  r%  r©  rd  rž   rŸ   r    ú<module>rC     s  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø $Ð $Ð $Ð $Ð $Ð $Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð &Ð %Ð %Ð %Ð %Ð %Ø :Ð :Ð :Ð :Ð :Ð :Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð*ð ð ð ð ð ð ð ð ð ð ð ð ñ e0Ø#Ð#Ð#Ð#Ð#Ð#Ø Ð Ð Ð Ð Ð Ø1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1àÐÐÐØÐÐÐØÐÐÐØHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHÐHàVÐVÐVÐVÐVÐVÐVÐVÐVÐVØCÐCÐCÐCÐCÐCðð ð ð ð ð ð ð ð ð ð ð ð .Ð-Ð-Ð-Ð-Ð-ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ZÐYÐYÐYÐYÐYÐYÐYÐYÐYðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð( 8Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ø%Ð%Ð%Ð%Ð%Ð%Ø&Ð&Ð&Ð&Ð&Ð&ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð. �WØ 	¨#¤°¸3´Ñ ?À&ÈÄ+Ñ Mðñ ô €Nð ˆ'�%‰.Œ.€CØ
ˆ'�%‰.Œ.€CØ
ˆ'�%‰.Œ.€CØ
ˆ'�%Ð3Ð
4Ñ
4Ô
4€CØˆ	�#‰Œ€AØˆ�‰Œ€AØ	ˆ�‰Œ€BØ	ˆ�‰Œ€Bðð ð ð ð ˜8ñ ô ð ðRð Rð Rð Rð R�xñ Rô Rð Rð0ð 0ð 0ð 0ð 0˜ñ 0ô 0ð 0ð
 €WˆT�]„]€ØˆW�\¨TÐ2Ñ2Ô2€
Ø�˜°4Ð8Ñ8Ô8€ØJ€Ð JÐ JÐ JÑ JØ�˜¨|Ð<Ñ<Ô<€ØA€Ð AÐ AÐ AÑ AØ<€Ð <Ð <Ð <Ñ <ðð ð ð ð �H˜ZÔ(ñ ô ð ðð ð ð ð �x Ô.ñ ô ð ðð ð ð ð ˜Hñ ô ð ð-ð -ð -ð -ð -�Xñ -ô -ð -ð
Jð Jð Jð Jð J˜Hñ Jô Jð Jð
ð ð ð ð Ð+¨^¸Xñ ô ð ðð ð ð ð Ð(Ð*?Àñ ô ð ð	4ð 	4ð 	4ð 	4ð 	4Ð2°Hñ 	4ô 	4ð 	4ð%ð %ð %ð %ð %ˆdñ %ô %ð %ð4 €�1ÐÑÔñð ð ñ Ôðð €�1ÐÑÔñð ð ñ Ôðð €�1ÐÑÔñð ð ñ Ôðð €�1ÐÑÔñð ð ñ Ôðð €�1ÐÑÔñð ð ñ ÔððM%ð M%ð M%ð M%ð M%�Zñ M%ô M%ð M%ñ`5ð 5ð 5ð 5ð Ô˜9ØÔ˜*ØÔ˜ØÔ˜EØÔ˜FØÔ" FØÔ˜:ØÔ˜ØÔ˜6ØÔ˜ØÔ˜Zð:€ð ð ð ñ ð ÔÐ)ØÔ˜.ØÔ˜MØÔ"Ð$9ð	@Ð ð ð ð ñ ð Dð €�2ÐÑÔñ&ð &ð &ñ Ôð&ð ñð ð ñ „ðñ<Qð Qð Qð Qñð ð ð ñSð Sð Sð Sñ*%ð %ð %ð %ñLð Lð Lð Lð 
ñð ð ñ 
„ðð
 
ñ ð  ð  ñ 
„ð ð
 
ñ"ð "ð "ñ 
„ð"ð
 
ñ.ð .ð .ñ 
„ð.ð
 
ñ(ð (ð (ñ 
„ð(ð
 
ñ:ð :ð :ñ 
„ð:ð
 
ñð ð ñ 
„ðñ
ð ð ð ñð ð ð ñYð Yð Yð Yñxð ð ð ðF ,0ñSð EIð	Sð Sñ Sð Sð Sð Sñl,ð ,ð ,ð ,ñ^8ð 8ð 8ð 8ñ	ð 	ð 	ð 	ñ&*ð &*ð &*ð &*ñRð ð ð ñ*?ð ?ð ?ð ?ðF :>ñ[ñ [ð [ð [ð [ð :>ñ)&ñ )&ð )&ð )&ð )&ñXð ð ð ñCð Cð Cð CñLð Lð Lð Lñ9ð 9ð 9ð 9ñð ð ð ñð ð ð ñ	ð 	ð 	ð 	ñ"ð "ð "ð "ñ>ð >ð >ð >ñð ð ð ñð ð ð ñJð Jð Jð Jñ
>ð >ð >ð >ñð ð ð ñ0ð 0ð 0ð 0ñð ð ð ð& °ð&ð &ñ &ñ &ð &ñ &ñR$ñ $ð $ñ $ñ0ñ ð ñ ñ@ñ ð ñ ñ<ñ ð ñ ñ"ñ "ð "ñ "ñ"ñ "ð "ñ "ñ*
ñ 
ð 
ñ 
ññ ð ñ ñMñ Mð Mñ Mññ ð ñ ð ‘6‘8”8�	Ñ Ð Ñ Ñ ñAñ Að Añ Añ:ñ :ð :ñ :ñ:ñ :ð :ñ :ñ7ñ 7ð 7ñ 7ñ?ñ ?ð ?ñ ?ñ?ñ ?ð ?ñ ?ñSñ Sð Sñ Sññ ð ñ ñZñ Zð Zñ Zñ

ñ 
ð 
ñ 
ñ8ñ 8ð 8ñ 8ñ6ñ 6ð 6ñ 6ñBñ Bð Bñ Bñ,#ñ #ð #ñ #ñ ñ ð ñ ñ,;ñ ;ð ;ñ ;ð$V(ð V(ñ V(ð V(ñ V(ñ V(ô V(ñ V(ðt &(ñ#ñ #ñ #ð #ñ #ññ ð ñ ð"Rð Rñ Rð Rñ Rñ Rô Rñ Rñjñ ð ñ ð
3ð 
3ñ 
3ð 
3ñ 
3�xñ 
3ô 
3ñ 
3ð �WÑ1Ñ9IÐJÑJÔJÑ ñ,ñ ,ð ,ñ ,ññ ð ñ ñ61ñ 1ð 1ñ 1ð IKñ +ð +ñ +ñ +ð +ñ +ð\:ð :ñ :ð :ñ :˜ œñ :ô :ñ :ð €‘2ÐÑÔññ ð ñ Ôññ
1ñ 1ð 1ñ 1ð
ð ñ ð ñ Ø�*ÔÐ4°h¸zÔ6Jñô ñ ð
7ð 7ñ 7ð 7ñ 7ˆx˜
Ô#ñ 7ô 7ñ 7ð:3Qð 3Qñ 3Qð 3Qñ 3Qñ 3Qô 3Qñ 3Qñlñ ð ñ ñ	ñ 	ð 	ñ 	ññ ð ñ ñ6ñ 6ð 6ñ 6ñ
!ñ 
!ð 
!ñ 
!ñ#ñ #ð #ñ #ñ
ñ 
ð 
ñ 
ð …<‘7ÒÐñXñ Xð Xñ Xð Xñ7ñ 7ð 7ñ 7ñGñ Gð Gñ GñKñ Kð Kñ Kðð ñ ð ñ �ñ ô ñ ñ Õ"�
á�
ð ‰4�‰:Œ:�€€rŸ   