U
    HvfM                     @   s$  d dl mZ d dlZd dlZd dlmZmZmZm	Z	 d dl
Z
d dlmZ d dlmZ eeedZdd Zd	d
 Zdd ZeeZG dd dZG dd dZG dd deZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZ dd  Z!d!d" Z"d#d$ Z#dS )%    )pathN)assert_equalassert_array_equalassert_suppress_warnings)readsav)_idldatac                  G   s4   t jt| td}tt| D ]}| | ||< q|S )z#Constructs a numpy array of objectsdtype)npemptylenobjectrange)argsarrayi r   ;/tmp/pip-unpacked-wheel-96ln3f52/scipy/io/tests/test_idl.pyobject_array   s    r   c                 C   sL   t | | t|tkr*t t| t| nt t| jjt|jj dS )z*Assert whether value AND type are the sameN)r   typestrr   Zasarrayr   abr   r   r   assert_identical   s    
r   c                 C   s    t | | t| jj|jj dS )z+Assert whether values AND type are the sameN)r   r   r   r   r   r   r   r   assert_array_identical    s    
r   c                   @   s   e Zd Zdd ZdS )	TestIdictc                 C   sr   dt di}t|}tttd|dd}t|t| td|k t	|d t d t	|d t 
d d S )Nr   i  scalar_byte.savF)Zidictverbosei8u   )r   int16idr   r   join	DATA_PATHr   r   r   uint8)selfZcustom_dictZoriginal_idsr   r   r   
test_idict,   s    zTestIdict.test_idictN)__name__
__module____qualname__r*   r   r   r   r   r   *   s   r   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S ) TestScalarsc                 C   s*   t ttddd}t|jtd d S )Nr   Fr    r"   r   r   r%   r&   r   r!   r   r'   r(   r)   r   r   r   	test_byte9   s    zTestScalars.test_bytec                 C   s*   t ttddd}t|jtd d S )Nzscalar_int16.savFr/   i`)r   r   r%   r&   r   Zi16sr   r#   r1   r   r   r   
test_int16=   s    zTestScalars.test_int16c                 C   s*   t ttddd}t|jtd d S )Nzscalar_int32.savFr/   i.i)r   r   r%   r&   r   Zi32sr   int32r1   r   r   r   
test_int32A   s    zTestScalars.test_int32c                 C   s*   t ttddd}t|jtd d S )Nzscalar_float32.savFr/   )r   r   r%   r&   r   f32r   float32r1   r   r   r   test_float32E   s    zTestScalars.test_float32c                 C   s*   t ttddd}t|jtd d S )Nzscalar_float64.savFr/   gCmC)r   r   r%   r&   r   Zf64r   float64r1   r   r   r   test_float64I   s    zTestScalars.test_float64c                 C   s*   t ttddd}t|jtd d S )Nzscalar_complex32.savFr/   y  )jB̕h~=r)r   r   r%   r&   r   Zc32r   	complex64r1   r   r   r   test_complex32M   s    zTestScalars.test_complex32c                 C   s*   t ttddd}t|jtd d S )Nzscalar_string.savFr/   z.The quick brown fox jumps over the lazy python)r   r   r%   r&   r   r)   r   Zbytes_r1   r   r   r   
test_bytesQ   s    zTestScalars.test_bytesc                 C   s   d S Nr   r(   r   r   r   test_structureU   s    zTestScalars.test_structurec                 C   s*   t ttddd}t|jtd d S )Nzscalar_complex64.savFr/   *3Wo)r   r   r%   r&   r   c64r   
complex128r1   r   r   r   test_complex64X   s    zTestScalars.test_complex64c                 C   s   d S r?   r   r@   r   r   r   test_heap_pointer\   s    zTestScalars.test_heap_pointerc                 C   s   d S r?   r   r@   r   r   r   test_object_reference_   s    z!TestScalars.test_object_referencec                 C   s*   t ttddd}t|jtd d S )Nzscalar_uint16.savFr/   i  )r   r   r%   r&   r   Zi16ur   Zuint16r1   r   r   r   test_uint16b   s    zTestScalars.test_uint16c                 C   s*   t ttddd}t|jtd d S )Nzscalar_uint32.savFr/   l    )r   r   r%   r&   r   Zi32ur   Zuint32r1   r   r   r   test_uint32f   s    zTestScalars.test_uint32c                 C   s*   t ttddd}t|jtd d S )Nzscalar_int64.savFr/   l'{ )r   r   r%   r&   r   Zi64sr   Zint64r1   r   r   r   
test_int64j   s    zTestScalars.test_int64c                 C   s*   t ttddd}t|jtd d S )Nzscalar_uint64.savFr/   l   ( )r   r   r%   r&   r   Zi64ur   Zuint64r1   r   r   r   test_uint64n   s    zTestScalars.test_uint64N)r+   r,   r-   r2   r3   r5   r9   r;   r=   r>   rA   rE   rF   rG   rH   rI   rJ   rK   r   r   r   r   r.   6   s   r.   c                   @   s   e Zd Zdd ZdS )TestCompressedc                 C   s   t ttddd}t|jtd t|jt	d t|j
td t|jjd t|jjd tjd	d
dgtjd t|jjd tjddddgtj	d t|jjd ttdtdg t|jjd tjdddgtd d S )Nzvarious_compressed.savFr/   r"   r6   rB         rN         r         rO   r
         @      @      @      @      ?       @      @       @   cheese   bacon   spam)r   r   r%   r&   r   r!   r   r'   r7   r8   rC   rD   r   array5dshapearraysr   r   r#   r   cr<   dr   r1   r   r   r   test_compressedv   s    $&(zTestCompressed.test_compressedN)r+   r,   r-   rb   r   r   r   r   rL   s   s   rL   c                   @   sL   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S )TestArrayDimensionsc                 C   s&   t ttddd}t|jjd d S )Nzarray_float32_1d.savFr/   {   )r   r   r%   r&   r   array1dr^   r1   r   r   r   test_1d   s    zTestArrayDimensions.test_1dc                 C   s&   t ttddd}t|jjd d S )Nzarray_float32_2d.savFr/         )r   r   r%   r&   r   array2dr^   r1   r   r   r   test_2d   s    zTestArrayDimensions.test_2dc                 C   s&   t ttddd}t|jjd d S )Nzarray_float32_3d.savFr/      ri   rj   )r   r   r%   r&   r   array3dr^   r1   r   r   r   test_3d   s    zTestArrayDimensions.test_3dc                 C   s&   t ttddd}t|jjd d S )Nzarray_float32_4d.savFr/   rN   rQ         )r   r   r%   r&   r   array4dr^   r1   r   r   r   test_4d   s    zTestArrayDimensions.test_4dc                 C   s&   t ttddd}t|jjd d S )Nzarray_float32_5d.savFr/   rM   )r   r   r%   r&   r   r]   r^   r1   r   r   r   test_5d   s    zTestArrayDimensions.test_5dc                 C   s&   t ttddd}t|jjd d S )Nzarray_float32_6d.savFr/   rO   rP   rN   rQ   rO   rN   )r   r   r%   r&   r   array6dr^   r1   r   r   r   test_6d   s    zTestArrayDimensions.test_6dc                 C   s&   t ttddd}t|jjd d S )Nzarray_float32_7d.savFr/   rS   rR   rS   rO   rN   rO   rS   )r   r   r%   r&   r   array7dr^   r1   r   r   r   test_7d   s    zTestArrayDimensions.test_7dc                 C   s&   t ttddd}t|jjd d S )Nzarray_float32_8d.savFr/   rN   rO   rS   rR   rS   rO   rQ   rN   )r   r   r%   r&   r   array8dr^   r1   r   r   r   test_8d   s    zTestArrayDimensions.test_8dNr+   r,   r-   rg   rl   rp   ru   rv   ry   r|   r   r   r   r   r   rc      s   rc   c                   @   sL   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S )TestStructuresc                 C   s   t ttddd}t|jjtt	d t|jj
ttd t|jjttd t|jjttd t|jjtjdgtd	 t|jjttd
 d S )Nzstruct_scalars.savFr/   rR   rS         @rT   r\   r
               @)r   r   r%   r&   r   Zscalarsr   r   r   r#   r   r4   r`   r8   ra   r:   er   fr<   r1   r   r   r   test_scalars   s    zTestStructures.test_scalarsc                 C   s   t ttddd}t|jjtt	dd t|jj
ttdd t|jjttdd t|jjttdd t|jjtd	dt t|jjttd
d d S )Nzstruct_scalars_replicated.savFr/   rR   rQ   rS   r   rT   r\   r   )r   r   r%   r&   r   scalars_repr   r   repeatr#   r   r4   r`   r8   ra   r:   r   astyper   r   r<   r1   r   r   r   test_scalars_replicated   s    z&TestStructures.test_scalars_replicatedc                 C   s   t ttddd}t|jjtt	dd
ddd t|jjttdd
ddd t|jjttd	d
ddd t|jjttd
d
ddd t|jjtdd
dddt t|jjttdd
ddd d S )Nz struct_scalars_replicated_3d.savFr/   rR      rN   rO   rS   r   rT   r\   r   )r   r   r%   r&   r   r   r   r   r   r#   reshaper   r4   r`   r8   ra   r:   r   r   r   r   r<   r1   r   r   r   test_scalars_replicated_3d   s    &&&&&z)TestStructures.test_scalars_replicated_3dc                 C   s   t ttddd}t|jjd tjdddgtj	d t|jj
d tjd	d
ddgtjd t|jjd ttdtdg t|jjd tjdddgtd d S )Nzstruct_arrays.savFr/   r   rR   rS   rO   r
   rT   rU   rV   rW   rX   rY   rZ   r[   r\   )r   r   r%   r&   r   r_   r   r   r   r#   r   r8   r`   r<   ra   r   r1   r   r   r   test_arrays   s
    $&(zTestStructures.test_arraysc              	   C   sR  t ttddd}t|jjjjt	j
k t|jjjjt	j
k t|jjjjt	j
k t|jjjjt	j
k t|jjjd t|jjjd t|jjjd t|jjjd tdD ]}t|jj| t	jdddgt	jd	 t|jj| t	jd
dddgt	jd	 t|jj| t	t	dt	dg t|jj| t	jdddgtd	 qd S )Nzstruct_arrays_replicated.savFr/   rQ   rQ   rR   rS   rO   r
   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r   r   r%   r&   r   
arrays_repr   r   r   r   object_r   r`   ra   r   r^   r   r   r   r#   r8   r<   r   r(   r)   r   r   r   r   test_arrays_replicated   s4    z%TestStructures.test_arrays_replicatedc                 C   s  t ttddd}t|jjjjt	j
k t|jjjjt	j
k t|jjjjt	j
k t|jjjjt	j
k t|jjjd t|jjjd t|jjjd t|jjjd tdD ]}tdD ]}tdD ]}t|jj|||f t	jdddgt	jd	 t|jj|||f t	jd
dddgt	jd	 t|jj|||f t	t	dt	dg t|jj|||f t	jdddgtd	 qqqd S )Nzstruct_arrays_replicated_3d.savFr/   rN   rO   rS   rN   rO   rS   rR   r
   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r   )r(   r)   r   jkr   r   r   test_arrays_replicated_3d   s<    z(TestStructures.test_arrays_replicated_3dc                 C   s   t ttddd}t|jjtjdgtj	d t|jj
tjdgtj	d t|jjtjdgtj	d t|jjtjdgtj	d d S )Nzstruct_inherit.savFr/   r   r
   rN   )r   r   r%   r&   r   Zfcxr   r   r#   yrr`   r1   r   r   r   test_inheritance  s
    zTestStructures.test_inheritancec              	   C   sX   t  &}|td tttddd}W 5 Q R X t|jj	d t
jddgt
jd d S )	Nz.Not able to verify number of bytes from headerzstruct_arrays_byte_idl80.savFr/   r   7   B   r
   )r   filterUserWarningr   r   r%   r&   r   r   r   r   r   r'   )r(   supr)   r   r   r   test_arrays_corrupt_idl80  s    z(TestStructures.test_arrays_corrupt_idl80N)r+   r,   r-   r   r   r   r   r   r   r   r   r   r   r   r   r      s   			r   c                   @   s   e Zd Zdd ZdS )TestPointersc                 C   sL   t ttddd}t|jtd t|jtd t	|j|jk d S )Nzscalar_heap_pointer.savFr/   rB   )
r   r   r%   r&   r   Zc64_pointer1r   rD   Zc64_pointer2r   r1   r   r   r   test_pointers  s    zTestPointers.test_pointersN)r+   r,   r-   r   r   r   r   r   r     s   r   c                   @   sL   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S )TestPointerArrayc                 C   sb   t ttddd}t|jjd tt	|jt
dk tt	t|jt|jd k d S )Nzarray_float32_pointer_1d.savFr/   rd   rT   r   )r   r   r%   r&   r   rf   r^   r   r   allr8   vect_idr$   r1   r   r   r   rg   $  s    zTestPointerArray.test_1dc                 C   sb   t ttddd}t|jjd tt	|jt
dk tt	t|jt|jd k d S )Nzarray_float32_pointer_2d.savFr/   rh   rT   )r   r   )r   r   r%   r&   r   rk   r^   r   r   r   r8   r   r$   r1   r   r   r   rl   *  s    zTestPointerArray.test_2dc                 C   sb   t ttddd}t|jjd tt	|jt
dk tt	t|jt|jd k d S )Nzarray_float32_pointer_3d.savFr/   rm   rT   r   r   r   )r   r   r%   r&   r   ro   r^   r   r   r   r8   r   r$   r1   r   r   r   rp   0  s    zTestPointerArray.test_3dc                 C   sb   t ttddd}t|jjd tt	|jt
dk tt	t|jt|jd k d S )Nzarray_float32_pointer_4d.savFr/   rq   rT   )r   r   r   r   )r   r   r%   r&   r   rt   r^   r   r   r   r8   r   r$   r1   r   r   r   ru   6  s    zTestPointerArray.test_4dc                 C   sb   t ttddd}t|jjd tt	|jt
dk tt	t|jt|jd k d S )Nzarray_float32_pointer_5d.savFr/   rM   rT   )r   r   r   r   r   )r   r   r%   r&   r   r]   r^   r   r   r   r8   r   r$   r1   r   r   r   rv   <  s    zTestPointerArray.test_5dc                 C   sb   t ttddd}t|jjd tt	|jt
dk tt	t|jt|jd k d S )Nzarray_float32_pointer_6d.savFr/   rw   rT   )r   r   r   r   r   r   )r   r   r%   r&   r   rx   r^   r   r   r   r8   r   r$   r1   r   r   r   ry   B  s    zTestPointerArray.test_6dc                 C   sb   t ttddd}t|jjd tt	|jt
dk tt	t|jt|jd k d S )Nzarray_float32_pointer_7d.savFr/   rz   rT   )r   r   r   r   r   r   r   )r   r   r%   r&   r   r{   r^   r   r   r   r8   r   r$   r1   r   r   r   r|   H  s    zTestPointerArray.test_7dc                 C   sb   t ttddd}t|jjd tt	|jt
dk tt	t|jt|jd k d S )Nzarray_float32_pointer_8d.savFr/   r}   rT   )r   r   r   r   r   r   r   r   )r   r   r%   r&   r   r~   r^   r   r   r   r8   r   r$   r1   r   r   r   r   N  s    zTestPointerArray.test_8dNr   r   r   r   r   r   !  s   r   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S )TestPointerStructuresc                 C   s|   t ttddd}t|jjtjt	dtj
d t|jjtjt	dtj
d tt|jjd t|jjd k d S )Nzstruct_pointers.savFr/   rT   r
   r   )r   r   r%   r&   r   Zpointersgr   r   r8   r   hr   r$   r1   r   r   r   r   X  s      z"TestPointerStructures.test_scalarsc                 C   s   t ttddd}t|jjtt	dd
tj t|jjtt	dd
tj ttt|jjt|jjk d S )Nzstruct_pointers_replicated.savFr/   rT   rQ   )r   r   r%   r&   r   pointers_repr   r   r   r8   r   r   r   r   r   r   r1   r   r   r   test_pointers_replicated^  s    $$z.TestPointerStructures.test_pointers_replicatedc                 C   sz   t ttddd}ttdddddtj	}t
|jj| t
|jj| ttt|jjt|jjk d S )	Nz!struct_pointers_replicated_3d.savFr/   rT   r   rN   rO   rS   )r   r   r%   r&   r   r   r8   r   r   r   r   r   r   r   r   r   r   )r(   r)   Zs_expectr   r   r   test_pointers_replicated_3dd  s
    $z1TestPointerStructures.test_pointers_replicated_3dc                 C   s   t ttddd}t|jjd tt	dd
tj t|jjd tt	dd
tj ttt|jjd t|jjd d k ttt|jjd t|jjd d k tt|jjd d t|jjd d k d S )Nzstruct_pointer_arrays.savFr/   r   rT   rS   rO   )r   r   r%   r&   r   r_   r   r   r   r8   r   r   r   r   r   r   r$   r1   r   r   r   r   k  s    ((..z!TestPointerStructures.test_arraysc                 C   s  t ttddd}t|jjjjt	j
k t|jjjjt	j
k t|jjjd t|jjjd tdD ]}t|jj| t	t	ddt	j
 t|jj| t	t	ddt	j
 tt	t|jj| t|jjd	 d	 k tt	t|jj| t|jjd	 d	 k qhd S )
Nz$struct_pointer_arrays_replicated.savFr/   r   rQ   rT   rS   rO   r   )r   r   r%   r&   r   r   r   r   r   r   r   r   r   r^   r   r   r   r8   r   r   r   r$   r   r   r   r   r   s  s    ((.z,TestPointerStructures.test_arrays_replicatedc                 C   sV  t td}t|dd}t|jjjjt	j
k t|jjjjt	j
k t|jjjd t|jjjd tdD ]}tdD ]}tdD ]}t|jj|||f t	t	ddt	j
 t|jj|||f t	t	ddt	j
 tt	t|jj|||f t|jjd	 d
 k tt	t|jj|||f t|jjd	 d
 k qqxqld S )Nz'struct_pointer_arrays_replicated_3d.savFr/   r   rN   rO   rS   rT   r   r   )r   r%   r&   r   r   r   r   r   r   r   r   r   r   r^   r   r   r   r8   r   r   r   r$   )r(   pthr)   r   r   r   r   r   r   r     s"    4z/TestPointerStructures.test_arrays_replicated_3dN)	r+   r,   r-   r   r   r   r   r   r   r   r   r   r   r   U  s   r   c                   @   s   e Zd ZdZdd ZdS )TestTagsz4Test that sav files with description tag read at allc                 C   s*   t ttddd}t|jtd d S )Nzscalar_byte_descr.savFr/   r"   r0   r1   r   r   r   test_description  s    zTestTags.test_descriptionN)r+   r,   r-   __doc__r   r   r   r   r   r     s   r   c                  C   s6   t ttddd} t| jd  t| jtd d S )Nznull_pointer.savFr/   rQ   )	r   r   r%   r&   r   Zpointcheckr   r#   )r)   r   r   r   test_null_pointer  s    r   c               	   C   sx   t jdd$} t d tttddd}W 5 Q R X tt| dk tt	| d j
d	k t|d
 td d g d S )NT)recordalwayszinvalid_pointer.savFr/   rR   r   zNVariable referenced by pointer not found in heap: variable will be set to Noner   )warningscatch_warningssimplefilterr   r   r%   r&   r   r   r   messager   r   r   )wr)   r   r   r   test_invalid_pointer  s    
r   c               	   C   sn   t ddi} | d dkst| jdks,ttt | d  W 5 Q R X tjtdd | j W 5 Q R X d S )NonerR   twozhas no attribute)match)	r   ZAttrDictAssertionErrorr   pytestZraisesKeyErrorAttributeErrorr   )ra   r   r   r   test_attrdict  s    r   )$osr   r   Znumpyr   Znumpy.testingr   r   r   r   r   Zscipy.ior   r   r%   dirname__file__r&   r   r   r   Z	vectorizer$   r   r   r.   rL   rc   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s.   	
=$p
4F