
    +dY                     >    d dl Z ddlmZmZmZ  G d de          ZdS )    N   )RemoteSourceSchemaget_partitionc                   ~     e Zd ZdZdZdZ fdZd Zd Zd Z	d Z
d	 Zd
 Zedd            Zedd            Z xZS )RemoteArrayznd-array on an Intake serverremote_ndarrayndarrayc           	          t          t          |           j        ||fi | |d         | _        t	          |d                   | _        |d         | _        |d         | _        t	          d t	          |                    dd                    D                       | _	        d | _
        t          | j        | j        | j        | j        | j	                  | _        d S )	Nnpartitionsshapemetadatadtypec              3   4   K   | ]}t          |          V  d S N)tuple).0cs     8lib/python3.11/site-packages/intake/container/ndarray.py	<genexpr>z'RemoteArray.__init__.<locals>.<genexpr>   s(      QQE!HHQQQQQQ    chunks))r   extra_metadatar   r   r   )superr   __init__r   r   r   r   r   getr   arrr   _schema)selfurlheaderskwargs	__class__s       r   r   zRemoteArray.__init__   s    )k4  )#wAA&AAA!-06'?++
z*G_
QQeFJJx4O4O.P.PQQQQQ$*:4=`d`jrvr|  FJ  FQ  R  R  Rr   c                      dd l m}  j        dd j        z   d  j        D             } fdt          j        | D             }|                    | j         j         j	                   _         j
        S )Nr   zremote-array-c              3   N   K   | ] }t          t          |                    V  !d S r   )rangelen)r   ns     r   r   z-RemoteArray._load_metadata.<locals>.<genexpr>"   s.      99eCFFmm999999r   c           	      \    i | ](}f|z   t           j        j        j        j        |f)S  )r   r!   r"   
_source_id	container)r   partnamer    s     r   
<dictcomp>z.RemoteArray._load_metadata.<locals>.<dictcomp>#   sL      [  [  [w{TGdN]DHdlDO]a]kmq$r  [  [  [r   )r/   r   r   r   )
dask.arrayarrayr   r,   r   	itertoolsproductArrayr   r   r   )r    danpartsdaskr/   s   `   @r   _load_metadatazRemoteArray._load_metadata   s    8 	i"T_4D99T[999F [  [  [  [  [  @I  @Q  SY  @Z  [  [  [Dxx44:]a]gxhhDH|r   c                 r    |                                   | j        j        |                                         S r   )r9   r   blockscomputer    is     r   _get_partitionzRemoteArray._get_partition(   s/    xq!))+++r   c                 T    |                                   |                     |          S r   )r9   r?   r=   s     r   read_partitionzRemoteArray.read_partition,   s(    ""1%%%r   c                 \    |                                   | j                                        S r   )r9   r   r<   r    s    r   readzRemoteArray.read0   s(    x!!!r   c                 8    |                                   | j        S r   )r9   r   rC   s    r   to_daskzRemoteArray.to_dask4   s    xr   c                     d | _         d S r   )r   rC   s    r   _closezRemoteArray._close8   s    r   Nc                     	 |                                  }n$# t          $ r |                                 }Y nw xY wt          j        ||fddd|S )a   Save array to local persistent store

        Makes a parquet dataset out of the data using zarr.
        This then becomes a data entry in the persisted datasets catalog.
        Only works locally for the moment.

        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 zarr array creation, see
        N	componentstorage_options)rF   NotImplementedErrorrD   r   _data_to_source)sourcepathrK   rL   r#   r   s         r   _persistzRemoteArray._persist;   sh     	 ..""CC" 	  	  	 ++--CCC	 *3eVZee^deees    88c                     ddl m}m} ddlm} ddlm}  ||           st          t          | d          s || d          }  || |fd |d	|  ||||          }	|	S )
Nr   )
from_arrayto_zarr)is_arraylike   )ZarrArraySourcer   auto)r   rJ   )	r1   rS   rT   
dask.utilsrU   source.zarrrW   rM   hasattr)
r   rP   rK   rL   r#   rS   rT   rU   rW   rO   s
             r   rN   zRemoteArray._data_to_sourceQ   s    22222222++++++111111|C   	&%%sM** 	1*S000CTUT?UUfUUU 	BBr   )NN)__name__
__module____qualname____doc__r/   r-   r   r9   r?   rA   rD   rF   rH   staticmethodrQ   rN   __classcell__)r$   s   @r   r   r      s        &&DIR R R R R	 	 	, , ,& & &" " "     f f f \f*    \    r   r   )r3   baser   r   r   r   r+   r   r   <module>rc      so        5 5 5 5 5 5 5 5 5 5Q Q Q Q Q, Q Q Q Q Qr   