
    g                    X   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ  ed      Zer,d dlmZ d dlmZ d dlmZ d dlm Z  d dlm!Z!  ede      Z"d dl#Z$ejJ                  ejL                  ejN                  hZ(dZ) ejT                  e)ejV                        Z,dZ- ejT                  e-ejV                        Z.dZ/ ejT                  e/ejV                        Z0dZ1 ejT                  e1ejV                        Z2	 	 	 	 	 	 d4dZ3d5dZ4	 d6	 	 	 	 	 	 	 	 	 	 	 d7dZ5	 	 	 	 	 	 	 	 d8dZ6	 	 	 	 	 	 	 	 d8d Z7	 	 	 	 	 	 	 	 d8d!Z8	 	 	 	 	 	 	 	 	 	 d9d"Z9	 	 	 	 	 	 	 	 	 	 d:d#Z:	 	 	 	 	 	 	 	 	 	 d;d$Z;	 	 	 	 	 	 	 	 	 	 	 	 d<d%Z< ed&'      	 	 	 	 	 	 	 	 d=d(       Z=	 	 	 	 	 	 	 	 d>d)Zd?d*Z>	 	 	 	 	 	 	 	 	 	 	 	 d@d+ZdAd,Z?dBd-Z@dCd.ZA	 	 	 	 	 	 dDd/ZB	 	 	 	 	 	 	 	 dEd0ZCdFd1ZD	 	 	 	 	 	 	 	 	 	 dGd2ZE	 	 	 	 	 	 	 	 	 	 	 	 dHd3ZFy)I    )annotationsN)	lru_cache)TYPE_CHECKING)Any)Iterable)Literal)Sequence)TypeVar)narwhals_to_native_dtype)native_to_narwhals_dtype)ColumnNotFoundError)Implementation)import_dtypes_module)isinstance_or_issubclassTPandasLikeDataFrame)PandasLikeExprPandasLikeSeries)DType)VersionExprT)bounda  ^
    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]"
$c                   ddl m} ddlm} t	        |t
              rZt        |      dkD  rGt        |d   d      st        |d   d      rd}t        |      dt        |d          }t        |      |d   }| j                  j                  }t	        ||      rt        S t	        ||      r6|j                  j                  }|j                         dk(  rC|j                  }| j                  |j                  |j                  d   ||j                  	      fS | j                         dk(  rN| j                  }|j                  |j                  d   ||j                  |j                   
      |j                  fS |j                  j                  |ur9| j                  t#        |j                  ||j$                  |j&                        fS | j                  |j                  fS | j                  |fS )a  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.

    If RHS is length 1, return the scalar value, so that the underlying
    library can broadcast it.
    r   r   r      __narwhals_expr____narwhals_series__zbMulti-output expressions (e.g. `nw.all()` or `nw.col('a', 'b')`) are not supported in this contextz6Expected scalar value, Series, or Expr, got list of : )indexdtyper   r    nameimplementationbackend_version)narwhals._pandas_like.dataframer   narwhals._pandas_like.seriesr   
isinstancelistlenhasattr
ValueErrortype_native_seriesr   NotImplemented	__class__ilocr    r"   	set_index_implementation_backend_version)lhsrhsr   r   msg	lhs_index	rhs_indexss           P/var/www/openai/venv/lib/python3.12/site-packages/narwhals/_pandas_like/utils.py"broadcast_align_and_extract_nativer<   Y   s    D=
 #ts8a<s1v23wA-8 { o%J4PSTUPV<.YCS/!!f""((I#*+#'(&&,,	779>""A""AFF1IYaggF  779>""AAFF1IYaggAFFS""  ##94""&&#&#6#6$'$8$8	  ""C$6$677 s""    c                   ddl m} ddlm} t	        ||      rt
        S t	        ||      r|j                         dk(  rB|j                  }|j                  |j                  d   | |j                  |j                        S |j                  j                  | ur-t        |j                  | |j                  |j                        S |j                  S d}t!        |      )zValidate 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   r   r   r!   r#   zPlease report a bug)r&   r   r'   r   r(   r/   r*   r.   r0   r1   r    r"   r   r2   r3   r4   AssertionError)r   otherr   r   r:   r7   s         r;   validate_dataframe_comparandrA      s     D=%,-%)*99;!$$A;;qvvayQWW166;RR%%U2$$$44 % 6 6	  ###
C

r=   c                   ddl m} |t        v r.|j                         j	                  | |d      } |||||      S dt         d| }t        |      )Nr   r    )r   r"   )r$   r%   version%Expected pandas-like implementation (	), found )r'   r   PANDAS_LIKE_IMPLEMENTATIONto_native_namespaceSeries	TypeError)iterabler   r$   r%   rD   r   seriesr7   s           r;   create_compliant_seriesrM      ss     >33335<<E = 
  )+	
 	
 66P5QQZ[iZjknr=   c                  |t         j                  u r[t        j                         5  t        j                  ddt
               |j                         j                  | d      cddd       S |j                         r@|t         j                  u r	|dk  rdd	ini } |j                         j                  | fd
di|S dt         d| }t        |      # 1 sw Y   pxY w)zOConcatenate (native) DataFrames horizontally.

    Should be in namespace.
    ignorezDThe behavior of array concatenation with empty entries is deprecated)messagecategoryr   )axisN   copyFrR   rE   rF   )r   CUDFwarningscatch_warningsfilterwarningsFutureWarningrH   concatis_pandas_likePANDASrG   rJ   )dfsr$   r%   extra_kwargsr7   s        r;   horizontal_concatr`      s     ,,,$$&##^&
 "557>>s>K '& $$& !6!66?T;Q UO 	
 ;~113::3WQW,WW 66P5QQZ[iZjkn% '&s   =CCc                  | sd}t        |      | d   j                  }t        | dd d      D ]n  \  }}|j                  }t        |      t        |      k(  r||k(  j	                         r=d|j                          d| d|j                          d	}t        |       |t        v r@|t        j                  u r	|d
k  rddini } |j                         j                  | fddi|S dt         d| }t        |      )zMConcatenate (native) DataFrames vertically.

    Should be in namespace.
    No dataframes to concatenater   r   N)startz>unable to vstack, column names don't match:
   - dataframe 0: z
   - dataframe z: 
rS   rU   FrR   rE   rF   )r?   columns	enumerater*   allto_listrJ   rG   r   r]   rH   r[   )	r^   r$   r%   r7   cols_0idfcols_currentr_   s	            r;   vertical_concatrm      s,    ,S!!V^^F3qr7!,2zz\"c&k18N7S7S7U%%+^^%5$6 7""#B|';';'=&>bB 
 C.  - 33 !6!66?T;Q UO 	
 ;~113::3WQW,WW 66P5QQZ[iZjknr=   c                  | sd}t        |      |t        v r\|t        j                  u r
|dk  rdddn|t        j                  u r	|dk  rddini } |j	                         j
                  | fddi|S d	t         d
| }t        |      )zMConcatenate (native) DataFrames diagonally.

    Should be in namespace.
    rb   r   F)rU   sortrS   rU   rR   r   rE   rF   )r?   rG   r   r]   rH   r[   rJ   )r^   r$   r%   r7   r_   s        r;   diagonal_concatrq     s     ,S!!33 !6!66?T;Q E* !6!66?T;Q % 	 ;~113::3WQW,WW 66P5QQZ[iZjknr=   c                    |t         v rL|t        j                  u rddini }t        |      dk(  rd} |j	                         j
                  | f||d|S dt          d| }t        |      )zReturn native series.rU   Fr   N)r"   r   rE   rF   )rG   r   r]   r*   rH   rI   rJ   )datar"   r   r$   r_   r7   s         r;   native_series_from_iterablert   )  s     33*8N<Q<Q*QWYu:?E:~113::
5
,8
 	

 66P5QQZ[iZjknr=   c                  |t         j                  u r| j                  d      } || _        | S |t         j                  u r
|dk  rddi}ni }|t         j                  u rd|cxk  rdk  r	n nd|d<   n	  | j
                  |fdd	i|S )
z}Wrapper around pandas' set_axis to set object index.

    We can set `copy` / `inplace` based on implementation/version.
    Fdeepro   inplacer      rS   rU   rR   r   )r   rV   rU   r   r]   set_axis)objr   r$   r%   kwargss        r;   r2   r2   =  s     ,,,hhEh"	
...$U#.../(D(v3<<0A000r=   c                  |t         j                  u r| j                  d      } || _        | S |t         j                  u r
|dk  rddi}ni }|t         j                  u rd|cxk  rdk  r	n nd|d<   n	  | j
                  |fdd	i|S )
zWrapper around pandas' set_axis to set object columns.

    We can set `copy` / `inplace` based on implementation/version.
    Frv   ro   rx   ry   rS   rU   rR   r   )r   rV   rU   re   r]   r{   )r|   re   r$   r%   r}   s        r;   set_columnsr   [  s     ,,,hhEh"
...$U#.../(D(v3<<2a2622r=   c                   |t         j                  u r|dk\  r | j                  |i |S  | j                  |i |ddiS )zXWrapper around pandas' rename so that we can set `copy` based on implementation/version.rS   rU   F)r   r]   rename)r|   r$   r%   argsr}   s        r;   r   r   y  sK     ...4szz4*6**3::t2v2E22r=      )maxsizec                V   t        |      }| 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 | dk(  s| j                  d      r|j                         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      }|j-                  |      S | dk(  r|j/                         S | j                  d      r!| j1                  d      r|j3                         S |j5                         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]large_string[pyarrow]stringstring[pyarrow]>   bool[pyarrow]boolbooleanboolean[pyarrow]rQ   zdictionary<	time_unit	time_zonezdate32[day][pyarrow]decimalz	[pyarrow])r   r   r   r   r   r   r   r   r   r   r   StringBoolean
startswithCategoricalPATTERN_PD_DATETIMEmatchPATTERN_PA_DATETIMEgroupDatetimePATTERN_PD_DURATIONPATTERN_PA_DURATIONDurationDateendswithDecimalUnknown)r    rD   r3   dtypesmatch_dt_time_unitdt_time_zonedu_time_units           r;   #non_object_native_to_narwhals_dtyper     s'    "'*FFF||~FF||~FF||~BB{{}JJ}}JJ}}JJ}}FF||~   ~~   ~~XX}}HH~~
e..}=!!##%++E222%++E2227=||K7P#)<<#<|\::%++E222%++E2227=||K7P|,,&&{{}	"u~~k'B~~>>r=   c                >   t        | j                        }t        |      }|j                  d      rV|t        j
                  u r$t        | j                  j                         |      S t        | j                  j                  |      S |dk7  rt        |||      S |t        j                  u r|j                         S |t        j                  u rPdd l}|j                  j                  j!                  | d      }|dk(  r|j                         S |j#                         S | j%                         }t'        |d      r7ddlm} 	  ||j-                         j/                  d      j                  |      S |j3                         S # t0        $ r Y |j3                         S w xY w)	N)
large_listr)   structfixed_size_listobjectr   T)skipnar   __dataframe__)'map_interchange_dtype_to_narwhals_dtype)strr    r   r   r   rV   arrow_native_to_narwhals_dtypeto_arrowpyarrow_dtyper   DASKr   r]   pandasapitypesinfer_dtypeObjectto_framer+   narwhals._interchange.dataframer   r   
get_column	Exceptionr   )native_columnrD   r$   r    r   pdrk   r   s           r;   r   r     ss    ##$E!'*FKL^0001-2E2E2N2N2PRYZZ-m.A.A.O.OQXYY25'>RR,,, }}... 	((t(DH==?"}}##%2'>$$&11!4::G 
 >>  >>s   /F 	FFc                $   |t         j                  t         j                  fv r_dd l}t	        |d      rt        | |j                        ry	 t        | |j                  j                  j                  j                        ry	 yy# t        $ r Y yw xY w)Nr   
ArrowDtypepyarrow-nullablepandas-nullablenumpy)r   r]   MODINr   r+   r(   r   corer   BaseMaskedDtypeAttributeError)r    r$   r   s      r;   get_dtype_backendr     s    .//1E1EFF2|$E2==)I%	%!6!6!F!FG( H
   		s   4B 	BBc                @	   t        ||      }t        |      }t        | |j                        r|dk(  ry|dk(  ryyt        | |j                        r|dk(  ry|dk(  ryyt        | |j
                        r|dk(  ry	|dk(  ry
yt        | |j                        r|dk(  ry|dk(  ryyt        | |j                        r|dk(  ry|dk(  ryyt        | |j                        r|dk(  ry|dk(  ryyt        | |j                        r|dk(  ry|dk(  ryyt        | |j                        r|dk(  ry|dk(  ryyt        | |j                        r|dk(  ry|dk(  ryyt        | |j                        r|dk(  ry|dk(  ryy t        | |j                        r|dk(  ry!|dk(  ry"t        S t        | |j                        r|dk(  ry#|dk(  ry$y%t        | |j                         ry&t        | |j"                        rZt%        | d'd(      }t%        | d)d       }|t&        j(                  u r|d*k  rd+}|dk(  r|rd,| nd-}	d.| |	 d/S |rd0| nd-}	d1| |	 d2S t        | |j*                        r7t%        | d'd(      }
|t&        j(                  u r|d*k  rd+}|dk(  rd3|
 d/S d4|
 d2S t        | |j,                        r	 d5d l}y7t        | |j2                        rd8}t5        |      t        | |j6                        rk|t&        j(                  u rE|d9k\  r@	 d5d l}d5d l} |j>                  |jA                  tC        | jD                  |<      =            S d>| d?| d@}t5        |      S t        | |jF                        r|t&        j(                  u rh|d9k\  rc	 d5d l}d5d l} |j>                  |jI                  | jJ                  D cg c]%  }|jL                  tC        |jN                  |<      f' c}            S dA| d?| d@}t5        |      S t        | |jP                        rdB}t5        |      S dC|  }tS        |      # t0        $ r d6}Y y7w xY w# t:        $ r#}d:|  d;|j<                   }t;        |      |d }~ww xY w# t:        $ r#}d:|  d;|j<                   }t;        |      |d }~ww xY wc c}w )DNr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rQ   r   usr   )   nsz, tz=rC   z
timestamp[z
][pyarrow]z, zdatetime64[]z	duration[ztimedelta64[r   z-PyArrow>=11.0.0 is required for `Date` dtype.zdate32[pyarrow]z)Converting to Enum is not (yet) supported)r   r   zUnable to convert to z  to to the following exception: )rD   )
value_typez=Converting to List dtype is not supported for implementation z and version .z?Converting to Struct dtype is not supported for implementation z.Converting to Array dtype is not supported yetzUnknown dtype: )*r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   getattrr   r]   r   r   pyarrowModuleNotFoundErrorEnumNotImplementedErrorListr   ImportErrorr7   r   list_arrow_narwhals_to_native_dtypeinnerStructr   fieldsr"   r    Arrayr?   )r    starting_dtyper$   r%   rD   dtype_backendr   r   r   tz_partr   par7   r   excfields                   r;   r   r     sw    &nnEM!'*Fv~~6..%--v~~6..%--v||4..#--v||4..#--v||4..#--v{{3.."--v}}5..$--v}}5..$--v}}5..$--v||4..#--v}}5..$--Jv~~6..%--v'9'9: v7uk48uk48 ^222 J
 8
  L..0<l^,"G~gYjAA-9<.)rG wiq99v7uk48^222 J
 8
  L  22 ~Z0	
  ~Q/	

  v{{3	B  !v{{39!#&&v{{3^222&7P0#$
 !2=== '     P!"-y;  's++v}}5^222&7P0#$
 !2==		 &+\\	 &2E "JJ: %(/ &2	   R!"-y;  's++v||4>"3''E7
#C

} # 	BAC 	B  0-eW4TUXU\U\T]^!#&C/0.  0-eW4TUXU\U\T]^!#&C/0	sH   ,P, P= Q, 0*R,P:9P:=	Q)Q$$Q),	R5RRc           	     `   | d   j                         }| D cg c]  }t        |       }}t        |      }| |j                  |         j                  j                  }g }|dkD  }t        | |      D ]  \  }}|j                  }	|rO|dk(  rJ|j                  |j                  |	j                  d   g|z  ||	j                  |	j                               c|	j                  |ur3|j                  t        |	||j                  |j                               |j                  |	        |S c c}w )Nr   r   )r   r"   r    r#   )__native_namespace__r*   maxr   r.   zipappendrI   r1   r"   r    r2   r3   r4   )
rL   native_namespacer:   lengths
max_lengthidx	reindexedmax_length_gt_1lengths_natives
             r;   broadcast_seriesr    s+   ay557%&v!s1vvG&WJ
z*
+
:
:
@
@CI 1nO)	6##v{ '']]1%&3!"..	 (  ^^3&#$#4#4$%$6$6	 X&- *. ; 's   D+c                t    | t         v r| j                         j                  S dt          d|  }t        |      )NrE   rF   )rG   rH   to_datetimerJ   )r$   r7   s     r;   r  r    sC    33113??? 66P5QQZ[iZjknr=   c                l    dt        |       v ryt        |       j                         t        |       k7  ryy)Nr   r   r   r   )r   lower)r    s    r;   int_dtype_mapperr    s0    CJ
5zSZ'r=   c                    | j                   |j                  | j                         nd }| j                  |j                  | j                        dz   nd }| j                  }|||fS )Nr   )rc   get_locstopstep)	str_slicere   rc   r"  r#  s        r;   convert_str_slice_to_int_slicer%    s[     1:0KGOOIOO,QUE2;..2L7??9>>*Q.RVD>>D4r=   c                2   |dk(  r|dk(  r| }|S |dk(  r| dz  }|S | dz  }|S |dk(  r|dk(  r| dz  }|S |dk(  r| }|S | dz  }|S |dk(  r|dk(  r| dz  }|S |dk(  r| dz  }|S | }|S |dk(  r|dk(  r| dz  }|S |dk(  r| dz  }|S | dz  }|S d| d	}t        |      )
Nr   r     @B msr:    ʚ;zunexpected time unit zA, please report a bug at https://github.com/narwhals-dev/narwhals)r?   )r:   original_time_unitr   resultr7   s        r;   calculate_timestamp_datetimer-     sM    T!F: M9 $%ZF6 M3 )^F2 M1 
t	#YF, M+ $F( M% %ZF$ M# 
t	#]F M $YF M F M 
s	"&F M $]F M	 YF M &&8%99z{S!!r=   c                J    | dz  } |dk(  r| dz  }|S |dk(  r| dz  }|S | dz  }|S )NiQ r   r*  r   r(  r'   )r:   r   r,  s      r;   calculate_timestamp_dater0  %  sN    	F
AD]"
 M	 
d	Y M UMr=   c                   | j                   j                  j                  dk(  s|t        j                  u r^|dk  rY| j                   j                         }|D cg c]	  }||vs| }}|rt        j                  ||      | j                  dd|f   S 	 | |   S c c}w # t        $ rP}| j                   j                         }|D cg c]	  }||vs| nc c}w }}t        j                  ||      |d}~ww xY w)zsSelect columns by name.

    Prefer this over `df.loc[:, column_names]` as it's
    generally more performant.
    bry   N)
re   r    kindr   r]   tolistr   'from_missing_and_available_column_nameslocKeyError)rk   column_namesr%   r$   available_columnsxmissing_columnses           r;   select_columns_by_namer=  0  s	    	

$.///Of4L JJ--/&2Qla?P6P1lQ%MM!2  vvao&&, R  JJ--/&2Qla?P6P1lQQ!II.
	s6   	B#BB 	C8(C3	CCC33C8c                   t        | j                        | j                  t        j                  u rnt        fd | j                  g ||| j                  j                         D              rd}t        |      | j                  j                  ||||d      }|S | j                  j                  ||||dd      }|S )Nc              3  <   K   | ]  }|j                   k(    y wN)r   ).0r:  r   s     r;   	<genexpr>zpivot_table.<locals>.<genexpr>Z  s$      
L ###Ls   z=`pivot` with Categoricals is not implemented for cuDF backendF)valuesr   re   aggfuncmarginsT)rC  r   re   rD  rE  observed)r   _versionr3   r   rV   anyselectschemarC  r   _native_framepivot_table)rk   rC  r   re   aggregate_functionr7   r,  r   s          @r;   rL  rL  Q  s     ""++.F	^000 
RYY ;& ;5 ;7 ;<CCJJL
 
 RC%c**!!--& . 
  M !!--& . 
 Mr=   )r5   r   r6   r   returnztuple[pd.Series, Any])r   r   r@   r   rN  r   r@  )rK   r   r   r   r$   r   r%   tuple[int, ...]rD   r   rN  r   )r^   	list[Any]r$   r   r%   rO  rN  r   )
rs   zIterable[Any]r"   r   r   r   r$   r   rN  r   )
r|   r   r   r   r$   r   r%   rO  rN  r   )
r|   r   re   	list[str]r$   r   r%   rO  rN  r   )r|   r   r   r   r$   r   r%   rO  r}   r   rN  r   )r    r   rD   r   r3   r   rN  r   )r   r   rD   r   r$   r   rN  r   )r    r   r$   r   rN  r   )r    zDType | type[DType]r  r   r$   r   r%   rO  rD   r   rN  r   )rL   zSequence[PandasLikeSeries]rN  rP  )r$   r   rN  r   )r    r   rN  r   )r$  slicere   zpd.IndexrN  z)tuple[int | None, int | None, int | None])r:   	pd.Seriesr+  r   r   r   rN  rS  )r:   rS  r   r   rN  rS  )
rk   r   r8  zSequence[str]r%   rO  r$   r   rN  r   )rk   r   rC  rQ  r   rQ  re   rQ  rM  z
str | NonerN  r   )G
__future__r   rerW   	functoolsr   typingr   r   r   r   r	   r
   narwhals._arrow.utilsr   r  r   r   narwhals.exceptionsr   narwhals.utilsr   r   r   r   r&   r   narwhals._pandas_like.exprr   r'   r   narwhals.dtypesr   r   r   r   r   r]   rV   r   rG   PD_DATETIME_RGXcompileVERBOSEr   PA_DATETIME_RGXr   PD_DURATION_RGXr   PA_DURATION_RGXr   r<   rA   rM   r`   rm   rq   rt   r2   r   r   r   r   r  r  r  r%  r-  r0  r=  rL  r/  r=   r;   <module>rc     s(   " 	          4 ) / 3CLC9=%&G>2E  
 !bjj"**=  !bjj"**=  !bjj"**=  !bjj"**= ?#	?# #?#?#D<  #	
 %  2	'5HW:	'5HWD	'5HW4

  #	
 	(1	
11 #	1
 %1 1<3	
33 #	3
 %3 3<3	
33 #3 %	3
 3 3 299 93A9
9 9x''!(':H'
'T$ # %	
  	D F'.""&)"69""J	 % #	
 B      	 
 #  	 r=   