
    ȯei(                        d Z ddlmZ ddlZddlmZ ej                  rddlm	Z	 ddl
ZddlZddlZddlmZ ddlmZ  G d d	      Z G d
 d      Z e       Zy)z
Data object interface for Altair datasets.

This module provides a `data` object that allows accessing datasets as attributes
and calling them with backend options, similar to the vega_datasets interface.
    )annotationsN)Loader)LiteralString)_Backend)Datasetc                  v   e Zd ZdZdddZdd	 	 	 	 	 ddZedd       Zej                  dd       Zedd       Z	dddd	Z
dd
Zej                  	 	 	 	 	 	 dd       Zej                  	 	 	 	 	 	 dd       Zej                  	 	 	 	 	 	 dd       Zej                  dd	 	 	 	 	 dd       Zdd	 	 	 	 	 ddZy)DatasetAccessora  
    Accessor for individual datasets that can be called with backend options.

    This object provides access to a specific dataset with support for
    different backends and autocompletion.

    Call this object to load the dataset:
        dataset_accessor(engine="polars", **kwds)

    Parameters for __call__:
        engine : {"polars", "pandas", "pandas[pyarrow]", "pyarrow"}, optional
            The backend to use for loading the dataset.
        **kwds : Any
            Additional arguments passed to the loader.

    Examples
    --------
    >>> from altair.datasets import data
    >>>
    >>> # Load with default backend
    >>> cars_df = data.cars()
    >>>
    >>> # Load with specific backend
    >>> cars_polars = data.cars(engine="polars")
    >>> cars_pandas = data.cars(engine="pandas")
    >>> # Note: pandas[pyarrow] backend requires pyarrow package
    >>>
    >>> # Get URL
    >>> url = data.cars.url
    >>>
    >>> # Use explicit load method
    >>> cars_df = data.cars.load(engine="polars")
    c                    dd l }|| _        || _        |  |j                  | j                        | _        d| d| d| d| d| d}|| _        y )Nr   z
Load the 'a,  ' dataset.

Parameters
----------
engine : {"polars", "pandas", "pandas[pyarrow]", "pyarrow"}, optional
    The backend to use for loading the dataset.
**kwds : Any
    Additional arguments passed to the loader.

Returns
-------
DataFrame or Table
    The loaded dataset.

Examples
--------
>>> data.z)()  # Load with default backend
>>> data.z9(engine="polars")  # Load with specific backend
>>> data.z!.url  # Get dataset URL
>>> data.z/.load(engine="polars")  # Explicit load method
)inspect_name_backend	signature
_call_impl__signature____doc__)selfnamebackendr   	docstrings        W/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/altair/datasets/_data.py__init__zDatasetAccessor.__init__<   ss    "
")$..t?"4& )
   

 

 

 '	, !    N)enginec               n    |rt        j                  |      n| j                  } || j                  fi |S N)r   from_backend_loaderr   )r   r   kwdsloads       r   r   zDatasetAccessor._call_impl\   s0     /5v""6*$,,DJJ'$''r   c                    t        | d      r| j                  S t        j                  | j                        | _        | j                  S )N_prev_loader)hasattrr!   r   r   r   r   s    r   r   zDatasetAccessor._loadere   s;    4($$$"//>   r   c                    || _         y r   )r!   )r   values     r   r   zDatasetAccessor._loaderl   s
    !r   c                L    | j                   j                  | j                        S )aZ  
        Get the URL for this dataset.

        Returns
        -------
        str
            The URL of the dataset.

        Examples
        --------
        >>> from altair.datasets import data
        >>> cars_url = data.cars.url
        >>> print(cars_url)
        https://cdn.jsdelivr.net/npm/vega-datasets@v3.2.1/data/cars.json
        )r   urlr   r#   s    r   r'   zDatasetAccessor.urlp   s    " ||

++r   c               *     | j                   dd|i|S )a  
        Load the dataset with the specified engine.

        This method provides the same functionality as calling the accessor directly,
        but with more explicit parameter autocompletion in some IDEs.

        Parameters
        ----------
        engine : {"polars", "pandas", "pandas[pyarrow]", "pyarrow"}, optional
            The backend to use for loading the dataset.
        **kwds : Any
            Additional arguments passed to the loader.

        Returns
        -------
        DataFrame or Table
            The loaded dataset.

        Examples
        --------
        >>> from altair.datasets import data
        >>> cars_df = data.cars.load(engine="polars")
        >>> movies_df = data.movies.load(engine="pandas")
        r    r   r   r   r   s      r   r   zDatasetAccessor.load   s    2 t5f555r   c                <    d| j                    d| j                   dS )NzDatasetAccessor('z', default_engine='z'))r   r   r#   s    r   __repr__zDatasetAccessor.__repr__   s!    "4::,.A$--PRSSr   c                    y r   r)   r+   s      r   __call__zDatasetAccessor.__call__        r   c                    y r   r)   r+   s      r   r/   zDatasetAccessor.__call__   r0   r   c                    y r   r)   r+   s      r   r/   zDatasetAccessor.__call__   s     r   c                    y r   r)   r+   s      r   r/   zDatasetAccessor.__call__   s     r   c               *     | j                   dd|i|S )a  
        Load the dataset with the specified engine.

        Parameters
        ----------
        engine : {{"polars", "pandas", "pandas[pyarrow]", "pyarrow"}}, optional
            The backend to use for loading the dataset.
        **kwds
            Additional arguments passed to the loader.

        Returns
        -------
        The loaded dataset as a DataFrame/Table from the specified engine.

        Examples
        --------
        >>> from altair.datasets import data
        >>>
        >>> # Load with default engine
        >>> df = data.cars()
        >>>
        >>> # Load with specific engine
        >>> df = data.cars(engine="polars")
        r   r)   r*   r+   s      r   r/   zDatasetAccessor.__call__   s    < t5f555r   pandas)r   r   r   r   returnNone)r   z_Backend | Noner   t.Anyr7   r9   )r7   Loader[t.Any, t.Any])r%   r:   r7   r8   r7   str)r   zt.Literal['polars']r   r9   r7   zpl.DataFrame)r   z&t.Literal['pandas', 'pandas[pyarrow]']r   r9   r7   zpd.DataFrame)r   zt.Literal['pyarrow']r   r9   r7   zpa.Table)__name__
__module____qualname__r   r   r   propertyr   setterr'   r   r-   toverloadr/   r)   r   r   r	   r	      s    D!F #'(  ( 	(
 
( ! ! ^^" " , ,$ 15 66T ZZ $ 	
 
  ZZ 7 	
 
  ZZ % 	
 
  ZZ #'   	
 
  #'6  6 	6
 
6r   r	   c                  ^     e Zd ZdZd
ddZddZd fdZddZddZddZ	ddZ
dd	Z xZS )
DataObjectaq  
    Main data object that provides access to all datasets as attributes.

    This is the primary interface for loading Altair datasets. It provides
    a simple, intuitive way to access datasets with autocompletion support.

    Examples
    --------
    >>> from altair.datasets import data
    >>>
    >>> # Access datasets as attributes with autocompletion
    >>> cars_df = data.cars()
    >>> movies_df = data.movies(engine="pandas")
    >>>
    >>> # Get URLs
    >>> cars_url = data.cars.url
    >>> movies_url = data.movies.url
    >>>
    >>> # Set default engine for all datasets
    >>> data.set_default_engine("polars")
    >>> penguins_df = data.penguins()  # Uses polars engine
    >>>
    >>> # List available datasets
    >>> available_datasets = data.list_datasets()
    >>> print(f"Available datasets: {len(available_datasets)}")
    Available datasets: 72
    c                .    || _         i | _        d | _        y r   )r   
_accessors_dataset_names)r   r   s     r   r   zDataObject.__init__   s    "):<DHr   c                    | j                   B	 ddlm}  |       }t        |j                  j                               | _         | j                   S | j                   S # t        $ r g | _         Y | j                   S w xY w)z6Get the list of available dataset names from metadata.r   )CsvCache)rH   altair.datasets._cacherJ   listmappingkeys	Exception)r   rJ   caches      r   _get_dataset_nameszDataObject._get_dataset_names  su    &); 
&*5==+=+=+?&@# """t"""  )&(#""")s   5A A98A9c                \    t        t        | 	               }| j                         }||z   S )z7Return list of available attributes for autocompletion.)rL   super__dir__rQ   )r   standard_attrsdataset_names	__class__s      r   rT   zDataObject.__dir__  s-    ego/0//1--r   c                    | j                         }||vr|d d }d| d| }t        |      t        || j                        | j                  |<   | j                  |   S )N
   z	Dataset 'z!' not found. Available datasets: )rQ   AttributeErrorr	   r   rG   )r   r   rV   available_datasets	error_msgs        r   __getattr__zDataObject.__getattr__  sr    //1}$!.s!3D6!BCUBVW  !++ /dmm Dt$$r   c                F    || _         | j                  j                          y)a  
        Set the default engine for all datasets.

        Parameters
        ----------
        engine : {"polars", "pandas", "pandas[pyarrow]", "pyarrow"}
            The backend to use as default for all datasets.

        Examples
        --------
        >>> from altair.datasets import data
        >>> data.set_default_engine("polars")
        >>> # Now all datasets will use polars by default
        >>> cars_df = data.cars()  # Uses polars
        >>> movies_df = data.movies()  # Uses polars
        N)r   rG   clear)r   r   s     r   set_default_enginezDataObject.set_default_engine#  s    " r   c                "    | j                         S )a  
        Get a list of all available dataset names.

        Returns
        -------
        list[str]
            List of available dataset names.

        Examples
        --------
        >>> from altair.datasets import data
        >>> datasets = data.list_datasets()
        >>> print(f"Available datasets: {len(datasets)}")
        Available datasets: 72
        >>> print(datasets[:5])  # First 5 datasets
        ['airports', 'annual_precip', 'anscombe', 'barley', 'birdstrikes']
        )rQ   r#   s    r   list_datasetszDataObject.list_datasets8  s    $ &&((r   c                    | j                   S )a  
        Get the current default engine.

        Returns
        -------
        str
            The current default engine.

        Examples
        --------
        >>> from altair.datasets import data
        >>> data.set_default_engine("pandas")
        >>> print(data.get_default_engine())
        pandas
        >>> data.set_default_engine("polars")
        >>> print(data.get_default_engine())
        polars
        )r   r#   s    r   get_default_enginezDataObject.get_default_engineL  s    & }}r   c                Z    t        | j                               }d| j                   d| dS )Nz!AltairDataObject(default_engine='z', datasets=))lenrQ   r   )r   dataset_counts     r   r-   zDataObject.__repr__a  s/    D335624==/m_\]^^r   r5   )r   r   r7   r8   )r7   zlist[Dataset | LiteralString])r7   z	list[str])r   r   r7   r	   )r   r   r7   r8   )r7   r   r;   )r=   r>   r?   r   r   rQ   rT   r]   r`   rb   rd   r-   __classcell__)rW   s   @r   rE   rE      s2    8I
#.
% *)(*_r   rE   )r   
__future__r   typingrB   altair.datasets._loaderr   TYPE_CHECKINGtyping_extensionsr   r6   pdpolarsplpyarrowpaaltair.datasets._readerr   altair.datasets._typingr   r	   rE   datar)   r   r   <module>rw      sS    #  *??/0/F6 F6RA_ A_H |r   