
    -Ph2              	         U d dl mZ d dlZd dlZd dlmZ d dlmZmZm	Z	 d dl
Zd dlmZmZmZ d dlmZmZ d dlmZ d dlmZ 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 m!Z! d dl"m#Z#m$Z$ d Z%de&d<   dZ'de&d<    G d deeeeej(        f                   Z) G d deeeef                   Z* G d deeeef         e          Z+dS )    )annotationsN)reduce)TYPE_CHECKINGLiteralSequence)CompliantThenEagerNamespace	EagerWhen)combine_alias_output_namescombine_evaluate_output_namesPandasLikeDataFramePandasLikeExpr)PandasSelectorNamespacePandasLikeSeries)align_series_full_broadcast)NDFrameT)ImplementationVersion)	IntoDTypeNonNestedLiteralz
Literal[0]VERTICAL   z
Literal[1]
HORIZONTALc                      e Zd Zed1d            Zed2d            Zed3d            Zed4d	            Zd5dZd6dZ	d7dZ
d8dZd8dZd8dZd8dZd8dZd8dZed              Zd9d$Zd:d&Zd9d'Zd;d*Zd<d/Zd0S )=PandasLikeNamespacereturntype[PandasLikeDataFrame]c                    t           S Nr   selfs    _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/narwhals/_pandas_like/namespace.py
_dataframezPandasLikeNamespace._dataframe!   s    ""    type[PandasLikeExpr]c                    t           S r"   r   r#   s    r%   _exprzPandasLikeNamespace._expr%   s    r'   type[PandasLikeSeries]c                    t           S r"   r   r#   s    r%   _serieszPandasLikeNamespace._series)   s    r'   r   c                *    t          j        |           S r"   )r   from_namespacer#   s    r%   	selectorszPandasLikeNamespace.selectors-   s    &5d;;;r'   implementationr   backend_versiontuple[int, ...]versionr   Nonec                0    || _         || _        || _        d S r"   )_implementation_backend_version_version)r$   r1   r2   r4   s       r%   __init__zPandasLikeNamespace.__init__2   s      . /r'   valuer   dtypeIntoDType | Noner   c           
     n     d fdt          fdddd	 d  j         j         j        
          S )Ndfr   r   r   c                    j                             gd| j        j        dd                   }r|                              S |S )Nliteralr   r   datanameindexcontext)r-   from_iterable_native_framerE   cast)r?   pandas_seriesr<   r$   r;   s     r%   _lit_pandas_seriesz3PandasLikeNamespace.lit.<locals>._lit_pandas_series=   s`     L66W&,QqS1	 7  M  1$))%000  r'   c                     |           gS r"    )r?   rK   s    r%   <lambda>z)PandasLikeNamespace.lit.<locals>.<lambda>I   s    **2../ r'   r   litc                    dgS )NrA   rM   _dfs    r%   rN   z)PandasLikeNamespace.lit.<locals>.<lambda>L   s    yk r'   depthfunction_nameevaluate_output_namesalias_output_namesr1   r2   r4   )r?   r   r   r   r   r7   r8   r9   )r$   r;   r<   rK   s   ```@r%   rO   zPandasLikeNamespace.lit<   ss    		! 		! 		! 		! 		! 		! 		! 		! ////"9"9#/ 1M	
 	
 	
 		
r'   c           
     X     t           fdddd d  j         j         j                  S )Nc                j    j                             t          | j                  gddg          gS )Nlenr   )rD   rE   rF   )r-   rG   r[   rH   )r?   r$   s    r%   rN   z)PandasLikeNamespace.len.<locals>.<lambda>U   s=    **)**+%sD +   r'   r   r[   c                    dgS )Nr[   rM   rQ   s    r%   rN   z)PandasLikeNamespace.len.<locals>.<lambda>\   s    ug r'   rS   rX   r#   s   `r%   r[   zPandasLikeNamespace.lenS   sP       
 "5"5#/ 1M
 
 
 	
r'   exprsc           	         d
fd}| j                             |t          d D                       dz   dt           t	           | 	          S )Nr?   r   r   list[PandasLikeSeries]c                      fdD             }t          | }d |D             }t          t          j        |          gS )Nc                0    g | ]} |          D ]}|S rM   rM   .0r*   sr?   s      r%   
<listcomp>zDPandasLikeNamespace.sum_horizontal.<locals>.func.<locals>.<listcomp>f   .    >>>EEE"II>>qa>>>>r'   c              3  D   K   | ]}|                     d dd          V  dS )r   N	fill_nullrc   rd   s     r%   	<genexpr>zCPandasLikeNamespace.sum_horizontal.<locals>.func.<locals>.<genexpr>h   s2      HHAQ[[D$77HHHHHHr'   r   r   operatoradd)r?   seriesnative_seriesr]   s   `  r%   funcz0PandasLikeNamespace.sum_horizontal.<locals>.funce   sO    >>>>U>>>F0&9FHHHHHM8<7788r'   c              3  $   K   | ]}|j         V  d S r"   _depthrc   xs     r%   rk   z5PandasLikeNamespace.sum_horizontal.<locals>.<genexpr>m   $      ..1ah......r'   r   sum_horizontalrq   rT   rU   rV   rW   rF   r?   r   r   r_   r*   _from_callablemaxr   r   r$   r]   rq   s    ` r%   rx   z"PandasLikeNamespace.sum_horizontald   sz    	9 	9 	9 	9 	9 	9 z((.......2*"?"G95A ) 
 
 	
r'   c           	         d
fd}| j                             |t          d D                       dz   dt           t	           | 	          S )Nr?   r   r   r_   c                f     t           fdD              }t          t          j        |          gS )Nc              3  8   K   | ]} |          D ]}|V  d S r"   rM   rb   s      r%   rk   zCPandasLikeNamespace.all_horizontal.<locals>.func.<locals>.<genexpr>w   8      ::b		::1!:::::::r'   )r   r   rm   and_r?   ro   r]   s   ` r%   rq   z0PandasLikeNamespace.all_horizontal.<locals>.funcu   s<    0:::::::F 8=&1122r'   c              3  $   K   | ]}|j         V  d S r"   rs   ru   s     r%   rk   z5PandasLikeNamespace.all_horizontal.<locals>.<genexpr>}   rw   r'   r   all_horizontalry   rz   r{   r~   s    ` r%   r   z"PandasLikeNamespace.all_horizontalt   sz    	3 	3 	3 	3 	3 	3 z((.......2*"?"G95A ) 
 
 	
r'   c           	         d
fd}| j                             |t          d D                       dz   dt           t	           | 	          S )Nr?   r   r   r_   c                f     t           fdD              }t          t          j        |          gS )Nc              3  8   K   | ]} |          D ]}|V  d S r"   rM   rb   s      r%   rk   zCPandasLikeNamespace.any_horizontal.<locals>.func.<locals>.<genexpr>   r   r'   )r   r   rm   or_r   s   ` r%   rq   z0PandasLikeNamespace.any_horizontal.<locals>.func   s<    0:::::::F 8<0011r'   c              3  $   K   | ]}|j         V  d S r"   rs   ru   s     r%   rk   z5PandasLikeNamespace.any_horizontal.<locals>.<genexpr>   rw   r'   r   any_horizontalry   rz   r{   r~   s    ` r%   r   z"PandasLikeNamespace.any_horizontal   sz    	2 	2 	2 	2 	2 	2 z((.......2*"?"G95A ) 
 
 	
r'   c           	         d
fd}| j                             |t          d D                       dz   dt           t	           | 	          S )Nr?   r   r   r_   c                      fdD             }t          d |D              }t          d |D              }t          t          j        |          t          t          j        |          z  gS )Nc                0    g | ]} |          D ]}|S rM   rM   rb   s      r%   re   zEPandasLikeNamespace.mean_horizontal.<locals>.func.<locals>.<listcomp>   .    DDD%%%))DDQADDDDr'   c              3  F   K   | ]}|                     d dd          V  dS )r   N)strategylimitrh   rj   s     r%   rk   zDPandasLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s4      RR!++a$d+;;RRRRRRr'   c              3  D   K   | ]}d |                                 z
  V  dS )r   Nis_nullrj   s     r%   rk   zDPandasLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s.      2Y2Yq1qyy{{?2Y2Y2Y2Y2Y2Yr'   rl   )r?   expr_resultsro   non_nar]   s   `   r%   rq   z1PandasLikeNamespace.mean_horizontal.<locals>.func   sy    DDDD5DDDL0RR\RRRF 12Y2YL2Y2Y2YZF8<006(,3O3OOPPr'   c              3  $   K   | ]}|j         V  d S r"   rs   ru   s     r%   rk   z6PandasLikeNamespace.mean_horizontal.<locals>.<genexpr>   rw   r'   r   mean_horizontalry   rz   r{   r~   s    ` r%   r   z#PandasLikeNamespace.mean_horizontal   s    	Q 	Q 	Q 	Q 	Q 	Q z((.......2+"?"G95A ) 
 
 	
r'   c           	          d
 fd} j                             |t          d D                       dz   dt           t	            	          S )Nr?   r   r   r_   c                &     fdD             }t          | }t                              d |D             d          j                            d          j        j        j                                      |d         j	                  gS )	Nc                0    g | ]} |          D ]}|S rM   rM   rb   s      r%   re   zDPandasLikeNamespace.min_horizontal.<locals>.func.<locals>.<listcomp>   rf   r'   c              3  >   K   | ]}|                                 V  d S r"   to_framerj   s     r%   rk   zCPandasLikeNamespace.min_horizontal.<locals>.func.<locals>.<genexpr>   *      66!666666r'   
horizontalhowr   axisr1   r2   r4   r   )
r   r   concatrH   minr7   r8   r9   aliasrD   r?   ro   r]   r$   s   ` r%   rq   z0PandasLikeNamespace.min_horizontal.<locals>.func       >>>>U>>>F0&9F !KK66v666L    #CCQCKK#'#7$($9 M   %q	''	 	r'   c              3  $   K   | ]}|j         V  d S r"   rs   ru   s     r%   rk   z5PandasLikeNamespace.min_horizontal.<locals>.<genexpr>   rw   r'   r   min_horizontalry   rz   r{   r~   s   `` r%   r   z"PandasLikeNamespace.min_horizontal       	 	 	 	 	 	 	 z((.......2*"?"G95A ) 
 
 	
r'   c           	          d
 fd} j                             |t          d D                       dz   dt           t	            	          S )Nr?   r   r   r_   c                &     fdD             }t          | }t                              d |D             d          j                            d          j        j        j                                      |d         j	                  gS )	Nc                0    g | ]} |          D ]}|S rM   rM   rb   s      r%   re   zDPandasLikeNamespace.max_horizontal.<locals>.func.<locals>.<listcomp>   rf   r'   c              3  >   K   | ]}|                                 V  d S r"   r   rj   s     r%   rk   zCPandasLikeNamespace.max_horizontal.<locals>.func.<locals>.<genexpr>   r   r'   r   r   r   r   r   r   )
r   r   r   rH   r}   r7   r8   r9   r   rD   r   s   ` r%   rq   z0PandasLikeNamespace.max_horizontal.<locals>.func   r   r'   c              3  $   K   | ]}|j         V  d S r"   rs   ru   s     r%   rk   z5PandasLikeNamespace.max_horizontal.<locals>.<genexpr>   rw   r'   r   max_horizontalry   rz   r{   r~   s   `` r%   r   z"PandasLikeNamespace.max_horizontal   r   r'   c                b    t           rddl}|j        S | j                                        j        S )z0Return the **native** equivalent of `pd.concat`.r   N)r   pandasr   r7   to_native_namespace)r$   pds     r%   _concatzPandasLikeNamespace._concat   s8      	9#7799@@r'   dfsSequence[pd.DataFrame]pd.DataFramec                  | j                                         rQ| j        dk     rF| j        dk     r|                     |t          dd          S |                     |t          d          S |                     |t                    S )N   )r   F)r   copysortr   r   r   )r7   	is_pandasr8   r   r   r$   r   s     r%   _concat_diagonalz$PandasLikeNamespace._concat_diagonal   s}    ))++ 	@0E0L0L$t++||ChU|OOO<<(<???||Ch|///r'   Sequence[NDFrameT]c                  | j                                         rdt          j                    5  t          j        ddt
                     |                     |t                    cd d d            S # 1 swxY w Y   nA| j                                         r(| j	        dk     r|                     |t          d          S |                     |t                    S )NignorezDThe behavior of array concatenation with empty entries is deprecated)messagecategoryr   r   Fr   )
r7   is_cudfwarningscatch_warningsfilterwarningsFutureWarningr   r   r   r8   r   s     r%   _concat_horizontalz&PandasLikeNamespace._concat_horizontal   s   '')) 		B(** : :'b*   
 ||Cj|99: : : : : : : : : : : : : : : : : !++-- 	B$2G$2N2N<<*5<AAA||Cj|111s   8A22A69A6c                  |d         j         }t          |dd          d          D ]\  }}|j         }t          |          t          |          k    r||k                                    s?d|                                 d| d|                                 d}t          |          | j                                        r(| j        dk     r| 	                    |t          d	
          S | 	                    |t                    S )Nr   r   )startz>unable to vstack, column names don't match:
   - dataframe 0: z
   - dataframe z: 
r   Fr   r   )columns	enumerater[   allto_list	TypeErrorr7   r   r8   r   r   )r$   r   cols_0ir?   cols_currentmsgs          r%   _concat_verticalz$PandasLikeNamespace._concat_vertical   s'   Qs122wa000 
	% 
	%EAr:L\""c&kk118N7S7S7U7U1F)/)9)9F F&'F F+7+?+?+A+AF F F 
  nn$ 2 ))++ 	@0E0L0L<<(<???||Ch|///r'   	predicate
PandasWhenc                :    t                               ||           S )N)rF   )r   	from_expr)r$   r   s     r%   whenzPandasLikeNamespace.when  s    ##It#<<<r'   	separatorstrignore_nullsboolc          	           j         j                                        d
 fd} j                            |t          d D                       dz   dt           t            	          S )Nr?   r   r   r_   c                6   	  fd
D             }t          fd|D              }t          d |D              }sCt          t          j        |          }t          fd|                              | d           }nd t          ||          D             ^}}|                    gt          |          z  d|j        j	                  		fd|d d	         D             }t          t          j
        d
 t          ||          D             |          }|gS )Nc                0    g | ]} |          D ]}|S rM   rM   rb   s      r%   re   z@PandasLikeNamespace.concat_str.<locals>.func.<locals>.<listcomp>  r   r'   c              3  B   K   | ]}|                               V  d S r"   )rI   )rc   rd   strings     r%   rk   z?PandasLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>  s-      2X2Xa166&>>2X2X2X2X2X2Xr'   c              3  >   K   | ]}|                                 V  d S r"   r   rj   s     r%   rk   z?PandasLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>  s*      5X5Xaaiikk5X5X5X5X5X5Xr'   c                    | z   |z   S r"   rM   )rv   yr   s     r%   rN   z>PandasLikeNamespace.concat_str.<locals>.func.<locals>.<lambda>  s    Q]Q-> r'   c                B    g | ]\  }}|                     | d           S ) zip_with)rc   rd   nms      r%   re   z@PandasLikeNamespace.concat_str.<locals>.func.<locals>.<listcomp>  s9     ' ' ',1ArAJJsB''' ' 'r'   seprB   c              3  F   K   | ]}                     | d           V  dS )r   Nr   )rc   r   	sep_arrays     r%   rk   z?PandasLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>$  s5      SSbi00"b99SSSSSSr'   c              3  &   K   | ]\  }}||z   V  d S r"   rM   )rc   rd   vs      r%   rk   z?PandasLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>&  s*      "M"MTQ1q5"M"M"M"M"M"Mr'   )r   r   rm   r   r   ziprG   r[   nativerE   rn   )r?   r   ro   	null_masknull_mask_resultresult
init_valuevalues
separatorsr   r]   r   r$   r   r   s   `        @r%   rq   z,PandasLikeNamespace.concat_str.<locals>.func  si   DDDD5DDDL02X2X2X2X<2X2X2XYF35X5X<5X5X5XYI #)(,	#B#B  > > > >GGPP%%t ' '585K5K' ' '#
V '44#s:6$+1 	 5  	 TSSSIcrcNSSS
L"M"MSV5L5L"M"M"Mz  8Or'   c              3  $   K   | ]}|j         V  d S r"   rs   ru   s     r%   rk   z1PandasLikeNamespace.concat_str.<locals>.<genexpr>-  rw   r'   r   
concat_strry   rz   )r9   dtypesStringr*   r|   r}   r   r   )r$   r   r   r]   rq   r   s   ```` @r%   r  zPandasLikeNamespace.concat_str
  s     %,,..	 	 	 	 	 	 	 	 	 	8 z((.......2&"?"G95A ) 
 
 	
r'   N)r   r    )r   r(   )r   r+   )r   r   )r1   r   r2   r3   r4   r   r   r5   )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__propertyr&   r*   r-   r0   r:   rO   r[   rx   r   r   r   r   r   r   r   r   r   r   r  rM   r'   r%   r   r      s        # # # X#    X       X  < < < X<       
 
 
 
.
 
 
 
"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$
 
 
 
2
 
 
 
2 A A XA0 0 0 02 2 2 20 0 0 0"= = = =(
 (
 (
 (
 (
 (
r'   r   c                  .    e Zd Zedd            Zdd	Zd
S )r   r   type[PandasThen]c                    t           S r"   )
PandasThenr#   s    r%   _thenzPandasWhen._then6  s    r'   r   r   then	otherwisePandasLikeSeries | Nonec               
   |3t          ||          \  }}|j                            |j                  }n:t          |||          \  }}}|j                            |j        |j                  }|                    |          S r"   )r   r   where_with_native)r$   r   r  r  
res_natives        r%   _if_then_elsezPandasWhen._if_then_else:  s~     4T4@@JD$**4;77JJ$?dI$V$V!D$	**4;	8HIIJ  ,,,r'   N)r   r  )r   r   r  r   r  r  r   r   )r  r  r	  r
  r  r  rM   r'   r%   r   r   5  sF           X- - - - - -r'   r   c                      e Zd ZdS )r  N)r  r  r	  rM   r'   r%   r  r  J  s        3r'   r  ),
__future__r   rm   r   	functoolsr   typingr   r   r   r   r   narwhals._compliantr   r	   r
   narwhals._expression_parsingr   r   narwhals._pandas_like.dataframer   narwhals._pandas_like.exprr   narwhals._pandas_like.selectorsr   narwhals._pandas_like.seriesr   narwhals._pandas_like.utilsr   narwhals._pandas_like.typingr   narwhals._utilsr   r   narwhals.typingr   r   r   __annotations__r   	DataFramer   r   r  rM   r'   r%   <module>r(     s:   " " " " " " "         3 3 3 3 3 3 3 3 3 3     H H H H H H H H H H        @ ? ? ? ? ? 5 5 5 5 5 5 C C C C C C 9 9 9 9 9 9 C C C C C C <55555577777777;;;;;;;;    
    T
 T
 T
 T
 T
&(8.",VWT
 T
 T
n- - - - -.0@.PQ - - -*    %'7GH.    r'   