
    ȯeif8                    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    X/var/www/html/glpi_dashboard/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           c                    y rH   rI   rK   keys     r@   __getitem__zCompressedCache.__getitem__o   rM   rN   c                `    dd l }|j                  | j                  d      j                         S )Nr   rb)mode)gzipopenrD   	__enter__)rK   rV   s     r@   rX   zCompressedCache.__enter__q   s%    yyty,6688rN   c                     y rH   rI   )rK   argss     r@   __exit__zCompressedCache.__exit__v   s    rN   c               :    | j                   j                  ||      S rH   )mappingget)rK   rQ   defaults      r@   r^   zCompressedCache.gety   s    ||W--rN   c                    | j                   s)| j                   j                  | j                                | j                   S rH   )rF   updaterL   rJ   s    r@   r]   zCompressedCache.mapping|   s+    }}MM  -}}rN   Nreturnr   )rQ   r+   rc   r,   )rc   r   rc   None)rQ   r+   r_   r-   rc   z_VT | _T)rc   rE   )__name__
__module____qualname____annotations__rL   rR   rX   r[   r^   propertyr]   rI   rN   r@   rC   rC   j   s6    H&&29
.  rN   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   rm   s     r@   __init__zCsvCache.__init__   s    
 =?DCNtCTrN   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     ;RRYY[;s   )dialect)csv	readlinesreaderunix_dialecttuplenextdict_convert_row)rK   ry   fb_linesr{   headerrows          r@   rL   zCsvCache.read   s     	$QkkmG	$;7;SEUEUVtF|$HNOAT..vs;<<OO		$ 	$ 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   sf      /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.)rp   r]   valuesitemsappend)rK   recordkvs       r@   rotatedzCsvCache.rotated   sc     }},,--/ /"LLN /DAqMM!$++A.// }}rN   c               N    | j                  |d       x}r|S |d}t        |      )Nz# does not refer to a known dataset.)r^   	TypeError)rK   rQ   metamsgs       r@   rR   zCsvCache.__getitem__   s4    88C&&4&K:;nrN   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{rN   c                \    dt        |       j                   d| j                  rd dS d dS )N<z: 	COLLECTEDREADY>)typerf   rF   rJ   s    r@   __repr__zCsvCache.__repr__   s8    4:&&'r+)TTUVVG)TTUVVrN   N)rm   z(type[MutableMapping[_Dataset, Metadata]]rc   re   rb   )r   Iterable[str]r   r   rc   zIterator[tuple[str, Any]])rc   zMapping[str, Sequence[Any]])rQ   r%   rc   r   )r   r%   rc   strrc   r   )rf   rg   rh   __doc__r/   rD   r   rq   rL   r   rj   r   rR   r   r   rI   rN   r@   r'   r'      s    $ 
*	*B
 8<<R7SU 5U 
	UP
!#
!*7
!	"
!  WrN   r'   rl   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&   )rm   implementationc               *     |       | _         || _        y rH   )rF   _implementation)rK   rm   r   s      r@   rq   zSchemaCache.__init__   s     >@T2@rN   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<	  	  	 s   "+c               &    | j                  |i       S rH   )r^   rP   s     r@   rR   zSchemaCache.__getitem__   s    xxR  rN   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   ro   )rK   r   dtypesmatchrm   includer   tp_strs           r@   by_dtypezSchemaCache.by_dtype   sa     $ZEV5;<rr*<G<+0;;=NKC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    ##$$%%##%%	(
 
 	
rN   c               `    d | |   j                         D        }t        j                  |      S )Nc              3  @   K   | ]  \  }}|t        |          f  y wrH   )r:   )ru   r   r   s      r@   rw   z%SchemaCache.schema.<locals>.<genexpr>  s!     U;3sOF+-.Us   )r   r   Schema)rK   r   its      r@   schemazSchemaCache.schema  s'    U$t*BRBRBTUyy}rN   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--	rN   N)rm   z)type[MutableMapping[_Dataset, _FlSchema]]r   znw.Implementationrc   re   rb   )rQ   r%   rc   r&   )r   r%   r   ztype[DType]rc   z	list[str]rc   bool)r   r%   rc   z	nw.Schema)r   r   rc   zdict[str, Any])rf   rg   rh   r   r/   rD   r   r   r   UNKNOWNrq   rL   rR   r   r   r   r   rI   rN   r@   r)   r)      ss     
*	*B
 9==T8U,.,=,=,E,E	A 6A *	A
 
A !"
rN   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    rN   N)r   zOneOrSeq[IntoExpr]r   zUnpack[Metadata]rc   znw.LazyFrame[Any])rf   rg   rh   ri   r   rI   rN   r@   r   r   (  s%    %% - >N 	 rN   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   r{   s     r@   rq   zDatasetCache.__init__8  s	    *0rN   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%			rN   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)ru   rD   s     r@   rw   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) 	BDtE{DNN4,@A	B"#rN   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	
rN   c                   | j                   j                  j                  |      5 }|j                          |j	                  |j                                d d d        |S # 1 sw Y   |S xY wrH   )r   r   rW   touchwrite_bytesrL   )rK   r   rD   r   s       r@   r  zDatasetCache._download_onel  sU    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
-	rN   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}}%rN   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9rN   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   rf   is_not_activer  as_posix)rK   r   s     r@   r   zDatasetCache.__repr__  sK    Dz""V7##V1TYY//14A66rN   c                $    | j                          S rH   )r#  rJ   s    r@   r   zDatasetCache.is_active  s    %%'''rN   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2rN   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%--rN   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/!  rN   N)r{   r   rc   re   rd   )r   r   rc   r   )r   r   rD   r   rc   r   )rc   r   )r  zStrPath | Nonerc   re   )rc   zIterator[Path]r   r   )rf   rg   rh   r   r   ri   r   r  r  r^   homer  r   rq   r   r  r  r  rj   r  setterr  r!  r   r   r#  r   r   rI   rN   r@   r(   r(   0  s    5(=H%=RZZ^^,idiikH.DEFQgi  1$.
    D 
[[+ +:'7(3."rN   r(   r*   c                Z    | dk(  rt               at        S dt        d| }t        |      )Nr*   zmodule z has no attribute )r'   r*   rf   AttributeError)r   r   s     r@   __getattr__r/    s7    {J	 |#5dX>S!!rN   )r?   znw.DataFrame[Any]rc   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%   ri   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>rN     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QAqD51 
DhsCx( 2HW56 HWVW/"9: Wt H  N" N"b  "U5s   	H-