B
    ¬»ˆ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© úF/var/www/html/venv/lib/python3.7/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   Úname)r   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 datasetNz-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   z-Illegal slicing argument for scalar dataspace)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 )N)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   