
    ȯeiI                       U d 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
 ddlmZ ddlmZ dd	lmZmZmZmZmZmZmZ dd
l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%m&Z&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z- ddl.m/Z/m0Z0 er9ddl1Z1ddlm2Z2m3Z3 ddlm4Z4 ddl5Z6ddl7Z8ddl9Z:ddl.m;Z;m<Z<m=Z=m>Z> ddl?m@Z@mAZAmBZB ddlCmDZD e1j                  dk\  r	ddlmFZFmGZG nddlHmFZFmGZG e1j                  dk\  rddlmIZI nddlHmIZI e1j                  dk\  rddlmJZJ nddlHmJZJ e1j                  dk\  rdd lmKZK ndd lHmKZK ed!   ZLd"eMd#<   ed$   ZNd"eMd%<   ed&   ZOd"eMd'<   eeNd(f   ZPd"eMd)<   eeLePeOf   ZQd"eMd*<   ed+   ZRd"eMd,<   ed-   ZSd"eMd.<   ed/   ZTd"eMd0<   ed1   ZUd"eMd2<   ed3   ZVd"eMd4<   eeLeNeOeReSeTeUeVf   ZWd"eMd5<    eGd6eLeNeOeReSeTeUeV	      ZXeed7   d8f   ZYd"eMd9<   	  G d: d;eee/f         ZZ	 	 	 	 	 	 dVd<Z[ G d= d>eZee/f         Z\e	 dWd?d?d@	 	 	 	 	 	 	 	 	 dXdA       Z]ed?d?d@	 	 	 	 	 	 	 	 	 dYdB       Z]	 dZdej                  j                  d@	 	 	 	 	 	 	 	 	 d[dCZ]dDdE	 	 	 d\dFZ`ed]dG       Zaed^dH       Zaed_dI       Zad`dJZadadKZbdbdLZc	 	 	 	 	 	 dcdMZd	 	 	 	 dddNZededOZf	 	 	 	 dfdPZgedgdQ       ZhedhdR       ZhedidS       ZhdjdTZhdkdUZiy)la  
Backend for ``alt.datasets.Loader``.

Notes
-----
Extending would be more ergonomic if `read`, `scan`, `_constraints` were available under a single export::

    from altair.datasets import ext, reader
    import polars as pl

    impls = (
        ext.read(pl.read_parquet, ext.is_parquet),
        ext.read(pl.read_csv, ext.is_csv),
        ext.read(pl.read_json, ext.is_json),
    )
    user_reader = reader(impls)
    user_reader.dataset("airports")
    )annotations)Counter)Mapping)import_module)	find_spec)chain)Path)TYPE_CHECKINGAnyClassVarGenericLiteralcastoverload)build_opener)v1)IntoDataFrameTIntoExpr)Requirement)	_readimpl)CsvCacheDatasetCacheSchemaCache_iter_metadata)
is_parquet)AltairDatasetsErrormodule_not_found)
IntoFrameTis_availableN)CallableSequence)OpenerDirector)BaseImplRReadScan)Dataset	ExtensionMetadata)OneOrSeq)      )TypeIsTypeVar)r+      )Unpack)r+      )LiteralString)r+   
   )	TypeAliaspolarsr4   _Polarspandas_Pandaspyarrow_PyArrowpandas[pyarrow]
_PandasAny_Backendcudf_CuDFdask_Daskduckdb_DuckDBibis_Ibispyspark_PySpark
_NwSupport_NwSupportT)	supportedunsupportedSequence[Dataset]_SupportProfilec                     e Zd ZU dZded<   	 ded<   	 ded<   	 ded	<   	  e       Zd
ed<    ee      j                  dz  dz  Z
ded<   	 	 	 	 	 	 	 	 	 	 d%dZd&dZd'dZd(dZed)d       Zd*dZ	 d+	 	 	 	 	 	 	 d,dZ	 d+	 	 	 	 	 d-dZd.dZeddd/d       Zed0d       Zddd1dZ	 d+	 	 	 	 	 d2d Zd3d!Zed4d"       Z	 	 	 	 	 	 d5d#Z	 	 	 	 	 	 d6d$Zy)7Readerz
    Modular file reader, targeting remote & local tabular resources.

    .. warning::
        Use ``reader(...)`` instead of instantiating ``Reader`` directly.
    Sequence[Read[IntoDataFrameT]]_readSequence[Scan[IntoFrameT]]_scanstr_namenw.Implementation_implementationzClassVar[OpenerDirector]_opener	_metadatazmetadata.parquetzClassVar[Path]_metadata_pathc                ^    || _         || _        || _        || _        t	        |      | _        y )N)implementation)rQ   rS   rU   rW   r   _schema_cache)selfreadscannamer\   s        Y/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/altair/datasets/_reader.py__init__zReader.__init__   s.     


-(G    c                "   ddl m} d}d}d ||j                  d | j                  D              |       }| j                  r/|d ||j                  d | j                  D              |       z  }d	| j
                   d
| j                  d| S )Nr   )indentz    
zread
c              3  2   K   | ]  }t        |        y wNrT   .0els     rb   	<genexpr>z"Reader.__repr__.<locals>.<genexpr>   s     &D2s2w&D   z
scan
c              3  2   K   | ]  }t        |        y wri   rj   rk   s     rb   rn   z"Reader.__repr__.<locals>.<genexpr>   s     -K"c"g-Kro   zReader[z] )textwraprf   joinrQ   rS   rU   rW   )r^   rf   PREFIXNLbodys        rb   __repr__zReader.__repr__   s    #rww&D&DDfMNO::hvbgg-K

-K&KVTUVVDBt';';&>bGGrd   c               :    | j                  || j                        S ri   )_solverQ   r^   metas     rb   read_fnzReader.read_fn   s    {{4,,rd   c               x    t        |t              r|ndt        |      i}| j                  || j                        S )Nsuffix)
isinstancer   _into_suffixrx   rS   ry   s     rb   scan_fnzReader.scan_fn   s1    !$0txdAS6T{{4,,rd   c                    t        |       S ri   )r   r^   s    rb   cachezReader.cache   s    D!!rd   c                    dt        |      v r:dt        t        |      j                        v rd| d| d| d| }t        |      ||)zuHandle PyArrow date parsing errors with informative error messages, see https://github.com/apache/arrow/issues/41488.zCSV conversion error to dater9   z-PyArrow cannot parse date format in dataset 'z'. This is a known limitation of PyArrow's CSV reader for non-ISO date formats.

Alternatives:
1. Use a different backend: data.z(engine='pandas') or data.zV(engine='polars')
2. Convert dates manually after loading as strings

Original error: )rT   type
__module__r   )r^   era   messages       rb   _handle_pyarrow_date_errorz!Reader._handle_pyarrow_date_error   ss    )SV3	SGF
 9
 @v F4 5969STXSY Z##$#'  &g.A5rd   Nc                  | j                  ||      }t        t        |            }| j                  |      }| j	                  ||      }| j
                  j                         r%| j
                  j                  |      }	  ||fi |S | j                  j                  |d         5 }
	  ||
fi |cd d d        S # t        $ r}	| j                  |	|        d }	~	ww xY w# t        $ r}	| j                  |	|        d }	~	ww xY w# 1 sw Y   y xY w)Nurl)_querynextr   r{   _merge_kwdsr   	is_active_maybe_download	Exceptionr   rX   open)r^   ra   r}   kwdsframerz   fnfn_kwdsfpr   fs              rb   datasetzReader.dataset   s    D&)N5)*\\$""4.::!++D1B"(((
 ""4;/ 1a+7+ 	  //48 ! 33At< sB    B; 'D)C;	CCC	D (C;;D  DDc               <   | j                  ||      }t        t        |            }t        |j	                               r t        d      st        j                  |      |d   }t        |t              r|S dt        |      j                  d|d}t        |      )N
vegafusionr   zExpected 'str' but got z
from .)r   r   r   r   itemsr   r   from_urlr~   rT   r   __name__	TypeError)r^   ra   r}   r   rz   r   msgs          rb   r   z
Reader.url   s     D&)N5)*djjl#L,F%..t445kc3J+DI,>,>+AqQCC. rd   c                   ddl }ddlm} | j                  |      j	                  d      j                  d      j                  dd      }|d   }d| d	| }|j                  |       y)
a  
        Learn more about a dataset, opening `vega-datasets/datapackage.md`_ with the default browser.

        Additional info *may* include: `description`_, `schema`_, `sources`_, `licenses`_.

        .. _vega-datasets/datapackage.md:
            https://github.com/vega/vega-datasets/blob/main/datapackage.md
        .. _description:
            https://datapackage.org/standard/data-resource/#description
        .. _schema:
            https://datapackage.org/standard/table-schema/#schema
        .. _sources:
            https://datapackage.org/standard/data-package/#sources
        .. _licenses:
            https://datapackage.org/standard/data-package/#licenses
        r   N)VERSIONS	file_namer    zvega-datasetsz,https://github.com/vega/vega-datasets/blob/vz/datapackage.md#)
webbrowseraltair.utilsr   r   
get_columnitemreplacer   )r^   ra   r   r   reftagr   s          rb   open_markdownzReader.open_markdown   sf    " 	)kk$**;7<<Q?GGRP'<SEAQRUQVWrd   .)showc                    y ri    r^   r   s     rb   profilezReader.profile  s    ILrd   c                    y ri   r   r   s     rb   r   zReader.profile  s    7:rd   Fc               \   t        t        j                  d | j                  D                    } | j	                         j
                  dg| }t        j                  d | j                  D              }t        ||       t        ||      d}|rddl	}|j                  |dd	       y|S )
z
        Describe which datasets can be loaded as tabular data.

        Parameters
        ----------
        show
            Print a densely formatted repr *instead of* returning a mapping.
        c              3  4   K   | ]  }|j                     y wri   )_relevant_columnsrl   impls     rb   rn   z!Reader.profile.<locals>.<genexpr>  s     N4 6 6N   dataset_namec              3  4   K   | ]  }|j                     y wri   )_include_exprr   s     rb   rn   z!Reader.profile.<locals>.<genexpr>!  s     $ODT%7%7$Or   )rK   rJ   r   NTF)compact
sort_dicts)
setr   from_iterablerQ   _scan_metadataselectnwany_horizontal_dataset_namespprint)r^   r   relevant_columnsr   inc_exprresultr   s          rb   r   zReader.profile  s     N4::NN
 -##%,,^O>NO$$$ODJJ$OO)%(;'x8#
 MM&$5MArd   c                   t        ||      } | j                  di |j                         }|j                         s|S d|}t	        |      )a  
        Query a tabular version of `vega-datasets/datapackage.json`_.

        Applies a filter, erroring out when no results would be returned.

        .. _vega-datasets/datapackage.json:
            https://github.com/vega/vega-datasets/blob/main/datapackage.json
        zFound no results for:
    r   )_into_constraintsr   collectis_empty
ValueError)r^   ra   r}   constraintsr   r   s         rb   r   zReader._query-  sS     (f5###2k2::<~~L/?CS/!rd   c                   | j                   j                         r&| j                   j                  |      x}r	|r||z  n|}|S )z
        Extend user-provided arguments with dataset & library-specfic defaults.

        .. important:: User-provided arguments have a higher precedence.
        )r]   r   schema_kwds)r^   rz   r   schemas       rb   r   zReader._merge_kwds@  sD     '')((44T::F:$(6D=fDrd   c                    | j                   }t        j                   | j                  |      |            j	                         S ri   )rZ   r   from_nativer   lazy)r^   r   s     rb   _metadata_framezReader._metadata_frameL  s6      ~~.dll2.r2388::rd   c                Z    |s|r | j                   j                  |i |S | j                   S ri   )r   filter)r^   
predicatesr   s      rb   r   zReader._scan_metadataQ  s3     .4''..
JkJJ###rd   c                   |j                         fd|D        }t        |d      x}r)t        |      r|j                  || j                        |S t        j                  || j                        )z
        Return the first function that satisfies dataset constraints.

        See Also
        --------
        ``altair.datasets._readimpl.BaseImpl.unwrap_or_skip``
        c              3  J   K   | ]  }|j                        xs  y wri   )unwrap_or_skip)rl   r   r   somes     rb   rn   z Reader._solve.<locals>.<genexpr>c  s&     Mt1D1DU1K)K)KdMs   ##N)r   r   _is_errfrom_tabularrU   r   )r^   rz   implsit	fn_or_errr   r   s        @@rb   rx   zReader._solveX  sg     

MuMR&9&y!,,T4::>>!..tTZZ@@rd   )
r_   rP   r`   rR   ra   rT   r\   rV   returnNoner   rT   )rz   r)   r   zCallable[..., IntoDataFrameT])rz   zMetadata | Path | strr   zCallable[..., IntoFrameT])r   r   )r   r   ra   rT   r   r   ri   )ra   Dataset | LiteralStringr}   Extension | Noner   r   r   r   )ra   r   r}   r   r   rT   )ra   r'   r   r   )r   zLiteral[False]r   rM   )r   zLiteral[True]r   r   )r   boolr   z_SupportProfile | None)ra   r   r}   r   r   znw.DataFrame[IntoDataFrameT])rz   r)   r   dict[str, Any]r   zMapping[str, Any]r   nw.LazyFrame[IntoFrameT])r   OneOrSeq[IntoExpr]r   zUnpack[Metadata]r   r   )rz   r)   r   zSequence[BaseImpl[R]]r   zCallable[..., R])r   r   __qualname____doc____annotations___build_openerrX   r	   __file__parentrZ   rc   rv   r{   r   propertyr   r   r   r   r   r   r   r   r   r   r   rx   r   rd   rb   rO   rO   t   s    *)$%%#J '& )6G%7X+.@@ N H,H )H 	H
 *H 
HH-- " "& $(% !
  
6 IM!+!5E!	!$4 03L L: :&+ 4 IM"+"5E"	%"&
 ; ;$-$>N$	!$AA%:A	Ard   rO   c                     | j                   | j                  d      j                         j                  d      j	                         S )Nr   )r   r   r   r   to_list)r   r   s     rb   r   r   k  s9    
 	j!				N	#	rd   c                  D     e Zd Zd fdZedd       Zedd       Z xZS )_NoParquetReaderc                >    t         |           d| j                  S )Nz
csv_cache
    )superrv   	csv_cache)r^   	__class__s    rb   rv   z_NoParquetReader.__repr__y  s#    '"$%%6t~~6HIIrd   c                P    t        | d      st               | _        | j                  S )N
_csv_cache)hasattrr   r   r   s    rb   r   z_NoParquetReader.csv_cache|  s    t\*&jDOrd   c                    t        d| j                  j                        }| j                  }t	        j
                  t	        j                  ||            j                         S )Nr   )backend)r   r   rotatedrW   r   maybe_convert_dtypes	from_dictr   )r^   datar   s      rb   r   z _NoParquetReader._metadata_frame  sI    $dnn&<&<=##&&r||D$'GHMMOOrd   r   )r   r   r   )r   r   r   rv   r   r   r   __classcell__)r   s   @rb   r   r   x  s3    J  
 P Prd   r   .ra   r\   c                    y ri   r   read_fnsscan_fnsra   r\   s       rb   readerr    s     <?rd   c                    y ri   r   r  s       rb   r  r    s     *-rd   c               8   |xs' t        d | D              j                  d      d   d   }|t        j                  j                  u rt        t        |            }|rt        | |||      S t        |       x}rt        | |||      S t        t           | d||      S )Nc              3  4   K   | ]  }|j                     y wri   )_inferred_packagerk   s     rb   rn   zreader.<locals>.<genexpr>  s     CB2//Cr      r   r   )r   most_commonr   ImplementationUNKNOWN_into_implementationr   rO   _steal_eager_parquetr   r   )r	  r
  ra   r\   stolens        rb   r  r    s     X7C(CCOOPQRSTUVWXD**222-k$.?@h$??%h//v/hn==/"dNSSrd   )r5   r;   r7   r9   )priorityc                ^    d | D        }t        |d      x}r|S t        j                  |       )a  
    Return the first available reader in order of `priority`.

    Notes
    -----
    - ``"polars"``: can natively load every dataset (including ``(Geo|Topo)JSON``)
    - ``"pandas[pyarrow]"``: can load *most* datasets, guarantees ``.parquet`` support
    - ``"pandas"``: supports ``.parquet``, if `fastparquet`_ is installed
    - ``"pyarrow"``: least reliable

    .. _fastparquet:
        https://github.com/dask/fastparquet
    c              3  \   K   | ]$  }t        t        |            st        |       & y wri   )r   _requirements_from_backend)rl   ra   s     rb   rn   z infer_backend.<locals>.<genexpr>  s"     	X$l=QUCV6W-
	Xs   ,,N)r   r   from_priority)r  r   r  s      rb   infer_backendr    s6      
Y(	XBb$v

+
+H
55rd   c                    y ri   r   ra   s    rb   r  r    s    KNrd   c                    y ri   r   r  s    rb   r  r    s    NQrd   c                    y ri   r   r  s    rb   r  r    s    DGrd   c                  t        |       sd| }t        |      t        |       }| dk(  r&t        j                         \  }}t        ||| |      S | dk(  r t        t        j                         | |      S | dk(  r t        t        j                         | |      S | dk(  r t        t        j                         | |      S y)zu
    Reader initialization dispatcher.

    FIXME: Works, but defining these in mixed shape functions seems off.
    zUnknown backend r5   r  r;   r7   r9   N)	_is_backendr   r  r   pl_onlyr  
pd_pyarrowpd_onlypa_any)ra   r   r\   rdscs        rb   r  r    s     t )n)$/Nx""$Bb"4GG	"	"i**,4WW		i'')^TT		i&&(tNSS 
rd   c                
    | dv S )N>   r7   r5   r9   r;   r   objs    rb   r#  r#    s    DDDrd   c                    | t         u S ri   )r   r+  s    rb   r   r     s    %%%rd   c                   i }d| v r| |d<   |S || |d<   |S |j                  d      r| |d}|S ddlm} ddlm} d ||      d	|}t        |      )
z.Transform args into a mapping to column names.r   r   r   )r   r}   r   )get_args)r(   zExpected 'suffix' to be one of z,
but got: )
startswithtypingr/  altair.datasets._typingr(   r   )ra   r}   mr/  r(   r   s         rb   r   r     s     A
d{+ H 
 . H 
		3	!V4 H 	$5 .hy.A-D Ez# 	 nrd   c                   t        |       }t        j                  j                  |      }|t        j                  j                  ur|S d|d}t        |      )NzPackage z  is not supported by `narwhals`.)_import_guardedr   r  from_backendr  r   )r   primaryr   r   s       rb   r  r    sV     g&G))'2D2$$,,,WK?
@C
S/rd   c                   t        | t              r| j                  S t        | t              r| S dt	        |       j
                  }t        |      )NzUnexpected type )r~   r	   r}   rT   r   r   r   )r,  r   s     rb   r   r     sF    #tzz	C	
 c!3!3 67nrd   c               Z    t        d | D        d       x}rt        j                  |      fS y )Nc              3  H   K   | ]  }|j                   t        k  s|  y wri   )includer   )rl   r(  s     rb   rn   z'_steal_eager_parquet.<locals>.<genexpr>  s     N2RZZ:5MBNs   "")r   r   	into_scan)r	  convertables     rb   r  r    s4     NNPTUU{U##K022rd   c                    y ri   r   reqs    rb   r5  r5  $  s    47rd   c                    y ri   r   r?  s    rb   r5  r5  (  s    9<rd   c                    y ri   r   r?  s    rb   r5  r5  ,  s    ;>rd   c                   t        |       }|D ];  }t        |      x}rt        |j                         &t	        t        |       ||       |d   S )N)missingr   )r  r   r   ra   r   rT   )r@  requiresra   specs       rb   r5  r5  0  sW    S!H ET?"4"$))$"3s8XtDD	E
 A;rd   c               p    t        | t              rt        |       n| } | j                  g| j                  S ri   )r~   rT   r   ra   extrasr?  s    rb   r  r  :  s-    (c2+c
CHH"szz""rd   )r   znw.LazyFramer   r   r   rL   ).)
r	  rP   r
  z	tuple[()]ra   
str | Noner\   rV   r   z4Reader[IntoDataFrameT, nw.LazyFrame[IntoDataFrameT]])
r	  rP   r
  rR   ra   rI  r\   rV   r   z"Reader[IntoDataFrameT, IntoFrameT])r   )
r	  rP   r
  rR   ra   rI  r\   rV   r   zYReader[IntoDataFrameT, IntoFrameT] | Reader[IntoDataFrameT, nw.LazyFrame[IntoDataFrameT]])r  zSequence[_Backend]r   Reader[Any, Any])ra   r6   r   z"Reader[pl.DataFrame, pl.LazyFrame])ra   r<   r   z"Reader[pd.DataFrame, pd.DataFrame])ra   r:   r   zReader[pa.Table, pa.Table])ra   r=   r   rJ  )r,  r   r   zTypeIs[_Backend])r,  r   r   z!TypeIs[type[AltairDatasetsError]])ra   r   r}   r   r   r)   )r   z%_NwSupport | _PandasAny | Requirementr   rV   )r,  z
Path | strr   r   )r	  rP   r   z3Sequence[Scan[nw.LazyFrame[IntoDataFrameT]]] | None)r@  r<   r   r8   )r@  rI   r   rI   )r@  r   r   r2   )r@  r   r   r2   )r@  zRequirement | strr   ztuple[Any, ...])jr   
__future__r   collectionsr   collections.abcr   	importlibr   importlib.utilr   	itertoolsr   pathlibr	   r1  r
   r   r   r   r   r   r   urllib.requestr   r   narwhals.stabler   r   narwhals.stable.v1.typingr   r   packaging.requirementsr   altair.datasetsr   altair.datasets._cacher   r   r   r   altair.datasets._constraintsr   altair.datasets._exceptionsr   r   altair.datasets._readimplr   r   sysr    r!   r"   r7   pdr5   plr9   par#   r$   r%   r&   r2  r'   r(   r)   !altair.vegalite.v6.schema._typingr*   version_infor-   r.   typing_extensionsr0   r2   r4   r6   r   r8   r:   r<   r=   r?   rA   rC   rE   rG   rH   rI   rM   rO   r   r   r  r  r  r  r  r#  r   r   r  r   r  r5  r  r   rd   rb   <module>rb     s  & #  # # $   Q Q Q 8 $ > . % V V 3 M >2-AADD:
7"**5
7"!,
7"(3
7"$/ *GY* *GY*!),Hi,#G->$>?J	?!':x"?@Hi@vE9&vE9& *GY*vE9&!),Hi,#(E5'5(JJ	  
K %&')<< $tAW^Z/0 tAn

&8

Pvnj89 P" 
 ? (+?,?? 	?
 &? :? 
? 

 (+-,-(- 	-
 &- (- 
- ,.T (*(9(9(A(AT,T(T 	T
 &T;T, 'Y6#66, 
 N 
 N	 Q 
 Q	 G 
 G
T*E&
!+;02,8 
 7 
 7 
 < 
 < 
 > 
 >#rd   