
    bi>                        d dl mZ d dlZd dlmZmZ d dlm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 Zd Zdd	Zd
 Zd Zd Z	 	 	 	 ddZe G d de             Ze G d de             Zy# e$ r dZY Ew xY w)    )annotationsN)Protocolruntime_checkable)uuid4)LocalFileSystem)Versionc                D    | xr t        | t              xs t        |       S )z'Check if an fsspec file-system is local)
isinstancer   _is_local_fs_pyarrowfss    R/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/dataframe/io/utils.py_is_local_fsr      s&     2' 	$#    c                    | r<t        | d      rt        | j                        S t        | d      r| j                  dk(  S y)z-Check if a pyarrow-based file-system is localr   	type_namelocalF)hasattrr   r   r   r   s    r   r   r      s:    	2t'..R%<<7**r   c           
        |dk(  rddl m} |j                  }nd }| j                  duxr d| j                  v }|rt	        j
                  | j                  d   j                  d            }|j                  dg       D ci c](  }|j                  d	|j                  d
d            |d   * }}|j                  dg       D ci c]D  }|d   dv r;|d   r6|j                  d	|j                  d
d            |d   j                  dd      F }	}ni }i }
t        t        |             D ]  }| |   }|j                  |v rf|j                  	v rHt        j                  g d      j                  j                  |	|j                           j                  }n#||j                     }n	  ||j                        }||
|j                  <    |r|D ]  }d|
|<   	 |
S c c}w c c}w # t         $ r Y w xY w)z4Convert a pyarrow.Schema object to pandas dtype dictnumpy_nullabler   )PYARROW_NULLABLE_DTYPE_MAPPINGc                "    | j                         S N)to_pandas_dtype)ts    r   <lambda>z%_get_pyarrow_dtypes.<locals>.<lambda>.   s     1 1 3 r   Ns   pandasutf8columns
field_namename
numpy_typepandas_type)datetime
datetimetzmetadatatimezonezM8[ns]dtypecategory)dask.dataframe.io.parquet.arrowr   getr%   jsonloadsdecoderangelenr    pdSeriesdttz_localizer(   typeNotImplementedError)schema
categoriesdtype_backendr   type_mapperhas_pandas_metadatapandas_metadatacpandas_metadata_dtypestzdtypesifieldnumpy_dtypecats                  r   _get_pyarrow_dtypesrE   '   s   ((R4883 !//5V)v:V**V__Y%?%F%Fv%NO %((B7"
 EE,fd 34aoE"
 "
 %((B7	
 #==!J-	 EE,fd 34a
m6G6GD7 
 
 "$F3v; )q	 :://zzRIIb144@@EJJPVV  5UZZ@)%**5 )uzz#)&  	%C$F3K	% MM"

2 ' s   -GA	G%G""	G.-G.c                   | D ci c]*  }|t        j                  g |j                  |d            , }}|xs g D cg c]  }|j                  |       }}t	        |      dk(  rd}nGt	        |      dk(  r|d   }|d   dk7  r,|d   |_        n!t         j                  j                  ||      }t        j                  ||      }|r||j                  _
        |S c c}w c c}w )	aN  Get the final metadata for the dask.dataframe

    Parameters
    ----------
    to_read_columns : list
        All the columns to end up with, including index names
    file_dtypes : dict
        Mapping from column name to dtype for every element
        of ``to_read_columns``
    index_cols : list
        Subset of ``to_read_columns`` that should move to the
        index
    column_index_names : list
        The values for df.columns.name for a MultiIndex in the
        columns, or df.index.name for a regular Index in the columns

    Returns
    -------
    meta : DataFrame
    int64r'   r   N   __index_level_0__)names)index)r1   r2   r+   popr0   r    
MultiIndexfrom_arrays	DataFramer   rJ   )	to_read_columnsfile_dtypes
index_colscolumn_index_namesr=   dataindexesrK   dfs	            r   _meta_from_dtypesrW   ]   s    , FU@A299R{q':;;D  %/$4"5qtxx{5G5
7|q	ZA	
 a=//#AEJ))')D	d%	(B-

I% 6s
   /CC!c                 *    t               j                  S )z0Simple utility function to get random hex string)r   hex r   r   _guidr[      s    7;;r   c                ,    || S |j                  |       S )z5Helper function to place an object on a context stack)enter_context)objstacks     r   _set_contextr`      s    }
s##r   c                   |!| D cg c]  }t         ||fi ||       c}S |xs i j                         }|j                  dd      }|dk(  r|t        |      st	        t
        j                        t	        d      kD  r|j                  |       |j                  dd      xs dgt        |       z  }|j                  dd      }	|	dk7  rt        d|	 d	      t        | |      D 
cg c](  \  }}
t        t        j                  |f||
d
||      * c}
}S |+| D cg c]  }t         |j                  |fi ||      ! c}S | D cg c]  }t        t        |fi ||       c}S c c}w c c}
}w c c}w c c}w )a  Return a list of open-file objects given
    a list of input-file paths.

    WARNING: This utility is experimental, and is meant
    for internal ``dask.dataframe`` use only.

    Parameters
    ----------
    paths : list(str)
        Remote or local path of the parquet file
    fs : fsspec object, optional
        File-system instance to use for file handling
    context_stack : contextlib.ExitStack, Optional
        Context manager to use for open files.
    open_file_func : callable, optional
        Callable function to use for file opening. If this argument
        is specified, ``open_file_func(path, **kwargs)`` will be used
        to open each file in ``paths``. Default is ``fs.open``.
    precache_options : dict, optional
        Dictionary of key-word arguments to use for precaching.
        If ``precache_options`` contains ``{"method": "parquet"}``,
        ``fsspec.parquet.open_parquet_file`` will be used for remote
        storage.
    **kwargs :
        Key-word arguments to pass to the appropriate open function
    Nmethodparquetz	2021.11.0
row_groups
cache_typepartsz<'parts' `cache_type` required for 'parquet' precaching, got .)r   rd   )r`   copyrL   r   r   fsspec__version__updater0   
ValueErrorzipfsspec_parquetopen_parquet_fileopen)pathsr   context_stackopen_file_funcprecache_optionskwargspathprecacherd   re   rgss              r   _open_input_filesry      s   F ! 
 77G
 	
 ).B446##Hd3HINR F&&''+*>>&'ZZd3LU8K
ZZg6
 "|1&  !
3
 c 00" 	 
 	
 
QVWWRWWT4V4mDWWJOP$Ld-f-}=PPO
2
 XPs   E,*-E1!$E7E<c                  ,    e Zd ZdZed        Zd Zd Zy)DataFrameIOFunctionzkDataFrame IO function with projectable columns

    Enables column projection in ``DataFrameIOLayer``.
    c                    t         )z$Return the current column projectionr6   selfs    r   r   zDataFrameIOFunction.columns   s
     "!r   c                    t         )zUReturn a new DataFrameIOFunction object
        with a new column projection
        r}   )r   r   s     r   project_columnsz#DataFrameIOFunction.project_columns   s
     "!r   c                    t         )z Return a new DataFrame partitionr}   )r   argsru   s      r   __call__zDataFrameIOFunction.__call__   s    !!r   N)__name__
__module____qualname____doc__propertyr   r   r   rZ   r   r   r{   r{      s%    
 " """r   r{   c                      e Zd ZddZddZy)SupportsLockc                     y r   rZ   r~   s    r   acquirezSupportsLock.acquire       r   c                     y r   rZ   r~   s    r   releasezSupportsLock.release   r   r   N)returnobject)r   r   r   r   r   rZ   r   r   r   r      s    $$r   r   r   )NNNN)
__future__r   r,   typingr   r   uuidr   ri   pandasr1   fsspec.implementations.localr   packaging.versionr   fsspec.parquetrc   rn   ImportErrorr   r   rE   rW   r[   r`   ry   r{   r   rZ   r   r   <module>r      s    "  .    8 %+
	3l'T
$ KQ\ "( " ", %8 % %W  Ns   A0 0A:9A: