
    +do                     p    d dl mZ d dlmZmZ ddlmZmZ  G d de          Zd Z	 G d d	e          Z
d
S )    )Version)
DataSourceSchema   )RemoteSourceget_partitionc                   t     e Zd ZdZdZdZ fdZd Zd Zd Z	d Z
d	 Zed
             Zed             Z xZS )RemoteDataFramezDataframe on an Intake serverremote_dataframe	dataframec                 j    t          t          |           j        ||fi | |d         | _        t	          |d                   | _        |d         | _        |d         | _        |                    dd          | _	        t          | j        | j        | j        | j                  | _        d | _        d S )NnpartitionsshapemetadatadtypeverifyFr   extra_metadatar   r   )superr
   __init__r   tupler   r   r   getr   r   _schemar   )selfurlheaderskwargs	__class__s       :lib/python3.11/site-packages/intake/container/dataframe.pyr   zRemoteDataFrame.__init__   s    -ot$$-c7EEfEEE!-06'?++
z*G_
jj511$*:4=`d`jrvr|}}}    c                 X    dd l m} dd l j         fdt           j                  D              _        t          j                  t          d          k     r |                     j                   _        n&|                     j         j	                   _         j
        S )Nr   c           	          g | ]=}                      t                    j        j        j        j        |          >S  )delayedr   r   r   
_source_id	container).0idaskr   s     r   
<listcomp>z2RemoteDataFrame._load_metadata.<locals>.<listcomp>#   sV      T  T  Tvw5$,,}55dhdo_c_mopqq  T  T  Tr    z2.5.0)verify_meta)dask.dataframer   dask.delayedranger   partsr   __version__from_delayedr   r   )r   ddr)   s   ` @r   _load_metadatazRemoteDataFrame._load_metadata   s    ######> 	V T  T  T  T  T  |A  BF  BR  |S  |S  T  T  TDJt'((77+;+;; V!#!<!<!#!U!U|r    c                 h    |                                   | j        |                                         S Nr3   r/   computer   r(   s     r   _get_partitionzRemoteDataFrame._get_partition*   ,    z!}$$&&&r    c                 \    |                                   | j                                        S r5   r3   r   r7   r   s    r   readzRemoteDataFrame.read.   (    ~%%'''r    c                 8    |                                   | j        S r5   r3   r   r=   s    r   to_daskzRemoteDataFrame.to_dask2       ~r    c                     d | _         d S r5   r   r=   s    r   _closezRemoteDataFrame._close6       r    c                     	 |                                  }n$# t          $ r |                                 }Y nw xY wt          j        ||fi |S )a  Save dataframe to local persistent store

        Makes a parquet dataset out of the data using dask.dataframe.to_parquet.
        This then becomes a data entry in the persisted datasets catalog.

        Parameters
        ----------
        source: a DataSource instance to save
        name: str or None
            Key to refer to this persisted dataset by. If not given, will
            attempt to get from the source's name
        kwargs: passed on to dask.dataframe.to_parquet
        )rB   NotImplementedErrorr>   r
   _data_to_source)sourcepathr   dfs       r   _persistzRemoteDataFrame._persist9   s_    	!!BB" 	 	 	BBB	.r4BB6BBBs    88c                    dd l m} t          |           st          	 ddlm} n# t          $ r t          d          w xY wt          | d          s|                    | d          }  | j	        |fi |  ||i           }|S )Nr   )ParquetSourcezPPlease install intake-parquet to use persistence on dataframe container sources.r   r   )r   )meta)
r,   r   is_dataframe_likerI   intake_parquetrP   ImportErrorhasattrfrom_pandas
to_parquet)rM   rL   r   r2   rP   rK   s         r   rJ   zRemoteDataFrame._data_to_sourceN   s    ###### $$ 	&%%	u4444444 	u 	u 	usttt	ur=)) 	322Bd%%f%%%t"---s   % ?)__name__
__module____qualname____doc__namer&   r   r3   r9   r>   rB   rF   staticmethodrN   rJ   __classcell__r   s   @r   r
   r
      s        ''DI    
 
 
' ' '( ( (     C C \C(   \    r    r
   c                      t                     t          fddD                       o+t           fddD                       ot          d           S )z>Looks like a Pandas DataFrame

    Copied from dask.utils
    c              3   8   K   | ]}t          |          V  d S r5   rU   )r'   r\   typs     r   	<genexpr>z$is_dataframe_like.<locals>.<genexpr>e   s-      SSdwsD!!SSSSSSr    )groupbyheadmergemeanc              3   8   K   | ]}t          |          V  d S r5   rb   )r'   r\   rM   s     r   rd   z$is_dataframe_like.<locals>.<genexpr>e   sQ        \G  \Grv\cdfhl\m\m  \G  \G  \G  \G  \G  \Gr    )dtypesr   )typeallrU   )rM   rc   s   `@r   rR   rR   _   s    
 r((CSSSS.RSSSSS  eX[  \G  \G  \G  \G  {F  \G  \G  \G  YG  YG  e  PW  X[  ]d  Pe  Pe  Le  er    c                   J     e Zd ZdZdZdZd fd	Zd Zd Zd Z	d	 Z
d
 Z xZS )GenericDataFramea  Create partitioned dataframe from a set of files and any reader

    This data-source allows you to specify any reader to create dataframes.
    The reader must take an open file-like object as input, and output a
    pandas.DataFrame.

    Parameters
    ----------
    urlpath: str
        Location of data. May be local files or remote with a protocol
        specifier. May be a list of files or a glob pattern to be expanded.
    reader: func
        f(open_file, **kwargs) -> pandas.DataFrame
    storage_options: dict
        Passed to the file-system backend to open files; typically includes
        credentials for remote storage
    kwargs:
        Passed to reader function
    generic_dataframer   Nc                     || _         || _        |pi | _        |                                }t	                                          |                    di                      || _        d | _        d S )Nr   )r   )	r   readerstorage_optionscopyr   r   popr   r   )r   urlpathrq   rr   r   r   s        r   r   zGenericDataFrame.__init__   sf    .4"&**Z"<"<===r    c                     dd l m} dd lddlm}  | j        fi  j         _        d  j         fd j        D              _        |	                     j                   _         j        j
         _
        d t           j        j                  f _         j        j                                         _        t#           j
         j         j         j                   _         j        S )Nr   )
open_filesc                 d    | 5 } ||fi |}| j         |d<   |cd d d            S # 1 swxY w Y   d S )NrL   )rL   )	open_filerq   r   ofrM   s        r   read_a_filez4GenericDataFrame._load_metadata.<locals>.read_a_file   s     bVB))&))&^6
                 s   %))c                 d    g | ],}                                |j        j                  -S r#   )r$   rq   r   )r'   ry   r)   r{   r   s     r   r*   z3GenericDataFrame._load_metadata.<locals>.<listcomp>   s9    uuu]f3$,,{33It{DKXXuuur    r   )r,   r   r-   fsspecrw   r   rr   filesr/   r1   r   lencolumnsr   rj   to_dictr   r   r   r   )r   r2   rw   r)   r{   s   `  @@r   r3   zGenericDataFrame._load_metadata   s!   ######%%%%%%ZAAD,@AA
	 	 	 > 	BuuuuuujnjtuuuDJ__TZ88DN#~9DDN$: ; ;<DJ.6688DJ!d.>t}dhdnvz  wA  B  B  BDL|r    c                 h    |                                   | j        |                                         S r5   r6   r8   s     r   r9   zGenericDataFrame._get_partition   r:   r    c                 \    |                                   | j                                        S r5   r<   r=   s    r   r>   zGenericDataFrame.read   r?   r    c                 8    |                                   | j        S r5   rA   r=   s    r   rB   zGenericDataFrame.to_dask   rC   r    c                     d | _         d S r5   rE   r=   s    r   rF   zGenericDataFrame._close   rG   r    r5   )rX   rY   rZ   r[   r\   r&   r   r3   r9   r>   rB   rF   r^   r_   s   @r   rn   rn   h   s         ( DI       ,' ' '( ( (        r    rn   N)packaging.versionr   intake.source.baser   r   baser   r   r
   rR   rn   r#   r    r   <module>r      s    & % % % % % 1 1 1 1 1 1 1 1 - - - - - - - -N N N N Nl N N Nbe e eD D D D Dz D D D D Dr    