
    -PhD                       U d dl 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Zd dlmZ d dlmZ d dlmZ d dlmZ erbd 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( d dl)m*Z*m+Z+ e!Z,de-d<   ddZ.ddZ/ddZ0ddZ1ddZ2ddZ3ddd dd'Z4nd d(lm4Z4 d d)l5m3Z3m/Z/m2Z2m1Z1m0Z0m.Z. d*d+d,d-d.d/d0d1d2d3d4
Z6d5e-d6<   ej7        Z8	 dd8Z9	 ddd=Z:ddCZ; edDE          ddJ            Z<ddLZ=ddQZ>ddSZ?ddWZ@dd]ZAd^ZBd_ZCd`ZDdaZEdbZFdcZGddZHeB eC deeD deeH dfZIdgZJdhZKdiZLdjZMeMdkfeJdlfeKdmfeLdnffZNeEdofeFdpfeGdqffZOddd ddsZPddtZQddvZRddwZSdd|ZTddZU G d ded                   ZVdS )    )annotations)	lru_cache)TYPE_CHECKINGAnyIterableIteratorMappingSequencecastN)_SeriesNamespace)isinstance_or_issubclass)
ShapeError)	TypeAliasTypeIsArrowSeries)ArrayAnyArrayOrScalarArrayOrScalarT1ArrayOrScalarT2ChunkedArrayAnyNativeIntervalUnit	ScalarAny)IntervalUnit)Version)DType)	IntoDTypePythonLiteralr   ChunkedArrayStructArraytr   return"TypeIs[pa.TimestampType[Any, Any]]c                    d S N r    s    U/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/narwhals/_arrow/utils.pyis_timestampr(   #             TypeIs[pa.DurationType[Any]]c                    d S r$   r%   r&   s    r'   is_durationr-   $   r)   r*   TypeIs[pa.ListType[Any]]c                    d S r$   r%   r&   s    r'   is_listr0   %   r)   r*   TypeIs[pa.LargeListType[Any]]c                    d S r$   r%   r&   s    r'   is_large_listr3   &   r)   r*   &TypeIs[pa.FixedSizeListType[Any, Any]]c                    d S r$   r%   r&   s    r'   is_fixed_size_listr6   '   r)   r*   (TypeIs[pa.DictionaryType[Any, Any, Any]]c                    d S r$   r%   r&   s    r'   is_dictionaryr9   (   r)   r*   optionsmemory_poolpatternstrstringsr   r;   r<   c                  d S r$   r%   )r?   r=   r;   r<   s       r'   extract_regexrA   )   s	     #&#r*   )rA   )r9   r-   r6   r3   r0   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_DICTvaluec               (    ddl m}  || d          S )Nr   )maybe_extract_py_scalarT)return_py_scalar)narwhals._arrow.seriesrY   )rW   rY   s     r'   extract_py_scalarr\   M   s*    >>>>>>""54@@@@r*   arr#ArrayOrScalar | list[Iterable[Any]]dtypepa.DataType | Nonec                   t          | t          j                  r| S t          | t                    rt          j        | |          S t          j        | g| j                  S r$   )
isinstancepaChunkedArraylistchunked_arraytype)r]   r_   s     r'   rf   rf   S   sY     #r'' 
#t 1U+++sx000r*   nintseriesr   r   c                @    t          j        | |j        j                  S )z|Create a strongly-typed Array instance with all elements null.

    Uses the type of `series`, without upseting `mypy`.
    )rc   nullsnativerg   )rh   rj   s     r'   
nulls_likern   ^   s    
 8Av})***r*      )maxsizepa.DataTypeversionr   r   c                ,
    j         t          j                                       r                                S t          j                                       r                                S t          j                                       r                                S t          j        	                               r
                                S t          j                                       r                                S t          j                                       r                                S t          j                                       r                                S t          j                                       r                                S t          j                                       r                                S t          j                                       r                                S t          j                                       r                                S t          j                                       sDt          j                                       s% t7          t          j        dd                      r                                S t          j                                       r                                S t?                     r!                      j!         j"                  S tG                     r$                     j!                  S t          j        %                               r&                                S t          j        '                               r5(                     fdtS           j*                  D                       S tW                     stY                     r(-                    t]           j/                            S ta                     r.1                    t]           j/                   j2                  S t          j        3                               r4                                S t          j        5                               st          j        6                               r7                                S t          j        8                               r9                                S :                                S )Nis_string_viewc                    dS )NFr%   )_s    r'   <lambda>z*native_to_narwhals_dtype.<locals>.<lambda>   s     r*   )	time_unit	time_zone)rx   c           
         g | ]V}                                         |          j        t                              |          j                            WS r%   )Fieldfieldnamenative_to_narwhals_dtyperg   ).0ir_   dtypesrr   s     r'   
<listcomp>z,native_to_narwhals_dtype.<locals>.<listcomp>   sc       
 	 KKNN',U[[^^-@'JJ   r*   );r   rc   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-   Durationr9   Categorical	is_structStructrange
num_fieldsr0   r3   Listr~   
value_typer6   Array	list_size
is_decimalDecimal	is_time32	is_time64Time	is_binaryBinaryUnknown)r_   rr   r   s   ``@r'   r~   r~   f   s@   ^F	x ||~~	x ||~~	x ||~~	x {{}}	x%   }}	x%   }}	x%   }}	x ||~~	x5!!  ~~	x5!!  ~~	x5!!  ~~ 	5!!8##E** @728-??FF
 }}	x%   {{}}E IuxHHH5 5444	xe$$ $!!###	x%   	
}}     
 u/00  
 
 	
 u~~ Pu-- P{{3E4DgNNOOO%   
||$U%5w??
 
 	
 
x5!!  ~~	x%   BH$6$6u$=$= {{}}	x%   }}>>r*   r   c                H   j         }t          | |j                  rd}t          |          t          | |j                  rt          j                    S t          | |j                  rt          j                    S t          | |j	                  rt          j
                    S t          | |j                  rt          j                    S t          | |j                  rt          j                    S t          | |j                  rt          j                    S t          | |j                  rt          j                    S t          | |j                  rt          j                    S t          | |j                  rt          j                    S t          | |j                  rt          j                    S t          | |j                  rt          j                    S t          | |j                  rt          j                    S t          | |j                  r7t          j        t          j                    t          j                              S t          | |j                  r9| j         }| j!        x}rt          j"        ||          nt          j"        |          S t          | |j#                  rt          j$        | j                   S t          | |j%                  rt          j&                    S t          | |j'                  r)t          j(        tS          | j*                            S t          | |j+                  r%t          j,        fd| j-        D                       S t          | |j.                  r3tS          | j*                  }| j/        }t          j(        ||          S t          | |j0                  rt          j1        d          S t          | |j2                  rt          j3                    S d|  }ti          |          )Nz(Casting to Decimal is not supported yet.rr   )r   c                J    g | ]}|j         t          |j                   f S )r   )r}   narwhals_to_native_dtyper_   )r   r|   rr   s     r'   r   z,narwhals_to_native_dtype.<locals>.<listcomp>   s@        5ek7SSST  r*   )r   rU   zUnknown dtype: )5r   r   r   NotImplementedErrorr   rc   float64r   float32r   int64r   int32r   int16r   int8r   uint64r   uint32r   uint16r   uint8r   stringr   bool_r   
dictionaryr   rx   ry   	timestampr   durationr   date32r   list_r   innerr   structfieldsr   sizer   time64r   binaryAssertionError)r_   rr   r   msgr   r   r   r   s    `      r'   r   r      s   ^Fv~66 '8!#&&&v~66 z||v~66 z||v|44 xzzv|44 xzzv|44 xzzv{33 wyyv}55 y{{v}55 y{{v}55 y{{v|44 xzzv}55 y{{v~66 xzzv'9:: 7}RY[[")++666v77 Y05*?"Xr|D"%%%blSWFXFXXv77 ,{5?+++v{33 y{{v{33 [x#;EKQX#Y#Y#YZZZZv}55 
y   "\  
 
 	
  v|44 4(gFFFJ	x3333v{33 yv}55 y{{
#E
#
#C


r*   lhsrhs'ArrowSeries | PythonLiteral | ScalarAny?tuple[ChunkedArrayAny | ScalarAny, ChunkedArrayAny | ScalarAny]c                   ddl m} ddlm} || j        t          d| j                  fS t          ||          rt          S t          ||          rK| 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|n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   )ArrowDataFramer   Nrg   z$Expected Series or scalar, got list.)narwhals._arrow.dataframer   r[   r   rm   lit_typerb   NotImplemented
_broadcastre   	TypeErrorrc   Scalar)r   r   r   r   r   s        r'   extract_nativer      s    988888222222
{z3t#)44444#~&& #{## &> 	-#. 	-:a=#*,,> 	-:sz!},,z3:%%#t 4nn:jbi88Fssc#hhFFr*   Sequence[ArrowSeries]c            	         d | D             }t          |          t          fd|D                       }|r| S g }| D ]}|j        r|j        d         }|j        dk     r$t          |d          r|                                }|                    |                    t          j
        |gz  |j                                       t          |          x}k    rd d| d	}t          |          |                    |           |S )
Nc                ,    g | ]}t          |          S r%   )len)r   rR   s     r'   r   z/align_series_full_broadcast.<locals>.<listcomp>  s    &&&!s1vv&&&r*   c              3  $   K   | ]
}|k    V  d S r$   r%   )r   _len
max_lengths     r'   	<genexpr>z.align_series_full_broadcast.<locals>.<genexpr>
  s(      ;;4DJ&;;;;;;r*   r   )   as_pyr   zExpected object of length z, got .)maxallr   rm   _backend_versionhasattrr   append_with_nativerc   arrayr   r   r   )	rj   lengths	fast_pathreshapedrR   rW   
actual_lenr   r   s	           @r'   align_series_full_broadcastr     s0   &&v&&&GWJ;;;;7;;;;;I H 
 
< 		HQKE!E))geW.E.E)OOANN28UGj4Hqw+W+W+WXXYYYY!!ff$
33R:RRZRRR oo%OOAOr*   leftr   rightc          
        t           j                            | j                  r9t           j                            |j                  rt	          j        | |          }t           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                  }n)t	          j        | |          }t	          j        |          }|S )Nzpa._lib.Int64Typer      )rc   r   
is_integerrg   pcdivide_checkedis_signed_integerr   	not_equalmultiplylessbit_wise_xorr   if_elseand_subtractdividefloor)r   r   divideddiv_typehas_remainderhas_one_negative_operandresults          r'   floordiv_compatr    sC    
x49%% #"(*=*=ej*I*I ##D%00 8%%gl33 	/>>HLWe)D)DdKKM')we,,c!X.>.>( ($ Z'?@@GSH%5%566 FF FTY'')D%(('""Mr*   arrow_arrayr   	pa_objectr   'tuple[ArrayOrScalarT1, ArrayOrScalarT2]c                :   t           j                            | j                  rtt           j                            |j                  rPt	          j        | t          j                    d          t	          j        |t          j                    d          fS | |fS )NF)safe)rc   r   r   rg   r   r   r   )r  r  s     r'   cast_for_truedivr  <  s     
x;+,, 
1D1DY^1T1T 
 w{BJLLu===rwrz||%@
 @
 @
 
 	
 	!!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%Spa.StructArrayc              v    t          j        t          | |||          j                  }t	          d|          S )Nr:   r  )rc   concat_arraysrA   chunksr   )r?   r=   r;   r<   rs        r'   _extract_regex_concat_arraysr  g  s@     	gw[QQQX	 	A  !$$$r*   c                   t          |                                                     dd          t                    }t	          j        |                                                                          sd}t          |          |	                    d          }|	                    d          }t	          j
        t	          j        |                                                    dk    rd}t          |          t	          j
        t	          j        |                                                    dk    rd	}t          |          t          t          d
|	                    d                              }t          t          d
|	                    d                              }|d                                         }|d                                         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   r   is_validr   r   r|   countunique
ValueError_parse_date_formatr   _parse_time_format)	r]   matchesr   
separatorsr   
date_value
time_value	sep_valuetz_values	            r'   parse_datetime_formatr5  u  s   *3==??+@+@B+G+GQXYYYG6'""$$%%++-- 'U 	 "#&&&u%%J	t		B 
x	*%%&&,,..22Poo	x	"$$&&**Ooo#D)97==;P;P$Q$QRRJ#D)97==;P;P$Q$QRRJ1##%%I!u{{}},tt"H;);Z;;;;r*   r"  c                F   t           D ]\  }}t          j        | |          }|dk    r<t          j        |                                                                          r|c S t          j        |                                                                          rt          j        t          j        |                    d          x}                                                    dk    rt          j        t          j        |                    d          x}                                                    dk    rP|d                                         x}|d                                         k    r|	                    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   rA   r   r)  r   r*  r+  r|   replacer,  )r]   date_rgxdate_fmtr/  r7  r8  date_sep_valuer   s           r'   r-  r-    sf   * 
9 
9("3999xBF7+;+;+=+=$>$>$D$D$F$FOOOF7##%%&&,,..	97==+@+@#@4AABBHHJJaOO7==+@+@#@4AABBHHJJaOO#'7==??2tAw}}FF##C88888	Q  S//r*   c                    t           D ]W\  }}t          j        | |          }t          j        |                                                                          r|c S XdS )Nr   r%  )TIME_FORMATSr   rA   r   r)  r   )r]   time_rgxtime_fmtr/  s       r'   r.  r.    sh    *  ("39996'""$$%%++-- 	OOO	2r*   window_sizecenterbooltuple[ArrowSeries, int]c               &   |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        |          }|                     |          ||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   )rc   r   r   r  rm   r  r   )rj   rC  rD  offset_leftoffset_rightpad_left	pad_rightconcats           r'   
pad_seriesrN    s      qy"K+/Q"67Lx,6<@@@H$,.V\BBBIxJ&-*>J	JKKFv&&l(BBBr*   chunked_arrays	separator+tuple[Iterator[ChunkedArrayAny], ScalarAny]c                    t          d |D                       st          j                    nt          j                    fd|D             t	          |           fS )Nc              3  ^   K   | ](}t           j                            |j                  V  )d S r$   )rc   r   r   rg   )r   cas     r'   r   z2cast_to_comparable_string_types.<locals>.<genexpr>  s4      NN28++BG44NNNNNNr*   c              3  B   K   | ]}|                               V  d S r$   )r   )r   rT  r_   s     r'   r   z2cast_to_comparable_string_types.<locals>.<genexpr>  s-      44rBGGENN444444r*   )anyrc   r   large_stringr   )rP  rO  r_   s     @r'   cast_to_comparable_string_typesrX    si     NN~NNNNN		_ 

 5444^444c)U6K6KKKr*   c                      e Zd ZddZdS )ArrowSeriesNamespacerj   r   r!   Nonec                   || _         d S r$   )_compliant_series)selfrj   s     r'   __init__zArrowSeriesNamespace.__init__  s    !'r*   N)rj   r   r!   r[  )__name__
__module____qualname__r_  r%   r*   r'   rZ  rZ    s(        ( ( ( ( ( (r*   rZ  )r   r   )r    r   r!   r"   )r    r   r!   r+   )r    r   r!   r.   )r    r   r!   r1   )r    r   r!   r4   )r    r   r!   r7   )
r=   r>   r?   r   r;   r   r<   r   r!   r   )rW   r   r!   r   r$   )r]   r^   r_   r`   r!   r   )rh   ri   rj   r   r!   r   )r_   rq   rr   r   r!   r   )r_   r   rr   r   r!   rq   )r   r   r   r   r!   r   )rj   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>   )rj   r   rC  ri   rD  rE  r!   rF  )rO  r   rP  r>   r!   rQ  )W
__future__r   	functoolsr   typingr   r   r   r   r	   r
   r   pyarrowrc   pyarrow.computecomputer   narwhals._compliant.seriesr   narwhals._utilsr   narwhals.exceptionsr   typing_extensionsr   r   r[   r   narwhals._arrow.typingr   r   r   r   r   r   r   narwhals._durationr   r   narwhals.dtypesr   narwhals.typingr   r   r   __annotations__r(   r-   r0   r3   r6   r9   rA   pyarrow.typesrV   scalarr   r\   rf   rn   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  r5  r-  r.  rN  rX  rZ  r%   r*   r'   <module>r     s&   " " " " " " "       R R R R R R R R R R R R R R R R R R           7 7 7 7 7 7 4 4 4 4 4 4 * * * * * * -33333333222222                  0/////''''''%%%%%%88888888 *98888GGGG@@@@8888CCCCQQQQNNNN & & & & & & & .-----                
	
				


9 9
     	i !A A A A KO1 1 1 1 1+ + + + 2> > > >B9 9 9 9xG G G GD   2   :" " " "& =	
4	( *%
3v
3
3
3
3%
3
3
3 
D 
D 
Dl HZZZ	 $ug&68QR % % % % % %< < < <>   (   C C C C0	L 	L 	L 	L( ( ( ( (+,LM ( ( ( ( (r*   