
    /_i9              	         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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)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<   y)SupportsGeoInterfacer   __geo_interface__N__name__
__module____qualname____annotations__     P/var/www/html/land_sniper/venv/lib/python3.12/site-packages/altair/utils/data.pyr$   r$   1   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=   D   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_datasets`   s    $$%;<<r,   c                "    || j                   d<   y rD   rE   )rG   values     r-   rB   z,DataTransformerRegistry.consolidate_datasetsd   s    8=45r,   N)returnbool)rI   rK   rJ   None)r'   r(   r)   rF   propertyrB   setterr+   r,   r-   rA   rA   ]   s9    .5= =   > !>r,   rA   c                  6     e Zd ZdZd fdZedd       Z xZS )MaxRowsErrorz+Raised when a data model has too many rows.c               F    || _         t        | 	  | j                          y N)messagesuper__init__)rG   rS   	__class__s     r-   rU   zMaxRowsError.__init__m   s    &r,   c               $    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+   )cls	user_rowsmax_rowsmsgs       r-   from_limit_rowszMaxRowsError.from_limit_rowsq   s/     39+ >))1
 3-	- 	 3xr,   )rS   strrJ   rL   )rY   intrZ   r^   rJ   rP   )r'   r(   r)   __doc__rU   classmethodr\   __classcell__)rV   s   @r-   rP   rP   j   s    5'  r,   rP   c                     y rR   r+   datarZ   s     r-   
limit_rowsre      s    ILr,   c                     y rR   r+   rc   s     r-   re   re      s    HKr,   c                b   | t        t        |      S t        |        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t        j                  ||      | S )z
    Raise MaxRowsError if the data model has more than max_rows.

    If max_rows is None, then do not perform any check.
    )rZ   typeFeatureCollectionfeaturesvalues)r   re   check_data_typer7   r$   r%   r8   r   lenrP   r\   )rd   rZ   rk   ns       r-   re   re      s     |zH55D$,-!!&)-@@++J7F++F	D$	t(^FK*40FAH**1h77Kr,   c                     y rR   r+   rd   rn   fracs      r-   samplerr      s     r,   c                     y rR   r+   rp   s      r-   rr   rr      s     r,   c                     y rR   r+   rp   s      r-   rr   rr      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)rn   rq   rk   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   rr   rl   r   r7   r8   
ValueErrorr^   rm   randomr9   r:   range	to_native)rd   rn   rq   rk   r[   indicess         r-   rr   rr      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_FormatTyperh   Nr&   r+   r,   r-   r   r      s    
r,   r   c                  "    e Zd ZU ded<   ded<   y)_ToFormatReturnUrlDictr]   urlr   formatNr&   r+   r,   r-   r   r      s    	Hr,   r   c                     y rR   r+   rd   prefix	extensionfilenameurlpaths        r-   to_jsonr           r,   c                     y rR   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   r~   rh   )_to_text_kwdsr   r   _data_to_json_string_to_textr   rd   r   r   r   r   kwdsdata_strs          r-   r   r      sM     Hg>D|w'$'''-JDJ&1IJJr,   c                     y rR   r+   r   s        r-   to_csvr     r   r,   c                     y rR   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   r}   r   )r   r   r   _data_to_csv_stringr   r   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_textr]   r   )rd   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   8  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   rk   records)orient.values expected in data dict, but not present.namedzUnrecognized data type: )rl   r9   r{   r7   r$   _from_geo_interfacer   r   to_dictr8   KeyErrorr;   r   rowsrh   rx   )rd   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=   rh   	TypeError)rd   r[   s     r-   rl   rl   T  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                \    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%   )rd   geos     r-   r   r   a  s*     .A-F
#D
)DC!#"7"788r,   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_precisionrk   r   T)	sort_keysrv   zBto_json only works with data expressed as a DataFrame or as a dictNr   )rl   r7   r$   r~   dumpsr   r   r   r   r8   r   r9   r:   r   NotImplementedErrorr   r   )rd   r[   data_nwexcs       r-   r   r   m  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)indexrk   z-values expected in data dict, but not presentr   Nz4pandas is required to convert a dict to a CSV stringTrv   zAto_csv only works with data expressed as a DataFrame or as a dict)rl   r7   r$   rh   r'   r   r   r   r   r8   r   pandasImportErrorr;   	from_dictr9   r:   r   	write_csv)rd   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     se      U  )<dCN##%F&"((+ 
$	%BV$$r,   )r<   r
   rJ   zTypeIs[DataType])..)rd   rL   rZ   
int | NonerJ   r   ).)rd   r.   rZ   r   rJ   r.   )Ni  )rd   DataType | NonerZ   r   rJ   zpartial | DataType)...)rd   rL   rn   r   rq   float | NonerJ   r   )rd   r1   rn   r   rq   r   rJ   r1   )rd   r.   rn   r   rq   r   rJ   SampleReturnType)NNN)rd   r   rn   r   rq   r   rJ   zpartial | SampleReturnType).....)rd   rL   r   r]   r   r]   r   r]   r   r]   rJ   r   )....)rd   r.   r   r]   r   r]   r   r]   r   r]   rJ   r   )Naltair-datar~   {prefix}-{hash}.{extension} )rd   r   r   r]   r   r]   r   r]   r   r]   rJ    partial | _ToFormatReturnUrlDict)rd   z#dict | pd.DataFrame | DataFrameLiker   r]   r   r]   r   r]   r   r]   rJ   r   )Nr   r}   r   r   )rd   z*dict | pd.DataFrame | DataFrameLike | Noner   r]   r   r]   r   r]   r   r]   rJ   r   )rd   r]   r   r]   r   r]   r   r]   r   r]   r   r   rJ   r   )
r   r]   r   r]   r   r]   r   r]   rJ   zdict[str, str])rd   r.   rJ   r3   )rd   r.   rJ   rL   )r   r]   rJ   r]   )rd   r$   rJ   zdict[str, Any])rd   r.   rJ   r]   )r   r   rJ   zpa.Table)V
__future__r   r   r~   ry   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/   r1   r]   listr2   r3   r   r=   r>   r?   DataTransformerTyperA   	ExceptionrP   re   rr   r   r   r   r   r   r   r   r   rl   r   r   r   r   r   r+   r,   r-   <module>r      s   "    
 > >   S S S   ? 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 	>9 0 
 L 
 L	 K 
 K9=
,6B 
@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>	90,>%r,   