
    IZjd                       d dl mZ d dlZd dlmZmZ d dlmZ erhd dlmZ d dl	Z	d dl
mZ d dlZd dlZd dlmZ d dlZd dlZd dl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&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/  e0dg          Z1ddZ2ddZ3ddZ4ddZ5ddZ6ddZ7ddZ8ddZ9ddZ:ddZ;ddZ<ddZ=ddZ>ddZ?ddZ@ddZAdd!ZBdd#ZCdd&ZDdd'ZEdd)ZFdd*ZGdd-ZHdd/ZIdd0ZJdd2ZKdd3ZLdd5ZMdd7ZNdd8ZOdd:ZPdd;ZQdd=ZRdd@ZSddBZTddCZUddEZVddFZWddHZXddIZYddKZZddLZ[ddNZ\ddOZ]ddQZ^ddRZ_ddTZ`ddVZaddXZbddYZcdd[Zddd\Zedd^Zfdd`ZgddbZhdddZiddeZjddgZkddhZlddjZmddkZnddoZoddqZpddsZqddtZrddvZsddyZtddzZudd{Zvdd|Zwdd}Zxdd~ZyddZzddZ{ddZ|ddZ}ddZ~ddZddZddZddZddZddZddZddZg dZdS )    )annotationsN)TYPE_CHECKINGAny)issue_warning)	TypeGuard	DataFrame)TypeIs)SQLFrameDataFrame)r	   	LazyFrameSeries)
IntoDataFrameTIntoLazyFrameTIntoSeriesTPandasLikeDType_1DArray_1DArrayInt_2DArray_NDArray_NumpyScalar_ShapeT	fireducksreturnr   c                 B    t           j                            dd          S )z;Get Polars module (if already imported - else return None).polarsNsysmodulesget     a/Users/jameslopez/projects/MentorCore/.venv/lib/python3.11/site-packages/narwhals/dependencies.py
get_polarsr$   1       ;??8T***r"   c                 B    t           j                            dd          S )z;Get pandas module (if already imported - else return None).pandasNr   r!   r"   r#   
get_pandasr(   6   r%   r"   c                 B    t           j                            dd          S )zAGet modin.pandas module (if already imported - else return None).zmodin.pandasNr   r!   r"   r#   	get_modinr*   ;   s    ;??>4000r"   c                 B    t           j                            dd          S )z9Get cudf module (if already imported - else return None).cudfNr   r!   r"   r#   get_cudfr-   @       ;??64(((r"   c                 B    t           j                            dd          S )z9Get cupy module (if already imported - else return None).cupyNr   r!   r"   r#   get_cupyr1   E   r.   r"   c                 B    t           j                            dd          S )z<Get pyarrow module (if already imported - else return None).pyarrowNr   r!   r"   r#   get_pyarrowr4   J       ;??9d+++r"   c                 B    t           j                            dd          S )z:Get numpy module (if already imported - else return None).numpyNr   r!   r"   r#   	get_numpyr8   O   s    ;??7D)))r"   c                 B    t           j                            dd          S )z2Get dask (if already imported - else return None).daskNr   r!   r"   r#   get_daskr;   T   r.   r"   c                 B    t           j                            dd          S )zCGet dask.dataframe module (if already imported - else return None).zdask.dataframeNr   r!   r"   r#   get_dask_dataframer=   Y   s    ;??+T222r"   c                 B    t           j                            dd          S )z;Get duckdb module (if already imported - else return None).duckdbNr   r!   r"   r#   
get_duckdbr@   ^   r%   r"   c                 B    t           j                            dd          S )z9Get ibis module (if already imported - else return None).ibisNr   r!   r"   r#   get_ibisrC   c   r.   r"   c                     t                      x} t          | d          r| j        S t          j                            dd          S )z>Get dask_expr module (if already imported - else return None).N	dask_expr)r=   hasattrrE   r   r   r    )dds    r#   get_dask_exprrH   h   s@     """/GB4L4L/|;??;---r"   c                 B    t           j                            dd          S )z<Get pyspark module (if already imported - else return None).pysparkNr   r!   r"   r#   get_pysparkrK   o   r5   r"   c                 B    t           j                            dd          S )z@Get pyspark.sql module (if already imported - else return None).zpyspark.sqlNr   r!   r"   r#   get_pyspark_sqlrM   t   s    ;??=$///r"   c                 B    t           j                            dd          S )zHGet pyspark.sql.connect module (if already imported - else return None).zpyspark.sql.connectNr   r!   r"   r#   get_pyspark_connectrO   y   s    ;??0$777r"   c                 B    t           j                            dd          S )z=Get sqlframe module (if already imported - else return None).sqlframeNr   r!   r"   r#   get_sqlframerR   ~   s    ;??:t,,,r"   frameNonec          	         t          |           st          |           rSddlm} t	          j        d          j        j        }d ||            d| d| d| d	}t          |t                     d S d S )	Nr   qualified_type_name   You passed a `` to ``.

Hint: Instead of e.g. `z(frame)`, did you mean `z(frame.to_native())`?)
is_narwhals_dataframeis_narwhals_lazyframenarwhals._utilsrW   r   	_getframef_codeco_namer   UserWarning)rS   rW   callermsgs       r#   _warn_if_narwhals_df_or_lfre      s    U## 	('<U'C'C 	(777777q!!(0;0077 ; ;v ; ;&,; ;#; ; ; 	
 	c;'''''	( 	(r"   serc          	         t          |           rSddlm} t          j        d          j        j        }d ||            d| d| d| d	}t          |t                     d S d S )	Nr   rV   rX   rY   rZ   r[   z(ser)`, did you mean `z(ser.to_native())`?)	is_narwhals_seriesr^   rW   r   r_   r`   ra   r   rb   )rf   rW   rc   rd   s       r#   _warn_if_narwhals_seriesri      s    # 	(777777q!!(090055 9 9V 9 9&,9 9#9 9 9 	
 	c;'''''	( 	(r"   dfTypeIs[pd.DataFrame]c                     t                      x}durt           |j                  p t           fdt          D                       S )zBCheck whether `df` is a pandas DataFrame without importing pandas.Nc              3     K   | ]B}t           j                            |d           xd uot          j        j                  V  Cd S N)r   r   r    
isinstancer'   r	   ).0module_namerj   mods     r#   	<genexpr>z'_is_pandas_dataframe.<locals>.<genexpr>   sr       V V  T22	24? 	1r3:/00V V V V V Vr"   )r(   ro   r	   anyIMPORT_HOOKS)rj   pdrr   s   ` @r#   _is_pandas_dataframerw      st    <<R,MB1M1M RU V V V V V (V V V S S r"   c                >    t          |            t          |           S )zCheck whether `df` is a pandas DataFrame without importing pandas.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    )re   rw   rj   s    r#   is_pandas_dataframerz            r"""###r"   TypeIs[pd.Series[Any]]c                     t                      x}durt           |j                  p t           fdt          D                       S )z@Check whether `ser` is a pandas Series without importing pandas.Nc              3     K   | ]B}t           j                            |d           xd uot          j        j                  V  Cd S rn   )r   r   r    ro   r'   r   )rp   rq   rr   rf   s     r#   rs   z$_is_pandas_series.<locals>.<genexpr>   sr       T T  T22	24? 	/sCJ-..T T T T T Tr"   )r(   ro   r   rt   ru   )rf   rv   rr   s   ` @r#   _is_pandas_seriesr      st    <<R,KC1K1K PS T T T T T (T T T Q Q r"   c                >    t          |            t          |           S )zCheck whether `ser` is a pandas Series without importing pandas.

    Warning:
        This method cannot be called on Narwhals Series.
    )ri   r   rf   s    r#   is_pandas_seriesr            S!!!S!!!r"   indexTypeIs[pd.Index[Any]]c                     t                      x}durt           |j                  p t           fdt          D                       S )zACheck whether `index` is a pandas Index without importing pandas.Nc              3     K   | ]B}t           j                            |d           xd uot          j        j                  V  Cd S rn   )r   r   r    ro   r'   Index)rp   rq   r   rr   s     r#   rs   z"is_pandas_index.<locals>.<genexpr>   sr       U U  T22	24? 	0ucj.//U U U U U Ur"   )r(   ro   r   rt   ru   )r   rv   rr   s   ` @r#   is_pandas_indexr      st    <<R,LE281L1L QT U U U U U (U U U R R r"   TypeIs[mpd.DataFrame]c                P    t                      x}duot          | |j                  S )z@Check whether `df` is a modin DataFrame without importing modin.N)r*   ro   r	   )rj   mpds     r#   _is_modin_dataframer      s'    ;;Ct+M
2s}0M0MMr"   c                >    t          |            t          |           S )zCheck whether `df` is a modin DataFrame without importing modin.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    )re   r   ry   s    r#   is_modin_dataframer            r"""r"""r"   TypeIs[mpd.Series]c                P    t                      x}duot          | |j                  S )z>Check whether `ser` is a modin Series without importing modin.N)r*   ro   r   )rf   r   s     r#   _is_modin_seriesr      s'    ;;Ct+K
3
0K0KKr"   c                >    t          |            t          |           S )zCheck whether `ser` is a modin Series without importing modin.

    Warning:
        This method cannot be called on Narwhals Series.
    )ri   r   r   s    r#   is_modin_seriesr      s      S!!!C   r"   TypeIs[mpd.Index[Any]]c                P    t                      x}duot          | |j                  S )z?Check whether `index` is a modin Index without importing modin.N)r*   ro   r   )r   r   s     r#   is_modin_indexr      s'    ;;Ct+L
5#)0L0LLr"   TypeIs[cudf.DataFrame]c                P    t                      x}duot          | |j                  S )z>Check whether `df` is a cudf DataFrame without importing cudf.N)r-   ro   r	   )rj   r,   s     r#   _is_cudf_dataframer      s'    JJDt+N
2t~0N0NNr"   c                >    t          |            t          |           S )zCheck whether `df` is a cudf DataFrame without importing cudf.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    )re   r   ry   s    r#   is_cudf_dataframer            r"""b!!!r"   TypeIs[cudf.Series[Any]]c                P    t                      x}duot          | |j                  S )z<Check whether `ser` is a cudf Series without importing cudf.N)r-   ro   r   )rf   r,   s     r#   _is_cudf_seriesr      s'    JJDt+L
30L0LLr"   c                >    t          |            t          |           S )zCheck whether `ser` is a cudf Series without importing cudf.

    Warning:
        This method cannot be called on Narwhals Series.
    )ri   r   r   s    r#   is_cudf_seriesr     s      S!!!3r"   TypeIs[cudf.Index]c                P    t                      x}duot          | |j                  S )z=Check whether `index` is a cudf Index without importing cudf.N)r-   ro   r   )r   r,   s     r#   is_cudf_indexr     s0    JJDt+ 
tz1 1 r"   objboolc                f    t                      x}d uot          | |j                  o
| j        dk    S )NrX   )r1   ro   ndarraysize)r   r0   s     r#   is_cupy_scalarr     s:    	D( 	sDL))	HMr"   TypeIs[dd.DataFrame]c                P    t                      x}duot          | |j                  S )z>Check whether `df` is a Dask DataFrame without importing Dask.N)r=   ro   r	   )rj   rG   s     r#   _is_dask_dataframer     s)    $&&&Bt3T
2r|8T8TTr"   c                >    t          |            t          |           S )zCheck whether `df` is a Dask DataFrame without importing Dask.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    )re   r   ry   s    r#   is_dask_dataframer   !  r   r"   TypeIs[duckdb.DuckDBPyRelation]c                P    t                      x}duot          | |j                  S )zACheck whether `df` is a DuckDB Relation without importing DuckDB.N)r@   ro   DuckDBPyRelation)rj   r?   s     r#   _is_duckdb_relationr   +  s1     ll"F4/ J
F#5 5 r"   c                >    t          |            t          |           S )zCheck whether `df` is a DuckDB Relation without importing DuckDB.

    Warning:
        This method cannot be called on Narwhals DataFrame/LazyFrame.
    )re   r   ry   s    r#   is_duckdb_relationr   2  r   r"   TypeIs[ibis.Table]c                d    t                      x}duot          | |j        j        j                  S )z:Check whether `df` is a Ibis Table without importing Ibis.N)rC   ro   exprtypesTable)rj   rB   s     r#   _is_ibis_tabler   <  s,    JJDt+U
2ty?T0U0UUr"   c                >    t          |            t          |           S )zCheck whether `df` is a Ibis Table without importing Ibis.

    Warning:
        This method cannot be called on Narwhals DataFrame/LazyFrame.
    )re   r   ry   s    r#   is_ibis_tabler   A  s      r""""r"   TypeIs[pl.DataFrame]c                P    t                      x}duot          | |j                  S )zBCheck whether `df` is a Polars DataFrame without importing Polars.N)r$   ro   r	   rj   pls     r#   _is_polars_dataframer   K  '    ,,Bt+L
2r|0L0LLr"   c                >    t          |            t          |           S )zCheck whether `df` is a Polars DataFrame without importing Polars.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    )re   r   ry   s    r#   is_polars_dataframer   P  r{   r"   TypeIs[pl.LazyFrame]c                P    t                      x}duot          | |j                  S )zBCheck whether `df` is a Polars LazyFrame without importing Polars.N)r$   ro   r   r   s     r#   _is_polars_lazyframer   Z  r   r"   c                >    t          |            t          |           S )zCheck whether `df` is a Polars LazyFrame without importing Polars.

    Warning:
        This method cannot be called on Narwhals DataFrame/LazyFrame.
    )re   r   ry   s    r#   is_polars_lazyframer   _  r{   r"   TypeIs[pl.Series]c                P    t                      x}duot          | |j                  S )z@Check whether `ser` is a Polars Series without importing Polars.N)r$   ro   r   )rf   r   s     r#   _is_polars_seriesr   i  s'    ,,Bt+J
3	0J0JJr"   c                >    t          |            t          |           S )zCheck whether `ser` is a Polars Series without importing Polars.

    Warning:
        This method cannot be called on Narwhals Series.
    )ri   r   r   s    r#   is_polars_seriesr   n  r   r"   TypeIs[pl.Schema]c                    t          t                      x}          o$t          |d          ot          | |j                  S )NSchema)r   r$   rF   ro   r   r   r   s     r#   is_polars_schemar   x  s;    :<<R  YWR%:%:Yz#ry?Y?Yr"   TypeIs[pl.DataType]c                f    t          t                      x}          ot          | |j                  S rn   )r   r$   ro   DataTyper   s     r#   is_polars_data_typer     s*    jll"##D
3(D(DDr"   TypeIs[pa.ChunkedArray[Any]]c                P    t                      x}duot          | |j                  S )zHCheck whether `ser` is a PyArrow ChunkedArray without importing PyArrow.N)r4   ro   ChunkedArray)rf   pas     r#   _is_pyarrow_chunked_arrayr     s'    --B,QC1Q1QQr"   c                >    t          |            t          |           S )zCheck whether `ser` is a PyArrow ChunkedArray without importing PyArrow.

    Warning:
        This method cannot be called on Narwhals Series.
    )ri   r   r   s    r#   is_pyarrow_chunked_arrayr     s      S!!!$S)))r"   TypeIs[pa.Table]c                P    t                      x}duot          | |j                  S )z@Check whether `df` is a PyArrow Table without importing PyArrow.N)r4   ro   r   )rj   r   s     r#   _is_pyarrow_tabler     s'    --B,IB1I1IIr"   c                >    t          |            t          |           S )zCheck whether `df` is a PyArrow Table without importing PyArrow.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    )re   r   ry   s    r#   is_pyarrow_tabler     s      r"""R   r"   TypeIs[pa.Scalar[Any]]c                P    t                      x}d uot          | |j                  S rn   )r4   ro   Scalarr   r   s     r#   is_pyarrow_scalarr     s'    --B,KC1K1KKr"   TypeIs[pa.Schema]c                f    t          t                      x}          ot          | |j                  S rn   )r   r4   ro   r   r   s     r#   is_pyarrow_schemar     s*    kmm#$$CC)C)CCr"   TypeIs[pa.DataType]c                f    t          t                      x}          ot          | |j                  S rn   )r   r4   ro   r   r   s     r#   is_pyarrow_data_typer     s*    kmm#$$EC)E)EEr"   TypeIs[pyspark_sql.DataFrame]c                j    t          t                      x}duot          | |j                            S )zDCheck whether `df` is a PySpark DataFrame without importing PySpark.N)r   rM   ro   r	   )rj   pyspark_sqls     r#   _is_pyspark_dataframer     s<    '))	)$6 	2r;011  r"   c                >    t          |            t          |           S )zCheck whether `df` is a PySpark DataFrame without importing PySpark.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    )re   r   ry   s    r#   is_pyspark_dataframer     s      r""" $$$r"   TypeIs[PySparkConnectDataFrame]c                t    t                      )	 ddlm} n# t          $ r Y dS w xY wt	          | |          S dS )zLCheck whether `df` is a PySpark Connect DataFrame without importing PySpark.Nr   r   F)rO   pyspark.sql.connect.dataframer	   ImportErrorro   rj   r	   s     r#   _is_pyspark_connect_dataframer     s_    (	??????? 	 	 	55	"i(((5s    
%%c                >    t          |            t          |           S )zCheck whether `df` is a PySpark Connect DataFrame without importing PySpark.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    )re   r   ry   s    r#   is_pyspark_connect_dataframer     s      r"""(,,,r"   TypeIs[SQLFrameDataFrame]c                N    t                      ddlm} t          | |          S dS )zFCheck whether `df` is a SQLFrame DataFrame without importing SQLFrame.Nr   )BaseDataFrameF)rR   sqlframe.base.dataframer  ro   )rj   r  s     r#   _is_sqlframe_dataframer    s3    ~~!999999"m,,,5r"   c                >    t          |            t          |           S )zCheck whether `df` is a SQLFrame DataFrame without importing SQLFrame.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    )re   r  ry   s    r#   is_sqlframe_dataframer    s      r"""!"%%%r"   arrAny | _NDArray[_ShapeT]TypeIs[_NDArray[_ShapeT]]c                P    t                      x}duot          | |j                  S )z=Check whether `arr` is a NumPy Array without importing NumPy.N)r8   ro   r   r  nps     r#   is_numpy_arrayr    s'    ++Bd*Jz#rz/J/JJr"   TypeIs[_1DArray]c                6    t          |           o
| j        dk    S )z@Check whether `arr` is a 1D NumPy Array without importing NumPy.rX   r  ndimr  s    r#   is_numpy_array_1dr        #038q=0r"   TypeIs[_1DArrayInt]c                    t                      x}o.t          |           o|                    | j        |j                  S rn   )r8   r  
issubdtypedtypeintegerr  s     r#   is_numpy_array_1d_intr    s=    {{	 	1c""	1MM#)RZ00r"   c                    t                      x}o.t          |           o|                    | j        |j                  S rn   )r8   r  r  r  bool_r  s     r#   is_numpy_array_1d_boolr    s=    {{	 	/c""	/MM#)RX..r"   TypeIs[_2DArray]c                6    t          |           o
| j        dk    S )z@Check whether `arr` is a 2D NumPy Array without importing NumPy.   r  r  s    r#   is_numpy_array_2dr!    r  r"   scalarTypeGuard[_NumpyScalar]c                P    t                      x}duot          | |j                  S )zACheck whether `scalar` is a NumPy Scalar without importing NumPy.N)r8   ro   generic)r"  r  s     r#   is_numpy_scalarr&    s)    
 ++Bd*Mz&"*/M/MMr"   c                \    t          |           pt          |           pt          |           S )zCheck whether `df` is a pandas-like DataFrame without doing any imports.

    By "pandas-like", we mean: pandas, Modin, cuDF.
    )rw   r   r   ry   s    r#   _is_pandas_like_dataframer(    s/    
  ##X':2'>'>XBTUWBXBXXr"   c                >    t          |            t          |           S )zCheck whether `df` is a pandas-like DataFrame without doing any imports.

    By "pandas-like", we mean: pandas, Modin, cuDF.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    )re   r(  ry   s    r#   is_pandas_like_dataframer*    s      r"""$R(((r"   c                \    t          |           pt          |           pt          |           S )zCheck whether `ser` is a pandas-like Series without doing any imports.

    By "pandas-like", we mean: pandas, Modin, cuDF.
    )r   r   r   r   s    r#   _is_pandas_like_seriesr,  "  s-    
 S!!R%5c%:%:Roc>R>RRr"   c                >    t          |            t          |           S )zCheck whether `ser` is a pandas-like Series without doing any imports.

    By "pandas-like", we mean: pandas, Modin, cuDF.

    Warning:
        This method cannot be called on Narwhals Series.
    )ri   r,  r   s    r#   is_pandas_like_seriesr.  *  s      S!!!!#&&&r"   c                \    t          |           pt          |           pt          |           S )zCheck whether `index` is a pandas-like Index without doing any imports.

    By "pandas-like", we mean: pandas, Modin, cuDF.
    )r   r   r   )r   s    r#   is_pandas_like_indexr0  6  s.     	O."7"7O=;O;Or"   TypeIs[PandasLikeDType]c                    t          t                      x}          o1t          | |j        j        j        t                      j        f          S rn   )r   r(   ro   api
extensionsExtensionDtyper8   r  r   rv   s     r#   is_pandas_like_dtyper7  @  sE    jll"## 
bf.	0AB) ) r"   (TypeIs[pd.api.extensions.ExtensionDtype]c                    t          t                      x}          o.t          | |j        j        j                  ot          | d          S )Nto_arrow)r   r(   ro   r3  r4  r5  rF   r6  s     r#   is_cudf_dtyper;  F  sI     	:<<R   	%sRV.=??	%C$$r"   Any | IntoSeriesTTypeIs[IntoSeriesT]c                    ddl m}  || d          p,t          |           pt          |           pt	          |           S )Nr   _hasattr_static__narwhals_series__)r^   r@  r   r   r,  r   r@  s     r#   _is_native_seriesrC  P  s]    ////// 	233 	'S!!	'$S))	' "#&&	r"   Any | IntoDataFrameTTypeIs[IntoDataFrameT]c                    ddl m}  || d          p,t          |           pt          |           pt	          |           S )Nr   r?  __narwhals_dataframe__)r^   r@  r   r   r(  rB  s     r#   _is_native_dataframerH  [  s]    ////// 	566 	*$$	*S!!	* %S))	r"   Any | IntoLazyFrameTTypeIs[IntoLazyFrameT]c                    ddl m}  || d          pht          |           pYt          |           pJt	          |           p;t          |           p,t          |           pt          |           pt          |           S )Nr   r?  __narwhals_lazyframe__)	r^   r@  r   r   r   r   r   r   r  rB  s     r#   _is_native_lazyframerM  f  s    ////// 	566 	'$$	'c""	' s##	' #		'
 !%%	' )--	' "#&&	r"   native_seriesc                L    ddl m} t          | |          pt          |           S )aM  Check whether `native_series` can be converted to a Narwhals Series.

    Arguments:
        native_series: The object to check.

    Examples:
        >>> import pandas as pd
        >>> import polars as pl
        >>> import numpy as np
        >>> import narwhals as nw

        >>> s_pd = pd.Series([1, 2, 3])
        >>> s_pl = pl.Series([1, 2, 3])
        >>> np_arr = np.array([1, 2, 3])

        >>> nw.dependencies.is_into_series(s_pd)
        True
        >>> nw.dependencies.is_into_series(s_pl)
        True
        >>> nw.dependencies.is_into_series(np_arr)
        False
    r   r   )narwhals.seriesr   ro   rC  )rN  r   s     r#   is_into_seriesrQ  u  s4    . '&&&&&mV,,P0A-0P0PPr"   native_dataframec                L    ddl m} t          | |          pt          |           S )a  Check whether `native_dataframe` can be converted to a Narwhals DataFrame.

    Arguments:
        native_dataframe: The object to check.

    Examples:
        >>> import pandas as pd
        >>> import polars as pl
        >>> import numpy as np
        >>> from narwhals.dependencies import is_into_dataframe

        >>> df_pd = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
        >>> df_pl = pl.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
        >>> np_arr = np.array([[1, 4], [2, 5], [3, 6]])

        >>> is_into_dataframe(df_pd)
        True
        >>> is_into_dataframe(df_pl)
        True
        >>> is_into_dataframe(np_arr)
        False
    r   r   )narwhals.dataframer	   ro   rH  )rR  r	   s     r#   is_into_dataframerU    >    . -,,,,,&	22 6J7 7 r"   native_lazyframec                L    ddl m} t          | |          pt          |           S )a  Check whether `native_lazyframe` can be converted to a Narwhals LazyFrame.

    Arguments:
        native_lazyframe: The object to check.

    Examples:
        >>> import pandas as pd
        >>> import polars as pl
        >>> import numpy as np
        >>> from narwhals.dependencies import is_into_lazyframe

        >>> df_pd = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
        >>> lf_pl = pl.LazyFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
        >>> np_arr = np.array([[1, 4], [2, 5], [3, 6]])

        >>> is_into_lazyframe(df_pd)
        False
        >>> is_into_lazyframe(lf_pl)
        True
        >>> is_into_lazyframe(np_arr)
        False
    r   r   )rT  r   ro   rM  )rW  r   s     r#   is_into_lazyframerZ    rV  r"   DataFrame[IntoDataFrameT] | Any!TypeIs[DataFrame[IntoDataFrameT]]c                .    ddl m} t          | |          S )zCheck whether `df` is a Narwhals DataFrame.

    This is useful if you expect a user to pass in a Narwhals
    DataFrame directly, and you want to catch both `narwhals.DataFrame`
    and `narwhals.stable.v1.DataFrame`.
    r   r   )rT  r	   ro   r   s     r#   r\   r\     &     -,,,,,b)$$$r"   lfAny | LazyFrame[IntoLazyFrameT]!TypeIs[LazyFrame[IntoLazyFrameT]]c                .    ddl m} t          | |          S )zCheck whether `lf` is a Narwhals LazyFrame.

    This is useful if you expect a user to pass in a Narwhals
    LazyFrame directly, and you want to catch both `narwhals.LazyFrame`
    and `narwhals.stable.v1.LazyFrame`.
    r   rY  )rT  r   ro   )r_  r   s     r#   r]   r]     r^  r"   Any | Series[IntoSeriesT]TypeIs[Series[IntoSeriesT]]c                .    ddl m} t          | |          S )zCheck whether `ser` is a Narwhals Series.

    This is useful if you expect a user to pass in a Narwhals
    Series directly, and you want to catch both `narwhals.Series`
    and `narwhals.stable.v1.Series`.
    r   r   )rP  r   ro   )rf   r   s     r#   rh   rh     s&     '&&&&&c6"""r"   c                R    t          |           o| j                                        S rn   )rh   r  
is_integerr   s    r#   is_narwhals_series_intrh    s#    c""=sy';';'='==r"   c                R    t          |           o| j                                        S rn   )rh   r  
is_booleanr   s    r#   is_narwhals_series_boolrk    s%     c""=sy';';'='==r"   ),r-   r;   r=   r@   rC   r*   r8   r(   r$   r4   rK   rO   rM   rR   r   r   r   r   r   r   rU  rZ  rQ  r   r   r   r\   r]   rh   r  rz   r   r*  r0  r.  r   r   r   r   r   r   r   r   r  )r   r   )rS   r   r   rT   )rf   r   r   rT   )rj   r   r   rk   )rf   r   r   r|   )r   r   r   r   )rj   r   r   r   )rf   r   r   r   )r   r   r   r   )rj   r   r   r   )rf   r   r   r   )r   r   r   r   )r   r   r   r   )rj   r   r   r   )rj   r   r   r   )rj   r   r   r   )rj   r   r   r   )rj   r   r   r   )rf   r   r   r   )r   r   r   r   )r   r   r   r   )rf   r   r   r   )rj   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )rj   r   r   r   )rj   r   r   r   )rj   r   r   r   )r  r  r   r	  )r  r   r   r  )r  r   r   r  )r  r   r   r  )r"  r   r   r#  )rj   r   r   r   )rf   r   r   r   )r   r   r   r   )r   r   r   r1  )r   r   r   r8  )r   r<  r   r=  )r   rD  r   rE  )r   rI  r   rJ  )rN  r<  r   r=  )rR  rD  r   rE  )rW  rI  r   rJ  )rj   r[  r   r\  )r_  r`  r   ra  )rf   rc  r   rd  )
__future__r   r   typingr   r   narwhals._exceptionsr   r   r,   dask.dataframe	dataframerG   r?   rB   modin.pandasr'   r   rv   r   r   r3   r   pyspark.sqlsqlr   r   r	   PySparkConnectDataFrametyping_extensionsr
   narwhals._spark_like.dataframer   rT  r   rP  r   narwhals.typingr   r   r   r   r   r   r   r   r   r   	frozensetru   r$   r(   r*   r-   r1   r4   r8   r;   r=   r@   rC   rH   rK   rM   rO   rR   re   ri   rw   rz   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   r   r   r  r  r  r  r  r  r!  r&  r(  r*  r,  r.  r0  r7  r;  rC  rH  rM  rQ  rU  rZ  r\   r]   rh   rh  rk  __all__r!   r"   r#   <module>rz     s   # " " " " " 



 % % % % % % % % . . . . . .       KKKMMMKKK%%%%%%RRRRRR((((((@@@@@@77777777&&&&&&                       " y+''+ + + +
+ + + +
1 1 1 1
) ) ) )
) ) ) )
, , , ,
* * * *
) ) ) )
3 3 3 3
+ + + +
) ) ) )
. . . ., , , ,
0 0 0 0
8 8 8 8
- - - -

( 
( 
( 
(
( 
( 
( 
(   $ $ $ $   " " " "   N N N N
# # # #L L L L
! ! ! !M M M M
O O O O
" " " "M M M M
             U U U U
" " " "   # # # #V V V V
   M M M M
$ $ $ $M M M M
$ $ $ $K K K K
" " " "   E E E ER R R R
* * * *J J J J
! ! ! !L L L LD D D DF F F F   % % % %   - - - -   & & & &K K K K
1 1 1 1
      1 1 1 1
N N N NY Y Y Y	) 	) 	) 	)S S S S	' 	' 	' 	'                  Q Q Q Q8   <   <% % % %% % % %	# 	# 	# 	#> > > >> > > >- - -r"   