
    ȯei)=                    h   d Z ddlmZ ddl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 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 ddlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z) ejT                  dk\  rddlm+Z+ nddl,m+Z+ ejT                  dk\  rddlm-Z- nddl,m-Z- er2ddl.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7Z8ddl9Z:ddl;Z<ddl=mZ> ddlm?Z?m@Z@ g dZA e+ddd      ZB e+ddej                  e          ZD e-d!d"ef#      ZE	  e-d$d%eDf#      ZF	  G d& d'e      ZG G d( d)eeB         ZH	 dA	 	 	 	 	 	 	 	 	 dBd*ZI	 dA	 	 	 	 	 	 	 	 	 dCd+ZJdDd,ZKdd-	 	 	 	 	 	 	 dEd.ZLdFd/ZMdGd0ZNdHd1ZOdId2ZPdId3ZQdJd4ZRdKd5ZSdLd6ZTdMd7ZUdd8	 	 	 	 	 	 	 dNd9ZVdOd:ZWdPd;ZXdPd<ZYdQd=ZZdOd>Z[dRd?Z\dSd@Z]y)Tz5Individual read functions and siuations they support.    )annotationsN)Enum)partialwraps	find_spec)chain)
itemgetter)Path)TYPE_CHECKINGAnyGenericLiteral)v1)
get_pandas
get_polars)IntoDataFrameT)	is_arrowis_csvis_jsonis_metais_not_tabular
is_parquet
is_spatialis_topois_tsv)AltairDatasetsError)      )TypeVar)r      )TypeAliasType)CallableIterableIteratorSequence)IOBase)
ModuleType)typing)ItemsMetaIs)is_availablepa_anypd_only
pd_pyarrowpl_onlyreadscanRznwt.IntoFrameT)bound	covariant
IntoFrameTzKnwt.NativeFrame | nw.DataFrame[Any] | nw.LazyFrame[Any] | nwt.DataFrameLike)r4   defaultReadzBaseImpl[IntoDataFrameT])type_paramsScanzBaseImpl[IntoFrameT]c                  $    e Zd ZdZdZddZddZy)SkipzFalsy sentinel.r   c                     y)NF selfs    [/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/altair/datasets/_readimpl.py__bool__zSkip.__bool__H   s        c                     y)Nz<Skip>r>   r?   s    rA   __repr__zSkip.__repr__K   s    rC   N)returnzLiteral[False])rF   zLiteral['<Skip>'])__name__
__module____qualname____doc__skiprB   rE   r>   rC   rA   r<   r<   C   s    DrC   r<   c                      e Zd ZU dZded<   	 ded<   	 ded<   	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 ddZedd	       Zdd
Z	e
dd       ZddZddZe
dd       Ze
dd       Ze
dd       Zy)BaseImpla  
    A function wrapped with dataset support constraints.

    The ``include``, ``exclude`` properties form a `NIMPLY gate`_ (`Material nonimplication`_).

    Examples
    --------
    For some dataset ``D``, we can use ``fn`` if::

        impl: BaseImpl
        impl.include(D) and not impl.exclude(D)


    .. _NIMPLY gate:
        https://en.m.wikipedia.org/wiki/NIMPLY_gate
    .. _Material nonimplication:
        https://en.m.wikipedia.org/wiki/Material_nonimplication#Truth_table
    Callable[..., R]fnr+   includeexcludec          	     V   |xs | j                         }|j                  |      s1dj                  d ||z  D              }d| d|d|}t        |      t        j                  | d|rt        |fi |n|       t        j                  | d|       t        j                  | d|       y )	N, c              3  0   K   | ]  \  }}| d |  yw=Nr>   .0kvs      rA   	<genexpr>z$BaseImpl.__init__.<locals>.<genexpr>v   s     $Pdas!A5\$P   zConstraints overlap at: `z
`
include=z	
exclude=rO   rP   rQ   )_exclude_none
isdisjointjoin	TypeErrorobject__setattr__r   )r@   rO   rP   rQ   kwdsintersectionmsgs          rA   __init__zBaseImpl.__init__l   s     1T//1!!'*99$Pg>O$PPL-l^;wkQ[\c[fgCC. 4dwr':T':K4G44G4rC   c                   | j                   j                  |      r-| j                  j                  |      r| j                  S t
        S t        j                  S )a<  
        Indicate an action to take for a dataset.

        **Supports** dataset, use this function::

            Callable[..., R]

        Has explicitly marked as **not supported**::

            type[AltairDatasetsError]

        No relevant constraints overlap, safe to check others::

            Skip
        )rP   issubsetrQ   r^   rO   r   r<   rK   )r@   metas     rA   unwrap_or_skipzBaseImpl.unwrap_or_skip}   sA    $ <<  &"ll55d;477TATTyyrC   c                    t               S )zRepresents the empty set.)r   )clss    rA   r]   zBaseImpl._exclude_none   s     yrC   c                R    t        |       j                  d| d| }t        |      )Nz% is immutable.
Could not assign self.z = )typerG   r`   )r@   namevaluere   s       rA   rb   zBaseImpl.__setattr__   s8    Dz""% &%%)F#eW6 	 nrC   c                @    t        t        | j                        d      S )NUNKNOWN)_root_package_name_unwrap_partialrO   r?   s    rA   _inferred_packagezBaseImpl._inferred_package   s    !/$''":IFFrC   c                \    t        |       j                   d| j                   d}| d|  dS )N[z?]())rn   rG   ru   )r@   tp_names     rA   rE   zBaseImpl.__repr__   s9    $Z(()4+A+A*B"E!D6##rC   c                   t        | j                  t              rbt        | j                        }| j                  j                  j                         }|j                   ddj                  d |D               d}n| j                  j                   d}| j                  | j                  }}| d|r
d|d| S t        |       S )Nz(..., rS   c              3  0   K   | ]  \  }}| d |  ywrU   r>   rW   s      rA   r[   z#BaseImpl.__str__.<locals>.<genexpr>   s     5Ttq!1QEl5Tr\   ry   z(...)zinclude=z
, exclude=)
isinstancerO   r   rt   keywordsitemsrG   r_   rP   rQ   repr)r@   rO   rc   fn_reprincexcs         rA   __str__zBaseImpl.__str__   s    dggw' )B77##))+DVDII5Tt5T,T+UUVWG))*%0G<<S"Cxwj@WXXTRUYWXXrC   c              #     K   t        d      fdt        | j                  | j                        D        E d {    y 7 w)Nr   c              3  .   K   | ]  } |        y wNr>   )rX   objro   s     rA   r[   z-BaseImpl._relevant_columns.<locals>.<genexpr>   s     K#DIKs   )r
   r	   rP   rQ   )r@   ro   s    @rA   _relevant_columnszBaseImpl._relevant_columns   s-     !}Kt||T\\)JKKKs   8AAAc                    | j                   r6| j                  j                         | j                   j                          z  S | j                  j                         S r   )rQ   rP   to_exprr?   s    rA   _include_exprzBaseImpl._include_expr   sN     || LL  "dll&:&:&<%<<	
 %%'	
rC   c                    | j                   r5| j                  j                         | j                   j                         z  S d| }t        |      )NzBUnable to generate an exclude expression without setting exclude

)rQ   rP   r   r`   )r@   re   s     rA   _exclude_exprzBaseImpl._exclude_expr   sF    <<<<'')DLL,@,@,BBBTUYT\]nrC   N)
rO   rN   rP   r+   rQ   MetaIs | Nonerc   zdict[str, Any]rF   None)ri   r*   rF   z3Callable[..., R] | type[AltairDatasetsError] | Skip)rF   r+   )ro   strrp   r   )rF   r   )rF   zIterator[str])rF   znw.Expr)rG   rH   rI   rJ   __annotations__rf   rj   classmethodr]   rb   propertyru   rE   r   r   r   r   r>   rC   rA   rM   rM   O   s    & 	%OFOF55 5 	5
 5 
5"	<,   G G$Y L L 
 
  rC   rM   c                   t        | |||      S r   rM   rO   rP   rQ   rc   s       rA   r1   r1           B$//rC   c                   t        | |||      S r   r   r   s       rA   r2   r2      r   rC   c               t    	 	 	 	 dd}t         || j                        | j                  | j                        S )Nc               B     t        t                     d fd       }|S )Nc                 V    t        j                   | i |      j                         S r   )nwfrom_nativelazy)argsrc   rO   s     rA   wrapperz+into_scan.<locals>.scan_fn.<locals>.wrapper   s%    >>"d"3d"3499;;rC   )r   r   rc   r   rF   znw.LazyFrame[IntoDataFrameT])r   rt   )rO   r   s   ` rA   scan_fnzinto_scan.<locals>.scan_fn   s(     
r"	#	< 
$	< rC   )rO   Callable[..., IntoDataFrameT]rF   z+Callable[..., nw.LazyFrame[IntoDataFrameT]])r2   rO   rP   rQ   )implr   s     rA   	into_scanr      s9    )	4  $,,==rC   )require_allc                   |st        | t              rt        |       duS t        | t              s| n| f}t        ||      }|rt        nt
        } |d |D              S )z
    Check for importable package(s), without raising on failure.

    Parameters
    ----------
    pkg_names, more_pkg_names
        One or more packages.
    require_all
        * ``True`` every package.
        * ``False`` at least one package.
    Nc              3  6   K   | ]  }t        |      d u  y wr   r   )rX   ro   s     rA   r[   zis_available.<locals>.<genexpr>   s     <dioT)<s   )r}   r   r   r	   allany)	pkg_namesr   more_pkg_names
pkgs_namesnamesrO   s         rA   r,   r,      sX     jC8#4//",Y"<9,J*n-EB<e<<<rC   c                   t        | d      r| j                  j                  d      d   S ddlm}  ||       }|r"|j
                  x}r|j                  d      d   S |S )NrH   .r   )	getmodule)hasattrrH   splitinspectr   __package__)r   r7   r   modulepkgs        rA   rs   rs      s]    sL!~~##C(++%3&,,,3,yy~a  NrC   c               d    | }t        |t              r|j                  }t        |t              r|S r   )r}   r   func)rO   r   s     rA   rt   rt   
  s+    D
T7
#yy T7
#KrC   c                    dd l } t        t        t                     t              }t        d      rt               t               |f}n|f}t        | j                  t        d      g|t        | j                  t        dd      t        | j                  t              t        | j                  t              }t        | j                   t              f}||fS )Nr   	polars_stT)try_parse_dates	)	separatorr   )polarsr1   _pl_read_json_roundtripr   r   r,   !_pl_read_json_polars_st_topo_impl_pl_read_json_polars_st_implread_csvr   r   read_ipcr   read_parquetr   r2   scan_parquet)plpl_read_jsonfn_jsonread_fnsscan_fnss        rA   r0   r0     s    /
=wGLK -/(*1
  / 	R[[&$7	 	R[[&D$G 	R[[(#	
 	R__j)H R__j13HXrC   c                    dd l } t        d      r5t        | j                  t              t        | j
                  t              f}n)t        d      rt        | j
                  t              f}nd}t        t        t                     t        t              }t        d      rt               |f}n|f}t        | j                  t              g|t        | j                  t        d      |S )	Nr   pyarrowfastparquetr>   rQ   	geopandasr   )sep)pandasr,   r1   read_featherr   r   r   _pd_read_jsonr   r   r   _pd_read_json_geopandas_implr   r   r   )pdoptpd_read_jsonr   s       rA   r.   r.   *  s     I2??H-tBOOZ/PP	m	$BOOZ02jl3WjQLK (*1

  /R[[&!	 	R[[&d+ 
	 rC   c                 |   dd l } ddi}t        t        t                     t        fdt
        i|}t        d      rt               |f}n|f}t        | j                  t        fi |g|t        | j                  t        fddi|t        | j                  t        fi |t        | j                  t        fi |S )Nr   dtype_backendr   rQ   r   r   r   )r   r1   r   r   r   r   r,   r   r   r   r   r   r   r   r   )r   rc   r   r   s       rA   r/   r/   D  s    +Y7Djl#W6@DHL K (*1

  /R[[&)D)	 	R[[&3d3d3 	R__h/$/	
 	R__j1D1 rC   c            	        ddl m} m}m} t	        | j
                  t              t               t	        | j
                  t        | j                  d            t	        |j                  t              t	        |j                  t              fS )Nr   csvfeatherparquetr   )	delimiter)parse_options)r   r   r   r   r1   r   r   _pa_read_json_implr   ParseOptions
read_tabler   r   r   s      rA   r-   r-   [  sf    -- 	S\\6"S\\61A1AD1A1QRW*W, rC   c                    t        d      r%t               } | t        t        |       t              S t        d      r+t               }|t        t        |      t        t              S t        t        t        t              S )z
    Mitigating ``pyarrow``'s `line-delimited`_ JSON requirement.

    .. _line-delimited:
        https://arrow.apache.org/docs/python/json.html#reading-json-files
    r   r   r   )
r,   r   r1    _pl_read_json_roundtrip_to_arrowr   r   _pd_read_json_to_arrowr   _stdlib_read_json_to_arrowr   )	polars_ns	pandas_nss     rA   r   r   g  sf     HL	 8CWMMHL	 .y97JWW*G^LLrC   c               D     t         j                        d fd       }|S )Nc               Z    t         j                  | fi |fi |j                         S r   )_pd_fix_dtypes_nw	read_json	to_native)sourcerc   nss     rA   rO   z_pd_read_json.<locals>.fnz  s,     f!=!=FFPPRRrC   )r   
Path | Anyrc   r   rF   pd.DataFramer   r   r   rO   s   ` rA   r   r   y  s'    
2<<S S IrC   c                 x    dd l t        j                        ddfd       } t        | t	        dd            S )Nr   c               *     j                   | fi |S r   	read_file)r   schemarc   r   s      rA   rO   z(_pd_read_json_geopandas_impl.<locals>.fn  s    "y""62T22rC   T.jsonr   suffixr   )r   r   r   r   rc   r   rF   r   )r   r   r   r1   r   )rO   r   s    @rA   r   r     s9    
93  3 GtG<==rC   r   c              "   |rd|ini } | j                   di |j                  t        j                  d      j	                  t        j
                  j                  t        j                        j                  t        j                              S )Nr   T)
eager_onlyr>   )
convert_dtypespiper   r   with_columns	selectorsby_dtypeObjectcastString)dfr   rc   s      rA   r   r     sh     0=O]+"D!D!	bnn	.	bll++BII6;;BIIF	GrC   c               J     t         j                        d dd fd       }|S )N)r   c              p     j                   | fi |j                  t        d      j                         S )z?``schema`` is only here to swallow the ``SchemaCache`` if used.r   r   )r   r  r   to_arrow)r   r   rc   r   s      rA   rO   z"_pd_read_json_to_arrow.<locals>.fn  s3     BLL(4(T#9T=XZ	
rC   )r   r   r   r   rc   r   rF   pa.Tabler   r   s   ` rA   r   r     s(    
2<<37 
 
 IrC   c                 x    dd l t        j                        ddfd       } t        | t	        dd            S )Nr   c               *     j                   | fi |S r   r   r   r   rc   sts      rA   rO   z(_pl_read_json_polars_st_impl.<locals>.fn  s    r||F+d++rC   Tr   r   r   r   r   r   r   rc   r   rF   pl.DataFrame)r   r   r   r1   r   rO   r  s    @rA   r   r     s7    
2<<, , GtG<==rC   c                 j    dd l t        j                        ddfd       } t        | t              S )Nr   c               v    t        | t              r| j                  d      rd|  }  j                  | fi |S )Nhttpz	TopoJSON:)r}   r   
startswithr   r  s      rA   rO   z-_pl_read_json_polars_st_topo_impl.<locals>.fn  s>     fc"v'8'8'@ )Fr||F+d++rC   r   r  )r   r   r   r1   r   r  s    @rA   r   r     s0    
2<<, , GrC   c               T     ddl m t         j                        d fd       }|S )a+  
    Try to utilize better date parsing available in `pl.read_csv`_.

    `pl.read_json`_ has few options when compared to `pl.read_csv`_.

    Chaining the two together - *where possible* - is still usually faster than `pandas.read_json`_.

    .. _pl.read_json:
        https://docs.pola.rs/api/python/stable/reference/api/polars.read_json.html
    .. _pl.read_csv:
        https://docs.pola.rs/api/python/stable/reference/api/polars.read_csv.html
    .. _pandas.read_json:
        https://pandas.pydata.org/docs/reference/api/pandas.read_json.html
    r   )BytesIOc               D    j                   | fi |}t        d |j                  j                         D              r|S         }|j	                  |       |r,h d}|j                         D ci c]  \  }}||v s|| }}} j                  |fddi|S c c}}w )Nc              3  <   K   | ]  }|j                           y wr   )	is_nested)rX   tps     rA   r[   z6_pl_read_json_roundtrip.<locals>.fn.<locals>.<genexpr>  s     ;"r||~;s   >   r   schema_overridesinfer_schema_lengthr   T)r   r   r   dtypes	write_csvr   r   )	r   rc   r	  bufSHARED_KWDSrY   rZ   r  r   s	          rA   rO   z#_pl_read_json_roundtrip.<locals>.fn  s    R\\&)D);		(8(8(:;;Ii
SOK%)ZZ\FTQQ+5EAqDFDFr{{3==== Gs   2B?B)r   Path | IOBaserc   r   rF   r  )ior  r   r   )r   rO   r  s   ` @rA   r   r     s*     
2<<	> 	> IrC   c               Z    t        |       t        | j                        dfd       }|S )Nc               0     |       j                         S r   )r  )r   rc   eagers     rA   rO   z,_pl_read_json_roundtrip_to_arrow.<locals>.fn  s    V}%%''rC   )r   r%  rc   r   rF   r  )r   r   r   )r   rO   r)  s     @rA   r   r     s/    #B'E
2<<( ( IrC   c                   dd l }t        | t              s|j                  |       S t        |       j	                  d      5 }|j                  |      cd d d        S # 1 sw Y   y xY w)Nr   zutf-8)encoding)jsonr}   r   loadopen)r   r,  fs      rA   _stdlib_read_jsonr0    sU    fd#yy  &\0 	 A99Q<	  	  	 s   AA%c               B   dd l }t        |       }	  |j                  j                  |fi |S # t        $ r dd l}dd l}ddl m} |j                         5 }|j                  ||d   j                         |j                        }|j                          |j                  |       |j                  |j                         j                               5 }	|j!                  |	      cd d d        cd d d        cY S # 1 sw Y   nxY w	 d d d        Y y # 1 sw Y   Y y xY ww xY w)Nr   )r   )dialect)r   r0  Tablefrom_pylistr`   r   r&  StringIO
DictWriterkeysunix_dialectwriteheader	writerowsr  getvalueencoder   )
r   rc   parowsr   r&  pa_csvr/  writerf2s
             rA   r   r     s    !26!:D+#rxx##D1D11 +)[[] 	+a^^AtAw||~s?O?O^PF T"AJJL//12 +br*+ +		+ 	++ + +		+ 	+ 	++sF   . 'DA>DC9$	D-
D9D>DDD	DDr   )
rP   r+   rQ   r   rO   r   rc   r   rF   Read[IntoDataFrameT])
rP   r+   rQ   r   rO   zCallable[..., IntoFrameT]rc   r   rF   zScan[IntoFrameT])r   rB  rF   z"Scan[nw.LazyFrame[IntoDataFrameT]])r   zstr | Iterable[str]r   r   r   boolrF   rC  )r   r   r7   r   rF   r   )rO   r   rF   r   )rF   zAtuple[Sequence[Read[pl.DataFrame]], Sequence[Scan[pl.LazyFrame]]])rF   zSequence[Read[pd.DataFrame]])rF   zSequence[Read[pa.Table]])rF   zRead[pa.Table])r   r(   rF   zCallable[..., pd.DataFrame])rF   zRead[pd.DataFrame])r	  r   r   r   rc   r   rF   znw.DataFrame[pd.DataFrame])r   r(   rF   zCallable[..., pa.Table])rF   zRead[pl.DataFrame])r   r(   rF   zCallable[..., pl.DataFrame])r   r   rF   r   )r   r   rc   r   rF   r  )^rJ   
__future__r   sysenumr   	functoolsr   r   importlib.utilr   	itertoolsr	   operatorr
   pathlibr   r)   r   r   r   r   narwhals.stabler   r   narwhals.stable.v1.dependenciesr   r   narwhals.stable.v1.typingr   altair.datasets._constraintsr   r   r   r   r   r   r   r   r   altair.datasets._exceptionsr   version_infor    typing_extensionsr"   collections.abcr#   r$   r%   r&   r&  r'   typesr(   r   r   r   r   r   r=  narwhals.stable.v1nwtr*   r+   __all__r3   	LazyFramer6   r8   r:   r<   rM   r1   r2   r   r,   rs   rt   r0   r.   r/   r-   r   r   r   r   r   r   r   r   r   r0  r   r>   rC   rA   <module>rY     s#   ; " 
  $ $    7 7 $ B 4
 
 
 <w)w$/FF 0:
XC$7
WLL

 V7nEVW $V3*O "	4 	twqz tv "	0 0 	0%0
 0 0 "	0 0 	0!0
 0 0
> OS="=58=GK=	=,
04.	M$> 26+.?B
>
@ +rC   