o
    GÊÆh]  ã                   @  s²  d Z ddlmZ ddlZddlZddlZddlmZmZm	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ZddlmZmZ ddlmZ ddl m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z' erˆddl(m)Z)m*Z*m+Z+m,Z,m-Z- dEdd„Z.			dFdGd$d%„Z/G d&d„ dƒZ0G d'd(„ d(e0ƒZ1G d)d*„ d*e0ƒZ2eed d+�		,	-				dHdId9d:„ƒZ3eed d+�d,ddej4ej4ddfdJdCdD„ƒZ5dS )Kz parquet compat é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚLiteral)Úcatch_warnings)Úusing_pyarrow_string_dtype)Úlib)Úimport_optional_dependency©ÚAbstractMethodError)Údoc)Úfind_stack_level)Úcheck_dtype_backend)Ú	DataFrameÚ
get_option)Ú_shared_docs)Úarrow_string_types_mapper)Ú	IOHandlesÚ
get_handleÚis_fsspec_urlÚis_urlÚstringify_path)ÚDtypeBackendÚFilePathÚ
ReadBufferÚStorageOptionsÚWriteBufferÚengineÚstrÚreturnÚBaseImplc                 C  s    | dkrt dƒ} | dkr>ttg}d}|D ]"}z|ƒ W   S  ty6 } z|dt|ƒ 7 }W Y d}~qd}~ww td|› �ƒ‚| dkrEtƒ S | dkrLtƒ S td	ƒ‚)
zreturn our implementationÚautozio.parquet.engineÚ z
 - NzÉUnable to find a usable engine; tried using: 'pyarrow', 'fastparquet'.
A suitable version of pyarrow or fastparquet is required for parquet support.
Trying to import the above resulted in these errors:ÚpyarrowÚfastparquetz.engine must be one of 'pyarrow', 'fastparquet')r   ÚPyArrowImplÚFastParquetImplÚImportErrorr   Ú
ValueError)r   Úengine_classesÚ
error_msgsÚengine_classÚerr© r-   ú^/var/www/html/HyperOracle/crypto_trader/venv/lib/python3.10/site-packages/pandas/io/parquet.pyÚ
get_engine2   s,   €ÿúÿ
r/   ÚrbFÚpathú1FilePath | ReadBuffer[bytes] | WriteBuffer[bytes]Úfsr   Ústorage_optionsúStorageOptions | NoneÚmodeÚis_dirÚboolúVtuple[FilePath | ReadBuffer[bytes] | WriteBuffer[bytes], IOHandles[bytes] | None, Any]c           
   	   C  s\  t | ƒ}|dur;tddd�}tddd�}|dur%t||jƒr%|r$tdƒ‚n|dur1t||jjƒr1n
tdt|ƒj	› �ƒ‚t
|ƒr}|du r}|du rftdƒ}tdƒ}z
|j | ¡\}}W n t|jfye   Y nw |du r|tdƒ}|jj|fi |pwi ¤Ž\}}n|r‹t|ƒr‡|d	kr‹td
ƒ‚d}	|s©|s©t|tƒr©tj |¡s©t||d|d�}	d}|	j}||	|fS )zFile handling for PyArrow.Nz
pyarrow.fsÚignore)ÚerrorsÚfsspecz8storage_options not supported with a pyarrow FileSystem.z9filesystem must be a pyarrow or fsspec FileSystem, not a r#   r0   z8storage_options passed with buffer, or non-supported URLF©Úis_textr4   )r   r	   Ú
isinstanceÚ
FileSystemÚNotImplementedErrorÚspecÚAbstractFileSystemr(   ÚtypeÚ__name__r   Úfrom_uriÚ	TypeErrorÚArrowInvalidÚcoreÚ	url_to_fsr   r   Úosr1   Úisdirr   Úhandle)
r1   r3   r4   r6   r7   Úpath_or_handleÚpa_fsr<   ÚpaÚhandlesr-   r-   r.   Ú_get_path_or_handleT   sf   
ÿÿÿÿÿÿ
ÿ€ÿþý
ü	ÿ
rR   c                   @  s0   e Zd Zeddd„ƒZddd„Zddd
d„Zd	S )r    Údfr   r   ÚNonec                 C  s   t | tƒs	tdƒ‚d S )Nz+to_parquet only supports IO with DataFrames)r?   r   r(   )rS   r-   r-   r.   Úvalidate_dataframe”   s   
ÿzBaseImpl.validate_dataframec                 K  ó   t | ƒ‚©Nr
   )ÚselfrS   r1   ÚcompressionÚkwargsr-   r-   r.   Úwrite™   ó   zBaseImpl.writeNc                 K  rV   rW   r
   )rX   r1   ÚcolumnsrZ   r-   r-   r.   Úreadœ   r\   zBaseImpl.read)rS   r   r   rT   )rS   r   rW   )r   r   )rE   Ú
__module__Ú__qualname__ÚstaticmethodrU   r[   r^   r-   r-   r-   r.   r    “   s
    
c                   @  sF   e Zd Zddd„Z					dddd„Zdddejddfddd„ZdS ) r%   r   rT   c                 C  s&   t ddd� dd l}dd l}|| _d S )Nr#   z(pyarrow is required for parquet support.©Úextrar   )r	   Úpyarrow.parquetÚ(pandas.core.arrays.arrow.extension_typesÚapi)rX   r#   Úpandasr-   r-   r.   Ú__init__¡   s   ÿ
zPyArrowImpl.__init__ÚsnappyNrS   r   r1   úFilePath | WriteBuffer[bytes]rY   ú
str | NoneÚindexúbool | Noner4   r5   Úpartition_colsúlist[str] | Nonec                 K  sF  |   |¡ d| dd ¡i}	|d ur||	d< | jjj|fi |	¤Ž}
|jr:dt |j¡i}|
jj	}i |¥|¥}|
 
|¡}
t|||d|d ud�\}}}t|tjƒrgt|dƒrgt|jttfƒrg|j}t|tƒrg| ¡ }z1|d ur}| jjj|
|f|||dœ|¤Ž n| jjj|
|f||dœ|¤Ž W |d ur—| ¡  d S d S |d ur¢| ¡  w w )	NÚschemaÚpreserve_indexÚPANDAS_ATTRSÚwb)r4   r6   r7   Úname)rY   rn   Ú
filesystem)rY   ru   )rU   Úpoprf   ÚTableÚfrom_pandasÚattrsÚjsonÚdumpsrp   ÚmetadataÚreplace_schema_metadatarR   r?   ÚioÚBufferedWriterÚhasattrrt   r   ÚbytesÚdecodeÚparquetÚwrite_to_datasetÚwrite_tableÚclose)rX   rS   r1   rY   rl   r4   rn   ru   rZ   Úfrom_pandas_kwargsÚtableÚdf_metadataÚexisting_metadataÚmerged_metadatarN   rQ   r-   r-   r.   r[   ¬   sj   

û
ÿþý
þûú
þüû€ÿ
ÿzPyArrowImpl.writeFÚuse_nullable_dtypesr8   Údtype_backendúDtypeBackend | lib.NoDefaultc                 K  s"  d|d< i }	|dkrddl m}
 |
ƒ }|j|	d< n|dkr#tj|	d< ntƒ r+tƒ |	d< tdƒ}|d	kr7d|	d
< t|||dd�\}}}zD| j	j
j|f|||dœ|¤Ž}|jdi |	¤Ž}|d	kre|jd	dd�}|jjr{d|jjv r{|jjd }t |¡|_|W |d ur†| ¡  S S |d ur�| ¡  w w )NTÚuse_pandas_metadataÚnumpy_nullabler   )Ú_arrow_dtype_mappingÚtypes_mapperr#   zmode.data_managerÚarrayÚsplit_blocksr0   )r4   r6   )r]   ru   ÚfiltersF)Úcopys   PANDAS_ATTRSr-   )Úpandas.io._utilr‘   ÚgetÚpdÚ
ArrowDtyper   r   r   rR   rf   rƒ   Ú
read_tableÚ	to_pandasÚ_as_managerrp   r|   rz   Úloadsry   r†   )rX   r1   r]   r•   rŒ   r�   r4   ru   rZ   Úto_pandas_kwargsr‘   ÚmappingÚmanagerrN   rQ   Úpa_tableÚresultr‰   r-   r-   r.   r^   í   sT   
üÿüû

ÿ
ÿzPyArrowImpl.read©r   rT   ©ri   NNNN)rS   r   r1   rj   rY   rk   rl   rm   r4   r5   rn   ro   r   rT   )rŒ   r8   r�   rŽ   r4   r5   r   r   )rE   r_   r`   rh   r[   r   Ú
no_defaultr^   r-   r-   r-   r.   r%       s    
øDør%   c                   @  s@   e Zd Zddd„Z					dddd„Z				dddd„ZdS )r&   r   rT   c                 C  s   t ddd�}|| _d S )Nr$   z,fastparquet is required for parquet support.rb   )r	   rf   )rX   r$   r-   r-   r.   rh   '  s   ÿ
zFastParquetImpl.__init__ri   NrS   r   rY   ú*Literal['snappy', 'gzip', 'brotli'] | Noner4   r5   c           	        sÚ   |   |¡ d|v r|d urtdƒ‚d|v r| d¡}|d ur"d|d< |d ur*tdƒ‚t|ƒ}t|ƒr@tdƒ‰ ‡ ‡fdd„|d	< nˆrFtd
ƒ‚tdd�� | jj	||f|||dœ|¤Ž W d   ƒ d S 1 sfw   Y  d S )NÚpartition_onzYCannot use both partition_on and partition_cols. Use partition_cols for partitioning dataÚhiveÚfile_schemeú9filesystem is not implemented for the fastparquet engine.r<   c                   s   ˆ j | dfi ˆp	i ¤Ž  ¡ S )Nrs   )Úopen)r1   Ú_©r<   r4   r-   r.   Ú<lambda>R  s    ÿÿz'FastParquetImpl.write.<locals>.<lambda>Ú	open_withz?storage_options passed with file object or non-fsspec file pathT)Úrecord)rY   Úwrite_indexr¨   )
rU   r(   rv   rA   r   r   r	   r   rf   r[   )	rX   rS   r1   rY   rl   rn   r4   ru   rZ   r-   r®   r.   r[   /  sB   
ÿ
ÿÿþûú"ÿzFastParquetImpl.writec                 K  s  i }|  dd¡}|  dtj¡}	d|d< |rtdƒ‚|	tjur"tdƒ‚|d ur*tdƒ‚t|ƒ}d }
t|ƒrHtdƒ}|j|d	fi |pAi ¤Žj	|d
< nt
|tƒr^tj |¡s^t|d	d|d�}
|
j}z| jj|fi |¤Ž}|jd||dœ|¤ŽW |
d ur}|
 ¡  S S |
d ur‡|
 ¡  w w )NrŒ   Fr�   Úpandas_nullszNThe 'use_nullable_dtypes' argument is not supported for the fastparquet enginezHThe 'dtype_backend' argument is not supported for the fastparquet enginer«   r<   r0   r3   r=   )r]   r•   r-   )rv   r   r¦   r(   rA   r   r   r	   r¬   r3   r?   r   rK   r1   rL   r   rM   rf   ÚParquetFilerœ   r†   )rX   r1   r]   r•   r4   ru   rZ   Úparquet_kwargsrŒ   r�   rQ   r<   Úparquet_filer-   r-   r.   r^   d  sD   	ÿ
ÿÿ ÿ

ÿ
ÿzFastParquetImpl.readr¤   r¥   )rS   r   rY   r§   r4   r5   r   rT   )NNNN)r4   r5   r   r   )rE   r_   r`   rh   r[   r^   r-   r-   r-   r.   r&   &  s    
ø8úr&   )r4   r!   ri   rS   r   ú$FilePath | WriteBuffer[bytes] | NonerY   rk   rl   rm   rn   ro   ru   úbytes | Nonec                 K  sp   t |tƒr|g}t|ƒ}	|du rt ¡ n|}
|	j| |
f|||||dœ|¤Ž |du r6t |
tjƒs2J ‚|
 ¡ S dS )aË	  
    Write a DataFrame to the parquet format.

    Parameters
    ----------
    df : DataFrame
    path : str, path object, file-like object, or None, default None
        String, path object (implementing ``os.PathLike[str]``), or file-like
        object implementing a binary ``write()`` function. If None, the result is
        returned as bytes. If a string, it will be used as Root Directory path
        when writing a partitioned dataset. The engine fastparquet does not
        accept file-like objects.

        .. versionchanged:: 1.2.0

    engine : {{'auto', 'pyarrow', 'fastparquet'}}, default 'auto'
        Parquet library to use. If 'auto', then the option
        ``io.parquet.engine`` is used. The default ``io.parquet.engine``
        behavior is to try 'pyarrow', falling back to 'fastparquet' if
        'pyarrow' is unavailable.

        When using the ``'pyarrow'`` engine and no storage options are provided
        and a filesystem is implemented by both ``pyarrow.fs`` and ``fsspec``
        (e.g. "s3://"), then the ``pyarrow.fs`` filesystem is attempted first.
        Use the filesystem keyword with an instantiated fsspec filesystem
        if you wish to use its implementation.
    compression : {{'snappy', 'gzip', 'brotli', 'lz4', 'zstd', None}},
        default 'snappy'. Name of the compression to use. Use ``None``
        for no compression.
    index : bool, default None
        If ``True``, include the dataframe's index(es) in the file output. If
        ``False``, they will not be written to the file.
        If ``None``, similar to ``True`` the dataframe's index(es)
        will be saved. However, instead of being saved as values,
        the RangeIndex will be stored as a range in the metadata so it
        doesn't require much space and is faster. Other indexes will
        be included as columns in the file output.
    partition_cols : str or list, optional, default None
        Column names by which to partition the dataset.
        Columns are partitioned in the order they are given.
        Must be None if path is not a string.
    {storage_options}

        .. versionadded:: 1.2.0

    filesystem : fsspec or pyarrow filesystem, default None
        Filesystem object to use when reading the parquet file. Only implemented
        for ``engine="pyarrow"``.

        .. versionadded:: 2.1.0

    kwargs
        Additional keyword arguments passed to the engine

    Returns
    -------
    bytes if no path argument is provided else None
    N)rY   rl   rn   r4   ru   )r?   r   r/   r~   ÚBytesIOr[   Úgetvalue)rS   r1   r   rY   rl   r4   rn   ru   rZ   ÚimplÚpath_or_bufr-   r-   r.   Ú
to_parquet—  s(   
Fþùør½   úFilePath | ReadBuffer[bytes]r]   rŒ   úbool | lib.NoDefaultr�   rŽ   r•   ú&list[tuple] | list[list[tuple]] | Nonec              	   K  sf   t |ƒ}	|tjurd}
|du r|
d7 }
tj|
ttƒ d� nd}t|ƒ |	j| f||||||dœ|¤ŽS )a¢  
    Load a parquet object from the file path, returning a DataFrame.

    Parameters
    ----------
    path : str, path object or file-like object
        String, path object (implementing ``os.PathLike[str]``), or file-like
        object implementing a binary ``read()`` function.
        The string could be a URL. Valid URL schemes include http, ftp, s3,
        gs, and file. For file URLs, a host is expected. A local file could be:
        ``file://localhost/path/to/table.parquet``.
        A file URL can also be a path to a directory that contains multiple
        partitioned parquet files. Both pyarrow and fastparquet support
        paths to directories as well as file URLs. A directory path could be:
        ``file://localhost/path/to/tables`` or ``s3://bucket/partition_dir``.
    engine : {{'auto', 'pyarrow', 'fastparquet'}}, default 'auto'
        Parquet library to use. If 'auto', then the option
        ``io.parquet.engine`` is used. The default ``io.parquet.engine``
        behavior is to try 'pyarrow', falling back to 'fastparquet' if
        'pyarrow' is unavailable.

        When using the ``'pyarrow'`` engine and no storage options are provided
        and a filesystem is implemented by both ``pyarrow.fs`` and ``fsspec``
        (e.g. "s3://"), then the ``pyarrow.fs`` filesystem is attempted first.
        Use the filesystem keyword with an instantiated fsspec filesystem
        if you wish to use its implementation.
    columns : list, default=None
        If not None, only these columns will be read from the file.
    {storage_options}

        .. versionadded:: 1.3.0

    use_nullable_dtypes : bool, default False
        If True, use dtypes that use ``pd.NA`` as missing value indicator
        for the resulting DataFrame. (only applicable for the ``pyarrow``
        engine)
        As new dtypes are added that support ``pd.NA`` in the future, the
        output with this option will change to use those dtypes.
        Note: this is an experimental option, and behaviour (e.g. additional
        support dtypes) may change without notice.

        .. deprecated:: 2.0

    dtype_backend : {{'numpy_nullable', 'pyarrow'}}, default 'numpy_nullable'
        Back-end data type applied to the resultant :class:`DataFrame`
        (still experimental). Behaviour is as follows:

        * ``"numpy_nullable"``: returns nullable-dtype-backed :class:`DataFrame`
          (default).
        * ``"pyarrow"``: returns pyarrow-backed nullable :class:`ArrowDtype`
          DataFrame.

        .. versionadded:: 2.0

    filesystem : fsspec or pyarrow filesystem, default None
        Filesystem object to use when reading the parquet file. Only implemented
        for ``engine="pyarrow"``.

        .. versionadded:: 2.1.0

    filters : List[Tuple] or List[List[Tuple]], default None
        To filter out data.
        Filter syntax: [[(column, op, val), ...],...]
        where op is [==, =, >, >=, <, <=, !=, in, not in]
        The innermost tuples are transposed into a set of filters applied
        through an `AND` operation.
        The outer list combines these sets of filters through an `OR`
        operation.
        A single list of tuples can also be used, meaning that no `OR`
        operation between set of filters is to be conducted.

        Using this argument will NOT result in row-wise filtering of the final
        partitions unless ``engine="pyarrow"`` is also specified.  For
        other engines, filtering is only performed at the partition level, that is,
        to prevent the loading of some row-groups and/or files.

        .. versionadded:: 2.1.0

    **kwargs
        Any additional kwargs are passed to the engine.

    Returns
    -------
    DataFrame

    See Also
    --------
    DataFrame.to_parquet : Create a parquet object that serializes a DataFrame.

    Examples
    --------
    >>> original_df = pd.DataFrame(
    ...     {{"foo": range(5), "bar": range(5, 10)}}
    ...    )
    >>> original_df
       foo  bar
    0    0    5
    1    1    6
    2    2    7
    3    3    8
    4    4    9
    >>> df_parquet_bytes = original_df.to_parquet()
    >>> from io import BytesIO
    >>> restored_df = pd.read_parquet(BytesIO(df_parquet_bytes))
    >>> restored_df
       foo  bar
    0    0    5
    1    1    6
    2    2    7
    3    3    8
    4    4    9
    >>> restored_df.equals(original_df)
    True
    >>> restored_bar = pd.read_parquet(BytesIO(df_parquet_bytes), columns=["bar"])
    >>> restored_bar
        bar
    0    5
    1    6
    2    7
    3    8
    4    9
    >>> restored_bar.equals(original_df[['bar']])
    True

    The function uses `kwargs` that are passed directly to the engine.
    In the following example, we use the `filters` argument of the pyarrow
    engine to filter the rows of the DataFrame.

    Since `pyarrow` is the default engine, we can omit the `engine` argument.
    Note that the `filters` argument is implemented by the `pyarrow` engine,
    which can benefit from multithreading and also potentially be more
    economical in terms of memory.

    >>> sel = [("foo", ">", 2)]
    >>> restored_part = pd.read_parquet(BytesIO(df_parquet_bytes), filters=sel)
    >>> restored_part
        foo  bar
    0    3    8
    1    4    9
    zYThe argument 'use_nullable_dtypes' is deprecated and will be removed in a future version.TzFUse dtype_backend='numpy_nullable' instead of use_nullable_dtype=True.)Ú
stacklevelF)r]   r•   r4   rŒ   r�   ru   )	r/   r   r¦   ÚwarningsÚwarnÚFutureWarningr   r   r^   )r1   r   r]   r4   rŒ   r�   ru   r•   rZ   r»   Úmsgr-   r-   r.   Úread_parquetõ  s0    
ÿÿÿùørÆ   )r   r   r   r    )Nr0   F)r1   r2   r3   r   r4   r5   r6   r   r7   r8   r   r9   )Nr!   ri   NNNN)rS   r   r1   r·   r   r   rY   rk   rl   rm   r4   r5   rn   ro   ru   r   r   r¸   )r1   r¾   r   r   r]   ro   r4   r5   rŒ   r¿   r�   rŽ   ru   r   r•   rÀ   r   r   )6Ú__doc__Ú
__future__r   r~   rz   rK   Útypingr   r   r   rÂ   r   Úpandas._configr   Úpandas._libsr   Úpandas.compat._optionalr	   Úpandas.errorsr   Úpandas.util._decoratorsr   Úpandas.util._exceptionsr   Úpandas.util._validatorsr   rg   r™   r   r   Úpandas.core.shared_docsr   r—   r   Úpandas.io.commonr   r   r   r   r   Úpandas._typingr   r   r   r   r   r/   rR   r    r%   r&   r½   r¦   rÆ   r-   r-   r-   r.   Ú<module>   sb    
	%û? qø]ø