
    g\9              	         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 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mZ d dlmc 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jP                  dk\  r	d dlm)Z)m*Z* nd dl+m)Z)m*Z* ejP                  dk\  r	d dlm,Z,m-Z- nd dl+m,Z,m-Z- er@ejP                  dk\  rd dlm.Z. nd dl+m.Z. ejP                  dk\  rd dlm/Z/ nd dl+m/Z/ d dl0Z1d dl2Z3e* G d de)             Z4ee5eef   ee4e!f   Z6de7d<    ede6      Z8 ede      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>d>dZ? e-d      Z@ ede<e      ZAee,e6e@f   eAf   ZB G d d e'eBeAf         ZC G d! d"eD      ZEed?d@d#       ZFedAdBd$       ZF	 dC	 	 	 	 	 dDd%ZFe	 dE	 	 	 	 	 	 	 dFd&       ZGe	 d?	 	 	 	 	 	 	 dGd'       ZGe	 d?	 	 	 	 	 	 	 dHd(       ZG	 	 	 dI	 	 	 	 	 	 	 dJd)ZGed*   ZH G d+ d,e      ZI G d- d.e      ZJe	 	 	 	 	 dK	 	 	 	 	 	 	 	 	 	 	 dLd/       ZKe	 	 	 	 dM	 	 	 	 	 	 	 	 	 	 	 dNd0       ZK	 	 	 	 	 dO	 	 	 	 	 	 	 	 	 	 	 dPd1ZKe	 	 	 	 	 dK	 	 	 	 	 	 	 	 	 	 	 dLd2       ZLe	 	 	 	 dM	 	 	 	 	 	 	 	 	 	 	 dQd3       ZL	 	 	 	 	 dR	 	 	 	 	 	 	 	 	 	 	 dSd4ZL	 	 	 	 	 	 	 	 	 	 	 	 	 	 dTd5ZMdUd6ZNdVd7ZOdWd8ZPdXd9ZQdYd:ZRdZd;ZSdZd<ZTd[d=ZUy)\    )annotationsN)MutableMappingSequence)partial)Path)TYPE_CHECKINGAnyCallable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<   y)SupportsGeoInterfacer   __geo_interface__N__name__
__module____qualname____annotations__     F/var/www/openai/venv/lib/python3.12/site-packages/altair/utils/data.pyr$   r$   :   s    %%r,   r$   r"   DataType	TDataType)boundTIntoDataFrameVegaLiteDataDictToValuesReturnTypec                    t        | t        t        f      xs0 t        t        j                  | dd      t        j
                        S )NT)eager_or_interchange_onlypass_through)
isinstancedictr$   nwfrom_native	DataFrame)objs    r-   is_data_typer=   M   s:    cD"678 J
sdN
= r,   PRc                  L    e Zd ZddiZedd       Zej                  dd       Zy)DataTransformerRegistryconsolidate_datasetsTc                     | j                   d   S NrB   _global_settings)selfs    r-   rB   z,DataTransformerRegistry.consolidate_datasetsi   s    $$%;<<r,   c                "    || j                   d<   y rD   rE   )rG   values     r-   rB   z,DataTransformerRegistry.consolidate_datasetsm   s    8=45r,   N)returnbool)rI   rK   rJ   None)r'   r(   r)   rF   propertyrB   setterr+   r,   r-   rA   rA   f   s9    .5= =   > !>r,   rA   c                      e Zd ZdZy)MaxRowsErrorz+Raised when a data model has too many rows.N)r'   r(   r)   __doc__r+   r,   r-   rP   rP   s   s    5r,   rP   c                     y Nr+   datamax_rowss     r-   
limit_rowsrW   w   s    ILr,   c                     y rS   r+   rT   s     r-   rW   rW   y   s    HKr,   c                L   | t        t              S t        |        fd}t        | t              r/| j
                  d   dk(  r| j
                  d   }n6| j
                  }n)t        | t              rd| v r| d   }n| S t        |       } | }t        |      kD  r |        | S )z
    Raise MaxRowsError if the data model has more than max_rows.

    If max_rows is None, then do not perform any check.
    )rV   c                 &    d d} t        |       )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.)rP   )msgrV   s    r-   raise_max_rows_errorz(limit_rows.<locals>.raise_max_rows_error   s)    ))1
 3-	- 	 3r,   typeFeatureCollectionfeaturesvalues)	r   rW   check_data_typer7   r$   r%   r8   r   len)rU   rV   r\   r`   s    `  r-   rW   rW   {   s     |zH55D  $,-!!&)-@@++J7F++F	D$	t(^FK*40Fh 6Kr,   c                     y rS   r+   rU   nfracs      r-   samplerg      s     r,   c                     y rS   r+   rd   s      r-   rg   rg      s     r,   c                     y rS   r+   rd   s      r-   rg   rg      s     r,   c                (   | t        t        ||      S t        |        t        |       r| j                  ||      S t	        | t
              rLd| v rG| d   }|s&|d}t        |      t        |t        |      z        }t        j                  ||      }d|iS yt        j                  | d      } |s&|d}t        |      t        |t        |       z        }t        j                  t        t        |             |      }| |   j                         S )zBReduce the size of the data model by sampling without replacement.N)re   rf   r`   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   rg   ra   r   r7   r8   
ValueErrorintrb   randomr9   r:   range	to_native)rU   re   rf   r`   r[   indicess         r-   rg   rg      s    |v..D4 {{QT{**	D$	t(^F<UC$S/)s6{*+]]61-Ff%% >>$40D<NCS/!s4y !mmE#d),a0G=""$$r,   )csvjsonc                      e Zd ZU ded<   y)_FormatDict_FormatTyper]   Nr&   r+   r,   r-   rv   rv      s    
r,   rv   c                  "    e Zd ZU ded<   ded<   y)_ToFormatReturnUrlDictstrurlrv   formatNr&   r+   r,   r-   ry   ry      s    	Hr,   ry   c                     y rS   r+   rU   prefix	extensionfilenameurlpaths        r-   to_jsonr           r,   c                     y rS   r+   r~   s        r-   r   r           !r,   c                    t        ||||      }| t        t        fi |S t        |       }t	        |fi |dt        d      iS )zGWrite the data model to a .json file and return a url based data model.r|   rt   r]   )_to_text_kwdsr   r   _data_to_json_string_to_textrv   rU   r   r   r   r   kwdsdata_strs          r-   r   r      sM     Hg>D|w'$'''-JDJ&1IJJr,   c                     y rS   r+   r~   s        r-   to_csvr     r   r,   c                     y rS   r+   r~   s        r-   r   r     r   r,   c                    t        ||||      }| t        t        fi |S t        |       }t	        |fi |dt        d      iS )zFWrite the data model to a .csv file and return a url based data model.r|   rs   r   )r   r   r   _data_to_csv_stringr   rv   r   s          r-   r   r     sM     Hg>D|v&&&&t,IDI%1HIIr,   c                    t        |       }|j                  |||      }t        |      j                  | d       t	        t        ||            }t        ||d      S )N)r   hashr   zutf-8)encoding)r{   r|   )_compute_data_hashr|   r   
write_textrz   ry   )rU   r   r   r   r   r|   	data_hashr{   s           r-   r   r   ,  sZ     #4(If9	RHNdW5
d7H%
&C!#"@AAr,   c                   | |||dS )Nr   r   r   r   r+   r   s       r-   r   r   ;  s    9(W^__r,   c                   t        |        t        j                  | d      }t        |t              rdt        |      iS t        |      rt        |      }d|j                  d      iS t        |t              rd|vrd}t        |      |S t        | t        j                        rt        |       } d| j                  d      iS dt        |        }t        |      )	z0Replace a DataFrame by a data model with values.T)r6   r`   records)orient.values expected in data dict, but not present.namedzUnrecognized data type: )ra   r9   rq   r7   r$   _from_geo_interfacer   r   to_dictr8   KeyErrorr;   r   rowsr]   rm   )rU   data_nativer[   s      r-   	to_valuesr   ?  s    D,,t$7K+34-k:;;	[	)/<+--Y-?@@	K	&;&BC3-	D",,	'*40$))$)/00 )d5or,   c                L    t        |       sdt        |        }t        |      y )Nz@Expected dict, DataFrame or a __geo_interface__ attribute, got: )r=   r]   	TypeError)rU   r[   s     r-   ra   ra   W  s-    PQUVZQ[P\]n r,   c                j    t        j                  | j                               j                         d d S )N    )hashlibsha256encode	hexdigest)r   s    r-   r   r   `  s(    >>(//+,668"==r,   c                X    t        |       rt        |       } t        | j                        S )z
    Santize a ``__geo_interface__`` w/ pre-santize step for ``pandas`` if needed.

    Notes
    -----
    Split out to resolve typing issues related to:
    - Intersection types
    - ``typing.TypeGuard``
    - ``pd.DataFrame.__getattr__``
    )r   r   r   r%   )rU   s    r-   r   r   d  s'     4 (.!$"8"899r,   c                
   t        |        t        | t              rt        j                  t        |             S t        |       rt        |       } | j                  dd      S t        | t              r+d| vrd}t        |      t        j                  | d   d      S 	 t        j                  | d      }t        |      }t        j                  |j!                  d            S # t        $ r}d	}t        |      |d
}~ww xY w)z6Return a JSON string representation of the input data.r      )r   double_precisionr`   r   T)	sort_keysrk   zBto_json only works with data expressed as a DataFrame or as a dictNr   )ra   r7   r$   rt   dumpsr   r   r   r   r8   r   r9   r:   r   NotImplementedErrorr   r   )rU   r[   data_nwexcs       r-   r   r   t  s    D$,-zz-d344	T	"(.||9r|BB	D$	4BC3-zz$x.D990..$7 *'2G::glll.//	  0R!#&C/0s   C& &	D/C==Dc                L   t        |        t        | t              r(dt        t              j                  d}t        |      t        |       rt        |       } | j                  d      S t        | t              rDd| vrd}t        |      	 ddl}|j                  j                  | d         j                  d      S 	 t        j                   | d
      }|j%                         S # t        $ r}d	}t        |      |d}~ww xY w# t"        $ r}d}t        |      |d}~ww xY 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)indexr`   z-values expected in data dict, but not presentr   Nz4pandas is required to convert a dict to a CSV stringTrk   zAto_csv only works with data expressed as a DataFrame or as a dict)ra   r7   r$   r]   r'   r   r   r   r   r8   r   pandasImportErrorr;   	from_dictr9   r:   r   	write_csv)rU   r[   pdr   r   s        r-   r   r     s+   D$,-34==@ A=> 	
 "#&&	T	"(.{{{''	D$	4AC3-	, ||%%d8n5<<5<II0..$7   	,HCc"+	,  0Q!#&C/0s0   C( D (	D1C??D	D#DD#c                    ddl }dD ]<  }t        | |d      }t        |      s |       }t        ||j                        s:|c S  t               }|j                  |       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)dfi_dfpaconvert_method_nameconvert_methodresultpis         r-   arrow_table_from_dfi_dataframer     sa      U )<dCN##%F&"((+  U 
$	%BV$$r,   )r<   r	   rJ   zTypeIs[DataType])..)rU   rL   rV   
int | NonerJ   r   ).)rU   r.   rV   r   rJ   r.   )Ni  )rU   DataType | NonerV   r   rJ   zpartial | DataType)...)rU   rL   re   r   rf   float | NonerJ   r   )rU   r1   re   r   rf   r   rJ   r1   )rU   r.   re   r   rf   r   rJ   SampleReturnType)NNN)rU   r   re   r   rf   r   rJ   zpartial | SampleReturnType).....)rU   rL   r   rz   r   rz   r   rz   r   rz   rJ   r   )....)rU   r.   r   rz   r   rz   r   rz   r   rz   rJ   ry   )Naltair-datart   {prefix}-{hash}.{extension} )rU   r   r   rz   r   rz   r   rz   r   rz   rJ    partial | _ToFormatReturnUrlDict)rU   z#dict | pd.DataFrame | DataFrameLiker   rz   r   rz   r   rz   r   rz   rJ   ry   )Nr   rs   r   r   )rU   z*dict | pd.DataFrame | DataFrameLike | Noner   rz   r   rz   r   rz   r   rz   rJ   r   )rU   rz   r   rz   r   rz   r   rz   r   rz   r|   rv   rJ   ry   )
r   rz   r   rz   r   rz   r   rz   rJ   zdict[str, str])rU   r.   rJ   r3   )rU   r.   rJ   rL   )r   rz   rJ   rz   )rU   zSupportsGeoInterface | AnyrJ   zdict[str, Any])rU   r.   rJ   rz   )r   r   rJ   zpa.Table)V
__future__r   r   rt   ro   syscollections.abcr   r   	functoolsr   pathlibr   typingr   r	   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/   r1   rz   listr2   r3   r   r=   r>   r?   DataTransformerTyperA   	ExceptionrP   rW   rg   rw   rv   ry   r   r   r   r   r   ra   r   r   r   r   r   r+   r,   r-   <module>r      s   "    
 4  	 	 	    ? 3 2  ,w22=w--8
7"!,
7"$/ &8 & & cNM#7F)  Kx0	)?"sDcNDc3h$88	99 )  !%S%S#XT#s(^@T0T*U%U V I VS(](;TAB & cNC!3'{8Q;7:; 	>n-@!-CD 	>69 6 
 L 
 L	 K 
 K9=,
,,6,,^ 
@C
#1= 
 
DG
'5A 
 
>A
!/; 
 !%
%% %  	%D m$) Y 
 

  	
   
 
 !
!! ! 	!
 ! ! 
! !1K
KK K 	K
 K &K  

  	
   
 
 !
-!! ! 	!
 ! ! 
! 8<1J
4JJ J 	J
 J &J B
BB B 	B
 B B B`0>: 0,>%r,   