
    zh*<                       d dl mZ d dlZd dlmZ d dlmZ erd 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 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% 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* d dl#m+Z+ d dl#m,Z,  e-dg      Z.dHdZ/dHdZ0dHdZ1dHdZ2dHdZ3dHdZ4dHdZ5dHdZ6dHdZ7dHdZ8dHdZ9dHd Z:dHd!Z;dHd"Z<dHd#Z=dHd$Z>dId%Z?dJd&Z@dKd'ZAdLd(ZBdMd)ZCdNd*ZDdOd+ZEdPd,ZFdQd-ZGdRd.ZHdSd/ZIdTd0ZJdUd1ZKdVd2ZLdWd3ZMdXd4ZNdYd5ZOdZd6ZPd[d7ZQd\d8ZRd]d9ZSd^d:ZTd_d;ZUd`d<ZVdad=ZWdbd>ZXdcd?ZYddd@ZZdedAZ[dfdBZ\	 	 	 	 dgdCZ]dhdDZ^didEZ_didFZ`g dGZay)j    )annotationsN)TYPE_CHECKING)Any	DataFrame)	TypeGuard)TypeIs)SQLFrameDataFrame	LazyFrameSeries)FrameT)IntoDataFrameT)IntoSeriesT)_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     S/var/www/skyplay_api_hub/venv/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&   2   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)   7   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_cupyr0   C   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_pyarrowr3   H       ;;??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_numpyr7   M   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:   R   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<   W   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_ibisrB   a   r-   r    c                 B    t         j                  j                  dd      S )z>Get dask_expr module (if already imported - else return None).	dask_exprNr   r   r    r!   get_dask_exprrE   f   s    ;;??;--r    c                 B    t         j                  j                  dd      S )z<Get pyspark module (if already imported - else return None).pysparkNr   r   r    r!   get_pysparkrH   k   r4   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_sqlrJ   p   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_connectrL   u   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_sqlframerO   z   s    ;;??:t,,r    c                     t               x}duxr t         |j                        xs t         fdt        D              S )zBCheck whether `df` is a pandas DataFrame without importing pandas.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_namedfmods     r!   	<genexpr>z&is_pandas_dataframe.<locals>.<genexpr>   sT      V  T2	24? 	1r3:://0	1V   AA)r&   rS   r   anyIMPORT_HOOKS)rV   pdrW   s   ` @r!   is_pandas_dataframer]      sF    <R,MB1M RU V (V S r    c                     t               x}duxr t         |j                        xs t         fdt        D              S )z@Check whether `ser` is a pandas Series without importing pandas.Nc              3     K   | ]J  }t         j                  j                  |d       xd uxr  t        j                  j
                         L y wrR   )r   r   r   rS   r%   r   )rT   rU   rW   sers     r!   rX   z#is_pandas_series.<locals>.<genexpr>   sT      T  T2	24? 	/sCJJ--.	/TrY   )r&   rS   r   rZ   r[   )r`   r\   rW   s   ` @r!   is_pandas_seriesra      sF    <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rR   )r   r   r   rS   r%   Index)rT   rU   indexrW   s     r!   rX   z"is_pandas_index.<locals>.<genexpr>   sT      U  T2	24? 	0ucjj../	0UrY   )r&   rS   rd   rZ   r[   )re   r\   rW   s   ` @r!   is_pandas_indexrf      sF    <R,LE2881L QT U (U R r    c                N    t               x}duxr t        | |j                        S )z@Check whether `df` is a modin DataFrame without importing modin.N)r)   rS   r   )rV   mpds     r!   is_modin_dataframeri      s$    ;Ct+M
2s}}0MMr    c                N    t               x}duxr t        | |j                        S )z>Check whether `ser` is a modin Series without importing modin.N)r)   rS   r   )r`   rh   s     r!   is_modin_seriesrk      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)   rS   rd   )re   rh   s     r!   is_modin_indexrm      s+    ;Ct+ 
syy1 r    c                N    t               x}duxr t        | |j                        S )z>Check whether `df` is a cudf DataFrame without importing cudf.N)r,   rS   r   )rV   r+   s     r!   is_cudf_dataframero      s$    JDt+N
2t~~0NNr    c                N    t               x}duxr t        | |j                        S )z<Check whether `ser` is a cudf Series without importing cudf.N)r,   rS   r   )r`   r+   s     r!   is_cudf_seriesrq      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,   rS   rd   )re   r+   s     r!   is_cudf_indexrs      s+    JDt+ 
tzz1 r    c                N    t               x}duxr t        | |j                        S )z>Check whether `df` is a Dask DataFrame without importing Dask.N)r<   rS   r   )rV   dds     r!   is_dask_dataframerv      s%    $&&Bt3T
2r||8TTr    c                N    t               x}duxr t        | |j                        S )zACheck whether `df` is a DuckDB Relation without importing DuckDB.N)r?   rS   DuckDBPyRelation)rV   r>   s     r!   is_duckdb_relationry      s-     l"F4/ J
F##5 r    c                v    t               x}duxr* t        | |j                  j                  j                        S )z:Check whether `df` is a Ibis Table without importing Ibis.N)rB   rS   exprtypesTable)rV   rA   s     r!   is_ibis_tabler~      s.    JDt+U
2tyy?T?T0UUr    c                N    t               x}duxr t        | |j                        S )zBCheck whether `df` is a Polars DataFrame without importing Polars.N)r"   rS   r   rV   pls     r!   is_polars_dataframer      $    ,Bt+L
2r||0LLr    c                N    t               x}duxr t        | |j                        S )zBCheck whether `df` is a Polars LazyFrame without importing Polars.N)r"   rS   r   r   s     r!   is_polars_lazyframer      r   r    c                N    t               x}duxr t        | |j                        S )z@Check whether `ser` is a Polars Series without importing Polars.N)r"   rS   r   )r`   r   s     r!   is_polars_seriesr      s$    ,Bt+J
3		0JJr    c                N    t               x}duxr t        | |j                        S )zHCheck whether `ser` is a PyArrow ChunkedArray without importing PyArrow.N)r3   rS   ChunkedArray)r`   pas     r!   is_pyarrow_chunked_arrayr      s$    -B,QC1QQr    c                N    t               x}duxr t        | |j                        S )z@Check whether `df` is a PyArrow Table without importing PyArrow.N)r3   rS   r}   )rV   r   s     r!   is_pyarrow_tabler      s$    -B,IB1IIr    c                `    t        t               x}duxr t        | |j                              S )zDCheck whether `df` is a PySpark DataFrame without importing PySpark.N)boolrJ   rS   r   )rV   pyspark_sqls     r!   is_pyspark_dataframer      s4    ')	)$6 	2r;001 r    c                t    t        t               x}duxr  t        | |j                  j                              S )zLCheck whether `df` is a PySpark Connect DataFrame without importing PySpark.N)r   rL   rS   	dataframer   )rV   pyspark_connects     r!   is_pyspark_connect_dataframer      s;    /1	1$> 	@r?44>>? r    c                <    t               ddlm} t        | |      S y)zFCheck whether `df` is a SQLFrame DataFrame without importing SQLFrame.r   )BaseDataFrameF)rO   sqlframe.base.dataframer   rS   )rV   r   s     r!   is_sqlframe_dataframer      s    ~!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)r7   rS   ndarray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   ndimr   s    r!   is_numpy_array_1dr         #0388q=0r    c                    t               x}xr3 t        |       xr& |j                  | j                  |j                        S rR   )r7   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)r7   rS   generic)scalarr   s     r!   is_numpy_scalarr     s&    
 +Bd*Mz&"**/MMr    c                L    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.
    )r]   ri   ro   )rV   s    r!   is_pandas_like_dataframer     s&    
 r"U&8&<U@QRT@UUr    c                L    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.
    )ra   rk   rq   r`   s    r!   is_pandas_like_seriesr   &  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.
    )rf   rm   rs   )re   s    r!   is_pandas_like_indexr   .  s%     	O."7O=;O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   rS   hasattrr   r   r   )native_seriesr   s     r!   is_into_seriesr   8  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   rS   r   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   rS   )rV   r   s     r!   is_narwhals_dataframer     s     -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   rS   )lfr   s     r!   is_narwhals_lazyframer     s     -b)$$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   rS   )r`   r   s     r!   is_narwhals_seriesr     s     'c6""r    c                P    t        |       xr | j                  j                         S rR   )r   r   
is_integerr   s    r!   is_narwhals_series_intr     s    c"=syy';';'==r    )r,   rB   r)   r7   r&   r"   r3   ro   rq   rv   r~   r   r   ri   rk   r   r   r   r   r]   rf   r   r   ra   r   r   r   r   r   )returnr   )rV   r   r   zTypeIs[pd.DataFrame])r`   r   r   zTypeIs[pd.Series[Any]])re   r   r   zTypeIs[pd.Index[Any]])rV   r   r   zTypeIs[mpd.DataFrame])r`   r   r   zTypeIs[mpd.Series])re   r   r   zTypeIs[mpd.Index])rV   r   r   zTypeIs[cudf.DataFrame])r`   r   r   zTypeIs[cudf.Series[Any]])re   r   r   zTypeIs[cudf.Index])rV   r   r   zTypeIs[dd.DataFrame])rV   r   r   zTypeIs[duckdb.DuckDBPyRelation])rV   r   r   zTypeIs[ibis.Table])rV   r   r   zTypeIs[pl.DataFrame])rV   r   r   zTypeIs[pl.LazyFrame])r`   r   r   zTypeIs[pl.Series])r`   r   r   zTypeIs[pa.ChunkedArray[Any]])rV   r   r   zTypeIs[pa.Table])rV   r   r   zTypeIs[pyspark_sql.DataFrame])rV   r   r   zTypeIs[PySparkConnectDataFrame])rV   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])rV   r   r   r   )r`   r   r   r   )re   r   r   r   )r   zAny | IntoSeriesTr   zTypeIs[IntoSeriesT])r   zAny | IntoDataFrameTr   zTypeIs[IntoDataFrameT])rV   zDataFrame[IntoDataFrameT] | Anyr   z!TypeIs[DataFrame[IntoDataFrameT]])r   zAny | LazyFrame[FrameT]r   zTypeIs[LazyFrame[FrameT]])r`   zAny | Series[IntoSeriesT]r   zTypeIs[Series[IntoSeriesT]])b
__future__r   r   typingr   r   r+   dask.dataframer   ru   r>   rA   modin.pandasr%   rh   r\   r   r   r2   r   pyspark.sqlsqlr   pyspark.sql.connect.dataframer   PySparkConnectDataFrametyping_extensionsr   r	   narwhals._spark_like.dataframer
   r   r   r   r   narwhals.typingr   r   r   r   r   r   r   r   r   	frozensetr[   r"   r&   r)   r,   r0   r3   r7   r:   r<   r?   rB   rE   rH   rJ   rL   rO   r]   ra   rf   ri   rk   rm   ro   rq   rs   rv   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __all__r   r    r!   <module>r      s   # 
   %R+(@,,&&.+(+((,' +'+
+
)
)
,
*
)
3
+
)
.
,
0
8
-
N
L
O
M
U
V
M
M
K
R
J
K
1
1
NVP"J"J%'%&%	%	#>r    