U
    	f                  	   @   s  d dl Z d dlZd dlZd dlmZmZmZ d dlm	Z	 d dl
mZ d dlmZ e	 Zed Zejdd dd	gd
d Zdd Zdd Zdd Zejdd ddd	ddgdd Zdd Zdd Zejdd ddd	ddgdd Zdd Zdd  Zd!d" Zejdd ddd	ddgd#d$ Zd%d& Zd'd( Z ejdd ddd	ddgd)d* Z!d+d, Z"ejd-d.d/d0d1d2gejd3ej#ej$gd4d5 Z%dS )6    N)assert_almost_equalassert_array_equalassert_equal)data)_supported_float_type)pyramids).r   channel_axis   c                 C   s`   t  }|j\}}}tj|d| d}tj|d| d}t|| d}t|j|d |d |f d S Nr
   sourcedestination   	downscaler   )r   	astronautshapenpmoveaxisr   pyramid_reducer   )r   imagerowscolsdimZout_out r   L/tmp/pip-target-lpfmz8o1/lib/python/skimage/transform/tests/test_pyramids.pytest_pyramid_reduce_rgb   s    r   c                  C   st   t j\} }tjt dd d}t|j| d |d f t| ddd tjt dd dd}t| t   ddd d S )Nr   r         ?decimalT)r   r   preserve_range
image_grayr   r   r   r   r   Zptpr   r   Zout1Zout2r   r   r   test_pyramid_reduce_gray   s    
 r&   c                  C   sj   t j\} }tt }t|j| d |d f t| ddd tjt dd}t| t   ddd d S )Nr   r   r    T)r"   r#   r%   r   r   r   !test_pyramid_reduce_gray_defaults&   s    

r'   c                  C   sJ   dD ]@} t jjd|   }tj|dd d}t |jd }t|j| qd S Nr	   r         )   r   r   )r   randomrandnr   r   asarrayr   r   ndimimgr   expected_shaper   r   r   test_pyramid_reduce_nd/   s    r4   r   c                 C   sf   t  }|j\}}}tj|d| d}tj|d| d}|d |d g}|| |j | t	|j| d S )Nr
   r   r   upscaler   )
r   r   r   r   r   r   pyramid_expandinsertr1   r   )r   r   r   r   r   r   r3   r   r   r   test_pyramid_expand_rgb8   s    r;   c                  C   s4   t j\} }tjt dd}t|j| d |d f d S )Nr   )r8   )r$   r   r   r9   r   )r   r   r   r   r   r   test_pyramid_expand_grayD   s    
r<   c                  C   sJ   dD ]@} t jjd|   }tj|dd d}t |jd }t|j| qd S )Nr)   )r+   r   r7   )r   r-   r.   r   r9   r/   r   r   r0   r   r   r   test_pyramid_expand_ndJ   s    r=   c           	      C   s   t  }|j\}}}tj|d| d}tj|d| d}t|D ]D\}}|d|  |d|  g}|| |j	 | |jt
|ks<tq<d S r   )r   r   r   r   r   r   pyramid_gaussian	enumerater:   r1   tupleAssertionError	r   r   r   r   r   pyramidlayerr   layer_shaper   r   r   test_build_gaussian_pyramid_rgbS   s    rF   c                  C   sT   t j\} }tjt dd d}t|D ],\}}| d|  |d|  f}t|j| q"d S )Nr   r   r$   r   r   r>   r?   r   r   r   rC   rD   r   rE   r   r   r    test_build_gaussian_pyramid_gray`   s    
rI   c                  C   sN   t j\} }tt }t|D ],\}}| d|  |d|  f}t|j| qd S Nr   rG   rH   r   r   r   )test_build_gaussian_pyramid_gray_defaultsi   s
    

rK   c                  C   sd   dD ]Z} t jjd|   }t |j}tj|dd d}t|D ] \}}|d|  }t|j| q<qd S r(   )	r   r-   r.   r/   r   r   r>   r?   r   r1   r2   Zoriginal_shaperC   rD   r   rE   r   r   r   test_build_gaussian_pyramid_ndq   s    rM   c           	      C   s   t  }|j\}}}tj|d| d}tj|d| d}t|D ]D\}}|d|  |d|  g}|| |j	 | |jt
|ks<tq<d S r   )r   r   r   r   r   r   pyramid_laplacianr?   r:   r1   r@   rA   rB   r   r   r    test_build_laplacian_pyramid_rgb|   s    rO   c                  C   sN   t j\} }tt }t|D ],\}}| d|  |d|  f}t|j| qd S rJ   )r$   r   r   rN   r?   r   rH   r   r   r   %test_build_laplacian_pyramid_defaults   s
    

rP   c                  C   sd   dD ]Z} t jjd|   }t |j}tj|dd d}t|D ] \}}|d|  }t|j| q<qd S )Nr)   )   r   r   )	r   r-   r.   r/   r   r   rN   r?   r   rL   r   r   r   test_build_laplacian_pyramid_nd   s    rR   c                 C   s  dD ]}| d krd}|}n4d}t |d }d}t|}|| | | t|}t|}tj||| d}t	t
t||}t|D ]^\}	}
| d kr|
j}n.|
j|  |kstt|
j}||  t|}|	|k rt|dkstqt||	 |dkstqd S )N)r   r*         )    r,   r	   rS   r   )r	   r	   )lenlistr:   r@   r   Zonesr   rN   mathceillogmaxr?   r   rA   popr   )r   r   r   Zshape_without_channelsr1   Z
n_channelsr2   rC   Z	max_layerrD   r   Zout_shape_without_channelsr   r   r   !test_laplacian_pyramid_max_layers   s4    



r]   c                	   C   sD   t t td W 5 Q R X t t td W 5 Q R X d S )NgGz?r5   )pytestZraises
ValueErrorr   Z_check_factorr   r   r   r   test_check_factor   s    r`   dtypeZfloat16Zfloat32Zfloat64Zuint8Zint64pyramid_funcc                    sD   t jdd|}| |}t| t  fdd|D s@td S )NrU   r,   c                    s   g | ]}|j  kqS r   )ra   ).0ZimZfloat_dtyper   r   
<listcomp>   s     z.test_pyramid_dtype_support.<locals>.<listcomp>)r   r-   r.   Zastyper   allrA   )rb   ra   r2   rC   r   rd   r   test_pyramid_dtype_support   s    rg   )&rX   r^   numpyr   Znumpy.testingr   r   r   Zskimager   Zskimage._shared.utilsr   Zskimage.transformr   r   r   r$   markZparametrizer   r&   r'   r4   r;   r<   r=   rF   rI   rK   rM   rO   rP   rR   r]   r`   r>   rN   rg   r   r   r   r   <module>   sL   

		
	
	

%  
