o
    ij                     @  s   d dl m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
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 erZd dlmZ d dlmZmZ d dlmZmZ ddd4ddZ			d5d6d!d"Zd7d$d%Zd8d(d)Z d9d2d3Z!dS ):    )annotationsN)datetime)Path)TYPE_CHECKINGAny)_DELTALAKE_AVAILABLE	deltalake)eprint)NullTime)unpack_dtypes)POLARS_STORAGE_CONFIG_KEYS_get_path_scheme)
DeltaTable)	DataFrameDataType)
SchemaDictStorageOptionsDictT)strict	table_uri
str | Pathr   boolreturnstrc                C  s0   t t| d u rt|  |}|S | }|S )N)r   r   r   
expanduserresolve)r   r   resolved_uri r   M/home/app/Keep/.python/lib/python3.10/site-packages/polars/io/delta/_utils.py_resolve_delta_lake_uri   s   r   
table_pathstr | Path | DeltaTableversionint | str | datetime | Nonestorage_optionsStorageOptionsDict | Nonedelta_table_optionsdict[str, Any] | Nonedeltalake.DeltaTablec                 C  s   t   |durdd | D }t| tjr-t|du|du|dugr+tjdtdd | S |du r3i }t	| }t|t
tfsLtj|f||d|}|S tj| fd|i|}|| |S )	z
    Initialize a Delta lake table for use in read and scan operations.

    Notes
    -----
    Make sure to install deltalake>=0.8.0. Read the documentation
    `here <https://delta-io.github.io/delta-rs/usage/installation/>`_.
    Nc                 S  s   i | ]\}}|t vr||qS r   )r   ).0kvr   r   r   
<dictcomp>1   s
    z)_get_delta_lake_table.<locals>.<dictcomp>zWhen supplying a DeltaTable directly, `version`, `storage_options`, and `delta_table_options` are ignored.
                To silence this warning, don't supply those parameters.   )
stacklevel)r"   r$   r$   )_check_if_delta_availableitems
isinstancer   r   anywarningswarnRuntimeWarningr   r   r   Zload_as_version)r    r"   r$   r&   r   Zdl_tblr   r   r   _get_delta_lake_table   sP   
r6   Nonec                  C  s   t sd} t| d S )Nz=deltalake is not installed

Please run: pip install deltalake)r   ModuleNotFoundError)msgr   r   r   r/   [   s   r/   dtypeslist[DataType]c                 C  s2   t |  }tth}||@  }rd|}t|d S )Nz+dataframe contains unsupported data types: )r   r   r
   	TypeError)r:   Zschema_dtypesZunsupported_typesoverlapr9   r   r   r   _check_for_unsupported_typesa   s   
r>   add_actions_dfr   filter_columns	list[str]schemar   verboseDataFrame | Nonec                C  sf  dd l }d| vr|rtd d S d| d i}d| v r%| d j jddni }d| v r6| d j jddni }d	| v rG| d	 j jddni }|D ]_}	||	 }
d u re|jd g| d
d| j	}
||	 }d u r}|jd g||	 d
d| j	}||	 }d u r|jd g||	 d
d| j	}|
||	 d< |||	 d< |||	 d< qK|j
|| j	dS )Nr   Znum_recordszDscan_delta: statistics load failed: 'num_records' column not presentlenZ
null_countT)Z	as_seriesminmax)ZdtypeZ_nc_min_max)height)polarsr	   structZunnestto_dictgetZSeriesZget_index_typeZnew_from_indexrJ   r   )r?   r@   rB   rC   ploutZnull_count_colsZmin_colsZmax_colsZcol_nameZcol_ncZcol_minZcol_maxr   r   r   0_extract_table_statistics_from_delta_add_actionsm   sJ   rQ   )r   r   r   r   r   r   )NNN)
r    r!   r"   r#   r$   r%   r&   r'   r   r(   )r   r7   )r:   r;   r   r7   )
r?   r   r@   rA   rB   r   rC   r   r   rD   )"
__future__r   r3   r   pathlibr   typingr   r   Zpolars._dependenciesr   r   Zpolars._utils.loggingr	   Zpolars.datatypesr
   r   Zpolars.datatypes.convertr   Zpolars.io.cloud._utilsr   r   r   rK   r   r   Zpolars._typingr   r   r   r6   r/   r>   rQ   r   r   r   r   <module>   s,    
<
