U
    ½mœdô  ã                   @   sŒ   d Z ddlZddlZddlm  mZ ddlm  m	Z
 ddlmZmZ G dd„ deƒZG dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZdS )z0
    Tests for the (internal) selections module
é    Né   )ÚTestCaseÚutc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚBaseSelectionc                 C   s(   t  |  ¡ d¡| _| j dd¡j| _d S )NÚwÚx© )Úh5pyÚFileÚmktempÚfÚcreate_datasetÚidÚdsid©Úselfr   r   úS/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/h5py/tests/test_selections.pyÚsetUp   s    zBaseSelection.setUpc                 C   s   | j r| j  ¡  d S )N)r   Úcloser   r   r   r   ÚtearDown   s    zBaseSelection.tearDownN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      s   r   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTestTypeGenerationzU
        Internal feature: Determine output types from dataset dtype and fields.
    c                 C   s<   t  d¡}t |d¡\}}|  ||¡ |  |t  d¡¡ dS )z. Non-compound types are handled appropriately Úir   N)ÚnpÚdtypeÚsel2Úread_dtypesÚassertEqual©r   ÚdtÚoutÚformatr   r   r   Útest_simple$   s    
zTestTypeGeneration.test_simplec              	   C   s4   t  d¡}|  t¡ t |d¡\}}W 5 Q R X dS )z3 Field names for non-field types raises ValueError r   ©ÚaN)r   r   ÚassertRaisesÚ
ValueErrorr   r   r    r   r   r   Útest_simple_fieldexc+   s    
z'TestTypeGeneration.test_simple_fieldexcc              	   C   sÊ   t  dddg¡}t |d¡\}}|  ||¡ |  ||¡ t |d¡\}}|  ||¡ |  |t  ddg¡¡ t |d¡\}}|  |t  d¡¡ |  |t  dg¡¡ |  t¡ t |d¡\}}W 5 Q R X d	S )
z( Compound types with elemental subtypes )r&   r   )Úbr   )Úcz|S10r   )r&   r*   r%   r   )ÚjÚkN)r   r   r   r   r   r'   r(   r    r   r   r   Útest_compound_simple1   s    z'TestTypeGeneration.test_compound_simpleN)r   r   r   Ú__doc__r$   r)   r.   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdd„ ZdS )ÚTestScalarSliceRuleszD
        Internal feature: selections rules for scalar datasets
    c              	   C   sÀ   t  | jd¡\}}|  |d¡ |  | ¡ d¡ t  | jtf¡\}}|  |d¡ |  | ¡ d¡ |  t¡ t  | jd¡\}}W 5 Q R X | j 	dd¡j
}|  t¡ t  |d¡\}}W 5 Q R X dS )z* Permissible arguments for scalar slicing r   Nr   )r   Úy)r   Zread_selections_scalarr   r   Zget_select_npointsÚEllipsisr'   r(   r   r   r   ÚRuntimeError)r   ÚshapeZ	selectionr   r   r   r   Ú	test_argsN   s    zTestScalarSliceRules.test_argsN)r   r   r   r/   r5   r   r   r   r   r0   H   s   r0   c                   @   s   e Zd ZdZdd„ ZdS )ÚTestSelectionz/ High-level routes to generate a selection
    c              
   C   sx  | j  dd¡}|jdd…dd…f }t dtdddgƒ|¡}|  |tj¡ t dd	|¡}|  |tj¡ t d
t 	dddddg¡|¡}|  |tj
¡ t dd|¡}|  |tj¡ |  t¡ t dd|¡ W 5 Q R X t d||¡}|  |tj¡ |  t¡ t d|d ¡ W 5 Q R X |  t¡ t d||¡ W 5 Q R X t d||¡}|  ||¡ |  t¡ t d||¡ W 5 Q R X d S )NÚdset)éd   r8   r   r8   )é
   r   é   é   ))r   r:   r;   )é   TF)r8   Zfoo)r   r   Z	regionrefÚselÚselectÚlistZassertIsInstanceZFancySelectionr   ÚarrayZPointSelectionZSimpleSelectionr'   Ú	TypeErrorZ	Selectionr   )r   r7   ZregrefÚstZst1Zst2Zst3Zst4r   r   r   Útest_selectiond   s,    zTestSelection.test_selectionN)r   r   r   r/   rC   r   r   r   r   r6   _   s   r6   )r/   Únumpyr   r	   Zh5py._hl.selectionsZ_hlZ
selectionsr=   Zh5py._hl.selections2Zselections2r   Úcommonr   r   r   r   r0   r6   r   r   r   r   Ú<module>
   s   	*