
    -Ph>                       U d dl mZ d dlZd dlmZmZmZmZmZm	Z	m
Z
mZ d dlZd dlmc mZ d dlmZmZ d dlmZmZmZmZmZmZ d dlmZmZ d dlmZ ered dlm Z  d dl!Z"d dl#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/m0Z0 d dl1m2Z2 d dl3m4Z4 d dlm5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z< d dlm=Z=m>Z>m?Z? dZ@deAd<    G d ded                   ZBdS )    )annotationsN)TYPE_CHECKINGAnyIterableIteratorLiteralMappingSequencecast)evaluate_exprsnative_to_narwhals_dtype)ImplementationVersionnot_implementedparse_columns_to_dropparse_versionvalidate_backend_version)ColumnNotFoundErrorInvalidOperationError)CompliantLazyFrame)
ModuleType)Binary)Self	TypeAliasTypeIs)CompliantDataFrameAny)IbisExprIbisGroupByIbisNamespaceIbisInterchangeSeries)_FullContext)	LazyFrame)DType	DataFrame)AsofJoinStrategyJoinStrategyLazyUniqueKeepStrategyz*Sequence[ir.BooleanColumn] | Sequence[str]r   JoinPredicatesc                     e Zd Zej        Zdrd	Zedsd            Ze	dtd            Z
dudZdvdZdvdZdwdZdxdZdydZdzd Zd{d&Zd|d)Zd}d+Zd~d.Zd~d/Zdd4Zd5d6dd8Zd~d9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(ddcZ)ddhZ*ddiZ+ddjZ,ddoZ- e.j/        dp          Z0 e.j/        dq          Z1 e.            Z2d5S )IbisLazyFramedfir.Tablebackend_versiontuple[int, ...]versionr   returnNonec                   || _         || _        || _        d | _        d | _        t          | j        | j                   d S N)_native_frame_version_backend_version_cached_schema_cached_columnsr   _implementation)selfr/   r1   r3   s       X/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/narwhals/_ibis/dataframe.py__init__zIbisLazyFrame.__init__;   sG     (* /7;15 !5t7LMMMMM    objir.Table | AnyTypeIs[ir.Table]c                6    t          | t          j                  S r7   )
isinstanceirTable)rB   s    r?   
_is_nativezIbisLazyFrame._is_nativeE   s    #rx(((rA   datacontextr$   r   c              2     | ||j         |j                  S Nr1   r3   )r:   r9   )clsrJ   rK   s      r?   from_nativezIbisLazyFrame.from_nativeI   s(    s'":GDT
 
 
 	
rA   +LazyFrame[ir.Table] | DataFrameV1[ir.Table]c                    | j         t          j        u r| j                             | d          S ddlm}  || d          S )Nlazy)levelr   r'   interchange)r9   r   MAIN	lazyframenarwhals.stable.v1r(   )r>   DataFrameV1s     r?   to_narwhalszIbisLazyFrame.to_narwhalsO   sS    =GL((=**4v*>>>??????{4}5555rA   c                N    | j         t          j        urd}t          |          | S )Nz;__narwhals_dataframe__ is not implemented for IbisLazyFrame)r9   r   V1AttributeError)r>   msgs     r?   __narwhals_dataframe__z$IbisLazyFrame.__narwhals_dataframe__W   s)    =
**OC %%%rA   c                    | S r7    r>   s    r?   __narwhals_lazyframe__z$IbisLazyFrame.__narwhals_lazyframe__^   s    rA   r   c                    t           S r7   )ibisrb   s    r?   __native_namespace__z"IbisLazyFrame.__native_namespace__a   s    rA   r!   c                <    ddl m}  || j        | j                  S )Nr   r    rN   )narwhals._ibis.namespacer!   r:   r9   )r>   r!   s     r?   __narwhals_namespace__z$IbisLazyFrame.__narwhals_namespace__d   s.    ::::::}T-BDMZZZZrA   namestrr#   c                b    ddl m}  || j                            |          | j                  S )Nr   r"   )r3   )narwhals._ibis.seriesr#   nativeselectr9   )r>   rj   r#   s      r?   
get_columnzIbisLazyFrame.get_columni   s<    ??????$$T[%7%7%=%=t}UUUUrA   Iterator[ir.Expr]c              #  <   K   | j         D ]}| j        |         V  d S r7   )columnsrn   )r>   rj   s     r?   _iter_columnszIbisLazyFrame._iter_columnsn   s7      L 	$ 	$D+d#####	$ 	$rA   backend(ModuleType | Implementation | str | Nonekwargsr   r   c                "   ||t           j        u rBdd l}ddlm}  || j                                        t          |          | j        d          S |t           j	        u rMdd l
}ddlm}  || j                                        t           j	        t          |          | j        d          S |t           j        u rAdd l}ddlm}  || j                                        t          |          | j                  S d	| }	t'          |	          )
Nr   )ArrowDataFrameT)r1   r3   validate_column_names)PandasLikeDataFrame)implementationr1   r3   rz   )PolarsDataFramerN   zUnsupported `backend` value: )r   PYARROWpyarrownarwhals._arrow.dataframery   rn   
to_pyarrowr   r9   PANDASpandasnarwhals._pandas_like.dataframer{   	to_pandasPOLARSpolarsnarwhals._polars.dataframer}   	to_polars
ValueError)
r>   ru   rw   pary   pdr{   plr}   r^   s
             r?   collectzIbisLazyFrame.collectr   sf    ?g)???    @@@@@@!>&&(( -b 1 1&*	    n+++KKKKKK&&%%''-4 -b 1 1&*    n+++BBBBBB"?%%'' -b 1 1    8g77oorA   nintc                \    |                      | j                            |                    S r7   )_with_nativern   head)r>   r   s     r?   r   zIbisLazyFrame.head   s&      !1!1!!4!4555rA   column_namesc                F    |                       | j        j        |           S r7   )r   rn   ro   )r>   r   s     r?   simple_selectzIbisLazyFrame.simple_select   s#      !3!3\!BCCCrA   exprsr   c                    d t          | g|R  D             }|                     | j                            |                    S )Nc                Z    g | ](\  }}t          d |                    |                    )S )z	ir.Scalar)r   rj   .0rj   vals      r?   
<listcomp>z+IbisLazyFrame.aggregate.<locals>.<listcomp>   s@     
 
 
c chhtnn--
 
 
rA   )r   r   rn   	aggregate)r>   r   	selections      r?   r   zIbisLazyFrame.aggregate   sV    
 
+D95999
 
 
	   !6!6y!A!ABBBrA   c                    d t          | g|R  D             }|sd}t          |           | j        j        | }|                     |          S )Nc                >    g | ]\  }}|                     |          S ra   )rj   r   s      r?   r   z(IbisLazyFrame.select.<locals>.<listcomp>   s&    RRR	cSXXd^^RRRrA   zKAt least one expression must be provided to `select` with the Ibis backend.)r   r   rn   ro   r   )r>   r   r   r^   ts        r?   ro   zIbisLazyFrame.select   sc    RR^D5Q55Q5Q5QRRR	 	"_CS//!DK	*  ###rA   rs   Sequence[str]strictboolc                   t          | ||          fd| j        D             }|                      | j        j        |           S )N)r   c              3  $   K   | ]
}|v|V  d S r7   ra   )r   colcolumns_to_drops     r?   	<genexpr>z%IbisLazyFrame.drop.<locals>.<genexpr>   s-      OOSC4N4NS4N4N4N4NOOrA   )r   rs   r   rn   ro   )r>   rs   r   r   r   s       @r?   dropzIbisLazyFrame.drop   sS    /gfMMMOOOODLOOO	  !3!3Y!?@@@rA   N)ru   Implementation | Nonec               ,    |d}t          |          | S )Nz,`backend` argument is not supported for Ibis)r   )r>   ru   r^   s      r?   rS   zIbisLazyFrame.lazy   s     
 @CS//!rA   c                    t          t          | g|R            }|                      | j        j        di |          S )Nra   )dictr   r   rn   mutate)r>   r   new_columns_maps      r?   with_columnszIbisLazyFrame.with_columns   sI    ~d;U;;;<<  !3!3!F!Fo!F!FGGGrA   	predicatec                    t          d ||           d                   }|                     | j                            |                    S )Nzir.BooleanValuer   )r   r   rn   filter)r>   r   masks      r?   r   zIbisLazyFrame.filter   sC    %yyq'9::  !3!3D!9!9:::rA   dict[str, DType]c                      j         A fd j                                        j                                        D              _          j         S )Nc                B    i | ]\  }}|t          |j                  S ra   r   r9   r   rj   dtyper>   s      r?   
<dictcomp>z(IbisLazyFrame.schema.<locals>.<dictcomp>   s<     # # #D% .udmDD# # #rA   )r;   rn   schemafieldsitemsrb   s   `r?   r   zIbisLazyFrame.schema   s_    &# # # ##';#5#5#7#7#>#D#D#F#F# # #D ""rA   	list[str]c                    | j         9| j        t          | j                  nt          | j        j                  | _         | j         S r7   )r<   r;   listr   rn   rs   rb   s    r?   rs   zIbisLazyFrame.columns   sK    ' &2 T[!!!$+-..  
 ##rA   pd.DataFramec                    dd l }t          |          dk    r| j                                        S d|j         }t          |          )Nr   )   r   r   z3Conversion to pandas requires pandas>=1.0.0, found )r   r   rn   r   __version__NotImplementedError)r>   r   r^   s      r?   r   zIbisLazyFrame.to_pandas   sR    	));((***XXXC%c***rA   pa.Tablec                4    | j                                         S r7   )rn   r   rb   s    r?   to_arrowzIbisLazyFrame.to_arrow   s    {%%'''rA   c                F    |                      | j        || j                  S )N)r3   r1   )	__class__rn   r:   )r>   r3   s     r?   _with_versionzIbisLazyFrame._with_version   s)    ~~K$:O  
 
 	
rA   c                F    |                      || j        | j                  S rM   )r   r:   r9   )r>   r/   s     r?   r   zIbisLazyFrame._with_native   s)    ~~ 5t}  
 
 	
rA   keys"Sequence[str] | Sequence[IbisExpr]drop_null_keysr   c               *    ddl m}  || ||          S )Nr   r   )r   )narwhals._ibis.group_byr   )r>   r   r   r   s       r?   group_byzIbisLazyFrame.group_by   s-     	877777{4nEEEErA   mappingMapping[str, str]c                j    dfd}|                      | j                            |                    S )Nr   rk   r4   c                0                         | |           S r7   )get)r   r   s    r?   _renamez%IbisLazyFrame.rename.<locals>._rename   s    ;;sC(((rA   )r   rk   r4   rk   )r   rn   rename)r>   r   r   s    ` r?   r   zIbisLazyFrame.rename   sG    	) 	) 	) 	) 	) 	)   !3!3G!<!<===rA   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.)setrs   intersectionr   )r/   rs   
duplicatess      r?   _join_drop_duplicate_columnsz*IbisLazyFrame._join_drop_duplicate_columns  s8     __11'::
'19wrw
##r9rA   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 r7   ra   r   r   r   s     r?   r   z%IbisLazyFrame.join.<locals>.<genexpr>!  '      88!1v:888888rA   c              3     K   | ];}t          |t                    t          d |                                          V  <dS )r   N)rF   rk   r   op)r   ps     r?   r   z%IbisLazyFrame.join.<locals>.<genexpr>#  sD      WWQJqRUDVDVW$x((WWWWWWrA   )r   rn   viewjoin_convert_predicatesr   rightrj   rs   r   appendr   )r>   r   r   r   r   r   
how_nativer   joined
predicatesright_namesitto_droppredr   s        `         r?   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.  (((rA   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 r7   ra   r   s     r?   r   z*IbisLazyFrame.join_asof.<locals>.<genexpr>F  r   rA   )
operatorgeler   rn   r   r   	asof_joinr   r   )r>   r   r   r   r  r  r  r   r   strategy_opr   r   onr^   r   r   s          `        r?   	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  (((rA   r,   c                P     ||k    r|S  fdt          ||          D             S )Nc                j    g | ]/\  }}t          d j        |         j        |         k              0S )zir.BooleanColumn)r   rn   )r   r   r   r   r>   s      r?   r   z5IbisLazyFrame._convert_predicates.<locals>.<listcomp>O  sK     
 
 
e #dk$&75<;N&NPP
 
 
rA   )zip)r>   r   r   r   s   ``  r?   r   z!IbisLazyFrame._convert_predicatesJ  sP     hN
 
 
 
 
"7H55
 
 
 	
rA   c                |      fd j                                         j                                        D             S )Nc                B    i | ]\  }}|t          |j                  S ra   r   r   s      r?   r   z0IbisLazyFrame.collect_schema.<locals>.<dictcomp>U  s<     
 
 
e *5$-@@
 
 
rA   )rn   r   r   r   rb   s   `r?   collect_schemazIbisLazyFrame.collect_schemaT  sK    
 
 
 
#{1133:@@BB
 
 
 	
rA   subsetkeepr+   c                   |dk    r|n|p j         x}rt           fd|D                       rBdt          |                               j                    d j          d}t	          |          dd d}||         }                      j                            ||                    S                       j                            |	                    S )
Nanyc              3  *   K   | ]}|j         vV  d S r7   )rs   )r   xr>   s     r?   r   z'IbisLazyFrame.unique.<locals>.<genexpr>_  s*      ::Q1DL(::::::rA   zColumns z not found in .first)r  none)r  r  )r  )rs   r  r   
differencer   r   rn   distinct)r>   r  r  subset_r^   mapped_keepto_keeps   `      r?   uniquezIbisLazyFrame.uniqueZ  s     !%ffF4JdlK7 	U::::'::::: /eW!8!8!F!FeeVZVbeee)#... ? ?K "$'G$$T[%9%9W7%9%S%STTT  !5!5!5!@!@AAArA   by
descendingbool | Sequence[bool]
nulls_lastc                  t          t                    r(fdt          t          |                    D             g }t          t          |                    D ]Y}|         rt          j        nt          j        } |||         |           }|                    t          d|                     Z| 	                     | j
        j        |           S )Nc                    g | ]}S ra   ra   )r   _r&  s     r?   r   z&IbisLazyFrame.sort.<locals>.<listcomp>m  s    ===*===rA   )nulls_firstz	ir.Column)rF   r   rangelenre   descascr   r   r   rn   order_by)r>   r&  r(  r%  	sort_colsidirection_fnr   s    `      r?   sortzIbisLazyFrame.sortk  s    j$'' 	>====eCGGnn===J	s2ww 	5 	5A(21C49948L,r!uj.AAACT+s334444  !5!5y!ABBBrA   c                r    ||n| j         }|                     | j                            |                    S r7   )rs   r   rn   	drop_null)r>   r  r!  s      r?   
drop_nullszIbisLazyFrame.drop_nullsx  s6    ".&&DL  !6!6w!?!?@@@rA   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)
r9   dtypesr  Listr   r.  r   r   rn   unnest)r>   rs   r;  r   r   r   r^   s          r?   explodezIbisLazyFrame.explode|  s    %$$&& 	1 	1C3KE##)E ) ) )  ,C000 $ w<<1^  &c***  !3!3GAJ4!3!P!PQQQrA   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 ra   ra   )r   cindex_s     r?   r   z)IbisLazyFrame.unpivot.<locals>.<listcomp>  s    8881QrA   )names_to	values_to)ibis.selectors	selectorsrs   r   r   fromkeysrn   pivot_longercolsr   ro   )
r>   r  r?  r@  rA  son_final_columns	unpivotedrE  s
            @r?   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BrA   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.)r/   r0   r1   r2   r3   r   r4   r5   )rB   rC   r4   rD   )rJ   r0   rK   r$   r4   r   )r4   rQ   )r4   r   )r4   r   )r4   r!   )rj   rk   r4   r#   )r4   rq   )ru   rv   rw   r   r4   r   )r   r   r4   r   )r   rk   r4   r   )r   r   r4   r   )rs   r   r   r   r4   r   )ru   r   r4   r   )r   r   r4   r   )r4   r   )r4   r   )r4   r   )r4   r   )r3   r   r4   r   )r/   r0   r4   r   )r   r   r   r   r4   r   )r   r   r4   r   )r/   r0   rs   r   r4   r0   )r   r   r   r*   r   r   r   r   r   rk   r4   r   )r   r   r   rk   r   rk   r  r   r  r   r  r)   r   rk   r4   r   )r   r   r   r   r   r   r4   r,   )r  r   r  r+   r4   r   )r%  rk   r&  r'  r(  r   r4   r   )r  r   r4   r   )rs   r   r4   r   )
r  r   r?  r   r@  rk   rA  rk   r4   r   )3__name__
__module____qualname__r   IBISr=   r@   staticmethodrI   classmethodrP   rZ   r_   rc   rf   ri   rp   rt   r   r   r   r   ro   r   rS   r   r   propertyr   rs   r   r   r   r   r   r   r   r   r  r   r  r$  r5  r8  r>  rQ  r   
deprecatedgather_everytailwith_row_indexra   rA   r?   r.   r.   4   s       
 %)ON N N N ) ) ) \) 
 
 
 [

6 6 6 6         [ [ [ [
V V V V
$ $ $ $( ( ( (T6 6 6 6D D D DC C C C$ $ $ $A A A A
 8<      H H H H; ; ; ;
 # # # X# $ $ $ X$+ + + +( ( ( (
 
 
 


 
 
 

F F F F> > > > : : : \:
") ") ") ")H) ) ) )8
 
 
 

 
 
 
B B B B"C C C CA A A AR R R R,C C C C, .?-Y L &?%Q D %_&&NNNrA   r.   )r   r0   rQ   )C
__future__r   r	  typingr   r   r   r   r   r	   r
   r   re   ibis.expr.typesexprtypesrG   narwhals._ibis.utilsr   r   narwhals._utilsr   r   r   r   r   r   narwhals.exceptionsr   r   narwhals.typingr   r   r   r   r   r   ibis.expr.operationsr   typing_extensionsr   r   r   narwhals._compliant.typingr   narwhals._ibis.exprr   r   r   rh   r!   rm   r#   r$   narwhals.dataframer%   narwhals.dtypesr&   rX   r(   rY   r)   r*   r+   r,   __annotations__r.   ra   rA   r?   <module>rm     s   " " " " " " " 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	           I I I I I I I I                K J J J J J J J . . . . . . M      ++++++9999999999@@@@@@,,,,,,333333666666;;;;;;,,,,,,,,,,,,%%%%%%;;;;;;VVVVVVVVVV LNLLLLz' z' z' z' z'Mz' z' z' z' z'rA   