o
    i                     @  s   d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	 ddl
mZmZmZ ddlmZ ddlmZmZmZmZ dd	lmZ erFdd
lmZ 	d d!ddZ	d ddddd"ddZdS )#z orc compat     )annotationsN)
ModuleType)TYPE_CHECKINGAnyLiteral)FilePath
ReadBufferWriteBuffer)import_optional_dependency)is_categorical_dtypeis_interval_dtypeis_period_dtypeis_unsigned_integer_dtype)
get_handle)	DataFramepathFilePath | ReadBuffer[bytes]columnslist[str] | Nonereturnr   c                 K  s^   t d}t| ddd}||j}|jdd|i| W  d   S 1 s(w   Y  dS )a  
    Load an ORC object from the file path, returning a DataFrame.

    .. versionadded:: 1.0.0

    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, and file. For file URLs, a host is
        expected. A local file could be:
        ``file://localhost/path/to/table.orc``.
    columns : list, default None
        If not None, only these columns will be read from the file.
    **kwargs
        Any additional kwargs are passed to pyarrow.

    Returns
    -------
    DataFrame

    Notes
    -----
    Before using this function you should read the :ref:`user guide about ORC <io.orc>`
    and :ref:`install optional dependencies <install.warn_orc>`.
    pyarrow.orcrbFis_textr   N )r
   r   ORCFilehandleread	to_pandas)r   r   kwargsorchandlesorc_filer   r   H/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/pandas/io/orc.pyread_orc    s
    $r$   pyarrow)engineindexengine_kwargsdf$FilePath | WriteBuffer[bytes] | Noner&   Literal['pyarrow']r'   bool | Noner(   dict[str, Any] | Nonebytes | Nonec          
      C  sB  |du r| j jd du}|du ri }| jD ]}t|s't|s't|s't|r+tdq|dkr4tdt	|dd}t	d}|du }|rHt
 }|dusNJ t|d	d
d4}t|ts]J z|j|jj| |d|jfi | W n ty }	 ztd|	d}	~	ww W d   n1 sw   Y  |rt|t
jsJ | S dS )a  
    Write a DataFrame to the ORC format.

    .. versionadded:: 1.5.0

    Parameters
    ----------
    df : DataFrame
        The dataframe to be written to ORC. Raises NotImplementedError
        if dtype of one or more columns is category, unsigned integers,
        intervals, periods or sparse.
    path : str, file-like object or None, default None
        If a string, it will be used as Root Directory path
        when writing a partitioned dataset. By file-like object,
        we refer to objects with a write() method, such as a file handle
        (e.g. via builtin open function). If path is None,
        a bytes object is returned.
    engine : str, default 'pyarrow'
        ORC library to use. Pyarrow must be >= 7.0.0.
    index : bool, optional
        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 ``infer`` 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.
    engine_kwargs : dict[str, Any] or None, default None
        Additional keyword arguments passed to :func:`pyarrow.orc.write_table`.

    Returns
    -------
    bytes if no path argument is provided else None

    Raises
    ------
    NotImplementedError
        Dtype of one or more columns is category, unsigned integers, interval,
        period or sparse.
    ValueError
        engine is not pyarrow.

    Notes
    -----
    * Before using this function you should read the
      :ref:`user guide about ORC <io.orc>` and
      :ref:`install optional dependencies <install.warn_orc>`.
    * This function requires `pyarrow <https://arrow.apache.org/docs/python/>`_
      library.
    * For supported dtypes please refer to `supported ORC features in Arrow
      <https://arrow.apache.org/docs/cpp/orc.html#data-types>`__.
    * Currently timezones in datetime columns are not preserved when a
      dataframe is converted into ORC files.
    Nr   z6The dtype of one or more columns is not supported yet.r%   zengine must be 'pyarrow'z7.0.0)min_versionr   wbFr   )preserve_index)r'   namesdtypesr   r   r   r   NotImplementedError
ValueErrorr
   ioBytesIOr   
isinstancer   write_tableTablefrom_pandasr   	TypeErrorgetvalue)
r)   r   r&   r'   r(   dtyper    was_noner!   er   r   r#   to_orcG   s`   >


rA   )N)r   r   r   r   r   r   )r)   r   r   r*   r&   r+   r'   r,   r(   r-   r   r.   )__doc__
__future__r   r6   typesr   typingr   r   r   pandas._typingr   r   r	   pandas.compat._optionalr
   pandas.core.dtypes.commonr   r   r   r   pandas.io.commonr   pandasr   r$   rA   r   r   r   r#   <module>   s&    )