o
    LhB                  	   @  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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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* d dl"m+Z+m,Z, d dl-m.Z.m/Z/ e
Z0de1d< 	 ed  Z2de1d< ed Z3de1d< ee2e3f Z4de1d< d Z5de1d< dZ6de1d< G dd deeeeeef Z7G dd deeef Z8G d d! d!eeeeef Z9G d"d# d#eeeee9f eZ:dS )$    )annotationsN)reduce)chain)TYPE_CHECKINGAnyLiteralProtocoloverload)CompliantThenEagerNamespace	EagerWhen)combine_alias_output_namescombine_evaluate_output_namesPandasLikeDataFramePandasLikeExpr)PandasSelectorNamespacePandasLikeSeries)NativeDataFrameTNativeSeriesT)is_non_nullable_boolean)
zip_strict)IterableSequence)	TypeAlias)ScalarKwargs)ImplementationVersion)	IntoDTypeNonNestedLiteralr   
Incomplete	_Vertical   _HorizontalAxisVERTICAL
HORIZONTALc                   @  s   e Zd ZedEddZedFddZedGd	d
ZedHddZdIddZdJddZ	dKddZ
dLdd ZdJd!d"ZdMd%d&ZdMd'd(ZdJd)d*ZdJd+d,ZdJd-d.ZedNd0d1ZdOd5d6ZdPd8d9ZdOd:d;ZdQd>d?ZdRdBdCZdDS )SPandasLikeNamespacereturntype[PandasLikeDataFrame]c                 C     t S Nr   self r0   `/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/narwhals/_pandas_like/namespace.py
_dataframe5      zPandasLikeNamespace._dataframetype[PandasLikeExpr]c                 C  r,   r-   r   r.   r0   r0   r1   _expr9   r3   zPandasLikeNamespace._exprtype[PandasLikeSeries]c                 C  r,   r-   r   r.   r0   r0   r1   _series=   r3   zPandasLikeNamespace._seriesr   c                 C  s
   t | S r-   )r   from_namespacer.   r0   r0   r1   	selectorsA   s   
zPandasLikeNamespace.selectorsimplementationr   versionr   Nonec                 C  s   || _ || _d S r-   )_implementation_version)r/   r:   r;   r0   r0   r1   __init__E   s   
zPandasLikeNamespace.__init__exprsr   c                   B   d fdd}j j|tdd  D d	 d
t  t  dS )Ndfr   r*   list[PandasLikeSeries]c                   s.   j j}| fddD  }tdd |gS )Nc                 3  s"    | ]}| D ]}|V  qqd S r-   r0   .0r5   srB   r0   r1   	<genexpr>L   s     z=PandasLikeNamespace.coalesce.<locals>.func.<locals>.<genexpr>c                 S  s   | j |d d dS )Nstrategylimit	fill_nullxyr0   r0   r1   <lambda>N   s    z<PandasLikeNamespace.coalesce.<locals>.func.<locals>.<lambda>)r7   _align_full_broadcastr   )rB   alignseriesr@   r/   rG   r1   funcJ   s   z*PandasLikeNamespace.coalesce.<locals>.funcc                 s      | ]}|j V  qd S r-   _depthrE   rO   r0   r0   r1   rH   S       z/PandasLikeNamespace.coalesce.<locals>.<genexpr>r$   coalescerV   depthfunction_nameevaluate_output_namesalias_output_namescontextrB   r   r*   rC   r5   _from_callablemaxr   r   r/   r@   rV   r0   rU   r1   r\   I      zPandasLikeNamespace.coalescevaluer!   dtypeIntoDType | Nonec              	     s8   dfdd t  fddd	d
dd d jjdS )NrB   r   r*   r   c                   s4   j jgd| jjdd d} r| S |S )Nliteralr   r$   datanameindexrb   )r7   from_iterable_native_framerp   cast)rB   pandas_series)rj   r/   ri   r0   r1   _lit_pandas_series[   s   
z3PandasLikeNamespace.lit.<locals>._lit_pandas_seriesc                   s
    | gS r-   r0   rG   )ru   r0   r1   rQ   g   s   
 z)PandasLikeNamespace.lit.<locals>.<lambda>r   litc                 S     dgS )Nrl   r0   _dfr0   r0   r1   rQ   j       r^   r_   r`   ra   r:   r;   )rB   r   r*   r   r   r=   r>   )r/   ri   rj   r0   )ru   rj   r/   ri   r1   rv   Z   s   
zPandasLikeNamespace.litc              	     s&   t  fdddddd d  j jdS )Nc                   s     j jt| jgddg dgS )Nlenr   )ro   rp   rb   )r7   rq   r}   rr   rG   r.   r0   r1   rQ   r   s   z)PandasLikeNamespace.len.<locals>.<lambda>r   r}   c                 S  rw   )Nr}   r0   rx   r0   r0   r1   rQ   y   rz   r{   r|   r.   r0   r.   r1   r}   p   s   
zPandasLikeNamespace.lenc                   rA   )NrB   r   r*   rC   c                   sD   j j}t fddD }|| }dd |D }ttj|gS )Nc                 3      | ]}| V  qd S r-   r0   rE   exprrG   r0   r1   rH          zCPandasLikeNamespace.sum_horizontal.<locals>.func.<locals>.<genexpr>c                 s  s    | ]
}| d ddV  qdS )r   NrL   rE   rF   r0   r0   r1   rH          )r7   rR   r   rq   r   operatoradd)rB   rS   itrT   native_seriesrU   rG   r1   rV      s
   z0PandasLikeNamespace.sum_horizontal.<locals>.funcc                 s  rW   r-   rX   rZ   r0   r0   r1   rH      r[   z5PandasLikeNamespace.sum_horizontal.<locals>.<genexpr>r$   sum_horizontalr]   rc   rd   rg   r0   rU   r1   r      rh   z"PandasLikeNamespace.sum_horizontalignore_nullsboolc                  D   d fdd}j j|tdd  D d	 d
t  t  dS )NrB   r   r*   rC   c                   h   j j} 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 r0   r0   rD   rG   r0   r1   
<listcomp>       zDPandasLikeNamespace.all_horizontal.<locals>.func.<locals>.<listcomp>c                 s  (    | ]}|j jd ko|  V  qdS objectNnativerj   is_nullanyr   r0   r0   r1   rH          
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   rM   r   r0   r0   r1   rH      
    
)r7   rR   r   
ValueErroriterr   r   and_rB   rS   rT   msgr   r@   r   r/   rG   r1   rV         	z0PandasLikeNamespace.all_horizontal.<locals>.funcc                 s  rW   r-   rX   rZ   r0   r0   r1   rH      r[   z5PandasLikeNamespace.all_horizontal.<locals>.<genexpr>r$   all_horizontalr]   rc   rd   r/   r   r@   rV   r0   r   r1   r         z"PandasLikeNamespace.all_horizontalc                  r   )NrB   r   r*   rC   c                   r   )Nc                   r   r0   r0   rD   rG   r0   r1   r      r   zDPandasLikeNamespace.any_horizontal.<locals>.func.<locals>.<listcomp>c                 s  r   r   r   r   r0   r0   r1   rH      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   r   r0   r0   r1   rH      r   )r7   rR   r   r   r   r   r   or_r   r   rG   r1   rV      r   z0PandasLikeNamespace.any_horizontal.<locals>.funcc                 s  rW   r-   rX   rZ   r0   r0   r1   rH      r[   z5PandasLikeNamespace.any_horizontal.<locals>.<genexpr>r$   any_horizontalr]   rc   rd   r   r0   r   r1   r      r   z"PandasLikeNamespace.any_horizontalc                   rA   )NrB   r   r*   rC   c                   sX    fddD }j j}|dd |D  }|dd |D  }ttj|ttj| gS )Nc                   r   r0   r0   rD   rG   r0   r1   r      r   zEPandasLikeNamespace.mean_horizontal.<locals>.func.<locals>.<listcomp>c                 s  s     | ]}|j d dddV  qdS )r   NrI   rL   r   r0   r0   r1   rH      s    zDPandasLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>c                 s  s    | ]	}d |   V  qdS )r$   Nr   r   r0   r0   r1   rH          )r7   rR   r   r   r   )rB   expr_resultsrS   rT   non_narU   rG   r1   rV      s   z1PandasLikeNamespace.mean_horizontal.<locals>.funcc                 s  rW   r-   rX   rZ   r0   r0   r1   rH      r[   z6PandasLikeNamespace.mean_horizontal.<locals>.<genexpr>r$   mean_horizontalr]   rc   rd   rg   r0   rU   r1   r      s   	z#PandasLikeNamespace.mean_horizontalc                   rA   )NrB   r   r*   rC   c                   f   t  fddD }jj}|| }tjdd |D ddjjddjj	d
|d	 jgS )
Nc                 3  r~   r-   r0   r   rG   r0   r1   rH      r   zCPandasLikeNamespace.min_horizontal.<locals>.func.<locals>.<genexpr>c                 s      | ]}|  V  qd S r-   to_framer   r0   r0   r1   rH      r   
horizontalhowr$   axisr:   r;   r   )r   rq   r7   rR   r   concatrr   minr=   r>   aliasro   rB   r   rS   rT   rU   rG   r1   rV         z0PandasLikeNamespace.min_horizontal.<locals>.funcc                 s  rW   r-   rX   rZ   r0   r0   r1   rH      r[   z5PandasLikeNamespace.min_horizontal.<locals>.<genexpr>r$   min_horizontalr]   rc   rd   rg   r0   rU   r1   r         z"PandasLikeNamespace.min_horizontalc                   rA   )NrB   r   r*   rC   c                   r   )
Nc                 3  r~   r-   r0   r   rG   r0   r1   rH     r   zCPandasLikeNamespace.max_horizontal.<locals>.func.<locals>.<genexpr>c                 s  r   r-   r   r   r0   r0   r1   rH     r   r   r   r$   r   r   r   )r   rq   r7   rR   r   r   r   rf   r=   r>   r   ro   r   rU   rG   r1   rV      r   z0PandasLikeNamespace.max_horizontal.<locals>.funcc                 s  rW   r-   rX   rZ   r0   r0   r1   rH     r[   z5PandasLikeNamespace.max_horizontal.<locals>.<genexpr>r$   max_horizontalr]   rc   rd   rg   r0   rU   r1   r      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.   r0   r0   r1   _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   r0   r0   r1   _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   r0   r0   r1   _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	enumerater}   allto_list	TypeErrorr=   r   r   r   r'   )r/   r   cols_0irB   cols_currentr   r0   r0   r1   _concat_vertical4  s"   
z$PandasLikeNamespace._concat_vertical	predicatePandasWhen[NativeSeriesT]c                 C  s   t t j|| dS )N)rb   )
PandasWhenr   	from_expr)r/   r   r0   r0   r1   whenE  s   zPandasLikeNamespace.when	separatorstrc                  sT   j j d fdd}jj|tdd  D d	 d
t  t  dS )NrB   r   r*   rC   c           
        s    fddD }j j}|fdd|D  }|dd |D  }s:t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                   r   r0   r0   rD   rG   r0   r1   r   N  r   z@PandasLikeNamespace.concat_str.<locals>.func.<locals>.<listcomp>c                 3  s    | ]}|  V  qd S r-   )rs   r   )stringr0   r1   rH   P  s    z?PandasLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>c                 s  r   r-   r   r   r0   r0   r1   rH   Q  r   c                   s   |   | S r-   r0   rN   )r   r0   r1   rQ   U  s    z>PandasLikeNamespace.concat_str.<locals>.func.<locals>.<lambda>c                 S  s   g | ]\}}| | d qS ) zip_with)rE   rF   nmr0   r0   r1   r   \  s    seprm   c                 3  s    | ]
}  | d V  qdS )r   Nr   )rE   r   )	sep_arrayr0   r1   rH   f  r   c                 s  s    | ]	\}}|| V  qd S r-   r0   )rE   rF   vr0   r0   r1   rH   i  r   )r7   rR   r   r   r   r   r   rq   r}   r   rp   r   )
rB   r   rS   rT   	null_masknull_mask_resultresult
init_valuevalues
separatorsr@   r   r/   r   r   )rB   r   r1   rV   M  s4   
z,PandasLikeNamespace.concat_str.<locals>.funcc                 s  rW   r-   rX   rZ   r0   r0   r1   rH   q  r[   z1PandasLikeNamespace.concat_str.<locals>.<genexpr>r$   
concat_strr]   rc   )r>   dtypesStringr5   re   rf   r   r   )r/   r   r   r@   rV   r0   r   r1   r   H  s   "zPandasLikeNamespace.concat_strN)r*   r+   )r*   r4   )r*   r6   )r*   r   )r:   r   r;   r   r*   r<   )r@   r   r*   r   )ri   r!   rj   rk   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__propertyr2   r5   r7   r9   r?   r\   rv   r}   r   r   r   r   r   r   r   r   r   r   r   r   r0   r0   r0   r1   r)   ,   s4    	






!
!





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-   r0   r/   r   r   r   r0   r0   r1   __call__z     z_NativeConcat.__call__Iterable[NativeSeriesT]r   c                C  r  r-   r0   r  r0   r0   r1   r    s   *Iterable[NativeDataFrameT | NativeSeriesT]r%   c                C  r  r-   r0   r  r0   r0   r1   r    r  r&    NativeDataFrameT | NativeSeriesTc                C  r  r-   r0   r  r0   r0   r1   r    r  Nc                C  r  r-   r0   r  r0   r0   r1   r    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  r0   r0   r0   r1   r   y  s    r   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.   r0   r0   r1   _then  s   zPandasWhen._thenr   r   then	otherwise NativeSeriesT | NonNestedLiteralc                 C  s    |j }|d u r||S |||S r-   )where)r/   r   r  r  r  r0   r0   r1   _if_then_else  s   zPandasWhen._if_then_elseN)r*   r	  )r   r   r  r   r  r  r*   r   )r   r   r   r   r  r  r0   r0   r0   r1   r     s    r   c                   @  s2   e Zd ZU dZded< i Zded< dZded< d	S )
r
  r   intrY   r   _scalar_kwargswhenthenr   _function_nameN)r   r   r   rY   __annotations__r  r  r0   r0   r0   r1   r
    s   
 r
  );
__future__r   r   r   	functoolsr   	itertoolsr   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.typingr   r   narwhals._pandas_like.utilsr   narwhals._utilsr   collections.abcr   r   typing_extensionsr   narwhals._compliant.typingr   r   r   narwhals.typingr    r!   r"   r  r#   r%   r&   r'   r(   r)   r   r   r
  r0   r0   r0   r1   <module>   s`    
  O
'
