
    WhM                       d dl mZ d dlZd dlmZmZ d dlmZ erdd 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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      Z1dIdZ2dIdZ3dIdZ4dIdZ5dIdZ6dIdZ7dIdZ8dIdZ9dIdZ:dIdZ;dIdZ<dIdZ=dIdZ>dIdZ?dIdZ@dIdZAdJdZBdKdZCdLdZDdMdZEdNd ZFdOd!ZGdPd"ZHdQd#ZIdRd$ZJdSd%ZKdTd&ZLdUd'ZMdVd(ZNdWd)ZOdXd*ZPdYd+ZQdZd,ZRd[d-ZSd\d.ZTd]d/ZUd^d0ZVd_d1ZWd`d2ZXdad3ZYdbd4ZZdcd5Z[ddd6Z\ded7Z]dfd8Z^dgd9Z_dhd:Z`did;Zadjd<Zbdkd=Zcdld>Zddmd?Zednd@Zf	 	 	 	 dodAZgdpdBZhdqdCZi	 	 	 	 drdDZj	 	 	 	 dsdEZkdtdFZldtdGZmg dHZny)u    )annotationsN)TYPE_CHECKINGAny)issue_warning	DataFrame)	TypeGuardTypeIs)SQLFrameDataFrame)r   	LazyFrameSeries)
IntoDataFrameTIntoLazyFrameTIntoSeriesTPandasLikeDType_1DArray_1DArrayInt_2DArray_NDArray_NumpyScalar_ShapeT	fireducksc                 B    t         j                  j                  dd      S )z;Get Polars module (if already imported - else return None).polarsNsysmodulesget     O/var/www/html/jupyter_env/lib/python3.12/site-packages/narwhals/dependencies.py
get_polarsr#   /       ;;??8T**r!   c                 B    t         j                  j                  dd      S )z;Get pandas module (if already imported - else return None).pandasNr   r    r!   r"   
get_pandasr'   4   r$   r!   c                 `    t         j                  j                  dd      x} | j                  S y)zAGet modin.pandas module (if already imported - else return None).modinN)r   r   r   r&   )r)   s    r"   	get_modinr*   9   s)    $//<||r!   c                 B    t         j                  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                  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                  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                  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                  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                  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2r!   c                 B    t         j                  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                  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                  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   s8     ""/GB4L||;;??;--r!   c                 B    t         j                  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                  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                  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7r!   c                 B    t         j                  j                  dd      S )z=Get sqlframe module (if already imported - else return None).sqlframeNr   r    r!   r"   get_sqlframerR   ~   s    ;;??:t,,r!   c                p    t        |       st        |       r dt        |        d}t        |t               y y )NYou passed a `z` to `is_pandas_dataframe`.

Hint: Instead of e.g. `is_pandas_dataframe(df)`, did you mean `is_pandas_dataframe(df.to_native())`?)is_narwhals_dataframeis_narwhals_lazyframetyper   UserWarning)dfmsgs     r"   _warn_if_narwhals_df_or_lfr[      s?    R $9"$=T"XJ 'B B 	
 	c;' %>r!   c                Z    t        |       r dt        |        d}t        |t               y y )NrT   zz` to `is_pandas_series`.

Hint: Instead of e.g. `is_pandas_series(ser)`, did you mean `is_pandas_series(ser.to_native())`?)is_narwhals_seriesrW   r   rX   )serrZ   s     r"   _warn_if_narwhals_seriesr_      s7    #T#YK (@ @ 	
 	c;' r!   c                     t                t               x}duxr t         |j                        xs t	         fdt
        D              S )zCheck whether `df` is a pandas DataFrame without importing pandas.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    Nc              3     K   | ]J  }t         j                  j                  |d       xd uxr  t        j                  j
                         L y wN)r   r   r   
isinstancer&   r   ).0module_namerY   mods     r"   	<genexpr>z&is_pandas_dataframe.<locals>.<genexpr>   sT      V  T2	24? 	1r3:://0	1V   AA)r[   r'   rc   r   anyIMPORT_HOOKS)rY   pdrf   s   ` @r"   is_pandas_dataframerl      sP     r"<R,MB1M RU V (V S r!   c                     t                t               x}duxr t         |j                        xs t	         fdt
        D              S )zCheck whether `ser` is a pandas Series without importing pandas.

    Warning:
        This method cannot be called on Narwhals Series.
    Nc              3     K   | ]J  }t         j                  j                  |d       xd uxr  t        j                  j
                         L y wrb   )r   r   r   rc   r&   r   )rd   re   rf   r^   s     r"   rg   z#is_pandas_series.<locals>.<genexpr>   sT      T  T2	24? 	/sCJJ--.	/Trh   )r_   r'   rc   r   ri   rj   )r^   rk   rf   s   ` @r"   is_pandas_seriesro      sP     S!<R,KC1K PS T (T Q r!   c                     t               x}duxr t         |j                        xs t         fdt        D              S )zACheck whether `index` is a pandas Index without importing pandas.Nc              3     K   | ]J  }t         j                  j                  |d       xd uxr  t        j                  j
                         L y wrb   )r   r   r   rc   r&   Index)rd   re   indexrf   s     r"   rg   z"is_pandas_index.<locals>.<genexpr>   sT      U  T2	24? 	0ucjj../	0Urh   )r'   rc   rr   ri   rj   )rs   rk   rf   s   ` @r"   is_pandas_indexrt      sF    <R,LE2881L QT U (U R r!   c                d    t        |        t               x}duxr t        | |j                        S )zCheck whether `df` is a modin DataFrame without importing modin.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    N)r[   r*   rc   r   )rY   mpds     r"   is_modin_dataframerw      s.     r";Ct+M
2s}}0MMr!   c                d    t        |        t               x}duxr t        | |j                        S )zCheck whether `ser` is a modin Series without importing modin.

    Warning:
        This method cannot be called on Narwhals Series.
    N)r_   r*   rc   r   )r^   rv   s     r"   is_modin_seriesry      s.     S!;Ct+K
3

0KKr!   c                N    t               x}duxr t        | |j                        S )z?Check whether `index` is a modin Index without importing modin.N)r*   rc   rr   )rs   rv   s     r"   is_modin_indexr{      s$    ;Ct+L
5#))0LLr!   c                d    t        |        t               x}duxr t        | |j                        S )zCheck whether `df` is a cudf DataFrame without importing cudf.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    N)r[   r-   rc   r   )rY   r,   s     r"   is_cudf_dataframer}      s.     r"JDt+N
2t~~0NNr!   c                d    t        |        t               x}duxr t        | |j                        S )zCheck whether `ser` is a cudf Series without importing cudf.

    Warning:
        This method cannot be called on Narwhals Series.
    N)r_   r-   rc   r   )r^   r,   s     r"   is_cudf_seriesr      s.     S!JDt+L
30LLr!   c                N    t               x}duxr t        | |j                        S )z=Check whether `index` is a cudf Index without importing cudf.N)r-   rc   rr   )rs   r,   s     r"   is_cudf_indexr      s+    JDt+ 
tzz1 r!   c                p    t               x}d uxr' t        | |j                        xr | j                  dk(  S )N   )r1   rc   ndarraysize)objr0   s     r"   is_cupy_scalarr      s9    	D( 	sDLL)	HHMr!   c                d    t        |        t               x}duxr t        | |j                        S )zCheck whether `df` is a Dask DataFrame without importing Dask.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    N)r[   r=   rc   r   )rY   rG   s     r"   is_dask_dataframer      s/     r"$&&Bt3T
2r||8TTr!   c                d    t        |        t               x}duxr t        | |j                        S )zCheck whether `df` is a DuckDB Relation without importing DuckDB.

    Warning:
        This method cannot be called on Narwhals DataFrame/LazyFrame.
    N)r[   r@   rc   DuckDBPyRelation)rY   r?   s     r"   is_duckdb_relationr     s7     r" l"F4/ J
F##5 r!   c                    t        |        t               x}duxr* t        | |j                  j                  j
                        S )zCheck whether `df` is a Ibis Table without importing Ibis.

    Warning:
        This method cannot be called on Narwhals DataFrame/LazyFrame.
    N)r[   rC   rc   exprtypesTable)rY   rB   s     r"   is_ibis_tabler     s8     r"JDt+U
2tyy?T?T0UUr!   c                d    t        |        t               x}duxr t        | |j                        S )zCheck whether `df` is a Polars DataFrame without importing Polars.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    N)r[   r#   rc   r   rY   pls     r"   is_polars_dataframer     .     r",Bt+L
2r||0LLr!   c                d    t        |        t               x}duxr t        | |j                        S )zCheck whether `df` is a Polars LazyFrame without importing Polars.

    Warning:
        This method cannot be called on Narwhals DataFrame/LazyFrame.
    N)r[   r#   rc   r   r   s     r"   is_polars_lazyframer   "  r   r!   c                d    t        |        t               x}duxr t        | |j                        S )zCheck whether `ser` is a Polars Series without importing Polars.

    Warning:
        This method cannot be called on Narwhals Series.
    N)r_   r#   rc   r   )r^   r   s     r"   is_polars_seriesr   ,  s.     S!,Bt+J
3		0JJr!   c                x    t        t               x}      xr$ t        |d      xr t        | |j                        S )NSchema)boolr#   rF   rc   r   r   r   s     r"   is_polars_schemar   6  s2    :<R YWR%:Yz#ryy?Yr!   c                \    t        t               x}      xr t        | |j                        S rb   )r   r#   rc   DataTyper   s     r"   is_polars_data_typer   =  s$    jl"#D
3(DDr!   c                d    t        |        t               x}duxr t        | |j                        S )zCheck whether `ser` is a PyArrow ChunkedArray without importing PyArrow.

    Warning:
        This method cannot be called on Narwhals Series.
    N)r_   r4   rc   ChunkedArray)r^   pas     r"   is_pyarrow_chunked_arrayr   A  s.     S!-B,QC1QQr!   c                d    t        |        t               x}duxr t        | |j                        S )zCheck whether `df` is a PyArrow Table without importing PyArrow.

    Warning:
        This method cannot be called on Narwhals DataFrame/LazyFrame.
    N)r[   r4   rc   r   )rY   r   s     r"   is_pyarrow_tabler   K  s.     r"-B,IB1IIr!   c                N    t               x}d uxr t        | |j                        S rb   )r4   rc   Scalarr   r   s     r"   is_pyarrow_scalarr   U  s$    -B,KC1KKr!   c                \    t        t               x}      xr t        | |j                        S rb   )r   r4   rc   r   r   s     r"   is_pyarrow_schemar   Y  s$    km#$CC)CCr!   c                \    t        t               x}      xr t        | |j                        S rb   )r   r4   rc   r   r   s     r"   is_pyarrow_data_typer   ]  s$    km#$EC)EEr!   c                v    t        |        t        t               x}duxr t        | |j                              S )zCheck whether `df` is a PySpark DataFrame without importing PySpark.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    N)r[   r   rM   rc   r   )rY   pyspark_sqls     r"   is_pyspark_dataframer   a  s>     r"')	)$6 	2r;001 r!   c                r    t        |        t               	 ddlm} t        | |      S y# t        $ r Y yw xY w)zCheck whether `df` is a PySpark Connect DataFrame without importing PySpark.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    r   r   F)r[   rO   pyspark.sql.connect.dataframer   ImportErrorrc   rY   r   s     r"   is_pyspark_connect_dataframer   n  sC     r"(	? "i((  		s   * 	66c                R    t        |        t               ddlm} t	        | |      S y)zCheck whether `df` is a SQLFrame DataFrame without importing SQLFrame.

    Warning:
        This method cannot be called on a Narwhals DataFrame/LazyFrame.
    r   )BaseDataFrameF)r[   rR   sqlframe.base.dataframer   rc   )rY   r   s     r"   is_sqlframe_dataframer   ~  s'     r"~!9"m,,r!   c                N    t               x}duxr t        | |j                        S )z=Check whether `arr` is a NumPy Array without importing NumPy.N)r8   rc   r   arrnps     r"   is_numpy_arrayr     s$    +Bd*Jz#rzz/JJr!   c                :    t        |       xr | j                  dk(  S )z@Check whether `arr` is a 1D NumPy Array without importing NumPy.r   r   ndimr   s    r"   is_numpy_array_1dr         #0388q=0r!   c                    t               x}xr3 t        |       xr& |j                  | j                  |j                        S rb   )r8   r   
issubdtypedtypeintegerr   s     r"   is_numpy_array_1d_intr     s9    {	 	1c"	1MM#))RZZ0r!   c                :    t        |       xr | 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!   c                N    t               x}duxr t        | |j                        S )zACheck whether `scalar` is a NumPy Scalar without importing NumPy.N)r8   rc   generic)scalarr   s     r"   is_numpy_scalarr     s&    
 +Bd*Mz&"**/MMr!   c                b    t        |        t        |       xs t        |       xs 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.
    )r[   rl   rw   r}   )rY   s    r"   is_pandas_like_dataframer     s.     r"r"U&8&<U@QRT@UUr!   c                b    t        |        t        |       xs t        |       xs 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.
    )r_   ro   ry   r   r^   s    r"   is_pandas_like_seriesr     s+     S!C OOC$8ON3<OOr!   c                L    t        |       xs t        |       xs t        |       S )zCheck whether `index` is a pandas-like Index without doing any imports.

    By "pandas-like", we mean: pandas, Modin, cuDF.
    )rt   r{   r   )rs   s    r"   is_pandas_like_indexr     s%     	O."7O=;Or!   c                    t        t               x}      xr> t        | |j                  j                  j
                  t               j                  f      S rb   )r   r'   rc   api
extensionsExtensionDtyper8   r   r   rk   s     r"   is_pandas_like_dtyper     sD    jl"# 
bff..	0A0AB) r!   c                    t        t               x}      xr8 t        | |j                  j                  j
                        xr t        | d      S )Nto_arrow)r   r'   rc   r   r   r   rF   r   s     r"   is_cudf_dtyper     sF     	:<R  	%sRVV..==?	%C$r!   c                    ddl m} t        | |      xs3 t        | d      xs% t	        |       xs t        |       xs t        |       S )a  Check whether `native_series` can be converted to a Narwhals Series.

    Arguments:
        native_series: The object to check.

    Returns:
        `True` if `native_series` can be converted to a Narwhals Series, `False` otherwise.

    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_series__)narwhals.seriesr   rc   rF   r   r   r   )native_seriesr   s     r"   is_into_seriesr     sS    4 ' 	=&) 	0="78	0M*	0 $M2	0 !/r!   c                    ddl m} t        | |      xs3 t        | d      xs% t	        |       xs t        |       xs t        |       S )a  Check whether `native_dataframe` can be converted to a Narwhals DataFrame.

    Arguments:
        native_dataframe: The object to check.

    Returns:
        `True` if `native_dataframe` can be converted to a Narwhals DataFrame, `False` otherwise.

    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_dataframe__)narwhals.dataframer   rc   rF   r   r   r   )native_dataframer   s     r"   is_into_dataframer     sX    4 - 	#Y/ 	6#%=>	6/0	6 ,-	6 $$45r!   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   )r   r   rc   r   s     r"   rU   rU   '       -b)$$r!   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   )r   )r   r   rc   )lfr   s     r"   rV   rV   5  r   r!   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   )r   r   rc   )r^   r   s     r"   r]   r]   C  s     'c6""r!   c                P    t        |       xr | j                  j                         S rb   )r]   r   
is_integerr   s    r"   is_narwhals_series_intr   O  s    c"=syy';';'==r!   )r-   rC   r*   r8   r'   r#   r4   r}   r   r   r   r   r   rw   ry   rU   rV   r]   r   rl   rt   r   r   ro   r   r   r   r   r   )returnr   )rY   r   r   None)r^   r   r   r   )rY   r   r   zTypeIs[pd.DataFrame])r^   r   r   zTypeIs[pd.Series[Any]])rs   r   r   zTypeIs[pd.Index[Any]])rY   r   r   zTypeIs[mpd.DataFrame])r^   r   r   zTypeIs[mpd.Series])rs   r   r   zTypeIs[mpd.Index[Any]])rY   r   r   zTypeIs[cudf.DataFrame])r^   r   r   zTypeIs[cudf.Series[Any]])rs   r   r   zTypeIs[cudf.Index])r   r   r   r   )rY   r   r   zTypeIs[dd.DataFrame])rY   r   r   zTypeIs[duckdb.DuckDBPyRelation])rY   r   r   zTypeIs[ibis.Table])rY   r   r   zTypeIs[pl.DataFrame])rY   r   r   zTypeIs[pl.LazyFrame])r^   r   r   zTypeIs[pl.Series])r   r   r   zTypeIs[pl.Schema])r   r   r   zTypeIs[pl.DataType])r^   r   r   zTypeIs[pa.ChunkedArray[Any]])rY   r   r   zTypeIs[pa.Table])r   r   r   zTypeIs[pa.Scalar[Any]])r   r   r   zTypeIs[pa.Schema])r   r   r   zTypeIs[pa.DataType])rY   r   r   zTypeIs[pyspark_sql.DataFrame])rY   r   r   zTypeIs[PySparkConnectDataFrame])rY   r   r   zTypeIs[SQLFrameDataFrame])r   zAny | _NDArray[_ShapeT]r   zTypeIs[_NDArray[_ShapeT]])r   r   r   zTypeIs[_1DArray])r   r   r   zTypeIs[_1DArrayInt])r   r   r   zTypeIs[_2DArray])r   r   r   zTypeGuard[_NumpyScalar])rY   r   r   r   )r^   r   r   r   )rs   r   r   r   )r   r   r   zTypeIs[PandasLikeDType])r   r   r   z(TypeIs[pd.api.extensions.ExtensionDtype])r   zAny | IntoSeriesTr   zTypeIs[IntoSeriesT])r   zAny | IntoDataFrameTr   zTypeIs[IntoDataFrameT])rY   zDataFrame[IntoDataFrameT] | Anyr   z!TypeIs[DataFrame[IntoDataFrameT]])r   zAny | LazyFrame[IntoLazyFrameT]r   z!TypeIs[LazyFrame[IntoLazyFrameT]])r^   zAny | Series[IntoSeriesT]r   zTypeIs[Series[IntoSeriesT]])o
__future__r   r   typingr   r   narwhals._exceptionsr   r,   dask.dataframe	dataframerG   r?   rB   modin.pandasr&   rv   rk   r   r   r3   r   pyspark.sqlsqlr   r   r   PySparkConnectDataFrametyping_extensionsr	   r
   narwhals._spark_like.dataframer   r   r   r   r   narwhals.typingr   r   r   r   r   r   r   r   r   r   	frozensetrj   r#   r'   r*   r-   r1   r4   r8   r;   r=   r@   rC   rH   rK   rM   rO   rR   r[   r_   rl   ro   rt   rw   ry   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   rU   rV   r]   r   __all__r    r!   r"   <module>r     s   # 
 % .%R3@7&  " +'+
+
)
)
,
*
)
3
+
)
.,
0
8
-
((NLM
OMU	VMMKERJLDF
 K
1
1
N	V	P	-"J"J%'%&%%'%&%	#>r!   