U
    #c;                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
mZmZmZmZmZmZmZmZ d dl	mZmZmZ d dlmZmZmZmZmZmZ G dd dZdS )	    N)Path)NamedTemporaryFileTemporaryFile)	memmapsumaverageproductndarrayisscalaraddsubtractmultiply)arangeallcloseasarray)assert_assert_equalassert_array_equalsuppress_warningsIS_PYPYbreak_cyclesc                   @   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ejjejdkdd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 )/
TestMemmapc                 C   s:   t dd| _d| _d| _td| jd| _| j| j d S )Nmmap)prefix)      Zfloat32   dtype)r   tmpfpshaper   r   dataresizeself r%   @/tmp/pip-unpacked-wheel-b2rbor69/numpy/core/tests/test_memmap.pysetup_method   s
    zTestMemmap.setup_methodc                 C   s$   | j   d | _tr t  t  d S )N)r   closer!   r   r   r#   r%   r%   r&   teardown_method   s
    
zTestMemmap.teardown_methodc                 C   sr   t | j| jd| jd}| jd d  |d d < ~t | j| jd| jd}tt| j| t| j| t|j	j
d d S )Nw+r   moder    rF)r   r   r   r    r!   r   r   r   r   flagsZ	writeable)r$   fpZnewfpr%   r%   r&   test_roundtrip    s    zTestMemmap.test_roundtripc                 C   s8   |d }t || jd| jd}| jd d  |d d < ~d S )Nr   r*   r+   )r   r   r    r!   )r$   tmp_pathtmpnamer/   r%   r%   r&   test_open_with_filename.   s    
z"TestMemmap.test_open_with_filenamec              	   C   s*   t  }t|| j| jd}~W 5 Q R X d S Nr   r    )r   r   r   r    )r$   fr/   r%   r%   r&   test_unnamed_file5   s    zTestMemmap.test_unnamed_filec                 C   s>   d}d}t | j| j|| j|d}t||j t||j ~d S )N   r*   )r   r,   r    offset)r   r   r   r    r   r9   r,   )r$   r9   r,   r/   r%   r%   r&   test_attributes:   s     zTestMemmap.test_attributesc                 C   sn   |d }t || jd| jd}ttj|}| jd d  |d d < t||j	 |d d }t||j	 ~~d S Nr   r*   r+   r8   )
r   r   r    r   ospathabspathr!   r   filenamer$   r1   r2   r/   r>   br%   r%   r&   test_filenameC   s    
zTestMemmap.test_filenamec                 C   s   |d }t t|| jd| jd}tt| }| jd d  |d d < t|t|j  |d d }t|t|j  ~~d S r;   )	r   r   r   r    strresolver!   r   r?   r@   r%   r%   r&   	test_pathO   s    zTestMemmap.test_pathc                 C   s*   t | j| jd| jd}t|j| jj d S )Nr*   r+   )r   r   r   r    r   r?   namer$   r/   r%   r%   r&   test_filename_fileobj^   s    z TestMemmap.test_filename_fileobjZgnu0zKnown to fail on hurd)reasonc                 C   sL   t | j| jd| jd}| jd d  |d d < t|d | jd  |  d S )Nr*   r+   r   )r   r   r   r    r!   r   flushrG   r%   r%   r&   
test_flushc   s    zTestMemmap.test_flushc                 C   sb   t | j| jd| jd}d|d< |dd }t|d d ~t|d d d|d< t|d d d S )Nr*   r+      r   r8      )r   r   r   r    r   )r$   Zfp_baseZfp_viewr%   r%   r&   test_dell   s    zTestMemmap.test_delc                 C   s<   t | j| jd| jd}|d }t|t r8t|j|jk	 d S )Nr*   r+   
   r   r   r   r    
isinstancer   _mmapr$   r/   tmpr%   r%   r&    test_arithmetic_drops_referencesz   s    
z+TestMemmap.test_arithmetic_drops_referencesc                 C   s<   t | j| jd| jd}|d }t|t r8t|j|jk	 d S )Nr*   r+   ))r8      )rV   r   rP   rS   r%   r%   r&   test_indexing_drops_references   s    
z)TestMemmap.test_indexing_drops_referencesc                 C   s:   t | j| jd| jd}t|d dd df j|jk d S )Nr*   r+   rV   )r   r   r   r    r   rR   rG   r%   r%   r&   test_slicing_keeps_references   s    z(TestMemmap.test_slicing_keeps_referencesc                 C   sZ   t | j| j| jd}| }| }t|j|k t|j|k t|}t|j|k d S r4   )r   r   r   r    viewr   baser   )r$   r/   Znew1Znew2Z	new_arrayr%   r%   r&   	test_view   s    zTestMemmap.test_viewc              	   C   s0  t | j| j| jd}| j|d d < t x}|td tt	t
fD ]Z}||}tt| t|j| jd jk t||ddjtk t||ddjtk q@W 5 Q R X tttfD ]D}t||| jjtk t|| j|jtk t|||jtk q|d7 }|jt kstt|d|d |jt ks,td S )Nr5   z&np.average currently does not preserve)r   r   r   Zaxisr8   )out)r   r   r   r    r!   r   filterFutureWarningr   r   r   r   r
   	__class__r	   r   r   r   AssertionError)r$   r/   supZunary_opresultZ	binary_opr%   r%   r&   test_ufunc_return_ndarray   s$    "z$TestMemmap.test_ufunc_return_ndarrayc                 C   sZ   t | j| j| jd}| j|d d < t|dd d df jt k t|ddg jtk d S )Nr5   r8   r   )r   r   r   r    r!   r   r`   r	   rG   r%   r%   r&   test_getitem   s    zTestMemmap.test_getitemc                 C   s   G dd dt }|| j| j| jd}| j|d d < tt|ddj|k tt|j|k t|dd d df j|k |ddg j|kstd S )Nc                   @   s   e Zd ZdS )z7TestMemmap.test_memmap_subclass.<locals>.MemmapSubClassN)__name__
__module____qualname__r%   r%   r%   r&   MemmapSubClass   s   rj   r5   r   r\   r8   re   )	r   r   r   r    r!   r   r   r`   ra   )r$   rj   r/   r%   r%   r&   test_memmap_subclass   s    zTestMemmap.test_memmap_subclassc                 C   s8   dt j }t jd }t| j|d|d}t|j|k d S )NrL   r8   r*   )r    r,   r9   )r   ZALLOCATIONGRANULARITYr   r   r   r9   )r$   sizer9   r/   r%   r%   r&   4test_mmap_offset_greater_than_allocation_granularity   s    

z?TestMemmap.test_mmap_offset_greater_than_allocation_granularityc                 C   s*   | j d t| j dd}t|jd d S )Ns   aaaaaaaaaaaaaaaaZfloat64r   )rV   )r   writer   r   r    )r$   mmr%   r%   r&   test_no_shape   s    zTestMemmap.test_no_shapec              	   C   sJ   t jtdd t| jddd W 5 Q R X | jd t| jddd d S )Nz
empty file)match)r   r   r*   )r    r,       )pytestZraises
ValueErrorr   r   rn   r#   r%   r%   r&   test_empty_array   s    zTestMemmap.test_empty_arrayN)rg   rh   ri   r'   r)   r0   r3   r7   r:   rB   rE   rH   rs   markZskipifsysplatformrK   rN   rU   rW   rX   r[   rd   rf   rk   rm   rp   ru   r%   r%   r%   r&   r      s0   	
	r   )rw   r<   r   rs   pathlibr   tempfiler   r   Znumpyr   r   r   r   r	   r
   r   r   r   r   r   r   Znumpy.testingr   r   r   r   r   r   r   r%   r%   r%   r&   <module>   s   , 