Ë
    	êñiï0  ã            	      ó.  — d dl mZ d dl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 er,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mZ d dlmZ d dlmZ dddddddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zddddddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zy)é    )ÚannotationsN)ÚTYPE_CHECKINGÚAny)Úwrap_ldf)ÚNoPickleOption)ÚDeltaDataset)Údatetime)ÚPath)ÚLiteral©Ú
DeltaTable)Ú	DataFrameÚ	LazyFrame)ÚStorageOptionsDict)ÚCredentialProviderFunctionÚautoF)ÚversionÚcolumnsÚrechunkÚstorage_optionsÚcredential_providerÚdelta_table_optionsÚuse_pyarrowÚpyarrow_optionsc          
     ón   — t        | |||||||¬«      }	|�|	j                  |«      }	|	j                  «       S )a7  
    Reads into a DataFrame from a Delta lake table.

    Parameters
    ----------
    source
        DeltaTable or a Path or URI to the root of the Delta lake table.

        Note: For Local filesystem, absolute and relative paths are supported but
        for the supported object storages - GCS, Azure and S3 full URI must be provided.
    version
        Numerical version or timestamp version of the Delta lake table.

        Note: If `version` is not provided, the latest version of delta lake
        table is read.
    columns
        Columns to select. Accepts a list of column names.
    rechunk
        Make sure that all columns are contiguous in memory by
        aggregating the chunks into a single array.
    storage_options
        Extra options for the storage backends supported by `deltalake`.
        For cloud storages, this may include configurations for authentication etc.

        More info is available `here
        <https://delta-io.github.io/delta-rs/usage/loading-table/>`__.
    credential_provider
        Provide a function that can be called to provide cloud storage
        credentials. The function is expected to return a dictionary of
        credential keys along with an optional credential expiry time.

        .. warning::
            This functionality is considered **unstable**. It may be changed
            at any point without it being considered a breaking change.
    delta_table_options
        Additional keyword arguments while reading a Delta lake Table.
    use_pyarrow
        Flag to enable pyarrow dataset reads.
    pyarrow_options
        Keyword arguments while converting a Delta lake Table to pyarrow table.

    Returns
    -------
    DataFrame

    Examples
    --------
    Reads a Delta table from local filesystem.
    Note: Since version is not provided, the latest version of the delta table is read.

    >>> table_path = "/path/to/delta-table/"
    >>> pl.read_delta(table_path)  # doctest: +SKIP

    Reads a specific version of the Delta table from local filesystem.
    Note: This will fail if the provided version of the delta table does not exist.

    >>> pl.read_delta(table_path, version=1)  # doctest: +SKIP

    Time travel a delta table from local filesystem using a timestamp version.

    >>> pl.read_delta(
    ...     table_path, version=datetime(2020, 1, 1, tzinfo=timezone.utc)
    ... )  # doctest: +SKIP

    Reads a Delta table from AWS S3.
    See a list of supported storage options for S3 `here
    <https://docs.rs/object_store/latest/object_store/aws/enum.AmazonS3ConfigKey.html#variants>`__.

    >>> table_path = "s3://bucket/path/to/delta-table/"
    >>> storage_options = {
    ...     "AWS_ACCESS_KEY_ID": "THE_AWS_ACCESS_KEY_ID",
    ...     "AWS_SECRET_ACCESS_KEY": "THE_AWS_SECRET_ACCESS_KEY",
    ... }
    >>> pl.read_delta(table_path, storage_options=storage_options)  # doctest: +SKIP

    Reads a Delta table from Google Cloud storage (GCS).
    See a list of supported storage options for GCS `here
    <https://docs.rs/object_store/latest/object_store/gcp/enum.GoogleConfigKey.html#variants>`__.

    >>> table_path = "gs://bucket/path/to/delta-table/"
    >>> storage_options = {"SERVICE_ACCOUNT": "SERVICE_ACCOUNT_JSON_ABSOLUTE_PATH"}
    >>> pl.read_delta(table_path, storage_options=storage_options)  # doctest: +SKIP

    Reads a Delta table from Azure.

    Following type of table paths are supported,

    * az://<container>/<path>
    * adl://<container>/<path>
    * abfs://<container>/<path>

    See a list of supported storage options for Azure `here
    <https://docs.rs/object_store/latest/object_store/azure/enum.AzureConfigKey.html#variants>`__.

    >>> table_path = "az://container/path/to/delta-table/"
    >>> storage_options = {
    ...     "AZURE_STORAGE_ACCOUNT_NAME": "AZURE_STORAGE_ACCOUNT_NAME",
    ...     "AZURE_STORAGE_ACCOUNT_KEY": "AZURE_STORAGE_ACCOUNT_KEY",
    ... }
    >>> pl.read_delta(table_path, storage_options=storage_options)  # doctest: +SKIP

    Reads a Delta table with additional delta specific options. In the below example,
    `without_files` option is used which loads the table without file tracking
    information.

    >>> table_path = "/path/to/delta-table/"
    >>> delta_table_options = {"without_files": True}
    >>> pl.read_delta(
    ...     table_path, delta_table_options=delta_table_options
    ... )  # doctest: +SKIP
    )Úsourcer   r   r   r   r   r   r   )Ú
scan_deltaÚselectÚcollect)
r   r   r   r   r   r   r   r   r   Údfs
             ú[/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/polars/io/delta/functions.pyÚ
read_deltar"      sI   € ôv 
ØØØ'Ø/Ø/ØØ'Øô	
€Bð ÐØ�Y‰Y�wÓˆØ�:‰:‹<Ðó    )r   r   r   r   r   r   r   c               ó®  — ddl m} ddlm}	 d}
t        j
                  j                  d«      �ddlm} t        | |«      r| }
|
€ |	|| |d«      }n|�|dk7  rd	}t        |«      ‚d}~|
�&|
j                  €|�i |
j                  xs i ¥|xs i ¥}t        t        |
«      |
€t        | «      nd|||||||xs d
¬«	      }t        |j!                  |«      «      S )aY  
    Lazily read from a Delta lake table.

    Parameters
    ----------
    source
        DeltaTable or a Path or URI to the root of the Delta lake table.

        Note: For Local filesystem, absolute and relative paths are supported but
        for the supported object storages - GCS, Azure and S3 full URI must be provided.
    version
        Numerical version or timestamp version of the Delta lake table.

        Note: If `version` is not provided, the latest version of delta lake
        table is read.
    storage_options
        Extra options for the storage backends supported by `deltalake`.
        For cloud storages, this may include configurations for authentication etc.

        More info is available `here
        <https://delta-io.github.io/delta-rs/usage/loading-table/>`__.
    credential_provider
        Provide a function that can be called to provide cloud storage
        credentials. The function is expected to return a dictionary of
        credential keys along with an optional credential expiry time.

        .. warning::
            This functionality is considered **unstable**. It may be changed
            at any point without it being considered a breaking change.
    delta_table_options
        Additional keyword arguments while reading a Delta lake Table.
    use_pyarrow
        Flag to enable pyarrow dataset reads.
    pyarrow_options
        Keyword arguments while converting a Delta lake Table to pyarrow table.
        Use this parameter when filtering on partitioned columns or to read
        from a 'fsspec' supported filesystem.
    rechunk
        Make sure that all columns are contiguous in memory by
        aggregating the chunks into a single array.

    Returns
    -------
    LazyFrame

    Examples
    --------
    Creates a scan for a Delta table from local filesystem.
    Note: Since version is not provided, the latest version of the delta table is read.

    >>> table_path = "/path/to/delta-table/"
    >>> pl.scan_delta(table_path).collect()  # doctest: +SKIP

    Creates a scan for a specific version of the Delta table from local filesystem.
    Note: This will fail if the provided version of the delta table does not exist.

    >>> pl.scan_delta(table_path, version=1).collect()  # doctest: +SKIP

    Time travel a delta table from local filesystem using a timestamp version.

    >>> pl.scan_delta(
    ...     table_path, version=datetime(2020, 1, 1, tzinfo=timezone.utc)
    ... ).collect()  # doctest: +SKIP

    Creates a scan for a Delta table from AWS S3.
    See a list of supported storage options for S3 `here
    <https://docs.rs/object_store/latest/object_store/aws/enum.AmazonS3ConfigKey.html#variants>`__.

    >>> table_path = "s3://bucket/path/to/delta-table/"
    >>> storage_options = {
    ...     "AWS_REGION": "eu-central-1",
    ...     "AWS_ACCESS_KEY_ID": "THE_AWS_ACCESS_KEY_ID",
    ...     "AWS_SECRET_ACCESS_KEY": "THE_AWS_SECRET_ACCESS_KEY",
    ... }
    >>> pl.scan_delta(
    ...     table_path, storage_options=storage_options
    ... ).collect()  # doctest: +SKIP

    Creates a scan for a Delta table from Google Cloud storage (GCS).
    See a list of supported storage options for GCS `here
    <https://docs.rs/object_store/latest/object_store/gcp/enum.GoogleConfigKey.html#variants>`__.

    >>> table_path = "gs://bucket/path/to/delta-table/"
    >>> storage_options = {"SERVICE_ACCOUNT": "SERVICE_ACCOUNT_JSON_ABSOLUTE_PATH"}
    >>> pl.scan_delta(
    ...     table_path, storage_options=storage_options
    ... ).collect()  # doctest: +SKIP

    Creates a scan for a Delta table from Azure.
    Supported options for Azure are available `here
    <https://docs.rs/object_store/latest/object_store/azure/enum.AzureConfigKey.html#variants>`__.

    Following type of table paths are supported,

    * az://<container>/<path>
    * adl://<container>/<path>
    * abfs[s]://<container>/<path>

    >>> table_path = "az://container/path/to/delta-table/"
    >>> storage_options = {
    ...     "AZURE_STORAGE_ACCOUNT_NAME": "AZURE_STORAGE_ACCOUNT_NAME",
    ...     "AZURE_STORAGE_ACCOUNT_KEY": "AZURE_STORAGE_ACCOUNT_KEY",
    ... }
    >>> pl.scan_delta(
    ...     table_path, storage_options=storage_options
    ... ).collect()  # doctest: +SKIP

    Creates a scan for a Delta table with additional delta specific options.
    In the below example, `without_files` option is used which loads the table without
    file tracking information.

    >>> table_path = "/path/to/delta-table/"
    >>> delta_table_options = {"without_files": True}
    >>> pl.scan_delta(
    ...     table_path, delta_table_options=delta_table_options
    ... ).collect()  # doctest: +SKIP
    r   )ÚPyLazyFrame)Ú!_init_credential_provider_builderNÚ	deltalaker   r   r   z?cannot use credential_provider when passing a DeltaTable objectF)	Útable_Ú
table_uri_r   r   Úcredential_provider_builderr   r   r   r   )Úpolars._plrr%   Ú,polars.io.cloud.credential_provider._builderr&   Ú	importlibÚutilÚ	find_specr'   r   Ú
isinstanceÚ
ValueErrorÚ_storage_optionsr   r   Ústrr   Únew_from_dataset_object)r   r   r   r   r   r   r   r   r%   r&   Útabler   r*   ÚmsgÚdatasets                  r!   r   r   ¢   s  € õ@ (õð  $€Eä‡~�~×Ñ Ó,Ð8Ý(ä�f˜jÔ)ØˆEà€}Ù&GØ ¨¸,ó'
Ñ#ð 
Ð	(Ð-@ÀFÒ-JØOˆÜ˜‹oÐà&*Ð#ààÐØ×ÑÐ*¨oÐ.Ið
Ø×%Ñ%Ò+¨ð
àÒ$ "ð
ˆô
 Ü˜eÓ$Ø"' -”3�v”;°TØØ'Ø$?Ø/ØØ'ØÒ ˜5ô
€Gô �K×7Ñ7¸Ó@ÓAÐAr#   )r   ústr | Path | DeltaTabler   úint | str | datetime | Noner   zlist[str] | Noner   úbool | Noner   úStorageOptionsDict | Noner   ú3CredentialProviderFunction | Literal['auto'] | Noner   údict[str, Any] | Noner   Úboolr   r=   Úreturnr   )r   r8   r   r9   r   r;   r   r<   r   r=   r   r>   r   r=   r   r:   r?   r   )Ú
__future__r   r-   Úimportlib.utilÚtypingr   r   Úpolars._utils.wrapr   Úpolars.io.cloud._utilsr   Úpolars.io.delta._datasetr   r	   Úpathlibr
   r   r'   r   Úpolarsr   r   Úpolars._typingr   Úpolars.io.cloudr   r"   r   © r#   r!   ú<module>rK      sI  ðÝ "ã Û ß %å 'Ý 1Ý 1áÝ!ÝÝå$ç+Ý1Ý:ð ,0Ø $ØØ15ØOUØ15ØØ-1ñHØ#ðHð )ðHð ð	Hð
 ðHð /ðHð MðHð /ðHð ðHð +ðHð óHð\ ,0Ø15ØOUØ15ØØ-1ØñmBØ#ðmBð )ðmBð /ð	mBð
 MðmBð /ðmBð ðmBð +ðmBð ðmBð ômBr#   