
    h|D                       % S SK Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SKJ
r
  S S	KrS S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  \(       a  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ r   S SKJ!r!  S SKJ"r"  S SKJ#r#  S SK$J%r%  S SK&J'r'  S SKJ(r(  \"r)S\*S'   STS jr+SUS jr,SVS jr-SWS  jr.SXS! jr/    SYS" jr0S	S	S#.         SZS$ jjr1O*S S%KJ1r1  S S&K2J0r0  S S'K2J,r,  S S(K2J/r/  S S)K2J.r.  S S*K2J-r-  S S+K2J+r+  \Rf                  r4 S[S, jr5 S\     S]S- jjr6S^S. jr7\" S/S09S_S1 j5       r8S`S2 jr9      SaS3 jr:SbS4 jr;ScS5 jr<      SdS6 jr=S7r>S8r?S9r@S:rAS;rBS<rCS=rD\> \? S>\@ S>\D S?3rES@rFSArGSBrHSCrI\ISD4\FSE4\GSF4\HSG44rJ\ASH4\BSI4\CSJ44rKS	S	S#.         SeSK jjrLSfSL jrMSgSM jrNSgSN jrO        ShSO jrP      SiSP jrQ " SQ SR\SS   5      rRg	)j    )annotations)	lru_cache)TYPE_CHECKING)Any)Iterable)Iterator)SequencecastN)_SeriesNamespace)
ShapeError)import_dtypes_module)isinstance_or_issubclass)	TypeAlias)TypeIsArrowSeries)ArrayAny)ArrayOrScalarAny)ArrayOrScalarT1)ArrayOrScalarT2)
ArrowArray)ArrowChunkedArray)	ScalarAny)DType)PythonLiteral)Versionr   ChunkedArrayStructArrayc                    g N ts    G/var/www/html/env/lib/python3.13/site-packages/narwhals/_arrow/utils.pyis_timestampr%   '   s    C    c                    g r    r!   r"   s    r$   is_durationr(   (   s    Sr&   c                    g r    r!   r"   s    r$   is_listr*   )   s    Sr&   c                    g r    r!   r"   s    r$   is_large_listr,   *   s    r&   c                    g r    r!   r"   s    r$   is_fixed_size_listr.   +   s    cr&   c                    g r    r!   r"   s    r$   is_dictionaryr0   ,   s    36r&   optionsmemory_poolc                  g r    r!   )stringspatternr2   r3   s       r$   extract_regexr7   /   s     #&r&   )r7   )r0   )r(   )r.   )r,   )r*   )r%   c                   SSK Jn  U" U SS9$ )Nr   )maybe_extract_py_scalarT)return_py_scalar)narwhals._arrow.seriesr9   )valuer9   s     r$   extract_py_scalarr=   D   s    >"54@@r&   c                   [        U [        R                  5      (       a  U $ [        U [        5      (       a  [        R                  " X5      $ [        R                  " U /U R
                  5      $ r    )
isinstancepaChunkedArraylistchunked_arraytype)arrdtypes     r$   rC   rC   J   sQ     #r''
#t++sxx00r&   c                V    [         R                  " XR                  R                  5      $ )ztCreate a strongly-typed Array instance with all elements null.

Uses the type of `series`, without upseting `mypy`.
)r@   nullsnativerD   )nseriess     r$   
nulls_likerL   U   s    
 88A}}))**r&      )maxsizec                   [        U5      n[        R                  R                  U 5      (       a  UR	                  5       $ [        R                  R                  U 5      (       a  UR                  5       $ [        R                  R                  U 5      (       a  UR                  5       $ [        R                  R                  U 5      (       a  UR                  5       $ [        R                  R                  U 5      (       a  UR                  5       $ [        R                  R                  U 5      (       a  UR                  5       $ [        R                  R                  U 5      (       a  UR!                  5       $ [        R                  R#                  U 5      (       a  UR%                  5       $ [        R                  R'                  U 5      (       a  UR)                  5       $ [        R                  R+                  U 5      (       a  UR-                  5       $ [        R                  R/                  U 5      (       a  UR1                  5       $ [        R                  R3                  U 5      (       dK  [        R                  R5                  U 5      (       d'  [7        [        R                  SS 5      " U 5      (       a  UR9                  5       $ [        R                  R;                  U 5      (       a  UR=                  5       $ [?        U 5      (       a$  URA                  U RB                  U RD                  S9$ [G        U 5      (       a  URI                  U RB                  S9$ [        R                  RK                  U 5      (       a  URM                  5       $ [        R                  RO                  U 5      (       a  URQ                  [S        U RT                  5       Vs/ s HQ  nURW                  U RY                  U5      RZ                  []        U RY                  U5      R^                  U5      5      PMS     sn5      $ [a        U 5      (       d  [c        U 5      (       a%  URe                  []        U Rf                  U5      5      $ [i        U 5      (       a0  URk                  []        U Rf                  U5      U Rl                  5      $ [        R                  Ro                  U 5      (       a  URq                  5       $ [        R                  Rs                  U 5      (       d$  [        R                  Ru                  U 5      (       a  URw                  5       $ [        R                  Ry                  U 5      (       a  UR{                  5       $ UR}                  5       $ s  snf )Nis_string_viewc                    g)NFr!   )_s    r$   <lambda>*native_to_narwhals_dtype.<locals>.<lambda>{   s    r&   )	time_unit	time_zone)rU   )?r   r@   typesis_int64Int64is_int32Int32is_int16Int16is_int8Int8	is_uint64UInt64	is_uint32UInt32	is_uint16UInt16is_uint8UInt8
is_booleanBoolean
is_float64Float64
is_float32Float32	is_stringis_large_stringgetattrString	is_date32Dater%   Datetimeunittzr(   Durationr0   Categorical	is_structStructrange
num_fieldsFieldfieldnamenative_to_narwhals_dtyperD   r*   r,   List
value_typer.   Array	list_size
is_decimalDecimal	is_time32	is_time64Time	is_binaryBinaryUnknown)rF   versiondtypesis       r$   r   r   ]   s   !'*F	xx||~	xx||~	xx||~	xx{{}	xx%  }}	xx%  }}	xx%  }}	xx||~	xx5!!~~	xx5!!~~	xx5!!~~ 	5!!88##E**288-?FF}}	xx%  {{}EuxxHH544	xxe$$!!##	xx%  }} u//0
 1A	 KKN'',U[[^-@-@'J 1
 	
 u~~u--{{3E4D4DgNOO%  ||$U%5%5w?
 	
 
xx5!!~~	xx%  BHH$6$6u$=$={{}	xx%  }}>>)s   AVc                	   [        U5      n[        XR                  5      (       a  Sn[        U5      e[        XR                  5      (       a  [
        R                  " 5       $ [        XR                  5      (       a  [
        R                  " 5       $ [        XR                  5      (       a  [
        R                  " 5       $ [        XR                  5      (       a  [
        R                  " 5       $ [        XR                  5      (       a  [
        R                  " 5       $ [        XR                  5      (       a  [
        R                   " 5       $ [        XR"                  5      (       a  [
        R$                  " 5       $ [        XR&                  5      (       a  [
        R(                  " 5       $ [        XR*                  5      (       a  [
        R,                  " 5       $ [        XR.                  5      (       a  [
        R0                  " 5       $ [        XR2                  5      (       a  [
        R4                  " 5       $ [        XR6                  5      (       a  [
        R8                  " 5       $ [        XR:                  5      (       a=  [
        R<                  " [
        R(                  " 5       [
        R4                  " 5       5      $ [        XR>                  5      (       a)  [
        R@                  " U RB                  U RD                  S9$ [        XRF                  5      (       a   [
        RH                  " U RB                  5      $ [        XRJ                  5      (       a  [
        RL                  " 5       $ [        XRN                  5      (       a&  [
        RP                  " [S        U RT                  US9S9$ [        XRV                  5      (       aO  [
        RX                  " U RZ                   Vs/ s H#  nUR\                  [S        UR^                  US94PM%     sn5      $ [        XR`                  5      (       a4  [S        U RT                  US9nU Rb                  n[
        RP                  " XVS9$ [        XRd                  5      (       a  [
        Rf                  " S5      $ [        XRh                  5      (       a  [
        Rj                  " 5       $ SU  3n[m        U5      es  snf )Nz(Casting to Decimal is not supported yet.)rv   )r   )r   )r   nszUnknown dtype: )7r   r   r   NotImplementedErrorrk   r@   float64rm   float32rY   int64r[   int32r]   int16r_   int8ra   uint64rc   uint32re   uint16rg   uint8rq   stringri   bool_rx   
dictionaryrt   	timestamprU   rV   rw   durationrs   date32r   list_narwhals_to_native_dtypeinnerrz   structfieldsr   rF   r   sizer   time64r   binaryAssertionError)rF   r   r   msgr~   r   r   s          r$   r   r      s   !'*F~~668!#&&~~66zz|~~66zz|||44xxz||44xxz||44xxz{{33wwy}}55yy{}}55yy{}}55yy{||44xxz}}55yy{~~66xxz'9'9::}}RYY["))+6677||EOO@@77{{5??++{{33yy{{{33xx#;EKKQX#YZZ}}55yy #\\)E 5ekk7ST)
 	
  ||44(gFJJ	xx33{{33yy}}55yy{E7
#C

s   "*Sc                d   SSK Jn  SSKJn  Uc   U R                  [        SU R                  S94$ [        X5      (       a  [        $ [        X5      (       a  U R                  (       a,  UR                  (       d  U R                  S   UR                  4$ UR                  (       a  U R                  UR                  S   4$ U R                  UR                  4$ [        U[        5      (       a  Sn[        U5      eU R                  [        U[        R                  5      (       a  U4$ [        U5      4$ )a6  Extract native objects in binary  operation.

If the comparison isn't supported, return `NotImplemented` so that the
"right-hand-side" operation (e.g. `__radd__`) can be tried.

If one of the two sides has a `_broadcast` flag, then extract the scalar
underneath it so that PyArrow can do its own broadcasting.
r   )ArrowDataFramer   NrD   z$Expected Series or scalar, got list.)narwhals._arrow.dataframer   r;   r   rI   lit_typer?   NotImplemented
_broadcastrB   	TypeErrorr@   Scalar)lhsrhsr   r   r   s        r$   extract_nativer      s     92
{zz3t#))444#&&###>>#..::a=#**,,>>::szz!},,zz3::%%#t4n::jbii88sFFc#hFFr&   c            
     D  ^ U  Vs/ s H  n[        U5      PM     nn[        U5      m[        U4S jU 5       5      nU(       a  U $ / nU  H  nUR                  (       a  UR                  S   nUR
                  S:  a!  [        US5      (       a  UR                  5       nUR                  UR                  [        R                  " U/T-  UR                  S95      5        M  [        U5      =nT:w  a  ST SU S3n[        U5      eUR                  U5        M     U$ s  snf )	Nc              3  ,   >#    U  H	  oT:H  v   M     g 7fr    r!   ).0_len
max_lengths     r$   	<genexpr>.align_series_full_broadcast.<locals>.<genexpr>   s     ;74J&7s   r   )   as_pyr   zExpected object of length z, got .)lenmaxallr   rI   _backend_versionhasattrr   append_with_nativer@   arrayr   r   )	rK   slengths	fast_pathreshapedr<   
actual_lenr   r   s	           @r$   align_series_full_broadcastr      s    %&v!s1vvG&WJ;7;;IH<<HHQKE!!E)geW.E.EOOANN288UGj4Hqww+WXY!!f$
32:,fZLPQR o%OOA  O) 's   Dc                X   [         R                  R                  U R                  5      (       GaN  [         R                  R                  UR                  5      (       Ga  [        R
                  " X5      n[         R                  R                  UR                  5      (       a  [        R                  " [        R                  " X!5      U 5      n[        R                  " [        R                  " X5      [        SUR                  S95      n[        R                  " [        R                  " X45      [        R                  " U[        SUR                  S95      U5      nOUnUR                  U R                  5      nU$ [        R                   " X5      n[        R"                  " U5      nU$ )Nr   r      )r@   rW   
is_integerrD   pcdivide_checkedis_signed_integer	not_equalmultiplylessbit_wise_xorr   if_elseand_subtractr   dividefloor)leftrightdividedhas_remainderhas_one_negative_operandresults         r$   floordiv_compatr     s    
xx499%%"((*=*=ejj*I*I##D088%%gll33LLW)DdKM')ww,c!',,.G($ ZZ@GS%>?F FTYY' M ))D('"Mr&   c                d   [         R                  R                  U R                  5      (       a  [         R                  R                  UR                  5      (       aR  [        R
                  " U [         R                  " 5       SS9[        R
                  " U[         R                  " 5       SS94$ X4$ )NF)safe)r@   rW   r   rD   r   r   r   )arrow_array	pa_objects     r$   cast_for_truedivr   /  s}     
xx;++,,1D1DY^^1T1T ww{BJJLu=rwwrzz|%@
 
 	
 !!r&   z/(?P<date>\d{1,4}[-/.]\d{1,2}[-/.]\d{1,4}|\d{8})z(?P<sep>\s|T)z'(?P<time>\d{2}:\d{2}(?::\d{2})?|\d{6}?)z^(?P<hms>\d{2}:\d{2}:\d{2})$z^(?P<hm>\d{2}:\d{2})$z^(?P<hms_no_sep>\d{6})$z(?P<tz>Z|[+-]\d{2}:?\d{2})?z?$zw^(?P<year>(?:[12][0-9])?[0-9]{2})(?P<sep1>[-/.])(?P<month>0[1-9]|1[0-2])(?P<sep2>[-/.])(?P<day>0[1-9]|[12][0-9]|3[01])$zw^(?P<day>0[1-9]|[12][0-9]|3[01])(?P<sep1>[-/.])(?P<month>0[1-9]|1[0-2])(?P<sep2>[-/.])(?P<year>(?:[12][0-9])?[0-9]{2})$zw^(?P<month>0[1-9]|1[0-2])(?P<sep1>[-/.])(?P<day>0[1-9]|[12][0-9]|3[01])(?P<sep2>[-/.])(?P<year>(?:[12][0-9])?[0-9]{2})$zY^(?P<year>(?:[12][0-9])?[0-9]{2})(?P<month>0[1-9]|1[0-2])(?P<day>0[1-9]|[12][0-9]|3[01])$%Y%m%dz%Y-%m-%dz%d-%m-%Yz%m-%d-%Yz%H:%M:%Sz%H:%Mz%H%M%Sc         	     j    [         R                  " [        XX#S9R                  5      n[	        SU5      $ )Nr1   pa.StructArray)r@   concat_arraysr7   chunksr   )r5   r6   r2   r3   rs        r$   _extract_regex_concat_arraysr   Z  s4     	gQXX	A  !$$r&   c                L   [        U R                  5       R                  SS5      [        S9n[        R
                  " UR                  5       5      R                  5       (       d  Sn[        U5      eUR                  S5      nUR                  S5      n[        R                  " [        R                  " U5      5      R                  5       S:  a  Sn[        U5      e[        R                  " [        R                  " U5      5      R                  5       S:  a  S	n[        U5      e[        [        S
UR                  S5      5      5      n[        [        S
UR                  S5      5      5      nUS   R                  5       nUS   R                  5       (       a  SOSnU U U U 3$ )z.Try to infer datetime format from StringArray.r   
   r6   zUnable to infer datetime format, provided format is not supported. Please report a bug to https://github.com/narwhals-dev/narwhals/issuesseprv   r   z@Found multiple separator values while inferring datetime format.z?Found multiple timezone values while inferring datetime format.pc.StringArraydatetimez%z )r   	drop_nullsliceFULL_REr   r   is_validr   r   r~   countunique
ValueError_parse_date_formatr   _parse_time_format)	rE   matchesr   
separatorsrv   
date_value
time_value	sep_valuetz_values	            r$   parse_datetime_formatr  h  sP   *3==?+@+@B+GQXYG66'""$%++--U 	 "#&&u%J	t	B 
xx		*%&,,.2Po	xx		"$$&*Oo#D)97==;P$QRJ#D)97==;P$QRJ1##%I!u{{}}t"H\)ZL
;;r&   c                   [          GHp  u  p[        R                  " XS9nUS:X  a;  [        R                  " UR	                  5       5      R                  5       (       a  Us  $ [        R                  " UR	                  5       5      R                  5       (       d  M  [        R                  " [        R                  " UR                  S5      =n5      5      R                  5       S:X  d  M  [        R                  " [        R                  " UR                  S5      =n5      5      R                  5       S:X  d  GM3  US   R                  5       =oeS   R                  5       :X  d  GM_  UR                  SU5      s  $    Sn[        U5      e)	Nr   r   sep1r   sep2r   -zgUnable to infer datetime format. Please report a bug to https://github.com/narwhals-dev/narwhals/issues)DATE_FORMATSr   r7   r   r   r   r  r  r~   replacer  )rE   date_rgxdate_fmtr  r  r  date_sep_valuer   s           r$   r  r    s   *l""39xBFF7+;+;+=$>$D$D$F$FOFF7##%&,,..7==+@#@4ABHHJaO7==+@#@4ABHHJaO#'7==?2Aw}}F##C88 +	Q  S/r&   c                    [          HT  u  p[        R                  " XS9n[        R                  " UR	                  5       5      R                  5       (       d  MR  Us  $    g)Nr   r   )TIME_FORMATSr   r7   r   r   r   )rE   time_rgxtime_fmtr  s       r$   r  r    sJ    *""3966'""$%++--O + r&   c               J   U(       d  U S4$ US-  nX1S-  S:H  -
  n[         R                  " S/U-  U R                  S9n[         R                  " S/U-  U R                  S9n[         R                  " U/U R                  R
                  QUP5      nU R                  U5      X4-   4$ )aY  Pad series with None values on the left and/or right side, depending on the specified parameters.

Arguments:
    series: The input ArrowSeries to be padded.
    window_size: The desired size of the window.
    center: Specifies whether to center the padding or not.

Returns:
    A tuple containing the padded ArrowSeries and the offset value.
r      Nr   )r@   r   r   r   rI   r   r   )rK   window_sizecenteroffset_leftoffset_rightpad_left	pad_rightconcats           r$   
pad_seriesr#    s     qy"K/Q"67Lxx,6<<@H$,.V\\BIxJ&--*>*>J	JKFv&(BBBr&   c                   ^ [        S U 5       5      (       d  [        R                  " 5       O[        R                  " 5       mU4S jU 5       [	        U T5      4$ )Nc              3  t   #    U  H.  n[         R                  R                  UR                  5      v   M0     g 7fr    )r@   rW   ro   rD   )r   cas     r$   r   2cast_to_comparable_string_types.<locals>.<genexpr>  s&     N~288++BGG44~s   68c              3  D   >#    U  H  oR                  T5      v   M     g 7fr    r
   )r   r&  rF   s     r$   r   r'    s     4^rGGENN^s    )anyr@   r   large_stringr   )	separatorchunked_arraysrF   s     @r$   cast_to_comparable_string_typesr-    sI     N~NNN 			__ 

 5^4c)U6KKKr&   c                      \ rS rSrSS jrSrg)ArrowSeriesNamespacei  c                   Xl         g r    _compliant_series)selfrK   s     r$   __init__ArrowSeriesNamespace.__init__  s    !'r&   r1  N)rK   r   returnNone)__name__
__module____qualname____firstlineno__r4  __static_attributes__r!   r&   r$   r/  r/    s    (r&   r/  )r   r   )r#   r   r6  z"TypeIs[pa.TimestampType[Any, Any]])r#   r   r6  zTypeIs[pa.DurationType[Any]])r#   r   r6  zTypeIs[pa.ListType[Any]])r#   r   r6  zTypeIs[pa.LargeListType[Any]])r#   r   r6  z&TypeIs[pa.FixedSizeListType[Any, Any]])r#   r   r6  z(TypeIs[pa.DictionaryType[Any, Any, Any]])
r6   strr5   r   r2   r   r3   r   r6  r   )r<   r   r6  r   r    )rE   z*ArrayAny | list[Iterable[Any]] | ScalarAnyrF   zpa.DataType | Noner6  r   )rJ   intrK   r   r6  r   )rF   pa.DataTyper   r   r6  r   )rF   zDType | type[DType]r   r   r6  r?  )r   r   r   z'ArrowSeries | PythonLiteral | ScalarAnyr6  zCtuple[ArrowChunkedArray | ScalarAny, ArrowChunkedArray | ScalarAny])rK   r   r6  zSequence[ArrowSeries])r   r   r   r   r6  r   )r   r   r   r   r6  z'tuple[ArrayOrScalarT1, ArrayOrScalarT2])
r6   r=  r5   r   r2   r   r3   r   r6  r   )rE   r   r6  r=  )rE   r   r6  r=  )rK   r   r  r>  r  boolr6  ztuple[ArrowSeries, int])r,  r   r+  r=  r6  z2tuple[Iterator[ArrowChunkedArray], pa.Scalar[Any]])S
__future__r   	functoolsr   typingr   r   r   r   r	   r   pyarrowr@   pyarrow.computecomputer   narwhals._compliant.seriesr   narwhals.exceptionsr   narwhals.utilsr   r   typing_extensionsr   r   r;   r   narwhals._arrow.typingr   r   r   r   r   r   r   narwhals.dtypesr   narwhals.typingr   r   r   __annotations__r%   r(   r*   r,   r.   r0   r7   pyarrow.typesscalarr   r=   rC   rL   r   r   r   r   r   r   DATE_RESEP_RETIME_REHMS_REHM_REHMS_RE_NO_SEPTZ_REr   YMD_REDMY_REMDY_REYMD_RE_NO_SEPr  r  r   r  r  r  r#  r-  r/  r!   r&   r$   <module>r\     s   "           7 * / 3+(2/766180%-& *;Y:G@8CQ77	17 & &"&
 & & 
!& .+)0+%*ii !A RV1	31<N11+ 2> >B8vG	GBGHGD24" "-<","& =	
4	( *%Yvhay%
3 
D 
D 
Dl HZZZ	 $ug&68QR % %%
 % % %<>(CC),C6:CC0
L&
L
L 8
L(+,NO (r&   