o
    +&]i)                     @  s4  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j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 deeef Z#eG dd de#eef Z$de%d< dd Z&dS )    )annotationsN)Genericfinaloverload)IntoDataFrameT)_reader)
IntoFrameT)AnyLiteral)DatasetCache)Reader)      )LiteralStringSelf)_Backend)Dataset	ExtensionLoaderloadc                   @  s   e Zd ZU dZded< ee	d-d.d	d
Zeed/dd
Zeed0dd
Ze	d1d2dd
Zed3ddZ	d4d5d#d$Z		d4d6d&d'Z
ed7d)d*Zd8d+d,ZdS )9r   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   .backend_nameLiteral['polars']return"Loader[pl.DataFrame, pl.LazyFrame]c                C     d S N clsr   r   r   U/var/www/html/IGF-ODF-V3/venv/lib/python3.10/site-packages/altair/datasets/_loader.pyfrom_backend3      zLoader.from_backend$Literal['pandas', 'pandas[pyarrow]']"Loader[pd.DataFrame, pd.DataFrame]c                C  r   r   r   r   r   r   r    r!   9   r"   Literal['pyarrow']Loader[pa.Table, pa.Table]c                C  r   r   r   r   r   r   r    r!   ?   r"   polarsr   type[Loader[Any, Any]]r   Loader[Any, Any]c                C  s   |  t|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   r   r   r    r!   E   s   =readerr   c                C  s   |  | }||_|S r   )__new__r   )r   r,   objr   r   r    r*      s   
zLoader.from_readerNnameDataset | LiteralStringsuffixExtension | Nonekwdsr	   r   c                K  s   | 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)selfr/   r1   r3   r   r   r    __call__   s   WzLoader.__call__strc                C  s   | 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)r5   r/   r1   r   r   r    r8      s   (z
Loader.urlr   c                 C  s   | 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r5   r   r   r    r9     s   zLoader.cachec                 C  s   t | j d| jj dS )N[])type__name__r   _namer:   r   r   r    __repr__$  s   zLoader.__repr__).)r   r   r   r   )r   r#   r   r$   )r   r%   r   r&   )r'   )r   r(   r   r   r   r)   )r,   r   r   r   r   )r/   r0   r1   r2   r3   r	   r   r   )r/   r0   r1   r2   r   r7   )r   r   )r   r7   )r>   
__module____qualname____doc____annotations__r   classmethodr!   r*   r6   r8   propertyr9   r@   r   r   r   r    r   !   s2   
 >\*c                      st   e Zd Ze		ddddZe		ddddZe		ddddZe		ddddZ		d d! fddZ  ZS )"_Load.backendNoner/   r0   r1   r2   r3   r	   r   r   c                K  r   r   r   r5   r/   r1   rH   r3   r   r   r    r6   *     z_Load.__call__r   pl.DataFramec                K  r   r   r   rJ   r   r   r    r6   3  rK   r#   pd.DataFramec                K  r   r   r   rJ   r   r   r    r6   <  rK   r%   pa.Tablec                K  r   r   r   rJ   r   r   r    r6   E  rK   N_Backend | None7IntoDataFrameT | pl.DataFrame | pd.DataFrame | pa.Tablec                  s6   |d u rt  j||fi |S | |||fi |S r   )superr6   r!   rJ   	__class__r   r    r6   N  s   )..)
rH   rI   r/   r0   r1   r2   r3   r	   r   r   )
rH   r   r/   r0   r1   r2   r3   r	   r   rL   )
rH   r#   r/   r0   r1   r2   r3   r	   r   rM   )
rH   r%   r/   r0   r1   r2   r3   r	   r   rN   )NN)
rH   rO   r/   r0   r1   r2   r3   r	   r   rP   )r>   rA   rB   r   r6   __classcell__r   r   rR   r    rG   (  s(    rG   z_Load[Any, Any]c                 C  s6   | dkrt  }t|atS dtd| }t|)Nr   zmodule z has no attribute )r   infer_backendrG   r*   r   r>   AttributeError)r/   r,   msgr   r   r    __getattr___  s   
rX   )'
__future__r   typingtr   r   r   narwhals.stable.v1.typingr   altair.datasetsr   altair.datasets._readerr   TYPE_CHECKINGsysr	   r
   pandaspdr'   plpyarrowpaaltair.datasets._cacher   r   version_infor   r   typing_extensionsr   altair.datasets._typingr   r   __all__r   rG   rD   rX   r   r   r   r    <module>   s6    
  	3