o
    +&]if8                     @  s  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  mZ d dlmZ ejdkrHd 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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/ ejdkrd dl
m0Z0 nd dlm0Z0 d dl+m1Z1 d dl2m3Z3 dZ4de5d< ee6e1f Z7de5d< g dZ8edZ9edZ:ed Z;e	e<j=d! Z>d"e5d#< ej?d$ej@d%ejAd&ejBd'ejCd(ejDd)ejEd*ejFd+ejGd,i	ZHd-e5d.< 	 d/d0 eHI D ZJd1e5d2< dHd7d8ZKG d9d: d:ee9e:f ZLG d;d< d<eLd= ZMG d>d? d?eLd@ ZNG dAdB dBeZOG dCdD dDZPd<e5dE< dFdG ZQdS )I    )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_FIELDc                 C  s   i | ]\}}||qS  r9   ).0kvr9   r9   T/var/www/html/IGF-ODF-V3/venv/lib/python3.10/site-packages/altair/datasets/_cache.py
<dictcomp>Z   s    
r>   z Mapping[FlFieldStr, type[DType]]_FIELD_TO_DTYPEdfnw.DataFrame[Any]returnIterator[Metadata]c                c  s    t d| jddE dH  dS )z
    Yield rows from ``df``, where each represents a dataset.

    See Also
    --------
    ``altair.datasets._typing.Metadata``
    rC   T)namedN)r	   	iter_rows)r@   r9   r9   r=   _iter_metadata_   s   rF   c                   @  s^   e Zd ZU ded< ded< dddZdddZdddZdddZd ddZe	d!ddZ
dS )"CompressedCacher   fpMutableMapping[_KT, _VT]_mappingrB   r   c                 C     d S Nr9   selfr9   r9   r=   readn       zCompressedCache.readkeyr*   r+   c                C  rK   rL   r9   rN   rQ   r9   r9   r=   __getitem__o   rP   zCompressedCache.__getitem__r   c                 C  s   dd l }|j| jdd S )Nr   rb)mode)gzipopenrH   	__enter__)rN   rV   r9   r9   r=   rX   q   s   zCompressedCache.__enter__Nonec                 G  rK   rL   r9   )rN   argsr9   r9   r=   __exit__v   s   zCompressedCache.__exit__defaultr,   _VT | _Tc                C  s   | j ||S rL   )mappingget)rN   rQ   r\   r9   r9   r=   r_   y   s   zCompressedCache.getc                 C  s   | j s| j |   | j S rL   )rJ   updaterO   rM   r9   r9   r=   r^   |   s   zCompressedCache.mappingNrB   r   )rQ   r*   rB   r+   )rB   r   rB   rY   )rQ   r*   r\   r,   rB   r]   )rB   rI   )__name__
__module____qualname____annotations__rO   rS   rX   r[   r_   propertyr^   r9   r9   r9   r=   rG   j   s   
 




rG   c                   @  sl   e Zd ZdZed Zed dd#d	d
Zd$ddZd%ddZ	e
d&ddZd'ddZd(ddZd)d d!Zd"S )*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   )tpri   (type[MutableMapping[_Dataset, Metadata]]rB   rY   c                C  s   | | _ tt| _d S rL   )rJ   r   list_rotated)rN   ri   r9   r9   r=   __init__   s   zCsvCache.__init__r   c                   sn   dd l }}| }W d    n1 sw   Y  |jdd |D |jd}tt|  fdd|D S )Nr   c                 s  s    | ]}|  V  qd S rL   )decode)r:   bsr9   r9   r=   	<genexpr>   s    z CsvCache.read.<locals>.<genexpr>)dialectc                   s"   i | ]}|d  t  |qS )r   )dict_convert_row)r:   rowheaderrN   r9   r=   r>      s   " z!CsvCache.read.<locals>.<dictcomp>)csv	readlinesreaderunix_dialecttuplenext)rN   rw   fb_linesry   r9   ru   r=   rO      s   
zCsvCache.readrv   Iterable[str]rt   Iterator[tuple[str, Any]]c                c  s`    ddd}t ||D ]"\}}|dr||| fV  q|dkr(|t|fV  q||fV  qd S )NTF)truefalse)is_has_bytes)zip
startswithint)rN   rv   rt   map_tfcolvaluer9   r9   r=   rs      s   

zCsvCache._convert_rowMapping[str, Sequence[Any]]c                 C  s>   | j s| j D ]}| D ]\}}| j | | qq| j S )zColumnar view.)rl   r^   valuesitemsappend)rN   recordr;   r<   r9   r9   r=   rotated   s   zCsvCache.rotatedrQ   r$   r   c                C  s&   |  |d  }r
|S |d}t|)Nz# does not refer to a known dataset.)r_   	TypeError)rN   rQ   metamsgr9   r9   r=   rS      s   
zCsvCache.__getitem__namestrc                C  s.   | | }|d dkrt dst||d S )Nsuffix.parquet
vegafusionurl)r   r
   from_url)rN   r   r   r9   r9   r=   r      s   
zCsvCache.urlc                 C  s(   dt | j d| jrd dS d dS )N<z: 	COLLECTEDREADY>)typerc   rJ   rM   r9   r9   r=   __repr__   s   (zCsvCache.__repr__N)ri   rj   rB   rY   ra   )rv   r   rt   r   rB   r   )rB   r   )rQ   r$   rB   r   )r   r$   rB   r   rB   r   )rc   rd   re   __doc__r.   rH   rr   rm   rO   rs   rg   r   rS   r   r   r9   r9   r9   r=   r&      s    

	

r&   rh   c                   @  sn   e Zd ZdZed Zed ejj	dd'ddZ
d(ddZd)ddZd*ddZd+ddZd,dd Zd-d$d%Zd&S ).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%   )ri   implementationri   )type[MutableMapping[_Dataset, _FlSchema]]r   nw.ImplementationrB   rY   c                C  s   | | _ || _d S rL   )rJ   _implementation)rN   ri   r   r9   r9   r=   rm      s   
zSchemaCache.__init__r   c                 C  s:   dd l }| }||W  d    S 1 sw   Y  d S )Nr   )jsonload)rN   r   r}   r9   r9   r=   rO      s   $zSchemaCache.readrQ   r$   r%   c                C  s   |  |i S rL   )r_   rR   r9   r9   r=   rS      s   zSchemaCache.__getitem__r   dtypestype[DType]	list[str]c                   s<   | |  }r|rdd |D   fdd|  D S t|S )z
        Return column names specfied in ``name``'s schema.

        Parameters
        ----------
        name
            Dataset name.
        *dtypes
            Optionally, only return columns matching the given data type(s).
        c                 S  s   h | ]}t | qS r9   )r8   )r:   ri   r9   r9   r=   	<setcomp>   s    z'SchemaCache.by_dtype.<locals>.<setcomp>c                   s   g | ]
\}}| v r|qS r9   r9   r:   r   tp_strincluder9   r=   
<listcomp>   s    z(SchemaCache.by_dtype.<locals>.<listcomp>)r   rk   )rN   r   r   matchr9   r   r=   by_dtype   s   zSchemaCache.by_dtypeboolc                 C  s"   | j tjjtjjtjjtjjhv S rL   )r   nwImplementationPANDASPYARROWMODINrM   r9   r9   r=   	is_active  s   zSchemaCache.is_active	nw.Schemac                C  s    dd | |   D }t|S )Nc                 s  s"    | ]\}}|t |  fV  qd S rL   )r?   r   r9   r9   r=   rp     s     z%SchemaCache.schema.<locals>.<genexpr>)r   r   Schema)rN   r   itr9   r9   r=   schema  s   
zSchemaCache.schemar   r   dict[str, Any]c                C  s   |d }|   rR| | rR|d }| j r2| |tjtj }r0|dkr(d|iS |dv r0d|iS i S | | }|dv rJddl	m
} d	||d
iS |dkrRd|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   )rN   r   r   r   colsr   r   r9   r9   r=   schema_kwds  s"   
zSchemaCache.schema_kwdsN)ri   r   r   r   rB   rY   ra   )rQ   r$   rB   r%   )r   r$   r   r   rB   r   rB   r   )r   r$   rB   r   )r   r   rB   r   )rc   rd   re   r   r.   rH   rr   r   r   UNKNOWNrm   rO   rS   r   r   r   r   r9   r9   r9   r=   r(      s    
	



r(   r   c                   @  s    e Zd ZU ded< dd	d
ZdS )_SupportsScanMetadatazClassVar[OpenerDirector]_opener
predicatesOneOrSeq[IntoExpr]constraintsUnpack[Metadata]rB   nw.LazyFrame[Any]c                 O  rK   rL   r9   )rN   r   r   r9   r9   r=   _scan_metadata+  s   z$_SupportsScanMetadata._scan_metadataN)r   r   r   r   rB   r   )rc   rd   re   rf   r   r9   r9   r9   r=   r   (  s   
 r   c                   @  s   e Zd ZU dZdZded< eej	de
 d d  Zded	< d4ddZd5ddZd5ddZd6ddZd7ddZed8ddZejd9d"dZd6d#d$Zd:d&d'Zd;d(d)Zd<d+d,Zd<d-d.Zd<d/d0Zd5d1d2Zd3S )=r'   z+Opt-out caching of remote dataset requests.ALTAIR_DATASETS_DIRzClassVar[LiteralString]_ENV_VARXDG_CACHE_HOMEz.cachealtairzClassVar[Path]
_XDG_CACHEry   r   rB   rY   c                C  s
   || _ d S rL   )_rd)rN   ry   r9   r9   r=   rm   8     
zDatasetCache.__init__c                 C  sz   |    |  r
dS | j dddtddd	 
d}tt | }| D ]}|j|v r:|  q/dS )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)rN   sernamesrH   r9   r9   r=   clear;  s    
zDatasetCache.clearc                 C  s   t dd | D }|rtd| fnd}| jj|ddidddd }|	 r4t
d	 d
S t
dt| d t|D ]}| |d | | qBt
d d
S )zp
        Download any missing datasets for latest version.

        Requires **30-50MB** of disk-space.
        c                 s  s    | ]}|j V  qd S rL   )stem)r:   rH   r9   r9   r=   rp   S  s    z,DatasetCache.download_all.<locals>.<genexpr>r   r9   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lenrF   _download_one	path_meta)rN   stemsr   framer   r9   r9   r=   download_allM  s   
zDatasetCache.download_allr   r   r   c                C  s0   |  |}| r| jr|S | |d |S )Nr   )r   existsstatst_sizer   )rN   r   rH   r9   r9   r=   _maybe_downloadd  s   
zDatasetCache._maybe_downloadr   r   rH   c                C  sJ   | j j|}|  ||  W d    |S 1 sw   Y  |S rL   )r   r   rW   touchwrite_bytesrO   )rN   r   rH   r}   r9   r9   r=   r   l  s   
zDatasetCache._download_onec                 C  s:   |    tj| j }rt|n| j}|jd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)rN   usrrH   r9   r9   r=   pathr  s    zDatasetCache.pathsourceStrPath | Nonec                C  s4   |d urt t| tj| j< d S dtj| j< d S N )r   r   resolver  r  r   )rN   r	  r9   r9   r=   r    s   c                C  s   | j |d |d   S )Nr   r   )r  )rN   r   r9   r9   r=   r     s   zDatasetCache.path_metaIterator[Path]c                 c  s    | j  E d H  d S rL   )r  iterdirrM   r9   r9   r=   __iter__  s   zDatasetCache.__iter__c                 C  s2   t | j}|  r| dS | d| j dS )Nz<UNSET>r   r   )r   rc   is_not_activer  as_posix)rN   r   r9   r9   r=   r     s   

zDatasetCache.__repr__r   c                 C  s
   |    S rL   )r  rM   r9   r9   r=   r     r   zDatasetCache.is_activec                 C  s   t j| jdkS r  )r  r  r_   r   rM   r9   r9   r=   r    s   zDatasetCache.is_not_activec                 C  s   t t| ddu S )z:Cache is active, but no files are stored in ``self.path``.N)r|   iterrM   r9   r9   r=   r     s   zDatasetCache.is_emptyc                 C  s"   |   rd| jd}t|d S )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)rN   r   r9   r9   r=   r     s   	zDatasetCache._ensure_activeN)ry   r   rB   rY   rb   )r   r   rB   r   )r   r   rH   r   rB   r   )rB   r   )r	  r
  rB   rY   )rB   r  r   r   )rc   rd   re   r   r   rf   r   r  r  r_   homer  r   rm   r   r   r   r   rg   r  setterr   r  r   r   r  r   r   r9   r9   r9   r=   r'   0  s,   
 





"





r'   r)   c                 C  s*   | dkr	t  atS dtd| }t|)Nr)   zmodule z has no attribute )r&   r)   rc   AttributeError)r   r   r9   r9   r=   __getattr__  s
   r  )r@   rA   rB   rC   )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$   rf   r   r%   __all__r*   r+   r,   __file__parentr.   Int64Float64BooleanStringStructListr   r   Durationr8   r   r?   rF   rG   r&   r(   r   r'   r  r9   r9   r9   r=   <module>   s|    
 



KZ 