Ë
    ðmxiÖj  ã                  ó¬  — U d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZ d dlZd dlmZ d dlmZmZmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZ d dl m!Z! erd d	l"m#Z#m$Z$m%Z% d d
l&m'Z' d dl(m)Z* d dl+m,Z, d dl-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@  e
de3¬«      ZAe?ZBdeCd<   e?ZDdeCd<   eeeEgef   ZFdeCd<   eEZGdeCd<   ej�                  ej’                  ej”                  hZKdZL ejš                  eLejœ                  «      ZOdZP ejš                  ePejœ                  «      ZQdZR ejš                  eRejœ                  «      ZSdZT ejš                  eTejœ                  «      ZUe	d   ZVdeCd <   d!d"d#œZWd$d%d&d'd(d)d*d+d,d-d.œ
ZXd/eCd0<   ej�                  j³                  «       ZZ	 d�d2„Z[	 	 	 	 	 	 d‚d4„Z\	 	 	 	 	 	 	 	 dƒd5„Z]	 	 	 	 	 	 	 	 	 	 d„d6„Z^ ej¾                  d7¬8«      d…d9„«       Z`	 	 	 	 	 	 	 	 d†d:„Za	 d‡	 	 	 	 	 	 	 dˆd;„Zb	 	 	 	 d‰d<„Zcd=d>œ	 	 	 	 	 	 	 	 	 dŠd?„Zdej�                  j³                  «       d@k\  rd‹dA„Zend‹dB„ZedŒdC„Zf	 	 	 	 	 	 d�dD„Zg ej¾                  d7¬8«      dŽdE„«       ZhejÒ                  jÔ                  ZjejjÖ                  dFejjØ                  dGiZmdHeCdI<   ejjÜ                  dJdKdLdMœejjÞ                  dNdOdPdMœejjà                  dQdRdSdMœejjâ                  dTdUdVdMœejjä                  dWdXdYdMœejjæ                  dZd[d\dMœejjè                  d]d^d_dMœejjê                  d`dadbdMœejjì                  dcdddedMœejjî                  dfdgdhdMœejjð                  didjd1dMœiZydkeCdl<   ejjô                  fZ{	 	 	 	 	 	 	 	 	 	 d�dm„Z|	 	 	 	 	 	 	 	 d�dn„Z}d‘do„Z~ejþ                  dpfejþ                  dqfe�j                   efejþ                  dpfe�j                   efe�j                   dpfe�j                   efe�j                   efe�j                   efdrœ	Z�dseCdt<   	 	 	 	 	 	 	 	 d’du„Z‚eeedvdwœZƒdxeCdy<   d“dz„Z„	 	 	 	 	 	 	 	 d”d{„Z…d•d|„Z†d–d}„Z‡ G d~„ ded3ef   «      Zˆd—d€„Z‰y)˜é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚCallableÚLiteralÚTypeVarÚcast)ÚEagerSeriesNamespace)ÚMS_PER_SECONDÚNS_PER_MICROSECONDÚNS_PER_MILLISECONDÚNS_PER_SECONDÚSECONDS_PER_DAYÚUS_PER_SECOND)Úissue_warning)ÚImplementationÚVersionÚ_DeferredIterableÚcheck_columns_existÚisinstance_or_issubclassÚrequires)Ú
ShapeError)ÚIterableÚIteratorÚMapping)Ú
ModuleType)ÚDtype©ÚBaseMaskedDtype)Ú	TypeAliasÚTypeIs)ÚIntervalUnit)ÚPandasLikeExpr©ÚPandasLikeSeries)ÚNativeDataFrameTÚNativeNDFrameTÚNativeSeriesT)ÚDType)ÚDTypeBackendÚ	IntoDTypeÚTimeUnitÚ_1DArrayÚExprT)Úboundr    ÚUnitCurrentÚ
UnitTargetÚBinOpBroadcastÚIntoRhsaÉ  ^
    datetime64\[
        (?P<time_unit>s|ms|us|ns)                 # Match time unit: s, ms, us, or ns
        (?:,                                      # Begin non-capturing group for optional timezone
            \s*                                   # Optional whitespace after comma
            (?P<time_zone>                        # Start named group for timezone
                [a-zA-Z\/]+                       # Match timezone name, e.g., UTC, America/New_York
                (?:[+-]\d{2}:\d{2})?              # Optional offset in format +HH:MM or -HH:MM
                |                                 # OR
                pytz\.FixedOffset\(\d+\)          # Match pytz.FixedOffset with integer offset in parentheses
            )                                     # End time_zone group
        )?                                        # End optional timezone group
    \]                                            # Closing bracket for datetime64
$a  ^
    timestamp\[
        (?P<time_unit>s|ms|us|ns)                 # Match time unit: s, ms, us, or ns
        (?:,                                      # Begin non-capturing group for optional timezone
            \s?tz=                                # Match "tz=" prefix
            (?P<time_zone>                        # Start named group for timezone
                [a-zA-Z\/]*                       # Match timezone name (e.g., UTC, America/New_York)
                (?:                               # Begin optional non-capturing group for offset
                    [+-]\d{2}:\d{2}               # Match offset in format +HH:MM or -HH:MM
                )?                                # End optional offset group
            )                                     # End time_zone group
        )?                                        # End optional timezone group
    \]                                            # Closing bracket for timestamp
    \[pyarrow\]                                   # Literal string "[pyarrow]"
$z¿^
    timedelta64\[
        (?P<time_unit>s|ms|us|ns)                 # Match time unit: s, ms, us, or ns
    \]                                            # Closing bracket for timedelta64
$a  ^
    duration\[
        (?P<time_unit>s|ms|us|ns)                 # Match time unit: s, ms, us, or ns
    \]                                            # Closing bracket for duration
    \[pyarrow\]                                   # Literal string "[pyarrow]"
$)ÚyearÚquarterÚmonthÚweekÚdayÚhourÚminuteÚsecondÚmillisecondÚmicrosecondÚ
nanosecondÚNativeIntervalUnitÚDÚmin)ÚdÚmr4   r5   r6   r8   r9   r:   r;   r<   r=   r>   )
ÚyÚqÚmorB   ÚhrC   ÚsÚmsÚusÚnsz)Mapping[IntervalUnit, NativeIntervalUnit]Ú
UNITS_DICTÚboolc                óF   — | t         j                  t         j                  hv S ©N)r   ÚPANDASÚMODIN©Úimplementations    úR/home/htdocs/ttos/venv/lib/python3.12/site-packages/narwhals/_pandas_like/utils.pyÚis_pandas_or_modinrU   �   s   € Øœn×3Ñ3´^×5IÑ5IÐJÐJÐJó    r%   c                óX  — ddl m} | j                  j                  }| j                  r=t        ||«      r1|j                  s%| j                  j                  d   |j                  fS t        ||«      r�|j                  r%| j                  |j                  j                  d   fS |j                  j                  |ur.| j                  t        |j                  ||j                  ¬«      fS | j                  |j                  fS t        |t        «      rd}t        |«      ‚| j                  |fS )z²Validate RHS of binary operation.

    If the comparison isn't supported, return `NotImplemented` so that the
    "right-hand-side" operation (e.g. `__radd__`) can be tried.
    r   r$   rR   z$Expected Series or scalar, got list.)Únarwhals._pandas_like.seriesr%   ÚnativeÚindexÚ
_broadcastÚ
isinstanceÚilocÚ	set_indexÚ_implementationÚlistÚ	TypeError)ÚlhsÚrhsr%   Ú	lhs_indexÚmsgs        rT   Úalign_and_extract_nativerf   ‘   sî   € õ >à—
‘
× Ñ €Ià
‡~‚~œ* SÐ*:Ô;ÀCÇNÂNØ�z‰z�‰˜qÑ! 3§:¡:Ð-Ð-ä�#Ð'Ô(Ø�>Š>Ø—J‘J §
¡
§¡°Ñ 2Ð3Ð3Ø�:‰:×Ñ 9Ñ,à—
‘
Ü˜#Ÿ*™* iÀ×@SÑ@SÔTðð ð —
‘
˜CŸJ™JÐ'Ð'ä�#”tÔØ4ˆÜ˜‹nÐð �:‰:�sˆ?ÐrV   c               óª  — t        ||j                  «       j                  «      r.t        |«      x}t        | «      x}k7  rd|› d|› �}t	        |«      ‚|t
        j                  u r| j                  d¬«      } || _        | S |t
        j                  u r0d|j                  «       cxk  rdk  rn n| j                  |dd¬«      S | j                  |d¬	«      S )
z}Wrapper around pandas' set_axis to set object index.

    We can set `copy` / `inplace` based on implementation/version.
    zExpected object of length z, got length: F)Údeep©é   é   ©é   r   )ÚaxisÚcopy)rn   )r\   Úto_native_namespaceÚIndexÚlenr   r   ÚCUDFro   rZ   rP   Ú_backend_versionÚset_axis)ÚobjrZ   rS   Úexpected_lenÚ
actual_lenre   s         rT   r^   r^   ²   sÏ   € ô �%˜×;Ñ;Ó=×CÑCÔDÜ˜E›
Ð"ˆÜ˜C›Ð
 ˆ*òJ"ð +¨<¨.¸ÀzÀlÐSˆÜ˜‹oÐØœ×,Ñ,Ñ,Ø�h‰h˜EˆhÓ"ˆØˆŒ	Øˆ
Øœ×.Ñ.Ñ.Ø�.×1Ñ1Ó3Ô:°dÕ:à�|‰|˜E¨°ˆ|Ó6Ð6Ø�<‰<˜ Aˆ<Ó&Ð&rV   c               óÀ   — |t         j                  u r*|j                  «       dk\  r | j                  |i |¤ddi¤Ž}n | j                  |i |¤dddœ¤Ž}t	        d|«      S )zXWrapper around pandas' rename so that we can set `copy` based on implementation/version.rl   ÚinplaceF)ro   rz   r'   )r   rP   rt   Úrenamer	   )rv   rS   ÚargsÚkwargsÚresults        rT   r{   r{   É   sg   € ð œ×.Ñ.Ñ.Ø×'Ñ'Ó)¨TÒ1à�—‘˜TÐ; VÑ;°UÒ;‰à�—‘˜TÐG VÐG°%ÀÓGˆÜÐ  &Ó)Ð)rV   é   )Úmaxsizec                óN  — t        | «      }|j                  }|dv r|j                  «       S |dv r|j                  «       S |dv r|j	                  «       S |dv r|j                  «       S |dv r|j                  «       S |dv r|j                  «       S |dv r|j                  «       S |dv r|j                  «       S |d	v r|j                  «       S |d
v r|j                  «       S |dv r|j                  «       S |dv r|j                  «       S |j                  d«      r|j                  «       S |dk(  rt!        | |«      S t"        j%                  |«      x}st&        j%                  |«      x}r4|j)                  d«      }|j)                  d«      }|j+                  ||«      S t,        j%                  |«      x}st.        j%                  |«      x}r"|j)                  d«      }|j1                  |«      S |dk(  r|j3                  «       S |j                  d«      r!|j5                  d«      r|j7                  «       S |j                  d«      r!|j5                  d«      r|j9                  «       S |j                  d«      r!|j5                  d«      r|j;                  «       S |j=                  «       S )N>   úint64[pyarrow]ÚInt64Úint64úInt64[pyarrow]>   úint32[pyarrow]ÚInt32Úint32úInt32[pyarrow]>   úint16[pyarrow]ÚInt16Úint16úInt16[pyarrow]>   úint8[pyarrow]ÚInt8Úint8úInt8[pyarrow]>   úuint64[pyarrow]ÚUInt64Úuint64úUInt64[pyarrow]>   úuint32[pyarrow]ÚUInt32Úuint32úUInt32[pyarrow]>   úuint16[pyarrow]ÚUInt16Úuint16úUInt16[pyarrow]>   úuint8[pyarrow]ÚUInt8Úuint8úUInt8[pyarrow]>   údouble[pyarrow]úfloat64[pyarrow]ÚFloat64Úfloat64úFloat64[pyarrow]>   úfloat[pyarrow]úfloat32[pyarrow]ÚFloat32Úfloat32úFloat32[pyarrow]>   ústring[python]ústring[pyarrow]úlarge_string[pyarrow]ústring[pyarrow_numpy]ÚstrÚstring>   úbool[pyarrow]rM   Úbooleanúboolean[pyarrow]zdictionary<ÚcategoryÚ	time_unitÚ	time_zonezdate32[day][pyarrow]Údecimalz	[pyarrow]ÚtimeÚbinary)r°   Údtypesrƒ   r‡   r‹   r�   r“   r—   r›   rŸ   r¤   r©   ÚStringÚBooleanÚ
startswithÚCategoricalÚ$native_categorical_to_narwhals_dtypeÚPATTERN_PD_DATETIMEÚmatchÚPATTERN_PA_DATETIMEÚgroupÚDatetimeÚPATTERN_PD_DURATIONÚPATTERN_PA_DURATIONÚDurationÚDateÚendswithÚDecimalÚTimeÚBinaryÚUnknown)Únative_dtypeÚversionÚdtyper»   Úmatch_Údt_time_unitÚdt_time_zoneÚdu_time_units           rT   Ú#non_object_native_to_narwhals_dtyperÖ   Ö   sŒ  € ä�Ó€Eà�^‰^€FØÐFÑFØ�|‰|‹~ÐØÐFÑFØ�|‰|‹~ÐØÐFÑFØ�|‰|‹~ÐØÐBÑBØ�{‰{‹}ÐØÐJÑJØ�}‰}‹ÐØÐJÑJØ�}‰}‹ÐØÐJÑJØ�}‰}‹ÐØÐFÑFØ�|‰|‹~ÐØð ñ ð �~‰~ÓÐØð ñ ð �~‰~ÓÐØð ñ ð �}‰}‹ÐØÐHÑHØ�~‰~ÓÐØ×Ñ˜Ô&Ø×!Ñ!Ó#Ð#Ø�
ÒÜ3°LÀ'ÓJÐJÜ%×+Ñ+¨EÓ2Ð2ˆÐ2Ü%×+Ñ+¨EÓ2Ð2ˆÐ2à!'§¡¨kÓ!:ˆØ#)§<¡<°Ó#<ˆØ�‰˜|¨\Ó:Ð:Ü%×+Ñ+¨EÓ2Ð2ˆÐ2Ü%×+Ñ+¨EÓ2Ð2ˆÐ2à!'§¡¨kÓ!:ˆØ�‰˜|Ó,Ð,ØÐ&Ò&Ø�{‰{‹}ÐØ×Ñ˜	Ô" u§~¡~°kÔ'BØ�~‰~ÓÐØ×Ñ˜Ô E§N¡N°;Ô$?Ø�{‰{‹}ÐØ×Ñ˜Ô! e§n¡n°[Ô&AØ�}‰}‹ÐØ�>‰>ÓÐrV   c                ó¢  — |j                   }|t        j                  u r|j                  «       S t        j
                  j                  j                  }| €dn || j                  d«      d¬«      }|dk(  r|j                  «       S |dk(  r"|t        j                  ur|j                  «       S |dk(  r|j                  «       S |j                  «       S )NÚemptyéd   T)Úskipnar±   )r»   r   rs   r¼   ÚpdÚapiÚtypesÚinfer_dtypeÚheadr   ÚV1ÚObject)ÚseriesrÐ   rS   r»   ÚinferÚinferred_dtypes         rT   Úobject_native_to_narwhals_dtyperå   !  s«   € ð �^‰^€FØœ×,Ñ,Ñ,ð �}‰}‹Ðä�F‰F�L‰L×$Ñ$€Eà & ‘W±E¸&¿+¹+ÀcÓ:JÐSWÔ4X€NØ˜Ò!Ø�}‰}‹ÐØ˜Ò  W´G·J±JÑ%>à�}‰}‹ÐØ˜Ò à�}‰}‹ÐØ�=‰=‹?ÐrV   c                ó0  — |j                   }|t        j                  u r|j                  «       S | j                  rM|t
        j                  u rt        | «      n| j                  j                  }|j                  t        |«      «      S |j                  «       S rO   )r»   r   rà   r¿   Úorderedr   rs   Ú_cudf_categorical_to_listÚ
categoriesÚto_listÚEnumr   )rÏ   rÐ   rS   r»   Ú	into_iters        rT   rÀ   rÀ   8  s…   € ð
 �^‰^€FØ”'—*‘*ÑØ×!Ñ!Ó#Ð#Ø×Òð ¤×!4Ñ!4Ñ4ô & lÔ3à×(Ñ(×0Ñ0ð 	ð
 �{‰{Ô,¨YÓ7Ó8Ð8Ø×ÑÓÐrV   c                ó   ‡ — dˆ fd„}|S )Nc                 óT   •— ‰ j                   j                  «       j                  «       S rO   )ré   Úto_arrowÚ	to_pylist)rÏ   s   €rT   Úfnz%_cudf_categorical_to_list.<locals>.fnN  s!   ø€ Ø×&Ñ&×/Ñ/Ó1×;Ñ;Ó=Ð=rV   )Úreturnz	list[Any]© )rÏ   rñ   s   ` rT   rè   rè   J  s   ø€ õ>ð €IrV   F)Úallow_objectc               óÄ  — t        | «      }|j                  d«      r<ddlm} t	        | d«      r || j                  «       |«      S  || j                  |«      S |dk(  r+|j                  «       rt        | |t        j                  «      S |dk7  rt        | |«      S |t        j                  u r|j                  j                  «       S |rt        d ||«      S d}t!        |«      ‚)N)Ú
large_listr`   ÚstructÚfixed_size_listr   )Únative_to_narwhals_dtyperï   rµ   Úobjectz;Unreachable code, object dtype should be handled separately)r°   r¾   Únarwhals._arrow.utilsrù   Úhasattrrï   Úpyarrow_dtypeÚis_cudfrÀ   r   rs   rÖ   ÚDASKr»   r¼   rå   ÚAssertionError)rÏ   rÐ   rS   rô   Ú	str_dtypeÚarrow_native_to_narwhals_dtypere   s          rT   rù   rù   T  sç   € ô �LÓ!€Ià×ÑÐOÔPõ	
ô �< Ô,á1°,×2GÑ2GÓ2IÈ7ÓSÐSÙ-¨l×.HÑ.HÈ'ÓRÐRØ�JÒ >×#9Ñ#9Ô#;ô 4Ø˜'¤>×#6Ñ#6ó
ð 	
ð �HÒÜ2°<ÀÓIÐIØœ×,Ñ,Ñ,ð �~‰~×$Ñ$Ó&Ð&ÙÜ.¨t°W¸nÓMÐMàEð ô ˜Ó
ÐrV   )rj   é   c                ó”   — t        «       }t        | t        j                  j                  j
                  «      xr t        | d|«      du S )z/Return `True` if `dtype` is `"numpy_nullable"`.ÚbaseN)rú   r\   rÛ   rÜ   Ú
extensionsÚExtensionDtypeÚgetattr)rÑ   Úsentinels     rT   Úis_dtype_numpy_nullabler
  |  s@   € ô “8ˆä�uœbŸf™f×/Ñ/×>Ñ>Ó?ò 9Ü˜˜v xÓ0°DÐ8ð	
rV   c                ó„   — t        | t        j                  j                  j                  «      rddlm} t        | |«      S y)Nr   r   F)r\   rÛ   rÜ   r  r  Úpandas.core.arrays.maskedr   )rÑ   ÚOldBaseMaskedDtypes     rT   r
  r
  ‡  s6   € ô �eœRŸV™V×.Ñ.×=Ñ=Ô>õô ˜eÐ%7Ó8Ð8ØrV   c                ó^   — |t         j                  u ryt        | «      ryt        | «      rdS dS )zjGet dtype backend for pandas type.

    Matches pandas' `dtype_backend` argument in `convert_dtypes`.
    NÚpyarrowÚnumpy_nullable)r   rs   Úis_dtype_pyarrowr
  )rÑ   rS   s     rT   Úget_dtype_backendr  –  s3   € ð
 œ×,Ñ,Ñ,ØÜ˜ÔØÜ6°uÔ=ÐÐGÀ4ÐGrV   c                ó   ‡— ˆfd„| D «       S )ziYield a `DTypeBackend` per-dtype.

    Matches pandas' `dtype_backend` argument in `convert_dtypes`.
    c              3  ó6   •K  — | ]  }t        |‰«      –— Œ y ­wrO   )r  )Ú.0rÑ   rS   s     €rT   ú	<genexpr>z&iter_dtype_backends.<locals>.<genexpr>ª  s   øè ø€ ÒI¸Ô˜e ^×4ÑIùs   ƒró   )r»   rS   s    `rT   Úiter_dtype_backendsr  £  s   ø€ ó JÀ&ÔIÐIrV   c                óZ   — t        t        d«      xr t        | t        j                  «      S )NÚ
ArrowDtype)rü   rÛ   r\   r  ©rÑ   s    rT   r  r  ­  s   € ä”2�|Ó$ÒI¬°E¼2¿=¹=Ó)IÐIrV   rµ   rú   zMapping[type[DType], str]ÚNW_TO_PD_DTYPES_INVARIANTr¦   r¤   r¥   )r  r  Nr«   r©   rª   r…   rƒ   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<Mapping[type[DType], Mapping[DTypeBackend, str | type[Any]]]ÚNW_TO_PD_DTYPES_BACKENDc                ób  — |dvrd|› d�}t        |«      ‚|j                  }| j                  «       }t        j	                  |«      x}r|S t
        j	                  |«      x}r||   S t        ||j                  «      r8|dk(  r'dd l}	t        j                  |	j                  «       «      S |dk(  ryt        S t        | |j                  «      rÎt        |«      rxt         dk  rot#        | |j                  «      rV| j$                  d	k7  rGt'        j(                  t         «      }
d
|
›d�}d}d| j$                  ›d|› d|› d�}t+        |t,        «       d	}n| j$                  }|dk(  r| j.                  x}rd|› �nd}d|› |› d�S | j.                  x}rd|› �nd}d|› |› d�S t        | |j0                  «      r4t        |«      rt         dk  rd	}n| j$                  }|dk(  rd|› d�S d|› d�S t        | |j2                  «      r	 dd l}	yt        | |j6                  «      ro|t8        j:                  u rd}t=        |«      ‚t#        | |j6                  «      r-|j?                  «       }|jA                  | jB                  d¬«      S d}t        |«      ‚t        ||jD                  |jF                  |jH                  |jJ                  |jL                  f«      rtO        | ||«      S t        |tP        «      rd |jR                  › d!|› d�}t=        |«      ‚d"| › �}tU        |«      ‚# t4        $ r}d}t5        |«      |‚d }~ww xY w)#N>   Nr  r  z;Expected one of {None, 'pyarrow', 'numpy_nullable'}, got: 'ú'r  r   r  r±   )r  rK   z*available in 'pandas>=2.0', found version ú.z…https://pandas.pydata.org/docs/dev/whatsnew/v2.0.0.html#construction-with-datetime64-or-timedelta64-dtype-with-unsupported-resolutionz`nw.Datetime(time_unit=z)` is only zŠ
Narwhals has fallen back to using `time_unit='ns'` to avoid an error.

Hint: to avoid this warning, consider either:
- Upgrading pandas: zA
- Using a bare `nw.Datetime`, if this precision is not importantz, tz=Ú z
timestamp[z
][pyarrow]z, zdatetime64[ú]z	duration[ztimedelta64[z/'pyarrow>=13.0.0' is required for `Date` dtype.zdate32[pyarrow]z9Converting to Enum is not supported in narwhals.stable.v1T)rç   z9Can not cast / initialize Enum without categories presentúConverting to z dtype is not supported for zUnknown dtype: )+Ú
ValueErrorr»   Ú	base_typer  Úgetr  Ú
issubclassr¼   r  rÛ   r  r±   r°   r   rÅ   rU   ÚPANDAS_VERSIONr\   r¶   r   Ú_unparse_versionr   ÚUserWarningr·   rÈ   rÉ   ÚModuleNotFoundErrorrë   r   rà   ÚNotImplementedErrorrp   ÚCategoricalDtyperé   ÚStructÚArrayÚListrÌ   rÍ   Únarwhals_to_native_arrow_dtypeÚUNSUPPORTED_DTYPESÚ__name__r   )rÑ   Údtype_backendrS   rÐ   re   r»   r$  Úpd_typeÚinto_pd_typeÚpaÚfoundÚ	availableÚchangelog_urlrÓ   ÚtzÚtz_partrÕ   ÚexcrK   s                      rT   Únarwhals_to_native_dtyper=  â  sh  € ð Ð?Ñ?ØMÈmÈ_Ð\]Ð^ˆÜ˜‹oÐØ�^‰^€FØ—‘Ó!€IÜ+×/Ñ/°	Ó:Ð:€wÐ:ØˆÜ.×2Ñ2°9Ó=Ð=€|Ð=Ø˜MÑ*Ð*Ü�)˜VŸ]™]Ô+Ø˜IÒ%Û ô —=‘= §¡£Ó-Ð-ØÐ,Ò,ØÜˆ
Ü  v§¡Ô7Ü˜nÔ-´.ð D
ò 3
ô ˜% §¡Ô1°e·o±oÈÒ6MÜ ×1Ñ1´.ÓA�ØHÈÈ	ÐQRÐS�	ð !h�à-¨e¯o©oÐ-@ÀÈIÈ;ð W+ð ,9¨/ð :WðXð ô ˜c¤;Ô/Ø‰Là Ÿ?™?ˆLà˜IÒ%Ø-2¯_©_Ð'< rÐ'<˜˜b˜T‘lÀ2ˆGØ ˜~¨g¨Y°jÐAÐAØ&+§o¡oÐ 5 Ð 5�B�r�d‘)¸BˆØ˜\˜N¨7¨)°1Ð5Ð5Ü  v§¡Ô7Ü˜nÔ-´.ð D
ò 3
ð  ‰Là Ÿ?™?ˆLð  	Ò)ð ˜�~ ZÐ0ð	
ð   ˜~¨QÐ/ð	
ô
    v§{¡{Ô3ð	4Û ð
 !Ü  v§{¡{Ô3Ø”g—j‘jÑ ØMˆCÜ% cÓ*Ð*Ü�e˜VŸ[™[Ô)Ø×3Ñ3Ó5ˆBØ×&Ñ& u×'7Ñ'7ÀÐ&ÓFÐFØIˆÜ˜‹oÐÜØ�F—M‘M 6§<¡<°·±¸f¿k¹kÈ6Ï=É=ÐYôô .¨e°^ÀWÓMÐMÜ�)Ô/Ô0Ø˜y×1Ñ1Ð2Ð2NÈ~ÐN^Ð^_Ð`ˆÜ! #Ó&Ð&Ø˜E˜7Ð
#€CÜ
˜Ó
Ðøô- #ò 	4àCˆCÜ% cÓ*°Ð3ûð	4ús   Ç:L Ì	L.ÌL)Ì)L.c                ó  — t        |«      r0t        dk\  r'	 dd l}ddlm} t        j                   || |«      «      S d| › d|› d|› d	�}t        |«      ‚# t        $ r#}d| › d|j                  › �}t        |«      |‚d }~ww xY w)
N)r  r  r   zUnable to convert to z  to to the following exception: )r=  r"  z+ dtype is not supported for implementation z and version r  )
rU   r'  r  ÚImportErrorre   rû   r=  rÛ   r  r+  )rÑ   rS   rÐ   r6  r<  re   Ú_to_arrow_dtypes          rT   r0  r0  E  s    € ô ˜.Ô)¬nÀÒ.Fð	,Û õ 	Vä�}‰}™_¨U°GÓ<Ó=Ð=à
˜˜ÐJØÐ
˜-¨ y°ð	3ð ô ˜cÓ
"Ð"øô ò 	,Ø)¨%¨Ð0PÐQT×QXÑQXÐPYÐZˆCÜ˜cÓ"¨Ð+ûð	,ús   –A Á	A?ÁA:Á:A?c                ól   — dt        | «      v ryt        | «      j                  «       t        | «      k7  ryy)Nr  r…   rƒ   r„   )r°   Úlowerr  s    rT   Úint_dtype_mapperrC  X  s0   € Ø”C˜“JÑØÜ
ˆ5ƒz×ÑÓœS ›ZÒ'ØØrV   iè  i@B )	)rK   rJ   )rK   rI   )rJ   rK   )rJ   rI   )rI   rK   )rI   rJ   )rH   rK   )rH   rJ   )rH   rI   zGMapping[tuple[UnitCurrent, UnitTarget], tuple[BinOpBroadcast, IntoRhs]]Ú_TIMESTAMP_DATETIME_OP_FACTORc                ó€   — ||k(  r| S t         j                  ||f«      x}r|\  }} || |«      S d|› d�}t        |«      ‚)Nzunexpected time unit zD, please report an issue at https://github.com/narwhals-dev/narwhals)rD  r%  r   )rH   Úcurrentr¶   Úitemrñ   Úfactorre   s          rT   Úcalculate_timestamp_datetimerI  o  sd   € ð �)ÒØˆÜ,×0Ñ0°'¸9Ð1EÓFÐF€tÐFØ‰
ˆˆFÙ�!�V‹}Ðà
 ˜yð )3ð 	3ð ô ˜Ó
ÐrV   rj   )rK   rJ   rI   rH   zMapping[TimeUnit, int]Ú_TIMESTAMP_DATE_FACTORc                ó(   — | t         z  t        |   z  S rO   )r   rJ  )rH   r¶   s     rT   Úcalculate_timestamp_daterL  †  s   € ØŒÑÔ!7¸	Ñ!BÑBÐBrV   c                ó  — t        |«      | j                  d   k(  r| j                  |k(  j                  «       r| S | j                  j                  j
                  dk(  s%|t        j                  u rO|j                  «       dk  r<t        || j                  j                  «       ¬«      x}r|‚| j                  dd…|f   S 	 | |   S # t        $ r0}t        || j                  j                  «       ¬«      x}r||‚‚ d}~ww xY w)zsSelect columns by name.

    Prefer this over `df.loc[:, column_names]` as it's
    generally more performant.
    rj   Úbri   )r8  N)rr   ÚshapeÚcolumnsÚallrÑ   Úkindr   rP   rt   r   ÚtolistÚlocÚKeyError)ÚdfÚcolumn_namesrS   ÚerrorÚes        rT   Úselect_columns_by_namerZ  Š  sì   € ô ˆ<Ó˜BŸH™H Q™KÒ'¨R¯Z©Z¸<Ñ-G×,LÑ,LÔ,NØˆ	Ø
�
‰
×Ñ×Ñ Ò$Øœ.×/Ñ/Ñ/Ø×+Ñ+Ó-°Ò6ô (¨ÀÇ
Á
×@QÑ@QÓ@SÔTÐTˆ5ÐTØˆKØ�v‰v’a˜�oÑ&Ð&ðØ�,ÑÐøÜò Ü'¨ÀÇ
Á
×@QÑ@QÓ@SÔTÐTˆ5ÐTØ˜QÐØûðús   Ã C Ã	C>Ã+C9Ã9C>c                ó®   — | j                   t        j                  t        j                  t        j                  hv xr | j
                  j                  dk(  S )NrM   )r_   r   rP   rQ   rÿ   rY   rÑ   )rH   s    rT   Úis_non_nullable_booleanr\  §  sI   € ð 	
×ÑÜ×!Ñ!¤>×#7Ñ#7¼×9LÑ9LÐMð	Nò 	%à�H‰H�N‰N˜fÑ$ðrV   c               ó¢   — | t         j                  t         j                  hv rddl}|S | t         j                  u rddl}|S d| › �}t        |«      ‚)zCReturns numpy or cupy module depending on the given implementation.r   Nz!Expected pandas/modin/cudf, got: )r   rP   rQ   Únumpyrs   Úcupyr   )rS   ÚnpÚcpre   s       rT   Úimport_array_modulerb  °  sQ   € àœ.×/Ñ/´×1EÑ1EÐFÑFÛàˆ	Øœ×,Ñ,Ñ,Ûàˆ	Ø-¨nÐ-=Ð
>€CÜ
˜Ó
ÐrV   c                  ó   — e Zd Zy)ÚPandasLikeSeriesNamespaceN)r2  Ú
__module__Ú__qualname__ró   rV   rT   rd  rd  ¾  s   … rV   rd  c                ó   — dd| ddœS )NFT)ÚsortÚas_indexÚdropnaÚobservedró   )Údrop_null_keyss    rT   Úmake_group_by_kwargsrm  Á  s   € Ø t°~ÐSWÑXÐXrV   )rS   r   rò   rM   )rb   r%   rc   zPandasLikeSeries | objectrò   z.tuple[pd.Series[Any], pd.Series[Any] | object])rv   r'   rZ   r   rS   r   rò   r'   )
rv   r'   r|   r   rS   r   r}   r   rò   r'   )rÏ   r   rÐ   r   rò   r)   )râ   zPandasLikeSeries | NonerÐ   r   rS   r   rò   r)   rO   )rÏ   zpd.CategoricalDtyperÐ   r   rS   z#Literal[Implementation.CUDF] | Nonerò   r)   )rÏ   r   rò   zCallable[[], list[Any]])
rÏ   r   rÐ   r   rS   r   rô   rM   rò   r)   )rÑ   r   rò   zTypeIs[BaseMaskedDtype])rÑ   r   rS   r   rò   r*   )r»   zIterable[Any]rS   r   rò   zIterator[DTypeBackend])rÑ   r   rò   zTypeIs[pd.ArrowDtype])
rÑ   r+   r3  r*   rS   r   rÐ   r   rò   zstr | PandasDtype)rÑ   r+   rS   r   rÐ   r   rò   zpd.ArrowDtype)rÑ   r   rò   r°   )rH   r(   rF  r,   r¶   r,   rò   r(   )rH   r(   r¶   r,   rò   r(   )rV  r&   rW  zlist[str] | _1DArrayrS   r   rò   zNativeDataFrameT | Any)rH   r%   rò   rM   )rS   r   rò   r   )rl  rM   rò   zdict[str, bool])ŠÚ
__future__r   Ú	functoolsÚoperatorÚreÚtypingr   r   r   r   r   r	   ÚpandasrÛ   Únarwhals._compliantr
   Únarwhals._constantsr   r   r   r   r   r   Únarwhals._exceptionsr   Únarwhals._utilsr   r   r   r   r   r   Únarwhals.exceptionsr   Úcollections.abcr   r   r   rÝ   r   Úpandas._typingr   ÚPandasDtypeÚpandas.core.dtypes.dtypesr   Útyping_extensionsr    r!   Únarwhals._durationr"   Únarwhals._pandas_like.exprr#   rX   r%   Únarwhals._pandas_like.typingr&   r'   r(   Únarwhals.dtypesr)   Únarwhals.typingr*   r+   r,   r-   r.   r0   Ú__annotations__r1   Úintr2   r3   rP   rs   rQ   ÚPANDAS_LIKE_IMPLEMENTATIONÚPD_DATETIME_RGXÚcompileÚVERBOSErÁ   ÚPA_DATETIME_RGXrÃ   ÚPD_DURATION_RGXrÆ   ÚPA_DURATION_RGXrÇ   r?   Ú
ALIAS_DICTrL   rt   r'  rU   rf   r^   r{   Ú	lru_cacherÖ   rå   rÀ   rè   rù   r
  r  r  r  ÚMAINr»   r¿   rá   r  r¤   r©   rƒ   r‡   r‹   r�   r“   r—   r›   rŸ   r½   r  rË   r1  r=  r0  rC  ÚfloordivÚmulrD  rI  rJ  rL  rZ  r\  rb  rd  rm  ró   rV   rT   ú<module>r‘     s(  ðÞ "ã Û Û 	ß G× Gã å 4÷÷ õ /÷÷ õ +áß;Ñ;Ý å3Ý9ß3å/Ý9Ý=÷ñ õ
 &ßKÓKá�G >Ô2€EØ%€K�Ó%Ø$€J�	Ó$Ø (¨#¨s¨°S¨Ñ 9€N�IÓ9Ø€GˆYÓð ×ÑØ×ÑØ×ÑðÐ ð
€ð !�b—j‘j °"·*±*Ó=Ð ð€ð !�b—j‘j °"·*±*Ó=Ð ð€ð !�b—j‘j °"·*±*Ó=Ð ð€ð !�b—j‘j °"·*±*Ó=Ð à 'ð
ñ!Ð �Ió ð ˜UÑ#€
à	Ø	Ø
Ø	Ø	Ø	Ø	Ø
Ø
Ø
ñ9€
Ð5ó ð  ×&Ñ&×7Ñ7Ó9€ðóKðØ	ðØ 9ðà3óðB'Ø	ð'Ø #ð'Ø8Fð'àó'ð.
*Ø	ð
*Ø #ð
*Ø5Cð
*ØORð
*àó
*ð €×Ñ˜RÔ òGó !ðGðTØ#ðØ.5ðØGUðà
óð4 ;?ð Ø%ð àð ð 8ð ð ó	 ð$Øðàóð ñ#Øð#àð#ð #ð#ð
 ð#ð ó#ðL ×Ñ×)Ñ)Ó+¨vÒ5ô
óó	HðJØðJØ+9ðJàóJð €×Ñ˜RÔ òJó !ðJð 
�‰×	Ñ	€ð
 ×Ñ˜
Ø
‡M�M�8ð8Ð Ð4ó ð ‡N�NØ%Ø#Øñð
 ‡N�NØ%Ø#Øñð
 ‡L�LÐ.À'ÐQXÑYØ
‡L�LÐ.À'ÐQXÑYØ
‡L�LÐ.À'ÐQXÑYØ
‡K�K˜_ÀÈfÑUØ
‡M�MØ$Ø"Øñð
 ‡M�MØ$Ø"Øñð
 ‡M�MØ$Ø"Øñð
 ‡L�LÐ.À'ÐQXÑYØ
‡N�NØ%Ø#Øñð?$YÐ ÐUó $ðJ —n‘nÐ&Ð ð`Øð`àð`ð #ð`ð ð	`ð
 ó`ðF#Øð#Ø&4ð#Ø?Fð#àó#ó&ð ×$Ñ$ eÐ,Ø×$Ñ$ iÐ0Ø—<’<Ð!3Ð4Ø×$Ñ$ eÐ,Ø—<’<Ð!3Ð4Ø—<’< Ð'Ø—,’, Ð.Ø—,’, Ð.Ø—,’, Ð.ñ
ð ð  ó ðØðØ'ðØ4<ðàóð  Ø
Ø
Ø	
ñ	2Ð Ð.ó óCðØðà&ðð #ðð ó	ó:óô TÐ 4Ð5GÈÐ5LÑ MÔ SôYrV   