o
    Lh                     @  sT  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  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mZmZ d dlmZ d dlmZm Z  d dl!m"Z"m#Z# erd dl$m%Z%m&Z& d dl!m'Z' d dl(m)Z)m*Z*m+Z+ G dd deeeddf Z,G dd de ddef Z-G dd deddef eZ.dS )    )annotationsN)reduce)chain)TYPE_CHECKINGAny)combine_alias_output_namescombine_evaluate_output_namesIbisLazyFrameIbisExpr)IbisSelectorNamespace)functionlitnarwhals_to_native_dtype)SQLNamespace)SQLThenSQLWhen)Implementationrequires)IterableSequence)Version)ConcatMethod	IntoDTypePythonLiteralc                   @  s   e Zd ZU ejZded< d@ddZedAd
dZ	edBddZ
edCddZdDddZdEddZ	dFdGd!d"ZdHd$d%ZdId+d,ZdJd1d2ZdKd3d4Zed5dLd8d9ZdMd<d=ZdNd>d?ZdS )OIbisNamespacer   _implementationversionr   returnNonec                C  s
   || _ d S N)_version)selfr    r$   Y/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/narwhals/_ibis/namespace.py__init__!      
zIbisNamespace.__init__r   c                 C  s
   t | S r!   )r   from_namespacer#   r$   r$   r%   	selectors$   s   
zIbisNamespace.selectorstype[IbisExpr]c                 C     t S r!   r   r)   r$   r$   r%   _expr(      zIbisNamespace._exprtype[IbisLazyFrame]c                 C  r,   r!   r	   r)   r$   r$   r%   
_lazyframe,   r.   zIbisNamespace._lazyframenamestrargsir.Value | PythonLiteralir.Valuec                 G  s   t |g|R  S r!   )r   )r#   r1   r3   r$   r$   r%   	_function0   s   zIbisNamespace._functionvaluer   c                 C  s   t |S r!   )r   )r#   r7   r$   r$   r%   _lit3   s   zIbisNamespace._litN	condition	otherwiseir.Expr | Nonec                 C  s(   |d u rt ||fS t j||f|dS N)else_)ibiscases)r#   r9   r7   r:   r$   r$   r%   _when6   s   zIbisNamespace._whenexprsc                 G  s
   t j| S r!   )r>   coalesce)r#   rA   r$   r$   r%   	_coalesce=   r'   zIbisNamespace._coalesceitemsIterable[IbisLazyFrame]howr   r
   c                  st   |dkr
d}t |t|}dd |D }|d j t fdd|dd  D s/d	}t|| jjtj| | d
S )Ndiagonalz<diagonal concat not supported for Ibis. Please join instead.c                 S  s   g | ]}|j qS r$   )native).0itemr$   r$   r%   
<listcomp>H   s    z(IbisNamespace.concat.<locals>.<listcomp>r   c                 3  s    | ]}|j  kV  qd S r!   schema)rI   xrL   r$   r%   	<genexpr>J   s    z'IbisNamespace.concat.<locals>.<genexpr>   z&inputs should all have the same schemacontext)	NotImplementedErrorlistrM   all	TypeErrorr0   from_nativer>   union)r#   rD   rF   msgnative_itemsr$   rL   r%   concat@   s   
zIbisNamespace.concatr   	separatorignore_nullsboolc                  s.   d fdd}| j |t  t  | jdS )	Ndfr
   r   list[ir.Value]c                   sn   t t fddD }dd |D }s-|d }|dd  D ]}| | }q!|gS t|}|gS )Nc                 3  s    | ]}| V  qd S r!   r$   )rI   exprr_   r$   r%   rO   S   s    z9IbisNamespace.concat_str.<locals>.func.<locals>.<genexpr>c                 S  s   g | ]}| d qS )string)cast)rI   sr$   r$   r%   rK   T   s    z:IbisNamespace.concat_str.<locals>.func.<locals>.<listcomp>r   rP   )rT   r   from_iterabler   join)r_   colscols_castedresultcolrA   r]   r\   rb   r%   funcR   s   z&IbisNamespace.concat_str.<locals>.funccallevaluate_output_namesalias_output_namesr   )r_   r
   r   r`   )r-   r   r   r"   )r#   r\   r]   rA   rm   r$   rl   r%   
concat_strO   s   zIbisNamespace.concat_strc                 G  s   ddd}| j j|g|R  S )Nrh   Iterable[ir.Value]r   r5   c                 S  s4   t | } ttjdd | D ttjdd | D  S )Nc                 s  s    | ]
}| td V  qdS )r   N)	fill_nullr   rI   rk   r$   r$   r%   rO   i   s    z>IbisNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>c                 s  s(    | ]}|  td tdV  qdS )r   rP   N)isnullifelser   ru   r$   r$   r%   rO   j   s   & )rT   r   operatoradd)rh   r$   r$   r%   rm   g   s   z+IbisNamespace.mean_horizontal.<locals>.func)rh   rs   r   r5   )r-   _from_elementwise_horizontal_op)r#   rA   rm   r$   r$   r%   mean_horizontalf   s   
zIbisNamespace.mean_horizontal)
   r   	predicateIbisWhenc                 C  s   t j|| dS )NrQ   )r~   	from_expr)r#   r}   r$   r$   r%   wheno   s   zIbisNamespace.whendtypeIntoDType | Nonec                   s*   d
 fdd}j |dd d jd	S )N_dfr
   r   Sequence[ir.Value]c                   s     rt  jnd }t|gS r!   )r   r"   r   )r   
ibis_dtyper   r#   r7   r$   r%   rm   t   s   zIbisNamespace.lit.<locals>.funcc                 S     dgS )Nliteralr$   r   r$   r$   r%   <lambda>z       z#IbisNamespace.lit.<locals>.<lambda>)rp   rq   r   )r   r
   r   r   r-   r"   )r#   r7   r   rm   r$   r   r%   r   s   s   zIbisNamespace.litc                 C  s"   d
dd}| j |dd d | jd	S )Nr   r
   r   r`   c                 S  s   | j  gS r!   )rH   countr   r$   r$   r%   rm      s   zIbisNamespace.len.<locals>.funcc                 S  r   )Nlenr$   r   r$   r$   r%   r      r   z#IbisNamespace.len.<locals>.<lambda>rn   )r   r
   r   r`   r   )r#   rm   r$   r$   r%   r      s   
zIbisNamespace.len)r   r   r   r    )r   r   )r   r+   )r   r/   )r1   r2   r3   r4   r   r5   )r7   r   r   r5   r!   )r9   r5   r7   r5   r:   r;   r   r5   )rA   r5   r   r5   )rD   rE   rF   r   r   r
   )rA   r   r\   r2   r]   r^   r   r   )rA   r   r   r   )r}   r   r   r~   )r7   r   r   r   r   r   )r   r   )__name__
__module____qualname__r   IBISr   __annotations__r&   propertyr*   r-   r0   r6   r8   r@   rC   r[   rr   r{   r   backend_versionr   r   r   r$   r$   r$   r%   r      s*   
 






	
r   zir.Tabler5   c                   @  s(   e Zd ZeZedddZddd	Zd
S )r~   r   type[IbisThen]c                 C  r,   r!   )IbisThenr)   r$   r$   r%   _then   r.   zIbisWhen._thenr_   r
   r   c           	      C  s   | j j}|| j }| j}||r||nt|}| j}|d u r+t||f}|gS ||r4||nt|}tj||f|d}|gS r<   )
_condition_is_expr_evaluate_expr_then_valuer   _otherwise_valuer>   r?   )	r#   r_   is_exprr9   then_thenother_rj   r:   r$   r$   r%   __call__   s   zIbisWhen.__call__N)r   r   )r_   r
   r   r   )r   r   r   r   r   r   r   r$   r$   r$   r%   r~      s
    r~   r
   c                   @  s   e Zd ZdS )r   N)r   r   r   r$   r$   r$   r%   r      s    r   )/
__future__r   rx   	functoolsr   	itertoolsr   typingr   r   r>   ibis.expr.typesra   typesirnarwhals._expression_parsingr   r   narwhals._ibis.dataframer
   narwhals._ibis.exprr   narwhals._ibis.selectorsr   narwhals._ibis.utilsr   r   r   narwhals._sql.namespacer   narwhals._sql.when_thenr   r   narwhals._utilsr   r   collections.abcr   r   r   narwhals.typingr   r   r   r   r~   r   r$   r$   r$   r%   <module>   s,    m 