o
    h3                  	   @  s  U 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 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rd 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 Z(de)d< dZ*de)d< G dd deeeedd f Z+G d!d" d"eeeed f Z,G d#d$ d$eeeef eZ-dS )%    )annotationsN)reduce)TYPE_CHECKING)Any)Literal)Sequence)CompliantThen)EagerNamespace)	EagerWhen)combine_alias_output_names)combine_evaluate_output_namesPandasLikeDataFramePandasLikeExpr)PandasSelectorNamespacePandasLikeSeries)align_series_full_broadcast)import_dtypes_module)NDFrameT)DType)NonNestedLiteral)Implementation)Versionz
Literal[0]VERTICAL   z
Literal[1]
HORIZONTALc                   @  s   e Zd ZedDddZedEddZedFd	d
ZedGddZdHddZdIddZ	dJddZ
dKd!d"ZdKd#d$ZdKd%d&ZdKd'd(ZdKd)d*ZdKd+d,Zed-d. ZdLd2d3ZdMd5d6ZdLd7d8ZdNd;d<ZdOdAdBZdCS )PPandasLikeNamespacereturntype[PandasLikeDataFrame]c                 C     t S Nr   self r%   S/var/www/vscode/kcb/lib/python3.10/site-packages/narwhals/_pandas_like/namespace.py
_dataframe-      zPandasLikeNamespace._dataframetype[PandasLikeExpr]c                 C  r!   r"   r   r#   r%   r%   r&   _expr1   r(   zPandasLikeNamespace._exprtype[PandasLikeSeries]c                 C  r!   r"   r   r#   r%   r%   r&   _series5   r(   zPandasLikeNamespace._seriesr   c                 C  s
   t | S r"   )r   from_namespacer#   r%   r%   r&   	selectors9   s   
zPandasLikeNamespace.selectorsimplementationr   backend_versiontuple[int, ...]versionr   Nonec                 C  s   || _ || _|| _d S r"   )_implementation_backend_version_version)r$   r/   r0   r2   r%   r%   r&   __init__>   s   
zPandasLikeNamespace.__init__valuer   dtypeDType | type[DType] | Noner   c              
     s<   dfdd t  fddd	d
dd d jjjdS )Ndfr   r   r   c                   s4   j jgd| jjdd d} r| S |S )Nliteralr   r   datanameindexcontext)r,   from_iterable_native_framer@   cast)r;   pandas_series)r9   r$   r8   r%   r&   _lit_pandas_seriesK   s   
z3PandasLikeNamespace.lit.<locals>._lit_pandas_seriesc                   s
    | gS r"   r%   r;   )rF   r%   r&   <lambda>W   s   
 z)PandasLikeNamespace.lit.<locals>.<lambda>r   litc                 S     dgS )Nr<   r%   _dfr%   r%   r&   rH   Z       depthfunction_nameevaluate_output_namesalias_output_namesr/   r0   r2   )r;   r   r   r   r   r4   r5   r6   )r$   r8   r9   r%   )rF   r9   r$   r8   r&   rI   H   s   
zPandasLikeNamespace.litc              
     s*   t  fdddddd d  j j jdS )Nc                   s     j jt| jgddg dgS )Nlenr   )r?   r@   rA   )r,   rB   rT   rC   rG   r#   r%   r&   rH   c   s   z)PandasLikeNamespace.len.<locals>.<lambda>r   rT   c                 S  rJ   )NrT   r%   rK   r%   r%   r&   rH   j   rM   rN   rS   r#   r%   r#   r&   rT   a   s   
zPandasLikeNamespace.lenexprsc                   @   d fdd}| j j|tdd  D d	 d
t  t  | dS )Nr;   r   r   list[PandasLikeSeries]c                   s6    fddD }t | }dd |D }ttj|gS )Nc                      g | ]}| D ]}|qqS r%   r%   .0r*   srG   r%   r&   
<listcomp>t       zDPandasLikeNamespace.sum_horizontal.<locals>.func.<locals>.<listcomp>c                 s  s    | ]
}| d ddV  qdS )r   N	fill_nullrZ   r[   r%   r%   r&   	<genexpr>v       zCPandasLikeNamespace.sum_horizontal.<locals>.func.<locals>.<genexpr>r   r   operatoradd)r;   seriesnative_seriesrU   rG   r&   funcs   s   z0PandasLikeNamespace.sum_horizontal.<locals>.funcc                 s      | ]}|j V  qd S r"   _depthrZ   xr%   r%   r&   ra   {       z5PandasLikeNamespace.sum_horizontal.<locals>.<genexpr>r   sum_horizontalri   rO   rP   rQ   rR   rA   r;   r   r   rW   r*   _from_callablemaxr   r   r$   rU   ri   r%   rh   r&   rp   r      z"PandasLikeNamespace.sum_horizontalc                   rV   )Nr;   r   r   rW   c                   $   t  fddD  }ttj|gS )Nc                 3  "    | ]}| D ]}|V  qqd S r"   r%   rY   rG   r%   r&   ra           zCPandasLikeNamespace.all_horizontal.<locals>.func.<locals>.<genexpr>)r   r   rd   and_r;   rf   rh   rG   r&   ri         z0PandasLikeNamespace.all_horizontal.<locals>.funcc                 s  rj   r"   rk   rm   r%   r%   r&   ra      ro   z5PandasLikeNamespace.all_horizontal.<locals>.<genexpr>r   all_horizontalrq   rr   rs   rv   r%   rh   r&   r~      rw   z"PandasLikeNamespace.all_horizontalc                   rV   )Nr;   r   r   rW   c                   rx   )Nc                 3  ry   r"   r%   rY   rG   r%   r&   ra      rz   zCPandasLikeNamespace.any_horizontal.<locals>.func.<locals>.<genexpr>)r   r   rd   or_r|   rh   rG   r&   ri      r}   z0PandasLikeNamespace.any_horizontal.<locals>.funcc                 s  rj   r"   rk   rm   r%   r%   r&   ra      ro   z5PandasLikeNamespace.any_horizontal.<locals>.<genexpr>r   any_horizontalrq   rr   rs   rv   r%   rh   r&   r      rw   z"PandasLikeNamespace.any_horizontalc                   rV   )Nr;   r   r   rW   c                   sP    fddD }t dd |D  }t dd |D  }ttj|ttj| gS )Nc                   rX   r%   r%   rY   rG   r%   r&   r\      r]   zEPandasLikeNamespace.mean_horizontal.<locals>.func.<locals>.<listcomp>c                 s  s     | ]}|j d dddV  qdS )r   N)strategylimitr^   r`   r%   r%   r&   ra      s    zDPandasLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>c                 s  s    | ]	}d |   V  qdS )r   Nis_nullr`   r%   r%   r&   ra          rc   )r;   expr_resultsrf   non_narh   rG   r&   ri      s   z1PandasLikeNamespace.mean_horizontal.<locals>.funcc                 s  rj   r"   rk   rm   r%   r%   r&   ra      ro   z6PandasLikeNamespace.mean_horizontal.<locals>.<genexpr>r   mean_horizontalrq   rr   rs   rv   r%   rh   r&   r      s   z#PandasLikeNamespace.mean_horizontalc                   B   d fdd}j j|tdd  D d	 d
t  t  dS )Nr;   r   r   rW   c                   \    fddD }t | }tjdd |D ddjjddjjjd	|d
 j	gS )Nc                   rX   r%   r%   rY   rG   r%   r&   r\      r]   zDPandasLikeNamespace.min_horizontal.<locals>.func.<locals>.<listcomp>c                 s      | ]}|  V  qd S r"   to_framer`   r%   r%   r&   ra          zCPandasLikeNamespace.min_horizontal.<locals>.func.<locals>.<genexpr>
horizontalhowr   axisr/   r0   r2   r   )
r   r   concatrC   minr4   r5   r6   aliasr?   r|   rU   r$   rG   r&   ri         z0PandasLikeNamespace.min_horizontal.<locals>.funcc                 s  rj   r"   rk   rm   r%   r%   r&   ra      ro   z5PandasLikeNamespace.min_horizontal.<locals>.<genexpr>r   min_horizontalrq   rr   rs   rv   r%   r   r&   r         z"PandasLikeNamespace.min_horizontalc                   r   )Nr;   r   r   rW   c                   r   )Nc                   rX   r%   r%   rY   rG   r%   r&   r\      r]   zDPandasLikeNamespace.max_horizontal.<locals>.func.<locals>.<listcomp>c                 s  r   r"   r   r`   r%   r%   r&   ra      r   zCPandasLikeNamespace.max_horizontal.<locals>.func.<locals>.<genexpr>r   r   r   r   r   r   )
r   r   r   rC   ru   r4   r5   r6   r   r?   r|   r   rG   r&   ri      r   z0PandasLikeNamespace.max_horizontal.<locals>.funcc                 s  rj   r"   rk   rm   r%   r%   r&   ra      ro   z5PandasLikeNamespace.max_horizontal.<locals>.<genexpr>r   max_horizontalrq   rr   rs   rv   r%   r   r&   r      r   z"PandasLikeNamespace.max_horizontalc                 C  s   t r	ddl}|jS | j jS )z0Return the **native** equivalent of `pd.concat`.r   N)r   pandasr   r4   to_native_namespace)r$   pdr%   r%   r&   _concat   s   zPandasLikeNamespace._concatdfsSequence[pd.DataFrame]pd.DataFramec                C  sN   | j  r | jdk r | jdk r| j|tdddS | j|tddS | j|tdS )N   )r   F)r   copysortr   r   r   )r4   	is_pandasr5   r   r   r$   r   r%   r%   r&   _concat_diagonal   s
   
z$PandasLikeNamespace._concat_diagonalSequence[NDFrameT]c                C  s   | j  r)t  tjddtd | j|tdW  d    S 1 s#w   Y  n| j  r;| j	dk r;| j|tddS | j|tdS )NignorezDThe behavior of array concatenation with empty entries is deprecated)messagecategoryr   r   Fr   )
r4   is_cudfwarningscatch_warningsfilterwarningsFutureWarningr   r   r   r5   r   r%   r%   r&   _concat_horizontal   s   

"z&PandasLikeNamespace._concat_horizontalc                C  s   |d j }t|dd  ddD ])\}}|j }t|t|kr$||k s8d|  d| d|  d}t|q| j rK| jdk rK| j	|t
d	d
S | j	|t
dS )Nr   r   )startz>unable to vstack, column names don't match:
   - dataframe 0: z
   - dataframe z: 
r   Fr   r   )columns	enumeraterT   allto_list	TypeErrorr4   r   r5   r   r   )r$   r   cols_0ir;   cols_currentmsgr%   r%   r&   _concat_vertical  s"   
z$PandasLikeNamespace._concat_vertical	predicate
PandasWhenc                 C  s   t j|| dS )N)rA   )r   	from_expr)r$   r   r%   r%   r&   when  s   zPandasLikeNamespace.when	separatorstrignore_nullsboolc                  sR   t j d fdd}jj|tdd D d	 d
t t dS )Nr;   r   r   rW   c           	        s    fddD }t fdd|D  }t dd |D  }s6ttj|}tfdd|| d }|gS dd t||D ^}}|jgt| d	|jj	d
fdd|d d D }ttj
dd t||D |}|gS )Nc                   rX   r%   r%   rY   rG   r%   r&   r\   !  r]   z@PandasLikeNamespace.concat_str.<locals>.func.<locals>.<listcomp>c                 3  s    | ]
}|   V  qd S r"   )rD   Stringr`   )dtypesr%   r&   ra   #  rb   z?PandasLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>c                 s  r   r"   r   r`   r%   r%   r&   ra   %  r   c                   s   |   | S r"   r%   )rn   y)r   r%   r&   rH   )  s    z>PandasLikeNamespace.concat_str.<locals>.func.<locals>.<lambda>c                 S  s   g | ]\}}| | d qS ) zip_with)rZ   r[   nmr%   r%   r&   r\   -  s    sepr=   c                 3  s    | ]
}  | d V  qdS )r   Nr   )rZ   r   )	sep_arrayr%   r&   ra   7  rb   c                 s  s    | ]	\}}|| V  qd S r"   r%   )rZ   r[   vr%   r%   r&   ra   :  r   )r   r   rd   r   r   ziprB   rT   nativer@   re   )	r;   r   rf   	null_masknull_mask_resultresult
init_valuevalues
separatorsr   rU   r   r$   r   )r;   r   r&   ri      s6   
z,PandasLikeNamespace.concat_str.<locals>.funcc                 s  rj   r"   rk   rm   r%   r%   r&   ra   B  ro   z1PandasLikeNamespace.concat_str.<locals>.<genexpr>r   
concat_strrq   rr   )r   r6   r*   rt   ru   r   r   )r$   r   r   rU   ri   r%   r   r&   r     s   
 zPandasLikeNamespace.concat_strN)r   r    )r   r)   )r   r+   )r   r   )r/   r   r0   r1   r2   r   r   r3   )r8   r   r9   r:   r   r   )r   r   )rU   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )rU   r   r   r   r   r   r   r   )__name__
__module____qualname__propertyr'   r*   r,   r.   r7   rI   rT   rp   r~   r   r   r   r   r   r   r   r   r   r   r%   r%   r%   r&   r   $   s2    	











	


r   r   pd.Series[Any]c                   @  s$   e Zd ZedddZdd
dZdS )r   r   type[PandasThen]c                 C  r!   r"   )
PandasThenr#   r%   r%   r&   _thenM  r(   zPandasWhen._thenr   r   then	otherwise!pd.Series[Any] | NonNestedLiteralc                C  s   |d u r	| |S | ||S r"   )where)r$   r   r   r   r%   r%   r&   _if_then_elseQ  s   zPandasWhen._if_then_elseN)r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r%   r%   r%   r&   r   J  s    r   c                   @  s   e Zd ZdS )r   N)r   r   r   r%   r%   r%   r&   r   [  s    r   ).
__future__r   rd   r   	functoolsr   typingr   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.utilsr   r   r   narwhals._pandas_like.typingr   narwhals.dtypesr   narwhals.typingr   r   r   r   __annotations__r   r   r   r   r%   r%   r%   r&   <module>   s\    
  
(
