
    hh@                       U d dl mZ d dlZd dlmZ d dlmZ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mZmZmZmZmZmZmZ d d	lm Z  erwd d
l!m"Z"m#Z#m$Z$m%Z% d dl&m'Z' d dlm(Z( d dl)Z*d dl+Z,d dl-m.Z. d dl/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dlm=Z= d dl>m?Z? d dl@mAZA d dlBmCZD d dlEmFZFmGZGmHZH dZIdeJd<    G d ded         e          ZKdS )    )annotationsN)BytesIO)TYPE_CHECKINGAnycastIbisExpr)evaluate_exprslitnative_to_narwhals_dtype)SQLLazyFrame)ImplementationValidateBackendVersionVersiongenerate_temporary_column_namenot_implementedparse_columns_to_dropto_pyarrow_table
zip_strict)InvalidOperationError)IterableIteratorMappingSequence)Path)
ModuleType)Binary)Self	TypeAliasTypeIs)CompliantDataFrameAnyIbisGroupByIbisNamespaceIbisInterchangeSeries)_EagerAllowedImpl)_LimitedContext)	LazyFrame)DType	DataFrame)AsofJoinStrategyJoinStrategyUniqueKeepStrategyz*Sequence[ir.BooleanColumn] | Sequence[str]r   JoinPredicatesc                     e Zd Zej        ZdddzdZed{d            Ze	d|d            Z
d}dZd~dZd~dZddZddZdd Zdd"Zdd(Zdd+Zdd-Zdd0Zdd1Zdd5Zddd8Zdd9Zdd;Zedd=            Zedd?            ZddAZddCZddDZ ddEZ!ddJZ"ddMZ#eddO            Z$ddWZ%dd\Z&dd^Z'dd_Z(dddZ)ddiZ*ddlZ+ddmZ,ddnZ-ddsZ.ddtZ/ddwZ0 e1j2        dx          Z3 e1j2        dy          Z4 e1            Z5d6S )IbisLazyFrameF)validate_backend_versiondfir.Tableversionr   r4   boolreturnNonec               n    || _         || _        d | _        d | _        |r|                                  d S d S N)_native_frame_version_cached_schema_cached_columns_validate_backend_version)selfr5   r7   r4   s       O/var/www/histauto/venv/lib/python3.11/site-packages/narwhals/_ibis/dataframe.py__init__zIbisLazyFrame.__init__7   sM     (*7;15# 	-**,,,,,	- 	-    objir.Table | AnyTypeIs[ir.Table]c                6    t          | t          j                  S r<   )
isinstanceirTable)rF   s    rC   
_is_nativezIbisLazyFrame._is_nativeA   s    #rx(((rE   datacontextr)   r   c              &     | ||j                   S Nr7   )r>   )clsrN   rO   s      rC   from_nativezIbisLazyFrame.from_nativeE   s    s4!12222rE   +LazyFrame[ir.Table] | DataFrameV1[ir.Table]c                    | j         t          j        u rddlm}  || d          S | j                             | d          S )Nr   r,   interchange)levellazy)r>   r   V1narwhals.stable.v1r-   	lazyframe)rB   r-   s     rC   to_narwhalszIbisLazyFrame.to_narwhalsI   sS    =GJ&&4444449T7777}&&t6&:::rE   c                N    | j         t          j        urd}t          |          | S )Nz;__narwhals_dataframe__ is not implemented for IbisLazyFrame)r>   r   rZ   AttributeError)rB   msgs     rC   __narwhals_dataframe__z$IbisLazyFrame.__narwhals_dataframe__P   s)    =
**OC %%%rE   c                    | S r<    rB   s    rC   __narwhals_lazyframe__z$IbisLazyFrame.__narwhals_lazyframe__W   s    rE   r   c                    t           S r<   )ibisrd   s    rC   __native_namespace__z"IbisLazyFrame.__native_namespace__Z   s    rE   r%   c                0    ddl m}  || j                  S )Nr   r$   rR   )narwhals._ibis.namespacer%   r>   )rB   r%   s     rC   __narwhals_namespace__z$IbisLazyFrame.__narwhals_namespace__]   s)    ::::::}T]3333rE   namestrr'   c                b    ddl m}  || j                            |          | j                  S )Nr   r&   rR   )narwhals._ibis.seriesr'   nativeselectr>   )rB   rl   r'   s      rC   
get_columnzIbisLazyFrame.get_columnb   s<    ??????$$T[%7%7%=%=t}UUUUrE   Iterator[ir.Expr]c              #  <   K   | j         D ]}| j        |         V  d S r<   )columnsrp   )rB   rl   s     rC   _iter_columnszIbisLazyFrame._iter_columnsg   s7      L 	$ 	$D+d#####	$ 	$rE   backend_EagerAllowedImpl | Nonekwargsr   r!   c                   ||t           j        u r>ddlm}  |t	          | j                                                  d| j        d          S |t           j        u r<ddl	m
}  || j                                        t           j        d| j        d          S |t           j        u r0ddlm}  || j                                        d| j                  S d	| }t!          |          )
Nr   )ArrowDataFrameT)r4   r7   validate_column_names)PandasLikeDataFrame)implementationr4   r7   r|   )PolarsDataFrame)r4   r7   zUnsupported `backend` value: )r   PYARROWnarwhals._arrow.dataframer{   r   rp   
to_pyarrowr>   PANDASnarwhals._pandas_like.dataframer}   	to_pandasPOLARSnarwhals._polars.dataframer   	to_polars
ValueError)rB   rw   ry   r{   r}   r   r`   s          rC   collectzIbisLazyFrame.collectk   s2    ?g)???@@@@@@!> !7!7!9!9::)-&*	    n+++KKKKKK&&%%''-4)-&*    n+++BBBBBB"?%%'')-    8g77oorE   nintc                \    |                      | j                            |                    S r<   )_with_nativerp   head)rB   r   s     rC   r   zIbisLazyFrame.head   s&      !1!1!!4!4555rE   column_namesc                F    |                       | j        j        |           S r<   )r   rp   rq   )rB   r   s     rC   simple_selectzIbisLazyFrame.simple_select   s#      !3!3\!BCCCrE   exprsr	   c                    d t          | g|R  D             }|                     | j                            |                    S )Nc                Z    g | ](\  }}t          d |                    |                    )S )z	ir.Scalar)r   rl   .0rl   vals      rC   
<listcomp>z+IbisLazyFrame.aggregate.<locals>.<listcomp>   s@     
 
 
c chhtnn--
 
 
rE   )r
   r   rp   	aggregate)rB   r   	selections      rC   r   zIbisLazyFrame.aggregate   sV    
 
+D95999
 
 
	   !6!6y!A!ABBBrE   c                    d t          | g|R  D             }|sd}t          |           | j        j        | }|                     |          S )Nc                >    g | ]\  }}|                     |          S rc   )rl   r   s      rC   r   z(IbisLazyFrame.select.<locals>.<listcomp>   s&    RRR	cSXXd^^RRRrE   zKAt least one expression must be provided to `select` with the Ibis backend.)r
   r   rp   rq   r   )rB   r   r   r`   ts        rC   rq   zIbisLazyFrame.select   sc    RR^D5Q55Q5Q5QRRR	 	"_CS//!DK	*  ###rE   ru   Sequence[str]strictc                   t          | ||          fd| j        D             }|                      | j        j        |           S )N)r   c              3  $   K   | ]
}|v|V  d S r<   rc   )r   colcolumns_to_drops     rC   	<genexpr>z%IbisLazyFrame.drop.<locals>.<genexpr>   s-      OOSC4N4NS4N4N4N4NOOrE   )r   ru   r   rp   rq   )rB   ru   r   r   r   s       @rC   dropzIbisLazyFrame.drop   sS    /gfMMMOOOODLOOO	  !3!3Y!?@@@rE   N_c                ,    |d}t          |          | S )Nz,`backend` argument is not supported for Ibis)r   )rB   rw   r   r`   s       rC   rY   zIbisLazyFrame.lazy   s     
 @CS//!rE   c                    t          t          | g|R            }|                      | j        j        di |          S )Nrc   )dictr
   r   rp   mutate)rB   r   new_columns_maps      rC   with_columnszIbisLazyFrame.with_columns   sI    ~d;U;;;<<  !3!3!F!Fo!F!FGGGrE   	predicatec                    t          d ||           d                   }|                     | j                            |                    S )Nzir.BooleanValuer   )r   r   rp   filter)rB   r   masks      rC   r   zIbisLazyFrame.filter   sC    %yyq'9::  !3!3D!9!9:::rE   dict[str, DType]c                      j         A fd j                                        j                                        D              _          j         S )Nc                B    i | ]\  }}|t          |j                  S rc   r   r>   r   rl   dtyperB   s      rC   
<dictcomp>z(IbisLazyFrame.schema.<locals>.<dictcomp>   s<     # # #D% .udmDD# # #rE   )r?   rp   schemafieldsitemsrd   s   `rC   r   zIbisLazyFrame.schema   s_    &# # # ##';#5#5#7#7#>#D#D#F#F# # #D ""rE   	list[str]c                    | j         9| j        t          | j                  nt          | j        j                  | _         | j         S r<   )r@   r?   listr   rp   ru   rd   s    rC   ru   zIbisLazyFrame.columns   sK    ' &2 T[!!!$+-..  
 ##rE   pd.DataFramec                4    | j                                         S r<   )rp   r   rd   s    rC   r   zIbisLazyFrame.to_pandas   s    {$$&&&rE   pa.Tablec                4    | j                                         S r<   )rp   r   rd   s    rC   to_arrowzIbisLazyFrame.to_arrow   s    {%%'''rE   c                :    |                      | j        |          S rQ   )	__class__rp   )rB   r7   s     rC   _with_versionzIbisLazyFrame._with_version   s    ~~dk7~;;;rE   c                :    |                      || j                  S rQ   )r   r>   )rB   r5   s     rC   r   zIbisLazyFrame._with_native   s    ~~b$-~888rE   keys"Sequence[str] | Sequence[IbisExpr]drop_null_keysr#   c               *    ddl m}  || ||          S )Nr   r"   )r   )narwhals._ibis.group_byr#   )rB   r   r   r#   s       rC   group_byzIbisLazyFrame.group_by   s-     	877777{4nEEEErE   mappingMapping[str, str]c                j    dfd}|                      | j                            |                    S )Nr   rm   r9   c                0                         | |           S r<   )get)r   r   s    rC   _renamez%IbisLazyFrame.rename.<locals>._rename   s    ;;sC(((rE   )r   rm   r9   rm   )r   rp   rename)rB   r   r   s    ` rC   r   zIbisLazyFrame.rename   sG    	) 	) 	) 	) 	) 	)   !3!3G!<!<===rE   Iterable[str]c               l    t          | j                                      |          }|r
 | j        | n| S )zWIbis adds a suffix to the right table col, even when it matches the left during a join.)setru   intersectionr   )r5   ru   
duplicatess      rC   _join_drop_duplicate_columnsz*IbisLazyFrame._join_drop_duplicate_columns   s8     __11'::
'19wrw
##r9rE   otherhowr/   left_onSequence[str] | Noneright_onsuffixc                  |dk    rdn|}dz   }|| k    r,|                      |j                                                  }|dk    r7| j                            |j        ||          }|                      |          S |J |J |                     |||          }	| j                            |j        |	||          }|dk    r}fd|D             }
|                     ||
          }d |	D             }g }|D ]<}|j        j        }|| j        vr%|j	        j        |k    r|
                    |           =|r
 |j        | }|                      |          S )	Nfullouter{name}cross)r   rnameleftc              3  "   K   | ]	}|z   V  
d S r<   rc   r   r   r   s     rC   r   z%IbisLazyFrame.join.<locals>.<genexpr>
  '      88!1v:888888rE   c              3     K   | ];}t          |t                    t          d |                                          V  <dS )r   N)rJ   rm   r   op)r   ps     rC   r   z%IbisLazyFrame.join.<locals>.<genexpr>  sD      WWQJqRUDVDVW$x((WWWWWWrE   )r   rp   viewjoin_convert_predicatesr   rightrl   ru   r   appendr   )rB   r   r   r   r   r   
how_nativer   joined
predicatesright_namesitto_droppredr   s        `         rC   r   zIbisLazyFrame.join   s    !$vWW3
6!D==%%el&7&7&9&9::E  [%%el
%%PPF$$V,,,"""###--eWhGG
!!%,

RW!XX8888x888K66v{KKFWW*WWWBG * *
,,51H1HNN5))) /$g.  (((rE   by_leftby_rightstrategyr.   c                   dz   }t           j        t           j        d}	g }
|	                    |          x}r# || j        |         |j        |                   }nd}t          |          |||                     |||          }
| j                            |j        ||
|          }|                     ||z   g          }|$fd|D             }|                     ||          }| 	                    |          S )Nr   )backwardforwardzIOnly `backward` and `forward` strategies are currently supported for Ibis)r   c              3  "   K   | ]	}|z   V  
d S r<   rc   r   s     rC   r   z*IbisLazyFrame.join_asof.<locals>.<genexpr>/  r   rE   )
operatorgeler   rp   NotImplementedErrorr   	asof_joinr   r   )rB   r   r   r   r   r   r   r   r   strategy_opr   r   onr`   r   r   s          `        rC   	join_asofzIbisLazyFrame.join_asof  s    6!#+;8;GG%'
***2 	+#%2dk'&:EL<R#S#SBB]C%c***8#711%(KKJ&&u|R5&QQ226Hv<M;NOO8888x888K66v{KKF  (((rE   r1   c                P     ||k    r|S  fdt          ||          D             S )Nc                j    g | ]/\  }}t          d j        |         j        |         k              0S )zir.BooleanColumn)r   rp   )r   r   r   r   rB   s      rC   r   z5IbisLazyFrame._convert_predicates.<locals>.<listcomp>8  sK     
 
 
e #dk$&75<;N&NPP
 
 
rE   )r   )rB   r   r   r   s   ``  rC   r   z!IbisLazyFrame._convert_predicates3  sP     hN
 
 
 
 
)'8<<
 
 
 	
rE   c                |      fd j                                         j                                        D             S )Nc                B    i | ]\  }}|t          |j                  S rc   r   r   s      rC   r   z0IbisLazyFrame.collect_schema.<locals>.<dictcomp>>  s<     
 
 
e *5$-@@
 
 
rE   )rp   r   r   r   rd   s   `rC   collect_schemazIbisLazyFrame.collect_schema=  sK    
 
 
 
#{1133:@@BB
 
 
 	
rE   subsetkeepr0   order_byc                  |p| j         }|                     |          x}r|t          d| j         d          }|r|dk    rt          j        |ddd}n$|rt          j        |ddd}nt          d          }t          j        ||	          }|d
k    r-| j        	                                
                    |          }	n6t          j                    
                    |          t          d          z   }	 | j        j        di ||	i                    t          j        |         t          d          k                                  |          }
|                     |
          S )N   
row_index_)prefixlastT
descending
nulls_lastF   )r   r  nonerc   )ru   _check_columns_existr   r	   _sortr   rg   windowrp   countover
row_numberr   r   r   r   r   )rB   r  r  r  subset_errortmp_name	order_by_r  exprr5   s              rC   uniquezIbisLazyFrame.uniqueC  sa    (DL--g6665 	K1!T\,WWW 	 TdSSSII 	 UuUUUIIAIg	BBB6>>;$$&&++F33DD?$$))&11CFF:DDK22(D!122VDF8$A.//T(^^ 	
   $$$rE   byr  bool | Sequence[bool]r  c               n    ddl m}  |j        |||d}|                      | j        j        |           S )Nr   r   r  )narwhals._ibis.exprr	   r  r   rp   r  )rB   r  r  r'  r	   colss         rC   sortzIbisLazyFrame.sort`  sM    000000x~rjZPPP  !5!5t!<===rE   kreversec                   ddl m} t          |t                    r| nd |D             } |j        ||dd}|                      | j        j        |                     |                    S )Nr   r   c                    g | ]}| S rc   rc   )r   els     rC   r   z'IbisLazyFrame.top_k.<locals>.<listcomp>i  s    =W=W=W"f=W=W=WrE   Tr  )	r*  r	   rJ   r8   r  r   rp   r  r   )rB   r-  r'  r.  r	   descr+  s          rC   top_kzIbisLazyFrame.top_kf  s    000000($77W7{{=W=Ww=W=W=Wx~rdtDDD  !5!5t!<!A!A!!D!DEEErE   c                r    ||n| j         }|                     | j                            |                    S r<   )ru   r   rp   	drop_null)rB   r  r!  s      rC   
drop_nullszIbisLazyFrame.drop_nullsm  s6    ".&&DL  !6!6w!?!?@@@rE   c                N   | j         j        }|                                 }|D ]*}||         }||j        k    rd| d}t	          |          +t          |          dk    rd}t          |          |                     | j        	                    |d         d                    S )Nz-`explode` operation not supported for dtype `z`, expected List typer  zExploding on multiple columns is not supported with Ibis backend since we cannot guarantee that the exploded columns have matching element counts.r   T)
keep_empty)
r>   dtypesr  Listr   lenr  r   rp   unnest)rB   ru   r9  r   r   r   r`   s          rC   explodezIbisLazyFrame.explodeq  s    %$$&& 	1 	1C3KE##)E ) ) )  ,C000 $ w<<1^  &c***  !3!3GAJ4!3!P!PQQQrE   r  indexvariable_name
value_namec                (  	 dd l m} |g n|	|	fd| j        D             n|}t          t                              g 	||                    }| j                             |j        | ||          }| 	                     |j
        |           S )Nr   c                    g | ]}|v|	S rc   rc   )r   cindex_s     rC   r   z)IbisLazyFrame.unpivot.<locals>.<listcomp>  s    8881QrE   )names_to	values_to)ibis.selectors	selectorsru   r   r   fromkeysrp   pivot_longerr+  r   rq   )
rB   r  r>  r?  r@  son_final_columns	unpivotedrD  s
            @rC   unpivotzIbisLazyFrame.unpivot  s     	#"""""&+m<>J88888888B 	
 T]]+OV+O]+OJ+OPPQQK,,AFCL=J - 
 
	   !1!1=!ABBBrE   c                   t          j                                        t          j        |                                        |          t           j                                        g}|                      | j        j	        |           S )N)r  )
rg   r   r  r  rl   rH  allr   rp   rq   )rB   rl   r  	to_selects       rC   with_row_indexzIbisLazyFrame.with_row_index  sq    O""4;#A#A#ABBGGMMN  
	   !3!3Y!?@@@rE   filestr | Path | BytesIOc                    t          |t                    rd}t          |          | j                            |           d S )Nz5Writing to BytesIO is not supported for Ibis backend.)rJ   r   r  rp   
to_parquet)rB   rT  r`   s      rC   sink_parquetzIbisLazyFrame.sink_parquet  sC    dG$$ 	+IC%c***t$$$$$rE   zO`LazyFrame.gather_every` is deprecated and will be removed in a future version.zG`LazyFrame.tail` is deprecated and will be removed in a future version.)r5   r6   r7   r   r4   r8   r9   r:   )rF   rG   r9   rH   )rN   r6   rO   r)   r9   r   )r9   rU   )r9   r   )r9   r   )r9   r%   )rl   rm   r9   r'   )r9   rs   )rw   rx   ry   r   r9   r!   )r   r   r9   r   )r   rm   r9   r   )r   r	   r9   r   )ru   r   r   r8   r9   r   r<   )rw   r:   r   r:   r9   r   )r   r	   r9   r   )r9   r   )r9   r   )r9   r   )r9   r   )r7   r   r9   r   )r5   r6   r9   r   )r   r   r   r8   r9   r#   )r   r   r9   r   )r5   r6   ru   r   r9   r6   )r   r   r   r/   r   r   r   r   r   rm   r9   r   )r   r   r   rm   r   rm   r   r   r   r   r   r.   r   rm   r9   r   )r   r   r   r   r   r   r9   r1   )r  r   r  r0   r  r   r9   r   )r'  rm   r  r(  r  r8   r9   r   )r-  r   r'  r   r.  r(  r9   r   )r  r   r9   r   )ru   r   r9   r   )
r  r   r>  r   r?  rm   r@  rm   r9   r   )rl   rm   r  r   r9   r   )rT  rU  r9   r:   )6__name__
__module____qualname__r   IBIS_implementationrD   staticmethodrM   classmethodrT   r]   ra   re   rh   rk   rr   rv   r   r   r   r   rq   r   rY   r   r   propertyr   ru   r   r   r   r   r   r   r   r   r  r   r  r&  r,  r3  r6  r=  rO  rS  rX  r   
deprecatedgather_everytail_evaluate_window_exprrc   rE   rC   r3   r3   1   s        %)O SX- - - - - - ) ) ) \) 3 3 3 [3; ; ; ;         4 4 4 4
V V V V
$ $ $ $" " " "H6 6 6 6D D D DC C C C$ $ $ $A A A A
    H H H H; ; ; ;
 # # # X# $ $ $ X$' ' ' '( ( ( (< < < <9 9 9 9F F F F> > > > : : : \:
") ") ") ")H) ) ) )8
 
 
 

 
 
 
% % % %:> > > >F F F FA A A AR R R R,C C C C,A A A A% % % % .?-Y L &?%Q D
 ,O--rE   r3   )r	   r6   rU   )L
__future__r   r  ior   typingr   r   r   rg   ibis.expr.typesr%  typesrK   r*  r	   narwhals._ibis.utilsr
   r   r   narwhals._sql.dataframer   narwhals._utilsr   r   r   r   r   r   r   r   narwhals.exceptionsr   collections.abcr   r   r   r   pathlibr   r   pandaspdpyarrowpaibis.expr.operationsr   typing_extensionsr   r   r    narwhals._compliant.typingr!   r   r#   rj   r%   ro   r'   narwhals._typingr(   r)   narwhals.dataframer*   narwhals.dtypesr+   r[   r-   DataFrameV1narwhals.typingr.   r/   r0   r1   __annotations__r3   rc   rE   rC   <module>r}     s   " " " " " " "        + + + + + + + + + +           ( ( ( ( ( ( N N N N N N N N N N 0 0 0 0 0 0	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 6 5 5 5 5 5 MEEEEEEEEEEEE      ++++++9999999999@@@@@@333333666666;;;;;;222222//////,,,,,,%%%%%%;;;;;;RRRRRRRRRR LNLLLLA. A. A. A. A.VWA. A. A. A. A.rE   