
    .i              	      :   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c 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 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# erd dl$m%Z%m&Z&m'Z' d dl!m(Z( d dl)m*Z*m+Z+m,Z,m-Z-  G d de eeddf   eeef         Z.y)    )annotationsN)reduce)chain)TYPE_CHECKINGAny)AlignDiagonal)combine_alias_output_namescombine_evaluate_output_names!evaluate_output_names_and_aliasesIbisLazyFrameIbisExpr)IbisSelectorNamespace)functionlitnarwhals_to_native_dtype)SQLNamespace)Implementation
zip_strict)IterableMappingSequence)Version)ConcatMethodCorrelationMethod	IntoDTypePythonLiteralc                      e Zd ZU ej                  Zded<   ddZedd       Z	edd       Z
edd       ZddZddZ	 d	 	 	 	 	 	 	 dd
ZddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZddZddZd dZd!dZddZy	)"IbisNamespacer   _implementationc                   || _         y N)_version)selfversions     U/opt/house_gps_flutter/.venv/lib/python3.12/site-packages/narwhals/_ibis/namespace.py__init__zIbisNamespace.__init__%   s	        c                ,    t        j                  |       S r#   )r   from_namespacer%   s    r'   	selectorszIbisNamespace.selectors(   s    $33D99r)   c                    t         S r#   r   r,   s    r'   _exprzIbisNamespace._expr,   s    r)   c                    t         S r#   r   r,   s    r'   
_lazyframezIbisNamespace._lazyframe0   s    r)   c                    t        |g| S r#   )r   )r%   nameargss      r'   	_functionzIbisNamespace._function4   s    $t$$r)   c                    t        |      S r#   )r   )r%   values     r'   _litzIbisNamespace._lit7   s    5zr)   Nc                f    |t        j                  ||f      S t        j                  ||f|      S )N)else_)ibiscases)r%   	conditionr7   	otherwises       r'   _whenzIbisNamespace._when:   s4     ::y%011zz9e,I>>r)   c                &    t        j                  | S r#   )r;   coalesce)r%   exprss     r'   	_coalescezIbisNamespace._coalesceA   s    }}e$$r)   c               :   t        |      }|dk(  r| j                  |      }	 t        j                  d |D         }|d   j                  |      S # t        j                  $ r6 |d   j
                  t        fd|dd  D              sd}t        |      d  w xY w)Ndiagonalc              3  4   K   | ]  }|j                     y wr#   )native).0lfs     r'   	<genexpr>z'IbisNamespace.concat.<locals>.<genexpr>K   s     !="))!=s   r   c              3  <   K   | ]  }|j                   k(    y wr#   )schema)rH   xfirsts     r'   rJ   z'IbisNamespace.concat.<locals>.<genexpr>N   s     =Qqxx5(=s      z&inputs should all have the same schema)	tuplealign_diagonalr;   union	IbisErrorrL   all	TypeError_with_native)r%   itemshowframesresultmsgrN   s         @r'   concatzIbisNamespace.concatD   s     +0,*((0F	ZZ!=f!=>F ay%%f-- ~~ 	1I$$E=&*==>n$.	s   A A	Bc               n    dfd}| j                  |t         t         | j                        S )Nc                     t        j                   fdD              }|D cg c]  }|j                  d       }}rt              j	                  |      }|gS t        fd|dd  |d         }|gS c c}w )Nc              3  .   K   | ]  } |        y wr#    )rH   exprdfs     r'   rJ   z9IbisNamespace.concat_str.<locals>.func.<locals>.<genexpr>X   s     &BDtBx&Bs   stringc                (    | j                  |      S r#   )r\   )acccol	separators     r'   <lambda>z8IbisNamespace.concat_str.<locals>.func.<locals>.<lambda>_   s    SZZ	3%? r)   rO   r   )r   from_iterablecastr   joinr   )rb   colsscols_castedrZ   rB   ignore_nullsrg   s   `    r'   funcz&IbisNamespace.concat_str.<locals>.funcW   s    &&&BE&BBD59:166(+:K:Y,,[9 8O  ?ON 8O ;s   A7callevaluate_output_namesalias_output_namesr&   rb   r   returnlist[ir.Value])r/   r
   r	   r$   )r%   rg   ro   rB   rp   s    ``` r'   
concat_strzIbisNamespace.concat_strT   s:    	 zz"?"G95AMM	  
 	
r)   c                D    dd} | j                   j                  |g| S )Nc                    t        |       } t        t        j                  d | D              t        t        j                  d | D              z  S )Nc              3  P   K   | ]  }|j                  t        d                yw)r   N)	fill_nullr   rH   rf   s     r'   rJ   z>IbisNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>p   s     (O3s1v)>(Os   $&c              3     K   | ]6  }|j                         j                  t        d       t        d             8 yw)r   rO   N)isnullifelser   r}   s     r'   rJ   z>IbisNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>q   s+     Ssszz|223q63q6BSs   <>)listr   operatoradd)rl   s    r'   rp   z+IbisNamespace.mean_horizontal.<locals>.funcn   sA    :D(,,(O$(OPSYSdST  r)   )rl   zIterable[ir.Value]rv   ir.Value)r/   _from_elementwise_horizontal_op)r%   rB   rp   s      r'   mean_horizontalzIbisNamespace.mean_horizontalm   s%    	 :tzz99$GGGr)   c                X     d fd} j                  |d d  j                        S )Nc                    rt        j                        nd }t        t              st	        |      gS rt        j                  |      gS d}t        |      )N)typez3Cannot create an empty struct type for Ibis backend)r   r$   
isinstancedictr   r;   structNotImplementedError)_df
ibis_dtyper[   dtyper%   r7   s      r'   rp   zIbisNamespace.lit.<locals>.funcw   sZ    KP1%GVZJeT*E:.//E
;<<GC%c**r)   c                    dgS )Nliteralr`   r   s    r'   rh   z#IbisNamespace.lit.<locals>.<lambda>   s    yk r)   rs   rt   r&   )r   r   rv   zSequence[ir.Value]r/   r$   )r%   r7   r   rp   s   ``` r'   r   zIbisNamespace.litv   s0    	+ zz"9#MM	  
 	
r)   c                J    dd}| j                  |d d | j                        S )Nc                8    | j                   j                         gS r#   )rG   countr   s    r'   rp   zIbisNamespace.len.<locals>.func   s    JJ$$&''r)   c                    dgS )Nlenr`   r   s    r'   rh   z#IbisNamespace.len.<locals>.<lambda>   s    ug r)   rq   r   r   rv   rw   r   )r%   rp   s     r'   r   zIbisNamespace.len   s/    	( zz"5#MM	  
 	
r)   c                   |dk7  rd}t        |      dfd}| j                  |t              t              | j                        S )Npearsonz1Only 'pearson' correlation is supported for Ibis.c                p    | j                        }| j                        }|j                  |d      gS )Npop)rX   )_evaluate_single_output_exprcorr)r   a_b_abs      r'   rp   z IbisNamespace.corr.<locals>.func   s9    11!4B11!4BGGBEG*++r)   r   r   )r   r/   r
   r	   r$   )r%   r   r   methodr[   rp   s    ``   r'   r   zIbisNamespace.corr   sV    YEC%c**	,
 zz"?1"E9!Q?MM	  
 	
r)   c                j    | j                   }dfd}| j                  |t         t         |      S )Nc                    D ci c]+  }t         ||       gt        || g        D ]	  \  }}}|| - }}}}}t        j                  |      gS c c}}}}w r#   )r   r   r;   r   )rb   ra   native_expr_aliasnames_to_colsrB   s         r'   rp   z"IbisNamespace.struct.<locals>.func   s}     "5 5-7H.@r2N.5 *KE {"55M 5 KK.//5s   0A
rq   ru   )r$   r/   r
   r	   )r%   rB   r&   rp   s    `  r'   r   zIbisNamespace.struct   s?    --	0 zz"?"G95A	  
 	
r)   )r&   r   rv   None)rv   r   )rv   ztype[IbisExpr])rv   ztype[IbisLazyFrame])r3   strr4   zir.Value | PythonLiteralrv   r   )r7   r   rv   r   r#   )r=   r   r7   r   r>   zir.Expr | Nonerv   r   )rB   r   rv   r   )rW   zIterable[IbisLazyFrame]rX   r   rv   r   )rB   r   rg   r   ro   boolrv   r   )rB   r   rv   r   )r7   r   r   zIntoDType | Nonerv   r   )rv   r   )r   r   r   r   r   r   rv   r   )__name__
__module____qualname__r   IBISr!   __annotations__r(   propertyr-   r/   r1   r5   r8   r?   rC   r\   rx   r   r   r   r   r   r`   r)   r'   r    r       s     '5&9&9O^9  : :    % QU?!?*2??M?	?%.,.6B.	. 

+.
>B
	
2H
"	

"
r)   r    zir.Tabler   )/
__future__r   r   	functoolsr   	itertoolsr   typingr   r   r;   ibis.expr.typesra   typesirnarwhals._compliant.namespacer   narwhals._expression_parsingr	   r
   r   narwhals._ibis.dataframer   narwhals._ibis.exprr   narwhals._ibis.selectorsr   narwhals._ibis.utilsr   r   r   narwhals._sql.namespacer   narwhals._utilsr   r   collections.abcr   r   r   r   narwhals.typingr   r   r   r   r    r`   r)   r'   <module>r      s}    "    %    7 
 3 ( : H H 0 6;;'YYV
*j@A-)*V
r)   