U
    ½mœd£
  ã                   @   sB   d Z ddlZddlmZ dd„ Zdd„ ZG d	d
„ d
ƒZdd„ ZdS )z7
    Implements a portion of the selection operations.
é    Né   )Úh5sc                    sŠ   t |ƒdkrˆ }nLˆ jdkr&tdƒ‚n8t‡ fdd„|D ƒƒrFtdƒ‚nt ‡ fdd„|D ƒ¡}t |ƒd	kr~|j|d  d }n|}||fS )
z„ Returns a 2-tuple containing:

    1. Output dataset dtype
    2. Dtype containing HDF5-appropriate description of destination
    r   Nz+Field names only allowed for compound typesc                 3   s   | ]}|ˆ j kV  qd S ©N)Únames)Ú.0Úx©Údataset_dtype© úM/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/h5py/_hl/selections2.pyÚ	<genexpr>   s     zread_dtypes.<locals>.<genexpr>z#Field does not appear in this type.c                    s   g | ]}|ˆ j | d  f‘qS )r   )Úfields)r   Únamer   r
   r   Ú
<listcomp>"   s     zread_dtypes.<locals>.<listcomp>é   )Úlenr   Ú
ValueErrorÚanyÚnpZdtyper   )r	   r   Zformat_dtypeZoutput_dtyper
   r   r   Úread_dtypes   s    


r   c                 C   sP   | j dkrtdƒ‚|dkr d}n|tfkr0d}ntdƒ‚|  ¡ }| ¡  ||fS )z“ Returns a 2-tuple containing:

    1. Output dataset shape
    2. HDF5 dataspace containing source selection.

    Works for scalar datasets.
    r
   z1Illegal selection function for non-scalar datasetNú-Illegal slicing argument for scalar dataspace)ÚshapeÚRuntimeErrorÚEllipsisr   Z	get_spaceÚ
select_all)ZdsidÚargsZ	out_shapeZsource_spacer
   r
   r   Úread_selections_scalar.   s    	

r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚScalarReadSelectionz5
        Implements slicing for scalar datasets.
    c                 C   sB   |dkrd | _ n|tfkr"d| _ ntdƒ‚t tj¡| _|| _d S )Nr
   r   )Zmshaper   r   r   ÚcreateZSCALARÚmspaceÚfspace)Úselfr    r   r
   r
   r   Ú__init__P   s    
zScalarReadSelection.__init__c                 c   s   | j  ¡  | j| j fV  d S r   )r   r   r    )r!   r
   r
   r   Ú__iter__[   s    
zScalarReadSelection.__iter__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   r#   r
   r
   r
   r   r   J   s   r   c                 C   s   | j dkrt| |ƒS tƒ ‚dS )zn Top-level dispatch function for reading.

    At the moment, only supports reading from scalar datasets.
    r
   N)r   r   ÚNotImplementedError)r    r   r
   r
   r   Úselect_read_   s    

r)   )	r'   Únumpyr   Ú r   r   r   r   r)   r
   r
   r
   r   Ú<module>
   s   