Ë
    úmxiê(  ã                  ó²   — 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        úL/home/htdocs/ttos/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   € ñ /5Œv×"Ñ" 6Ô*¸$¿,¹,ˆÙ�D—J‘JÑ' $Ñ'Ð'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�‰Ñ5 fÐ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�‰Ñ5 fÐ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õ 6ó6Tð ‡Z�Zðð $ðð ð	ð
 
òó ðð ‡Z�Zðð 7ðð ð	ð
 
òó ðð ‡Z�Zðð %ðð ð	ð
 
òó ðð ‡Z�Zð #'ñð  ðð ð	ð
 
òó ðð #'ñ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-   ø€ äœe™g™oÓ/Ó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Ðà˜D˜6Ð!BÐCUÐBVÐWð ô ! Ó+Ð+ä /°°d·m±mÓ 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ˆØ2°4·=±=°/ÀÈ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6÷RA_ñ A_ñH ƒ|�r   