ó
    - j¸' ã                  óB  • % S SK Jr  S SKrS SKrS SKrS SKJrJrJrJ	r	J
r
JrJr  S SKJr  S SKJrJr  S SKJrJrJr  S SKJr  S SKJrJr  S S	KJr  S S
KJr  S SKJ r   S SK!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*  S SK+J,r,  S SK-J.r.  S SK/J0r0J1r1  S SK2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErE  S SKFJGrGJHrHJIrIJJrJ  \"(       GaP  S SKJKrK  S SKLJMrM  S SK!JNrNJOrO  S SKPrQS SKRrSS SKTrUS SKVJWrWJXrXJYrYJZrZ  S SK[J\r\J]r]J^r^  S SK_J`r`  S SKaJbrbJcrcJdrdJere  S SKfJgrg  S SKhJiriJjrjJkrkJlrlJmrmJnrnJoroJprpJqrqJrrrJsrsJtrt  S SKuJvrvJwrwJxrx  S SKyJzrzJ{r{J|r|J}r}J~r~JrJ€r€J�r�J‚r‚JƒrƒJ„r„J…r…J†r†J‡r‡JˆrˆJ‰r‰JŠrŠJ‹r‹  S SKŒJ�r�JŽrŽ  S SK�J�r�  S SK‘J’r’  S S K“J”r”J•r•J–r–J—r—J˜r˜J™r™JšršJ›r›JœrœJ�r�JžržJŸrŸJ r J¡r¡J¢r¢J£r£J¤r¤J¥r¥J¦r¦  \(" S!\Ž\#   \�\#   -  \’\#   -  S"9r§\(" S#5      r¨\(" S$5      r©\(" S%5      rª\(" S&S'S"9r«\X" S(5      r¬\(" S)5      r­\(" S*5      r®\(" S+5      r¯ " S, S-\'5      r° " S. S/\'5      r± " S0 S1\'5      r²\(" S25      r³\(" S3S4S59r´\(" S6S4S59rµS7r¶S8\·S9'   \(" S:\¶S"9r¸S;r¹S8\·S<'   S=rºS8\·S>'    " S? S@\'\´   5      r» " SA SB\'\µ   5      r¼ " SC SD\'5      r½ " SE SF\'5      r¾ " SG SH\'5      r¿ " SI SJ\¿\¾\'5      rÀ " SK SL\¿\½\'5      rÁ " SM SN\¿\'5      rÂ " SO SP\5      rÃ\" SQSR9SØSS j5       rÄ\" SQSR9SÙST j5       rÅ\" SQSR9SÚSU j5       rÆ\" SQSR9SÛSV j5       rÇ\" SQSR9SÜSW j5       rÈ " SX SY\,5      rÉSÝSZ jrÊ\ÉGR–                  S[\ÉGR˜                  S\\ÉGRš                  S]\ÉGRœ                  S^\ÉGRž                  S_\ÉGR                   S_\ÉGR¢                  S`\ÉGR¤                  Sa\ÉGR¦                  Sb\ÉGR¨                  Sc\ÉGRª                  Sd0rÖSe\·Sf'   \ÉGR¤                  Sg\ÉGR˜                  Sh\ÉGRž                  Si\ÉGR                   Sj0r×Sk\·Sl'    \" SmSR9SÞSn j5       rØ\SßSo j5       rÙSàSp jrÚSáSq jrÛSâSr jrÜSãSs jrÝSäSt jrÞ\*      SåSu j5       rß\*      SæSv j5       rß\*      SçSw j5       rß\*      SèSx j5       rß\*      SéSy j5       rß\*      SêSz j5       rß\*      SëS{ j5       rßSìS| jrßSíS} jrà      SîS~ jráSïS jrâ SðSS€.       SñS� jjjrãSòS‚ jräSóSƒ jrå      SôS„ jræ        SõS… jrçSöS† jrèS÷S‡ jré Sø       SùSˆ jjrê Sø       SùS‰ jjrë        SúSŠ jrìSûS‹ jríSüSŒ jrîSýS� jrï    SþSŽ jrð    SÿS� jrñGS S� jròGSS‘ jróGSS’ jrô    GSS“ jrõ    GSS” jröGSS• jr÷    GSS– jrøGSS— jrùGSS˜ jrú        GS	S™ jrûSšS›Sœ.     GS
S� jjrü      GSSž jrý          GSSŸ jrþGSS  jrÿ      GSS¡ jGr GSS¢ jGr      GSS£ jGr          GSS¤ jGrGSS¥ jGrGSS¦ jGrGSS§ jGrG\" 5       GrS¨\·S©'   GSSª jGr	    GSS« jGr
    GSS¬ jGr    GSS­ jGr    GSS® jGr    GSS¯ jGrGSS° jGrGSS± jGrGSS² jGrGSS³ jGrGSS´ jGrGSSµ jGr        GSS¶ jGrGS S· jGrGS!S¸ jGrGS"S¹ jGr " Sº S»5      Gr GS#       GS$S¼ jjGrGS%S½ jGr " S¾ S¿5      Gr      GS&SÀ jGr    GS'SÁ jGrGS(SÂ jGrSšSÃ.GS)SÄ jjGr  " SÅ SÆ\%\³   5      Gr!\" SÇSR9GS*SÈ j5       Gr"GS+SÉ jGr# " SÊ SË\»\´   \¿\'\´   5      Gr$ " SÌ SÍ\'\´   5      Gr% " SÎ SÏ5      Gr&GS,SÐ jGr'        GS-SÑ jGr(\GRR                  SÒ:w  a  GS.SÓ jGr*OGS.SÔ jGr*      GS/SÕ jGr+ " SÖ S×\5      Gr,G\,GRZ                  Gr.G\.Gr-G\/" S5      Gr0g(0  é    )ÚannotationsN)ÚCallableÚ
CollectionÚ	ContainerÚIterableÚIteratorÚMappingÚSequence)Útimezone)ÚEnumÚauto)ÚcacheÚ	lru_cacheÚwraps)Ú	find_spec)Úgetattr_staticÚgetdoc)Ú
attrgetter)ÚPath)Ú	token_hex)	ÚTYPE_CHECKINGÚAnyÚFinalÚGenericÚLiteralÚProtocolÚTypeVarÚcastÚoverload)Ú
NoAutoEnum)Úissue_deprecation_warning)Úassert_neverÚ
deprecated)Úget_cudfÚget_dask_dataframeÚ
get_duckdbÚget_ibisÚ	get_modinÚ
get_pandasÚ
get_polarsÚget_pyarrowÚget_pyspark_connectÚget_pyspark_sqlÚget_sqlframeÚis_narwhals_seriesÚis_narwhals_series_boolÚis_narwhals_series_intÚis_numpy_array_1dÚis_numpy_array_1d_boolÚis_numpy_array_1d_intÚis_pandas_like_dataframeÚis_pandas_like_series)ÚColumnNotFoundErrorÚDuplicateErrorÚInvalidOperationErrorÚ
ShapeError)ÚSet)Ú
ModuleType)ÚConcatenateÚ	TypeAlias)ÚLiteralStringÚ	ParamSpecÚSelfÚTypeIs)ÚCompliantExprTÚCompliantSeriesTÚNativeSeriesT_co)ÚNamespaceAccessor)ÚAccessorÚ	EvalNamesÚNativeDataFrameTÚNativeLazyFrameT©Ú	Namespace)ÚNativeArrowÚ
NativeCuDFÚ
NativeDaskÚNativeDuckDBÚ
NativeIbisÚNativeModinÚNativePandasÚNativePandasLikeÚNativePolarsÚNativePySparkÚNativePySparkConnectÚNativeSQLFrame)ÚArrowStreamExportableÚIntoArrowTableÚToNarwhalsT_co)ÚBackendÚIntoBackendÚ
PluginNameÚ
_ArrowImplÚ	_CuDFImplÚ	_DaskImplÚ_DuckDBImplÚ_EagerAllowedImplÚ	_IbisImplÚ_LazyAllowedImplÚ_LazyFrameCollectImplÚ
_ModinImplÚ_PandasImplÚ_PandasLikeImplÚ_PolarsImplÚ_PySparkConnectImplÚ_PySparkImplÚ_SQLFrameImpl©Ú	DataFrameÚ	LazyFrame©ÚDType©ÚSeries)ÚCompliantDataFrameÚCompliantLazyFrameÚCompliantSeriesÚDTypesÚ
FileSourceÚIntoSeriesTÚMultiIndexSelectorÚNestedLiteralÚNormalizedPathÚSingleIndexSelectorÚSizedMultiBoolSelectorÚSizedMultiIndexSelectorÚSizeUnitÚSupportsNativeNamespaceÚTimeUnitÚ_1DArrayÚ_SliceIndexÚ
_SliceNameÚ
_SliceNoneÚFrameOrSeriesT)ÚboundÚ_T1Ú_T2Ú_T3Ú_FnzCallable[..., Any]ÚPÚRÚR1ÚR2c                  ó    • \ rS rSr% S\S'   Srg)Ú_SupportsVersionéž   ÚstrÚ__version__© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r—   ó    Ú�C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\narwhals/_utils.pyr“   r“   ž   s   ‡ ØÖrŸ   r“   c                  ó"   • \ rS rSrSSS jjrSrg)Ú_SupportsGeté¡   Nc               ó   • g ©Nr—   ©ÚselfÚinstanceÚowners      r    Ú__get__Ú_SupportsGet.__get__¢   s   € ÈcrŸ   r—   r¥   )r¨   r   r©   ú
Any | NoneÚreturnr   )r™   rš   r›   rœ   rª   rž   r—   rŸ   r    r¢   r¢   ¡   s   † ßQÑQrŸ   r¢   c                  ó(   • \ rS rSr\SS j5       rSrg)Ú_StoresColumnsé¤   c                ó   • g r¥   r—   ©r§   s    r    ÚcolumnsÚ_StoresColumns.columns¥   s   € Ø,/rŸ   r—   N)r­   úSequence[str])r™   rš   r›   rœ   Úpropertyr³   rž   r—   rŸ   r    r¯   r¯   ¤   s   † Ø	Û/ó 
Û/rŸ   r¯   Ú_TÚ
NativeT_coT)Ú	covariantÚCompliantT_coz._FullContext | NamespaceAccessor[_FullContext]r>   Ú_IntoContextÚ_IntoContextTz*Callable[Concatenate[_IntoContextT, P], R]Ú_Methodz Callable[Concatenate[_T, P], R2]Ú_Constructorc                  ó,   • \ rS rSrSr\SS j5       rSrg)Ú_StoresNativeé²   z‚Provides access to a native object.

Native objects have types like:

>>> from pandas import Series
>>> from pyarrow import Table
c                ó   • g)zReturn the native object.Nr—   r²   s    r    ÚnativeÚ_StoresNative.native»   ó   € ð 	rŸ   r—   N)r­   r¸   )r™   rš   r›   rœ   Ú__doc__r¶   rÃ   rž   r—   rŸ   r    rÀ   rÀ   ²   ó   † ñð óó órŸ   rÀ   c                  ó,   • \ rS rSrSr\SS j5       rSrg)Ú_StoresCompliantéÁ   zÃProvides access to a compliant object.

Compliant objects have types like:

>>> from narwhals._pandas_like.series import PandasLikeSeries
>>> from narwhals._arrow.dataframe import ArrowDataFrame
c                ó   • g)zReturn the compliant object.Nr—   r²   s    r    Ú	compliantÚ_StoresCompliant.compliantÊ   rÅ   rŸ   r—   N)r­   rº   )r™   rš   r›   rœ   rÆ   r¶   rÌ   rž   r—   rŸ   r    rÉ   rÉ   Á   rÇ   rŸ   rÉ   c                  ó(   • \ rS rSr\SS j5       rSrg)Ú_StoresBackendVersionéÐ   c                ó   • g)z#Version tuple for a native package.Nr—   r²   s    r    Ú_backend_versionÚ&_StoresBackendVersion._backend_versionÑ   rÅ   rŸ   r—   N©r­   útuple[int, ...])r™   rš   r›   rœ   r¶   rÒ   rž   r—   rŸ   r    rÏ   rÏ   Ð   s   † Øóó órŸ   rÏ   c                  ó    • \ rS rSr% S\S'   Srg)Ú_StoresVersioné×   ÚVersionÚ_versionr—   Nr˜   r—   rŸ   r    r×   r×   ×   s   ‡ ØÓÚ,rŸ   r×   c                  ó    • \ rS rSr% S\S'   Srg)Ú_StoresImplementationéÜ   ÚImplementationÚ_implementationr—   Nr˜   r—   rŸ   r    rÜ   rÜ   Ü   s   ‡ Ø#Ó#ÚIrŸ   rÜ   c                  ó   • \ rS rSrSrSrg)Ú_LimitedContextéá   z9Provides 2 attributes.

- `_implementation`
- `_version`
r—   N©r™   rš   r›   rœ   rÆ   rž   r—   rŸ   r    rá   rá   á   ó   † ôrŸ   rá   c                  ó   • \ rS rSrSrSrg)Ú_FullContextéé   zAProvides 2 attributes.

- `_implementation`
- `_backend_version`
r—   Nrã   r—   rŸ   r    ræ   ræ   é   rä   rŸ   ræ   c                  ó"   • \ rS rSrSrSS jrSrg)ÚValidateBackendVersionéñ   z=Ensure the target `Implementation` is on a supported version.c                ó8   • U R                   R                  5       ng)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_versionÚ0ValidateBackendVersion._validate_backend_versionô   s   € ð × Ñ ×1Ñ1Ó3‰rŸ   r—   N)r­   ÚNone)r™   rš   r›   rœ   rÆ   rí   rž   r—   rŸ   r    ré   ré   ñ   s
   † ÙG÷4rŸ   ré   c                  ó¢   • \ rS rSr\" 5       r\" 5       r\" 5       r\S	S j5       r	\S
S j5       r
\SS j5       r\SS j5       r\SS j5       rSrg)rÙ   éý   c                ó   • [        U 5      $ r¥   )Ú_version_namespacer²   s    r    Ú	namespaceÚVersion.namespace  ó   € ä! $Ó'Ð'rŸ   c                ó   • [        U 5      $ r¥   )Ú_version_dtypesr²   s    r    ÚdtypesÚVersion.dtypes  ó   € ä˜tÓ$Ð$rŸ   c                ó   • [        U 5      $ r¥   )Ú_version_dataframer²   s    r    Ú	dataframeÚVersion.dataframe
  rö   rŸ   c                ó   • [        U 5      $ r¥   )Ú_version_lazyframer²   s    r    Ú	lazyframeÚVersion.lazyframe  rö   rŸ   c                ó   • [        U 5      $ r¥   )Ú_version_seriesr²   s    r    ÚseriesÚVersion.series  rû   rŸ   r—   N)r­   útype[Namespace[Any]])r­   rx   )r­   útype[DataFrame[Any]])r­   útype[LazyFrame[Any]])r­   útype[Series[Any]])r™   rš   r›   rœ   r   ÚV1ÚV2ÚMAINr¶   rô   rù   rþ   r  r  rž   r—   rŸ   r    rÙ   rÙ   ý   sy   † Ù	‹€BÙ	‹€BÙ‹6€Dàó(ó ð(ð ó%ó ð%ð ó(ó ð(ð ó(ó ð(ð ó%ó ó%rŸ   rÙ   é   )Úmaxsizec               ó~   • U [         R                  L a  SSKJn  U$ U [         R                  L a  SSKJn  U$ SSKJn  U$ )Nr   rK   )rÙ   r  Únarwhals.stable.v1._namespacerL   r  Únarwhals.stable.v2._namespaceÚnarwhals._namespace)ÚversionÚNamespaceV1ÚNamespaceV2rL   s       r    ró   ró     s5   € à”'—*‘*ÒÝJàÐØ”'—*‘*ÒÝJàÐÝ-àÐrŸ   c               ó~   • U [         R                  L a  SSKJn  U$ U [         R                  L a  SSKJn  U$ SSKJn  U$ )Nr   )rù   )rÙ   r  Únarwhals.stable.v1rù   r  Únarwhals.stable.v2Únarwhals)r  Ú	dtypes_v1Ú	dtypes_v2rù   s       r    rø   rø   &  s4   € à”'—*‘*ÒÝ:àÐØ”'—*‘*ÒÝ:àÐÝà€MrŸ   c               ó~   • U [         R                  L a  SSKJn  U$ U [         R                  L a  SSKJn  U$ SSKJn  U$ )Nr   )ro   )rÙ   r  r  ro   r  r  Únarwhals.dataframe)r  ÚDataFrameV1ÚDataFrameV2ro   s       r    rý   rý   5  ó5   € à”'—*‘*ÒÝ?àÐØ”'—*‘*ÒÝ?àÐÝ,àÐrŸ   c               ó~   • U [         R                  L a  SSKJn  U$ U [         R                  L a  SSKJn  U$ SSKJn  U$ )Nr   )rp   )rÙ   r  r  rp   r  r  r  )r  ÚLazyFrameV1ÚLazyFrameV2rp   s       r    r  r  D  r"  rŸ   c               ó~   • U [         R                  L a  SSKJn  U$ U [         R                  L a  SSKJn  U$ SSKJn  U$ )Nr   rs   )rÙ   r  r  rt   r  r  Únarwhals.series)r  ÚSeriesV1ÚSeriesV2rt   s       r    r  r  S  s2   € à”'—*‘*ÒÝ9àˆØ”'—*‘*ÒÝ9àˆÝ&à€MrŸ   c                  óT  • \ rS rSrSrSr Sr Sr Sr Sr	 Sr
 S	r S
r Sr Sr Sr Sr S$S jr\      S%S j5       r\S&S j5       r\      S'S j5       rS(S jrS)S jrS)S jrS)S jrS)S jrS)S jrS)S jrS)S jrS)S jrS)S jrS)S jr S)S jr!S)S jr"S)S  jr#S*S! jr$S"r%g#)+rÞ   ib  z?Implementation of native object (pandas, Polars, PyArrow, ...).ÚpandasÚmodinÚcudfÚpyarrowÚpysparkÚpolarsÚdaskÚduckdbÚibisÚsqlframezpyspark[connect]Úunknownc                ó,   • [        U R                  5      $ r¥   )r•   Úvaluer²   s    r    Ú__str__ÚImplementation.__str__~  s   € Ü�4—:‘:‹ÐrŸ   c                óV  • [        5       [        R                  [        5       [        R                  [        5       [        R                  [        5       [        R                  [        5       [        R                  [        5       [        R                  [        5       [        R                  [        5       [        R                   [#        5       [        R$                  ['        5       [        R(                  [+        5       [        R,                  0nUR/                  U[        R0                  5      $ )zvInstantiate Implementation object from a native namespace module.

Arguments:
    native_namespace: Native namespace.
)r)   rÞ   ÚPANDASr(   ÚMODINr$   ÚCUDFr+   ÚPYARROWr-   ÚPYSPARKr*   ÚPOLARSr%   ÚDASKr&   ÚDUCKDBr'   ÚIBISr.   ÚSQLFRAMEr,   ÚPYSPARK_CONNECTÚgetÚUNKNOWN)ÚclsÚnative_namespaceÚmappings      r    Úfrom_native_namespaceÚ$Implementation.from_native_namespace�  s·   € ô ‹Lœ.×/Ñ/Ü‹Kœ×-Ñ-Ü‹Jœ×+Ñ+Ü‹Mœ>×1Ñ1ÜÓœ~×5Ñ5Ü‹Lœ.×/Ñ/ÜÓ ¤.×"5Ñ"5Ü‹Lœ.×/Ñ/Ü‹Jœ×+Ñ+Ü‹NœN×3Ñ3ÜÓ!¤>×#AÑ#Að
ˆð �{‰{Ð+¬^×-CÑ-CÓDÐDrŸ   c                óT   •  U " U5      $ ! [          a    [        R                  s $ f = f)z†Instantiate Implementation object from a native namespace module.

Arguments:
    backend_name: Name of backend, expressed as string.
)Ú
ValueErrorrÞ   rG  )rH  Úbackend_names     r    Úfrom_stringÚImplementation.from_string™  s-   € ð	*Ù�|Ó$Ð$øÜó 	*Ü!×)Ñ)Ò)ð	*ús   ‚
 Š'¦'c                óž   • [        U[        5      (       a  U R                  U5      $ [        U[        5      (       a  U$ U R	                  U5      $ )zŠInstantiate from native namespace module, string, or Implementation.

Arguments:
    backend: Backend to instantiate Implementation from.
)Ú
isinstancer•   rP  rÞ   rK  )rH  Úbackends     r    Úfrom_backendÚImplementation.from_backend¥  sR   € ô ˜'¤3×'Ñ'ð �O‰O˜GÓ$ð	
ô ˜'¤>×2Ñ2ð ð	
ð
 ×*Ñ*¨7Ó3ð	
rŸ   c                ó¶   • U [         R                  L a  Sn[        U5      eU R                  5         [        R                  X R                  5      n[        U5      $ )zCReturn the native namespace module corresponding to Implementation.z:Cannot return native namespace from UNKNOWN Implementation)rÞ   rG  ÚAssertionErrorrÒ   Ú_IMPLEMENTATION_TO_MODULE_NAMErF  r7  Ú_import_native_namespace)r§   ÚmsgÚmodule_names      r    Úto_native_namespaceÚ"Implementation.to_native_namespace¶  sK   € à”>×)Ñ)Ò)ØNˆCÜ  Ó%Ð%à×ÑÔÜ4×8Ñ8¸¿z¹zÓJˆÜ'¨Ó4Ð4rŸ   c                ó&   • U [         R                  L $ )z÷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_pandasÚImplementation.is_pandasÀ  ó   € ð ”~×,Ñ,Ð,Ð,rŸ   c                óf   • U [         R                  [         R                  [         R                  1;   $ )a  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_likeÚImplementation.is_pandas_likeÍ  s(   € ð œ×-Ñ-¬~×/CÑ/CÄ^×EXÑEXÐYÑYÐYrŸ   c                óf   • U [         R                  [         R                  [         R                  1;   $ )a	  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?  rD  rE  r²   s    r    Úis_spark_likeÚImplementation.is_spark_likeÚ  s1   € ð Ü×"Ñ"Ü×#Ñ#Ü×*Ñ*ð
ñ 
ð 	
rŸ   c                ó&   • U [         R                  L $ )z÷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_polarsÚImplementation.is_polarsë  rb  rŸ   c                ó&   • U [         R                  L $ )zô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_cudfÚImplementation.is_cudfø  ó   € ð ”~×*Ñ*Ð*Ð*rŸ   c                ó&   • U [         R                  L $ )zö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_modinÚImplementation.is_modin  s   € ð ”~×+Ñ+Ð+Ð+rŸ   c                ó&   • U [         R                  L $ )zú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_pysparkÚImplementation.is_pyspark  ó   € ð ”~×-Ñ-Ð-Ð-rŸ   c                ó&   • U [         R                  L $ )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_connect()
    False
)rÞ   rE  r²   s    r    Úis_pyspark_connectÚ!Implementation.is_pyspark_connect  s   € ð ”~×5Ñ5Ð5Ð5rŸ   c                ó&   • U [         R                  L $ )zú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_pyarrowÚImplementation.is_pyarrow,  rv  rŸ   c                ó&   • U [         R                  L $ )zô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Þ   rA  r²   s    r    Úis_daskÚImplementation.is_dask9  ro  rŸ   c                ó&   • U [         R                  L $ )zø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Þ   rB  r²   s    r    Ú	is_duckdbÚImplementation.is_duckdbF  rb  rŸ   c                ó&   • U [         R                  L $ )zô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Þ   rC  r²   s    r    Úis_ibisÚImplementation.is_ibisS  ro  rŸ   c                ó&   • U [         R                  L $ )zü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Þ   rD  r²   s    r    Úis_sqlframeÚImplementation.is_sqlframe`  s   € ð ”~×.Ñ.Ð.Ð.rŸ   c                ó   • [        U 5      $ )zReturns backend version.©Úbackend_versionr²   s    r    rÒ   ÚImplementation._backend_versionm  rû   rŸ   r—   N©r­   r•   )rH  ú
type[Self]rI  r<   r­   rÞ   )rH  rŽ  rO  r•   r­   rÞ   )rH  rŽ  rT  z!IntoBackend[Backend | PluginName]r­   rÞ   )r­   r<   )r­   ÚboolrÔ   )&r™   rš   r›   rœ   rÆ   r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rG  r8  ÚclassmethodrK  rP  rU  r]  r`  rd  rg  rj  rm  rq  rt  rx  r{  r~  r�  r„  r‡  rÒ   rž   r—   rŸ   r    rÞ   rÞ   b  s'  † ÙIà€FØ Ø€EØØ€DØØ€GØ!Ø€GØ!Ø€FØ Ø€DØØ€FØ Ø€DØØ€HØ"Ø(€OØ)Ø€GØ!ôð ðEØðEØ+5ðEà	óEó ðEð. ó	*ó ð	*ð ð
Øð
Ø"Cð
à	ó
ó ð
ô 5ô-ôZô
ô"-ô+ô,ô.ô6ô.ô+ô-ô+ô/÷%rŸ   rÞ   c                ó„   • U R                  5       =(       d    U R                  5       =(       a    U R                  5       S:  $ )zJWhether implementation is PySpark (or PySpark Connect) with version < 4.0.)é   r   )rt  rx  rÒ   ©Úimplementations    r    Úis_pyspark_pre_4r•  r  s9   € ð 	×!Ñ!Ó#×J ~×'HÑ'HÓ'J÷5à
×
)Ñ
)Ó
+¨fÑ
4ð5rŸ   )é   r  r’  )r   é   r   )é   é
   )é   )r  é   )r   é   r’  )iè  é   )r–  r–  )é   )r  r—  r   z(Mapping[Implementation, tuple[int, ...]]ÚMIN_VERSIONSzdask.dataframezmodin.pandaszpyspark.sqlzpyspark.sql.connectzMapping[Implementation, str]rY  é   c                ó   • SSK Jn  U" U 5      $ )Nr   )Úimport_module)Ú	importlibr¢  )r\  r¢  s     r    rZ  rZ  �  s   € å'á˜Ó%Ð%rŸ   c               ó  • [        U [        5      (       d  [        U 5        U [        R                  L a  gU n[        R                  XR                  5      n[        U5      nUR                  5       (       a  SS K	nUR                  nOOUR                  5       (       d  UR                  5       (       a  SS KnUnOUR                  5       (       a  SS KnUnOUn[!        U5      nU["        U   =n	:  a  SU SU	 SU 3n
[%        U
5      eU$ )N)r   r   r   r   zMinimum version of z supported by Narwhals is z	, found: )rS  rÞ   r"   rG  rY  rF  r7  rZ  r‡  Úsqlframe._versionrÚ   rt  rx  r/  r~  r1  Úparse_versionrŸ  rN  )r”  Úimplr\  rI  r4  Úinto_versionr/  r1  r  Úmin_versionr[  s              r    r‹  r‹  š  së   € ä�n¤n×5Ñ5Ü�^Ô$Øœ×/Ñ/Ò/Øà€DÜ0×4Ñ4°T¿:¹:ÓF€KÜ/°Ó<ÐØ×Ñ×ÑÛ à×(Ñ(‰Ø	�‰×	Ñ	˜d×5Ñ5×7Ñ7Ûà‰Ø	�‰�‰Ûà‰à'ˆÜ˜LÓ)€GØ¤¨dÑ!3Ð3�+Ó4Ø# D 6Ð)CÀKÀ=ÐPYÐZaÐYbÐcˆÜ˜‹oÐØ€NrŸ   c                ón   • [        [        U 5      S:X  a  [        U S   5      (       a	  U S   5      $ U 5      $ )Nr–  r   )ÚlistÚlenÚ_is_iterable)Úargss    r    Úflattenr¯  ¹  s1   € ÜœC ›I¨›N¬|¸DÀ¹G×/DÑ/D��Q‘ÓPÐPÈ4ÓPÐPrŸ   c                óB   • [        U [        [        45      (       d  U 4$ U $ r¥   )rS  r«  Útuple)Úargs    r    Útupleifyr³  ½  s   € Ü�cœD¤%˜=×)Ñ)ØˆvˆØ€JrŸ   c                ó¢  • SSK Jn  [        5       =nb&  [        XR                  UR                  45      (       dI  [        5       =nbW  [        XR                  UR                  UR                  UR                  45      (       a  S[        U 5      < S3n[        U5      e[        U [        5      =(       a    [        U [        [        U45      (       + $ )Nr   rs   z(Expected Narwhals class or scalar, got: z`.

Hint: Perhaps you
- forgot a `nw.from_native` somewhere?
- used `pl.col` instead of `nw.col`?)r'  rt   r)   rS  ro   r*   ÚExprrp   Úqualified_type_nameÚ	TypeErrorr   r•   Úbytes)r²  rt   ÚpdÚplr[  s        r    r­  r­  Ã  s«   € Ý&ô ‹|Ð	ˆÑ(¬Z¸¿i¹iÈÏÉÐ=V×-WÑ-Wä‹|Ð	ˆÑ(Ü�sŸY™Y¨¯©°·±¸r¿|¹|ÐL×MÑMð 7Ô7JÈ3Ó7OÑ6Rð S3ð 3ð 	ô ˜‹nÐä�cœ8Ó$×R¬Z¸¼cÄ5È&Ð=QÓ-RÔ)RÐRrŸ   c                ó"   • [        U [        5      $ r¥   )rS  r   )Úvals    r    Úis_iteratorr½  Ø  s   € Ü�cœ8Ó$Ð$rŸ   c                óº   • [        U [        5      (       a  U OU R                  n[        R                  " SSU5      n[        S UR                  S5       5       5      $ )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  ód   #   • U  H&  n[        [        R                  " S SU5      5      v •  M(     g7f)z\Dr¿  N)ÚintÚreÚsub)Ú.0Úvs     r    Ú	<genexpr>Ú parse_version.<locals>.<genexpr>ç  s'   é € ÐKÒ4J¨q””R—V’V˜E 2 qÓ)×*Ð*Ò4Jùs   ‚.0Ú.)rS  r•   r–   rÂ  rÃ  r±  Úsplit)r  Úversion_strs     r    r¦  r¦  Ü  sK   € ô (¨´×5Ñ5‘'¸7×;NÑ;N€KÜ—&’&˜¨¨[Ó9€KÜÑK°K×4EÑ4EÀcÔ4JÓKÓKÐKrŸ   c                ó   • g r¥   r—   ©Ú
obj_or_clsÚcls_or_tuples     r    Úisinstance_or_issubclassrÏ  ê  s   € ð rŸ   c                ó   • g r¥   r—   rÌ  s     r    rÏ  rÏ  ð  ó   € ð  rŸ   c                ó   • g r¥   r—   rÌ  s     r    rÏ  rÏ  ö  s   € ð "rŸ   c                ó   • g r¥   r—   rÌ  s     r    rÏ  rÏ  ü  s   € ð +.rŸ   c                ó   • g r¥   r—   rÌ  s     r    rÏ  rÏ    s   € ð %(rŸ   c                ó   • g r¥   r—   rÌ  s     r    rÏ  rÏ    s   € ð 7:rŸ   c                ó   • g r¥   r—   rÌ  s     r    rÏ  rÏ    s   € ð rŸ   c                ó¬   • SSK Jn  [        X5      (       a  [        X5      $ [        X5      =(       d"    [        U [        5      =(       a    [	        X5      $ )Nr   rq   )Únarwhals.dtypesrr   rS  ÚtypeÚ
issubclass)rÍ  rÎ  rr   s      r    rÏ  rÏ    sA   € Ý%ä�*×$Ñ$Ü˜*Ó3Ð3Ü�jÓ/÷ Ü�:œtÓ$×M¬°JÓ)MðrŸ   c                óÞ   ^^• SSK JmJm  [        U4S jU  5       5      (       d  [        U4S jU  5       5      (       a  g SU  Vs/ s H  n[	        U5      PM     sn 3n[        U5      es  snf )Nr   rn   c              3  ó<   >#   • U  H  n[        UT5      v •  M     g 7fr¥   ©rS  )rÄ  Úitemro   s     €r    rÆ  Ú$validate_laziness.<locals>.<genexpr>!  s   øé € Ð
9²5¨4Œ:�d˜I×&Ð&²5ùó   ƒc              3  ó<   >#   • U  H  n[        UT5      v •  M     g 7fr¥   rÝ  )rÄ  rÞ  rp   s     €r    rÆ  rß  "  s   øé € Ð:²E¨DŒJ�t˜Y×'Ð'²Eùrà  zGThe items to concatenate should either all be eager, or all lazy, got: )r  ro   rp   ÚallrÙ  r·  )ÚitemsrÞ  r[  ro   rp   s      @@r    Úvalidate_lazinessrä    sc   ù€ ß7ä
Ô
9±5Ó
9×9Ñ9ÜÔ:±EÓ:×:Ñ:àØSÑlqÓTrÒlqÐdhÔUYÐZ^ÖU_ÑlqÑTrÐSsÐ
t€CÜ
�C‹.Ðùò Uss   ÁA*c                ó:  • SSK Jn  SSKJn  SS jn[	        SU 5      n[	        SU5      n[        [        USS5      U5      (       aÑ  [        [        USS5      U5      (       aµ  U" UR                  R                  R                  5        U" UR                  R                  R                  5        UR                  UR                  R                  UR                  R                  R                  UR                  R                  R                     5      5      $ [        [        USS5      U5      (       aÑ  [        [        USS5      U5      (       aµ  U" UR                  R                  R                  5        U" UR                  R                  R                  5        UR                  UR                  R                  UR                  R                  R                  UR                  R                  R                     5      5      $ [        [        USS5      U5      (       aÑ  [        [        USS5      U5      (       aµ  U" UR                  R                  R                  5        U" UR                  R                  R                  5        UR                  UR                  R                  UR                  R                  R                  UR                  R                  R                     5      5      $ [        [        USS5      U5      (       aÑ  [        [        USS5      U5      (       aµ  U" UR                  R                  R                  5        U" UR                  R                  R                  5        UR                  UR                  R                  UR                  R                  R                  UR                  R                  R                     5      5      $ [        U5      [        U5      :w  a%  S	[        U5       S
[        U5       3n[        U5      eU $ )aP  Align `lhs` to the Index of `rhs`, if they're both pandas-like.

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

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

Examples:
    >>> import pandas as pd
    >>> import polars as pl
    >>> import narwhals as nw
    >>> df_pd = pd.DataFrame({"a": [1, 2]}, index=[3, 4])
    >>> s_pd = pd.Series([6, 7], index=[4, 3])
    >>> df = nw.from_native(df_pd)
    >>> s = nw.from_native(s_pd, series_only=True)
    >>> nw.to_native(nw.maybe_align_index(df, s))
       a
    4  2
    3  1
r   )ÚPandasLikeDataFrame)ÚPandasLikeSeriesr   c                ó@   • U R                   (       d  Sn[        U5      eg )Nz'given index doesn't have a unique index)Ú	is_uniquerN  )Úindexr[  s     r    Ú_validate_indexÚ*maybe_align_index.<locals>._validate_indexJ  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   rS  Úgetattrrí  rÃ   rê  Ú_with_compliantÚ_with_nativeÚlocrî  r¬  rN  )ÚlhsÚrhsræ  rç  rë  Úlhs_anyÚrhs_anyr[  s           r    Úmaybe_align_indexrù  )  si  € õ< DÝ=ô"ô
 �5˜#Ó€GÜ�5˜#Ó€GÜÜ�Ð+¨TÓ2Ð4G÷ñ ä
”W˜WÐ&8¸$Ó?ÐAT×
UÑ
UÙ˜×0Ñ0×7Ñ7×=Ñ=Ô>Ù˜×0Ñ0×7Ñ7×=Ñ=Ô>Ø×&Ñ&Ø×$Ñ$×1Ñ1Ø×(Ñ(×/Ñ/×3Ñ3°G×4LÑ4L×4SÑ4S×4YÑ4YÑZóó
ð 	
ô
 Ü�Ð+¨TÓ2Ð4G÷ñ ä
”W˜WÐ&9¸4Ó@ÐBR×
SÑ
SÙ˜×0Ñ0×7Ñ7×=Ñ=Ô>Ù˜×1Ñ1×8Ñ8×>Ñ>Ô?Ø×&Ñ&Ø×$Ñ$×1Ñ1Ø×(Ñ(×/Ñ/×3Ñ3Ø×-Ñ-×4Ñ4×:Ñ:ñóó
ð 	
ô Ü�Ð,¨dÓ3Ð5E÷ñ ä
”W˜WÐ&8¸$Ó?ÐAT×
UÑ
UÙ˜×1Ñ1×8Ñ8×>Ñ>Ô?Ù˜×0Ñ0×7Ñ7×=Ñ=Ô>Ø×&Ñ&Ø×%Ñ%×2Ñ2Ø×)Ñ)×0Ñ0×4Ñ4Ø×,Ñ,×3Ñ3×9Ñ9ñóó
ð 	
ô Ü�Ð,¨dÓ3Ð5E÷ñ ä
”W˜WÐ&9¸4Ó@ÐBR×
SÑ
SÙ˜×1Ñ1×8Ñ8×>Ñ>Ô?Ù˜×1Ñ1×8Ñ8×>Ñ>Ô?Ø×&Ñ&Ø×%Ñ%×2Ñ2Ø×)Ñ)×0Ñ0×4Ñ4Ø×-Ñ-×4Ñ4×:Ñ:ñóó
ð 	
ô ˆ7ƒ|”s˜7“|Ó#ØFÄsÈ7Ã|ÀnÐTYÔZ]Ð^eÓZfÐYgÐhˆÜ˜‹oÐØ€JrŸ   c                ó”   • [        SU 5      nUR                  5       n[        U5      (       d  [        U5      (       a  UR                  $ g)a>  Get the index of a DataFrame or a Series, if it's pandas-like.

Arguments:
    obj: Dataframe or Series.

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

Examples:
    >>> import pandas as pd
    >>> import polars as pl
    >>> import narwhals as nw
    >>> df_pd = pd.DataFrame({"a": [1, 2], "b": [4, 5]})
    >>> df = nw.from_native(df_pd)
    >>> nw.maybe_get_index(df)
    RangeIndex(start=0, stop=2, step=1)
    >>> series_pd = pd.Series([1, 2])
    >>> series = nw.from_native(series_pd, series_only=True)
    >>> nw.maybe_get_index(series)
    RangeIndex(start=0, stop=2, step=1)
r   N)r   Ú	to_nativer5   r6   rê  )ÚobjÚobj_anyÚ
native_objs      r    Úmaybe_get_indexrÿ  …  sC   € ô4 �5˜#Ó€GØ×"Ñ"Ó$€JÜ 
×+Ñ+Ô/DÀZ×/PÑ/PØ×ÑÐØrŸ   )rê  c               ó‚  • SSK Jn  [        SU 5      nUR                  5       nUb  Ub  Sn[        U5      eU(       d  Uc  Sn[        U5      eUb/  [	        U5      (       a  U Vs/ s H	  os" USS9PM     snOU" USS9nOUn[        U5      (       a9  UR                  UR                  R                  UR                  U5      5      5      $ [        U5      (       a`  SSKJ	n	  U(       a  S	n[        U5      eU	" UUU R                  R                  S
9nUR                  UR                  R                  U5      5      $ U$ s  snf )a3  Set the index of a DataFrame or a Series, if it's pandas-like.

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

Raises:
    ValueError: If one of the following conditions happens

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

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

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

Examples:
    >>> import pandas as pd
    >>> import polars as pl
    >>> import narwhals as nw
    >>> df_pd = pd.DataFrame({"a": [1, 2], "b": [4, 5]})
    >>> df = nw.from_native(df_pd)
    >>> nw.to_native(nw.maybe_set_index(df, "b"))  # doctest: +NORMALIZE_WHITESPACE
       a
    b
    4  1
    5  2
r   )rû  r   z8Only one of `column_names` or `index` should be providedz3Either `column_names` or `index` should be providedT)Úpass_through)Ú	set_indexz/Cannot set index using column names on a Seriesr“  )Únarwhals.translaterû  r   rN  r­  r5   rò  rí  ró  r  r6   Únarwhals._pandas_like.utilsrî  rß   )
rü  Úcolumn_namesrê  rû  Údf_anyrþ  r[  ÚidxÚkeysr  s
             r    Úmaybe_set_indexr	  ¦  sD  € õX -ä�%˜Ó€FØ×!Ñ!Ó#€JàÑ EÑ$5ØHˆÜ˜‹oÐæ˜E™MØCˆÜ˜‹oÐàÑô ˜E×"Ñ"ñ ;@Ó@º%°3ˆY�s¨Ô.¹%Ò@á˜5¨tÑ4ñ 	ð ˆä 
×+Ñ+Ø×%Ñ%Ø×#Ñ#×0Ñ0°×1EÑ1EÀdÓ1KÓLó
ð 	
ô ˜Z×(Ñ(Ý9æØCˆCÜ˜S“/Ð!áØØØ×0Ñ0×@Ñ@ñ
ˆ
ð
 ×%Ñ% f×&>Ñ&>×&KÑ&KÈJÓ&WÓXÐXØ€Mùò1 As   Á$D<c                óâ  • [        SU 5      nUR                  5       n[        U5      (       aY  UR                  5       n[	        X#5      (       a  U$ UR                  UR                  R                  UR                  SS95      5      $ [        U5      (       aY  UR                  5       n[	        X#5      (       a  U$ UR                  UR                  R                  UR                  SS95      5      $ U$ )aw  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þ  rI  s       r    Úmaybe_reset_indexr  ü  så   € ô8 �5˜#Ó€GØ×"Ñ"Ó$€JÜ 
×+Ñ+Ø"×7Ñ7Ó9ÐÜ˜j×;Ñ;ØˆNØ×&Ñ&Ø×$Ñ$×1Ñ1°*×2HÑ2HÈdÐ2HÐ2SÓTó
ð 	
ô ˜Z×(Ñ(Ø"×7Ñ7Ó9ÐÜ˜j×;Ñ;ØˆNØ×&Ñ&Ø×%Ñ%×2Ñ2°:×3IÑ3IÈtÐ3IÐ3TÓUó
ð 	
ð €NrŸ   c                ó,   • [        XR                  5      $ r¥   )rS  Ú
RangeIndex)rü  rI  s     r    Ú_is_range_indexr  +  s   € Ü�c×6Ñ6Ó7Ð7rŸ   c                óÆ   • U R                   n[        X!5      =(       aD    UR                  S:H  =(       a.    UR                  [	        U5      :H  =(       a    UR
                  S:H  $ )Nr   r–  )rê  r  ÚstartÚstopr¬  Ústep)Únative_frame_or_seriesrI  rê  s      r    r  r  /  sT   € ð #×(Ñ(€Eä˜Ó0÷ 	Ø�K‰K˜1Ñ÷	à�J‰Jœ#˜e›*Ñ$÷	ð �J‰J˜!‰Oð	rŸ   c           	     óì   • U R                   R                  5       (       d  U $ U R                  U R                  R	                  U R                  5       R                  " U0 UD65      5      n[        SU5      $ )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ˆ   )r”  rd  rò  Ú
_compliantró  rû  Úconvert_dtypesr   )rü  r®  ÚkwargsÚresults       r    Úmaybe_convert_dtypesr  ;  sg   € ðB ×Ñ×,Ñ,×.Ñ.Øˆ
Ø× Ñ Ø�‰×#Ñ# C§M¡M£O×$BÒ$BÀDÐ$SÈFÑ$SÓTó€Fô Ð  &Ó)Ð)rŸ   c                óŒ   • US;   a  U $ US;   a  U S-  $ US;   a  U S-  $ US;   a  U S-  $ US;   a  U S	-  $ S
U< 3n[        U5      e)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 ©rN  )ÚszÚunitr[  s      r    Úscale_bytesr+  d  ss   € ð ˆ~ÓØˆ	ØÐ"Ó"Ø�D‰yÐØÐ"Ó"Ø�G‰|ÐØÐ"Ó"Ø�G‰|ÐØÐ"Ó"Ø�G‰|ÐØGÈÁxÐ
P€CÜ
�S‹/ÐrŸ   c                óZ  • SSK Jn  U R                  R                  R                  nU R                  nSn[        X15      (       a@  [        U R                  UR                  5      (       a  UR                  R                  S   nU$ U R                  UR                  :X  a  SnU$ U R                  UR                  :w  a  SnU$ U R                  5       nU R                  nUR                  5       (       a9  UR                  5       S:  a%  [        SUR                  5      R                   S:H  nU$ UR#                  5       (       a!  [%        UR&                  R(                  5      nU$ UR+                  5       (       a5  SS	KJn  U" UR0                  5      =(       a    UR0                  R(                  nU$ )
a  Return whether indices of categories are semantically meaningful.

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

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

Arguments:
    series: Input Series.

Examples:
    >>> import narwhals as nw
    >>> import pandas as pd
    >>> import polars as pl
    >>> data = ["x", "y"]
    >>>
    >>> s_pd = nw.from_native(
    ...     pd.Series(data, dtype=pd.CategoricalDtype(ordered=True)), series_only=True
    ... )
    >>> nw.is_ordered_categorical(s_pd)
    True
    >>> s_pl = nw.from_native(
    ...     pl.Series(data, dtype=pl.Categorical()), series_only=True
    ... )
    >>> nw.is_ordered_categorical(s_pl)
    False
r   )ÚInterchangeSeriesFÚ
is_orderedT)r–  é    zpl.CategoricalÚphysical)Úis_dictionary)Únarwhals._interchange.seriesr-  rî  rÚ   rù   rS  ÚdtypeÚCategoricalrÃ   Údescribe_categoricalr   rû  r”  rj  rÒ   r   Úorderingrd  r�  ÚcatÚorderedr{  Únarwhals._arrow.utilsr1  rÙ  )r  r-  rù   rÌ   r  rÃ   r§  r1  s           r    Úis_ordered_categoricalr:  y  so  € õF ?à×%Ñ%×.Ñ.×5Ñ5€FØ×(Ñ(€Ià€FÜ�)×/Ñ/´JØ�‰�f×(Ñ(÷5ñ 5ð ×!Ñ!×6Ñ6°|ÑDˆð& €Mð% 
�‰˜Ÿ™Ó	$Øˆð" €Mð! 
�‰˜×+Ñ+Ó	+Øˆð €Mð ×!Ñ!Ó#ˆØ×$Ñ$ˆØ�>‰>×Ñ × 5Ñ 5Ó 7¸'Ó Aô Ð*¨F¯L©LÓ9×BÑBÀjÑPˆFð €Mð × Ñ ×"Ñ"Ü˜&Ÿ*™*×,Ñ,Ó-ˆFð
 €Mð	 �_‰_×ÑÝ;á" 6§;¡;Ó/×G°F·K±K×4GÑ4GˆFØ€MrŸ   c                ó.   • Sn[        USS9  [        XUS9$ )Nz}Use `generate_temporary_column_name` instead. `generate_unique_token` is deprecated and it will be removed in future versionsz1.13.0©rÚ   )Ún_bytesr³   Úprefix)r!   Úgenerate_temporary_column_name)r=  r³   r>  r[  s       r    Úgenerate_unique_tokenr@  »  s&   € ð	?ð ô ˜c¨HÒ5Ü)°'ÐSYÑZÐZrŸ   c                ó|   • Sn U [        U S-
  5       3=oA;  a  U$ US-  nUS:”  a  SU < SU 3n[        U5      eM:  )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   r–  éd   zMInternal Error: Narwhals was not able to generate a column name with n_bytes=z and not in )r   rX  )r=  r³   r>  ÚcounterÚtokenr[  s         r    r?  r?  Æ  sk   € ð< €GØ
Ø�x¤	¨'°A©+Ó 6Ð7Ð8Ð8ˆEÓHØˆLà�1‰ˆØ�S‹=ðØ‘*˜L¨¨	ð3ð ô ! Ó%Ð%ñ rŸ   c              ó¼   • U(       d-  [        [        U R                  5      R                  U5      5      $ [        U5      n[	        X0R                  S9=n(       a  UeU$ )N)Ú	available)r«  Úsetr³   ÚintersectionÚcheck_columns_exist)ÚframeÚsubsetÚstrictÚto_dropÚerrors        r    Úparse_columns_to_droprO  ò  sM   € ö Ü”C˜Ÿ™Ó&×3Ñ3°FÓ;Ó<Ð<Ü�6‹l€GÜ# G·}±}ÑEÐE€uÕEØˆØ€NrŸ   c                ó,   • SS K nU c  UR                  $ U $ ©Nr   )ÚstringÚ
whitespace)Ú
charactersrR  s     r    Úparse_str_strip_charsrU  ý  s   € Ûà *Ñ 2ˆ6×ÑÐB¸
ÐBrŸ   c                óZ   • [        U [        5      =(       a    [        U [        5      (       + $ r¥   )rS  r
   r•   )Úsequences    r    Úis_sequence_but_not_strrX    s   € Ü�h¤Ó)×K´*¸XÄsÓ2KÔ.KÐKrŸ   c                óL   • [        U [        5      =(       a    U [        S 5      :H  $ r¥   )rS  Úslice©rü  s    r    Úis_slice_noner\    s   € Ü�cœ5Ó!×8 c¬U°4«[Ñ&8Ð8rŸ   c                ó  • [        U 5      =(       a8    [        U 5      S:„  =(       a    [        U S   5      =(       d    [        U 5      S:H  =(       d/    [        U 5      =(       d    [	        U 5      =(       d    [        U 5      $ rQ  )rX  r¬  Úis_single_index_selectorr4   r1   Úis_compliant_series_intr[  s    r    Úis_sized_multi_index_selectorr`    sl   € ô
 $ CÓ(÷ YÜ�c“(˜Q‘,×CÔ#;¸CÀ¹FÓ#C×WÌÈSËÐUVÉ÷	(ô ! Ó%÷		(ô
 " #Ó&÷	(ô # 3Ó'ðrŸ   c                ó„   • [        U 5      =(       d/    [        U 5      =(       d    [        U 5      =(       d    [        U 5      $ r¥   )rX  r2   r/   Úis_compliant_seriesr[  s    r    Úis_sequence_likerc    s:   € ô 	  Ó$÷ 	$Ü˜SÓ!÷	$ä˜cÓ"÷	$ô ˜sÓ#ð	rŸ   c                óH  • [        U [        5      =(       aŒ    [        U R                  [        5      =(       dk    [        U R                  [        5      =(       dJ    [        U R
                  [        [        45      =(       a#    U R                  S L =(       a    U R                  S L $ r¥   )rS  rZ  r  rÁ  r  r  ÚNoneTyper[  s    r    Úis_slice_indexrf  $  sr   € Ü�cœ5Ó!÷ Ü�3—9‘9œcÓ"÷ 	
Ü�c—h‘h¤Ó$÷	
ô �s—x‘x¤#¤x Ó1÷ !Ø—	‘	˜TÐ!÷!à—‘˜DÐ ðrŸ   c                ó"   • [        U [        5      $ r¥   )rS  Úranger[  s    r    Úis_rangeri  0  s   € Ü�cœ5Ó!Ð!rŸ   c                óZ   • [        U [        5      =(       a    [        U [        5      (       + $ r¥   )rS  rÁ  r�  r[  s    r    r^  r^  4  s   € Ü�cœ3Ó×=¬
°3¼Ó(=Ô$=Ð=rŸ   c                ó`   • [        U 5      =(       d    [        U 5      =(       d    [        U 5      $ r¥   )r^  r`  rf  r[  s    r    Úis_index_selectorrl  8  s+   € ô 	! Ó%÷ 	Ü(¨Ó-÷	ä˜#ÓðrŸ   c                óâ   • [        U 5      =(       a(    [        U 5      S:„  =(       a    [        U S   [        5      =(       d/    [	        U 5      =(       d    [        U 5      =(       d    [        U 5      $ rQ  )rX  r¬  rS  r�  r3   r0   Úis_compliant_series_boolr[  s    r    Úis_boolean_selectorro  B  sW   € ô 
! Ó	%×	U¬3¨s«8°a©<×+T¼JÀsÈ1ÁvÌtÓ<T÷ 	)Ü! #Ó&÷	)ä" 3Ó'÷	)ô $ CÓ(ð	rŸ   c                ór   • [        [        U [        5      =(       a    U =(       a    [        U S   U5      5      $ rQ  )r�  rS  r«  )rü  Útps     r    Ú
is_list_ofrr  M  s)   € ä”
˜3¤Ó%×H¨#×H´*¸SÀ¹VÀRÓ2HÓIÐIrŸ   c                ó&   • [        S U  5       5      $ )Nc              3  óB   #   • U  H  n[        U[        5      v •  M     g 7fr¥   )rr  r�  )rÄ  Úpreds     r    rÆ  Ú3predicates_contains_list_of_bool.<locals>.<genexpr>U  s   é € Ð=²*¨$Œz˜$¤×%Ð%²*ùs   ‚©Úany)Ú
predicatess    r    Ú predicates_contains_list_of_boolrz  R  s   € ô Ñ=±*Ó=Ó=Ð=rŸ   c                óŠ   • [        [        U 5      =(       a)    [        [        U 5      S 5      =n=(       a    [	        X!5      5      $ r¥   )r�  rX  ÚnextÚiterrS  )rü  rq  Úfirsts      r    Úis_sequence_ofr  X  s<   € äÜ Ó$÷ 	"Üœ4 ›9 dÓ+Ð+ˆU÷	"ä�uÓ!óð rŸ   c                ó8   • [        U [        [        [        45      $ r¥   )rS  r«  r±  Údictr[  s    r    Úis_nested_literalr‚  a  s   € Ü�cœD¤%¬Ð.Ó/Ð/rŸ   c               ó`   • U c  Uc  UnU$ U b  Uc	  U (       + nU$ U c  Ub   U$ Sn[        U5      e)Nz,Cannot pass both `strict` and `pass_through`r(  )rL  r  Úpass_through_defaultr[  s       r    Úvalidate_strict_and_pass_thoughr…  e  s_   € ð �~˜,Ñ.Ø+ˆð Ðð 
Ñ	 Ñ 4Ø!”zˆð Ðð 
‰˜LÑ4Øð Ðð =ˆÜ˜‹oÐrŸ   r¿  F)Úwarn_versionÚrequiredc                ó   ^ ^• SUU 4S jjnU$ )a   Decorator to transition from `native_namespace` to `backend` argument.

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

Returns:
    Wrapped function, with `native_namespace` **removed**.
c               ó:   >^ • [        T 5      SU UU4S jj5       nU$ )Nc                 ó  >• UR                  SS 5      nUR                  SS 5      nUb  Uc  T(       a  Sn[        UTS9  UnO;Ub  Ub  Sn[        U5      eUc%  Uc"  T(       a  STR                   S3n[        U5      eX!S'   T" U 0 UD6$ )NrT  rI  z×`native_namespace` is deprecated, please use `backend` instead.

Note: `native_namespace` will remain available in `narwhals.stable.v1`.
See https://narwhals-dev.github.io/narwhals/backcompat/ for more information.
r<  z0Can't pass both `native_namespace` and `backend`z `backend` must be specified in `ú`.)Úpopr!   rN  r™   )r®  ÚkwdsrT  rI  r[  Úfnr‡  r†  s        €€€r    ÚwrapperÚ=deprecate_native_namespace.<locals>.decorate.<locals>.wrapper…  s§   ø€ à—h‘h˜y¨$Ó/ˆGØ#Ÿx™xÐ(:¸DÓAÐØÑ+°±Þðjð ô
 .¨c¸LÒIØ*‘Ø!Ñ-°'Ñ2EØH�Ü  “oÐ%Ø!Ñ)¨g©oÆ(Ø8¸¿¹¸ÀRÐH�Ü  “oÐ%Ø%�‰OÙ�tÐ$˜tÑ$Ð$rŸ   )r®  úP.argsr�  úP.kwargsr­   r�   )r   )rŽ  r�  r‡  r†  s   ` €€r    ÚdecorateÚ,deprecate_native_namespace.<locals>.decorate„  s%   ù€ Ü	ˆr‹÷	%ð 	%ó 
ð	%ð* ˆrŸ   )rŽ  úCallable[P, R]r­   r•  r—   )r†  r‡  r“  s   `` r    Údeprecate_native_namespacer–  w  s   ù€ ÷ð ð2 €OrŸ   c                óÚ   • [        U [        SS9  [        U[        [        S 5      SS9  U S:  a  Sn[        U5      eUb)  US:  a  Sn[        U5      eX:”  a  Sn[	        U5      e X4$ U nX4$ )NÚwindow_size©Ú
param_nameÚmin_samplesr–  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Ù  rN  r9   )r˜  r›  r[  s      r    Ú_validate_rolling_argumentsr�     sŠ   € ô �œS¨]Ò;Ü�œS¤$ t£*¸ÒGà�QƒØ;ˆÜ˜‹oÐàÑØ˜‹?Ø?ˆCÜ˜S“/Ð!àÓ$ØJˆCÜ'¨Ó,Ð,ð %ð Ð#Ð#ð "ˆàÐ#Ð#rŸ   c                ó¼   • U b  Ub  Sn[        U5      eU b  U nOUb  [        X!-  5      nOSnUS:  a  SU 3n[        U5      eXR:”  a  U(       d  Sn[        U5      eU$ )aÑ  Resolve the concrete number of rows to draw for `DataFrame.sample`/`Series.sample`.

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

Raises:
    ValueError: If both `n` and `fraction` are specified.
    InvalidOperationError: If the resolved size is negative.
    ShapeError: If the resolved size exceeds `height` and `with_replacement` is False.
z&cannot specify both `n` and `fraction`r–  r   z.sample size must be a positive integer, found zScannot take a larger sample than the total population when `with_replacement=false`)rN  rÁ  r9   r:   )ÚnÚfractionÚheightÚwith_replacementr[  Úsizes         r    Ú_resolve_sample_sizer¤  ¸  sy   € ð 	�}˜Ñ-Ø6ˆÜ˜‹oÐØ�}Ø‰Ø	Ñ	Ü�6Ñ$Ó%‰àˆàˆaƒxØ>¸t¸fÐEˆÜ# CÓ(Ð(Øƒ}Ö-ØcˆÜ˜‹oÐØ€KrŸ   c           
     óÀ  •  [         R                  " 5       R                  nUR                  5       R                  5       n[        S U 5       5      nUS-   U::  a¥  [        U[        U 5      5      nSSU-   S3nU[        U 5      -
  nUSS	US-  -   U  S	US-  US-  -   -   S
3-  nUSSU-   S
3-  nXT-
  S-  nXT-
  S-  XT-
  S-  -   n	U H$  n
USS	U-   U
 S	X”-   [        U
5      -
  -   S
3-  nM&     USSU-   S3-  nU$ S[        U 5      -
  nSS SS	US-  -   U  S	US-  US-  -   -   SS S3	$ ! [         a$    [	        [         R
                  " SS5      5      n GN;f = f)NÚCOLUMNSéP   c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr¥   )r¬  )rÄ  Úlines     r    rÆ  Ú generate_repr.<locals>.<genexpr>Þ  s   é € Ð>²¨œ3˜tŸ9˜9²ùó   ‚é   u   â”Œu   â”€u   â”�
Ú|Ú z|
Ú-u   â””u   â”˜é'   uu   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u   â”�
|u/   |
| Use `.to_native` to see native output |
â””)
ÚosÚget_terminal_sizer³   ÚOSErrorrÁ  ÚgetenvÚ
expandtabsÚ
splitlinesÚmaxr¬  )ÚheaderÚnative_reprÚterminal_widthÚnative_linesÚmax_native_widthÚlengthÚoutputÚheader_extraÚstart_extraÚ	end_extrar©  Údiffs               r    Úgenerate_reprrÃ  Ø  sâ  € ð7Ü×-Ò-Ó/×7Ñ7ˆð ×)Ñ)Ó+×6Ñ6Ó8€LÜÑ>±Ó>Ó>Ðà˜!Ñ˜~Ó-ÜÐ%¤s¨6£{Ó3ˆØ�u˜v‘~Ð& eÐ,ˆØ¤ F£Ñ+ˆØ�A�c˜\¨QÑ.Ñ/Ð0°°¸ÀÐPQÑ@QÐT`ÐcdÑTdÑ@dÑ9eÐ8fÐfiÐjÑjˆØ�A�c˜V‘nÐ% SÐ)Ñ)ˆØÑ0°QÑ6ˆØÑ.°1Ñ4¸Ñ8QÐUVÑ7VÑVˆ	Û ˆDØ˜˜# Ñ-Ð.¨t¨f°S¸IÑ<XÔ[^Ð_cÓ[dÑ<dÑ5eÐ4fÐfiÐjÑjŠFñ !à�C˜ ™Ð' sÐ+Ñ+ˆØˆà”�F“Ñ€Dà
ˆlˆ^ð Ø�4˜1‘9ÑÐ˜v˜h s¨d°a©i¸$À¹(Ñ.BÑ'CÐ&Dð E9àˆ,�cð	ðøô' ó 7ÜœRŸYšY y°"Ó5Ó6‹ð7ús   ‚D/ Ä/*EÅEc              ór   • [        U 5      R                  U5      =n(       a  [        R                  " X!5      $ g r¥   )rG  Ú
differencer7   Ú'from_missing_and_available_column_names)rK  rF  Úmissings      r    rI  rI  ö  s9   € ô �f“+×(Ñ(¨Ó3Ð3€wÕ3Ü"×JÒJØó
ð 	
ð rŸ   c                ó2  • [        U 5      [        [        U 5      5      :w  ap  SSKJn  U" U 5      nUR	                  5        VVs0 s H  u  p4US:”  d  M  X4_M     nnnSR                  S UR	                  5        5       5      nSU 3n[        U5      eg s  snnf )Nr   )ÚCounterr–  r¿  c              3  ó8   #   • U  H  u  pS U SU S3v •  M     g7f)z
- 'z' z timesNr—   )rÄ  ÚkrÅ  s      r    rÆ  Ú0check_column_names_are_unique.<locals>.<genexpr>  s#   é € ÐLÒ9K±°˜˜a˜S  1 # VÕ,Ò9Kùr«  z"Expected unique column names, got:)r¬  rG  ÚcollectionsrÉ  rã  Újoinr8   )r³   rÉ  rC  rË  rÅ  Ú
duplicatesr[  s          r    Úcheck_column_names_are_uniquerÐ     s‰   € Ü
ˆ7ƒ|”sœ3˜w›<Ó(Ó(Ý'á˜'Ó"ˆØ'.§}¡}¤Ô@¢™t˜q¸!¸a¹%“d�a’d¡ˆ
Ñ@Ø�g‰gÑL¸×9IÑ9IÔ9KÓLÓLˆØ2°3°%Ð8ˆÜ˜SÓ!Ð!ð )ùó As   ÁBÁBc                ó   • U c  1 SkO"[        U [        5      (       a  U 1O
[        U 5      nUc  S 1OF[        U[        [        45      (       a  [        U5      1OU Vs1 s H  o3b  [        U5      OS iM     snnX$4$ s  snf )N>   ÚsÚmsÚnsÚus)rS  r•   rG  r   )Ú	time_unitÚ	time_zoneÚ
time_unitsÚtzÚ
time_zoness        r    Ú_parse_time_unit_and_time_zonerÛ    s’   € ð Ñó 	 ô �i¤×%Ñ%ð ‰[ä�‹^ð ð Ñð 
‰ô �i¤#¤x ×1Ñ1ô �)‹nÑá<EÓFºI°b™Œc�"Œg¨TÒ1¹IÑFð ð Ð!Ð!ùò Gs   ÁA;c                óÆ   • [        XR                  5      =(       aF    U R                  U;   =(       a0    U R                  U;   =(       d    SU;   =(       a    U R                  S L$ )NÚ*)rS  ÚDatetimerÖ  r×  )r3  rù   rØ  rÚ  s       r    Ú%dtype_matches_time_unit_and_time_zonerß     sU   € ô 	�5Ÿ/™/Ó*÷ 	
Ø�_‰_ 
Ñ*÷	
ð �O‰O˜zÑ)÷ CØ�zÑ!×A e§o¡o¸TÐ&AðrŸ   c               ó   • U R                   $ r¥   ©r³   )rJ  s    r    Úget_column_namesrâ  -  s   € Ø�=‰=ÐrŸ   c                óT   • U R                    Vs/ s H  o"U;  d  M
  UPM     sn$ s  snf r¥   rá  )rJ  ÚnamesÚcol_names      r    Úexclude_column_namesræ  1  s#   € Ø%*§]¢]ÓL¢]˜ÀeÑ6K�H¡]ÑLÐLùÒLs   �	%œ%c               ó   ^ • SU 4S jjnU$ )Nc               ó   >• T$ r¥   r—   )Ú_framerä  s    €r    rŽ  Ú$passthrough_column_names.<locals>.fn6  s   ø€ ØˆrŸ   )ré  r   r­   rµ   r—   )rä  rŽ  s   ` r    Úpassthrough_column_namesrë  5  s   ø€ ÷ð €IrŸ   r   Ú	_SENTINELc                ó.   • [        X[        5      [        L$ r¥   )r   rì  )rü  Úattrs     r    Ú_hasattr_staticrï  ?  s   € Ü˜#¤YÓ/´yÐ@Ð@rŸ   c                ó   • [        U S5      $ )NÚ__narwhals_dataframe__©rï  r[  s    r    Úis_compliant_dataframeró  C  s   € ô ˜3Ð 8Ó9Ð9rŸ   c                ó   • [        U S5      $ )NÚ__narwhals_lazyframe__rò  r[  s    r    Úis_compliant_lazyframerö  N  s   € ô ˜3Ð 8Ó9Ð9rŸ   c                ó   • [        U S5      $ )NÚ__narwhals_series__rò  r[  s    r    rb  rb  T  s   € ô ˜3Ð 5Ó6Ð6rŸ   c                óZ   • [        U 5      =(       a    U R                  R                  5       $ r¥   )rb  r3  Ú
is_integerr[  s    r    r_  r_  Z  ó!   € ô ˜sÓ#×>¨¯	©	×(<Ñ(<Ó(>Ð>rŸ   c                óZ   • [        U 5      =(       a    U R                  R                  5       $ r¥   )rb  r3  Ú
is_booleanr[  s    r    rn  rn  `  rû  rŸ   c                ó@   • [        U S5      =(       a    [        U S5      $ )NrÌ   Ú	_accessorrò  r[  s    r    Ú_is_namespace_accessorr   f  s   € ô ˜3 Ó,×R´ÀÀkÓ1RÐRrŸ   c               ó¢   • U [         R                  [         R                  [         R                  [         R                  [         R
                  1;   $ )z.Return True if `impl` allows eager operations.)rÞ   r=  r<  r;  r@  r>  ©r§  s    r    Úis_eager_allowedr  p  sA   € àÜ×ÑÜ×ÑÜ×ÑÜ×ÑÜ×Ñðñ ð rŸ   c               óf   • U [         R                  [         R                  [         R                  1;   $ )z4Return True if `LazyFrame.collect(impl)` is allowed.)rÞ   r;  r@  r>  r  s    r    Úcan_lazyframe_collectr  {  s&   € à”N×)Ñ)¬>×+@Ñ+@Ä.×BXÑBXÐYÑYÐYrŸ   c               óÞ   • U [         R                  [         R                  [         R                  [         R                  [         R
                  [         R                  [         R                  1;   $ )z1Return True if `DataFrame.lazy(impl)` is allowed.)rÞ   rA  rB  rC  r@  r?  rE  rD  r  s    r    Úis_lazy_allowedr  €  sS   € àÜ×ÑÜ×ÑÜ×ÑÜ×ÑÜ×ÑÜ×&Ñ&Ü×Ñðñ ð rŸ   c                ó   • [        U S5      $ )Nr  rò  r[  s    r    Úhas_native_namespacer	  �  s   € Ü˜3Ð 6Ó7Ð7rŸ   c                ó   • [        U S5      $ )NÚ__arrow_c_stream__rò  r[  s    r    Úsupports_arrow_c_streamr  ‘  s   € Ü˜3Ð 4Ó5Ð5rŸ   c                óF   ^ ^• U U4S jU 5       n[        [        XSS95      $ )a+  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  ó>   >#   • U  H  oT;   a  U T 3OUv •  M     g 7fr¥   r—   )rÄ  ÚkeyÚleft_onÚsuffixs     €€r    rÆ  Ú(_remap_full_join_keys.<locals>.<genexpr>¥  s&   øé € ð Ú?G¸ 7›Nˆ3ˆ%�ˆxÑ°Ô3ºxùs   ƒF)rL  )r�  Úzip)r  Úright_onr  Úright_keys_suffixeds   ` ` r    Ú_remap_full_join_keysr  •  s'   ù€ õ Ù?GóÐô ”�H¸%Ñ@ÓAÐArŸ   c               óü   • [        S5      (       aR  UR                  R                  R                  S5      R                  nUR
                  R                  XS9R                  $ S[        U 5      < S3n[        U5      e)z¤Guards `ArrowDataFrame.from_arrow` w/ safer imports.

Arguments:
    data: Object which implements `__arrow_c_stream__`.
    context: Initialized compliant object.
r.  )ÚcontextzB'pyarrow>=14.0.0' is required for `from_arrow` for object of type rÈ  )
r   rÚ   rô   rU  rÌ   Ú
_dataframeÚ
from_arrowrÃ   r¶  ÚModuleNotFoundError)Údatar  rÔ  r[  s       r    Ú_into_arrow_tabler  «  sq   € ô �×ÑØ×Ñ×'Ñ'×4Ñ4°YÓ?×IÑIˆØ�}‰}×'Ñ'¨Ð'Ð9×@Ñ@Ð@ØNÔObÐcgÓOhÑNkÐklÐ
m€CÜ
˜cÓ
"Ð"rŸ   c               ó   • U $ )az  Visual-only marker for unstable functionality.

Arguments:
    fn: Function to decorate.

Returns:
    Decorated function (unchanged).

Examples:
    >>> @unstable
    ... def a_work_in_progress_feature(*args):
    ...     return args
    >>>
    >>> a_work_in_progress_feature.__name__
    'a_work_in_progress_feature'
    >>> a_work_in_progress_feature(1, 2, 3)
    (1, 2, 3)
r—   )rŽ  s    r    Úunstabler  »  s	   € ð& €IrŸ   c                ó8   ^ • [        U 4S jS 5       5      (       + $ )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  ó,   >#   • U  H	  oT;   v •  M     g 7fr¥   r—   )rÄ  ÚxÚformats     €r    rÆ  Ú#_is_naive_format.<locals>.<genexpr>à  s   øé € Ð:Ò(9 1˜–;Ò(9ùs   ƒ)z%sz%zÚZrw  )r#  s   `r    Ú_is_naive_formatr&  Ñ  s   ø€ ô Ô:Ñ(9Ó:Ó:Ô:Ð:rŸ   c                  óz   • \ rS rSrSrSSS.SS jjjrSS jrSS jr S     SS	 jjrSS
 jr	\
SS j5       rSrg)Únot_implementediã  a  Mark some functionality as unsupported.

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

Returns:
    An exception-raising [descriptor].

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

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

[`__set_name__`]: https://docs.python.org/3/reference/datamodel.html#object.__set_name__
[descriptor]: https://docs.python.org/3/howto/descriptor.html
Nr¿  )Úhintc              ó   • Xl         X l        g r¥   )Ú_aliasÚ_hint)r§   Úaliasr)  s      r    Ú__init__Únot_implemented.__init__
  s   € ð #(ŒØ�
rŸ   c                óf   • S[        U 5      R                   SU R                   SU R                   3$ )NÚ<z>: rÈ  )rÙ  r™   Ú_name_ownerÚ_namer²   s    r    Ú__repr__Únot_implemented.__repr__  s1   € Ø”4˜“:×&Ñ&Ð' s¨4×+;Ñ+;Ð*<¸A¸d¿j¹j¸\ÐJÐJrŸ   c                óZ   • UR                   U l        U R                  =(       d    UU l        g r¥   )r™   r2  r+  r3  ©r§   r©   Únames      r    Ú__set_name__Únot_implemented.__set_name__  s   € à %§¡ˆÔØŸ+™+×-¨ˆ�
rŸ   c               óÚ   • Uc  U $ [        US[        R                  5      nU[        R                  La  [        U5      nOU R                  n[        U R                  X@R                  5        g )Nrß   )rñ  rÞ   rG  Úreprr2  Ú_raise_not_implemented_errorr3  r,  )r§   r¨   r©   r”  Úwhos        r    rª   Únot_implemented.__get__  s`   € ð Ñð ˆKô ! Ð+<¼n×>TÑ>TÓUˆØ¤×!7Ñ!7Ò7Ü�~Ó&‰Cà×"Ñ"ˆCÜ$ T§Z¡Z°·j±jÔAØrŸ   c                ó$   • U R                  S5      $ )NÚraise)rª   )r§   r®  r�  s      r    Ú__call__Únot_implemented.__call__*  s   € ð �|‰|˜GÓ$Ð$rŸ   c               ó2   • U " 5       n[        U5      " U5      $ )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#   )rH  Úmessagerü  s      r    r#   Únot_implemented.deprecated/  s   € ñ ‹eˆÜ˜'Ô" 3Ó'Ð'rŸ   )r+  r,  r3  r2  r¥   )r-  ú
str | Noner)  r•   r­   rï   r�  )r©   útype[_T]r8  r•   r­   rï   )r¨   z_T | Literal['raise'] | Noner©   ztype[_T] | Noner­   r   )r®  r   r�  r   r­   r   )rE  r?   r­   rA   )r™   rš   r›   rœ   rÆ   r.  r4  r9  rª   rB  r�  r#   rž   r—   rŸ   r    r(  r(  ã  sa   † ñ$ðLÀ2÷ ð ôKô.ð PTðØ4ðØ=Lðà	õô$%ð
 ó	(ó ó	(rŸ   r(  c               óJ   • SnU=(       d    UnU < SU< SU 3n[        U5      e)NzƒIf you would like to see this functionality in `narwhals`, please open an issue at: https://github.com/narwhals-dev/narwhals/issuesz is not implemented for: z.

)ÚNotImplementedError)Úwhatr>  r)  Úfallback_msgÚtailr[  s         r    r=  r=  <  s;   € ð	Sð ð ×�<€DØ‰HÐ-¨c©W°E¸$¸Ð
@€CÜ
˜cÓ
"Ð"rŸ   c                ó   • SU  SU S3$ )a4  Explain why a length-changing expression isn't available, and what to use instead.

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

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

Hint: instead of `z`, use `r‹  r—   )Ú
instead_ofÚuses     r    Úlength_changing_hintrQ  J  s   € ð	à'˜L¨°°°Rð	9ðrŸ   c                  ó–   • \ rS rSr% SrS\S'   S\S'   S\S'    \SSS jj5       r\SS	 j5       r	SS
 jr
SS jrSS jr    SS jrSrg)Úrequiresi[  až  Method decorator for raising under certain constraints.

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

Examples:
    >>> class SomeBackend:
    ...     _implementation = Implementation.PYARROW
    ...     _backend_version = 20, 0, 0
    ...
    ...     @requires.backend_version((9000, 0, 0))
    ...     def really_complex_feature(self) -> str:
    ...         return "hello"
    >>> backend = SomeBackend()
    >>> backend.really_complex_feature()
    Traceback (most recent call last):
        ...
    NotImplementedError: `really_complex_feature` is only available in 'pyarrow>=9000.0.0', found version '20.0.0'.
rÕ   Ú_min_versionr•   r,  Ú_wrapped_namec               ó@   • U R                  U 5      nXl        X#l        U$ )z�Method decorator for raising below a minimum `_backend_version`.

Arguments:
    minimum: Minimum backend version.
    hint: Optional suggested alternative.
)Ú__new__rT  r,  )rH  Úminimumr)  rü  s       r    r‹  Úrequires.backend_versiony  s"   € ð �k‰k˜#ÓˆØ"ÔØŒ	Øˆ
rŸ   c               ó2   • SR                  S U  5       5      $ )NrÈ  c              3  ó&   #   • U  H  o v •  M	     g 7fr¥   r—   )rÄ  Úds     r    rÆ  Ú,requires._unparse_version.<locals>.<genexpr>ˆ  s   é € Ð8ª 1˜#œªùs   ‚)rÎ  rŠ  s    r    Ú_unparse_versionÚrequires._unparse_version†  s   € à�x‰xÑ8©Ó8Ó8Ð8rŸ   c               óR   • SU R                   ;  a  U SU R                    3U l         g g ©NrÈ  ©rU  )r§   r>  s     r    Ú_qualify_accessor_nameÚrequires._qualify_accessor_nameŠ  s/   € à�d×(Ñ(Ó(Ø$* 8¨1¨T×-?Ñ-?Ð,@Ð!AˆDÕð )rŸ   c               ó¸   • [        U5      (       a(  U R                  UR                  5        UR                  nOUnUR                  [        UR                  5      4$ r¥   )r   rc  rÿ  rÌ   rÒ   r•   rß   )r§   r¨   rÌ   s      r    Ú_unwrap_contextÚrequires._unwrap_context�  sM   € Ü! (×+Ñ+Ø×'Ñ'¨×(:Ñ(:Ô;Ø ×*Ñ*‰Ià ˆIØ×)Ñ)¬3¨y×/HÑ/HÓ+IÐIÐIrŸ   c          	     ó.  • U R                  U5      u  p#X R                  :¼  a  g U R                  U R                  5      nU R                  U5      nSU R                   SU SU SU< S3	nU R                  (       a  U SU R                   3n[        U5      e)NÚ`z` is only available in 'z>=z', found version rÈ  Ú
)rf  rT  r^  rU  r,  rJ  )r§   r¨   r  rT  rX  Úfoundr[  s          r    Ú_ensure_versionÚrequires._ensure_version—  sœ   € Ø×/Ñ/°Ó9ÑˆØ×'Ñ'Ó'ØØ×'Ñ'¨×(9Ñ(9Ó:ˆØ×%Ñ% gÓ.ˆØ�$×$Ñ$Ð%Ð%=¸g¸YÀbÈÈ	ÐQbÐchÑbkÐklÐmˆØ�:�:Ø�E˜˜DŸJ™J˜<Ð(ˆCÜ! #Ó&Ð&rŸ   c               óZ   ^ ^• TR                   T l        [        T5      SUU 4S jj5       nU$ )Nc                ó>   >• TR                  U 5        T" U /UQ70 UD6$ r¥   )rl  )r¨   r®  r�  rŽ  r§   s      €€r    r�  Ú"requires.__call__.<locals>.wrapper§  s&   ø€ à× Ñ  Ô*Ù�hÐ. Ò.¨Ñ.Ð.rŸ   )r¨   r¼   r®  r‘  r�  r’  r­   r�   )r™   rU  r   )r§   rŽ  r�  s   `` r    rB  Úrequires.__call__¢  s.   ù€ ð  Ÿ[™[ˆÔä	ˆr‹÷	/ó 
ð	/ð
 ˆrŸ   rb  N©r¿  )r)  r•   rX  rÕ   r­   rA   )r‹  rÕ   r­   r•   )r>  rG   r­   rï   )r¨   r»   r­   ztuple[tuple[int, ...], str])r¨   r»   r­   rï   )rŽ  ú_Method[_IntoContextT, P, R]r­   rs  )r™   rš   r›   rœ   rÆ   r�   r�  r‹  Ústaticmethodr^  rc  rf  rl  rB  rž   r—   rŸ   r    rS  rS  [  sm   ‡ ñð* "Ó!ØƒJØÓðð
 õ
ó ð
ð ó9ó ð9ôBô
Jô	'ðØ.ðà	%÷rŸ   rS  c                óÐ   • U R                   b  UR                  U R                   5      OS nU R                  b  UR                  U R                  5      S-   OS nU R                  nX#U4$ )Nr–  )r  rê  r  r  )Ú	str_slicer³   r  r  r  s        r    Úconvert_str_slice_to_int_slicerw  °  sX   € ð /8¯o©oÑ.IˆG�M‰M˜)Ÿ/™/Ô*Èt€EØ09·±Ñ0Jˆ7�=‰=˜Ÿ™Ó(¨1Ò,ÐPT€DØ�>‰>€DØ˜ÐÐrŸ   c               ó   ^ • SU 4S jjnU$ )zµSteal the class-level docstring from parent and attach to child `__init__`.

Returns:
    Decorated constructor.

Notes:
    - Passes static typing (mostly)
    - Passes at runtime
c               óä   >• U R                   S:X  a0  [        [        T5      [        5      (       a  [        T5      U l        U $ S[
        R                    SU R                  < ST< 3n[        U5      e)Nr.  z`@zL` is only allowed to decorate an `__init__` with a class-level doc.
Method: z	
Parent: )r™   rÚ  rÙ  r   rÆ   Úinherit_docr›   r·  )Ú
init_childr[  Ú	tp_parents     €r    r“  Úinherit_doc.<locals>.decorateÆ  ss   ø€ Ø×Ñ *Ó,´¼DÀ»OÌT×1RÑ1RÜ!'¨	Ó!2ˆJÔØÐà”×%Ñ%Ð&ð 'Ø!×.Ñ.Ñ1ð 2Ø ‘mð%ð 	ô
 ˜‹nÐrŸ   )r{  ú_Constructor[_T, P, R2]r­   r~  r—   )r|  r“  s   ` r    rz  rz  ¹  s   ø€ ÷	ð €OrŸ   c               óÂ   • [        U [        5      (       a  U O
[        U 5      nUR                  S:w  a  UR                  OSnU SUR                   3R	                  S5      $ )NÚbuiltinsr¿  rÈ  )rS  rÙ  rš   r™   Úlstrip)rü  rq  Úmodules      r    r¶  r¶  Ô  sO   € Ü˜3¤×%Ñ%‰¬4°«9€BØ Ÿm™m¨zÓ9ˆR�]Š]¸r€FØˆX�Q�r—{‘{�mÐ$×+Ñ+¨CÓ0Ð0rŸ   r™  c              óR  • [        X5      (       d—  SR                  S U 5       5      nSU< S[        U 5      < 3nU(       aZ  Sn[        U 5      n[	        U5      S:”  a  [        U 5       S3nU U S3nS	[	        U5      -  S
[	        U5      -  -   nU SU U SU 3n[        U5      eg)a2  Validate that an object is an instance of one or more specified types.

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

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

Examples:
    >>> ensure_type(42, int, float)
    >>> ensure_type("hello", str)

    >>> ensure_type("hello", int, param_name="test")
    Traceback (most recent call last):
        ...
    TypeError: Expected 'int', got: 'str'
        test='hello'
             ^^^^^^^
    >>> import polars as pl
    >>> import pandas as pd
    >>> df = pl.DataFrame([[1], [2], [3], [4], [5]], schema=[*"abcde"])
    >>> ensure_type(df, pd.DataFrame, param_name="df")
    Traceback (most recent call last):
        ...
    TypeError: Expected 'pandas.DataFrame', got: 'polars.dataframe.frame.DataFrame'
        df=polars.dataframe.frame.DataFrame(...)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
z | c              3  ó8   #   • U  H  n[        U5      v •  M     g 7fr¥   )r¶  )rÄ  rq  s     r    rÆ  Úensure_type.<locals>.<genexpr>û  s   é € ÐLÂ¸"Ô1°"×5Ð5Âùr«  z	Expected z, got: z    é(   z(...)Ú=r®  Ú^rj  N)rS  rÎ  r¶  r<  r¬  r·  )	rü  rš  Úvalid_typesÚtp_namesr[  Úleft_padr¼  ÚassignÚ	underlines	            r    rœ  rœ  Ú  s¿   € ô@ �c×'Ñ'Ø—:‘:ÑLÁÓLÓLˆØ˜(™ WÔ-@ÀÓ-EÑ,HÐIˆÞØˆHÜ�s“)ˆCÜ�3‹x˜"‹}Ü,¨SÓ1Ð2°%Ð8�Ø �z * ¨QÐ/ˆFØœs 6›{Ñ*¨s´S¸³X©~Ñ>ˆIØ�E˜˜F˜8 C 5¨¨9¨+Ð6ˆCÜ˜‹nÐð (rŸ   c                  ó6   • \ rS rSrSrSS jrS	S jrS
S jrSrg)Ú_DeferredIterablei  zLStore a callable producing an iterable to defer collection until we need it.c               ó   • Xl         g r¥   ©Ú
_into_iter)r§   Ú	into_iters     r    r.  Ú_DeferredIterable.__init__  s   € Ø6?�rŸ   c              #  ó@   #   • U R                  5        S h  v•N   g  N7fr¥   r‘  r²   s    r    Ú__iter__Ú_DeferredIterable.__iter__  s   é € Ø—?‘?Ó$×$Ó$ùs   ‚–—c                óf   • U R                  5       n[        U[        5      (       a  U$ [        U5      $ r¥   )r’  rS  r±  )r§   Úits     r    Úto_tupleÚ_DeferredIterable.to_tuple  s)   € à�_‰_ÓˆÜ ¤E×*Ñ*ˆrÐ9´°b³	Ð9rŸ   r‘  N)r“  zCallable[[], Iterable[_T]]r­   rï   )r­   zIterator[_T])r­   ztuple[_T, ...])	r™   rš   r›   rœ   rÆ   r.  r–  rš  rž   r—   rŸ   r    r�  r�    s   † ÙVô@ô%÷:rŸ   r�  é@   c                óT   • U(       a  SR                  U /UQ75      OU n[        U5      $ ra  )rÎ  r   )rî  Únestedr8  s      r    Údeep_attrgetterrŸ    s%   € æ(.ˆ3�8‰8�T�O˜F‘OÔ$°D€DÜ�dÓÐrŸ   c                ó&   • [        U/UQ76 " U 5      $ )z+Perform a nested attribute lookup on `obj`.)rŸ  )rü  Úname_1rž  s      r    Údeep_getattrr¢    s   € ä˜6Ð+ FÓ+¨CÓ0Ð0rŸ   c                  ó   • \ rS rSrSrg)Ú	Complianti"  r—   N)r™   rš   r›   rœ   rž   r—   rŸ   r    r¤  r¤  "  s   † ârŸ   r¤  c                  ó,   • \ rS rSrSr\SS j5       rSrg)ÚNarwhalsi'  ap  Minimal *Narwhals-level* protocol.

Provides access to a compliant object:

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

Which itself exposes:

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

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

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

[nominal]: https://typing.python.org/en/latest/spec/glossary.html#term-nominal
[structural]: https://typing.python.org/en/latest/spec/glossary.html#term-structural
[assignable to]: https://typing.python.org/en/latest/spec/glossary.html#term-assignable
c                ó   • g r¥   r—   r²   s    r    r  ÚNarwhals._compliant@  s   € Ø36rŸ   r—   N)r­   zCompliant[NativeT_co])r™   rš   r›   rœ   rÆ   r¶   r  rž   r—   rŸ   r    r¦  r¦  '  s   † ñð0 Û6ó Û6rŸ   r¦  c                  ó”  • \ rS rSrSrSS jr\SS j5       r\SS j5       r\SS j5       r\SS j5       r\      SS j5       r\SS	 j5       r\      SS
 j5       r\SS j5       r\      SS j5       r\S S j5       r\S!S j5       r\      S"S j5       r\S#S j5       r\      S$S j5       r\S%S j5       rS&S jrSrg)'Ú_ImplementationiD  z­Descriptor for matching an opaque `Implementation` on a generic class.

Based on [pyright comment](https://github.com/microsoft/pyright/issues/3071#issuecomment-1043978070)
c                ó   • X l         g r¥   ©r™   r7  s      r    r9  Ú_Implementation.__set_name__J  s   € Ø!�rŸ   c                ó   • g r¥   r—   r¦   s      r    rª   Ú_Implementation.__get__M  ó   € ØTWrŸ   c                ó   • g r¥   r—   r¦   s      r    rª   r¯  O  r°  rŸ   c                ó   • g r¥   r—   r¦   s      r    rª   r¯  Q  ó   € ØRUrŸ   c                ó   • g r¥   r—   r¦   s      r    rª   r¯  S  ó   € ØPSrŸ   c                ó   • g r¥   r—   r¦   s      r    rª   r¯  U  s   € ð rŸ   c                ó   • g r¥   r—   r¦   s      r    rª   r¯  Y  r³  rŸ   c                ó   • g r¥   r—   r¦   s      r    rª   r¯  [  s   € ð 25rŸ   c                ó   • g r¥   r—   r¦   s      r    rª   r¯  _  r°  rŸ   c                ó   • g r¥   r—   r¦   s      r    rª   r¯  a  s   € ð rŸ   c                ó   • g r¥   r—   r¦   s      r    rª   r¯  e  rµ  rŸ   c                ó   • g r¥   r—   r¦   s      r    rª   r¯  g  rµ  rŸ   c                ó   • g r¥   r—   r¦   s      r    rª   r¯  i  s   € ð .1rŸ   c                ó   • g r¥   r—   r¦   s      r    rª   r¯  n  s   € ØKNrŸ   c                ó   • g r¥   r—   r¦   s      r    rª   r¯  p  rÑ  rŸ   c                ó   • g r¥   r—   r¦   s      r    rª   r¯  t  s   € ØQTrŸ   c                ó8   • Uc  U $ UR                   R                  $ r¥   )r  rß   r¦   s      r    rª   r¯  v  s   € ØÑ'ˆtÐP¨X×-@Ñ-@×-PÑ-PÐPrŸ   r¬  N)r©   ú	type[Any]r8  r•   r­   rï   )r¨   zNarwhals[NativePolars]r©   r   r­   rj   )r¨   zNarwhals[NativePandas]r©   r   r­   rh   )r¨   zNarwhals[NativeModin]r©   r   r­   rg   )r¨   zNarwhals[NativeCuDF]r©   r   r­   r`   )r¨   zNarwhals[NativePandasLike]r©   r   r­   ri   )r¨   zNarwhals[NativeArrow]r©   r   r­   r_   )r¨   z3Narwhals[NativePolars | NativeArrow | NativePandas]r©   r   r­   z&_PolarsImpl | _PandasImpl | _ArrowImpl)r¨   zNarwhals[NativeDuckDB]r©   r   r­   rb   )r¨   zNarwhals[NativeSQLFrame]r©   r   r­   rm   )r¨   zNarwhals[NativeDask]r©   r   r­   ra   )r¨   zNarwhals[NativeIbis]r©   r   r­   rd   )r¨   z.Narwhals[NativePySpark | NativePySparkConnect]r©   r   r­   z"_PySparkImpl | _PySparkConnectImpl)r¨   rï   r©   ztype[Narwhals[Any]]r­   rA   )r¨   zDataFrame[Any] | Series[Any]r©   r   r­   rc   )r¨   zLazyFrame[Any]r©   r   r­   re   )r¨   zNarwhals[Any] | Noner©   r   r­   r   )	r™   rš   r›   rœ   rÆ   r9  r   rª   rž   r—   rŸ   r    rª  rª  D  s|  † ñô
"ð ÛWó ØWØÛWó ØWØÛUó ØUØÛSó ØSØðØ2ðØ;>ðà	óó ðð ÛUó ØUØð5ØKð5ØTWð5à	/ó5ó ð5ð ÛWó ØWØðØ0ðØ9<ðà	óó ðð ÛSó ØSØÛSó ØSØð1ØFð1ØORð1à	+ó1ó ð1ð ÛNó ØNØð Ø4ð Ø=@ð à	ó ó ð ð ÛTó ØT÷QrŸ   rª  c                óx   • SS K n[        XR                  5      (       a  UR                  R	                  U 5      $ U $ rQ  )r.  rS  ÚRecordBatchReaderÚTableÚfrom_batches)ÚtblÚpas     r    Úto_pyarrow_tablerÉ  z  s0   € Ûä�#×+Ñ+×,Ñ,Ø�x‰x×$Ñ$ SÓ)Ð)Ø€JrŸ   c          
     ól   • U H.  nX2;   d  M
  X#   U :w  d  M  SU SU  SU SX#    S3	n[        U5      e   g)zSEnsure `separator` does not conflict with backend-native aliases passed via `kwds`.z`separator` and `z` do not match: `separator`=z and `z`=rÈ  N)r·  )Ú	separatorÚnative_separatorsr�  Únative_separatorr[  s        r    Úvalidate_separatorsrÎ  ‚  s^   € ó .ÐØÕ#¨Ñ(>À)Õ(Kà#Ð$4Ð#5ð 6Ø(˜k¨Ð0@Ð/AÀÀDÑDZÐC[Ð[\ð^ð ô ˜C“.Ð ò .rŸ   Úwin32c               óx   • SSK Jn  U" [        U [        5      (       a  U 5      $ [        [	        U 5      5      5      $ ©Nr   )r}   )Únarwhals.typingr}   rS  r•   r   ©Úsourcer}   s     r    Únormalize_pathrÕ  ‘  s-   € Ý2á¬
°6¼3×(?Ñ(?˜fÓWÐWÄSÌÈfËÓEVÓWÐWrŸ   c               óL   • SSK Jn  U" [        U 5      R                  5       5      $ rÑ  )rÒ  r}   r   Úas_posixrÓ  s     r    rÕ  rÕ  œ  s   € Ý2áœd 6›l×3Ñ3Ó5Ó6Ð6rŸ   c                óN   • [        U [        5      (       a  U 4U-  $ [        U 5      $ )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
)rS  r�  r±  )r7  Ún_matchs     r    Úextend_boolrÚ  ¢  s&   € ô ",¨E´4×!8Ñ!8ˆEˆ8�gÑÐJ¼eÀE»lÐJrŸ   c                  ó"   • \ rS rSrSrSS jrSrg)Ú
_NoDefaulti­  Ú
NO_DEFAULTc                ó   • g)Nz<no_default>r—   r²   s    r    r4  Ú_NoDefault.__repr__²  s   € ØrŸ   r—   Nr�  )r™   rš   r›   rœ   Ú
no_defaultr4  rž   r—   rŸ   r    rÜ  rÜ  ­  s   † ð €J÷rŸ   rÜ  )r  rÙ   r­   r  )r  rÙ   r­   rx   )r  rÙ   r­   r	  )r  rÙ   r­   r
  )r  rÙ   r­   r  )r”  rÞ   r­   r�  )r\  r•   r­   r<   )r”  rÞ   r­   rÕ   )r®  r   r­   z	list[Any])r²  r   r­   r   )r²  zAny | Iterable[Any]r­   r�  )r¼  zIterable[_T] | Anyr­   zTypeIs[Iterator[_T]])r  z#str | ModuleType | _SupportsVersionr­   rÕ   )rÍ  rÙ  rÎ  rH  r­   zTypeIs[type[_T]])rÍ  úobject | typerÎ  rH  r­   zTypeIs[_T | type[_T]])rÍ  rÙ  rÎ  útuple[type[_T1], type[_T2]]r­   zTypeIs[type[_T1 | _T2]])rÍ  rá  rÎ  râ  r­   z#TypeIs[_T1 | _T2 | type[_T1 | _T2]])rÍ  rÙ  rÎ  ú&tuple[type[_T1], type[_T2], type[_T3]]r­   zTypeIs[type[_T1 | _T2 | _T3]])rÍ  rá  rÎ  rã  r­   z/TypeIs[_T1 | _T2 | _T3 | type[_T1 | _T2 | _T3]])rÍ  r   rÎ  ztuple[type, ...]r­   zTypeIs[Any])rÍ  r   rÎ  r   r­   r�  )rã  zIterable[Any]r­   rï   )rõ  rˆ   rö  z-Series[Any] | DataFrame[Any] | LazyFrame[Any]r­   rˆ   )rü  z-DataFrame[Any] | LazyFrame[Any] | Series[Any]r­   r¬   r¥   )rü  rˆ   r  zstr | list[str] | Nonerê  z6Series[IntoSeriesT] | list[Series[IntoSeriesT]] | Noner­   rˆ   )rü  rˆ   r­   rˆ   )rü  r   rI  r   r­   zTypeIs[pd.RangeIndex])r  zpd.Series[Any] | pd.DataFramerI  r   r­   r�  )rü  rˆ   r®  r�  r  z
bool | strr­   rˆ   )r)  rÁ  r*  r�   r­   zint | float)r  zSeries[Any]r­   r�  )Únw)r=  rÁ  r³   úContainer[str]r>  r•   r­   r•   )rJ  r¯   rK  zIterable[str]rL  r�  r­   z	list[str])rT  rG  r­   r•   )rW  úSequence[_T] | Anyr­   úTypeIs[Sequence[_T]])rü  r   r­   zTypeIs[_SliceNone])rü  r   r­   zCTypeIs[SizedMultiIndexSelector[Series[Any] | CompliantSeries[Any]]])rü  ræ  r­   z-TypeIs[Sequence[_T] | Series[Any] | _1DArray])rü  r   r­   zTypeIs[_SliceIndex])rü  r   r­   zTypeIs[range])rü  r   r­   zTypeIs[SingleIndexSelector])rü  r   r­   zTTypeIs[SingleIndexSelector | MultiIndexSelector[Series[Any] | CompliantSeries[Any]]])rü  r   r­   zBTypeIs[SizedMultiBoolSelector[Series[Any] | CompliantSeries[Any]]])rü  r   rq  rH  r­   zTypeIs[list[_T]])ry  zCollection[Any]r­   zTypeIs[Collection[list[bool]]])rü  r   rq  rH  r­   rç  )rü  r   r­   zTypeIs[NestedLiteral])rL  úbool | Noner  rè  r„  r�  r­   r�  )r†  r•   r‡  r�  r­   z*Callable[[Callable[P, R]], Callable[P, R]])r˜  rÁ  r›  ú
int | Noner­   ztuple[int, int])
rŸ  ré  r   zfloat | Noner¡  rÁ  r¢  r�  r­   rÁ  )r¸  r•   r¹  r•   r­   r•   )rK  úCollection[str]rF  rê  r­   zColumnNotFoundError | None)r³   rê  r­   rï   )rÖ  z$TimeUnit | Iterable[TimeUnit] | Noner×  z7str | timezone | Iterable[str | timezone | None] | Noner­   z%tuple[Set[TimeUnit], Set[str | None]])
r3  rr   rù   rx   rØ  zSet[TimeUnit]rÚ  zSet[str | None]r­   r�  )rJ  r¯   r­   rµ   )rJ  r¯   rä  rå  r­   rµ   )rä  rµ   r­   zEvalNames[Any])rü  r   rî  r•   r­   r�  )rü  z\CompliantDataFrame[CompliantSeriesT, CompliantExprT, NativeDataFrameT, ToNarwhalsT_co] | Anyr­   z^TypeIs[CompliantDataFrame[CompliantSeriesT, CompliantExprT, NativeDataFrameT, ToNarwhalsT_co]])rü  zJCompliantLazyFrame[CompliantExprT, NativeLazyFrameT, ToNarwhalsT_co] | Anyr­   zLTypeIs[CompliantLazyFrame[CompliantExprT, NativeLazyFrameT, ToNarwhalsT_co]])rü  z'CompliantSeries[NativeSeriesT_co] | Anyr­   z)TypeIs[CompliantSeries[NativeSeriesT_co]])rü  r»   r­   z'TypeIs[NamespaceAccessor[_FullContext]])r§  rÞ   r­   zTypeIs[_EagerAllowedImpl])r§  rÞ   r­   zTypeIs[_LazyFrameCollectImpl])r§  rÞ   r­   zTypeIs[_LazyAllowedImpl])rü  r   r­   zTypeIs[SupportsNativeNamespace])rü  r   r­   zTypeIs[ArrowStreamExportable])r  rê  r  rê  r  r•   r­   zdict[str, str])r  rZ   r  rá   r­   úpa.Table)rŽ  r�   r­   r�   )r#  r•   r­   r�  rr  )rK  r•   r>  r•   r)  r•   r­   rJ  )rO  r•   rP  r•   r­   r•   )rv  r†   r³   rµ   r­   z"tuple[int | None, int | None, Any])r|  zCallable[P, R1]r­   z<Callable[[_Constructor[_T, P, R2]], _Constructor[_T, P, R2]])rü  zobject | type[Any]r­   r•   )rü  r   r‰  rÂ  rš  r•   r­   rï   )rî  r•   rž  r•   r­   zattrgetter[Any])rü  r   r¡  r•   rž  r•   r­   r   )rÇ  zpa.Table | pa.RecordBatchReaderr­   rë  )rË  r•   rÌ  ztuple[str, ...]r�  zMapping[str, Any]r­   rï   )rÔ  ry   r­   r}   )r7  zbool | Iterable[bool]rÙ  rÁ  r­   zSequence[bool](1  Ú
__future__r   r±  rÂ  ÚsysÚcollections.abcr   r   r   r   r   r	   r
   Údatetimer   Úenumr   r   Ú	functoolsr   r   r   Úimportlib.utilr   Úinspectr   r   Úoperatorr   Úpathlibr   Úsecretsr   Útypingr   r   r   r   r   r   r   r   r   Únarwhals._enumr    Únarwhals._exceptionsr!   Únarwhals._typing_compatr"   r#   Únarwhals.dependenciesr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   Únarwhals.exceptionsr7   r8   r9   r:   r;   Útypesr<   r=   r>   r+  r¹  r0  rº  r.  rÈ  Útyping_extensionsr?   r@   rA   rB   Únarwhals._compliantrC   rD   rE   Ú!narwhals._compliant.any_namespacerF   Únarwhals._compliant.typingrG   rH   rI   rJ   r  rL   Únarwhals._nativerM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   Únarwhals._translaterY   rZ   r[   Únarwhals._typingr\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   r  ro   rp   rØ  rr   r'  rt   rÒ  ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r‘   r“   r¢   r¯   r·   r¸   rº   r»   r�   r¼   r½   r¾   rÀ   rÉ   rÏ   r×   rÜ   rá   ræ   ré   rÙ   ró   rø   rý   r  r  rÞ   r•  r;  r<  r=  r>  r?  rE  r@  rA  rB  rC  rD  rŸ  rY  rZ  r‹  r¯  r³  r­  r½  r¦  rÏ  rä  rù  rÿ  r	  r  r  r  r  r+  r:  r@  r?  rO  rU  rX  r\  r`  rc  rf  ri  r^  rl  ro  rr  rz  r  r‚  r…  r–  r�  r¤  rÃ  rI  rÐ  rÛ  rß  râ  ræ  rë  Úobjectrì  rï  ró  rö  rb  r_  rn  r   r  r  r  r	  r  r  r  r  r&  r(  r=  rQ  rS  rw  rz  r¶  rœ  r�  rŸ  r¢  r¤  r¦  rª  rÉ  rÎ  ÚplatformrÕ  rÚ  rÜ  rà  rÝ  rÙ  re  r—   rŸ   r    Ú<module>r     sÄ
  ðÞ "ã 	Û 	Û 
÷÷ ñ õ ß ß -Ñ -Ý $ß *Ý Ý Ý ÷
÷ 
õ 
õ &Ý :ß <÷÷ ÷ ÷ ÷ ñ ÷*ó ÷ Ý#Ý ß-ãÛÛßHÓHçVÑVÝC÷ó õ .÷÷ ÷ ó ÷ ZÑY÷÷ ÷ ÷ ÷ ÷( 8Ý%Ý&÷÷ ÷ ÷ ÷ ñ ñ, Ø 	¨#¡°¸3±Ñ ?À&ÈÁ+Ñ Mñ€Nñ �%‹.€CÙ
�%‹.€CÙ
�%‹.€CÙ
�%Ð3Ñ
4€CÙ�#‹€AÙ�‹€AÙ	�‹€BÙ	�‹€Bô˜8ô ôR�xô Rô0˜ô 0ñ
 ˆTƒ]€Ù�\¨TÑ2€
Ù˜°4Ñ8€ØJ€ˆiÓ JÙ˜¨|Ñ<€ØA€ˆÓ AØ<€ˆiÓ <ô�H˜ZÑ(ô ô�x Ñ.ô ô˜Hô ô-�Xô -ô
J˜Hô Jô
Ð+¨^¸Xô ôÐ(Ð*?Àô ô	4Ð2°Hô 	4ô%ˆdô %ñ4 �1Ñóó ðñ �1Ñóó ðñ �1Ñóó ðñ �1Ñóó ðñ �1Ñóó ðôM%�Zô M%ô`5ð ×Ò˜9Ø×Ò˜*Ø×Ò˜Ø×Ò˜EØ×Ò˜FØ×"Ò" FØ×Ò˜:Ø×Ò˜Ø×Ò˜6Ø×Ò˜Ø×Ò˜Zð:€Ð6ó ð ×ÒÐ)Ø×Ò˜.Ø×Ò˜MØ×"Ò"Ð$9ð	@Ð Ð <ó ð Dñ �2Ñó&ó ð&ð óó ðô<QôôSô*%ôLð 
ðØðØ$,ðàóó 
ðð
 
ð Øð Ø-5ð àó ó 
ð ð
 
ð"Øð"Ø$?ð"àó"ó 
ð"ð
 
ð.Øð.Ø-Hð.à(ó.ó 
ð.ð
 
ð(Øð(Ø$Jð(à"ó(ó 
ð(ð
 
ð:Øð:Ø-Sð:à4ó:ó 
ð:ð
 
ðØðØ#3ðàóó 
ðô
ôðYØ	ðYØKðYàôYôxðF ,0ðSð EIñ	SØ	ðSà(ðSð Bð	Sð
 öSôl,ô^8ð	Ø9ð	ØMPð	à	ô	ð&*Ø	ð&*Ø $ð&*Ø0:ð&*àô&*ôRô*?ðF :>ð[Øð[Ø)ð[Ø36ð[àõ[ð :>ð)&Øð)&Ø)ð)&Ø36ð)&àõ)&ðXØðØ#0ðØ@DðàôôCôLô9ðØ	ðàHôðØ	ðà2ôõ	õ"õ>ðØ	ðàYõðØ	ðàGõõJð
>Øð>à#õ>õõ0ðØðàðð ð	ð
 
õð& °ñ&Øð&Ø)-ð&à/ö&ðR$Øð$Ø#-ð$àõ$ð0Ø
ðØ ,ðØ69ðØMQðàõõ@ð<ØðØ.=ðàöö"ð"Ø3ð"àFð"ð +ö"ð*
Øð
Ø ð
Ø.;ð
ØIXð
à	ö
ööMöò “8�	ˆ5Ó öAð:ð

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

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