o
    i                     @  s   U d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlmZmZ er3d dlmZ d dlZh dZd	ed
< d/ddZd/ddZedddd0ddZd1ddZd1dd Zd2d#d$Zd3d%d&Zd4d)d*Zd5d-d.ZdS )6    )annotations)Sequence)	lru_cache)TYPE_CHECKINGAnyFinalget_type_hints)_check_for_pydanticpydantic)CallableN>   ztimedelta64[us]boolZfloat32Zint8Zint16zdatetime64[ms]zdatetime64[us]Zint64ztimedelta64[ns]Zuint16ztimedelta64[ms]Zfloat64Zuint32Zint32Zuint8zdatetime64[ns]Zuint64zFinal[set[str]]PANDAS_SIMPLE_NUMPY_DTYPESobjtypereturndict[str, Any]c                 C  s   t | di S )N__annotations__)getattrr    r   W/home/app/Keep/.python/lib/python3.10/site-packages/polars/_utils/construction/utils.py_get_annotations#   s   r   c                 C  s&   zt | W S  ty   t|  Y S w N)r   	TypeErrorr   r   r   r   r   try_get_type_hints'   s
   
r   @   F)	annotatedclsr   r   r   c                  sR   t  fdddD r't jts'|rt jt jkr't dd  jD S dS )z-Check if given class derives from NamedTuple.c                 3  s    | ]}t  |V  qd S r   )hasattr).0attrr   r   r   	<genexpr>5       z is_namedtuple.<locals>.<genexpr>)_fields_field_defaults_replacec                 s  s    | ]}t |tV  qd S r   )
isinstancestr)r   Zfldr   r   r   r"   8   r#   F)allr'   r$   propertylenr   )r   r   r   r!   r   is_namedtuple2   s
   r,   valuec                 C  s   t | o	t| tjS )z1Check if value derives from a pydantic.BaseModel.)r	   r'   r
   Z	BaseModelr-   r   r   r   is_pydantic_model<   s   r/   c                 C  s   t | dddot| tS )zICheck if value is an instance of a SQLAlchemy sequence or mapping object.
__module__ zsqlalchemy.)r   
startswithr'   r   r.   r   r   r   is_sqlalchemy_rowA   s   r3   valuesSequence[Any | None]c                 C  s    | durt dd | D dS dS )z
    Return the first value from a sequence that isn't None.

    If sequence doesn't contain non-None values, return None.
    Nc                 s  s    | ]	}|d ur|V  qd S r   r   r   vr   r   r   r"   O   s    z%get_first_non_none.<locals>.<genexpr>)next)r4   r   r   r   get_first_non_noneH   s   r9   c                 C  st   t | trdd |  D S t | trdd | D S t| jr*dd |   D S t | tr8tdd | D S | S )z'Recursively unpack a nested NamedTuple.c                 S     i | ]	\}}|t |qS r   	nt_unpackr   keyr-   r   r   r   
<dictcomp>U       znt_unpack.<locals>.<dictcomp>c                 S  s   g | ]}t |qS r   r;   r   r-   r   r   r   
<listcomp>W   s    znt_unpack.<locals>.<listcomp>c                 S  r:   r   r;   r=   r   r   r   r?   Y   r@   c                 s  s    | ]}t |V  qd S r   r;   rA   r   r   r   r"   [   s    znt_unpack.<locals>.<genexpr>)r'   dictitemslistr,   	__class___asdicttupler   r   r   r   r<   R   s   



r<   	is_nestedCallable[[Any], bool]c                   sX    | rdS t | trt fdd|  D S t | ttfr*t fdd| D S dS )z;Determine if value contains (or is) nested structured data.Tc                 3      | ]}t | V  qd S r   contains_nestedr6   rI   r   r   r"   e   r#   z"contains_nested.<locals>.<genexpr>c                 3  rK   r   rL   r6   rN   r   r   r"   g   r#   F)r'   rC   anyr4   rE   rH   )r-   rI   r   rN   r   rM   `   s   
rM   series1pd.Series[Any] | pd.Index[Any] | pd.DatetimeIndexc                 C  s`   t | jdkrd| j }t|t| jtv p/| jdko/| j o/| j	 o/t
tt| tS )N   zduplicate column names found: object)r+   shapecolumnstolist
ValueErrorr(   Zdtyper   Zhasnansemptyr'   r8   iter)rP   msgr   r   r   $is_simple_numpy_backed_pandas_seriesk   s   
r[   )r   r   r   r   )r   r   r   r   r   r   )r-   r   r   r   )r4   r5   r   r   )r   r   r   r   )r-   r   rI   rJ   r   r   )rP   rQ   r   r   )
__future__r   collections.abcr   	functoolsr   typingr   r   r   r   Zpolars._dependenciesr	   r
   r   Zpandaspdr   r   r   r   r,   r/   r3   r9   r<   rM   r[   r   r   r   r   <module>   s&    


	




