
    -Ph/=                       d dl mZ d dlZd dlmZmZ erbd 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,  e-d
g          Z.dqdZ/dqdZ0dqdZ1dqdZ2dqdZ3dqdZ4dqdZ5dqdZ6dqdZ7dqdZ8dqdZ9dqdZ:dqdZ;dqdZ<dqdZ=dqdZ>drdZ?dsd"Z@dtd%ZAdud'ZBdvd)ZCdwd+ZDdxd-ZEdyd/ZFdzd1ZGd{d4ZHd|d6ZId}d8ZJd~d:ZKdd<ZLdd>ZMdd@ZNddBZOddDZPddFZQddHZRddJZSddLZTddPZUddRZVddTZWddVZXddYZYddZZZdd[Z[dd\Z\dd`Z]dddZ^ddgZ_ddkZ`ddnZaddoZbg dpZcdS )    )annotationsN)TYPE_CHECKINGAny	DataFrame)	TypeGuardTypeIs)SQLFrameDataFrame)r   	LazyFrameSeries)	FrameTIntoDataFrameTIntoSeriesT_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     U/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/narwhals/dependencies.py
get_polarsr"   ,       ;??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&   1   r#   r    c                 X    t           j                            dd          x} | j        S dS )zAGet modin.pandas module (if already imported - else return None).modinN)r   r   r   r%   )r(   s    r!   	get_modinr)   6   s*    $///<|4r    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_cupyr0   B   r-   r    c                 B    t           j                            dd          S )z<Get pyarrow module (if already imported - else return None).pyarrowNr   r   r    r!   get_pyarrowr3   G       ;??9d+++r    c                 B    t           j                            dd          S )z:Get numpy module (if already imported - else return None).numpyNr   r   r    r!   	get_numpyr7   L   s    ;??7D)))r    c                 B    t           j                            dd          S )z2Get dask (if already imported - else return None).daskNr   r   r    r!   get_daskr:   Q   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<   V   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_ibisrB   `   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<   hasattrrD   r   r   r   )dds    r!   get_dask_exprrG   e   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_pysparkrJ   l   r4   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_sqlrL   q   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_connectrN   v   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_sqlframerQ   {   s    ;??:t,,,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_namerR   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&   rW   r   anyIMPORT_HOOKS)rR   pdrZ   s   ` @r!   is_pandas_dataframer_      st    <<R,MB1M1M RU V V V V V (V V V S S r    ser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 rV   )r   r   r   rW   r%   r   )rX   rY   rZ   r`   s     r!   r[   z#is_pandas_series.<locals>.<genexpr>   sr       T T  T22	24? 	/sCJ-..T T T T T Tr    )r&   rW   r   r\   r]   )r`   r^   rZ   s   ` @r!   is_pandas_seriesrd      st    <<R,KC1K1K PS T T T T T (T T T Q Q 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 rV   )r   r   r   rW   r%   Index)rX   rY   re   rZ   s     r!   r[   z"is_pandas_index.<locals>.<genexpr>   sr       U U  T22	24? 	0ucj.//U U U U U Ur    )r&   rW   ri   r\   r]   )re   r^   rZ   s   ` @r!   is_pandas_indexrj      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)   rW   r   )rR   mpds     r!   is_modin_dataframern      s'    ;;Ct+M
2s}0M0MMr    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)   rW   r   )r`   rm   s     r!   is_modin_seriesrq      s'    ;;Ct+K
3
0K0KKr    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)   rW   ri   )re   rm   s     r!   is_modin_indexrt      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,   rW   r   )rR   r+   s     r!   is_cudf_dataframerw      s'    JJDt+N
2t~0N0NNr    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,   rW   r   )r`   r+   s     r!   is_cudf_seriesrz      s'    JJDt+L
30L0LLr    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,   rW   ri   )re   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 )N   )r0   rW   ndarraysize)r~   r/   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<   rW   r   )rR   rF   s     r!   is_dask_dataframer      s)    $&&&Bt3T
2r|8T8TTr    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?   rW   DuckDBPyRelation)rR   r>   s     r!   is_duckdb_relationr      s1     ll"F4/ J
F#5 5 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)rB   rW   exprtypesTable)rR   rA   s     r!   is_ibis_tabler      s,    JJDt+U
2ty?T0U0UUr    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"   rW   r   rR   pls     r!   is_polars_dataframer      '    ,,Bt+L
2r|0L0LLr    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"   rW   r   r   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"   rW   r   )r`   r   s     r!   is_polars_seriesr      s'    ,,Bt+J
3	0J0JJr    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)r3   rW   ChunkedArray)r`   pas     r!   is_pyarrow_chunked_arrayr      s'    --B,QC1Q1QQr    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)r3   rW   r   )rR   r   s     r!   is_pyarrow_tabler      s'    --B,IB1I1IIr    TypeIs[pa.Scalar[Any]]c                P    t                      x}d uot          | |j                  S rV   )r3   rW   Scalar)r~   r   s     r!   is_pyarrow_scalarr      s'    --B,KC1K1KKr    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   rL   rW   r   )rR   pyspark_sqls     r!   is_pyspark_dataframer      s<    '))	)$6 	2r;011  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)rN   pyspark.sql.connect.dataframer   ImportErrorrW   rR   r   s     r!   is_pyspark_connect_dataframer      s_    (	??????? 	 	 	55	"i(((5s    
%%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)rQ   sqlframe.base.dataframer   rW   )rR   r   s     r!   is_sqlframe_dataframer     s3    ~~!999999"m,,,5r    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)r7   rW   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.r   r   ndimr   s    r!   is_numpy_array_1dr         #038q=0r    TypeIs[_1DArrayInt]c                    t                      x}o.t          |           o|                    | j        |j                  S rV   )r7   r   
issubdtypedtypeintegerr   s     r!   is_numpy_array_1d_intr     s=    {{	 	1c""	1MM#)RZ00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)r7   rW   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.
    )r_   rn   rw   )rR   s    r!   is_pandas_like_dataframer   ,  s/    
 r""U&8&<&<U@QRT@U@UUr    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.
    )rd   rq   rz   r`   s    r!   is_pandas_like_seriesr   4  s,    
 C  OOC$8$8ON3<O<OOr    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.
    )rj   rt   r}   )re   s    r!   is_pandas_like_indexr   <  s.     	O."7"7O=;O;Or    native_seriesAny | IntoSeriesTTypeIs[IntoSeriesT]c                    ddl m} t          | |          p<t          | d          p,t	          |           pt          |           p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   rW   rE   r   r   r   )r   r   s     r!   is_into_seriesr   F  sq    4 '&&&&& 	=&)) 	0="788	0M**	0 $M22	0 !//r    native_dataframeAny | IntoDataFrameTTypeIs[IntoDataFrameT]c                    ddl m} t          | |          p<t          | d          p,t	          |           pt          |           p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   rW   rE   r   r   r   )r   r   s     r!   is_into_dataframer   k  sv    4 -,,,,, 	#Y// 	6#%=>>	6/00	6 ,--	6 $$455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   )r   r   rW   r   s     r!   is_narwhals_dataframer     s&     -,,,,,b)$$$r    lfAny | LazyFrame[FrameT]TypeIs[LazyFrame[FrameT]]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   rW   )r   r   s     r!   is_narwhals_lazyframer     s&     -,,,,,b)$$$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   )r   r   rW   )r`   r   s     r!   is_narwhals_seriesr     s&     '&&&&&c6"""r    c                R    t          |           o| j                                        S rV   )r   r   
is_integerr   s    r!   is_narwhals_series_intr     s#    c""=sy';';'='==r    )r,   rB   r)   r7   r&   r"   r3   rw   rz   r   r   r   r   rn   rq   r   r   r   r   r_   rj   r   r   rd   r   r   r   r   r   )r   r   )rR   r   r   rS   )r`   r   r   ra   )re   r   r   rf   )rR   r   r   rk   )r`   r   r   ro   )re   r   r   rr   )rR   r   r   ru   )r`   r   r   rx   )re   r   r   r{   )r~   r   r   r   )rR   r   r   r   )rR   r   r   r   )rR   r   r   r   )rR   r   r   r   )rR   r   r   r   )r`   r   r   r   )r`   r   r   r   )rR   r   r   r   )r~   r   r   r   )rR   r   r   r   )rR   r   r   r   )rR   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )rR   r   r   r   )r`   r   r   r   )re   r   r   r   )r   r   r   r   )r   r   r   r   )rR   r   r   r   )r   r   r   r   )r`   r   r   r   )d
__future__r   r   typingr   r   r+   dask.dataframe	dataframerF   r>   rA   modin.pandasr%   rm   r^   r   r   r2   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   	frozensetr]   r"   r&   r)   r,   r0   r3   r7   r:   r<   r?   rB   rG   rJ   rL   rN   rQ   r_   rd   rj   rn   rq   rt   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   __all__r   r    r!   <module>r     s	   # " " " " " 



 % % % % % % % % KKKMMMKKK%%%%%%RRRRRR33333333@@@@@@77777777&&&&&&
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  y+''+ + + +
+ + + +
   ) ) ) )
) ) ) )
, , , ,
* * * *
) ) ) )
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
R R R R
J J J J
L L L L         K K K K
1 1 1 1
   1 1 1 1
N N N NV V V VP P P P   " " " "J" " " "J% % % %	% 	% 	% 	%	# 	# 	# 	#> > > >  r    