
    /_iQ                    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mZ eryd dlmZmZmZ d dl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$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<   dedZ0dfdZ1dgdZ2dhdZ3didZ4djdZ5ddd	 	 	 	 	 	 	 	 	 dkdZ6nd dl
m6Z6 d dl7m5Z5m1Z1m4Z4m3Z3m2Z2m0Z0 ejp                  js                         Z:	 dddddd d!d"d#d$d%
Z;d&e/d'<   e	jx                  Z=	 dld(Z>dmd)Z?	 dn	 	 	 	 	 dod*Z@dpd+ZA	 dn	 	 	 	 	 	 	 dqd,ZBdrd-ZCdsd.ZD ed/0      dsd1       ZEej                  j                  ZGi eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                   e	j                          e	j                               eGj                   e	j                         eGj                   e	j                  d2      eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         eGj                   e	j                         Zhd3e/d4<   eGj                  eGj                  fZkdtd5Zl	 	 	 	 	 	 dud6Zmdvd7Zn	 	 	 	 	 	 dwd8Zod9Zpd:Zqd;Zrd<Zsd=Ztd>Zud?Zvep eq d@er d@ev dAZwdBZxdCZydDZzdEZ{e{dFfexdGfeydHfezdIffZ|esdJfetdKfeudLffZ}ddd	 	 	 	 	 	 	 	 	 dxdMZ~dydNZdzdOZdzdPZ	 	 	 	 	 	 	 	 d{dQZ	 	 	 	 	 	 d|dRZe:dSk\  rdTdUidTdVidTdWidXZdYe/dZ<   nd[d\id[d\id[d]idXZ	 d}	 	 	 	 	 d~d^Z G d_ d`eda         ZddbZ	 	 	 	 	 	 ddcZ	 	 	 	 	 	 	 	 dddZy)    )annotations)	lru_cache)TYPE_CHECKINGAnycastN)EagerSeriesNamespace)ImplementationVersionisinstance_or_issubclass)IterableIteratorMapping)Literal)	TypeAliasTypeIsArrowSeries)	ArrayAnyArrayOrScalarArrayOrScalarT1ArrayOrScalarT2ChunkedArrayAny
IncompleteNativeIntervalUnitPromoteOptions	ScalarAny)IntervalUnit)DType)	IntoDTypePythonLiteralr   ChunkedArrayStructArrayc                     y N ts    T/var/www/html/land_sniper/venv/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_listr0   )   r)   r*   c                     y r#   r$   r%   s    r'   is_fixed_size_listr2   *   r)   r*   c                     y r#   r$   r%   s    r'   is_dictionaryr4   +   r)   r*   optionsmemory_poolc                   y r#   r$   )stringspatternr6   r7   s       r'   extract_regexr;   ,   s     #&r*   )r;   )r4   r,   r2   r0   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.seriesrR   )valuerR   s     r'   extract_py_scalarrV   S   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_scalarr^   Y   s"    cBOORXXryyABBr*   c                   t        | t        j                        r| S t        | t              rt        j                  | |      S t        j                  | g|      S r#   )rX   rY   rZ   listchunked_array)arrdtypes     r'   ra   ra   ^   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`.
    )rY   nullsnativetype)nseriess     r'   
nulls_likerj   h   s    
 88Av}}))**r*   c               J    t         }t        j                   || |      |      S )zCreate an Array instance whose slots are the given scalar.

    *Optionally*, casting to `dtype` **before** repeating `n` times.
    rg   )litrY   repeat)rU   rh   rc   lit_s       r'   rn   rn   p   s!     D99T%e,a00r*   c               .    t        j                  d|       S )Nr   )rY   rn   )rh   s    r'   zerosrq   {   s    99Q?r*   c                    t        | t        j                        r|j                  j	                         S t        | |      S r#   )rX   rY   ExtensionTypedtypesUnknown&native_non_extension_to_narwhals_dtype)rc   versions     r'   native_to_narwhals_dtyperx      s2    %))*~~%%''1%AAr*      )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>z8native_non_extension_to_narwhals_dtype.<locals>.<lambda>   r)   r*   )	time_unit	time_zone)r   )?rt   rY   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,   Durationr4   Categorical	is_structStructrange
num_fieldsFieldfieldnamerx   rg   r.   r0   List
value_typer2   r[   	list_size
is_decimalDecimal	is_time32	is_time64Time	is_binaryBinaryru   )rc   rw   rt   is       r'   rv   rv      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rO   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)rw   )r   )r   zConverting to z$ dtype is not supported for PyArrow.zUnknown dtype: )rt   	base_typer   getr   r   r   r   rY   	timestampr   durationr   list_narwhals_to_native_dtypeinnerr   structfieldsr   rc   r[   size
issubclassUNSUPPORTED_DTYPES__name__NotImplementedErrorAssertionError)rc   rw   rt   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   Nrl   z$Expected Series or scalar, got list.)rT   r   rf   rm   _typerX   
_broadcastr`   	TypeErrorrY   r\   )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          
     l   t        j                  |t        d|j                              }t        j                  ||t        d|j                              }t        d | j                        }t
        j                  j                  | j                        r[t
        j                  j                  |j                        r1t        j                  |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                   | |      |      }t        j"                  |      }	|	S )Nr   rl      zpa._lib.Int64Type)pc	not_equalrm   rg   if_elserY   r   
is_integerdivide_checkedis_signed_integerr   multiplylessbit_wise_xorand_subtractdividefloor)
leftright	safe_mask
safe_rightnon_safe_resultdivideddiv_typehas_remainderhas_one_negative_operandresults
             r'   floordiv_compatr     s    UC

$;<IIuc!%**.EFJ$TYY/O	xx499%"((*=*=ejj*I**r((z:O
 88%%gll3/>HLLWe)DdKM')wwe,c!X.>($ ZZ'?@GSH%56F FTYY' M **Y		$
(C_U'"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)rY   r   r   rg   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 )Nr5   pa.StructArray)rY   concat_arraysr;   chunksr   )r9   r:   r6   r7   rs        r'   _extract_regex_concat_arraysr   f  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   
   r:   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)	rb   matchesr   
separatorsr   
date_value
time_value	sep_valuetz_values	            r'   parse_datetime_formatr  t  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   r;   r  r  r  r  r  r   replacer  )rb   date_rgxdate_fmtr  r  r  date_sep_valuer   s           r'   r	  r	    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   r;   r  r  r  )rb   time_rgxtime_fmtr  s       r'   r
  r
    sP    * (""3966'""$%++-O r*   c                   |s| dfS |dz  }||dz  dk(  z
  }| j                   j                  }t        ||       g|t        ||       }| j                  t	        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      )rf   r   rj   _with_nativerY   r   )ri   window_sizecenteroffset_leftoffset_rightr   arrayss          r'   
pad_seriesr'    s     qy"K+/Q"67L]]!!FV,WvWz,PV7WWFr//78+:TTTr*   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#   )rY   r   r   rg   ).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+  rc   s     r'   r,  z2cast_to_comparable_string_types.<locals>.<genexpr>  s     4rBGGEN4s   )anyrY   stringlarge_stringrm   )	separatorchunked_arraysrc   s     @r'   cast_to_comparable_string_typesr3    sF     N~NN 			__ 

 5^4c)U6KKKr*   )   promote_optionsdefault
permissivenone)r6  r7  r8  z*Mapping[PromoteOptions, Mapping[str, Any]]_PROMOTEpromoteTFc                <    t        j                  | fi t        |   S r#   )rY   concat_tablesr9  )tablesr5  s     r'   r<  r<    s     F@h&?@@r*   c                      e Zd Zy)ArrowSeriesNamespaceN)r   
__module____qualname__r$   r*   r'   r?  r?    s    r*   r?  )r   r   c                    t         dk  r*dd l}t        j                  |j	                  | ||            S t        j                  | ||      S )N)   r   )BACKEND_VERSIONnumpyrY   arrayarange)startendstepnps       r'   rG  rG    s<    xx		%d34499UC&&r*   c                D   t         }|dk(  rd|t        j                  d      fnd|f}t        j                  t        j
                  j                  t        j                  |       t        j                  |       gddg      j                  d      j                  |g      j                  d      j                  d|             }t        j                  t        j                  t        j                  |       t        d                  }|dk(  r&t        j                  |j!                         d d      }n1t        j"                   |d |j$                        t'        |             }t        j(                  t        j*                  ||j-                  d	      |      g      S )
Nsumvaluesr   )	min_countoffsetsnamesvalues_rl   F)rm   r   ScalarAggregateOptionsrY   rF  Tablefrom_arrayslist_flattenlist_parent_indicesgroup_by	aggregatesort_bycolumnr   list_value_lengthr   is_nullrn   rg   lenra   replace_with_mask	fill_null)rF  funcro   aggregationaggnon_empty_mask
base_arrays          r'   list_aggrg    sY    D 5= 
422Q?@ 
 ((
__U#R%;%;E%BCY' 	 	
 
)		K=	!			'$ 	!	C XXbll2+?+?+FAOPNu}ZZ 6 6 8$B
YYtDsxx8#e*E
  ((/	
 r*   c               8   |rdnd}|rdnd}d\  }}t        j                  t        j                  |       t        d            }t        j
                  j                  t        dt        |       d      | g||g	      }|j                  |      }	|j                  t        j                  t        j                  |      t        d
                  }
t        j
                  j                  t        j                  |       t        j                  |       g||g	      }t        j                  ||df||fg|      }|	j                  |      j!                         j"                  }t        j$                  j                  |t	        j&                  |j)                  |      j                  |                  }t        j
                  j                  |	j                  |      |g||g	      }t	        j*                  ||
g      j-                  |      j                  |      S )N
descending	ascendingat_endat_start)idxrN  r   r   )rH  rI  rJ  rQ  T)	sort_keysnull_placement)r   greaterr]  rm   rY   rU  rV  rG  r_  filterra  invertrW  rX  sort_indicesr\  combine_chunksrP  	ListArrayrF  taker<  r[  )rF  ri  
nulls_lastsort_directionnulls_positionrm  vis_not_sortedindexednot_sorted_partpass_throughexplodedsorted_indicesrP  sorted_implodedimploded_by_idxs                   r'   	list_sortr    s    #  AKHPZNFCJJr33E:CFCMhh""	aSZa	0%8a # G nn]3O>>",,ryy/GT"STLxx##		!7!7!>?3x $ H __%>':;%N
 $$Q'668@@Gll..(--7>>qABO hh**				$o6sAh + O _l;<DDSIPPQRSSr*   )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]])
r:   strr9   r   r6   r   r7   r   r  r!   )rU   r   r  r   )r]   r   r  zTypeIs[ArrayOrScalar]r#   )rb   z#ArrayOrScalar | list[Iterable[Any]]rc   pa.DataType | Noner  r   )rh   intri   r   r  r   )rc   r  rU   zPythonLiteral | ScalarAnyrh   r  r  r   )rh   r  r  zpa.Int64Array)rc   pa.DataTyperw   r
   r  r   )rc   r   rw   r
   r  r  )r   r   r   z'ArrowSeries | PythonLiteral | ScalarAnyr  z3tuple[ChunkedArrayAny, ChunkedArrayAny | ScalarAny])r   r   r   r   r  r   )r   r   r   r   r  z'tuple[ArrayOrScalarT1, ArrayOrScalarT2])
r:   r  r9   r   r6   r   r7   r   r  r   )rb   r   r  r  )rb   r   r  r  )ri   r   r"  r  r#  boolr  ztuple[ArrowSeries, int])r2  zChunkedArrayAny | ScalarAnyr1  r  r  z7tuple[Iterator[ChunkedArrayAny | ScalarAny], ScalarAny])r8  )r=  zIterable[pa.Table]r5  r   r  zpa.Table)rH  r  rI  r  rJ  r  r  r   )rF  r   rb  z:Literal['min', 'max', 'mean', 'approximate_median', 'sum']r  r   )rF  r   ri  r  rw  r  r  r   )
__future__r   	functoolsr   typingr   r   r   pyarrowrY   pyarrow.computecomputer   narwhals._compliantr   narwhals._utilsr	   r
   r   collections.abcr   r   r   r   typing_extensionsr   r   rT   r   narwhals._arrow.typingr   r   r   r   r   r   r   r   r   narwhals._durationr   narwhals.dtypesr   narwhals.typingr   r    r!   __annotations__r(   r,   r.   r0   r2   r4   r;   pyarrow.typesPYARROW_backend_versionrD  rP   scalarrm   rV   r^   ra   rj   rn   rq   rx   rv   MAINrt   r   r   r   float32r   binaryr   r/  r   bool_r   
dictionaryuint32r   date32r   time64r   int8r   int16r   int32r   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'  r3  r9  r<  r?  rG  rg  r  r$   r*   r'   <module>r     s   "  + +   4 M M;;32
 
 
 0%8 *9Y8G@8CQN & & &
 & & 
!& .  !((99; + 
	
				


9
5  	ii !AC KO*	,*5G**+ NR18J1$1),11B 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8G< F" "-<","$ =	
4	( *%Yvhay%
3 
D 
D 
Dl HZZZ	 $ug&68QR % %%
 % % %<>(UU),U6:UU.	L0	L=@	L<	L e &y1(,7"F+<H8  t$ $'E"H CIAA1?AA X/0PQ W'""
D" "JTT+/T=ATTr*   