U
    ?h                  	   @   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
   sourceZdestination   	downscaler   )r   	astronautshapenpmoveaxisr   pyramid_reducer   )r   imagerowscolsdimZout_out r   W/var/www/html/venv/lib/python3.8/site-packages/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    r3   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insertr0   r   )r   r   r   r   r   r   r2   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   )r7   )r#   r   r   r8   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   r6   )r   r,   r-   r   r8   r.   r   r   r/   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	enumerater9   r0   tupleAssertionError	r   r   r   r   r   pyramidlayerr   layer_shaper   r   r   test_build_gaussian_pyramid_rgbS   s    rE   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   rB   rC   r   rD   r   r   r    test_build_gaussian_pyramid_gray`   s    
rH   c                  C   sN   t j\} }tt }t|D ],\}}| d|  |d|  f}t|j| qd S Nr   rF   rG   r   r   r   )test_build_gaussian_pyramid_gray_defaultsi   s
    

rJ   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   r0   r1   Zoriginal_shaperB   rC   r   rD   r   r   r   test_build_gaussian_pyramid_ndq   s    rL   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>   r9   r0   r?   r@   rA   r   r   r    test_build_laplacian_pyramid_rgb|   s    rN   c                  C   sN   t j\} }tt }t|D ],\}}| d|  |d|  f}t|j| qd S rI   )r#   r   r   rM   r>   r   rG   r   r   r   %test_build_laplacian_pyramid_defaults   s
    

rO   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   rM   r>   r   rK   r   r   r   test_build_laplacian_pyramid_nd   s    rQ   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	   rR   r   )r	   r	   )lenlistr9   r?   r   Zonesr   rM   mathceillogmaxr>   r   r@   popr   )r   r   r   Zshape_without_channelsr0   Z
n_channelsr1   rB   Z	max_layerrC   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?r4   )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 )NrT   r+   c                    s   g | ]}|j  kqS r   )r`   ).0ZimZfloat_dtyper   r   
<listcomp>   s     z.test_pyramid_dtype_support.<locals>.<listcomp>)r   r,   r-   Zastyper   allr@   )ra   r`   r1   rB   r   rc   r   test_pyramid_dtype_support   s    rf   )&rW   r]   numpyr   Znumpy.testingr   r   r   Zskimager   Zskimage._shared.utilsr   Zskimage.transformr   r   r   r#   markZparametrizer   r%   r&   r3   r:   r;   r<   rE   rH   rJ   rL   rN   rO   rQ   r\   r_   r=   rM   rf   r   r   r   r   <module>   sL   

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