a
    d1                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZm	Z	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mZmZ ddlmZ dd	lmZ dd
lmZ d dlmZmZmZ erd dl Z!G dd deZ"ee#ej$e"ef Z%ede%dZ&e	e'ee'e#ee# f f Z(e	e'ee#ee# f f Z)G dd deZ*G dd dee* Z+G dd de,Z-ej.d@e&ee/ e&dddZ0ej.dAe%ee/ ee1 eeej$e	e'e
f df  dddZ2G dd deZ3G d d! d!eZ4G d"d# d#eZ5G d$d% d%eZ6ej.dBe%e'e'e'e'e5d*d+d,Z7ej.dCee#ej$ef e'e'e'e'e6d*d.d/Z8ej.e%e)d0d1d2Z9e%dd0d3d4Z:e'e'd5d6d7Z;e%e'd0d8d9Z<ee#ej$ef e'd0d:d;Z=d<d= Z>d>d? Z.dS )D    N)UnionMutableMappingOptionalDictSequenceTYPE_CHECKINGList)curried)TypeVar   )import_pyarrow_interchange)sanitize_dataframesanitize_arrow_table_DataFrameLike)sanitize_geo_interface)AltairDeprecationWarning)PluginRegistry)Protocol	TypedDictLiteralc                   @   s   e Zd ZU eed< dS )_SupportsGeoInterface__geo_interface__N)__name__
__module____qualname__r   __annotations__ r   r   Z/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/altair/utils/data.pyr      s   
r   
_TDataType)boundc                   @   s   e Zd ZeedddZdS )DataTransformerTypedatareturnc                 K   s   d S Nr   )selfr"   kwargsr   r   r   __call__1   s    zDataTransformerType.__call__N)r   r   r   	_DataType_VegaLiteDataDictr'   r   r   r   r   r    0   s   r    c                   @   s<   e Zd ZddiZeedddZejeddddZdS )	DataTransformerRegistryconsolidate_datasetsT)r#   c                 C   s
   | j d S Nr+   _global_settings)r%   r   r   r   r+   8   s    z,DataTransformerRegistry.consolidate_datasetsN)valuer#   c                 C   s   || j d< d S r,   r-   )r%   r/   r   r   r   r+   <   s    )r   r   r   r.   propertyboolr+   setterr   r   r   r   r*   5   s
   r*   c                   @   s   e Zd ZdZdS )MaxRowsErrorz+Raised when a data model has too many rows.N)r   r   r   __doc__r   r   r   r   r3   B   s   r3     )r"   max_rowsr#   c                    s   t |   fdd}t| dr@| jd dkr8| jd }q| j}njt| tjrR| }nXt| trtd| v rn| d }q| S n6t| drt }|| } d	ur|j	 kr|  |S  d	urt
| kr|  | S )
zzRaise MaxRowsError if the data model has more than max_rows.

    If max_rows is None, then do not perform any check.
    c                      s   t d  dd S )NzHThe number of rows in your dataset is greater than the maximum allowed (aG  ).

Try enabling the VegaFusion data transformer which raises this limit by pre-evaluating data
transformations in Python.
    >> import altair as alt
    >> alt.data_transformers.enable("vegafusion")

Or, see https://altair-viz.github.io/user_guide/large_datasets.html for additional information
on how to plot large datasets.)r3   r   r6   r   r   raise_max_rows_errorP   s
    z(limit_rows.<locals>.raise_max_rows_errorr   typeZFeatureCollectionfeaturesvalues__dataframe__N)check_data_typehasattrr   
isinstancepd	DataFramedictr   from_dataframeZnum_rowslen)r"   r6   r8   r;   pipa_tabler   r7   r   
limit_rowsH   s*    




rG   zpyarrow.lib.Table)r"   nfracr#   c                 C   s   t |  t| tjr"| j||dS t| trzd| v rt| d }|s`|du rPtdt|t| }t	||}d|iS dS n`t
| drt }|| }|s|du rtdt|t| }t	tt||}||S dS dS )zBReduce the size of the data model by sampling without replacement.)rH   rI   r;   Nz9frac cannot be None if n is None and data is a dictionaryr<   z:frac cannot be None if n is None with this data input type)r=   r?   r@   rA   samplerB   
ValueErrorintrD   randomr>   r   rC   rangeZtake)r"   rH   rI   r;   rE   rF   indicesr   r   r   rJ   {   s6    



rJ   c                   @   s   e Zd ZU ed ed< dS )_JsonFormatDictjsonr9   Nr   r   r   r   r   r   r   r   r   rP      s   
rP   c                   @   s   e Zd ZU ed ed< dS )_CsvFormatDictcsvr9   NrR   r   r   r   r   rS      s   
rS   c                   @   s   e Zd ZU eed< eed< dS )_ToJsonReturnUrlDicturlformatN)r   r   r   strr   rP   r   r   r   r   rU      s   
rU   c                   @   s   e Zd ZU eed< eed< dS )_ToCsvReturnUrlDictrV   rW   N)r   r   r   rX   r   rS   r   r   r   r   rY      s   
rY   altair-datarQ   {prefix}-{hash}.{extension} )r"   prefix	extensionfilenameurlpathr#   c                 C   sl   t | }t|}|j|||d}t|d}|| W d   n1 sJ0    Y  tj||ddidS )zQ
    Write the data model to a .json file and return a url based data model.
    r]   hashr^   wNr9   rQ   rV   rW   )_data_to_json_string_compute_data_hashrW   openwriteospathjoin)r"   r]   r^   r_   r`   Z	data_json	data_hashfr   r   r   to_json   s    (rn   rT   c                 C   sl   t | }t|}|j|||d}t|d}|| W d   n1 sJ0    Y  tj||ddidS )zFWrite the data model to a .csv file and return a url based data model.ra   rc   Nr9   rT   rd   )_data_to_csv_stringrf   rW   rg   rh   ri   rj   rk   )r"   r]   r^   r_   r`   Zdata_csvrl   rm   r   r   r   to_csv   s    	(rp   r!   c                 C   s   t |  t| dr8t| tjr&t| } t| j}d|iS t| tjr\t| } d| jddiS t| t	rzd| vrvt
d| S t| drt }t|| }d| iS tdt| dS )	z0Replace a DataFrame by a data model with values.r   r;   records)orient.values expected in data dict, but not present.r<   zUnrecognized data type: {}N)r=   r>   r?   r@   rA   r   r   r   to_dictrB   KeyErrorr   r   rC   	to_pylistrK   rW   r9   )r"   Zdata_sanitizedrE   rF   r   r   r   	to_values   s$    



rw   c                    s<   t  ttjfs8t fdddD s8tdt d S )Nc                 3   s   | ]}t  |V  qd S r$   )r>   ).0attrr"   r   r   	<genexpr>   s   z"check_data_type.<locals>.<genexpr>)r   r<   zBExpected dict, DataFrame or a __geo_interface__ attribute, got: {})r?   rB   r@   rA   any	TypeErrorrW   r9   rz   r   rz   r   r=      s    r=   )data_strr#   c                 C   s   t |   S r$   )hashlibmd5encode	hexdigest)r~   r   r   r   rf     s    rf   c                 C   s   t |  t| dr:t| tjr&t| } t| j} t	| S t| tjr\t| } | j
dddS t| trd| vrvtdtj	| d ddS t| d	rt }|| }t	| S td
dS )z5Return a JSON string representation of the input datar   rq      )rr   Zdouble_precisionr;   rs   T)	sort_keysr<   zBto_json only works with data expressed as a DataFrame or as a dictN)r=   r>   r?   r@   rA   r   r   r   rQ   dumpsrn   rB   ru   r   rC   rv   NotImplementedError)r"   rE   rF   r   r   r   re     s(    





re   c                 C   s   t |  t| drtdnt| tjr<t| } | jddS t| trnd| vrVt	dtj
| d jddS t| drt }dd	l}dd	lm} || }| }||| |   S td
d	S )z4return a CSV string representation of the input datar   zLto_csv does not work with data that contains the __geo_interface__ attributeF)indexr;   z-values expected in data dict, but not presentr<   r   NzAto_csv only works with data expressed as a DataFrame or as a dict)r=   r>   r   r?   r@   rA   r   rp   rB   ru   	from_dictr   pyarrowZpyarrow.csvrT   rC   ZBufferOutputStreamZ	write_csvgetvalueZ
to_pybytesdecode)r"   rE   paZpa_csvrF   Z
csv_bufferr   r   r   ro   #  s.    



ro   c                 G   s"   t jdtdd tj| g|R  S )zi
    Pipe a value through a sequence of functions

    Deprecated: use toolz.curried.pipe() instead.
    zdalt.pipe() is deprecated, and will be removed in a future release. Use toolz.curried.pipe() instead.r   
stacklevel)warningswarnr   r	   pipe)r"   funcsr   r   r   r   B  s    r   c                  O   s    t jdtdd tj| i |S )zRCurry a callable function

    Deprecated: use toolz.curried.curry() instead.
    zfalt.curry() is deprecated, and will be removed in a future release. Use toolz.curried.curry() instead.r   r   )r   r   r   r	   curry)argsr&   r   r   r   r   Q  s    r   )r5   )NN)rZ   rQ   r[   r\   )rZ   rT   r[   r\   )?rQ   ri   rM   r   r   typingr   r   r   r   r   r   r   Zpandasr@   Ztoolzr	   r
   Z
_importersr   corer   r   r   r   deprecationr   Zplugin_registryr   r   r   r   Zpyarrow.libr   r   rB   rA   r(   r   rX   r)   Z_ToValuesReturnTyper    r*   	Exceptionr3   r   rL   rG   floatrJ   rP   rS   rU   rY   rn   rp   rw   r=   rf   re   ro   r   r   r   r   r   <module>   s   $2 '        