
    [if8                    f   U d dl mZ d dl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mZ d dlmc mZ d dlmZ ej*                  dk\  rd d	l
mZ nd d	lmZ erd d
lmZmZmZmZmZmZ d dlm Z  d dl
m!Z!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z,m-Z- ej*                  dk\  rd dl
m.Z. nd dlm.Z. ej*                  dk\  rd dl
m/Z/ nd dlm/Z/ ej*                  dk\  rd dl
m0Z0 nd dlm0Z0 d dl+m1Z1 d dl2m3Z3 dZ4de5d<   ee6e1f   Z7de5d<   g dZ8 ed      Z9 ed      Z: ed       Z; e	e<      jz                  d!z  Z>d"e5d#<   ej~                  d$ej                  d%ej                  d&ej                  d'ej                  d(ej                  d)ej                  d*ej                  d+ej                  d,i	ZHd-e5d.<   	 eHj                         D  ci c]  \  } }|| 
 c}} ZJd/e5d0<   d@d1ZK G d2 d3ee9e:f         ZL G d4 d5eLd6         ZM G d7 d8eLd9         ZN G d: d;e      ZO G d< d=      ZPd5e5d><   d? ZQyc c}} w )A    )annotationsN)defaultdict)	find_spec)Path)TYPE_CHECKINGClassVarTypeVarcast)AltairDatasetsError)      )Protocol)IterableIteratorMappingMutableMappingMutableSequenceSequence)IOBase)AnyFinal)OpenerDirector)StrPath)DType)IntoExpr)DatasetMetadata)Unpack)r      )LiteralString)r   
   )	TypeAlias)
FlFieldStr)OneOrSeqzDataset | LiteralStringr"   _Dataset	_FlSchema)CsvCacheDatasetCacheSchemaCache	csv_cache_KT_VT_T	_metadatazFinal[Path]_METADATA_DIRintegernumberbooleanstringobjectarraydatedatetimedurationz Mapping[type[DType], FlFieldStr]_DTYPE_TO_FIELDz Mapping[FlFieldStr, type[DType]]_FIELD_TO_DTYPEc             #  X   K   t        d| j                  d            E d{    y7 w)z
    Yield rows from ``df``, where each represents a dataset.

    See Also
    --------
    ``altair.datasets._typing.Metadata``
    Iterator[Metadata]T)namedN)r
   	iter_rows)dfs    g/var/www/html/userprofiledev.eatanceapp.com/venv/lib/python3.12/site-packages/altair/datasets/_cache.py_iter_metadatarA   _   s$      (",,T,*BCCCs    *(*c                  \    e Zd ZU ded<   ded<   ddZddZddZddZdd	Ze	dd
       Z
y)CompressedCacher   fpMutableMapping[_KT, _VT]_mappingc                     y N selfs    r@   readzCompressedCache.readn   s    3    c                    y rH   rI   rK   keys     r@   __getitem__zCompressedCache.__getitem__o   s    srM   c                `    dd l }|j                  | j                  d      j                         S )Nr   rb)mode)gzipopenrD   	__enter__)rK   rU   s     r@   rW   zCompressedCache.__enter__q   s%    yyty,6688rM   c                     y rH   rI   )rK   argss     r@   __exit__zCompressedCache.__exit__v   s    rM   c               :    | j                   j                  ||      S rH   )mappingget)rK   rP   defaults      r@   r]   zCompressedCache.gety   s    ||W--rM   c                    | j                   s)| j                   j                  | j                                | j                   S rH   )rF   updaterL   rJ   s    r@   r\   zCompressedCache.mapping|   s+    }}MM  -}}rM   Nreturnr   )rP   r+   rb   r,   )rb   r   rb   None)rP   r+   r^   r-   rb   z_VT | _T)rb   rE   )__name__
__module____qualname____annotations__rL   rQ   rW   rZ   r]   propertyr\   rI   rM   r@   rC   rC   j   s6    H&&29
.  rM   rC   c                  z    e Zd ZdZedz  Zed   d	 	 	 ddZddZ	 	 	 	 	 	 ddZ	e
dd       Zdd	Zdd
ZddZy)r'   a  
    `csv`_, `gzip`_ -based, lazy metadata lookup.

    Used as a fallback for 2 scenarios:

    1. ``url(...)`` when no optional dependencies are installed.
    2. ``(Loader|load)(...)`` when the backend is missing* ``.parquet`` support.

    Notes
    -----
    *All backends *can* support ``.parquet``, but ``pandas`` requires an optional dependency.

    .. _csv:
        https://docs.python.org/3/library/csv.html
    .. _gzip:
        https://docs.python.org/3/library/gzip.html
    zmetadata.csv.gzr%   r   )tpc               D     |       | _         t        t              | _        y rH   )rF   r   list_rotated)rK   rl   s     r@   __init__zCsvCache.__init__   s    
 =?DCNtCTrM   c           
     ,   dd l }| 5 }|j                         }d d d        |j                  d D        |j                        }t	        t        |            }|D ci c]!  }|d   t        | j                  ||            # c}S # 1 sw Y   nxY wc c}w )Nr   c              3  <   K   | ]  }|j                           y wrH   )decode).0bss     r@   	<genexpr>z CsvCache.read.<locals>.<genexpr>   s     ;7RRYY[7s   )dialect)csv	readlinesreaderunix_dialecttuplenextdict_convert_row)rK   rx   fb_linesrz   headerrows          r@   rL   zCsvCache.read   s    QkkmG ;7;SEUEUVtF|$HNOAT..vs;<<OO	 T Ps   B&BBc             #     K   ddd}t        ||      D ];  \  }}|j                  d      r
|||   f !|dk(  r|t        |      f 6||f = y w)NTF)truefalse)is_has_bytes)zip
startswithint)rK   r   r   map_tfcolvalues         r@   r   zCsvCache._convert_row   sa      /fc*JC~~o.6%=((3u:o%5j  +s   AAc                    | j                   sU| j                  j                         D ]8  }|j                         D ]#  \  }}| j                   |   j	                  |       % : | j                   S )zColumnar view.)ro   r\   valuesitemsappend)rK   recordkvs       r@   rotatedzCsvCache.rotated   sY     }},,--/"LLNDAqMM!$++A. + 0 }}rM   c               N    | j                  |d       x}r|S |d}t        |      )Nz# does not refer to a known dataset.)r]   	TypeError)rK   rP   metamsgs       r@   rQ   zCsvCache.__getitem__   s4    88C&&4&K:;nrM   c               f    | |   }|d   dk(  r t        d      st        j                  |      |d   S )Nsuffix.parquet
vegafusionurl)r   r   from_url)rK   namer   s      r@   r   zCsvCache.url   s9    Dz>Z'	,0G%..t44E{rM   c                \    dt        |       j                   d| j                  rd dS d dS )N<z: 	COLLECTEDREADY>)typere   rF   rJ   s    r@   __repr__zCsvCache.__repr__   s8    4:&&'r+)TTUVVG)TTUVVrM   N)rl   z(type[MutableMapping[_Dataset, Metadata]]rb   rd   ra   )r   Iterable[str]r   r   rb   zIterator[tuple[str, Any]])rb   zMapping[str, Sequence[Any]])rP   r%   rb   r   )r   r%   rb   strrb   r   )re   rf   rg   __doc__r/   rD   r~   rp   rL   r   ri   r   rQ   r   r   rI   rM   r@   r'   r'      s    $ 
*	*B
 8<<R7SU 5U 
	UP
!#
!*7
!	"
!  WrM   r'   rk   c                      e Zd ZdZedz  Zed   ej                  j                  d	 	 	 	 	 ddZ
ddZddZddZdd	Zdd
ZddZy)r)   a  
    `json`_, `gzip`_ -based, lazy schema lookup.

    - Primarily benefits ``pandas``, which needs some help identifying **temporal** columns.
    - Utilizes `data package`_ schema types.
    - All methods return falsy containers instead of exceptions

    .. _json:
        https://docs.python.org/3/library/json.html
    .. _gzip:
        https://docs.python.org/3/library/gzip.html
    .. _data package:
        https://github.com/vega/vega-datasets/pull/631
    zschemas.json.gzr%   r&   )rl   implementationc               *     |       | _         || _        y rH   )rF   _implementation)rK   rl   r   s      r@   rp   zSchemaCache.__init__   s     >@T2@rM   c                \    dd l }| 5 }|j                  |      cd d d        S # 1 sw Y   y xY w)Nr   )jsonload)rK   r   r   s      r@   rL   zSchemaCache.read   s    Q99Q< TTs   "+c               &    | j                  |i       S rH   )r]   rO   s     r@   rQ   zSchemaCache.__getitem__   s    xxR  rM   c                    | |   x}r@|r>|D ch c]  }t         |    }}|j                         D cg c]  \  }}||v s| c}}S t        |      S c c}w c c}}w )z
        Return column names specfied in ``name``'s schema.

        Parameters
        ----------
        name
            Dataset name.
        *dtypes
            Optionally, only return columns matching the given data type(s).
        )r9   r   rn   )rK   r   dtypesmatchrl   includer   tp_strs           r@   by_dtypezSchemaCache.by_dtype   sf     $ZEV5;<Vrr*VG<+0;;=N=KCFg<MC=NN; =Ns   AA Ac                    | j                   t        j                  j                  t        j                  j                  t        j                  j
                  t        j                  j                  hv S rH   )r   nwImplementationPANDASPYARROWMODINrJ   s    r@   	is_activezSchemaCache.is_active  sV    ##$$%%##%%	(
 
 	
rM   c               `    d | |   j                         D        }t        j                  |      S )Nc              3  @   K   | ]  \  }}|t        |          f  y wrH   )r:   )rt   r   r   s      r@   rv   z%SchemaCache.schema.<locals>.<genexpr>  s$     UBT;3sOF+-.BTs   )r   r   Schema)rK   r   its      r@   schemazSchemaCache.schema  s'    U$t*BRBRBTUyy}rM   c               z   |d   }| j                         r| |   r|d   }| j                  j                         rD| j                  |t        j
                  t        j                        x}r|dk(  rd|iS |dv rd|iS i S | j                  |      j                         }|dv rddl	m
} d	 ||
      iS |dk(  rd|iS i S )Ndataset_namer   z.jsonconvert_dates>   .csv.tsvparse_datesr   )ConvertOptionsconvert_options)column_typesr   r   )r   r   is_pandas_liker   r   DateDatetimer   to_arrowpyarrow.csvr   )rK   r   r   r   colsr   r   s          r@   schema_kwdszSchemaCache.schema_kwds  s    (>>d(^F##224==rwwDD4D( /66#33 -t44 	 T*335--:
 .~6/RSSz)$f--	rM   N)rl   z)type[MutableMapping[_Dataset, _FlSchema]]r   znw.Implementationrb   rd   ra   )rP   r%   rb   r&   )r   r%   r   ztype[DType]rb   z	list[str]rb   bool)r   r%   rb   z	nw.Schema)r   r   rb   zdict[str, Any])re   rf   rg   r   r/   rD   r~   r   r   UNKNOWNrp   rL   rQ   r   r   r   r   rI   rM   r@   r)   r)      ss     
*	*B
 9==T8U,.,=,=,E,E	A 6A *	A
 
A !"
rM   r)   r   c                  ,    e Zd ZU ded<   	 	 	 	 	 	 ddZy)_SupportsScanMetadatazClassVar[OpenerDirector]_openerc                     y rH   rI   )rK   
predicatesconstraintss      r@   _scan_metadataz$_SupportsScanMetadata._scan_metadata+  s    rM   N)r   zOneOrSeq[IntoExpr]r   zUnpack[Metadata]rb   znw.LazyFrame[Any])re   rf   rg   rh   r   rI   rM   r@   r   r   (  s%    %% - >N 	 rM   r   c                  L   e Zd ZU dZdZded<    eej                  j                  d ej                         dz              dz  j                         Zded	<   dd
ZddZddZddZddZedd       Zej(                  dd       ZddZddZd dZd!dZd!dZd!dZddZy)"r(   z+Opt-out caching of remote dataset requests.ALTAIR_DATASETS_DIRzClassVar[LiteralString]_ENV_VARXDG_CACHE_HOMEz.cachealtairzClassVar[Path]
_XDG_CACHEc                   || _         y rH   )_rd)rK   rz   s     r@   rp   zDatasetCache.__init__8  s	    *0rM   c                   | j                          | j                         ry| j                  j                         j	                  dd      j                  d      j	                  t        j                  dd      j                  d            j                         j                  d      }t        t           |j                               }| D ]!  }|j                  |v s|j                          # y)z&Delete all previously cached datasets.Nshar   
sha_suffix)_ensure_activeis_emptyr   r   selectuniquer   
concat_straliascollect
get_columnsetr   to_listr   unlink)rK   sernamesrD   s       r@   clearzDatasetCache.clear;  s    ==?HH##%VE8$VE]VBMM%288FGWYZ% 	 C'Bww%		 rM   c                   t        d | D              }|r&t        j                  d      j                  |       fnd} | j                  j
                  |ddij                  ddd      j                  d      j                         }|j                         rt        d       y	t        d
t        |       d       t        |      D ]&  }| j                  |d   | j                  |             ( t        d       y	)zp
        Download any missing datasets for latest version.

        Requires **30-50MB** of disk-space.
        c              3  4   K   | ]  }|j                     y wrH   )stem)rt   rD   s     r@   rv   z,DatasetCache.download_all.<locals>.<genexpr>S  s     -"bggs   r   rI   is_imageFr   r   zAlready downloaded all datasetsNzDownloading z missing datasets...zFinished downloads)r|   r   r   is_inr   r   r   r   r   r   printlenrA   _download_one	path_meta)rK   stemsr   framer   s        r@   download_allzDatasetCache.download_allM  s     ---9>u++E235B
#DHH##Z@%@VE8U+VE]WY	 	 >>34SZL(<=>"5)DtE{DNN4,@A *"#rM   c                   | j                  |      }|j                         r|j                         j                  r|S | j	                  |d   |      S )Nr   )r  existsstatst_sizer  )rK   r   rD   s      r@   _maybe_downloadzDatasetCache._maybe_downloadd  sN    ^^D! 			 1 1 	
 ##DK4	
rM   c                   | j                   j                  j                  |      5 }|j                          |j	                  |j                                d d d        |S # 1 sw Y   |S xY wrH   )r   r   rV   touchwrite_bytesrL   )rK   r   rD   r   s       r@   r  zDatasetCache._download_onel  sP    XX""3'1HHJNN1668$ ( 	 ( 	s   0A  A*c                    | j                          t        j                  j                  | j                        x}rt        |      n| j                  }|j                  dd       |S )a  
        Returns path to datasets cache.

        Defaults to (`XDG_CACHE_HOME`_)::

            "$XDG_CACHE_HOME/altair/"

        But can be configured using the environment variable::

            "$ALTAIR_DATASETS_DIR"

        You can set this for the current session via::

            from pathlib import Path
            from altair.datasets import load

            load.cache.path = Path.home() / ".altair_cache"

            load.cache.path.relative_to(Path.home()).as_posix()
            ".altair_cache"

        You can *later* disable caching via::

           load.cache.path = None

        .. _XDG_CACHE_HOME:
            https://specifications.freedesktop.org/basedir-spec/latest/#variables
        T)parentsexist_ok)r   osenvironr]   r   r   r   mkdir)rK   usrrD   s      r@   pathzDatasetCache.pathr  sO    < 	"$**.."??3?T#Ydoo
-	rM   c                   |>t        t        |      j                               t        j                  | j
                  <   y dt        j                  | j
                  <   y N )r   r   resolver  r  r   )rK   sources     r@   r  zDatasetCache.path  s>    (+DL,@,@,B(CBJJt}}%(*BJJt}}%rM   c               2    | j                   |d   |d   z   z  S )Nr   r   )r  )rK   r   s     r@   r  zDatasetCache.path_meta  s    yyDK$x.899rM   c              #  T   K   | j                   j                         E d {    y 7 wrH   )r  iterdirrJ   s    r@   __iter__zDatasetCache.__iter__  s     99$$&&&s   (&(c                    t        |       j                  }| j                         r| dS | d| j                  j	                         dS )Nz<UNSET>r   r   )r   re   is_not_activer  as_posix)rK   r   s     r@   r   zDatasetCache.__repr__  sK    Dz""V7##V1TYY//14A66rM   c                $    | j                          S rH   )r"  rJ   s    r@   r   zDatasetCache.is_active  s    %%'''rM   c                Z    t         j                  j                  | j                        dk(  S r  )r  r  r]   r   rJ   s    r@   r"  zDatasetCache.is_not_active  s    zz~~dmm,22rM   c                0    t        t        |       d      du S )z:Cache is active, but no files are stored in ``self.path``.N)r}   iterrJ   s    r@   r   zDatasetCache.is_empty  s    DJ%--rM   c                Z    | j                         rd| j                  d}t        |      y )NzMCache is unset.
To enable dataset caching, set the environment variable:
    z

You can set this for the current session via:
    from pathlib import Path
    from altair.datasets import load

    load.cache.path = Path.home() / '.altair_cache')r"  r   
ValueError)rK   r   s     r@   r   zDatasetCache._ensure_active  s?    }}' (FG  S/!  rM   N)rz   r   rb   rd   rc   )r   r   rb   r   )r   r   rD   r   rb   r   )rb   r   )r  zStrPath | Nonerb   rd   )rb   zIterator[Path]r   r   )re   rf   rg   r   r   rh   r   r  r  r]   homer  r   rp   r   r  r  r  ri   r  setterr  r   r   r   r"  r   r   rI   rM   r@   r(   r(   0  s    5(=H%=RZZ^^,idiikH.DEFQgi  1$.
    D 
[[+ +:'7(3."rM   r(   r*   c                Z    | dk(  rt               at        S dt        d| }t        |      )Nr*   zmodule z has no attribute )r'   r*   re   AttributeError)r   r   s     r@   __getattr__r.    s7    {J	 |#5dX>S!!rM   )r?   znw.DataFrame[Any]rb   r<   )R
__future__r   r  syscollectionsr   importlib.utilr   pathlibr   typingr   r   r	   r
   narwhals.stable.v1stablev1r   altair.datasets._exceptionsr   version_infor   typing_extensionscollections.abcr   r   r   r   r   r   ior   r   r   urllib.requestr   	_typeshedr   narwhals.stable.v1.dtypesr   narwhals.stable.v1.typingr   altair.datasets._typingr   r   r   r    r"   r#   !altair.vegalite.v6.schema._typingr$   r%   rh   r   r&   __all__r+   r,   r-   __file__parentr/   Int64Float64BooleanStringStructListr   r   Durationr9   r   r:   rA   rC   r'   r)   r   r(   r.  )r   r   s   00r@   <module>rM     s   " 	 
 # $  9 9   ;w*  !-!/29
7"!,
7"(3
7"$/2:3Hi3"3
?3Iy3
B enenT]!(^22[@{ @ HHiJJJJ	IIxIIxGGWGGVKKKK51  %**,5,TQAqD,51 
DhsCx( 2HW56 HWVW/"9: Wt H  N" N"b  "U5s   	H-