o
    $&]i_9                  	   @  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	m
Z
mZmZmZ d dl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mZ d dlmZ d dl m!Z! e	rd dl"m#Z#m$Z$ d dl%m&Z& d dl m'Z'm(Z( d dl)m*Z*m+Z+ e
Z,de-d< 	 ed  Z.de-d< ed Z/de-d< ee.e/f Z0de-d< d Z1de-d< dZ2de-d< G dd deeeeeef Z3G dd deeef Z4dS )    )annotationsNreduce)chain)TYPE_CHECKINGAnyLiteralProtocoloverload)EagerNamespace)combine_alias_output_namescombine_evaluate_output_namesPandasLikeDataFramePandasLikeExpr)PandasSelectorNamespacePandasLikeSeries)NativeDataFrameTNativeSeriesT)is_non_nullable_boolean)
zip_strict)IterableSequence)	TypeAlias)ImplementationVersion)	IntoDTypeNonNestedLiteralr   
Incomplete	_Vertical   _HorizontalAxisVERTICAL
HORIZONTALc                   @  s   e Zd ZedHddZedIddZedJd	d
ZedKddZdLddZdMddZ	dNddZ
dOdd ZdMd!d"ZdPd%d&ZdPd'd(ZdMd)d*ZdMd+d,ZdMd-d.ZedQd0d1ZdRd5d6ZdSd8d9ZdRd:d;ZdTd>d?Z	@dUdVdFdGZd@S )WPandasLikeNamespacereturntype[PandasLikeDataFrame]c                 C     t S Nr   self r.   ]/var/www/html/IGF-ODF-V3/venv/lib/python3.10/site-packages/narwhals/_pandas_like/namespace.py
_dataframe4      zPandasLikeNamespace._dataframetype[PandasLikeExpr]c                 C  r*   r+   r   r,   r.   r.   r/   _expr8   r1   zPandasLikeNamespace._exprtype[PandasLikeSeries]c                 C  r*   r+   r   r,   r.   r.   r/   _series<   r1   zPandasLikeNamespace._seriesr   c                 C  s
   t | S r+   )r   from_namespacer,   r.   r.   r/   	selectors@   s   
zPandasLikeNamespace.selectorsimplementationr   versionr   Nonec                 C  s   || _ || _d S r+   )_implementation_version)r-   r8   r9   r.   r.   r/   __init__D   s   
zPandasLikeNamespace.__init__exprsr   c                   *   d fdd}| j j|t  t  | dS )	Ndfr   r(   list[PandasLikeSeries]c                   s"    fddD }t dd |gS )Nc                 3  s"    | ]}| D ]}|V  qqd S r+   r.   .0r3   sr@   r.   r/   	<genexpr>J   s     z=PandasLikeNamespace.coalesce.<locals>.func.<locals>.<genexpr>c                 S  s   | j |d d dS )Nstrategylimit	fill_nullxyr.   r.   r/   <lambda>L   s    z<PandasLikeNamespace.coalesce.<locals>.func.<locals>.<lambda>r   r@   seriesr>   rE   r/   funcI   s   z*PandasLikeNamespace.coalesce.<locals>.funcrS   evaluate_output_namesalias_output_namescontextr@   r   r(   rA   r3   _from_callabler   r   r-   r>   rS   r.   rR   r/   coalesceH      zPandasLikeNamespace.coalescevaluer   dtypeIntoDType | Nonec                   s4   dfdd t  fddd	d d jjd
S )Nr@   r   r(   r   c                   s4   j jgd| jjdd d} r| S |S )Nliteralr   r"   )datanameindexrW   )r5   from_iterable_native_framerd   cast)r@   pandas_series)r_   r-   r^   r.   r/   _lit_pandas_seriesW   s   
z3PandasLikeNamespace.lit.<locals>._lit_pandas_seriesc                   s
    | gS r+   r.   rE   )ri   r.   r/   rO   c   s   
 z)PandasLikeNamespace.lit.<locals>.<lambda>c                 S     dgS )Nra   r.   _dfr.   r.   r/   rO   d       rU   rV   r8   r9   )r@   r   r(   r   r   r;   r<   )r-   r^   r_   r.   )ri   r_   r-   r^   r/   litV   s   
zPandasLikeNamespace.litc                   s"   t  fdddd d  j jdS )Nc                   s     j jt| jgddg dgS )Nlenr   )rc   rd   rW   )r5   re   rq   rf   rE   r,   r.   r/   rO   l   s   z)PandasLikeNamespace.len.<locals>.<lambda>c                 S  rj   )Nrq   r.   rk   r.   r.   r/   rO   q   rm   rn   ro   r,   r.   r,   r/   rq   j   s   
zPandasLikeNamespace.lenc                   r?   )	Nr@   r   r(   rA   c                   s4   t  fddD }dd |D }ttj|gS )Nc                 3      | ]}| V  qd S r+   r.   rC   exprrE   r.   r/   rF   z       zCPandasLikeNamespace.sum_horizontal.<locals>.func.<locals>.<genexpr>c                 s  s    | ]
}| d ddV  qdS )r   NrJ   rC   rD   r.   r.   r/   rF   {       )r   re   r   operatoradd)r@   itnative_seriesrR   rE   r/   rS   y   s   z0PandasLikeNamespace.sum_horizontal.<locals>.funcrT   rX   rY   r[   r.   rR   r/   sum_horizontalx   s   z"PandasLikeNamespace.sum_horizontalignore_nullsboolc                  ,   d fdd}| j j|t  t  | dS )	Nr@   r   r(   rA   c                   \    fddD }st dd |D rd}t|r#dd |D nt|}ttj|gS )Nc                      g | ]}| D ]}|qqS r.   r.   rB   rE   r.   r/   
<listcomp>       zDPandasLikeNamespace.all_horizontal.<locals>.func.<locals>.<listcomp>c                 s  (    | ]}|j jd ko|  V  qdS objectNnativer_   is_nullanyrv   r.   r.   r/   rF          
zCPandasLikeNamespace.all_horizontal.<locals>.func.<locals>.<genexpr>zwCannot use `ignore_nulls=False` in `all_horizontal` for non-nullable NumPy-backed pandas Series when nulls are present.c                 s  *    | ]}t |r
|n|d ddV  qdS )TNr   rK   rv   r.   r.   r/   rF      
    
)r   
ValueErroriterr   rx   and_r@   rQ   msgrz   r>   r}   rE   r/   rS         	z0PandasLikeNamespace.all_horizontal.<locals>.funcrT   rX   rY   r-   r}   r>   rS   r.   r   r/   all_horizontal      z"PandasLikeNamespace.all_horizontalc                  r   )	Nr@   r   r(   rA   c                   r   )Nc                   r   r.   r.   rB   rE   r.   r/   r      r   zDPandasLikeNamespace.any_horizontal.<locals>.func.<locals>.<listcomp>c                 s  r   r   r   rv   r.   r.   r/   rF      r   zCPandasLikeNamespace.any_horizontal.<locals>.func.<locals>.<genexpr>zwCannot use `ignore_nulls=False` in `any_horizontal` for non-nullable NumPy-backed pandas Series when nulls are present.c                 s  r   )FNr   rv   r.   r.   r/   rF      r   )r   r   r   r   rx   or_r   r   rE   r/   rS      r   z0PandasLikeNamespace.any_horizontal.<locals>.funcrT   rX   rY   r   r.   r   r/   any_horizontal   r   z"PandasLikeNamespace.any_horizontalc                   r?   )	Nr@   r   r(   rA   c                   sH    fddD }dd |D }dd |D }t tj|t tj| gS )Nc                   r   r.   r.   rB   rE   r.   r/   r      r   zEPandasLikeNamespace.mean_horizontal.<locals>.func.<locals>.<listcomp>c                 s  s     | ]}|j d dddV  qdS )r   NrG   rJ   rv   r.   r.   r/   rF      s    zDPandasLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>c                 s  s    | ]	}d |   V  qdS )r"   Nr   rv   r.   r.   r/   rF          )r   rx   ry   )r@   expr_resultsrQ   non_narR   rE   r/   rS      s   z1PandasLikeNamespace.mean_horizontal.<locals>.funcrT   rX   rY   r[   r.   rR   r/   mean_horizontal   r]   z#PandasLikeNamespace.mean_horizontalc                   ,   d fdd}j j|t  t  dS )	Nr@   r   r(   rA   c                   Z   t t fddD }tjdd |D ddjjddjjd	|d	 j
gS )
Nc                 3  rr   r+   r.   rs   rE   r.   r/   rF      ru   zCPandasLikeNamespace.min_horizontal.<locals>.func.<locals>.<genexpr>c                 s      | ]}|  V  qd S r+   to_framerv   r.   r.   r/   rF      ru   
horizontalhowr"   axisr8   r9   r   )listr   re   r   concatrf   minr;   r<   aliasrc   rP   r>   r-   rE   r/   rS         z0PandasLikeNamespace.min_horizontal.<locals>.funcrT   rX   rY   r[   r.   r   r/   min_horizontal      z"PandasLikeNamespace.min_horizontalc                   r   )	Nr@   r   r(   rA   c                   r   )
Nc                 3  rr   r+   r.   rs   rE   r.   r/   rF      ru   zCPandasLikeNamespace.max_horizontal.<locals>.func.<locals>.<genexpr>c                 s  r   r+   r   rv   r.   r.   r/   rF      ru   r   r   r"   r   r   r   )r   r   re   r   r   r   maxr;   r<   r   rc   rP   r   rE   r/   rS      r   z0PandasLikeNamespace.max_horizontal.<locals>.funcrT   rX   rY   r[   r.   r   r/   max_horizontal   r   z"PandasLikeNamespace.max_horizontal._NativeConcat[NativeDataFrameT, NativeSeriesT]c                 C  s   | j  jS )zvConcatenate pandas objects along a particular axis.

        Return the **native** equivalent of `pd.concat`.
        )r;   to_native_namespacer   r,   r.   r.   r/   _concat   s   zPandasLikeNamespace._concatdfsSequence[NativeDataFrameT]r   c                C  s2   | j  r| jdk r| j|tddS | j|tdS )N   Fr   copyr   )r;   	is_pandas_backend_versionr   r%   r-   r   r.   r.   r/   _concat_diagonal   s   z$PandasLikeNamespace._concat_diagonal*Sequence[NativeDataFrameT | NativeSeriesT]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   )
r;   is_cudfwarningscatch_warningsfilterwarningsFutureWarningr   r&   r   r   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	enumeraterq   allto_list	TypeErrorr;   r   r   r   r%   )r-   r   cols_0ir@   cols_currentr   r.   r.   r/   _concat_vertical  s"   
z$PandasLikeNamespace._concat_vertical	separatorstrc                  s<   | j j d fdd}| jj|t  t  | dS )	Nr@   r   r(   rA   c           	        s    fddD }fdd|D }dd |D }s2t tj|}t fdd|| d }|gS dd t||D ^}}|| jd	|jj	|jj
d
fdd|d d D }t tjdd t||D |}|gS )Nc                   r   r.   r.   rB   rE   r.   r/   r   *  r   z@PandasLikeNamespace.concat_str.<locals>.func.<locals>.<listcomp>c                   s   g | ]}|  qS r.   )rg   rv   )stringr.   r/   r   +  s    c                 S  s   g | ]}|  qS r.   r   rv   r.   r.   r/   r   ,  s    c                   s   |   | S r+   r.   rL   )r   r.   r/   rO   0  s    z>PandasLikeNamespace.concat_str.<locals>.func.<locals>.<lambda>c                 s  s"    | ]\}}| | d V  qdS  Nzip_with)rC   rD   nmr.   r.   r/   rF   7  s    
z?PandasLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>sep)rc   rd   r_   c                 3  s    | ]
}  | d V  qdS r   r   )rC   r   )	sep_arrayr.   r/   rF   B  rw   c                 s  s    | ]	\}}|| V  qd S r+   r.   )rC   rD   vr.   r.   r/   rF   E  r   )r   rx   r   r   r   _with_native__native_namespace__Seriesr   rd   r_   ry   )	r@   r   rQ   	null_masknull_mask_resultresult
init_valuevalues
separatorsr>   r}   r   r   )r@   r   r/   rS   )  s6   
z,PandasLikeNamespace.concat_str.<locals>.funcrT   rX   )r<   dtypesStringr3   rZ   r   r   )r-   r   r}   r>   rS   r.   r   r/   
concat_str$  s   "zPandasLikeNamespace.concat_strNwhenr   then	otherwiseNativeSeriesT | Nonec                 C  s    |j }|d u r||S |||S r+   )where)r-   r   r   r   r   r.   r.   r/   _if_then_elseR  s   z!PandasLikeNamespace._if_then_else)r(   r)   )r(   r2   )r(   r4   )r(   r   )r8   r   r9   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   r   r   r   r(   r   )__name__
__module____qualname__propertyr0   r3   r5   r7   r=   r\   rp   rq   r|   r   r   r   r   r   r   r   r   r   r   r   r.   r.   r.   r/   r'   +   s6    	













2r'   c                   @  sl   e Zd ZedddddZedddddZedddddZedddddZdddddZdS )_NativeConcat.)r   objsIterable[NativeDataFrameT]r   r!   r   bool | Noner(   r   c                C     d S r+   r.   r-   r   r   r   r.   r.   r/   __call__]     z_NativeConcat.__call__Iterable[NativeSeriesT]r   c                C  r   r+   r.   r   r.   r.   r/   r   e  s   *Iterable[NativeDataFrameT | NativeSeriesT]r#   c                C  r   r+   r.   r   r.   r.   r/   r   i  r  r$    NativeDataFrameT | NativeSeriesTc                C  r   r+   r.   r   r.   r.   r/   r   q  r  Nc                C  r   r+   r.   r   r.   r.   r/   r   z  s   )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   \  s    r   )5
__future__r   rx   r   	functoolsr   	itertoolsr   typingr   r   r   r	   r
   narwhals._compliantr   narwhals._expression_parsingr   r   narwhals._pandas_like.dataframer   narwhals._pandas_like.exprr   narwhals._pandas_like.selectorsr   narwhals._pandas_like.seriesr   narwhals._pandas_like.typingr   r   narwhals._pandas_like.utilsr   narwhals._utilsr   collections.abcr   r   typing_extensionsr   r   r   narwhals.typingr   r   r    __annotations__r!   r#   r$   r%   r&   r'   r   r.   r.   r.   r/   <module>   sP    
  3