
    Wh>                    b   U d dl mZ d dlmZ d dlmZmZmZ d dlZ	d dl
mZ d dlmZ d dlmZmZ erod dlmZmZmZ d dl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& d dl'm(Z(m)Z) e Z*de+d<   dSdZ,dTdZ-dUdZ.dVdZ/dWdZ0dXdZ1ddd	 	 	 	 	 	 	 	 	 dYdZ2nd dl
m2Z2 d dl3m1Z1m-Z-m0Z0m/Z/m.Z.m,Z, ddddddd d!d"d#d$
Z4d%e+d&<   e	jj                  Z6	 dZd'Z7d[d(Z8	 d\	 	 	 	 	 d]d)Z9d^d*Z:d_d+Z; ed,-      d`d.       Z<ejz                  j|                  Z>i e>j~                   e	j                         e>j                   e	j                         e>j                   e	j                         e>j                   e	j                         e>j                   e	j                         e>j                   e	j                   e	j                          e	j                               e>j                   e	j                         e>j                   e	j                  d/      e>j                   e	j                         e>j                   e	j                         e>j                   e	j                         e>j                   e	j                         e>j                   e	j                         e>j                   e	j                         e>j                   e	j                         e>j                   e	j                         Z_d0e+d1<   e>j                  e>j                  fZbdad2Zc	 	 	 	 	 	 dbd3Zddcd4Ze	 	 	 	 	 	 ddd5Zfd6Zgd7Zhd8Zid9Zjd:Zkd;Zld<Zmeg eh d=ei d=em d>Znd?Zod@ZpdAZqdBZrerdCfeodDfepdEfeqdFffZsejdGfekdHfeldIffZtddd	 	 	 	 	 	 	 	 	 dedJZudfdKZvdgdLZwdgdMZx	 	 	 	 	 	 	 	 dhdNZy	 	 	 	 	 	 didOZz G dP dQedR         Z{y)j    )annotations)	lru_cache)TYPE_CHECKINGAnycastN)EagerSeriesNamespace)Versionisinstance_or_issubclass)IterableIteratorMapping)	TypeAliasTypeIsArrowSeries)ArrayAnyArrayOrScalarArrayOrScalarT1ArrayOrScalarT2ChunkedArrayAnyNativeIntervalUnit	ScalarAny)IntervalUnit)DType)	IntoDTypePythonLiteralr   ChunkedArrayStructArrayc                     y N ts    O/var/www/html/jupyter_env/lib/python3.12/site-packages/narwhals/_arrow/utils.pyis_timestampr$   #           c                     y r   r    r!   s    r#   is_durationr(   $   r%   r&   c                     y r   r    r!   s    r#   is_listr*   %   r%   r&   c                     y r   r    r!   s    r#   is_large_listr,   &   r%   r&   c                     y r   r    r!   s    r#   is_fixed_size_listr.   '   r%   r&   c                     y r   r    r!   s    r#   is_dictionaryr0   (   r%   r&   optionsmemory_poolc                   y r   r    )stringspatternr2   r3   s       r#   extract_regexr7   )   s     #&r&   )r7   )r0   r(   r.   r,   r*   r$   yearquartermonthdayhourminutesecondmillisecondmicrosecond
nanosecond)
yqmodhmsmsusnsz)Mapping[IntervalUnit, NativeIntervalUnit]
UNITS_DICTc               "    ddl m}  || d      S )Nr   )maybe_extract_py_scalarT)return_py_scalar)narwhals._arrow.seriesrN   )valuerN   s     r#   extract_py_scalarrR   M   s    >"54@@r&   c                t    t        | t        j                  t        j                  t        j                  f      S )z-Return True for any base `pyarrow` container.)
isinstancepaChunkedArrayArrayScalar)objs    r#   is_array_or_scalarrZ   S   s"    cBOORXXryyABBr&   c                   t        | t        j                        r| S t        | t              rt        j                  | |      S t        j                  | g|      S r   )rT   rU   rV   listchunked_array)arrdtypes     r#   r]   r]   X   sI     #r'
#tU++SE5))r&   c                V    t        j                  | |j                  j                        S )z|Create a strongly-typed Array instance with all elements null.

    Uses the type of `series`, without upseting `mypy`.
    )rU   nullsnativetype)nseriess     r#   
nulls_likerf   b   s    
 88Av}}))**r&   c               .    t        j                  d|       S )Nr   )rU   repeat)rd   s    r#   zerosri   j   s    99Q?r&      )maxsizec                
   |j                   }t        j                  j                  |       r|j	                         S t        j                  j                  |       r|j                         S t        j                  j                  |       r|j                         S t        j                  j                  |       r|j                         S t        j                  j                  |       r|j                         S t        j                  j                  |       r|j                         S t        j                  j                  |       r|j!                         S t        j                  j#                  |       r|j%                         S t        j                  j'                  |       r|j)                         S t        j                  j+                  |       r|j-                         S t        j                  j/                  |       r|j1                         S t        j                  j3                  |       sAt        j                  j5                  |       s" t7        t        j                  dd       |       r|j9                         S t        j                  j;                  |       r|j=                         S t?        |       r'|jA                  | jB                  | jD                        S tG        |       r|jI                  | jB                        S t        j                  jK                  |       r|jM                         S t        j                  jO                  |       r~|jQ                  tS        | jT                        D cg c]P  }|jW                  | jY                  |      jZ                  t]        | jY                  |      j^                  |            R c}      S ta        |       stc        |       r%|je                  t]        | jf                  |            S ti        |       r0|jk                  t]        | jf                  |      | jl                        S t        j                  jo                  |       r|jq                         S t        j                  js                  |       st        j                  ju                  |       r|jw                         S t        j                  jy                  |       r|j{                         S |j}                         S c c}w )Nis_string_viewc                     y)NFr    )_s    r#   <lambda>z*native_to_narwhals_dtype.<locals>.<lambda>   r%   r&   )	time_unit	time_zone)rq   )?dtypesrU   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_dtyperc   r*   r,   List
value_typer.   rW   	list_size
is_decimalDecimal	is_time32	is_time64Time	is_binaryBinaryUnknown)r_   versionrs   is       r#   r   r   n   sw   ^^F	xx||~	xx||~	xx||~	xx{{}	xx% }}	xx% }}	xx% }}	xx||~	xx5!~~	xx5!~~	xx5!~~ 	5!88##E*?7288-?F}}	xx% {{}EuxxHH544	xxe$!!##	xx% }} u//0
 	 KKN'',U[[^-@-@'J
 	
 u~u-{{3E4D4DgNOO% ||$U%5%5w?
 	
 
xx5!~~	xx% BHH$6$6u$={{}	xx% }}>>)s   :ATrK   z!Mapping[type[DType], pa.DataType]NW_TO_PA_DTYPESc           
        |j                   }| j                         }t        j                  |      x}r|S t	        | |j
                        rE| j                  }| j                  x}rt        j                  ||      S t        j                  |      S t	        | |j                        rt        j                  | j                        S t	        | |j                        r+t        j                  t        | j                  |            S t	        | |j                         rNt        j"                  | j$                  D cg c]%  }|j&                  t        |j(                  |      f' c}      S t	        | |j*                        r:t        | j                  |      }| j,                  }	t        j                  ||	      S t/        |t0              rd|j2                   d}
t5        |
      d|  }
t7        |
      c c}w )N)r   )r   )r   zConverting to z$ dtype is not supported for PyArrow.zUnknown dtype: )rs   	base_typer   getr
   r   rq   rr   rU   	timestampr   durationr   list_narwhals_to_native_dtypeinnerr   structfieldsr   r_   rW   size
issubclassUNSUPPORTED_DTYPES__name__NotImplementedErrorAssertionError)r_   r   rs   r   pa_typer   r   r   r   r   msgs              r#   r   r      s   ^^F!I!%%i00w0v705*?"*?r||D"%XbllSWFXXv7{{5??++v{{3xx#;EKKQX#YZZv}}5yy #\\ 5ekk7ST
 	
  v||4(gFJJ	xx33)/0y1122VW!#&&E7
#C

s   :*G6c                   ddl m} |#| j                  t        d| j                        fS t        ||      rr| j                  r'|j                  s| j                  d   |j                  fS |j                  r| j                  |j                  d   fS | j                  |j                  fS t        |t              rd}t        |      | j                  t        |t        j                        r|fS t        |      fS )aJ  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   r   Nrc   z$Expected Series or scalar, got list.)rP   r   rb   lit_typerT   
_broadcastr\   	TypeErrorrU   rX   )lhsrhsr   r   s       r#   extract_nativer      s     3
{zz3t#))444#{#>>#..::a=#**,,>>::szz!},,zz3::%%#t4n::jbii8sFFc#hFFr&   c          
     <   t         j                  j                  | j                        rFt         j                  j                  |j                        rt	        j
                  | |      }t         j                  j                  |j                        rt        d|j                        }t	        j                  t	        j                  ||      |       }t	        j                  t	        j                  | |      t        d|            }t	        j                  t	        j                  ||      t	        j                  |t        d|            |      }n|}|j                  | j                        }|S t	        j                   | |      }t	        j"                  |      }|S )Nzpa._lib.Int64Typer      )rU   rt   
is_integerrc   pcdivide_checkedis_signed_integerr   	not_equalmultiplylessbit_wise_xorr   if_elseand_subtractdividefloor)leftrightdivideddiv_typehas_remainderhas_one_negative_operandresults          r#   floordiv_compatr     s'    
xx499%"((*=*=ejj*I##D%0 88%%gll3/>HLLWe)DdKM')wwe,c!X.>($ ZZ'?@GSH%56F FTYY' M ))D%('"Mr&   c                B   t         j                  j                  | j                        rst         j                  j                  |j                        rJ| j	                  t        j
                         d      |j	                  t        j
                         d      fS | |fS )NF)safe)rU   rt   r   rc   r   float64)arrow_array	pa_objects     r#   cast_for_truedivr     s     
xx;++,1D1DY^^1T 

599>>JJLu <J <
 
 	
 	!!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              r    t        j                  t        | |||      j                        }t	        d|      S )Nr1   pa.StructArray)rU   concat_arraysr7   chunksr   )r5   r6   r2   r3   rs        r#   _extract_regex_concat_arraysr   I  s8     	gw[QXX	A  !$$r&   c                0   t        | j                         j                  dd      t              }t	        j
                  |j                               j                         sd}t        |      |j                  d      }|j                  d      }t	        j                  t	        j                  |            j                         dkD  rd}t        |      t	        j                  t	        j                  |            j                         dkD  rd	}t        |      t        t        d
|j                  d                  }t        t        d
|j                  d                  }|d   j                         }|d   j                         rdnd}| | | | S )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sepr   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   allis_validas_pyr   r   countunique
ValueError_parse_date_formatr   _parse_time_format)	r^   matchesr   
separatorsr   
date_value
time_value	sep_valuetz_values	            r#   parse_datetime_formatr  W  sK   *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                   t         D ]]  \  }}t        j                  | |      }|dk(  r5t        j                  |j	                               j                         r|c S t        j                  |j	                               j                         st        j                  t        j                  |j                  d      x}            j                         dk(  st        j                  t        j                  |j                  d      x}            j                         dk(  s!|d   j                         x}|d   j                         k(  sL|j                  d|      c S  d}t        |      )	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   )r^   date_rgxdate_fmtr   r  r  date_sep_valuer   s           r#   r   r   v  s   * 
9(""39xBFF7+;+;+=$>$D$D$FOFF7##%&,,.7==+@#@4ABHHJaO7==+@#@4ABHHJaO#'7==?2tAw}}F##C88
9	Q  S/r&   c                    t         D ]Q  \  }}t        j                  | |      }t        j                  |j	                               j                         sO|c S  y)Nr   r   )TIME_FORMATSr   r7   r   r   r   )r^   time_rgxtime_fmtr   s       r#   r   r     sP    * (""3966'""$%++-O r&   c               J   |s| dfS |dz  }||dz  dk(  z
  }t        j                  dg|z  | j                        }t        j                  dg|z  | j                        }t        j                  |g| j                  j
                  |      }| j                  |      ||z   fS )au  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   )rU   arrayr   r   rb   r   _with_native)re   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&l(BBBr&   c                    t        d |D              st        j                         nt        j                         fd|D        t	        |       fS )Nc              3  n   K   | ]-  }t         j                  j                  |j                         / y wr   )rU   rt   r   rc   ).0cas     r#   	<genexpr>z2cast_to_comparable_string_types.<locals>.<genexpr>  s#     N288++BGG4Ns   35c              3  @   K   | ]  }|j                          y wr   )r   )r!  r"  r_   s     r#   r#  z2cast_to_comparable_string_types.<locals>.<genexpr>  s     4rBGGEN4s   )anyrU   stringlarge_stringr   )	separatorchunked_arraysr_   s     @r#   cast_to_comparable_string_typesr*    sF     N~NN 			__ 

 5^4c)U6KKKr&   c                      e Zd Zy)ArrowSeriesNamespaceN)r   
__module____qualname__r    r&   r#   r,  r,    s    r&   r,  )r   r   )r"   r   returnz"TypeIs[pa.TimestampType[Any, Any]])r"   r   r/  zTypeIs[pa.DurationType[Any]])r"   r   r/  zTypeIs[pa.ListType[Any]])r"   r   r/  zTypeIs[pa.LargeListType[Any]])r"   r   r/  z&TypeIs[pa.FixedSizeListType[Any, Any]])r"   r   r/  z(TypeIs[pa.DictionaryType[Any, Any, Any]])
r6   strr5   r   r2   r   r3   r   r/  r   )rQ   r   r/  r   )rY   r   r/  zTypeIs[ArrayOrScalar]r   )r^   z#ArrayOrScalar | list[Iterable[Any]]r_   zpa.DataType | Noner/  r   )rd   intre   r   r/  r   )rd   r1  r/  zpa.Int64Array)r_   pa.DataTyper   r	   r/  r   )r_   r   r   r	   r/  r2  )r   r   r   z'ArrowSeries | PythonLiteral | ScalarAnyr/  z?tuple[ChunkedArrayAny | ScalarAny, ChunkedArrayAny | ScalarAny])r   r   r   r   r/  r   )r   r   r   r   r/  z'tuple[ArrayOrScalarT1, ArrayOrScalarT2])
r6   r0  r5   r   r2   r   r3   r   r/  r   )r^   r   r/  r0  )r^   r   r/  r0  )re   r   r  r1  r  boolr/  ztuple[ArrowSeries, int])r)  r   r(  r0  r/  z+tuple[Iterator[ChunkedArrayAny], ScalarAny])|
__future__r   	functoolsr   typingr   r   r   pyarrowrU   pyarrow.computecomputer   narwhals._compliantr   narwhals._utilsr	   r
   collections.abcr   r   r   typing_extensionsr   r   rP   r   narwhals._arrow.typingr   r   r   r   r   r   r   narwhals._durationr   narwhals.dtypesr   narwhals.typingr   r   r   __annotations__r$   r(   r*   r,   r.   r0   r7   pyarrow.typesrL   scalarr   rR   rZ   r]   rf   ri   r   MAINrs   r   r   r   float32r   binaryr   r&  r   bool_r   
dictionaryuint32r   date32r   time64r|   int8rz   int16rx   int32rv   int64r   uint8r   uint16r   r~   uint64r   r   Objectr   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   "  + +   4 =;;32   0%8 *9Y8G@8CQN & & &
 & & 
!& .  
	
				


9
5  	ii !AC KO*	,*5G**+ 2> >B 
		6
NNJBJJL6
NNJBJJL6 MM9299;6 MM9299;	6
 NNHBHHJ6 ibiik9299;?6 KK6 KK46 KK6 LL("((*6 LL("((*6 LL("((*6 LL("((*6 MM9299;6 MM9299;6  MM9299;!62 $ nnfmm4 <G	GBGDG<:" "-<","$ =	
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14	L0	L X/0PQ Wr&   