
    }i/              
      >   d dl mZ d dlZd dlmZ d dlmZ d dl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 d d	lmZ d d
lmZ d dlmZ d dlmZmZ d dlmZ er"d dl m!Z!m"Z" d dl#m$Z$m%Z%m&Z& d dlm'Z' d dl(m)Z)m*Z*m+Z+  G d deeeeej,        df                   Z-dS )    )annotationsN)reduce)chain)TYPE_CHECKINGLiteralArrowDataFrame	ArrowExpr)ArrowSelectorNamespaceArrowSeries)cast_to_comparable_string_types)EagerNamespace)combine_alias_output_namescombine_evaluate_output_names)Implementation)IteratorSequence)ChunkedArrayAny
Incomplete	ScalarAny)Version)CorrelationMethod	IntoDTypePythonLiteralc                     e Zd Zej        Zed9d            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dAdZdAdZdAdZdAdZdBd#ZdBd$ZdBd%ZedCd'            ZdDd*ZdAd+ZdAd,Z	 dEdFd3ZdGd8Zd-S )HArrowNamespacereturntype[ArrowDataFrame]c                    t           S Nr   selfs    M/home/jrussi/.local/lib/python3.11/site-packages/narwhals/_arrow/namespace.py
_dataframezArrowNamespace._dataframe$   s        type[ArrowExpr]c                    t           S r"   r
   r#   s    r%   _exprzArrowNamespace._expr(   s    r'   type[ArrowSeries]c                    t           S r"   r   r#   s    r%   _serieszArrowNamespace._series,   s    r'   versionr   Nonec                   || _         d S r"   )_version)r$   r.   s     r%   __init__zArrowNamespace.__init__0   s    r'   seriesr   %Iterator[ChunkedArrayAny | ScalarAny]c                    d |D             S )Nc              3  L   K   | ]}|j         r|j        d          n|j        V   dS )r   N)
_broadcastnative.0ss     r%   	<genexpr>z0ArrowNamespace.extract_native.<locals>.<genexpr>6   s5      JJaq|9JJJJJJr'    )r$   r3   s     r%   extract_nativezArrowNamespace.extract_native3   s     KJ6JJJJr'   r   c                H                            fdd d  j                  S )Nc                Z    t          j        t          | j                  gd          gS )Nlen)namecontext)r   from_iterablerA   r8   )dfr$   s    r%   <lambda>z$ArrowNamespace.len.<locals>.<lambda>;   s+    )3ry>>*:PTUUU r'   c                    dgS )NrA   r=   _dfs    r%   rF   z$ArrowNamespace.len.<locals>.<lambda>>   s    ug r'   evaluate_output_namesalias_output_namesr.   r*   r1   r#   s   `r%   rA   zArrowNamespace.len8   sB    zz    #6"5#M  
 
 	
r'   valuer   dtypeIntoDType | Nonec                ^     d	 fd                      fdd d  j                  S )
N_r	   r   r   c                f    t          j        gd          }r|                              S |S )NliteraldatarB   rC   )r   rD   cast)rR   arrow_seriesrO   r$   rN   s     r%   _lit_arrow_seriesz-ArrowNamespace.lit.<locals>._lit_arrow_seriesD   sG    &4W9d  L  0#((///r'   c                     |           gS r"   r=   )rE   rY   s    r%   rF   z$ArrowNamespace.lit.<locals>.<lambda>M   s    ))"--. r'   c                    dgS )NrT   r=   rH   s    r%   rF   z$ArrowNamespace.lit.<locals>.<lambda>N   s    yk r'   rJ   )rR   r	   r   r   rM   )r$   rN   rO   rY   s   ```@r%   litzArrowNamespace.litC   se    	  	  	  	  	  	  	  	  zz...."9"9#M	  
 
 	
r'   exprsignore_nullsboolc               l    dfd}| j                             |t           t           |           S )NrE   r	   r   list[ArrowSeries]c                     t          j         fdD                       }rd |D             }t          t          j        |          gS )Nc              3  .   K   | ]} |          V  d S r"   r=   r:   erE   s     r%   r<   z>ArrowNamespace.all_horizontal.<locals>.func.<locals>.<genexpr>U   +      ?U?U!"?U?U?U?U?U?Ur'   c              3  D   K   | ]}|                     d dd          V  dS )TN	fill_nullr9   s     r%   r<   z>ArrowNamespace.all_horizontal.<locals>.func.<locals>.<genexpr>W   s2      HHA!++dD$77HHHHHHr'   )r   rD   r   operatorand_rE   r3   r]   r^   s   ` r%   funcz+ArrowNamespace.all_horizontal.<locals>.funcT   sZ    ,1,??U?U?U?Uu?U?U?U,U,UF IHHHHH8=&1122r'   rm   rK   rL   rC   rE   r	   r   ra   r*   _from_callabler   r   r$   r^   r]   rm   s    `` r%   all_horizontalzArrowNamespace.all_horizontalS   s^    	3 	3 	3 	3 	3 	3 	3 z(("?"G95A	 ) 
 
 	
r'   c               l    dfd}| j                             |t           t           |           S )NrE   r	   r   ra   c                     t          j         fdD                       }rd |D             }t          t          j        |          gS )Nc              3  .   K   | ]} |          V  d S r"   r=   rd   s     r%   r<   z>ArrowNamespace.any_horizontal.<locals>.func.<locals>.<genexpr>c   rf   r'   c              3  D   K   | ]}|                     d dd          V  dS )FNrh   r9   s     r%   r<   z>ArrowNamespace.any_horizontal.<locals>.func.<locals>.<genexpr>e   s2      IIQ!++eT488IIIIIIr'   )r   rD   r   rj   or_rl   s   ` r%   rm   z+ArrowNamespace.any_horizontal.<locals>.funcb   sZ    ,1,??U?U?U?Uu?U?U?U,U,UF JII&III8<0011r'   rn   ro   rp   rr   s    `` r%   any_horizontalzArrowNamespace.any_horizontala   s^    	2 	2 	2 	2 	2 	2 	2 z(("?"G95A	 ) 
 
 	
r'   c                h    dfd}| j                             |t           t           |           S )NrE   r	   r   ra   c                     t          j         fdD                       }d |D             }t          t          j        |          gS )Nc              3  .   K   | ]} |          V  d S r"   r=   r:   exprrE   s     r%   r<   z>ArrowNamespace.sum_horizontal.<locals>.func.<locals>.<genexpr>q   s+      $@$@$TT"XX$@$@$@$@$@$@r'   c              3  F   K   | ]}|                     d dd          V  dS r   N)strategylimitrh   r9   s     r%   r<   z>ArrowNamespace.sum_horizontal.<locals>.func.<locals>.<genexpr>r   s4      LLAakk!d$k??LLLLLLr'   )r   rD   r   rj   add)rE   itr3   r]   s   `  r%   rm   z+ArrowNamespace.sum_horizontal.<locals>.funcp   sQ    $$@$@$@$@%$@$@$@@@BLLLLLF8<0011r'   rn   ro   rp   r$   r]   rm   s    ` r%   sum_horizontalzArrowNamespace.sum_horizontalo   sX    	2 	2 	2 	2 	2 	2
 z(("?"G95A	 ) 
 
 	
r'   c                    | j         j                                        dfd}| j                            |t           t           |           S )NrE   r	   r   ra   c                     t          t          j         fdD                                 }d |D             }fd|D             }t          t          j        |          t          t          j        |          z  gS )Nc              3  .   K   | ]} |          V  d S r"   r=   r}   s     r%   r<   z?ArrowNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s+      4P4P$TT"XX4P4P4P4P4P4Pr'   c                >    g | ]}|                     d dd          S r   rh   r9   s     r%   
<listcomp>z@ArrowNamespace.mean_horizontal.<locals>.func.<locals>.<listcomp>   s*    VVVAakk!d$k??VVVr'   c                d    g | ],}d |                                                               z
  -S )   )is_nullrW   )r:   r;   int_64s     r%   r   z@ArrowNamespace.mean_horizontal.<locals>.func.<locals>.<listcomp>   s4    IIIqa!))++**6222IIIr'   )tupler   rD   r   rj   r   )rE   expr_resultsr3   non_nar]   r   s   `   r%   rm   z,ArrowNamespace.mean_horizontal.<locals>.func   s     !44P4P4P4P%4P4P4P!P!PQQLVVVVVFIIIILIIIF8<006(,3O3OOPPr'   rn   ro   )r1   dtypesInt64r*   rq   r   r   )r$   r]   rm   r   s    ` @r%   mean_horizontalzArrowNamespace.mean_horizontal|   s{    %++--	Q 	Q 	Q 	Q 	Q 	Q 	Q z(("?"G95A	 ) 
 
 	
r'   c                l     d fd} j                             |t           t                      S )NrE   r	   r   ra   c                     t          t          j         fdD                                 ^}}t          t          j        d |D             |j                  }t          ||j        j	                  gS )Nc              3  .   K   | ]} |          V  d S r"   r=   r}   s     r%   r<   z>ArrowNamespace.min_horizontal.<locals>.func.<locals>.<genexpr>   +      <X<X$TT"XX<X<X<X<X<X<Xr'   c                    g | ]	}|j         
S r=   r8   r9   s     r%   r   z?ArrowNamespace.min_horizontal.<locals>.func.<locals>.<listcomp>       %?%?%?1ah%?%?%?r'   rB   r.   )
r   r   rD   r   pcmin_element_wiser8   r   rB   r1   rE   init_seriesr3   native_seriesr]   r$   s   `   r%   rm   z+ArrowNamespace.min_horizontal.<locals>.func       #()<<X<X<X<XRW<X<X<X)X)X#Y#Y K&"#%?%?%?%?%?AS M M0@$-XXX r'   rn   ro   rp   r   s   `` r%   min_horizontalzArrowNamespace.min_horizontal   ^    	 	 	 	 	 	 	 z(("?"G95A	 ) 
 
 	
r'   c                l     d fd} j                             |t           t                      S )NrE   r	   r   ra   c                     t          t          j         fdD                                 ^}}t          t          j        d |D             |j                  }t          ||j        j	                  gS )Nc              3  .   K   | ]} |          V  d S r"   r=   r}   s     r%   r<   z>ArrowNamespace.max_horizontal.<locals>.func.<locals>.<genexpr>   r   r'   c                    g | ]	}|j         
S r=   r   r9   s     r%   r   z?ArrowNamespace.max_horizontal.<locals>.func.<locals>.<listcomp>   r   r'   r   )
r   r   rD   r   r   max_element_wiser8   r   rB   r1   r   s   `   r%   rm   z+ArrowNamespace.max_horizontal.<locals>.func   r   r'   rn   ro   rp   r   s   `` r%   max_horizontalzArrowNamespace.max_horizontal   r   r'   dfsSequence[pa.Table]pa.Tablec               p    | j         dk    rt          j        |d          S t          j        |d          S )N)   default)promote_optionsT)promote)_backend_versionpaconcat_tables)r$   r   s     r%   _concat_diagonalzArrowNamespace._concat_diagonal   s<     E))#CCCCCT2222r'   c                   t          t          j        d |D                                 }t          t          j        d |D                                 }t          j                            ||          S )Nc              3  $   K   | ]}|j         V  d S r"   )column_namesr:   rE   s     r%   r<   z4ArrowNamespace._concat_horizontal.<locals>.<genexpr>   s$      (G(GR(G(G(G(G(G(Gr'   c              3  >   K   | ]}|                                 V  d S r"   )itercolumnsr   s     r%   r<   z4ArrowNamespace._concat_horizontal.<locals>.<genexpr>   s,      *J*J2>>+;+;*J*J*J*J*J*Jr'   )names)listr   rD   r   r   Tablefrom_arrays)r$   r   r   arrayss       r%   _concat_horizontalz!ArrowNamespace._concat_horizontal   sk    U((G(G3(G(G(GGGHHu**J*Jc*J*J*JJJKKx##F%#888r'   c                   |d         j         }t          |dd          d          D ]-\  }}|j         x}|k    rd| d| d| d}t          |          .t          j        |          S )Nr   r   )startz>unable to vstack, column names don't match:
   - dataframe 0: z
   - dataframe z: 
)r   	enumerate	TypeErrorr   r   )r$   r   cols_0irE   cols_currentmsgs          r%   _concat_verticalzArrowNamespace._concat_vertical   s    Q$s122wa000 	% 	%EAr "/F::<)/< <&'< <+7< < < 
  nn$ ; $$$r'   r   c                *    t          j        |           S r"   )r   from_namespacer#   s    r%   	selectorszArrowNamespace.selectors   s    %4T:::r'   	separatorstrc               t     d fd} j                             |t           t                      S )NrE   r	   r   ra   c                "    t          t          j         fdD                                 }|d         j        }	rdnd}t	           
j        | di\  }}t          j        }
                     |g ||R d|i|
j	                  }|gS )Nc              3  .   K   | ]} |          V  d S r"   r=   r}   s     r%   r<   z:ArrowNamespace.concat_str.<locals>.func.<locals>.<genexpr>   s+      -I-I4dd2hh-I-I-I-I-I-Ir'   r   skip	emit_nullr   null_handlingr   )
r   r   rD   rB   r   r>   r   binary_join_element_wiser-   r1   )rE   r3   rB   r   r   separator_scalar
concat_str	compliantr]   r^   r$   r   s   `       r%   rm   z'ArrowNamespace.concat_str.<locals>.func   s    %--I-I-I-I5-I-I-IIIJJF!9>D&7K  $C$$f-$9B$ $ B 
 &(%@J
NBN 0NNNNN %  I
 ;r'   rn   ro   rp   )r$   r   r^   r]   rm   s   ```` r%   r   zArrowNamespace.concat_str   sj    	 	 	 	 	 	 	 	 	& z(("?"G95A	 ) 
 
 	
r'   c                l     d fd} j                             |t           t                      S )NrE   r	   r   ra   c                     j         j        } |t          j         fdD                        ^}}t	          t          j        |j        gd |D             R  |j        j	                  gS )Nc              3  .   K   | ]} |          V  d S r"   r=   r}   s     r%   r<   z8ArrowNamespace.coalesce.<locals>.func.<locals>.<genexpr>   s+      =Y=Y4dd2hh=Y=Y=Y=Y=Y=Yr'   c              3  $   K   | ]}|j         V  d S r"   r   r9   s     r%   r<   z8ArrowNamespace.coalesce.<locals>.func.<locals>.<genexpr>   s$      5O5O1ah5O5O5O5O5O5Or'   r   )
r-   _align_full_broadcastr   rD   r   r   coalescer8   rB   r1   )rE   alignr   r3   r]   r$   s   `   r%   rm   z%ArrowNamespace.coalesce.<locals>.func   s    L6E#(5%*==Y=Y=Y=YSX=Y=Y=Y*Y*Y#Z K&K 2P5O5O5O5O5OPPP$) M   r'   rn   ro   rp   r   s   `` r%   r   zArrowNamespace.coalesce   s^    		 		 		 		 		 		 		 z(("?"G95A	 ) 
 
 	
r'   c                l     d fd} j                             |t           t                      S )NrE   r	   r   ra   c                8    t          t          j         fdD                                 }|d         j        }t	          j        d |D             dt          d |D                       i}t          j        |g          }t          ||j	                  gS )Nc              3  .   K   | ]} |          V  d S r"   r=   r}   s     r%   r<   z6ArrowNamespace.struct.<locals>.func.<locals>.<genexpr>   s+      .J.JDttBxx.J.J.J.J.J.Jr'   r   c              3  d   K   | ]+}t          |          d k    r|j        n|j        d         V  ,dS )r   r   N)rA   r8   r9   s     r%   r<   z6ArrowNamespace.struct.<locals>.func.<locals>.<genexpr>   s<      JJac!ffqjj!((ahqkJJJJJJr'   field_namesc              3  $   K   | ]}|j         V  d S r"   )rB   r9   s     r%   r<   z6ArrowNamespace.struct.<locals>.func.<locals>.<genexpr>   s$      !9!9Q!&!9!9!9!9!9!9r'   r   )
r   r   rD   rB   r   make_structr   chunked_arrayr   r1   )rE   r3   rB   struct_arrayresultr]   r$   s   `    r%   rm   z#ArrowNamespace.struct.<locals>.func   s    5..J.J.J.JE.J.J.JJJKKF!9>D>JJ6JJJ!!9!9&!9!9!999 L %|n55FT4=IIIJJr'   rn   ro   rp   r   s   `` r%   structzArrowNamespace.struct   se    		K 		K 		K 		K 		K 		K 		K z(("?"G95A	 ) 
 
 	
r'   Nwhenr   then	otherwiseChunkedArrayAny | Nonec                    |'t          j        t          |          |j                  n|}t	          j        |                    t          j        d                    ||          S )NF)r   nullsrA   typer   if_elseri   scalar)r$   r   r   r   s       r%   _if_then_elsezArrowNamespace._if_then_else  sR     7@6GBHSYY	222Y	z$..5)9)9::D)LLLr'   abmethodr   c                    |dk    rd}t          |          d	 fd} j                            |t                    t	                               S )
Npearsonz4Only 'pearson' correlation is supported for Pyarrow.rE   r	   r   ra   c                >   |                                }|j        }|                                j        }t          j        |          }t          j        |          }t          j        ||          }t          j        ||          }t          j        t          j        ||                    }t          j        |          }	t          j        |          }
t          j        |t          j        |	|
                    }t          j	        |g|j
                  gS )NrU   )_evaluate_single_output_exprr8   r   meansubtractmultiplystddevdivider   rD   rB   )rE   a_seriesarr1arr2mean1mean2dev1dev2
covariancestd1std2correlationr   r   r$   s               r%   rm   z!ArrowNamespace.corr.<locals>.func  s    66q99H?D22155<DGDMMEGDMME;tU++D;tU++DT4!8!899J9T??D9T??D)JD$0G0GHHK)%X]D   r'   rn   ro   )NotImplementedErrorr*   rq   r   r   )r$   r   r   r   r   rm   s   ```   r%   corrzArrowNamespace.corr  s    YHC%c***	 	 	 	 	 	 	 	, z(("?1"E"E9!Q??	 ) 
 
 	
r'   )r   r    )r   r(   )r   r+   )r.   r   r   r/   )r3   r   r   r4   )r   r   )rN   r   rO   rP   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   r   r   )r   r   r   r   r   r   r   r   )__name__
__module____qualname__r   PYARROW_implementationpropertyr&   r*   r-   r2   r>   rA   r\   rs   ry   r   r   r   r   r   r   r   r   r   r   r   r   r  r=   r'   r%   r   r      s        %,O   X    X    X       K K K K
	
 	
 	
 	

 
 
 
 
 
 
 

 
 
 

 
 
 

 
 
 
 
 
 
 
"
 
 
 
"3 3 3 3
9 9 9 9

% 
% 
% 
% ; ; ; X;
 
 
 
:
 
 
 
&
 
 
 
. -1	M M M M M 
  
  
  
  
  
r'   r   r   ).
__future__r   rj   	functoolsr   	itertoolsr   typingr   r   pyarrowr   pyarrow.computecomputer   narwhals._arrow.dataframer	   narwhals._arrow.exprr   narwhals._arrow.selectorsr   narwhals._arrow.seriesr   narwhals._arrow.utilsr   narwhals._compliantr   narwhals._expression_parsingr   r   narwhals._utilsr   collections.abcr   r   narwhals._arrow.typingr   r   r   r   narwhals.typingr   r   r   r   r   r=   r'   r%   <module>r*     s   " " " " " "              ) ) ) ) ) ) ) )           4 4 4 4 4 4 * * * * * * < < < < < < . . . . . . A A A A A A . . . . . .        + * * * * * L22222222MMMMMMMMMM''''''KKKKKKKKKKU
 U
 U
 U
 U
>;	28EVVWU
 U
 U
 U
 U
r'   