Ë
    úmxiˆ)  ã                  óp  — U d dl m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 ej                  rRd dlZd dlmZmZ d dlZd dlZd dlZd dlmZ d d	lmZ ej4                  d
k\  r	d dlmZmZ nd dlmZmZ d dlmZ d dlm Z m!Z! ddgZ" G d„ deeef   «      Z#e G d„ de#eef   «      «       Z$de%d<   d„ Z&y)é    )ÚannotationsN)ÚGenericÚfinalÚoverload)ÚIntoDataFrameT)Ú_reader)Ú
IntoFrameT)ÚAnyÚLiteral)ÚDatasetCache)ÚReader)é   é   )ÚLiteralStringÚSelf)Ú_Backend)ÚDatasetÚ	ExtensionÚLoaderÚloadc                  ó  — e Zd ZU dZded<   ee	 d	 	 	 dd„«       «       Zee	 	 	 	 dd„«       «       Zee	 	 	 	 dd„«       «       Ze	 d	 	 	 	 	 dd„«       Zedd„«       Z	 d	 	 	 	 	 	 	 dd
„Z		 d	 	 	 	 	 dd„Z
edd„«       Zdd„Zy	)r   aW  
    Load example datasets *remotely* from `vega-datasets`_, with caching.

    A new ``Loader`` must be initialized by specifying a backend::

        from altair.datasets import Loader

        load = Loader.from_backend("polars")
        load
        Loader[polars]

    .. _vega-datasets:
        https://github.com/vega/vega-datasets
    ú"Reader[IntoDataFrameT, IntoFrameT]r   c                ó   — y ©N© ©ÚclsÚbackend_names     úN/home/htdocs/ttos/venv/lib/python3.12/site-packages/altair/datasets/_loader.pyÚfrom_backendzLoader.from_backend3   ó   € ð .1ó    c                ó   — y r   r   r   s     r   r    zLoader.from_backend9   r!   r"   c                ó   — y r   r   r   s     r   r    zLoader.from_backend?   s   € ð &)r"   c               óJ   — | j                  t        j                  |«      «      S )ad  
        Initialize a new loader, with the specified backend.

        Parameters
        ----------
        backend_name
            DataFrame package/config used to return data.

            * *polars*: Using `polars defaults`_
            * *pandas*: Using `pandas defaults`_.
            * *pandas[pyarrow]*: Using ``dtype_backend="pyarrow"``
            * *pyarrow*: (*Experimental*)

            .. warning::
                Most datasets use a `JSON format not supported`_ by ``pyarrow``

        Examples
        --------
        Using ``polars``::

            from altair.datasets import Loader

            load = Loader.from_backend("polars")
            cars = load("cars")

            type(cars)
            polars.dataframe.frame.DataFrame

        Using ``pandas``::

            load = Loader.from_backend("pandas")
            cars = load("cars")

            type(cars)
            pandas.core.frame.DataFrame

        Using ``pandas``, backed by ``pyarrow`` dtypes::

            load = Loader.from_backend("pandas[pyarrow]")
            co2 = load("co2")

            type(co2)
            pandas.core.frame.DataFrame

            co2.dtypes
            Date             datetime64[ns]
            CO2             double[pyarrow]
            adjusted CO2    double[pyarrow]
            dtype: object

        .. _polars defaults:
            https://docs.pola.rs/api/python/stable/reference/io.html
        .. _pandas defaults:
            https://pandas.pydata.org/docs/reference/io.html
        .. _JSON format not supported:
            https://arrow.apache.org/docs/python/json.html#reading-json-files
        )Úfrom_readerr   Ú_from_backendr   s     r   r    zLoader.from_backendE   s   € ðz �‰œw×4Ñ4°\ÓBÓCÐCr"   c               ó6   — | j                  | «      }||_        |S r   )Ú__new__r   )r   ÚreaderÚobjs      r   r&   zLoader.from_reader„   s   € à�k‰k˜#ÓˆØˆŒØˆ
r"   Nc               ó>   —  | j                   j                  ||fi |¤ŽS )u7  
        Get a remote dataset and load as tabular data.

        Parameters
        ----------
        name
            Name of the dataset/`Path.stem`_.
        suffix
            File extension/`Path.suffix`_.

            .. note::
                Only needed if ``name`` is available in multiple formats.
        **kwds
            Arguments passed to the underlying read function.

        Examples
        --------
        Using ``polars``::

            from altair.datasets import Loader

            load = Loader.from_backend("polars")
            source = load("iowa_electricity")

            source.columns
            ['year', 'source', 'net_generation']

            source.head(5)
            shape: (5, 3)
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”�
            â”‚ year       â”† source       â”† net_generation â”‚
            â”‚ ---        â”† ---          â”† ---            â”‚
            â”‚ date       â”† str          â”† i64            â”‚
            â•žâ•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•ªâ•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•ªâ•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•¡
            â”‚ 2001-01-01 â”† Fossil Fuels â”† 35361          â”‚
            â”‚ 2002-01-01 â”† Fossil Fuels â”† 35991          â”‚
            â”‚ 2003-01-01 â”† Fossil Fuels â”† 36234          â”‚
            â”‚ 2004-01-01 â”† Fossil Fuels â”† 36205          â”‚
            â”‚ 2005-01-01 â”† Fossil Fuels â”† 36883          â”‚
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

        Using ``pandas``::

            load = Loader.from_backend("pandas")
            source = load("iowa_electricity")

            source.columns
            Index(['year', 'source', 'net_generation'], dtype='object')

            source.head(5)
                    year        source  net_generation
            0 2001-01-01  Fossil Fuels           35361
            1 2002-01-01  Fossil Fuels           35991
            2 2003-01-01  Fossil Fuels           36234
            3 2004-01-01  Fossil Fuels           36205
            4 2005-01-01  Fossil Fuels           36883

        Using ``pyarrow``::

            load = Loader.from_backend("pyarrow")
            source = load("iowa_electricity")

            source.column_names
            ['year', 'source', 'net_generation']

            source.slice(0, 5)
            pyarrow.Table
            year: date32[day]
            source: string
            net_generation: int64
            ----
            year: [[2001-01-01,2002-01-01,2003-01-01,2004-01-01,2005-01-01]]
            source: [["Fossil Fuels","Fossil Fuels","Fossil Fuels","Fossil Fuels","Fossil Fuels"]]
            net_generation: [[35361,35991,36234,36205,36883]]

        .. _Path.stem:
            https://docs.python.org/3/library/pathlib.html#pathlib.PurePath.stem
        .. _Path.suffix:
            https://docs.python.org/3/library/pathlib.html#pathlib.PurePath.suffix
        )r   Údataset)ÚselfÚnameÚsuffixÚkwdss       r   Ú__call__zLoader.__call__Š   s#   € ðn $ˆt�|‰|×#Ñ# D¨&Ñ9°DÑ9Ð9r"   c               ó:   — | j                   j                  ||«      S )a  
        Return the address of a remote dataset.

        Parameters
        ----------
        name
            Name of the dataset/`Path.stem`_.
        suffix
            File extension/`Path.suffix`_.

            .. note::
                Only needed if ``name`` is available in multiple formats.

        .. _Path.stem:
            https://docs.python.org/3/library/pathlib.html#pathlib.PurePath.stem
        .. _Path.suffix:
            https://docs.python.org/3/library/pathlib.html#pathlib.PurePath.suffix

        Examples
        --------
        The returned url will always point to an accessible dataset::

            import altair as alt
            from altair.datasets import Loader

            load = Loader.from_backend("polars")
            load.url("cars")
            "https://cdn.jsdelivr.net/npm/vega-datasets@v2.11.0/data/cars.json"

        We can pass the result directly to a chart::

            url = load.url("cars")
            alt.Chart(url).mark_point().encode(x="Horsepower:Q", y="Miles_per_Gallon:Q")
        )r   Úurl)r.   r/   r0   s      r   r4   z
Loader.urlã   s   € ðP �|‰|×Ñ  fÓ-Ð-r"   c                ó.   — | j                   j                  S )ab  
        Caching of remote dataset requests.

        Configure cache path::

            self.cache.path = "..."

        Download the latest datasets *ahead-of-time*::

            self.cache.download_all()

        Remove all downloaded datasets::

            self.cache.clear()

        Disable caching::

            self.cache.path = None
        )r   Úcache©r.   s    r   r6   zLoader.cache  s   € ð* �|‰|×!Ñ!Ð!r"   c                ó`   — t        | «      j                  › d| j                  j                  › d�S )Nú[ú])ÚtypeÚ__name__r   Ú_namer7   s    r   Ú__repr__zLoader.__repr__$  s+   € Ü�t“*×%Ñ%Ð& a¨¯©×(:Ñ(:Ð';¸1Ð=Ð=r"   ).)r   úLiteral['polars']Úreturnz"Loader[pl.DataFrame, pl.LazyFrame])r   ú$Literal['pandas', 'pandas[pyarrow]']r@   z"Loader[pd.DataFrame, pd.DataFrame])r   úLiteral['pyarrow']r@   zLoader[pa.Table, pa.Table])Úpolars)r   ztype[Loader[Any, Any]]r   r   r@   zLoader[Any, Any])r*   r   r@   r   r   )r/   úDataset | LiteralStringr0   úExtension | Noner1   r
   r@   r   )r/   rD   r0   rE   r@   Ústr)r@   r   )r@   rF   )r<   Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   Úclassmethodr    r&   r2   r4   Úpropertyr6   r>   r   r"   r   r   r   !   sS  … ñð 0Ó/àØà/2ð1Ø,ð1à	+ò1ó ó ð1ð Øð1Ø?ð1à	+ò1ó ó ð1ð Øð)Ø-ð)à	#ò)ó ó ð)ð à>Fð<DØ#ð<DØ3;ð<Dà	ò<Dó ð<Dð| òó ðð $(ðW:à%ðW:ð !ðW:ð
 ðW:ð 
óW:ðx $(ð(.à%ð(.ð !ð(.ð
 
ó(.ðT ò"ó ð"ô,>r"   c                  óà   ‡ — e Zd Ze	 	 d	 	 	 	 	 	 	 	 	 dd„«       Ze	 	 d	 	 	 	 	 	 	 	 	 dd„«       Ze	 	 d	 	 	 	 	 	 	 	 	 d	d„«       Ze	 	 d	 	 	 	 	 	 	 	 	 d
d„«       Z	 	 d	 	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )Ú_Loadc                ó   — y r   r   ©r.   r/   r0   Úbackendr1   s        r   r2   z_Load.__call__*  s   € ð r"   c                ó   — y r   r   rP   s        r   r2   z_Load.__call__3  ó   € ð r"   c                ó   — y r   r   rP   s        r   r2   z_Load.__call__<  rS   r"   c                ó   — y r   r   rP   s        r   r2   z_Load.__call__E  s   € ð r"   c               ó\   •— |€t        ‰| �  ||fi |¤ŽS  | j                  |«      ||fi |¤ŽS r   )Úsuperr2   r    )r.   r/   r0   rQ   r1   Ú	__class__s        €r   r2   z_Load.__call__N  s@   ø€ ð ˆ?Ü‘7Ñ# D¨&Ñ9°DÑ9Ð9à-�4×$Ñ$ WÓ-¨d°FÑC¸dÑCÐCr"   )..)
rQ   ÚNoner/   rD   r0   rE   r1   r
   r@   r   )
rQ   r?   r/   rD   r0   rE   r1   r
   r@   zpl.DataFrame)
rQ   rA   r/   rD   r0   rE   r1   r
   r@   zpd.DataFrame)
rQ   rB   r/   rD   r0   rE   r1   r
   r@   zpa.Table)NN)
rQ   z_Backend | Noner/   rD   r0   rE   r1   r
   r@   z7IntoDataFrameT | pl.DataFrame | pd.DataFrame | pa.Table)r<   rG   rH   r   r2   Ú__classcell__)rX   s   @r   rN   rN   (  s{  ø„ àð $'àðð
 ðà%ðð !ðð ðð 
òó ðð ð $'à%(ðð
 #ðà%ðð !ðð ðð 
òó ðð ð $'à8;ðð
 6ðà%ðð !ðð ðð 
òó ðð ð $'à&)ðð
 $ðà%ðð !ðð ðð 
òó ðð $(à#'ðDð
 !ðDà%ðDð !ðDð ðDð 
A÷Dñ Dr"   rN   z_Load[Any, Any]c                ó˜   — | dk(  r/t        j                  «       }t        j                  |«      at        S dt
        ›d| ›�}t        |«      ‚)Nr   zmodule z has no attribute )r   Úinfer_backendrN   r&   r   r<   ÚAttributeError)r/   r*   Úmsgs      r   Ú__getattr__r_   _  sJ   € Øˆv‚~Ü×&Ñ&Ó(ˆä× Ñ  Ó(ˆÜˆàœ�|Ð#5°d°XÐ>ˆÜ˜SÓ!Ð!r"   )'Ú
__future__r   ÚtypingÚtr   r   r   Únarwhals.stable.v1.typingr   Úaltair.datasetsr   Úaltair.datasets._readerr	   ÚTYPE_CHECKINGÚsysr
   r   ÚpandasÚpdrC   ÚplÚpyarrowÚpaÚaltair.datasets._cacher   r   Úversion_infor   r   Útyping_extensionsr   Úaltair.datasets._typingr   r   Ú__all__r   rN   rJ   r_   r   r"   r   ú<module>rr      s®   ðÞ "ã ß +Ñ +å 4å #Ý .à‡?‚?Ûß#ãÛÛå3Ý.à
×Ñ˜7Ò"ß.Ð.ç9Ý0ß:ð �VÐ
€ôD>ˆW�^ ZÐ/Ñ0ô D>ðN ô0DˆF�> :Ð-Ñ.ó 0Dó ð0Dðf Ó ó"r"   