§
    cŠtjJk  ã                  ó–  — 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
 d dl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 m!Z! d dl"m#Z# er�d d	l$m%Z%m&Z&m'Z'm(Z( d d
l)m*Z* d dlm+Z+ d dl,Z-d dl.m/Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z<m=Z=m>Z> d dl?m@Z@ d dlAmBZBmCZCmDZDmEZE  e	de8¬¦  «        ZFeDZGdeHd<   eDZIdeHd<   e%eeJgef         ZKdeHd<   eJZLdeHd<   ejM        ejN        ejO        hZPdZQ ejR        eQejS        ¦  «        ZTdZU ejR        eUejS        ¦  «        ZVed         ZWdeHd<   d d!d"œZXd#d$d%d&d'd(d)d*d+d,d-œ
ZYd.eHd/<   ejM         Z                    ¦   «         Z[	  e e¦  «        Z\	 d¼d4„Z]d½d:„Z^d¾d?„Z_d¿dB„Z` eja        dC¬D¦  «        dÀdF„¦   «         Zb eja        dC¬D¦  «        dÁdJ„¦   «         ZcdÂdM„ZddÃdO„ZedÄdQ„ZfdRZgdSdTœdÅdV„ZhdÆdY„ZidÇd[„ZjdÈd_„Zk eja        dC¬D¦  «        dÉda„¦   «         Zlejm        jn        Znenjo        dbenjp        dciZqddeHde<   enjr        dfdgdhdiœenjs        djdkdldiœenjt        dmdndndiœenju        dodpdqdiœenjv        drdsdtdiœenjw        dudvdwdiœenjx        dxdydzdiœenjy        d{d|d}diœenjz        d~dd€diœenj{        d�d‚dƒdiœenj|        d„d…d†diœenj}        d‡dˆd3diœiZ~d‰eHdŠ<   dÊdŽ„ZdËd�„Z€dÌd’„Z�ej‚        d“fej‚        d”fejƒ        efej‚        d“fejƒ        efejƒ        d“fejƒ        efejƒ        efejƒ        efd•œ	Z„d–eHd—<   dÍd�„Z…eeedždŸœZ†d eHd¡<   dÎd¢„Z‡dÏd¨„ZˆdÐd©„Z‰dÑd«„ZŠ G d¬„ d­ed6ef         ¦  «        Z‹dÒd°„ZŒdÓd¶„Z�dÔd»„ZŽdS )Õé    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚ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Úparse_versionÚrequires)Ú
ShapeError)ÚCallableÚIterableÚIteratorÚMapping)Ú
ModuleType)Ú	TypeAlias)ÚDtype)ÚBaseMaskedDtype)Ú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
$z¿^
    timedelta64\[
        (?P<time_unit>s|ms|us|ns)                 # Match time unit: s, ms, us, or ns
    \]                                            # Closing bracket for timedelta64
$)Ú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Úimplementationr   ÚreturnÚboolc                ó6   — | t           j        t           j        hv S ©N)r   ÚPANDASÚMODIN©rM   s    úY/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/narwhals/_pandas_like/utils.pyÚis_pandas_or_modinrV   €   s   € Ø�nÔ3µ^Ô5IÐJÐJÐJó    Úlhsr%   ÚrhsúPandasLikeSeries | objectú.tuple[pd.Series[Any], pd.Series[Any] | object]c                óÐ  — ddl m} | j        j        }| j        r0t          ||¦  «        r |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$   rT   z$Expected Series or scalar, got list.)Únarwhals._pandas_like.seriesr%   ÚnativeÚindexÚ
_broadcastÚ
isinstanceÚilocÚ	set_indexÚ_implementationÚlistÚ	TypeError)rX   rY   r%   Ú	lhs_indexÚmsgs        rU   Úalign_and_extract_nativeri   „   s  € ð >Ð=Ð=Ð=Ð=Ð=à”
Ô €Ià
„~ð .�* SÐ*:Ñ;Ô;ð .ÀCÄNð .ØŒzŒ˜qÔ! 3¤:Ð-Ð-å�#Ð'Ñ(Ô(ð (ØŒ>ð 	4Ø”J ¤
¤°Ô 2Ð3Ð3ØŒ:Ô 9Ð,Ð,à”
Ý˜#œ* iÀÔ@SÐTÑTÔTðð ð ”
˜CœJÐ'Ð'å�#•tÑÔð Ø4ˆÝ˜‰nŒnÐð Œ:�sˆ?ÐrW   Úobjr'   r_   r   c               óÞ  — t          ||                     ¦   «         j        ¦  «        r;t          |¦  «        x}t          | ¦  «        x}k    rd|› d|› �}t	          |¦  «        ‚|t
          j        u r|                      d¬¦  «        } || _        | S |t
          j	        u r:d| 
                    ¦   «         cxk    rdk     rn n|                      |dd¬¦  «        S |                      |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)rr   )ra   Úto_native_namespaceÚIndexÚlenr   r   ÚCUDFrs   r_   rR   Ú_backend_versionÚset_axis)rj   r_   rM   Úexpected_lenÚ
actual_lenrh   s         rU   rc   rc   ¥   s  € õ �%˜×;Ò;Ñ=Ô=ÔCÑDÔDð Ý˜E™
œ
Ð"ˆÝ˜C™œÐ
 ˆ*òJ"ð J"ð T¨<ÐSÐSÀzÐSÐSˆÝ˜‰oŒoÐØ�Ô,Ð,Ð,Ø�hŠh˜EˆhÑ"Ô"ˆØˆŒ	Øˆ
Ø�Ô.Ð.Ð.Ø�.×1Ò1Ñ3Ô3Ð:Ð:Ò:Ð:°dÒ:Ð:Ð:Ð:Ð:à�|Š|˜E¨°ˆ|Ñ6Ô6Ð6Ø�<Š<˜ Aˆ<Ñ&Ô&Ð&rW   ÚargsÚkwargsc               ó®   — |t           j        u r+|                     ¦   «         dk     r | j        |i |¤dddœ¤Ž}n | j        |i |¤Ž}t	          d|¦  «        S )zXWrapper around pandas' rename so that we can set `copy` based on implementation/version.rp   F)rs   Úinplacer'   )r   rR   rx   Úrenamer   )rj   rM   r|   r}   Úresults        rU   r€   r€   ¼   su   € ð �Ô.Ð.Ð.Ø×'Ò'Ñ)Ô)¨DÒ0Ð0à�”˜TÐG VÐG°%ÀÐGÐGÐGÐGˆˆà�”˜TÐ, VÐ,Ð,ˆÝÐ  &Ñ)Ô)Ð)rW   é   )ÚmaxsizeÚnative_dtypec                óX   — t          | t          j        ¦  «        pt          | ¦  «        dv S )zR*There is no problem which can't be solved by adding an extra string type* pandas.>   ústring[python]ústring[pyarrow_numpy]ú<StringDtype(na_value=nan)>ÚstrÚstring)ra   ÚpdÚStringDtyper‰   ©r„   s    rU   Úis_dtype_non_pyarrow_stringrŽ   É   s2   € õ
 �l¥B¤NÑ3Ô3ð µs¸<Ñ7HÔ7Hð Mð 8ð rW   Úversionr   r)   c                ó$  — t          | ¦  «        }|j        }|dv r|                     ¦   «         S |dv r|                     ¦   «         S |dv r|                     ¦   «         S |dv r|                     ¦   «         S |dv r|                     ¦   «         S |dv r|                     ¦   «         S |dv r|                     ¦   «         S |dv r| 	                    ¦   «         S |d	v r| 
                    ¦   «         S |d
v r|                     ¦   «         S |dk    r|                     ¦   «         S t          | ¦  «        r|                     ¦   «         S |dv r|                     ¦   «         S t                                |¦  «        x}r@|                     d¦  «        }|                     d¦  «        }|                     ||¦  «        S t(                               |¦  «        x}r*|                     d¦  «        }|                     |¦  «        S |                     ¦   «         S )N>   ÚInt64Úint64>   ÚInt32Úint32>   ÚInt16Úint16>   ÚInt8Úint8>   ÚUInt64Úuint64>   ÚUInt32Úuint32>   ÚUInt16Úuint16>   ÚUInt8Úuint8>   ÚFloat64Úfloat64>   ÚFloat32Úfloat32Úfloat16>   rO   ÚbooleanÚ	time_unitÚ	time_zone)r‰   Údtypesr‘   r“   r•   r—   r™   r›   r�   rŸ   r¡   r£   ÚFloat16rŽ   ÚStringÚBooleanÚPATTERN_PD_DATETIMEÚmatchÚgroupÚDatetimeÚPATTERN_PD_DURATIONÚDurationÚUnknown)r„   r�   Údtyper©   Úmatch_Údt_time_unitÚdt_time_zoneÚdu_time_units           rU   Ú#non_object_native_to_narwhals_dtyper¹   ×   s  € å�ÑÔ€EàŒ^€FØÐ"Ð"Ð"Ø�|Š|‰~Œ~ÐØÐ"Ð"Ð"Ø�|Š|‰~Œ~ÐØÐ"Ð"Ð"Ø�|Š|‰~Œ~ÐØÐ Ð Ð Ø�{Š{‰}Œ}ÐØÐ$Ð$Ð$Ø�}Š}‰ŒÐØÐ$Ð$Ð$Ø�}Š}‰ŒÐØÐ$Ð$Ð$Ø�}Š}‰ŒÐØÐ"Ð"Ð"Ø�|Š|‰~Œ~ÐØÐ&Ð&Ð&Ø�~Š~ÑÔÐØÐ&Ð&Ð&Ø�~Š~ÑÔÐØ�	ÒÐØ�~Š~ÑÔÐÝ" <Ñ0Ô0ð Ø�}Š}‰ŒÐØÐ#Ð#Ð#Ø�~Š~ÑÔÐÝ$×*Ò*¨5Ñ1Ô1Ð1€vð ;Ø!'§¢¨kÑ!:Ô!:ˆØ#)§<¢<°Ñ#<Ô#<ˆØ�Š˜|¨\Ñ:Ô:Ð:Ý$×*Ò*¨5Ñ1Ô1Ð1€vð -Ø!'§¢¨kÑ!:Ô!:ˆØ�Š˜|Ñ,Ô,Ð,Ø�>Š>ÑÔÐrW   ÚseriesúPandasLikeSeries | Nonec                ó¨  — |j         }|t          j        u r|                     ¦   «         S t          j        j        j        }| €dn ||                      d¦  «        d¬¦  «        }|dk    r|                     ¦   «         S |dk    r"|t          j
        ur|                     ¦   «         S |dk    r|                     ¦   «         S |                     ¦   «         S )NÚemptyéd   T)ÚskipnarŠ   )r©   r   rw   r«   r‹   ÚapiÚtypesÚinfer_dtypeÚheadr   ÚV1ÚObject)rº   r�   rM   r©   ÚinferÚinferred_dtypes         rU   Úobject_native_to_narwhals_dtyperÈ      sÃ   € ð Œ^€FØ�Ô,Ð,Ð,ð �}Š}‰ŒÐåŒFŒLÔ$€Eà & �W�W°E°E¸&¿+º+ÀcÑ:JÔ:JÐSWÐ4XÑ4XÔ4X€NØ˜Ò!Ð!Ø�}Š}‰ŒÐØ˜Ò Ð  WµG´JÐ%>Ð%>à�}Š}‰ŒÐØ˜Ò Ð à�}Š}‰ŒÐØ�=Š=‰?Œ?ÐrW   úpd.CategoricalDtypec                ó   — |j         }|t          j        u r|                     ¦   «         S | j        rK|t
          j        u rt          | ¦  «        n| j        j	        }| 
                    t          |¦  «        ¦  «        S |                     ¦   «         S rQ   )r©   r   rÄ   ÚCategoricalÚorderedr   rw   Ú_cudf_categorical_to_listÚ
categoriesÚto_listÚEnumr   )r„   r�   rM   r©   Ú	into_iters        rU   Ú$native_categorical_to_narwhals_dtyperÒ     s’   € ð Œ^€FØ•'”*ÐÐØ×!Ò!Ñ#Ô#Ð#ØÔð 9ð ¥Ô!4Ð4Ð4õ & lÑ3Ô3Ð3àÔ(Ô0ð 	ð
 �{Š{Õ,¨YÑ7Ô7Ñ8Ô8Ð8Ø×ÒÑÔÐrW   úCallable[[], list[Any]]c                ó   ‡ — dˆ fd„}|S )NrN   ú	list[Any]c                 óZ   •— ‰ j                              ¦   «                              ¦   «         S rQ   )rÎ   Úto_arrowÚ	to_pylistr�   s   €rU   Úfnz%_cudf_categorical_to_list.<locals>.fn-  s$   ø€ ØÔ&×/Ò/Ñ1Ô1×;Ò;Ñ=Ô=Ð=rW   )rN   rÕ   © )r„   rÙ   s   ` rU   rÍ   rÍ   '  s(   ø€ ð>ð >ð >ð >ð >ð >ð €IrW   )re   ÚstructÚdecimalF)Úallow_objectrÝ   c               óÞ  — t          | ¦  «        }t          | ¦  «        s|                     t          ¦  «        r>ddlm} t          | d¦  «        r|                      ¦   «         }n| j        } |||¦  «        S |dk    rt          | ||¦  «        S |dk    rt          | |¦  «        S |t          j        u r|j                             ¦   «         S |rt          d ||¦  «        S d}t!          |¦  «        ‚)Nr   )Únative_to_narwhals_dtyper×   ÚcategoryÚobjectz;Unreachable code, object dtype should be handled separately)r‰   Úis_dtype_pyarrowÚ
startswithÚCUDF_BASE_DTYPE_PREFIXÚnarwhals._arrow.utilsrß   Úhasattrr×   Úpyarrow_dtyperÒ   r¹   r   ÚDASKr©   r«   rÈ   ÚAssertionError)r„   r�   rM   rÝ   Ú	str_dtypeÚarrow_native_to_narwhals_dtypeÚpa_dtyperh   s           rU   rß   rß   6  s(  € õ �LÑ!Ô!€Iå˜Ñ%Ô%ð 	A¨×)=Ò)=Õ>TÑ)UÔ)Uð 	Að	
ð 	
ð 	
ð 	
ð 	
ð 	
õ �< Ñ,Ô,ð 	2Ø$0×$9Ò$9Ñ$;Ô$;ˆHˆHà#Ô1ˆHØ-Ð-¨h¸Ñ@Ô@Ð@Ø�JÒÐÝ3°LÀ'È>ÑZÔZÐZØ�HÒÐÝ2°<ÀÑIÔIÐIØ�Ô,Ð,Ð,ð Œ~×$Ò$Ñ&Ô&Ð&Øð NÝ.¨t°W¸nÑMÔMÐMàEð õ ˜Ñ
Ô
ÐrW   r´   úTypeIs[BaseMaskedDtype]c                óŒ   — t          ¦   «         }t          | t          j        j        j        ¦  «        ot          | d|¦  «        du S )z/Return `True` if `dtype` is `"numpy_nullable"`.ÚbaseN)rá   ra   r‹   rÀ   Ú
extensionsÚExtensionDtypeÚgetattr)r´   Úsentinels     rU   Úis_dtype_numpy_nullablerô   Y  s@   € õ ‰xŒx€Hå�5�"œ&Ô+Ô:Ñ;Ô;ð 	5Ý�E˜6 8Ñ,Ô,°Ð4ðrW   r*   c                ój   — |t           j        u rdS t          | ¦  «        rdS t          | ¦  «        rdndS )zjGet dtype backend for pandas type.

    Matches pandas' `dtype_backend` argument in `convert_dtypes`.
    NÚpyarrowÚnumpy_nullable)r   rw   râ   rô   )r´   rM   s     rU   Úget_dtype_backendrø   d  sE   € ð
 �Ô,Ð,Ð,ØˆtÝ˜ÑÔð ØˆyÝ6°uÑ=Ô=ÐGÐÐÀ4ÐGrW   r©   úIterable[Any]úIterator[DTypeBackend]c                ó    ‡— ˆfd„| D ¦   «         S )ziYield a `DTypeBackend` per-dtype.

    Matches pandas' `dtype_backend` argument in `convert_dtypes`.
    c              3  ó8   •K  — | ]}t          |‰¦  «        V — Œd S rQ   )rø   )Ú.0r´   rM   s     €rU   ú	<genexpr>z&iter_dtype_backends.<locals>.<genexpr>x  s.   øè è € ÐIÐI¸Õ˜e ^Ñ4Ô4ÐIÐIÐIÐIÐIÐIrW   rÚ   )r©   rM   s    `rU   Úiter_dtype_backendsrÿ   q  s    ø€ ð JÐIÐIÐIÀ&ÐIÑIÔIÐIrW   úTypeIs[pd.ArrowDtype]c                ó`   — t          t          d¦  «        ot          | t          j        ¦  «        S )NÚ
ArrowDtype)ræ   r‹   ra   r  ©r´   s    rU   râ   râ   {  s#   € å•2�|Ñ$Ô$ÐI­°E½2¼=Ñ)IÔ)IÐIrW   rà   rá   zMapping[type[DType], str]ÚNW_TO_PD_DTYPES_INVARIANTzFloat64[pyarrow]r¡   r¢   )rö   r÷   NzFloat32[pyarrow]r£   r¤   zFloat16[pyarrow]r¥   úInt64[pyarrow]r‘   r’   zInt32[pyarrow]r“   r”   zInt16[pyarrow]r•   r–   zInt8[pyarrow]r—   r˜   zUInt64[pyarrow]r™   rš   zUInt32[pyarrow]r›   rœ   zUInt16[pyarrow]r�   rž   zUInt8[pyarrow]rŸ   r    zboolean[pyarrow]r¦   z<Mapping[type[DType], Mapping[DTypeBackend, str | type[Any]]]ÚNW_TO_PD_DTYPES_BACKENDr+   Údtype_backendústr | PandasDtypec           	     ó  — |dvrd|› d�}t          |¦  «        ‚|j        }|                      ¦   «         }t                               |¦  «        x}r|S t
                               |¦  «        x}r||         S t          ||j        ¦  «        r:|dk    r%dd l}	t          j
         |	j        ¦   «         ¦  «        S |dk    rdS t          S t          | |j        ¦  «        rÁt          |¦  «        rut           dk     rjt#          | |j        ¦  «        rR| j        d	k    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          | |j        ¦  «        r6t          |¦  «        rt           dk     rd	}n| j        }|dk    rd|› d�nd|› d�S t          | |j        ¦  «        r,	 dd l}	n$# t4          $ r}d}t5          |¦  «        |‚d }~ww xY wdS t          | |j        ¦  «        ru|t8          j        u rd}t=          |¦  «        ‚t#          | |j        ¦  «        r0|                     ¦   «         }|                      | j!        d¬¦  «        S d}t          |¦  «        ‚t          ||j"        |j#        |j$        |j%        |j&        |j'        f¦  «        rtQ          | ||¦  «        S d | › �}tS          |¦  «        ‚)!N>   Nrö   r÷   z;Expected one of {None, 'pyarrow', 'numpy_nullable'}, got: 'ú'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 presentzUnknown dtype: )*Ú
ValueErrorr©   Ú	base_typer  Úgetr  Ú
issubclassr«   rö   r‹   r  rŠ   r‰   r   r°   rV   ÚPANDAS_VERSIONra   r§   r   Ú_unparse_versionr   ÚUserWarningr¨   r²   ÚDateÚModuleNotFoundErrorrÐ   r   rÄ   ÚNotImplementedErrorrt   ÚCategoricalDtyperÎ   ÚStructÚArrayÚListÚTimeÚBinaryÚDecimalÚnarwhals_to_native_arrow_dtyperé   )r´   r  rM   r�   rh   r©   r  Úpd_typeÚinto_pd_typeÚpaÚfoundÚ	availableÚchangelog_urlr¶   ÚtzÚtz_partr¸   ÚexcrK   s                      rU   Únarwhals_to_native_dtyper*  ¶  sþ  € ð Ð?Ð?Ð?Ø^ÈmÐ^Ð^Ð^ˆÝ˜‰oŒoÐØŒ^€FØ—’Ñ!Ô!€IÝ+×/Ò/°	Ñ:Ô:Ð:€wð ØˆÝ.×2Ò2°9Ñ=Ô=Ð=€|ð +Ø˜MÔ*Ð*Ý�)˜Vœ]Ñ+Ô+ð Ø˜IÒ%Ð%Ø Ð Ð Ð õ ”=  ¤¡¤Ñ-Ô-Ð-ØÐ,Ò,Ð,Ø�8Ýˆ
Ý  v¤Ñ7Ô7ð 6Ý˜nÑ-Ô-ð 	+µ.ð D
ò 3
ð 3
õ ˜% ¤Ñ1Ô1ð 0°e´oÈÒ6MÐ6MÝ Ô1µ.ÑAÔA�ØSÈÐSÐSÐS�	ð !h�ðX¨e¬oð Xð XÈIð Xð Xð ,9ðXð Xð Xð õ ˜c¥;Ñ/Ô/Ð/ØˆLˆLà œ?ˆLà˜IÒ%Ð%Ø-2¬_Ð'< rÐE�l˜b�l�l�lÀ2ˆGØA ÐA¨gÐAÐAÐAÐAØ&+¤oÐ 5 Ð>�)�r�)�)�)¸BˆØ5˜\Ð5¨7Ð5Ð5Ð5Ð5Ý  v¤Ñ7Ô7ð 
Ý˜nÑ-Ô-ð 	+µ.ð D
ò 3
ð 3
ð  ˆLˆLà œ?ˆLð  	Ò)Ð)ð 1˜Ð0Ð0Ð0Ð0à/ Ð/Ð/Ð/ð	
õ
    v¤{Ñ3Ô3ð !ð	4Ø Ð Ð Ð Ð øÝ"ð 	4ð 	4ð 	4àCˆCÝ% cÑ*Ô*°Ð3øøøøð	4øøøð !Ð Ý  v¤{Ñ3Ô3ð Ø•g”jÐ Ð ØMˆCÝ% cÑ*Ô*Ð*Ý�e˜Vœ[Ñ)Ô)ð 	GØ×3Ò3Ñ5Ô5ˆBØ×&Ò& uÔ'7ÀÐ&ÑFÔFÐFØIˆÝ˜‰oŒoÐÝØàŒMØŒLØŒKØŒKØŒMØŒNð	
ñ
ô 
ð Nõ .¨e°^ÀWÑMÔMÐMØ
#˜EÐ
#Ð
#€CÝ
˜Ñ
Ô
Ðs   Ç=H È
H#ÈHÈH#úpd.ArrowDtypec                ó  — t          |¦  «        rdt          dk    rY	 dd l}n/# t          $ r"}d| › d|j        › �}t          |¦  «        |‚d }~ww xY wddlm} t          j         || |¦  «        ¦  «        S d| › d|› d|› d	�}t          |¦  «        ‚)
N)r  r  r   zUnable to convert to z! due to the following exception: )r*  zConverting to z+ dtype is not supported for implementation z and version r  )
rV   r  rö   ÚImportErrorrh   rå   r*  r‹   r  r  )r´   rM   r�   r#  r)  rh   Ú_to_arrow_dtypes          rU   r   r     sõ   € õ ˜.Ñ)Ô)ð 
>­nÀÒ.FÐ.Fð	,Ø Ð Ð Ð Ð øÝð 	,ð 	,ð 	,àY¨ÐYÐYÐPSÔPWÐYÐYð õ ˜cÑ"Ô"¨Ð+øøøøð		,øøøð
 	VÐUÐUÐUÐUÐUåŒ}˜_˜_¨U°GÑ<Ô<Ñ=Ô=Ð=ð	3˜ð 	3ð 	3Øð	3ð 	3Ø(/ð	3ð 	3ð 	3ð õ ˜cÑ
"Ô
"Ð"s   œ! ¡
A«AÁAr‰   c                ó”   — dt          | ¦  «        v rdS t          | ¦  «                             ¦   «         t          | ¦  «        k    rdS dS )Nrö   r  r‘   r’   )r‰   Úlowerr  s    rU   Úint_dtype_mapperr1  3  sF   € Ø•C˜‘J”JÐÐØÐÝ
ˆ5�z„z×ÒÑÔ�S ™ZœZÒ'Ð'ØˆwØˆ7rW   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_FACTORrH   r(   Úcurrentr,   r§   c                óš   — ||k    r| S t                                ||f¦  «        x}r|\  }} || |¦  «        S d|› d�}t          |¦  «        ‚)Nzunexpected time unit zD, please report an issue at https://github.com/narwhals-dev/narwhals)r2  r  ré   )rH   r3  r§   ÚitemrÙ   Úfactorrh   s          rU   Úcalculate_timestamp_datetimer7  J  sx   € ð �)ÒÐØˆÝ,×0Ò0°'¸9Ð1EÑFÔFÐF€tð Ø‰
ˆˆFØˆr�!�V‰}Œ}Ðð	3 ð 	3ð 	3ð 	3ð õ ˜Ñ
Ô
ÐrW   rn   )rK   rJ   rI   rH   zMapping[TimeUnit, int]Ú_TIMESTAMP_DATE_FACTORc                ó2   — | t           z  t          |         z  S rQ   )r   r8  )rH   r§   s     rU   Úcalculate_timestamp_dater:  a  s   € Ø�ÑÕ!7¸	Ô!BÑBÐBrW   Údfr&   Úcolumn_namesúlist[str] | _1DArrayúNativeDataFrameT | Anyc                óþ  — t          |¦  «        | j        d         k    r| j        |k                         ¦   «         r| S | j        j        j        dk    s&|t          j        u rU|                     ¦   «         dk     r=t          || j         
                    ¦   «         ¬¦  «        x}r|‚| j        dd…|f         S 	 | |         S # t          $ r3}t          || 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.
    rn   Úbrm   )r%  N)rv   ÚshapeÚcolumnsÚallr´   Úkindr   rR   rx   r   ÚtolistÚlocÚKeyError)r;  r<  rM   ÚerrorÚes        rU   Úselect_columns_by_namerJ  e  s  € õ ˆ<ÑÔ˜BœH QœKÒ'Ð'¨R¬Z¸<Ò-G×,LÒ,LÑ,NÔ,NÐ'Øˆ	Ø
Œ
ÔÔ Ò$Ð$Ø�.Ô/Ð/Ð/Ø×+Ò+Ñ-Ô-°Ò6Ð6õ (¨ÀÄ
×@QÒ@QÑ@SÔ@SÐTÑTÔTÐTˆ5ð 	ØˆKØŒv�a�a�a˜�oÔ&Ð&ðØ�,ÔÐøÝð ð ð Ý'¨ÀÄ
×@QÒ@QÑ@SÔ@SÐTÑTÔTÐTˆ5ð 	Ø˜QÐØøøøøðøøøs   Â7B? Â?
C<Ã	.C7Ã7C<c                óv   — | j         t          j        t          j        t          j        hv o| j        j        dk    S )NrO   )rd   r   rR   rS   rè   r^   r´   )rH   s    rU   Úis_non_nullable_booleanrL  ‚  s9   € ð 	
ÔÝÔ!¥>Ô#7½Ô9LÐMð	Nð 	%àŒHŒN˜fÒ$ðrW   r   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   rR   rS   Únumpyrw   Úcupyré   )rM   ÚnpÚcprh   s       rU   Úimport_array_modulerR  ‹  sc   € à�.Ô/µÔ1EÐFÐFÐFØÐÐÐàˆ	Ø�Ô,Ð,Ð,ØÐÐÐàˆ	Ø
>¨nÐ
>Ð
>€CÝ
˜Ñ
Ô
ÐrW   c                  ó   — e Zd ZdS )ÚPandasLikeSeriesNamespaceN)Ú__name__Ú
__module__Ú__qualname__rÚ   rW   rU   rT  rT  ™  s   € € € € € € € rW   rT  Údrop_null_keysúdict[str, bool]c                ó   — dd| ddœS )NFT)ÚsortÚas_indexÚdropnaÚobservedrÚ   )rX  s    rU   Úmake_group_by_kwargsr_  œ  s   € Ø t°~ÐSWÐXÐXÐXrW   r^   úpd.Series[Any]Ú	is_nestedÚseries_classútype[pd.Series[Any]]c               óè   — | j         d         }|rKddlm} t          j         ||t          |¦  «        ¦  «        | j        ¬¦  «        } |||| j        ¬¦  «        S  |||| j        | j        ¬¦  «        S )a`  Broadcast a scalar value from a (one element) Series to match a target index.

    For nested (arrow-backed) types, we rely on
    [`pandas.array`](https://pandas.pydata.org/docs/reference/api/pandas.array.html).

    Arguments:
        native: The native pandas-like Series containing the scalar value to broadcast.
        index: The target index to broadcast to.
        is_nested: Whether the Series has a nested (arrow-backed) dtype.
        series_class: Series class to use for constructing the result.

    Returns:
        A new Series with the scalar value broadcast to match the target index.
    r   )Úrepeatr  )r_   Úname)r_   r´   rf  )rb   rå   re  r‹   Úarrayrv   r´   rf  )r^   r_   ra  rb  Úvaluere  Úpa_arrays          rU   Úbroadcast_series_to_indexrj     sŠ   € ð* ŒK˜ŒN€EØð EØ0Ð0Ð0Ð0Ð0Ð0õ ”8˜F˜F 5­#¨e©*¬*Ñ5Ô5¸V¼\ÐJÑJÔJˆàˆ|˜H¨E¸¼ÐDÑDÔDÐDàˆ<˜ U°&´,ÀVÄ[ÐQÑQÔQÐQrW   Úleftú	pd.SeriesÚrightÚpdxc                ó8  — | j         }t          |¦  «        }|dk    r;t          |t          ¦  «        r&dd l}|  |j        | |j        ¦   «         ¬¦  «        z   S t          ||j        ¦  «        �r)|j         }|dk    r|                      |¦  «        |z   S t          | j	        d¦  «        rÖt          |j	        d¦  «        rÁdd l}| j	         
                    ¦   «         j        }|j	         
                    ¦   «         j        }|j                             |¦  «        rf|j                             |¦  «        rLt          j         |j        ¦   «         ¦  «        }	|                      |	¦  «        |                     |	¦  «        z   S n	 | |                     |¦  «        z   S | |z   S )Nzlarge_string[pyarrow]r   )Útyperá   Ú__arrow_array__)r´   r‰   ra   rö   ÚscalarÚlarge_stringÚSeriesÚastyperæ   Úvaluesrq  rp  rÁ   Ú	is_stringÚis_large_stringr‹   r  )
rk  rm  rn  Ú
left_dtypeÚleft_dtype_strr#  Úright_dtypeÚ
left_arrowÚright_arrowÚpd_pa_large_strings
             rU   Úbinary_string_sum_fallbackr  Â  s�  € ð ”€JÝ˜‘_”_€NØÐ0Ò0Ð0µZÀÅsÑ5KÔ5KÐ0ØÐÐÐà�i�b”i ¨O¨B¬OÑ,=Ô,=Ð>Ñ>Ô>Ñ>Ð>Ý�%˜œÑ$Ô$ñ /Ø”kˆØ˜XÒ%Ð%à—;’;˜{Ñ+Ô+¨eÑ3Ð3Ý�4”;Ð 1Ñ2Ô2ð 	µwØŒLÐ+ñ8
ô 8
ð 	ð !Ð Ð Ð àœ×4Ò4Ñ6Ô6Ô;ˆJØœ,×6Ò6Ñ8Ô8Ô=ˆKØŒx×!Ò! *Ñ-Ô-ð Z°"´(×2JÒ2JÈ;Ñ2WÔ2Wð Zå%'¤]°?°2´?Ñ3DÔ3DÑ%EÔ%EÐ"Ø—{’{Ð#5Ñ6Ô6¸¿ºÐFXÑ9YÔ9YÑYÐYøàà�e—l’l :Ñ.Ô.Ñ.Ð.Ø�%‰<ÐrW   )rM   r   rN   rO   )rX   r%   rY   rZ   rN   r[   )rj   r'   r_   r   rM   r   rN   r'   )
rj   r'   r|   r   rM   r   r}   r   rN   r'   )r„   r   rN   rO   )r„   r   r�   r   rN   r)   )rº   r»   r�   r   rM   r   rN   r)   )r„   rÉ   r�   r   rM   r   rN   r)   )r„   r   rN   rÓ   )
r„   r   r�   r   rM   r   rÝ   rO   rN   r)   )r´   r   rN   rí   )r´   r   rM   r   rN   r*   )r©   rù   rM   r   rN   rú   )r´   r   rN   r   )
r´   r+   r  r*   rM   r   r�   r   rN   r  )r´   r+   rM   r   r�   r   rN   r+  )r´   r   rN   r‰   )rH   r(   r3  r,   r§   r,   rN   r(   )rH   r(   r§   r,   rN   r(   )r;  r&   r<  r=  rM   r   rN   r>  )rH   r%   rN   rO   )rM   r   rN   r   )rX  rO   rN   rY  )
r^   r`  r_   r   ra  rO   rb  rc  rN   r`  )rk  rl  rm  r   rn  r   rN   rl  )�Ú
__future__r   Ú	functoolsÚoperatorÚreÚtypingr   r   r   r   r   rN  rP  Úpandasr‹   Únarwhals._compliantr	   Únarwhals._constantsr
   r   r   r   r   r   Únarwhals._exceptionsr   Únarwhals._utilsr   r   r   r   r   r   r   Únarwhals.exceptionsr   Úcollections.abcr   r   r   r   rÁ   r   r   rö   r#  Úpandas._typingr   ÚPandasDtypeÚpandas.core.dtypes.dtypesr    Útyping_extensionsr!   Únarwhals._durationr"   Únarwhals._pandas_like.exprr#   r]   r%   Únarwhals._pandas_like.typingr&   r'   r(   Únarwhals.dtypesr)   Únarwhals.typingr*   r+   r,   r-   r.   r0   Ú__annotations__r1   Úintr2   r3   rR   rw   rS   ÚPANDAS_LIKE_IMPLEMENTATIONÚPD_DATETIME_RGXÚcompileÚVERBOSEr­   ÚPD_DURATION_RGXr±   r?   Ú
ALIAS_DICTrL   rx   r  ÚNUMPY_VERSIONrV   ri   rc   r€   Ú	lru_cacherŽ   r¹   rÈ   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  r*  r   r1  ÚfloordivÚmulr2  r7  r8  r:  rJ  rL  rR  rT  r_  rj  r  rÚ   rW   rU   ú<module>r¢     sË  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø 	€	€	€	Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =à Ð Ð Ð Ø Ð Ð Ð à 4Ð 4Ð 4Ð 4Ð 4Ð 4ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð /Ð .Ð .Ð .Ð .Ð .ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð +Ð *Ð *Ð *Ð *Ð *àð ØEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEÐEØ Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð àÐÐÐØ3Ð3Ð3Ð3Ð3Ð3Ø9Ð9Ð9Ð9Ð9Ð9Ø(Ð(Ð(Ð(Ð(Ð(à/Ð/Ð/Ð/Ð/Ð/Ø9Ð9Ð9Ð9Ð9Ð9Ø=Ð=Ð=Ð=Ð=Ð=ðð ð ð ð ð ð ð ð ð ð
 &Ð%Ð%Ð%Ð%Ð%ØKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKàˆG�G >Ð2Ñ2Ô2€EØ%€KÐ%Ð%Ð%Ñ%Ø$€JÐ$Ð$Ð$Ñ$Ø (¨#¨s¨°S¨Ô 9€NÐ9Ð9Ð9Ñ9Ø€GÐÐÐÑð ÔØÔØÔðÐ ð
€ð !�b”j °"´*Ñ=Ô=Ð ð€ð
 !�b”j °"´*Ñ=Ô=Ð à 'ð
ô!Ð ð ð ð ñ ð ˜UÐ#Ð#€
à	Ø	Ø
Ø	Ø	Ø	Ø	Ø
Ø
Ø
ð9ð 9€
ð ð ð ñ ð  Ô&×7Ò7Ñ9Ô9€ðð
 �˜bÑ!Ô!€ððKð Kð Kð Kðð ð ð ðB'ð 'ð 'ð 'ð.
*ð 
*ð 
*ð 
*ð €Ô˜RÐ Ñ Ô ð
ð 
ð 
ñ !Ô ð
ð €Ô˜RÐ Ñ Ô ð%ð %ð %ñ !Ô ð%ðPð ð ð ð. ð  ð  ð  ð 	ð 	ð 	ð 	ð 7Ð ð ð ð  ð  ð  ð  ð  ðFð ð ð ð	Hð 	Hð 	Hð 	HðJð Jð Jð Jð €Ô˜RÐ Ñ Ô ðJð Jð Jñ !Ô ðJð 
ŒÔ	€ð
 Ô˜
Ø
„M�8ð8Ð ð ð ð ñ ð „NØ%Ø#Øðð ð
 „NØ%Ø#Øðð ð
 „Nð &Ø#Øðð ð „LÐ.À'ÐQXÐYÐYØ
„LÐ.À'ÐQXÐYÐYØ
„LÐ.À'ÐQXÐYÐYØ
„K˜_ÀÈfÐUÐUØ
„MØ$Ø"Øðð ð
 „MØ$Ø"Øðð ð
 „MØ$Ø"Øðð ð
 „LÐ.À'ÐQXÐYÐYØ
„NØ%Ø#Øðð ðM+YÐ ð +ð +ð +ñ +ð\eð eð eð eðP#ð #ð #ð #ð*ð ð ð ð Ô$ eÐ,ØÔ$ iÐ0Ø”<Ð!3Ð4ØÔ$ eÐ,Ø”<Ð!3Ð4Ø”< Ð'Ø”, Ð.Ø”, Ð.Ø”, Ð.ð
ð 
ð ð ð ð ñ ðð ð ð ð  Ø
Ø
Ø	
ð	2ð 2Ð ð ð ð ñ ðCð Cð Cð Cðð ð ð ð:ð ð ð ðð ð ð ð TÐ SÐ SÐ SÐ SÐ 4Ð5GÈÐ5LÔ MÑ SÔ SÐ SðYð Yð Yð YðRð Rð Rð RðD ð  ð  ð  ð  ð  rW   