o
    +&]i9                  	   @  s:  U d dl m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	 d dl
mZ d dlmZ d dlmZmZmZmZmZmZmZ d dlm  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#m$Z$m%Z% d	dl&m'Z' ej(dkr|d dlm)Z)m*Z* nd dl+m)Z)m*Z* ej(dkrd dlm,Z,m-Z- nd dl+m,Z,m-Z- erej(dkrd dlm.Z. nd dl+m.Z. ej(dkrd dlm/Z/ nd dl+m/Z/ d dl0Z1d dl2Z3e*G dd de)Z4ee5eef ee4e!f Z6de7d< ede6dZ8ededZ9e5e:ee:e5eef e;e5eef  f f Z<de7d< e5e:ee5eef e;e5eef  f f Z=de7d< eee5e:e	f df Z>drd d!Z?e-d"Z@ed#e<eZAee,e6e@f eAf ZBG d$d% d%e'eBeAf ZCG d&d' d'eDZEedsdtd.d/ZFedudvd0d/ZF	1dwdxd4d/ZFe	(dydzd8d9ZGe	(dsd{d:d9ZGe	(dsd|d<d9ZG			d}d~d>d9ZGed? ZHG d@dA dAeZIG dBdC dCeZJe	(	(	(	(	(dddIdJZKe	(	(	(	(dddKdJZK		L	M	N	OdddQdJZKe	(	(	(	(	(dddRdSZLe	(	(	(	(dddUdSZL		L	V	N	OdddXdSZLddZd[ZMdd]d^ZNdd_d`ZOddadbZPddddeZQddgdhZRddidjZSddkdlZTddpdqZUdS )    )annotationsN)CallableMutableMappingSequence)partial)Path)TYPE_CHECKINGAnyLiteral	TypedDictTypeVarUnionoverload)is_pandas_dataframe)IntoDataFrame   )import_pyarrow_interchange)DataFrameLikesanitize_geo_interfacesanitize_narwhals_dataframesanitize_pandas_dataframeto_eager_narwhals_dataframe)PluginRegistry)      )Protocolruntime_checkable)r   
   )Concatenate	ParamSpec)TypeIs)	TypeAliasc                   @     e Zd ZU ded< dS )SupportsGeoInterfacer   __geo_interface__N__name__
__module____qualname____annotations__ r*   r*   O/var/www/html/IGF-ODF-V3/venv/lib/python3.10/site-packages/altair/utils/data.pyr#   1   s   
 r#   r!   DataType	TDataType)boundTIntoDataFrameVegaLiteDataDictToValuesReturnTypeobjr	   returnTypeIs[DataType]c                 C  s&   t | ttfpt tj| dddtjS )NT)eager_or_interchange_onlypass_through)
isinstancedictr#   nwfrom_native	DataFrame)r2   r*   r*   r+   is_data_typeD   s   r<   PRc                   @  s2   e Zd ZddiZedddZejdd	dZd
S )DataTransformerRegistryconsolidate_datasetsTr3   boolc                 C  s
   | j d S Nr@   _global_settings)selfr*   r*   r+   r@   `   s   
z,DataTransformerRegistry.consolidate_datasetsvalueNonec                 C  s   || j d< d S rB   rC   )rE   rF   r*   r*   r+   r@   d   s   N)r3   rA   )rF   rA   r3   rG   )r&   r'   r(   rD   propertyr@   setterr*   r*   r*   r+   r?   ]   s    r?   c                      s0   e Zd ZdZd fddZedddZ  ZS )MaxRowsErrorz+Raised when a data model has too many rows.messagestrr3   rG   c                  s   || _ t | j  d S N)rK   super__init__)rE   rK   	__class__r*   r+   rO   m   s   zMaxRowsError.__init__	user_rowsintmax_rowsc                C  s   d| d| d}| |S )Nz$The number of rows in your dataset (z') 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.r*   )clsrR   rT   msgr*   r*   r+   from_limit_rowsq   s
   zMaxRowsError.from_limit_rows)rK   rL   r3   rG   )rR   rS   rT   rS   r3   rJ   )r&   r'   r(   __doc__rO   classmethodrW   __classcell__r*   r*   rP   r+   rJ   j   s
    rJ   .datarG   rT   
int | Noner   c                 C     d S rM   r*   r[   rT   r*   r*   r+   
limit_rows      r_   c                 C  r]   rM   r*   r^   r*   r*   r+   r_      r`     DataType | Nonepartial | DataTypec                 C  s   | du r
t t|dS t|  t| tr$| jd dkr | jd }n| j}nt| tr4d| v r2| d }n| S t| } | }t|}|durL||krLt	
||| S )z
    Raise MaxRowsError if the data model has more than max_rows.

    If max_rows is None, then do not perform any check.
    N)rT   typeFeatureCollectionfeaturesvalues)r   r_   check_data_typer7   r#   r$   r8   r   lenrJ   rW   )r[   rT   rg   nr*   r*   r+   r_      s"   


rj   fracfloat | Nonec                 C  r]   rM   r*   r[   rj   rk   r*   r*   r+   sample      rn   c                 C  r]   rM   r*   rm   r*   r*   r+   rn      ro   SampleReturnTypec                 C  r]   rM   r*   rm   r*   r*   r+   rn      ro   partial | SampleReturnTypec                 C  s   | du rt t||dS t|  t| r| j||dS t| trGd| v rE| d }|s;|du r3d}t|t|t| }t	||}d|iS dS t
j| dd} |sb|du rZd}t|t|t|  }t	tt| |}| |  S )zBReduce the size of the data model by sampling without replacement.N)rj   rk   rg   z9frac cannot be None if n is None and data is a dictionaryT
eager_onlyz:frac cannot be None if n is None with this data input type)r   rn   rh   r   r7   r8   
ValueErrorrS   ri   randomr9   r:   range	to_native)r[   rj   rk   rg   rV   indicesr*   r*   r+   rn      s0   
)csvjsonc                   @  r"   )_FormatDict_FormatTyperd   Nr%   r*   r*   r*   r+   r{      s   
 r{   c                   @  s   e Zd ZU ded< ded< dS )_ToFormatReturnUrlDictrL   urlr{   formatNr%   r*   r*   r*   r+   r}      s   
 r}   prefixrL   	extensionfilenameurlpathc                 C  r]   rM   r*   r[   r   r   r   r   r*   r*   r+   to_json      r   c                 C  r]   rM   r*   r   r*   r*   r+   r      r   altair-datarz   {prefix}-{hash}.{extension}  partial | _ToFormatReturnUrlDictc                 C  L   t ||||}| du rttfi |S t| }t|fi |dtddiS )zGWrite the data model to a .json file and return a url based data model.Nr   rz   rd   )_to_text_kwdsr   r   _data_to_json_string_to_textr{   r[   r   r   r   r   kwdsdata_strr*   r*   r+   r      
   c                 C  r]   rM   r*   r   r*   r*   r+   to_csv  r   r   #dict | pd.DataFrame | DataFrameLikec                 C  r]   rM   r*   r   r*   r*   r+   r     r   ry   *dict | pd.DataFrame | DataFrameLike | Nonec                 C  r   )zFWrite the data model to a .csv file and return a url based data model.Nr   ry   r   )r   r   r   _data_to_csv_stringr   r{   r   r*   r*   r+   r     r   r   c                 C  sF   t | }|j|||d}t|j| dd tt||}t||dS )N)r   hashr   zutf-8)encoding)r~   r   )_compute_data_hashr   r   
write_textrL   r}   )r[   r   r   r   r   r   	data_hashr~   r*   r*   r+   r   )  s
   r   dict[str, str]c                C  s   | |||dS )Nr   r   r   r   r*   r   r*   r*   r+   r   8  s   r   c                 C  s   t |  tj| dd}t|trdt|iS t|r&t|}d|jddiS t|t	r7d|vr5d}t
||S t| tjrIt| } d| jddiS dt|  }t|)	z0Replace a DataFrame by a data model with values.T)r6   rg   records)orient.values expected in data dict, but not present.namedzUnrecognized data type: )rh   r9   rw   r7   r#   _from_geo_interfacer   r   to_dictr8   KeyErrorr;   r   rowsrd   rt   )r[   data_nativerV   r*   r*   r+   	to_values<  s"   

r   c                 C  s"   t | sdt|  }t|d S )Nz@Expected dict, DataFrame or a __geo_interface__ attribute, got: )r<   rd   	TypeError)r[   rV   r*   r*   r+   rh   T  s   rh   r   c                 C  s   t |   d d S )N    )hashlibsha256encode	hexdigest)r   r*   r*   r+   r   ]  s   r   dict[str, Any]c                 C  s   t | rt| n| }t|jS )z
    Sanitize a ``__geo_interface__`` w/ pre-sanitize step for ``pandas`` if needed.

    Introduces an intersection type::

        geo: <subclass of SupportsGeoInterface and DataFrame> | SupportsGeoInterface
    )r   r   r   r$   )r[   geor*   r*   r+   r   a  s   
r   c              
   C  s   t |  t| trtt| S t| rt| } | jdddS t| t	r7d| vr.d}t
|tj| d ddS z	tj| dd}W n tyS } zd	}t||d
}~ww t|}t|jddS )z6Return a JSON string representation of the input data.r      )r   double_precisionrg   r   T)	sort_keysrr   zBto_json only works with data expressed as a DataFrame or as a dictNr   )rh   r7   r#   rz   dumpsr   r   r   r   r8   r   r9   r:   r   NotImplementedErrorr   r   )r[   rV   data_nwexcr*   r*   r+   r   m  s(   


r   c              
   C  s   t |  t| trdttjd}t|t| r$t| } | jddS t| t	rYd| vr3d}t
|zddl}W n tyL } zd	}t||d}~ww |j| d jddS ztj| d
d}W | S  tyx } zd}t||d}~ww )z5Return a CSV string representation of the input data.z3to_csv does not yet work with data that is of type z0.
See https://github.com/vega/altair/issues/3441F)indexrg   z-values expected in data dict, but not presentr   Nz4pandas is required to convert a dict to a CSV stringTrr   zAto_csv only works with data expressed as a DataFrame or as a dict)rh   r7   r#   rd   r&   r   r   r   r   r8   r   pandasImportErrorr;   	from_dictr9   r:   r   	write_csv)r[   rV   pdr   r   r*   r*   r+   r     s<   



r   dfi_dfr   pa.Tablec                 C  sP   ddl }dD ]}t| |d}t|r| }t||jr|  S qt }|| S )zMConvert a DataFrame Interchange Protocol compatible object to an Arrow Table.r   N)arrowto_arrowto_arrow_table
to_pyarrow)pyarrowgetattrcallabler7   Tabler   from_dataframe)r   paconvert_method_nameconvert_methodresultpir*   r*   r+   arrow_table_from_dfi_dataframe  s   
r   )r2   r	   r3   r4   )..)r[   rG   rT   r\   r3   r   ).)r[   r,   rT   r\   r3   r,   )Nra   )r[   rb   rT   r\   r3   rc   )...)r[   rG   rj   r\   rk   rl   r3   r   )r[   r/   rj   r\   rk   rl   r3   r/   )r[   r,   rj   r\   rk   rl   r3   rp   )NNN)r[   rb   rj   r\   rk   rl   r3   rq   ).....)r[   rG   r   rL   r   rL   r   rL   r   rL   r3   r   )....)r[   r,   r   rL   r   rL   r   rL   r   rL   r3   r}   )Nr   rz   r   r   )r[   rb   r   rL   r   rL   r   rL   r   rL   r3   r   )r[   r   r   rL   r   rL   r   rL   r   rL   r3   r}   )Nr   ry   r   r   )r[   r   r   rL   r   rL   r   rL   r   rL   r3   r   )r[   rL   r   rL   r   rL   r   rL   r   rL   r   r{   r3   r}   )
r   rL   r   rL   r   rL   r   rL   r3   r   )r[   r,   r3   r1   )r[   r,   r3   rG   )r   rL   r3   rL   )r[   r#   r3   r   )r[   r,   r3   rL   )r   r   r3   r   )V
__future__r   r   rz   ru   syscollections.abcr   r   r   	functoolsr   pathlibr   typingr   r	   r
   r   r   r   r   narwhals.stable.v1stablev1r9   narwhals.stable.v1.dependenciesr   narwhals.stable.v1.typingr   
_importersr   corer   r   r   r   r   plugin_registryr   version_infor   r   typing_extensionsr   r   r    r!   r   r   r   r   r#   r8   r,   r)   r-   r/   rL   listr0   r1   rp   r<   r=   r>   DataTransformerTyper?   	ExceptionrJ   r_   rn   r|   r{   r}   r   r   r   r   r   rh   r   r   r   r   r   r*   r*   r*   r+   <module>   s    $



$0
!"	
	





	


