
    gD                    p   d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d d	l
mZ d d
l
mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ er@d dlmZ d dlmZ d dlZd dlZd dlmZ d dlm Z  d dlm!Z! d dl"m#Z# d dl$m%Z% d dlm&Z&  ed      Z' G d d      Z( G d d      Z)y)    )annotations)TYPE_CHECKING)Any)Literal)Sequence)overload)PolarsNamespace)convert_str_slice_to_int_slice)extract_args_kwargs)native_to_narwhals_dtype)ColumnNotFoundError)InvalidIntoExprError)Implementation)is_sequence_but_not_str)parse_columns_to_drop)validate_backend_version)
ModuleType)TypeVarN)SelfPolarsGroupByPolarsLazyGroupByPolarsSeries)DType)VersionTc                     e Zd Z	 	 	 	 	 	 	 	 	 	 ddZd dZd!dZd"dZd#dZd$dZd%dZ	e
d&d       Ze
d'd	       Ze
d(d
       Z	 	 	 	 	 	 d)dZd*dZ	 d+	 	 	 	 	 	 	 d,dZd-dZed.d       Zd/dZd0dZd1dZed2d       Zed-d       Zd3dZe
d4d       Ze
d5d       Z	 	 	 	 	 	 d6dZd7dZd8dZd9dZ	 	 	 	 	 	 	 	 	 	 	 	 d:dZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d;dZy)<PolarsDataFramec                   || _         || _        t        j                  | _        || _        t        | j                  | j                         y N_native_frame_backend_versionr   POLARS_implementation_versionr   selfdfbackend_versionversions       O/var/www/openai/venv/lib/python3.12/site-packages/narwhals/_polars/dataframe.py__init__zPolarsDataFrame.__init__&   ?       /-44 !5!5t7L7LM    c                     y)Nr     r*   s    r.   __repr__zPolarsDataFrame.__repr__3        r1   c                    | S r"   r3   r4   s    r.   __narwhals_dataframe__z&PolarsDataFrame.__narwhals_dataframe__6       r1   c                D    t        | j                  | j                        S Nr,   r-   r	   r%   r(   r4   s    r.   __narwhals_namespace__z&PolarsDataFrame.__narwhals_namespace__9        114==
 	
r1   c                    | j                   t        j                  u r| j                   j                         S dt	        | j                          }t        |      NzExpected polars, got: r'   r   r&   to_native_namespacetypeAssertionErrorr*   msgs     r.   __native_namespace__z$PolarsDataFrame.__native_namespace__>   N    >#8#88'';;==&tD,@,@'A&BCS!!r1   c                R    | j                  | j                  | j                  |      S r;   	__class__r$   r%   r*   r-   s     r.   _change_versionzPolarsDataFrame._change_versionE   +    ~~0E0Ew  
 	
r1   c                R    | j                  || j                  | j                        S r;   rL   r%   r(   r*   r+   s     r.   _from_native_framez"PolarsDataFrame._from_native_frameJ   )    ~~ 5 5t}}  
 	
r1   c                     y r"   r3   r*   objs     r.   _from_native_objectz#PolarsDataFrame._from_native_objectO   s    ILr1   c                     y r"   r3   rV   s     r.   rX   z#PolarsDataFrame._from_native_objectR   s    DGr1   c                     y r"   r3   rV   s     r.   rX   z#PolarsDataFrame._from_native_objectU   s    69r1   c                    dd l }t        ||j                        r%ddlm}  ||| j
                  | j                        S t        ||j                        r| j                  |      S |S Nr   r   r<   )	polars
isinstanceSeriesnarwhals._polars.seriesr   r%   r(   	DataFramerS   )r*   rW   plr   s       r.   rX   z#PolarsDataFrame._from_native_objectX   s\     	c299%<T%:%:DMM  c2<<(**3//
r1   c                     d fd}|S )Nc                 X   dd l }t        | |      \  } }	 j                   t        j                        | i |      S # |j
                  j                  $ r#}|dj                   d}t        |      |d }~wt        $ r%}t        |      }d|v sd|v rt        |      | d }~ww xY w)Nr   z+

Hint: Did you mean one of these columns: ? cannot create expression literalinvalid literal)r]   r   rX   getattrr$   
exceptionsr   columns	TypeErrorstrr   )argskwargsrb   erG   e_strattrr*   s         r.   funcz)PolarsDataFrame.__getattr__.<locals>.funci   s    .tV<LD&//5GD..5tFvF  ==44 6J4<<.XYZ)#.A5 A6%?(E1.u51<s#   *A B)A88B) B$$B)rm   r   rn   r   returnr   r3   r*   rq   rr   s   `` r.   __getattr__zPolarsDataFrame.__getattr__h   s    	( r1   Nc                    | j                   dk  r|d}t        |      | j                   dk  r| j                  j                  |      S | j                  j                  |      S )N)r         z;`copy` in `__array__` is only supported for Polars>=0.20.28)r%   NotImplementedErrorr$   	__array__)r*   dtypecopyrG   s       r.   r{   zPolarsDataFrame.__array__   sc       ;.43COC%c**  ;.%%//66!!++E22r1   c           
        | j                   dk  rW| j                  j                  j                         D ci c]'  \  }}|t	        || j
                  | j                         ) c}}S | j                  j                         j                         D ci c]'  \  }}|t	        || j
                  | j                         ) c}}S c c}}w c c}}w N)   r%   r$   schemaitemsr   r(   collect_schemar*   namer|   s      r.   r   zPolarsDataFrame.collect_schema         4'
 $(#5#5#<#<#B#B#D	 $EKD% .4==$*?*?  $E	  $(#5#5#D#D#F#L#L#N	 $OKD% .4==$*?*?  $O	    ,C,Cc                .    | j                   j                  S r"   )r$   shaper4   s    r.   r   zPolarsDataFrame.shape   s    !!'''r1   c           	        | j                   dkD  r*| j                  | j                  j                  |            S t	        |t
              rt        d |D              }| j                  }t	        |t
              rt        |      dk(  rt	        |d   t              r|d   t        d       k(  rlt	        |d   t              r,t        |d         s| j                  | j                  dd       S | j                  | j                  j                  |d               S t	        |d   j                  t              st	        |d   j                  t              rUt        |d   |      \  }}}| j                  | j                  j                  ||||         j                  |d               S t	        |d   j                  t               st	        |d   j                  t               ri| j                  | j                  j                  ||d   j                  |d   j                  |d   j"                           j                  |d               S dt%        |d          }t'        |      dd l}t	        |t
              rLt        |      dk(  r>t+        |d         r0t        |d         dk(  r| j                  j                  |d         }nt	        |t              rtt	        |j                  t              st	        |j                  t              r@t        ||      \  }}}| j                  | j                  j                  ||||               S t+        |      r+t        |      dk(  r| j                  j                  dd      }n| j                  j                  |      }t	        ||j,                        r%ddlm}	  |	|| j                   | j2                        S | j                  |      S )	N)r   rx      c              3  L   K   | ]  }t        |      rt        |      n|  y wr"   )r   list).0is     r.   	<genexpr>z.PolarsDataFrame.__getitem__.<locals>.<genexpr>   s$     XSWa(?(BT!WISWs   "$   r   r   z,Expected slice of integers or strings, got: r   r<   )r%   rX   r$   __getitem__r^   tuplerj   lenslicer   rS   startrl   stopr
   selectintsteprD   rk   r]   r   r_   r`   r   r(   )
r*   itemrj   r   r   r   rG   rb   resultr   s
             r.   r   zPolarsDataFrame.__getitem__   sL     ;.++D,>,>,J,J4,PQQ $&XSWXXllG$&3t9>jaRW>X7eDk)!$q'84Sa\#66t7I7I!A7NOO22**66tAw?  d1gmmS1ZQc5R(FtAwPW(X%E422**11'%T/2JKWW G 
 d1gmmS1ZQc5R22**11#DGMMDGLL47<<$OP%+d1g. 
 ET$q']OTn$ 4'Y!^+DG4a\Q&++2247;D%(4::s+z$))S/I$B4$Q!tT..&&--geDo.FG  ).CIN++11!Q7++77=&")),@#D,A,A4==  ++F33r1   c                ~    ddl m}  || j                  j                  |      | j                  | j
                        S r\   )r`   r   r$   
get_columnr%   r(   )r*   r   r   s      r.   r   zPolarsDataFrame.get_column   s6    8))$/ 11MM
 	
r1   c                2    t        | j                        dk(  S )Nr   )r   r$   r4   s    r.   is_emptyzPolarsDataFrame.is_empty   s    4%%&!++r1   c                .    | j                   j                  S r"   r$   rj   r4   s    r.   rj   zPolarsDataFrame.columns       !!)))r1   c           
         | j                   j                  }|j                         D ci c]'  \  }}|t        || j                  | j
                        ) c}}S c c}}w r"   r$   r   r   r   r(   r%   r*   r   r   r|   s       r.   r   zPolarsDataFrame.schema   ]    ##**  &||~
-e *5$--AVAVWW-
 	
 
   ,Ac                v    t        | j                  j                         | j                  | j                        S r;   )PolarsLazyFramer$   lazyr%   r(   r4   s    r.   r   zPolarsDataFrame.lazy   s1    ##% 11MM
 	
r1   c                    y r"   r3   r*   	as_seriess     r.   to_dictzPolarsDataFrame.to_dict   s    UXr1   c                    y r"   r3   r   s     r.   r   zPolarsDataFrame.to_dict   s    SVr1   c          
         | j                   }|rWddlm} |j                  d      j	                         D ci c]%  \  }}| ||| j
                  | j                        ' c}}S |j                  d      S c c}}w )Nr   r   T)r   r<   F)r$   r`   r   r   r   r%   r(   )r*   r   r+   r   r   cols         r.   r   zPolarsDataFrame.to_dict   s     < "$d!;!A!A!C	 "DID# l)>)>  "D	  :::..s   *A8c               6    ddl m}  || t        |      |      S )Nr   r   drop_null_keys)narwhals._polars.group_byr   r   )r*   r   byr   s       r.   group_byzPolarsDataFrame.group_by  s    ;T48NKKr1   c                    | j                   dk  r*| j                  | j                  j                  |            S | j                  | j                  j	                  |            S N)r   rx      r%   rS   r$   with_row_countwith_row_indexr*   r   s     r.   r   zPolarsDataFrame.with_row_index  T      :-**4+=+=+L+LT+RSS&&t'9'9'H'H'NOOr1   c                r    t        | ||      }| j                  | j                  j                  |            S )N)compliant_framerj   strict)r   rS   r$   drop)r*   rj   r   to_drops       r.   r   zPolarsDataFrame.drop  s7    ' '&
 &&t'9'9'>'>w'GHHr1   c                    | j                   dk  r.| j                  | j                  j                  ||||            S | j                  | j                  j	                  ||||            S Nr   r   r   )id_vars
value_varsvariable_name
value_name)onindexr   r   r%   rS   r$   meltunpivotr*   r   r   r   r   s        r.   r   zPolarsDataFrame.unpivot         9,**""''!!"/)	 (   &&&&U-J ' 
 	
r1   c                   | j                   dk  rd}t        |      | j                  j                  ||||||      }| j	                  |      S )Nr   z+`pivot` is only supported for Polars>=1.0.0)r   valuesaggregate_functionsort_columns	separator)r%   rz   r$   pivotrX   )	r*   r   r   r   r   r   r   rG   r   s	            r.   r   zPolarsDataFrame.pivot5  sb       9,?C%c**##))1% * 
 ''//r1   )
r*   r   r+   pl.DataFramer,   tuple[int, ...]r-   r   rt   Noner*   r   rt   rl   r*   r   rt   r   r*   r   rt   r	   r*   r   rt   r   r*   r   r-   r   rt   r   )r*   r   r+   r   rt   r   )r*   r   rW   z	pl.Seriesrt   r   )r*   r   rW   r   rt   r   )r*   r   rW   r   rt   r   )r*   r   rW   zpl.Series | pl.DataFrame | Trt   zSelf | PolarsSeries | Tr*   r   rq   rl   rt   r   )NN)r*   r   r|   z
Any | Noner}   zbool | Nonert   z
np.ndarrayr*   r   rt   zdict[str, DType])r*   r   rt   ztuple[int, int])r*   r   r   r   rt   r   )r*   r   r   rl   rt   r   )r*   r   rt   boolr*   r   rt   	list[str])r*   r   rt   r   )r*   r   r   zLiteral[True]rt   zdict[str, PolarsSeries])r*   r   r   zLiteral[False]rt   zdict[str, list[Any]])r*   r   r   r   rt   z.dict[str, PolarsSeries] | dict[str, list[Any]])r*   r   r   rl   r   r   rt   r   r*   r   r   rl   rt   r   r*   r   rj   r   r   r   rt   r   r*   r   r   str | list[str] | Noner   r   r   
str | Noner   r   rt   r   )r*   r   r   zstr | list[str]r   r   r   r   r   zMLiteral['min', 'max', 'first', 'last', 'sum', 'mean', 'median', 'len'] | Noner   r   r   rl   rt   r   )__name__
__module____qualname__r/   r5   r8   r>   rH   rN   rS   r   rX   rv   r{   r   propertyr   r   r   r   rj   r   r   r   r   r   r   r   r   r3   r1   r.   r    r    %   s   NNN )	N
 N 
N!

"



 L LG G9 95	  0 CG33%34?3	3  ( (:4x
, * * 
 

 X XV V//"&/	7/"L
P
I

"
 &
 "	

 
 

,000 &	0
 '00 0 0 
0r1   r    c                      e Zd Z	 	 	 	 	 	 	 	 	 	 ddZddZddZddZddZddZddZ	ddZ
edd	       Zedd
       ZddZddZddZddZddZ	 	 	 	 	 	 	 	 	 	 	 	 d dZy)!r   c                   || _         || _        t        j                  | _        || _        t        | j                  | j                         y r"   r#   r)   s       r.   r/   zPolarsLazyFrame.__init__Q  r0   r1   c                     y)Nr   r3   r4   s    r.   r5   zPolarsLazyFrame.__repr__^  r6   r1   c                    | S r"   r3   r4   s    r.   __narwhals_lazyframe__z&PolarsLazyFrame.__narwhals_lazyframe__a  r9   r1   c                D    t        | j                  | j                        S r;   r=   r4   s    r.   r>   z&PolarsLazyFrame.__narwhals_namespace__d  r?   r1   c                    | j                   t        j                  u r| j                   j                         S dt	        | j                          }t        |      rA   rB   rF   s     r.   rH   z$PolarsLazyFrame.__native_namespace__i  rI   r1   c                R    | j                  || j                  | j                        S r;   rQ   rR   s     r.   rS   z"PolarsLazyFrame._from_native_framep  rT   r1   c                R    | j                  | j                  | j                  |      S r;   rK   rM   s     r.   rN   zPolarsLazyFrame._change_versionu  rO   r1   c                     d fd}|S )Nc                 F   dd l }t        | |      \  } }	 j                   t        j                        | i |      S # |j
                  j                  $ r}t        t        |            |d }~wt        $ r%}t        |      }d|v sd|v rt        |      | d }~ww xY w)Nr   rf   rg   )
r]   r   rS   rh   r$   ri   r   rl   rk   r   )rm   rn   rb   ro   rp   rq   r*   s        r.   rr   z)PolarsLazyFrame.__getattr__.<locals>.func{  s    .tV<LD&..5GD..5tFvF  ==44 9)#a&1q8 A6%?(E1.u51<s#   *A B A//B ; BB rs   r3   ru   s   `` r.   rv   zPolarsLazyFrame.__getattr__z  s    	& r1   c                .    | j                   j                  S r"   r   r4   s    r.   rj   zPolarsLazyFrame.columns  r   r1   c           
         | j                   j                  }|j                         D ci c]'  \  }}|t        || j                  | j
                        ) c}}S c c}}w r"   r   r   s       r.   r   zPolarsLazyFrame.schema  r   r   c           
        | j                   dk  rW| j                  j                  j                         D ci c]'  \  }}|t	        || j
                  | j                         ) c}}S | j                  j                         j                         D ci c]'  \  }}|t	        || j
                  | j                         ) c}}S c c}}w c c}}w r   r   r   s      r.   r   zPolarsLazyFrame.collect_schema  r   r   c                    dd l }	 | j                  j                         }t        || j                  | j                        S # |j                  j                  $ r}t	        t        |            |d }~ww xY w)Nr   r<   )	r]   r$   collectri   r   rl   r    r%   r(   )r*   rb   r   ro   s       r.   r   zPolarsLazyFrame.collect  sm    	5''//1F  11MM
 	
 }}00 	5%c!f-14	5s   A A5A00A5c               6    ddl m}  || t        |      |      S )Nr   r   r   )r   r   r   )r*   r   r   r   s       r.   r   zPolarsLazyFrame.group_by  s    ? tBxOOr1   c                    | j                   dk  r*| j                  | j                  j                  |            S | j                  | j                  j	                  |            S r   r   r   s     r.   r   zPolarsLazyFrame.with_row_index  r   r1   c                    | j                   dk  r*| j                  | j                  j                  |            S | j                  | j                  j                  ||            S )Nr   )r   )r%   rS   r$   r   )r*   rj   r   s      r.   r   zPolarsLazyFrame.drop  sY      9,**4+=+=+B+B7+KLL&&t'9'9'>'>wv'>'VWWr1   c                    | j                   dk  r.| j                  | j                  j                  ||||            S | j                  | j                  j	                  ||||            S r   r   r   s        r.   r   zPolarsLazyFrame.unpivot  r   r1   N)
r*   r   r+   pl.LazyFramer,   r   r-   r   rt   r   r   r   r   r   )r*   r   r+   r  rt   r   r   r   r   r   )r*   r   rt   r    )r*   r   r   rl   r   r   rt   r   r   r   r   )r   r   r   r/   r5   r   r>   rH   rS   rN   rv   r   rj   r   r   r   r   r   r   r   r3   r1   r.   r   r   P  s    NNN )	N
 N 
N!

"



, * * 
 
 
P
P
X


"
 &
 "	

 
 

r1   r   )*
__future__r   typingr   r   r   r   r   narwhals._polars.namespacer	   narwhals._polars.utilsr
   r   r   narwhals.exceptionsr   r   narwhals.utilsr   r   r   r   typesr   r   numpynpr]   rb   typing_extensionsr   r   r   r   r`   r   narwhals.dtypesr   r   r   r    r   r3   r1   r.   <module>r     sx    "       6 A 6 ; 3 4 ) 2 0 3 &7;4%&Ah0 h0V	M
 M
r1   