B
    ð\Ó
  ã               @   sP   d Z ddlmZ ddlZddlmZ dd„ Zdd	„ ZG d
d„ de	ƒZ
dd„ ZdS )z7
    Implements a portion of the selection operations.
é    )Úabsolute_importNé   )Ú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© ú3lib/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_scalar0   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   ZcreateZSCALARÚmspaceÚfspace)Úselfr   r   r	   r	   r
   Ú__init__R   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   L   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_reada   s    

r&   )r$   Z
__future__r   Znumpyr   Ú r   r   r   Úobjectr   r&   r	   r	   r	   r
   Ú<module>   s   