§
    {Øjxr  ã                  ó®  — 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	 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" 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/m0Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z=m>Z>m?Z? d dl@mAZA d dlBmCZCmDZDmEZEmFZF  e	de9¬¦  «        ZGeEZHdeId<   eEZJdeId<   e&eeKgef         ZLdeId<   eKZMdeId<   ejN        ejO        ejP        hZQdZR ejS        eRejT        ¦  «        ZUdZV ejS        eVejT        ¦  «        ZWed         ZXdeId <   d!d"d#œZYd$d%d&d'd(d)d*d+d,d-d.œ
ZZd/eId0<   ejN         [                    ¦   «         Z\	  ee¦  «        Z]	 dÃd5„Z^dÄd;„Z_dÅd@„Z`dÆdC„Za ejb        dD¬E¦  «        dÇdG„¦   «         Zc ejb        dD¬E¦  «        dÈdK„¦   «         ZddÉdN„ZedÊdP„ZfdËdR„ZgdSZhdTdUœdÌdW„ZidÍdZ„ZjdÎd\„ZkdÏd`„Zl ejb        dD¬E¦  «        dÐdb„¦   «         Zmejn        jo        Zoeojp        dceojq        ddiZrdeeIdf<   eojs        dgdhdidjœeojt        dkdldmdjœeoju        dndododjœeojv        dpdqdrdjœeojw        dsdtdudjœeojx        dvdwdxdjœeojy        dydzd{djœeojz        d|d}d~djœeoj{        dd€d�djœeoj|        d‚dƒd„djœeoj}        d…d†d‡djœeoj~        dˆd‰d4djœiZdŠeId‹<   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—eId˜<   dÔdž„Z†eeedŸd œZ‡d¡eId¢<   dÕd£„ZˆdÖd©„Z‰d×dª„ZŠdØd¬„Z‹ G d­„ d®ed7ef         ¦  «        ZŒdÙd±„Z�dÚd·„ZŽdÛd¹„Z�dÜd½„Z�dÝdÂ„Z‘dS )Þé    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚLiteralÚTypeVar)Ú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©Úis_pandas_like_series)Ú
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Úmr5   r6   r7   r9   r:   r;   r<   r=   r>   r?   )
ÚyÚqÚmorC   ÚhrD   ÚsÚmsÚusÚnsz)Mapping[IntervalUnit, NativeIntervalUnit]Ú
UNITS_DICTÚimplementationr   ÚreturnÚboolc                ó6   — | t           j        t           j        hv S ©N)r   ÚPANDASÚMODIN©rN   s    ú�/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/narwhals/_pandas_like/utils.pyÚis_pandas_or_modinrW   �   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%   rU   z$Expected Series or scalar, got list.)Únarwhals._pandas_like.seriesr&   ÚnativeÚindexÚ
_broadcastÚ
isinstanceÚilocÚ	set_indexÚ_implementationÚlistÚ	TypeError)rY   rZ   r&   Ú	lhs_indexÚmsgs        rV   Úalign_and_extract_nativerj   …   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ˆ?ÐrX   Ú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¬¦  «        }n|                      |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)rs   )rb   Úto_native_namespaceÚIndexÚlenr   r   ÚCUDFrt   r`   rS   Ú_backend_versionÚset_axis)rk   r`   rN   Úexpected_lenÚ
actual_lenri   Úresults          rV   rd   rd   ¦   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¨!°%�Ñ8Ô8ˆˆà—’˜e¨!�Ñ,Ô,ˆØ€MrX   ÚargsÚkwargsc               ó’   — |t           j        u r+|                     ¦   «         dk     r | j        |i |¤dddœ¤Ž}n | j        |i |¤Ž}|S )zXWrapper around pandas' rename so that we can set `copy` based on implementation/version.rq   F)rt   Úinplace)r   rS   ry   Úrename)rk   rN   r~   r   r}   s        rV   r‚   r‚   ¿   si   € ð �Ô.Ð.Ð.Ø×'Ò'Ñ)Ô)¨DÒ0Ð0à�”˜TÐG VÐG°%ÀÐGÐGÐGÐGˆˆà�”˜TÐ, VÐ,Ð,ˆØ€MrX   é   )Ú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)rb   ÚpdÚStringDtyperŠ   ©r…   s    rV   Úis_dtype_non_pyarrow_stringr�   Ì   s2   € õ
 �l¥B¤NÑ3Ô3ð µs¸<Ñ7HÔ7Hð Mð 8ð rX   Ú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>   rP   Ú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           rV   Ú#non_object_native_to_narwhals_dtyperº   Ú   s  € å�ÑÔ€EàŒ^€FØÐ"Ð"Ð"Ø�|Š|‰~Œ~ÐØÐ"Ð"Ð"Ø�|Š|‰~Œ~ÐØÐ"Ð"Ð"Ø�|Š|‰~Œ~ÐØÐ Ð Ð Ø�{Š{‰}Œ}ÐØÐ$Ð$Ð$Ø�}Š}‰ŒÐØÐ$Ð$Ð$Ø�}Š}‰ŒÐØÐ$Ð$Ð$Ø�}Š}‰ŒÐØÐ"Ð"Ð"Ø�|Š|‰~Œ~ÐØÐ&Ð&Ð&Ø�~Š~ÑÔÐØÐ&Ð&Ð&Ø�~Š~ÑÔÐØ�	ÒÐØ�~Š~ÑÔÐÝ" <Ñ0Ô0ð Ø�}Š}‰ŒÐØÐ#Ð#Ð#Ø�~Š~ÑÔÐÝ$×*Ò*¨5Ñ1Ô1Ð1€vð ;Ø!'§¢¨kÑ!:Ô!:ˆØ#)§<¢<°Ñ#<Ô#<ˆØ�Š˜|¨\Ñ:Ô:Ð:Ý$×*Ò*¨5Ñ1Ô1Ð1€vð -Ø!'§¢¨kÑ!:Ô!:ˆØ�Š˜|Ñ,Ô,Ð,Ø�>Š>ÑÔÐrX   Ú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   rx   r¬   rŒ   ÚapiÚtypesÚinfer_dtypeÚheadr   ÚV1ÚObject)r»   r�   rN   rª   ÚinferÚinferred_dtypes         rV   Ú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Ð%>Ð%>à�}Š}‰ŒÐØ˜Ò Ð à�}Š}‰ŒÐØ�=Š=‰?Œ?ÐrX   úpd.CategoricalDtypec                ó   — |j         }|t          j        u r|                     ¦   «         S | j        rK|t
          j        u rt          | ¦  «        n| j        j	        }| 
                    t          |¦  «        ¦  «        S |                     ¦   «         S rR   )rª   r   rÅ   ÚCategoricalÚorderedr   rx   Ú_cudf_categorical_to_listÚ
categoriesÚto_listÚEnumr   )r…   r�   rN   rª   Ú	into_iters        rV   Ú$native_categorical_to_narwhals_dtyperÓ     s’   € ð Œ^€FØ•'”*ÐÐØ×!Ò!Ñ#Ô#Ð#ØÔð 9ð ¥Ô!4Ð4Ð4õ & lÑ3Ô3Ð3àÔ(Ô0ð 	ð
 �{Š{Õ,¨YÑ7Ô7Ñ8Ô8Ð8Ø×ÒÑÔÐrX   úCallable[[], list[Any]]c                ó   ‡ — dˆ fd„}|S )NrO   ú	list[Any]c                 óZ   •— ‰ j                              ¦   «                              ¦   «         S rR   )rÏ   Úto_arrowÚ	to_pylistrŽ   s   €rV   Úfnz%_cudf_categorical_to_list.<locals>.fn0  s$   ø€ ØÔ&×/Ò/Ñ1Ô1×;Ò;Ñ=Ô=Ð=rX   )rO   rÖ   © )r…   rÚ   s   ` rV   rÎ   rÎ   *  s(   ø€ ð>ð >ð >ð >ð >ð >ð €IrX   )rf   Ú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�   rN   rÞ   Ú	str_dtypeÚarrow_native_to_narwhals_dtypeÚpa_dtyperi   s           rV   rà   rà   9  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ð õ ˜Ñ
Ô
ÐrX   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â   rb   rŒ   rÁ   Ú
extensionsÚExtensionDtypeÚgetattr)rµ   Úsentinels     rV   Úis_dtype_numpy_nullablerõ   \  s@   € õ ‰xŒx€Hå�5�"œ&Ô+Ô:Ñ;Ô;ð 	5Ý�E˜6 8Ñ,Ô,°Ð4ðrX   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   rx   rã   rõ   )rµ   rN   s     rV   Úget_dtype_backendrù   g  sE   € ð
 �Ô,Ð,Ð,ØˆtÝ˜ÑÔð ØˆyÝ6°uÑ=Ô=ÐGÐÐÀ4ÐGrX   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 rR   )rù   )Ú.0rµ   rN   s     €rV   ú	<genexpr>z&iter_dtype_backends.<locals>.<genexpr>{  s.   øè è € ÐIÐI¸Õ˜e ^Ñ4Ô4ÐIÐIÐIÐIÐIÐIrX   rÛ   )rª   rN   s    `rV   Úiter_dtype_backendsr   t  s    ø€ ð JÐIÐIÐIÀ&ÐIÑIÔIÐIrX   úTypeIs[pd.ArrowDtype]c                ó`   — t          t          d¦  «        ot          | t          j        ¦  «        S )NÚ
ArrowDtype)rç   rŒ   rb   r  ©rµ   s    rV   rã   rã   ~  s#   € å•2�|Ñ$Ô$ÐI­°E½2¼=Ñ)IÔ)IÐIrX   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‹   )é   rL   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±   rW   ÚPANDAS_VERSIONrb   r¨   r   Ú_unparse_versionr   ÚUserWarningr©   r³   ÚDateÚModuleNotFoundErrorrÑ   r   rÅ   ÚNotImplementedErrorru   ÚCategoricalDtyperÏ   ÚStructÚArrayÚListÚTimeÚBinaryÚDecimalÚnarwhals_to_native_arrow_dtyperê   )rµ   r  rN   r�   ri   rª   r  Úpd_typeÚinto_pd_typeÚpaÚfoundÚ	availableÚchangelog_urlr·   ÚtzÚtz_partr¹   ÚexcrL   s                      rV   Ú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  )
rW   r  r÷   ÚImportErrorri   ræ   r+  rŒ   r  r  )rµ   rN   r�   r$  r*  ri   Ú_to_arrow_dtypes          rV   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    rV   Úint_dtype_mapperr2  6  sF   € Ø•C˜‘J”JÐÐØÐÝ
ˆ5�z„z×ÒÑÔ�S ™ZœZÒ'Ð'ØˆwØˆ7rX   iè  i@B )	)rL   rK   )rL   rJ   )rK   rL   )rK   rJ   )rJ   rL   )rJ   rK   )rI   rL   )rI   rK   )rI   rJ   zGMapping[tuple[UnitCurrent, UnitTarget], tuple[BinOpBroadcast, IntoRhs]]Ú_TIMESTAMP_DATETIME_OP_FACTORrI   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)r3  r  rê   )rI   r4  r¨   ÚitemrÚ   Úfactorri   s          rV   Úcalculate_timestamp_datetimer8  M  sx   € ð �)ÒÐØˆÝ,×0Ò0°'¸9Ð1EÑFÔFÐF€tð Ø‰
ˆˆFØˆr�!�V‰}Œ}Ðð	3 ð 	3ð 	3ð 	3ð õ ˜Ñ
Ô
ÐrX   ro   )rL   rK   rJ   rI   zMapping[TimeUnit, int]Ú_TIMESTAMP_DATE_FACTORc                ó2   — | t           z  t          |         z  S rR   )r   r9  )rI   r¨   s     rV   Úcalculate_timestamp_dater;  d  s   € ð �ÑÕ!7¸	Ô!BÑBÐBrX   Údfr'   Úcolumn_namesúlist[str] | _1DArrayúNativeDataFrameT | Anyc                ó   — t          |¦  «        | j        d         k    r0t          d„ t          | j        |d¬¦  «        D ¦   «         ¦  «        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.
    ro   c              3  ó(   K  — | ]\  }}||k    V — Œd S rR   rÛ   )rþ   ÚxrE   s      rV   rÿ   z)select_columns_by_name.<locals>.<genexpr>t  s;   è è € ð 0ð 0Ù�1�aˆˆQŠð0ð 0ð 0ð 0ð 0ð 0rX   T)ÚstrictÚbrn   )r&  N)rw   ÚshapeÚallÚzipÚcolumnsrµ   Úkindr   rS   ry   r   ÚtolistÚlocÚKeyError)r<  r=  rN   ÚerrorÚes        rV   Úselect_columns_by_namerO  j  s>  € õ ˆ<ÑÔ˜BœH QœKÒ'Ð'­Cð 0ð 0Ý˜rœz¨<ÀÐEÑEÔEð0ñ 0ô 0ñ -ô -Ð'ð ˆ	Ø
Œ
ÔÔ Ò$Ð$Ø�.Ô/Ð/Ð/Ø×+Ò+Ñ-Ô-°Ò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   ÃC Ã
DÃ.DÄDc                óv   — | j         t          j        t          j        t          j        hv o| j        j        dk    S )NrP   )re   r   rS   rT   ré   r_   rµ   )rI   s    rV   Úis_non_nullable_booleanrQ  ‰  s9   € ð 	
ÔÝÔ!¥>Ô#7½Ô9LÐMð	Nð 	%àŒHŒN˜fÒ$ðrX   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   rS   rT   Únumpyrx   Úcupyrê   )rN   ÚnpÚcpri   s       rV   Úimport_array_modulerW  ’  sc   € à�.Ô/µÔ1EÐFÐFÐFØÐÐÐàˆ	Ø�Ô,Ð,Ð,ØÐÐÐàˆ	Ø
>¨nÐ
>Ð
>€CÝ
˜Ñ
Ô
ÐrX   c                  ó   — e Zd ZdS )ÚPandasLikeSeriesNamespaceN)Ú__name__Ú
__module__Ú__qualname__rÛ   rX   rV   rY  rY     s   € € € € € € € rX   rY  Údrop_null_keysúdict[str, bool]c                ó   — dd| ddœS )NFT)ÚsortÚas_indexÚdropnaÚobservedrÛ   )r]  s    rV   Úmake_group_by_kwargsrd  £  s   € Ø t°~ÐSWÐXÐXÐXrX   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µ   rk  )rc   ræ   rj  rŒ   Úarrayrw   rµ   rk  )r_   r`   rf  rg  Úvaluerj  Úpa_arrays          rV   Úbroadcast_series_to_indexro  §  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ÐQrX   úTypeIs[pd.Series[Any]]c                ó    — t          | ¦  «        S rR   r   )rk   s    rV   Ú_is_native_seriesrr  É  s   € å  Ñ%Ô%Ð%rX   Údividendúpd.Series[Any] | floatÚdivisorc                ó  — t          |¦  «        re|dk    }|                     ¦   «         r| |z  S |                     ||j                             d¦  «        ¦  «        }| |z                       |¦  «        S t          | ¦  «        sJ ‚	 t          |dk    ¦  «        }n# t          t          f$ r d}Y nw xY w|rM t	          | ¦  «        d| j        ¬¦  «        }|  t	          |¦  «        d¦  «        z                       |¦  «        S | |z  S )z«Floor-divide, with null wherever `divisor` is zero.

    Natively, integer division by zero gives `inf` (numpy-backed), `0` (nullable)
    or raises (pyarrow-backed).
    r   ro   F)r`   )	rr  rF  Úwhererµ   ÚtyperP   rg   r  r`   )rs  ru  Ú
is_nonzeroÚsafe_divisorÚdivisor_is_zeroÚ	all_falses         rV   Úfloordiv_null_on_zeror}  Î  s%  € õ ˜Ñ!Ô!ð <Ø ’\ˆ
Ø�>Š>ÑÔð 	'Ø˜wÑ&Ð&ð —}’} Z°´×1CÒ1CÀAÑ1FÔ1FÑGÔGˆØ˜LÑ(×/Ò/°
Ñ;Ô;Ð;Ý˜XÑ&Ô&Ð&Ð&Ð&ð Ý˜w¨!š|Ñ,Ô,ˆˆøÝ•zÐ"ð  ð  ð  Øˆˆˆð øøøàð ?Ø"•D˜‘N”N 5°´Ð?Ñ?Ô?ˆ	à˜M�D ™MœM¨!Ñ,Ô,Ñ,×3Ò3°IÑ>Ô>Ð>Ø�wÑÐs   ÂB ÂB1Â0B1Ú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   )rx  râ   Ú__arrow_array__)rµ   rŠ   rb   r÷   ÚscalarÚlarge_stringÚSeriesÚastyperç   Úvaluesrƒ  rx  rÂ   Ú	is_stringÚis_large_stringrŒ   r  )
r~  r€  r�  Ú
left_dtypeÚleft_dtype_strr$  Úright_dtypeÚ
left_arrowÚright_arrowÚpd_pa_large_strings
             rV   Ú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 :Ñ.Ô.Ñ.Ð.Ø�%‰<ÐrX   )rN   r   rO   rP   )rY   r&   rZ   r[   rO   r\   )rk   r(   r`   r   rN   r   rO   r(   )
rk   r(   r~   r   rN   r   r   r   rO   r(   )r…   r   rO   rP   )r…   r   r�   r   rO   r*   )r»   r¼   r�   r   rN   r   rO   r*   )r…   rÊ   r�   r   rN   r   rO   r*   )r…   r   rO   rÔ   )
r…   r   r�   r   rN   r   rÞ   rP   rO   r*   )rµ   r   rO   rî   )rµ   r   rN   r   rO   r+   )rª   rú   rN   r   rO   rû   )rµ   r   rO   r  )
rµ   r,   r  r+   rN   r   r�   r   rO   r	  )rµ   r,   rN   r   r�   r   rO   r,  )rµ   r   rO   rŠ   )rI   r)   r4  r-   r¨   r-   rO   r)   )rI   r)   r¨   r-   rO   r)   )r<  r'   r=  r>  rN   r   rO   r?  )rI   r&   rO   rP   )rN   r   rO   r   )r]  rP   rO   r^  )
r_   re  r`   r   rf  rP   rg  rh  rO   re  )rk   râ   rO   rp  )rs  rt  ru  rt  rO   re  )r~  r  r€  r   r�  r   rO   r  )’Ú
__future__r   Ú	functoolsÚoperatorÚreÚtypingr   r   r   r   rS  rU  ÚpandasrŒ   Únarwhals._compliantr   Únarwhals._constantsr	   r
   r   r   r   r   Únarwhals._exceptionsr   Únarwhals._utilsr   r   r   r   r   r   r   Únarwhals.dependenciesr   Ú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/   r1   Ú__annotations__r2   Úintr3   r4   rS   rx   rT   ÚPANDAS_LIKE_IMPLEMENTATIONÚPD_DATETIME_RGXÚcompileÚVERBOSEr®   ÚPD_DURATION_RGXr²   r@   Ú
ALIAS_DICTrM   ry   r  ÚNUMPY_VERSIONrW   rj   rd   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!  r2  ÚfloordivÚmulr3  r8  r9  r;  rO  rQ  rW  rY  rd  ro  rr  r}  r‘  rÛ   rX   rV   ú<module>rµ     sÿ  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à Ð Ð Ð Ø Ð Ð Ð à 4Ð 4Ð 4Ð 4Ð 4Ð 4ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð /Ð .Ð .Ð .Ð .Ð .ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7Ø *Ð *Ð *Ð *Ð *Ð *àð Ø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ð ð ð ð2
ð 
ð 
ð 
ð €Ô˜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&ð &ð &ð &ð
ð ð ð ð8 ð  ð  ð  ð  ð  rX   