§
    ŠhþhÓ ã                  ó(  — U d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZmZ d dlmZmZmZmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlm Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZE d dlFmGZGmHZHmIZI e"�r‡d dlmJZJ d dlKmLZL d dlMZNd dlOZPd dlQZRd dlSmTZTmUZUmVZVmWZWmXZXmYZY d dlZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z` d dlambZb d dlcmdZdmeZemfZfmgZg d dlhmiZi d dljmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZv d dlwmxZxmyZymzZz 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Œ 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¤ e¥Z¦d e§d!<    e)d"e*e�e#         eŽe#         e“e#         f         ¬#¦  «        Z¨ e)d$¦  «        Z© e)d%¦  «        Zª e)d&¦  «        Z« e)d'd(¬#¦  «        Z¬ eVd)¦  «        Z­ e)d*¦  «        Z® e)d+¦  «        Z¯ e)d,¦  «        Z° G d-„ d.e(¦  «        Z± G d/„ d0e(¦  «        Z² G d1„ d2e(¦  «        Z³ e)d3¦  «        Z´ e)d4d5¬6¦  «        Zµ e)d7d5¬6¦  «        Z¶d8Z·d e§d9<    e)d:e·¬#¦  «        Z¸d;Z¹d e§d<<   d=Zºd e§d><    G d?„ d@e(eµ         ¦  «        Z» G dA„ dBe(e¶         ¦  «        Z¼ G dC„ dDe(¦  «        Z½ G dE„ dFe(¦  «        Z¾ G dG„ dHe(¦  «        Z¿ G dI„ dJe¿e¾e(¦  «        ZÀ G dK„ dLe¿e½e(¦  «        ZÁ G dM„ dNe¿e(¦  «        ZÂ G dO„ dPe¦  «        ZÃ G dQ„ dRe.¦  «        ZÄeÄjÅ        dSeÄjÆ        dTeÄjÇ        dUeÄjÈ        dVeÄjÉ        dWeÄjÊ        dWeÄjË        dXeÄjÌ        dYeÄjÍ        dZeÄjÎ        d[eÄjÏ        d\iZÐd]e§d^<   eÄjÌ        d_eÄjÆ        d`eÄjÉ        daeÄjÊ        dbiZÑdce§dd<   	  ede¬f¦  «        �dpdk„¦   «         ZÒe�dqdn„¦   «         ZÓ�drdr„ZÔ�dsdt„ZÕ�dtdw„ZÖ�dud{„Z×�dvd~„ZØe,�dwd„„¦   «         ZÙe,�dxd‡„¦   «         ZÙe,�dydŠ„¦   «         ZÙe,�dzdŒ„¦   «         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Þe"r eeßd5¬©¦  «        Zàn"d dlZejá        dªk    r eeßd5¬©¦  «        Zàn�d…d­„Zà�d†d°„Zâ�d‡d³„Zã�dˆd¶„Zä�d‰d¼„Zå�dŠd¿„Zæ	 �d‹�dŒdÅ„Zç	 �d‹�dŒdÆ„Zè�d�dÌ„Zé�dŽdÐ„Zê�d�dÒ„Zë�d�dÔ„Zì�d‘dÖ„Zí�d’dØ„Zî�d“dÚ„Zï�d”dÜ„Zð�d•dÞ„Zñ�d–dá„Zò�d—då„Zó�d˜dæ„Zô�d™dê„Zõdëdìdíœ�dšdñ„Zö�d›dö„Z÷�dœdù„Zø�d�dý„Zù�dždþ„Zú�dŸ�d„Zû�d �d„Zü�d¡�d„Zý�d¢�d„Zþ�d£�d„Zÿ �e ¦   «         �Z�de§�d<   �d¤�d„�Z�d¥�d„�Z�d¦�d„�Z�d§�d „�Z�d§�d!„�Z�d¨�d$„�Z�d©�d&„�Z�dª�d)„�Z	�d«�d+„�Z
�d¬�d-„�Z�d­�d/„�Z�d®�d1„�Z�d¯�d6„�Z�d°�d;„�Z�d±�d=„�Z�d²�d?„�Z G �d@„ �dA¦  «        �Z�d³�dE„�Z G �dF„ �dG¦  «        �Z�d´�dK„�Z�dµ�dO„�Z�d¶�dQ„�Zdë�dRœ�d·�dV„�Z G �dW„ �dXe&e´         ¦  «        �Z e�dY¬f¦  «        �d¸�d\„¦   «         �Z�d¹�d^„�Z G �d_„ �d`e»eµ         e¿e(eµ         ¦  «        �Z G �da„ �dbe(eµ         ¦  «        �Z G �dc„ �dd¦  «        �Z�dº�dg„�Z�d»�dj„�Z �d¼�do„�Z!dS (½  é    )ÚannotationsN)Ú
CollectionÚ	ContainerÚIterableÚIteratorÚMappingÚSequence)Útimezone)ÚEnumÚauto)ÚcacheÚ	lru_cacheÚpartialÚwraps)Ú	find_spec)Úgetattr_staticÚgetdoc)Úchain)Ú
attrgetter)Ú	token_hex)ÚTYPE_CHECKINGÚAnyÚCallableÚFinalÚGenericÚLiteralÚProtocolÚTypeVarÚUnionÚcastÚoverload)Ú
NoAutoEnum)Úissue_deprecation_warning)Úassert_neverÚ
deprecated)Úget_cudfÚget_dask_dataframeÚ
get_duckdbÚget_ibisÚ	get_modinÚ
get_pandasÚ
get_polarsÚget_pyarrowÚget_pyspark_connectÚget_pyspark_sqlÚget_sqlframeÚis_narwhals_seriesÚis_narwhals_series_intÚis_numpy_array_1dÚis_numpy_array_1d_intÚis_pandas_like_dataframeÚis_pandas_like_series)ÚColumnNotFoundErrorÚDuplicateErrorÚInvalidOperationError)ÚSet)Ú
ModuleType)ÚConcatenateÚLiteralStringÚ	ParamSpecÚSelfÚ	TypeAliasÚTypeIs)ÚCompliantExprÚCompliantExprTÚCompliantFrameTÚCompliantSeriesOrNativeExprT_coÚCompliantSeriesTÚNativeSeriesT_co)ÚNamespaceAccessor)ÚAccessorÚ	EvalNamesÚNativeDataFrameTÚNativeLazyFrameT©Ú	Namespace)ÚNativeArrowÚ
NativeCuDFÚ
NativeDaskÚNativeDuckDBÚ
NativeIbisÚNativeModinÚNativePandasÚNativePandasLikeÚNativePolarsÚNativePySparkÚNativePySparkConnectÚNativeSQLFrame)ÚArrowStreamExportableÚIntoArrowTableÚToNarwhalsT_co)ÚBackendÚIntoBackendÚ
_ArrowImplÚ	_CuDFImplÚ	_DaskImplÚ_DuckDBImplÚ_EagerAllowedImplÚ	_IbisImplÚ_LazyAllowedImplÚ_LazyFrameCollectImplÚ
_ModinImplÚ_PandasImplÚ_PandasLikeImplÚ_PolarsImplÚ_PySparkConnectImplÚ_PySparkImplÚ_SQLFrameImpl©Ú	DataFrameÚ	LazyFrame©ÚDType©ÚSeries)ÚCompliantDataFrameÚCompliantLazyFrameÚCompliantSeriesÚDTypesÚ
FileSourceÚIntoSeriesTÚMultiIndexSelectorÚSingleIndexSelectorÚSizedMultiIndexSelectorÚSizeUnitÚSupportsNativeNamespaceÚTimeUnitÚ_1DArrayÚ_SliceIndexÚ
_SliceNameÚ
_SliceNoner@   ÚUnknownBackendNameÚFrameOrSeriesT)ÚboundÚ_T1Ú_T2Ú_T3Ú_FnzCallable[..., Any]ÚPÚRÚR1ÚR2c                  ó   — e Zd ZU ded<   dS )Ú_SupportsVersionÚstrÚ__version__N©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úF/var/www/histauto/venv/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__    s   € € € 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]Ú_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                ó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Ê   ÚV1Únarwhals.stable.v1._namespacerN   ÚV2Únarwhals.stable.v2._namespaceÚnarwhals._namespace)r¦   ÚNamespaceV1ÚNamespaceV2rN   s       rœ   Ú	namespacezVersion.namespace   sd   € à•7”:ÐÐØNÐNÐNÐNÐNÐNàÐØ•7”:ÐÐØNÐNÐNÐNÐNÐNàÐØ1Ð1Ð1Ð1Ð1Ð1àÐr›   ry   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   )Údtypes)rÊ   rß   Únarwhals.stable.v1rè   rá   Únarwhals.stable.v2Únarwhals)r¦   Ú	dtypes_v1Ú	dtypes_v2rè   s       rœ   rè   zVersion.dtypes  sc   € à•7”:ÐÐØ>Ð>Ð>Ð>Ð>Ð>àÐØ•7”:ÐÐØ>Ð>Ð>Ð>Ð>Ð>àÐØ#Ð#Ð#Ð#Ð#Ð#àˆr›   útype[DataFrame[Any]]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   )rp   )rÊ   rß   ré   rp   rá   rê   Únarwhals.dataframe)r¦   ÚDataFrameV1ÚDataFrameV2rp   s       rœ   Ú	dataframezVersion.dataframe  ód   € à•7”:ÐÐØCÐCÐCÐCÐCÐCàÐØ•7”:ÐÐØCÐCÐCÐCÐCÐCàÐØ0Ð0Ð0Ð0Ð0Ð0àÐr›   útype[LazyFrame[Any]]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ê   rð   )r¦   ÚLazyFrameV1ÚLazyFrameV2rq   s       rœ   Ú	lazyframezVersion.lazyframe*  rô   r›   útype[Series[Any]]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   rt   )rÊ   rß   ré   ru   rá   rê   Únarwhals.series)r¦   ÚSeriesV1ÚSeriesV2ru   s       rœ   ÚserieszVersion.series8  sa   € à•7”:ÐÐØ=Ð=Ð=Ð=Ð=Ð=àˆOØ•7”:ÐÐØ=Ð=Ð=Ð=Ð=Ð=àˆOØ*Ð*Ð*Ð*Ð*Ð*àˆr›   N)r¢   rÝ   )r¢   ry   )r¢   rî   )r¢   rõ   )r¢   rú   )r–   r—   r˜   r   rß   rá   Ú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Ê   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__c  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)   ÚIBISr0   ÚSQLFRAMEr.   ÚPYSPARK_CONNECTÚgetÚUNKNOWN)r  r  Úmappings      rœ   Úfrom_native_namespacez$Implementation.from_native_namespacef  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Î   r   )r  r#  s     rœ   Úfrom_stringzImplementation.from_string~  sA   € ð	*Ø�3�|Ñ$Ô$Ð$øÝð 	*ð 	*ð 	*Ý!Ô)Ð)Ð)Ð)ð	*øøøs   ‚
 �&¥&Úbackendú)IntoBackend[Backend] | UnknownBackendNamec                ó®   — 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Î   r"  )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Î   r   ÚAssertionErrorrÆ   Ú_IMPLEMENTATION_TO_MODULE_NAMEr  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  r  r  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Ð  r6  r›   c                ó   — | t           j        u S )a4  Return whether implementation is cuDF.

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

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

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

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.implementation.is_pyspark_connect()
            False
        )rÎ   r  r¬   s    rœ   Úis_pyspark_connectz!Implementation.is_pyspark_connect  s   € ð •~Ô5Ð5Ð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  rD  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  r?  r›   c                ó   — | t           j        u S )a8  Return whether implementation is DuckDB.

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

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

        Examples:
            >>> import polars as pl
            >>> import narwhals as nw
            >>> df_native = pl.DataFrame({"a": [1, 2, 3]})
            >>> df = nw.from_native(df_native)
            >>> df.implementation.is_sqlframe()
            False
        )rÎ   r  r¬   s    rœ   Úis_sqlframezImplementation.is_sqlframeE  s   € ð •~Ô.Ð.Ð.r›   rÄ   c                ó    — t          | ¦  «        S )zReturns backend version.©Úbackend_versionr¬   s    rœ   rÆ   zImplementation._backend_versionR  s   € å˜tÑ$Ô$Ð$r›   N©r¢   r“   )r  r  r  r;   r¢   rÎ   )r  r  r#  r“   r¢   rÎ   )r  r  r'  r(  r¢   rÎ   )r¢   r;   )r¢   r3  rÇ   )$r–   r—   r˜   r¼   r  r  r  r  r  r  r  r  r  r  r  r   r  Úclassmethodr"  r&  r+  r2  r5  r8  r:  r<  r>  rA  rC  rF  rH  rJ  rL  rN  rP  rÆ   rš   r›   rœ   rÎ   rÎ   G  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Î   )é   rV  é   )r   é   é   )é   é
   )é   )rW  é   )r   é   é   )iè  rX  )rV  rV  )é   )rW  é   r   z(Mapping[Implementation, tuple[int, ...]]ÚMIN_VERSIONSzdask.dataframezmodin.pandaszpyspark.sqlzpyspark.sql.connectzMapping[Implementation, str]r.  é   )Úmaxsizer1  r“   r¢   r;   c                ó$   — ddl m}  || ¦  «        S )Nr   )Úimport_module)Ú	importlibrf  )r1  rf  s     rœ   r/  r/  n  s$   € à'Ð'Ð'Ð'Ð'Ð'àˆ=˜Ñ%Ô%Ð%r›   ÚimplementationrÄ   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$   r   r.  r  r  r/  rP  Úsqlframe._versionrË   rC  rF  r  rJ  r  Úparse_versionrb  r%  )rh  Úimplr1  r  r  Úinto_versionr  r  ÚversionÚmin_versionr0  s              rœ   rS  rS  x  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 )NrV  r   )ÚlistÚlenÚ_is_iterable)rp  s    rœ   Úflattenrv  —  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*  rs  Útuple)rw  s    rœ   Útupleifyrz  ›  s$   € Ý�c�D¥%˜=Ñ)Ô)ð ØˆvˆØ€Jr›   úAny | Iterable[Any]r3  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   rt   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ü   ru   r+   r*  rp   r,   ÚExprrq   Úqualified_type_nameÚ	TypeErrorr   r“   Úbytes)rw  ru   ÚpdÚplr0  s        rœ   ru  ru  ¡  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›   rn  ú#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Ž  ry  Úsplit)rn  Úversion_strs     rœ   rk  rk  º  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   rr   )Únarwhals.dtypesrs   r*  r–  Ú
issubclass)r•  r—  rs   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   ro   c              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S r¤   ©r*  )r�  Úitemrp   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¶  rq   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ð   rp   rq   Úallr  )r±  r0  rp   rq   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_uniquer%  )rÂ  r0  s     rœ   Ú_validate_indexz*maybe_align_index.<locals>._validate_index(  s'   € ØŒð 	"Ø;ˆCÝ˜S‘/”/Ð!ð	"ð 	"r›   Ú_compliant_frameNÚ_compliant_seriesz6Expected `lhs` and `rhs` to have the same length, got z and )rÂ  r   r¢   rØ   )Únarwhals._pandas_like.dataframerÀ  Únarwhals._pandas_like.seriesrÁ  r    r*  ÚgetattrrÆ  rº   rÂ  Ú_with_compliantÚ_with_nativeÚlocrÇ  rt  r%  )r¼  r½  rÀ  rÁ  rÅ  Úlhs_anyÚrhs_anyr0  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_nativer5   r6   rÂ  )rÑ  Úobj_anyÚ
native_objs      rœ   Úmaybe_get_indexr×  c  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 Series)rh  )Únarwhals.translaterÔ  r    r%  ru  r5   rË  rÆ  rÌ  rà  r6   Únarwhals._pandas_like.utilsrÇ  rÏ   )	rÑ  rØ  rÂ  Údf_anyrÖ  r0  Ú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Ô  r5   Ú__native_namespace__Ú_has_default_indexrË  rÆ  rÌ  Úreset_indexr6   rÇ  )rÑ  rÕ  rÖ  r  s       rœ   Úmaybe_reset_indexrë  Ú  s  € õ8 �5˜#ÑÔ€GØ×"Ò"Ñ$Ô$€JÝ 
Ñ+Ô+ð 
Ø"×7Ò7Ñ9Ô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›   )Ústrict)rW  r[  Ú	iterablesúIterable[tuple[Any, ...]]c                 óN  ‡‡— t          | ¦  «        dk     r	t          | Ž S dŠdˆfd„}dˆˆfd„}t          | ¦  «        }t          t	          |¦  «         |¦   «         ¦  «        }t          t          t          |¦  «        ¦  «        Št          t          |g‰¢R Ž  |¦   «         ¦  «        S )NrY  Fr¢   r   c               3  ó   •K  — dŠ d S )NTrš   )Úfirst_stoppeds   €rœ   Ú
first_tailzzip_strict.<locals>.first_tail  s   øè è € à $�Ø�r›   c               3  ó€   •K  — ‰sd} t          | ¦  «        ‚t          j        ‰¦  «        D ]}d} t          | ¦  «        ‚d S )Nz$zip_strict: first iterable is longerz%zip_strict: first iterable is shorter)r%  r   Úfrom_iterable)r0  rÚ   rñ  Úrests     €€rœ   Úzip_tailzzip_strict.<locals>.zip_tail!  sU   øè è € Ø$ð *Ø@�CÝ$ S™/œ/Ð)ÝÔ,¨TÑ2Ô2ð ð �AØA�CÝ$ S™/œ/Ð)ðð r›   )r¢   r   )rt  ÚzipÚiterr   Únextrs  Úmap)rí  rò  rö  Úiterables_itÚfirstrñ  rõ  s        @@rœ   Ú
zip_strictrý    sÌ   øø€ å�9‰~Œ~ Ò!Ð!Ý˜I�Ð&à!ˆMðð ð ð ð ð ðð ð ð ð ð ð õ   	™?œ?ˆLÝ�$˜|Ñ,Ô,¨j¨j©l¬lÑ;Ô;ˆEÝ��D ,Ñ/Ô/Ñ0Ô0ˆDÝ�˜UÐ* TÐ*Ð*Ð*¨H¨H©J¬JÑ7Ô7Ð7r›   r  úTypeIs[pd.RangeIndex]c                ó,   — t          | |j        ¦  «        S r¤   )r*  Ú
RangeIndex)rÑ  r  s     rœ   Ú_is_range_indexr  1  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   rV  )rÂ  r  ÚstartÚstoprt  Ústep)r  r  rÂ  s      rœ   ré  ré  5  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‡   )rh  r8  rË  Ú
_compliantrÌ  rÔ  Úconvert_dtypesr    )rÑ  rp  r  Úresults       rœ   Úmaybe_convert_dtypesr  A  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 ©r%  )r  r  r0  s      rœ   Úscale_bytesr  j  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 = pd.Series(data, dtype=pd.CategoricalDtype(ordered=True))
        >>> s_pl = pl.Series(data, dtype=pl.Categorical(ordering="lexical"))

        Let's define a library-agnostic function:

        >>> @nw.narwhalify
        ... def func(s):
        ...     return nw.is_ordered_categorical(s)

        Then, we can pass any supported library to `func`:

        >>> func(s_pd)
        True
        >>> func(s_pl)
        False
    r   )ÚInterchangeSeriesFÚ
is_orderedT)rV  é    zpl.CategoricalÚphysical)Úis_dictionary)Únarwhals._interchange.seriesr   rÇ  rË   rè   r*  ÚdtypeÚCategoricalrº   Údescribe_categoricalr   rÔ  rh  r<  rÆ   r    Úorderingr8  r3  ÚcatÚorderedrH  Únarwhals._arrow.utilsr$  r–  )rÿ   r   rè   rÁ   r  rº   rl  r$  s           rœ   Úis_ordered_categoricalr-    sq  € ðN ?Ð>Ð>Ð>Ð>Ð>àÔ%Ô.Ô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Ë   )r/  r­   r1  )r#   Úgenerate_temporary_column_name)r/  r­   r1  r0  s       rœ   Úgenerate_unique_tokenr5  Å  s7   € ð	?ð õ ˜c¨HÐ5Ñ5Ô5Ð5Ý)°'À7ÐSYÐZÑZÔZÐZr›   c                ó†   — d}	 |› t          | dz
  ¦  «        › �}||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   TrV  éd   zMInternal Error: Narwhals was not able to generate a column name with n_bytes=z and not in )r   r-  )r/  r­   r1  ÚcounterÚtokenr0  s         rœ   r4  r4  Ð  s…   € ð< €Gð&ØÐ3�9 W¨q¡[Ñ1Ô1Ð3Ð3ˆØ˜ÐÐØˆLà�1‰ˆØ�SŠ=ˆ=ð3Øð3ð 3Ø)0ð3ð 3ð õ ! Ñ%Ô%Ð%ð&r›   ÚframeÚsubsetúIterable[str]rì  ú	list[str]c              óÄ   — |s4t          t          | j        ¦  «                             |¦  «        ¦  «        S t          |¦  «        }t	          || j        ¬¦  «        x}r|‚|S )N)Ú	available)rs  Úsetr­   ÚintersectionÚcheck_columns_exist)r:  r;  rì  Úto_dropÚerrors        rœ   Úparse_columns_to_droprE  ý  sc   € ð ð =Ý•C˜œÑ&Ô&×3Ò3°FÑ;Ô;Ñ<Ô<Ð<Ý�6‰lŒl€GÝ# G°u´}ÐEÑEÔEÐE€uð ØˆØ€Nr›   ÚsequenceúSequence[_T] | AnyúTypeIs[Sequence[_T]]c                óX   — t          | t          ¦  «        ot          | t          ¦  «         S r¤   )r*  r	   r“   )rF  s    rœ   Úis_sequence_but_not_strrJ    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_nonerO    s"   € Ý�c�5Ñ!Ô!Ð8 c­U°4©[¬[Ò&8Ð8r›   úCTypeIs[SizedMultiIndexSelector[Series[Any] | CompliantSeries[Any]]]c                óü   — t          | ¦  «        o@t          | ¦  «        dk    rt          | d         t          ¦  «        pt          | ¦  «        dk    p,t	          | ¦  «        pt          | ¦  «        pt          | ¦  «        S ©Nr   )rJ  rt  r*  rŒ  r4   r2   Úis_compliant_series_intrN  s    rœ   Úis_sized_multi_index_selectorrT    s   € õ
 $ CÑ(Ô(ð PÝ�c‘(”(˜Q’,Ð:¥:¨c°!¬fµcÑ#:Ô#:ÐNÅÀCÁÄÈAÂð	(õ ! Ñ%Ô%ð		(õ
 " #Ñ&Ô&ð	(õ # 3Ñ'Ô'ðr›   ú-TypeIs[Sequence[_T] | Series[Any] | _1DArray]c                óz   — t          | ¦  «        p,t          | ¦  «        pt          | ¦  «        pt          | ¦  «        S r¤   )rJ  r3   r1   Úis_compliant_seriesrN  s    rœ   Úis_sequence_likerX    sF   € õ 	  Ñ$Ô$ð 	$Ý˜SÑ!Ô!ð	$å˜cÑ"Ô"ð	$õ ˜sÑ#Ô#ð	r›   úTypeIs[_SliceIndex]c                óì   — t          | t          ¦  «        o_t          | j        t          ¦  «        pEt          | j        t          ¦  «        p+t          | j        t          ¦  «        o| j        d u o| j        d u S r¤   )r*  rM  r  rŒ  r  r  rN  s    rœ   Úis_slice_indexr[  )  sj   € Ý�c�5Ñ!Ô!ð Ý�3”9�cÑ"Ô"ð 	RÝ�c”h¥Ñ$Ô$ð	Rå�s”x¥Ñ%Ô%ÐP¨#¬)°tÐ*;ÐPÀÄÈDÐ@Pðr›   úTypeIs[range]c                ó,   — t          | t          ¦  «        S r¤   )r*  ÚrangerN  s    rœ   Úis_ranger_  1  s   € Ý�c�5Ñ!Ô!Ð!r›   úTypeIs[SingleIndexSelector]c                ór   — t          t          | t          ¦  «        ot          | t           ¦  «         ¦  «        S r¤   )r3  r*  rŒ  rN  s    rœ   Úis_single_index_selectorrb  5  s,   € Ý•
˜3¥Ñ$Ô$ÐB­Z¸½TÑ-BÔ-BÐ)BÑCÔCÐCr›   úTTypeIs[SingleIndexSelector | MultiIndexSelector[Series[Any] | CompliantSeries[Any]]]c                ó\   — t          | ¦  «        pt          | ¦  «        pt          | ¦  «        S r¤   )rb  rT  r[  rN  s    rœ   Úis_index_selectorre  9  s4   € õ 	! Ñ%Ô%ð 	Ý(¨Ñ-Ô-ð	å˜#ÑÔðr›   ÚtpúTypeIs[list[_T]]c                óv   — t          t          | t          ¦  «        o| ot          | d         |¦  «        ¦  «        S rR  )r3  r*  rs  )rÑ  rf  s     rœ   Ú
is_list_ofri  C  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¤   )ri  r3  )r�  Úpreds     rœ   r‘  z3predicates_contains_list_of_bool.<locals>.<genexpr>K  s,   è è € Ð=Ð=¨$�z˜$¥Ñ%Ô%Ð=Ð=Ð=Ð=Ð=Ð=r›   ©Úany)rj  s    rœ   Ú predicates_contains_list_of_boolrr  H  s!   € õ Ð=Ð=°*Ð=Ñ=Ô=Ñ=Ô=Ð=r›   c                ó˜   — t          t          | ¦  «        o.t          t          | ¦  «        d ¦  «        x}ot	          ||¦  «        ¦  «        S r¤   )r3  rJ  rù  rø  r*  )rÑ  rf  rü  s      rœ   Úis_sequence_ofrt  N  sN   € åÝ Ñ$Ô$ð 	"Ý�4 ™9œ9 dÑ+Ô+Ð+ˆUð	"å�u˜bÑ!Ô!ñô ð r›   úbool | NonerÞ  Úpass_through_defaultc               óP   — | €|€|}n| �|€|  }n| €|�nd}t          |¦  «        ‚|S )Nz,Cannot pass both `strict` and `pass_through`r  )rì  rÞ  rv  r0  s       rœ   Úvalidate_strict_and_pass_thoughrx  W  sM   € ð €~˜,Ð.Ø+ˆˆØ	Ð	 Ð 4Ø!�zˆˆØ	ˆ˜LÐ4Øà<ˆÝ˜‰oŒoÐØÐr›   rŠ  F)Úwarn_versionÚrequiredry  rz  ú*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 )	Nrp  ú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.
r3  z0Can't pass both `native_namespace` and `backend`z `backend` must be specified in `z`.)Úpopr#   r%  r–   )rp  r�  r'  r  r0  r}  rz  ry  s        €€€rœ   Úwrapperz=deprecate_native_namespace.<locals>.decorate.<locals>.wrapperw  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›   )rp  r€  r�  r‚  r¢   rŽ   )r   )r}  r…  rz  ry  s   ` €€rœ   Údecoratez,deprecate_native_namespace.<locals>.decoratev  sC   øø€ Ý	ˆr‰Œð	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%ñ 
Œð	%ð* ˆr›   )r}  r~  r¢   r~  rš   )ry  rz  r†  s   `` rœ   Údeprecate_native_namespacer‡  i  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‰  rV  z+window_size must be greater or equal than 1z+min_samples must be greater or equal than 1z6`min_samples` must be less or equal than `window_size`)Úensure_typerŒ  r–  r%  r9   )rˆ  r‰  r0  s      rœ   Ú_validate_rolling_argumentsr�  ’  s¥   € õ ��S¨]Ð;Ñ;Ô;Ð;Ý��S¥$ t¡*¤*¸ÐGÑGÔGÐGà�Q‚€Ø;ˆÝ˜‰oŒoÐàÐØ˜Š?ˆ?Ø?ˆCÝ˜S‘/”/Ð!à˜Ò$Ð$ØJˆCÝ'¨Ñ,Ô,Ð,ð %ð "ˆà˜Ð#Ð#r›   Ú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¤   )rt  )r�  Úlines     rœ   r‘  z generate_repr.<locals>.<genexpr>°  s(   è è € Ð>Ð>¨�3˜t™9œ9Ð>Ð>Ð>Ð>Ð>Ð>r›   rY  u   â”Œu   â”€u   â”�
ú|ú z|
ú-u   â””u   â”˜é'   uu   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u   â”�
|u/   |
| Use `.to_native` to see native output |
â””)
ÚosÚget_terminal_sizer­   ÚOSErrorrŒ  ÚgetenvÚ
expandtabsÚ
splitlinesÚmaxrt  )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]r?  úColumnNotFoundError | Nonec              óx   — t          | ¦  «                             |¦  «        x}rt          j        ||¦  «        S d S r¤   )r@  Ú
differencer7   Ú'from_missing_and_available_column_names)r;  r?  Úmissings      rœ   rB  rB  È  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 )rV  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:)rt  r@  Úcollectionsr´  r±  Újoinr8   )r­   r´  r8  Ú
duplicatesr0  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“   r@  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&  rs   rè   ry   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>  s#   ø€ ÐLÐLÐL˜°hÀeÐ6KÐ6KˆHÐ6KÐ6KÐ6Kr›   rÕ  )r:  r×  s    `rœ   Úexclude_column_namesrÛ    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>.fn  s   ø€ Øˆr›   )rÞ  r   r¢   rª   rš   )r×  r}  s   ` rœ   Úpassthrough_column_namesrà    s(   ø€ ðð ð ð ð ð ð €Ir›   r   Ú	_SENTINELÚattrc                ó<   — t          | |t          ¦  «        t          uS r¤   )r   rá  )rÑ  râ  s     rœ   Ú_hasattr_staticrä    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ä  rN  s    rœ   Úis_compliant_dataframerê    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é  rN  s    rœ   Úis_compliant_lazyframerï     s   € õ ˜3Ð 8Ñ9Ô9Ð9r›   ú'CompliantSeries[NativeSeriesT_co] | Anyú)TypeIs[CompliantSeries[NativeSeriesT_co]]c                ó"   — t          | d¦  «        S )NÚ__narwhals_series__ré  rN  s    rœ   rW  rW  &  s   € õ ˜3Ð 5Ñ6Ô6Ð6r›   c                óR   — t          | ¦  «        o| j                             ¦   «         S r¤   )rW  r&  Ú
is_integerrN  s    rœ   rS  rS  ,  s%   € õ ˜sÑ#Ô#Ð>¨¬	×(<Ò(<Ñ(>Ô(>Ð>r›   úECompliantExpr[CompliantFrameT, CompliantSeriesOrNativeExprT_co] | AnyúGTypeIs[CompliantExpr[CompliantFrameT, CompliantSeriesOrNativeExprT_co]]c                ó"   — t          | d¦  «        S )NÚ__narwhals_expr__)ÚhasattrrN  s    rœ   Úis_compliant_exprrû  2  s   € õ �3Ð+Ñ,Ô,Ð,r›   ú'TypeIs[NamespaceAccessor[_FullContext]]c                óB   — t          | d¦  «        ot          | d¦  «        S )NrÁ   Ú	_accessorré  rN  s    rœ   Ú_is_namespace_accessorrÿ  8  s#   € õ ˜3 Ñ,Ô,ÐRµÀÀkÑ1RÔ1RÐRr›   rl  ú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  ©rl  s    rœ   Úis_eager_allowedr  B  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  M  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  r  r  r  r  r  r  s    rœ   Úis_lazy_allowedr	  R  s>   € àÝÔÝÔÝÔÝÔÝÔÝÔ&ÝÔðð ð r›   úTypeIs[SupportsNativeNamespace]c                ó"   — t          | d¦  «        S )Nrè  ré  rN  s    rœ   Úhas_native_namespacer  _  s   € Ý˜3Ð 6Ñ7Ô7Ð7r›   úTypeIs[ArrowStreamExportable]c                ó"   — t          | d¦  «        S )NÚ__arrow_c_stream__ré  rN  s    rœ   Úsupports_arrow_c_streamr  c  s   € Ý˜3Ð 4Ñ5Ô5Ð5r›   Úleft_onÚright_onÚsuffixúdict[str, str]c                ó^   ‡ ‡— ˆ ˆfd„|D ¦   «         }t          t          ||¦  «        ¦  «        S )aO  Remap join keys to avoid collisions.

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

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

    Returns:
        A map of old to new right keys.
    c              3  ó0   •K  — | ]}|‰v r|› ‰› �n|V — Œd S r¤   rš   )r�  Úkeyr  r  s     €€rœ   r‘  z(_remap_full_join_keys.<locals>.<genexpr>w  sL   øè è € ð ð Ø8;˜C 7˜N˜Nˆ3Ð�ÐÐÐ°ðð ð ð ð ð r›   )Údictr÷  )r  r  r  Úright_keys_suffixeds   ` ` rœ   Ú_remap_full_join_keysr  g  sM   øø€ ð ð ð ð ð Ø?Gðñ ô Ðõ •�HÐ1Ñ2Ô2Ñ3Ô3Ð3r›   Ú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  )r  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)r  r  rÆ  r0  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:
        >>> from narwhals._utils import unstable
        >>> @unstable
        ... def a_work_in_progress_feature(*args):
        ...     return args
        >>>
        >>> a_work_in_progress_feature.__name__
        'a_work_in_progress_feature'
        >>> a_work_in_progress_feature(1, 2, 3)
        (1, 2, 3)
    rš   )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ÚZrp  )r%  s   `rœ   Ú_is_naive_formatr*  ¤  s,   ø€ õ Ð:Ð:Ð:Ð:Ð(9Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:r›   c                  óX   — e Zd ZdZddd„Zdd	„Zdd„Z	 ddd„Zdd„Ze	d d„¦   «         Z
dS )!Únot_implementeda¾  Mark some functionality as unsupported.

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

    Returns:
        An exception-raising [descriptor].

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

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

    [`__set_name__`]: https://docs.python.org/3/reference/datamodel.html#object.__set_name__
    [descriptor]: https://docs.python.org/3/howto/descriptor.html
    NÚaliasú
str | Noner¢   rØ   c               ó   — || _         d S r¤   )Ú_alias)r¦   r-  s     rœ   Ú__init__znot_implemented.__init__Û  s   € ð #(ˆŒˆˆr›   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–   r4  r0  r5  ©r¦   r    r7  s      rœ   Ú__set_name__znot_implemented.__set_name__ã  s   € à %¤ˆÔØœ+Ð-¨ˆŒ
ˆ
ˆ
r›   rŸ   ú_T | Literal['raise'] | Noneútype[_T] | Noner   c               ód   — |€| S t          |d| j        ¦  «        }t          | j        |¦  «         d S )NrÏ   )rÊ  r4  Ú_raise_not_implemented_errorr5  )r¦   rŸ   r    Úwhos       rœ   r§   znot_implemented.__get__è  s?   € ð Ðð ˆKõ �hÐ 1°4Ô3CÑDÔDˆÝ$ T¤Z°Ñ5Ô5Ð5Øˆtr›   rp  r�  c                ó,   — |                       d¦  «        S )NÚraise)r§   )r¦   rp  r�  s      rœ   Ú__call__znot_implemented.__call__ö  s   € ð �|Š|˜GÑ$Ô$Ð$r›   Úmessager=   r?   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  rC  rÑ  s      rœ   r%   znot_implemented.deprecatedû  s'   € ð ˆc‰eŒeˆØ"�z˜'Ñ"Ô" 3Ñ'Ô'Ð'r›   r¤   )r-  r.  r¢   rØ   rT  )r    r˜  r7  r“   r¢   rØ   )rŸ   r;  r    r<  r¢   r   )rp  r   r�  r   r¢   r   )rC  r=   r¢   r?   )r–   r—   r˜   r¼   r1  r6  r:  r§   rB  rU  r%   rš   r›   rœ   r,  r,  ¶  s¸   € € € € € ð"ð "ðH(ð (ð (ð (ð (ð
Kð Kð Kð Kð.ð .ð .ð .ð PTðð ð ð ð ð%ð %ð %ð %ð
 ð	(ð 	(ð 	(ñ „[ð	(ð 	(ð 	(r›   r,  Úwhatr?  ÚNotImplementedErrorc               ó0   — | ›d|›d�}t          |¦  «        ‚)Nz is not implemented for: z†.

If you would like to see this functionality in `narwhals`, please open an issue at: https://github.com/narwhals-dev/narwhals/issues)rF  )rE  r?  r0  s      rœ   r>  r>    s:   € àð 	Sð 	S¨Cð 	Sð 	Sð 	Sð õ
 ˜cÑ
"Ô
"Ð"r›   c                  ó†   — e Zd ZU dZded<   ded<   ded<   	 eddd„¦   «         Zedd„¦   «         Zdd„Z	d d„Z
d!d„Zd"d„ZdS )#Úrequiresa#  Method decorator for raising under certain constraints.

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

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

        Arguments:
            minimum: Minimum backend version.
            hint: Optional suggested alternative.
        )Ú__new__rJ  rK  )r  rN  rM  rÑ  s       rœ   rS  zrequires.backend_version0  s)   € ð �kŠk˜#ÑÔˆØ"ˆÔØˆŒ	Øˆ
r›   rS  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»  rR  s    rœ   Ú_unparse_versionzrequires._unparse_version=  s#   € à�xŠxÐ8Ð8¨Ð8Ñ8Ô8Ñ8Ô8Ð8r›   r1  rI   rØ   c               ó>   — d| j         vr|› d| j         › �| _         d S d S ©Nr’  )rL  )r¦   r1  s     rœ   Ú_qualify_accessor_namezrequires._qualify_accessor_nameA  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ÿ  rW  rþ  rÁ   rÆ   r“   rÏ   )r¦   rŸ   rÁ   s      rœ   Ú_unwrap_contextzrequires._unwrap_contextF  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’  ú
)rZ  rJ  rT  rL  rK  rF  )r¦   rŸ   rn  r'  rN  Úfoundr0  s          rœ   Ú_ensure_versionzrequires._ensure_versionN  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´   rp  r€  r�  r‚  r¢   rŽ   c                óF   •— ‰                      | ¦  «          ‰| g|¢R i |¤ŽS r¤   )r_  )rŸ   rp  r�  r}  r¦   s      €€rœ   r…  z"requires.__call__.<locals>.wrapper^  s7   ø€ à× Ò  Ñ*Ô*Ð*Ø�2�hÐ. Ð.Ð.Ð.¨Ð.Ð.Ð.r›   )rŸ   r´   rp  r€  r�  r‚  r¢   rŽ   )r–   rL  r   )r¦   r}  r…  s   `` rœ   rB  zrequires.__call__Y  sJ   øø€ ð  œ[ˆÔå	ˆr‰Œð	/ð 	/ð 	/ð 	/ð 	/ð 	/ñ 
Œð	/ð
 ˆr›   N)rŠ  )rM  r“   rN  rÄ   r¢   r?   )rS  rÄ   r¢   r“   )r1  rI   r¢   rØ   )rŸ   r³   r¢   rX  )rŸ   r³   r¢   rØ   )r}  r`  r¢   r`  )r–   r—   r˜   r¼   r™   rU  rS  ÚstaticmethodrT  rW  rZ  r_  rB  rš   r›   rœ   rI  rI    så   € € € € € € ðð ð, "Ð!Ð!Ñ!Ø€J€J�JØÐÐÑðð
 ð
ð 
ð 
ð 
ñ „[ð
ð ð9ð 9ð 9ñ „\ð9ðBð Bð Bð Bð
Jð Jð Jð Jð	'ð 	'ð 	'ð 	'ðð ð ð ð ð r›   rI  Ú	str_slicer„   ú"tuple[int | None, int | None, Any]c                ó¬   — | j         �|                     | j         ¦  «        nd }| j        �|                     | j        ¦  «        dz   nd }| j        }|||fS )NrV  )r  rÂ  r  r  )rd  r­   r  r  r  s        rœ   Úconvert_str_slice_to_int_slicerg  g  s\   € ð /8¬oÐ.IˆG�MŠM˜)œ/Ñ*Ô*Ð*Èt€EØ09´Ð0Jˆ7�=Š=˜œÑ(Ô(¨1Ñ,Ð,ÐPT€DØŒ>€DØ�4˜ÐÐ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          |¦  «        ‚)Nr1  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  )rl  r0  rh  s     €rœ   r†  zinherit_doc.<locals>.decorate}  s€   ø€ ØÔ *Ò,Ð,µ½DÀ¹O¼OÍTÑ1RÔ1RÐ,Ý!'¨	Ñ!2Ô!2ˆJÔØÐð%•Ô%ð %ð %Ø!Ô.ð%ð %à ð%ð %ð 	õ
 ˜‰nŒnÐr›   )rl  rm  r¢   rm  rš   )rh  r†  s   ` rœ   ro  ro  p  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Ñ  rf  Ú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:
        >>> from narwhals._utils import ensure_type
        >>> ensure_type(42, int, float)
        >>> ensure_type("hello", str)

        >>> ensure_type("hello", int, param_name="test")
        Traceback (most recent call last):
            ...
        TypeError: Expected 'int', got: 'str'
            test='hello'
                 ^^^^^^^
        >>> import polars as pl
        >>> import pandas as pd
        >>> df = pl.DataFrame([[1], [2], [3], [4], [5]], schema=[*"abcde"])
        >>> ensure_type(df, pd.DataFrame, param_name="df")
        Traceback (most recent call last):
            ...
        TypeError: Expected 'pandas.core.frame.DataFrame', got: 'polars.dataframe.frame.DataFrame'
            df=polars.dataframe.frame.DataFrame(...)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    z | c              3  ó4   K  — | ]}t          |¦  «        V — Œd S r¤   )r~  )r�  rf  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~  Úreprrt  r  )	rÑ  rŽ  ru  Útp_namesr0  Úleft_padrƒ  ÚassignÚ	underlines	            rœ   r�  r�  ‘  sú   € õB �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œ   r1  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*  ry  )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¼   r1  rŠ  rŽ  rš   r›   rœ   r‚  r‚  À  sZ   € € € € € ØVÐVð@ð @ð @ð @ð%ð %ð %ð %ð:ð :ð :ð :ð :ð :r›   r‚  é@   Únestedúattrgetter[Any]c                óZ   — |rd                      | g|¢R ¦  «        n| }t          |¦  «        S rV  )r»  r   )râ  r�  r7  s      rœ   Údeep_attrgetterr“  Ï  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–  Õ  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š  ß  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    rv  r7  r“   r¢   rØ   c                ó   — || _         d S r¤   )r–   r9  s      rœ   r:  z_Implementation.__set_name__  s   € Ø!ˆŒˆˆr›   rŸ   úNarwhals[NativePolars]r   rk   c                ó   — d S r¤   rš   r¥   s      rœ   r§   z_Implementation.__get__  ó   € ØTWÐTWr›   úNarwhals[NativePandas]ri   c                ó   — d S r¤   rš   r¥   s      rœ   r§   z_Implementation.__get__  r¢  r›   úNarwhals[NativeModin]rh   c                ó   — d S r¤   rš   r¥   s      rœ   r§   z_Implementation.__get__	  ó   € ØRUÐRUr›   úNarwhals[NativeCuDF]ra   c                ó   — d S r¤   rš   r¥   s      rœ   r§   z_Implementation.__get__  ó   € ØPSÐPSr›   úNarwhals[NativePandasLike]rj   c                ó   — d S r¤   rš   r¥   s      rœ   r§   z_Implementation.__get__  s	   € ð ˜#r›   úNarwhals[NativeArrow]r`   c                ó   — d S r¤   rš   r¥   s      rœ   r§   z_Implementation.__get__  r§  r›   ú3Narwhals[NativePolars | NativeArrow | NativePandas]ú&_PolarsImpl | _PandasImpl | _ArrowImplc                ó   — d S r¤   rš   r¥   s      rœ   r§   z_Implementation.__get__  s	   € ð 25°r›   úNarwhals[NativeDuckDB]rc   c                ó   — d S r¤   rš   r¥   s      rœ   r§   z_Implementation.__get__  r¢  r›   úNarwhals[NativeSQLFrame]rn   c                ó   — d S r¤   rš   r¥   s      rœ   r§   z_Implementation.__get__  s	   € ð ˜r›   úNarwhals[NativeDask]rb   c                ó   — d S r¤   rš   r¥   s      rœ   r§   z_Implementation.__get__  rª  r›   úNarwhals[NativeIbis]re   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]]r?   c                ó   — d S r¤   rš   r¥   s      rœ   r§   z_Implementation.__get__&  s   € ØKNÈ3r›   úDataFrame[Any] | Series[Any]rd   c                ó   — d S r¤   rš   r¥   s      rœ   r§   z_Implementation.__get__(  r   r›   úLazyFrame[Any]rf   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    rv  r7  r“   r¢   rØ   )rŸ   r   r    r   r¢   rk   )rŸ   r£  r    r   r¢   ri   )rŸ   r¥  r    r   r¢   rh   )rŸ   r¨  r    r   r¢   ra   )rŸ   r«  r    r   r¢   rj   )rŸ   r­  r    r   r¢   r`   )rŸ   r¯  r    r   r¢   r°  )rŸ   r²  r    r   r¢   rc   )rŸ   r´  r    r   r¢   rn   )rŸ   r¶  r    r   r¢   rb   )rŸ   r¸  r    r   r¢   re   )rŸ   rº  r    r   r¢   r»  )rŸ   rØ   r    r½  r¢   r?   )rŸ   r¿  r    r   r¢   rd   )rŸ   rÁ  r    r   r¢   rf   )rŸ   rÃ  r    r   r¢   r   )r–   r—   r˜   r¼   r:  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 rR  )r  r*  ÚRecordBatchReaderÚTableÚfrom_batches)rÅ  Úpas     rœ   Úto_pyarrow_tablerÌ  2  s>   € ØÐÐÐå�#�rÔ+Ñ,Ô,ð *ØŒx×$Ò$ SÑ)Ô)Ð)Ø€Jr›   Úsourcerz   c               ól   — t          | t          ¦  «        r| S ddlm} t           || ¦  «        ¦  «        S )Nr   )ÚPath)r*  r“   ÚpathlibrÏ  )rÍ  rÏ  s     rœ   Únormalize_pathrÑ  :  sA   € Ý�&�#ÑÔð ØˆØÐÐÐÐÐåˆtˆt�F‰|Œ|ÑÔÐr›   r  ú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*  r3  ry  )r  rÓ  s     rœ   Úextend_boolrÖ  B  s+   € õ ",¨Eµ4Ñ!8Ô!8ÐJˆEˆ8�gÑÐ½eÀE¹l¼lÐJr›   )r1  r“   r¢   r;   )rh  rÎ   r¢   rÄ   )rp  r   r¢   rq  )rw  r   r¢   r   )rw  r{  r¢   r3  )rƒ  r„  r¢   r…  )rn  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¢   r3  )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¢   r3  )rÑ  r‡   rp  r3  r  r	  r¢   r‡   )r  rŒ  r  r   r¢   r  )rÿ   r  r¢   r3  )r.  )r/  rŒ  r­   r0  r1  r“   r¢   r“   )r:  r©   r;  r<  rì  r3  r¢   r=  )rF  rG  r¢   rH  )rÑ  r   r¢   rK  )rÑ  r   r¢   rP  )rÑ  rG  r¢   rU  )rÑ  r   r¢   rY  )rÑ  r   r¢   r\  )rÑ  r   r¢   r`  )rÑ  r   r¢   rc  )rÑ  r   rf  r˜  r¢   rg  )rj  rk  r¢   rl  )rÑ  r   rf  r˜  r¢   rH  )rì  ru  rÞ  ru  rv  r3  r¢   r3  )ry  r“   rz  r3  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&  rs   rè   ry   rË  rÎ  rÌ  rÏ  r¢   r3  )r:  r©   r¢   rª   )r:  r©   r×  r0  r¢   rª   )r×  rª   r¢   rÜ  )rÑ  r   râ  r“   r¢   r3  )rÑ  rå  r¢   ræ  )rÑ  rë  r¢   rì  )rÑ  rð  r¢   rñ  )rÑ  rö  r¢   r÷  )rÑ  r³   r¢   rü  )rl  rÎ   r¢   r   )rl  rÎ   r¢   r  )rl  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¢   r3  )rE  r“   r?  r“   r¢   rF  )rd  r„   r­   rª   r¢   re  )rh  ri  r¢   rj  )rÑ  rp  r¢   r“   )rÑ  r   ru  rv  rŽ  r“   r¢   rØ   )râ  r“   r�  r“   r¢   r‘  )rÑ  r   r”  r“   r�  r“   r¢   r   )rÅ  rÆ  r¢   r  )rÍ  rz   r¢   r“   )r  rÒ  rÓ  rŒ  r¢   rÔ  ("  Ú
__future__r   rœ  r�  ÚsysÚcollections.abcr   r   r   r   r   r	   Údatetimer
   Úenumr   r   Ú	functoolsr   r   r   r   Úimportlib.utilr   Úinspectr   r   Ú	itertoolsr   Úoperatorr   Úsecretsr   Útypingr   r   r   r   r   r   r   r   r   r    r!   Únarwhals._enumr"   Únarwhals._exceptionsr#   Únarwhals._typing_compatr$   r%   Únarwhals.dependenciesr&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   Únarwhals.exceptionsr7   r8   r9   r:   Útypesr;   r  r�  r  r‚  r  rË  Útyping_extensionsr<   r=   r>   r?   r@   rA   Únarwhals._compliantrB   rC   rD   rE   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   rð   rp   rq   r¯  rs   rü   ru   Únarwhals.typingrv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r“   r†   r™   r‡   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r’   rž   r©   r¯   r°   r²   r³   r´   rµ   r¶   r¸   r¿   rÃ   rÉ   rÍ   rÑ   rÕ   r×   rÊ   rÎ   r  r  r  r  r  r  r  r  r  r  r  rb  r.  r/  rS  rv  rz  ru  r‡  rk  rœ  r»  rÐ  r×  rå  rë  r÷  rý  Úversion_infor  ré  r  r  r-  r5  r4  rE  rJ  rO  rT  rX  r[  r_  rb  re  ri  rr  rt  rx  r‡  r�  r¬  rB  r½  rÍ  rÓ  rÖ  rÛ  rà  Úobjectrá  rä  rê  rï  rW  rS  rû  rÿ  r  r  r	  r  r  r  r"  r$  r*  r,  r>  rI  rg  ro  r~  r�  r‚  r“  r–  r˜  rš  rž  rÌ  rÑ  rÖ  rš   r›   rœ   ú<module>ró     s‚  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø $Ð $Ð $Ð $Ð $Ð $Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð &Ð %Ð %Ð %Ð %Ð %Ø :Ð :Ð :Ð :Ð :Ð :Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð& [Ð ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ Zàñ o0Ø#Ð#Ð#Ð#Ð#Ð#Ø Ð Ð Ð Ð Ð àÐÐÐØÐÐÐØÐÐÐðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð DÐCÐCÐCÐCÐCðð ð ð ð ð ð ð ð ð ð ð ð .Ð-Ð-Ð-Ð-Ð-ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ZÐYÐYÐYÐYÐYÐYÐYÐYÐYðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð& 8Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ø%Ð%Ð%Ð%Ð%Ð%Ø&Ð&Ð&Ð&Ð&Ð&ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð& %(ÐÐ'Ð'Ð'Ñ'à�WØ  i°¤n°iÀ´nÀfÈSÄkÐ&QÔ Rðñ ô €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ðIð Ið Ið Ið Iˆdñ Iô Ið IðXM%ð M%ð M%ð M%ð M%�Zñ M%ô M%ð M%ðb Ô˜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Ø�˜ TÐ*Ñ*Ô*€J€Jà€J€J€Jà
Ô˜7Ò"Ð"Ø�W˜S¨Ð.Ñ.Ô.ˆ
ˆ
ñ	8ð 	8ð 	8ð 	8ñ<8ð 8ð 8ð 8ñ	ð 	ð 	ð 	ñ&*ð &*ð &*ð &*ñRð ð ð ñ*Cð Cð Cð CðN :>ñ[ñ [ð [ð [ð [ð :>ñ*&ñ *&ð *&ð *&ð *&ñZð ð ð ñLð Lð Lð Lñ9ð 9ð 9ð 9ñð ð ð ñð ð ð ñð ð ð ñ"ð "ð "ð "ñDð Dð Dð Dñð ð ð ñJð Jð Jð Jñ
>ð >ð >ð >ñð ð ð ñð ð ð ð& °ð&ð &ñ &ð &ð &ð &ñ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ñ4ñ 4ð 4ñ 4ñ,#ñ #ð #ñ #ñ ñ ð ñ ñ.;ñ ;ð ;ñ ;ð$O(ð O(ñ O(ð O(ñ O(ñ O(ô O(ñ O(ñd#ñ #ð #ñ #ðSð Sñ Sð Sñ Sñ Sô Sñ Sñlñ ð ñ ññ ð ñ ñ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ñ ð ñ ññ ð ñ ñKñ Kð Kñ Kð Kð Kr›   