a
    v=icI                     @   s   d Z ddlZddlZddl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eejjdkdG dd deZG dd deZeejjdkdG dd deZG dd deZG dd deZdd ZG dd deZdS )a  
    Tests the h5py.Dataset.__getitem__ method.

    This module does not specifically test type conversion.  The "type" axis
    therefore only tests objects which interact with the slicing system in
    unreliable ways; for example, compound and array types.

    See test_dataset_getitem_types for type-conversion tests.

    Tests are organized into TestCases by dataset shape and type.  Test
    methods vary by slicing arg type.

    1. Dataset shape:
        Empty
        Scalar
        1D
        3D

    2. Type:
        Float
        Compound
        Array

    3. Slicing arg types:
        Ellipsis
        Empty tuple
        Regular slice
        MultiBlockSlice
        Indexing
        Index list
        Boolean mask
        Field names
    N   )utTestCasec                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )	TestEmptyc                 C   sh   t |  tjtjj}tjj }|	d tj
| jjd||}t|| _ttd| _d S )N
      xZS10)r   setUph5pyh5screateZNULLh5tZC_S1copyZset_sizeh5dfidDatasetdsetEmptynpdtype	empty_obj)selfZsidtidZdsid r   p/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/h5py/tests/test_dataset_getitem.pyr   6   s    

zTestEmpty.setUpc                 C   s   |  | jjd dS  Verify number of dimensions r   NassertEqualr   ndimr   r   r   r   	test_ndim?   s    zTestEmpty.test_ndimc                 C   s   |  | jjd dS  Verify shape Nr   r   shaper    r   r   r   
test_shapeC   s    zTestEmpty.test_shapec                 C   s   |  | jjd dS r"   r   r   sizer    r   r   r   	test_sizeG   s    zTestEmpty.test_sizec                 C   s   |  | jjd dS ) Verify nbytes r   N)r   r   nbytesr    r   r   r   test_nbytesK   s    zTestEmpty.test_nbytesc                 C   s   |  | jd | j d S N.r   r   r   r    r   r   r   test_ellipsisO   s    zTestEmpty.test_ellipsisc                 C   s   |  | jd | j d S Nr   r.   r    r   r   r   
test_tupleR   s    zTestEmpty.test_tuplec                 C   s<   |  t | jdd  W d   n1 s.0    Y  dS z slice -> ValueError r      NassertRaises
ValueErrorr   r    r   r   r   
test_sliceU   s    zTestEmpty.test_slicec                 C   s<   |  t | jt   W d   n1 s.0    Y  dS z MultiBlockSlice -> ValueError Nr5   r6   r   r	   ZMultiBlockSlicer    r   r   r   test_multi_block_sliceZ   s    z TestEmpty.test_multi_block_slicec                 C   s8   |  t | jd  W d   n1 s*0    Y  dS z index -> ValueError r   Nr4   r    r   r   r   
test_index_   s    zTestEmpty.test_indexc                 C   s<   |  t | jg d  W d   n1 s.0    Y  dS  index list -> ValueError r         Nr4   r    r   r   r   test_indexlistd   s    zTestEmpty.test_indexlistc                 C   sF   t jddd}| t | j|  W d   n1 s80    Y  dS z mask -> ValueError Tboolr   Nr   arrayr5   r6   r   r   maskr   r   r   	test_maski   s    zTestEmpty.test_maskc                 C   s8   |  t | jd  W d   n1 s*0    Y  dS )z field name -> ValueError fieldNr4   r    r   r   r   test_fieldnameso   s    zTestEmpty.test_fieldnamesN__name__
__module____qualname__r   r!   r&   r)   r,   r/   r1   r7   r:   r<   rB   rJ   rL   r   r   r   r   r   4   s   	r   c                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestScalarFloatc                 C   s2   t |  tjddd| _| jjd| jd| _d S )N     @E@r   rE   xdatar   r   r   rG   rU   r   create_datasetr   r    r   r   r   r   w   s    
zTestScalarFloat.setUpc                 C   s   |  | jjd dS r   r   r    r   r   r   r!   |   s    zTestScalarFloat.test_ndimc                 C   s   |  | jjd dS  Verify size r   Nr'   r    r   r   r   r)      s    zTestScalarFloat.test_sizec                 C   s   |  | jj| jjj dS r*   Nr   r   r+   rU   r   itemsizer    r   r   r   r,      s    zTestScalarFloat.test_nbytesc                 C   s   |  | jjt  dS r"   r   r   r%   tupler    r   r   r   r&      s    zTestScalarFloat.test_shapec                 C   s   | j d }| || j dS z Ellipsis -> scalar ndarray .Nr   assertArrayEqualrU   r   outr   r   r   r/      s    
zTestScalarFloat.test_ellipsisc                 C   s    | j d }| || j  dS )z () -> bare item r   N)r   ra   rU   itemrb   r   r   r   r1      s    
zTestScalarFloat.test_tuplec                 C   s<   |  t | jdd  W d   n1 s.0    Y  dS r2   r4   r    r   r   r   r7      s    zTestScalarFloat.test_slicec                 C   s<   |  t | jt   W d   n1 s.0    Y  dS r8   r9   r    r   r   r   r:      s    z&TestScalarFloat.test_multi_block_slicec                 C   s8   |  t | jd  W d   n1 s*0    Y  dS r;   r4   r    r   r   r   r<      s    zTestScalarFloat.test_indexc                 C   s<   |  t | jg d  W d   n1 s.0    Y  dS r=   r4   r    r   r   r   rB      s    zTestScalarFloat.test_indexlistc                 C   sF   t jddd}| t | j|  W d   n1 s80    Y  dS rC   rF   rH   r   r   r   rJ      s    zTestScalarFloat.test_maskc                 C   s8   |  t | jd  W d   n1 s*0    Y  dS z& field name -> ValueError (no fields) rK   Nr4   r    r   r   r   rL      s    zTestScalarFloat.test_fieldnamesNrN   rO   rP   r   r!   r)   r,   r&   r/   r1   r7   r:   r<   rB   rJ   rL   r   r   r   r   rQ   u   s   rQ   c                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestScalarCompoundc                 C   s6   t |  tjdg dd| _| jjd| jd| _d S )N)rR   iZHello))ar   )bi)cz|S10rE   rS   rT   rV   r    r   r   r   r      s    
zTestScalarCompound.setUpc                 C   s   |  | jjd dS r   r   r    r   r   r   r!      s    zTestScalarCompound.test_ndimc                 C   s   |  | jjt  dS r"   r]   r    r   r   r   r&      s    zTestScalarCompound.test_shapec                 C   s   |  | jjd dS rX   r'   r    r   r   r   r)      s    zTestScalarCompound.test_sizec                 C   s   |  | jj| jjj dS rZ   r[   r    r   r   r   r,      s    zTestScalarCompound.test_nbytesc                 C   s@   | j d }| |tj | |j| jj | |j| jj dS r_   )r   assertIsInstancer   Zndarrayr   r%   rU   r   rb   r   r   r   r/      s    
z TestScalarCompound.test_ellipsisc                 C   s.   | j d }| |tj | |j| jj dS )z () -> np.void instance r   N)r   rl   r   voidr   r   rU   rb   r   r   r   r1      s    
zTestScalarCompound.test_tuplec                 C   s<   |  t | jdd  W d   n1 s.0    Y  dS r2   r4   r    r   r   r   r7      s    zTestScalarCompound.test_slicec                 C   s<   |  t | jt   W d   n1 s.0    Y  dS r8   r9   r    r   r   r   r:      s    z)TestScalarCompound.test_multi_block_slicec                 C   s8   |  t | jd  W d   n1 s*0    Y  dS r;   r4   r    r   r   r   r<      s    zTestScalarCompound.test_indexc                 C   s<   |  t | jg d  W d   n1 s.0    Y  dS r=   r4   r    r   r   r   rB      s    z!TestScalarCompound.test_indexlistc                 C   sF   t jddd}| t | j|  W d   n1 s80    Y  dS )z mask -> ValueError  TrD   rE   NrF   rH   r   r   r   rJ      s    zTestScalarCompound.test_maskc                 C   s.   | j d }| |tj | || j d  dS )z field name -> bare value rh   N)r   rl   r   float32r   rb   r   r   r   rL      s    
z"TestScalarCompound.test_fieldnamesNrM   r   r   r   r   rg      s   rg   c                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestScalarArrayc                 C   sP   t |  td| _tjg ddd| _| jjdd| jd| _	| j| j	d< d S )Nz(3,2)f))g	@i)*   g33333X@)gQ	@r   r   rE   rS   r   .)
r   r   r   r   dtrG   rU   r   rW   r   r    r   r   r   r     s
    
zTestScalarArray.setUpc                 C   s$   |  | jjd |  | jjd dS )r   r@   r   N)r   rU   r   r   r    r   r   r   r!   
  s    zTestScalarArray.test_ndimc                 C   s   |  | jjd dS rX   r'   r    r   r   r   r)     s    zTestScalarArray.test_sizec                 C   s   |  | jj| jjj dS rZ   )r   r   r+   r   r\   r    r   r   r   r,     s    zTestScalarArray.test_nbytesc                 C   s&   |  | jjd |  | jjt  dS )r#   )   r@   N)r   rU   r%   r   r^   r    r   r   r   r&     s    zTestScalarArray.test_shapec                 C   s   | j d }| || j dS )z2 Ellipsis -> ndarray promoted to underlying shape .Nr`   rb   r   r   r   r/     s    
zTestScalarArray.test_ellipsisc                 C   s   | j d }| || j dS ) () -> same as ellipsis .Nr`   rb   r   r   r   r1   !  s    
zTestScalarArray.test_tuplec                 C   s<   |  t | jdd  W d   n1 s.0    Y  dS r2   r4   r    r   r   r   r7   &  s    zTestScalarArray.test_slicec                 C   s<   |  t | jt   W d   n1 s.0    Y  dS r8   r9   r    r   r   r   r:   +  s    z&TestScalarArray.test_multi_block_slicec                 C   s8   |  t | jd  W d   n1 s*0    Y  dS r;   r4   r    r   r   r   r<   0  s    zTestScalarArray.test_indexc                 C   s8   |  t | jg   W d   n1 s*0    Y  dS )r>   Nr4   r    r   r   r   rB   5  s    zTestScalarArray.test_indexlistc                 C   sF   t jddd}| t | j|  W d   n1 s80    Y  dS rC   rF   rH   r   r   r   rJ   :  s    zTestScalarArray.test_maskc                 C   s8   |  t | jd  W d   n1 s*0    Y  dS re   r4   r    r   r   r   rL   @  s    zTestScalarArray.test_fieldnamesNrf   r   r   r   r   ro     s   ro   )r         zHDF5 1.8.7+ requiredc                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )Test1DZeroFloatc                 C   s2   t |  tjddd| _| jjd| jd| _d S )Nr   r   rE   rS   rT   r   r   r   onesrU   r   rW   r   r    r   r   r   r   I  s    
zTest1DZeroFloat.setUpc                 C   s   |  | jjd dS r   r   Nr   r    r   r   r   r!   N  s    zTest1DZeroFloat.test_ndimc                 C   s   |  | jjd dS )r#   rw   Nr$   r    r   r   r   r&   R  s    zTest1DZeroFloat.test_shapec                 C   s   |  | j| jtjd  dS )z' Ellipsis -> ndarray of matching shape .NassertNumpyBehaviorr   rU   r   s_r    r   r   r   r/   V  s    zTest1DZeroFloat.test_ellipsisc                 C   s   |  | j| jtjd  dS )rs   r   Nr{   r    r   r   r   r1   Z  s    zTest1DZeroFloat.test_tuplec                 C   s    |  | j| jtjdd  dS )z  slice -> ndarray of shape (0,) r   r3   Nr{   r    r   r   r   r7   ^  s    zTest1DZeroFloat.test_slicec                 C   s    |  | j| jtjdd  d S Nru   rA   r{   r    r   r   r   test_slice_stop_less_than_startb  s    z/Test1DZeroFloat.test_slice_stop_less_than_startc                 C   s8   |  t | jd  W d   n1 s*0    Y  dS )z index -> out of range r   Nr5   
IndexErrorr   r    r   r   r   r<   e  s    zTest1DZeroFloat.test_indexc                 C   s   |  | j| jtjg   dS )z index list Nr{   r    r   r   r   rB   j  s    zTest1DZeroFloat.test_indexlistc                 C   s.   t jddd}| j| j| jt j| dd dS )z# mask -> ndarray of matching shape rw   rD   rE   TZskip_fast_readerN)r   ry   r|   r   rU   r}   rH   r   r   r   rJ   n  s    zTest1DZeroFloat.test_maskc                 C   s8   |  t | jd  W d   n1 s*0    Y  dS re   r4   r    r   r   r   rL   y  s    zTest1DZeroFloat.test_fieldnamesN)rN   rO   rP   r   r!   r&   r/   r1   r7   r   r<   rB   rJ   rL   r   r   r   r   rv   F  s   rv   c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCS )DTest1DFloatc                 C   s4   t |  tdd| _| jjd| jd| _d S )N   r   rS   rT   )	r   r   r   arangeZastyperU   r   rW   r   r    r   r   r   r     s    
zTest1DFloat.setUpc                 C   s   |  | jjd dS rz   r   r    r   r   r   r!     s    zTest1DFloat.test_ndimc                 C   s   |  | jjd dS )r#   )r   Nr$   r    r   r   r   r&     s    zTest1DFloat.test_shapec                 C   s   |  | j| jtjd  d S r-   r{   r    r   r   r   r/     s    zTest1DFloat.test_ellipsisc                 C   s   |  | j| jtjd  d S r0   r{   r    r   r   r   r1     s    zTest1DFloat.test_tuplec                 C   s    |  | j| jtjdd  d S )Nr   r3   r{   r    r   r   r   test_slice_simple  s    zTest1DFloat.test_slice_simplec                 C   s    |  | j| jtjdd  d S )Nr3   r{   r    r   r   r   test_slice_zerosize  s    zTest1DFloat.test_slice_zerosizec                 C   s"   |  | j| jtjddd  d S )Nr   ru   rr   r{   r    r   r   r   test_slice_strides  s    zTest1DFloat.test_slice_stridesc                 C   s"   |  | j| jtjddd  d S )Nirr   r{   r    r   r   r   test_slice_negindexes  s    z!Test1DFloat.test_slice_negindexesc                 C   s    |  | j| jtjdd  d S r~   r{   r    r   r   r   r     s    z+Test1DFloat.test_slice_stop_less_than_startc                 C   s"   |  | j| jtjddd  d S )Nd   i  rr   r{   r    r   r   r   test_slice_outofrange  s    z!Test1DFloat.test_slice_outofrangec                 C   s>   |  t  | jddd  W d   n1 s00    Y  dS )z we disallow negative steps Nr4   r    r   r   r   test_slice_backwards  s    z Test1DFloat.test_slice_backwardsc                 C   s"   |  | j| jtjd d d  d S )Nr   r{   r    r   r   r   test_slice_zerostride  s    z!Test1DFloat.test_slice_zerostridec                 C   s   |  | j| jtjd  d S )Nrr   r{   r    r   r   r   test_index_simple  s    zTest1DFloat.test_index_simplec                 C   s   |  | j| jtjd  d S )Nr{   r    r   r   r   test_index_neg  s    zTest1DFloat.test_index_negc                 C   s8   |  t | jd   W d    n1 s*0    Y  d S Nr5   	TypeErrorr   r    r   r   r   test_index_none  s    zTest1DFloat.test_index_nonec                 C   s8   |  t | ji   W d   n1 s*0    Y  dS )z Illegal slicing argument Nr   r    r   r   r   test_index_illegal  s    zTest1DFloat.test_index_illegalc                 C   s8   |  t | jd  W d    n1 s*0    Y  d S Nr   r   r    r   r   r   test_index_outofrange  s    z!Test1DFloat.test_index_outofrangec                 C   s    |  | j| jtjg d  d S Nr?   r{   r    r   r   r   test_indexlist_simple  s    z!Test1DFloat.test_indexlist_simplec              	   C   s&   |  | j| jtjtg d  d S r   r|   r   rU   r   r}   rG   r    r   r   r   test_indexlist_numpyarray  s    z%Test1DFloat.test_indexlist_numpyarrayc                 C   s"   |  | j| jtjdgdf  d S Nr   .r{   r    r   r   r   $test_indexlist_single_index_ellipsis  s    z0Test1DFloat.test_indexlist_single_index_ellipsisc                 C   s(   |  | j| jtjtdgdf  d S r   r   r    r   r   r   /test_indexlist_numpyarray_single_index_ellipsis  s    z;Test1DFloat.test_indexlist_numpyarray_single_index_ellipsisc              	   C   s*   |  | j| jtjtg ddf  d S )Nr?   .r   r    r   r   r   "test_indexlist_numpyarray_ellipsis  s    z.Test1DFloat.test_indexlist_numpyarray_ellipsisc                 C   s   |  | j| jtjg   d S r   r{   r    r   r   r   test_indexlist_empty  s    z Test1DFloat.test_indexlist_emptyc                 C   s:   |  t | jdg  W d    n1 s,0    Y  d S r   r   r    r   r   r   test_indexlist_outofrange  s    z%Test1DFloat.test_indexlist_outofrangec                 C   s<   |  t | jg d  W d   n1 s.0    Y  dS )z8 we require index list values to be strictly increasing )r   rr   r@   Nr   r    r   r   r   test_indexlist_nonmonotonic  s    z'Test1DFloat.test_indexlist_nonmonotonicc                 C   sX   |  | j| jtjg d  | t | jddg  W d    n1 sJ0    Y  d S )N)r   r@   r   r   )r|   r   rU   r   r}   r5   r   r    r   r   r   !test_indexlist_monotonic_negative  s    z-Test1DFloat.test_indexlist_monotonic_negativec                 C   s<   |  t | jg d  W d   n1 s.0    Y  dS )z! we forbid repeated index values )r   r   r@   Nr   r    r   r   r   test_indexlist_repeated  s    z#Test1DFloat.test_indexlist_repeatedc                 C   s&   | j | j| jtj| jdk dd d S )NiTr   r{   r    r   r   r   test_mask_true  s    zTest1DFloat.test_mask_truec                 C   s&   | j | j| jtj| jdk dd d S )Nr   Tr   r{   r    r   r   r   test_mask_false  s    zTest1DFloat.test_mask_falsec                 C   s&   | j | j| jtj| jdk dd d S )NrA   Tr   r{   r    r   r   r   test_mask_partial  s    zTest1DFloat.test_mask_partialc                 C   sB   |  t$ | jtjddd  W d   n1 s40    Y  dS )z4 we require the boolean mask shape to match exactly )r@   rD   rE   N)r5   r   r   r   ry   r    r   r   r   test_mask_wrongsize  s    zTest1DFloat.test_mask_wrongsizec                 C   s8   |  t | jd  W d   n1 s*0    Y  dS re   r4   r    r   r   r   rL   	  s    zTest1DFloat.test_fieldnamesN)$rN   rO   rP   r   r!   r&   r/   r1   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rL   r   r   r   r   r     sB   			r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Test2DZeroFloatc                 C   s2   t |  tjddd| _| jjd| jd| _d S )Nr   rr   r   rE   rS   rT   rx   r    r   r   r   r     s    
zTest2DZeroFloat.setUpc                 C   s   |  | jjd dS r   r@   Nr   r    r   r   r   r!     s    zTest2DZeroFloat.test_ndimc                 C   s   |  | jjd dS )r#   r   Nr$   r    r   r   r   r&     s    zTest2DZeroFloat.test_shapec                 C   s(   |  | j| jtjddg df  dS z see issue #473 N)r   r   r@   r{   r    r   r   r   rB     s    zTest2DZeroFloat.test_indexlistN)rN   rO   rP   r   r!   r&   rB   r   r   r   r   r     s   r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )Test2DFloatc                 C   s2   t |  tjddd| _| jjd| jd| _d S )NrA   rr   r   rE   rS   rT   rx   r    r   r   r   r   &  s    
zTest2DFloat.setUpc                 C   s   |  | jjd dS r   r   r    r   r   r   r!   +  s    zTest2DFloat.test_ndimc                 C   s   |  | jjd dS )rY      Nr'   r    r   r   r   r)   /  s    zTest2DFloat.test_sizec                 C   s   |  | jjd| jjj  dS )r*   r   Nr[   r    r   r   r   r,   3  s    zTest2DFloat.test_nbytesc                 C   s   |  | jjd dS )r#   r   Nr$   r    r   r   r   r&   7  s    zTest2DFloat.test_shapec                 C   s(   |  | j| jtjddg df  dS r   r{   r    r   r   r   rB   ;  s    zTest2DFloat.test_indexlistc                 C   s<   |  | j| jtjd d g f  |  | j| jtjg   d S r   r{   r    r   r   r   test_index_emptylist?  s     z Test2DFloat.test_index_emptylistN)
rN   rO   rP   r   r!   r)   r,   r&   rB   r   r   r   r   r   r   $  s   r   c                   @   s.   e Zd Zdd Zeejdk ddd ZdS )TestVeryLargeArrayc                 C   s    t |  | jjddd| _d S )NrS   )i   i   )r%   )r   r   r   rW   r   r    r   r   r   r   F  s    
zTestVeryLargeArray.setUp        z&Maximum integer size >= 2**31 requiredc                 C   s   |  | jjd d S )Nr   r'   r    r   r   r   r)   J  s    zTestVeryLargeArray.test_sizeN)	rN   rO   rP   r   r   ZskipIfsysmaxsizer)   r   r   r   r   r   D  s   r   c              
   C   st   t jt jj}|d |t jj t t j| j	dt j
jt jd|}tj|d d tdtj d S )N)r      a)rA   rr   )r	   Zh5pr   ZDATASET_CREATEZ	set_chunkZset_fill_timer   ZFILL_TIME_NEVERr   r   r   Z
IEEE_F64LEr
   Zcreate_simpler   testingZassert_array_equalZzerosfloat64)Zwritable_fileZdcplZdsr   r   r   test_read_no_fill_valueO  s    

r   c                       s0   e Zd ZdZ fddZdd Zdd Z  ZS )TestBoolIndexz0
    Tests for indexing with Boolean arrays
    c                    s6   t    tddd| _| jjd| jd| _d S )N	   rr   r   rS   rT   )	superr   r   r   Zreshapearrr   rW   r   r    	__class__r   r   r   `  s    
zTestBoolIndex.setUpc                 C   s,   t jg dd d f }| | j| j| d S )N)FTF)r   r}   r|   r   r   r   selr   r   r   test_select_first_axise  s    z$TestBoolIndex.test_select_first_axisc                 C   sN   t jg dd d f }| t | j|  W d    n1 s@0    Y  d S )N)FTFF)r   r}   r5   r   r   r   r   r   r   test_wrong_sizei  s    zTestBoolIndex.test_wrong_size)rN   rO   rP   __doc__r   r   r   __classcell__r   r   r   r   r   \  s   r   )r   r   numpyr   r	   commonr   r   r   rQ   rg   ro   Z
skipUnlessversionZhdf5_version_tuplerv   r   r   r   r   r   r   r   r   r   r   <module>
   s$   "ACIE8  