B
    0d/                 @   sN  d dl Zd dlZd dlmZ d dlmZ d dlZd dlm	Z	m
Z
mZmZmZmZ d dlmZ dd Zdd	 Zd
d Zeeddd Zeeddd Zdd Zd7ddZd8ddZe ZeeZee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,dS )9    N)ndimage)connected_components)img_to_graphgrid_to_graphextract_patches_2dreconstruct_from_patches_2dPatchExtractor_extract_patches)ignore_warningsc              C   sh   t jd dd df d \} }t| }t|}|j|jks>tt j|j|jdk |j|jdk  d S )N   
   r   )npZmgridr   ZnnzAssertionErrortestingassert_array_equaldata)xygrad_xZgrad_y r   ]/var/www/html/venv/lib/python3.7/site-packages/sklearn/feature_extraction/tests/test_image.pytest_img_to_graph   s    r   c              C   s   t jdtd} d| d< d| d d df< t d}d|d< d|d< d|d	< t|| d
 }t dddgdddgdddgg}t j|| d S )N)      )dtype   )r   r   r   )r   r   )r   r   )maskr   )r   zerosboolr   todensearrayr   r   )r   r   r   desiredr   r   r   test_img_to_graph_sparse#   s    
"r$   c              C   s  d} d}t j| | ftd}d|d|d|f< d|| d | d f< || d }t| | |t jd}t|d dksztt jdtd}d|d< d|d d df< tdd	d| d
	 }t 
dddgdddgdddgg}t j|| t j| | ft jd}t| | | |d}t|d dks"tt | | f}t| | | |td}|jtksRtt| | | |td}|jtksttt| | | |t jd}|jt jkstd S )Nr   r   )r   Tr   )n_xn_yr   Z	return_as)r   r   )r   r   r   )r   )r%   r&   n_zr   )r%   r&   r'   r   r   )r   r   r    reshaper   Zndarrayr   r   Zravelr!   r"   r   r   ZonesZint16r   intZfloat64)sizeZroi_sizer   Agraphr#   r   r   r   test_grid_to_graph2   s0    "r-   )categoryc              C   s   yt jdd} W n, tk
r<   ddlm} |jdd} Y nX | d d dd d df } x>dD ]6}| |k}t| |d}t|d t|d ks\t	q\W d S )	NT)grayr   )miscr   )2      )r   r   )
spfaceAttributeErrorscipyr0   r   r   labelr   r   )r4   r0   Zthrr   r,   r   r   r   test_connect_regionsV   s    
r8   c              C   s   yt jdd} W n, tk
r<   ddlm} |jdd} Y nX | d d dd d df } | dk}t| jd|i}t|d t	|d kst
| d	k}t| j|d d
}t|d t	|d kst
d S )NT)r/   r   )r0   r   r1   r   r   r2   )r   r   )r3   r4   r5   r6   r0   r   shaper   r7   r   r   )r4   r0   r   r,   r   r   r   test_connect_regions_with_gridg   s    r:   c              C   s"  yt jdd} W n, tk
r<   ddlm} |jdd} Y nX | tj} | d d dd d df | dd dd d df  | d d ddd df  | dd ddd df  } | d d dd d df | dd dd d df  | d d ddd df  | dd ddd df  } | tj} | d } | S )NT)r/   r   )r0   r   r   g      0@)r3   r4   r5   r6   r0   Zastyper   Zfloat32)r4   r0   r   r   r   _downsampled_face}   s    ``r;   c             C   s|   | d krt  n| } t| jd }d|  |d d d d df< d| d  |d d d d df< d| d  |d d d d df< |S )N)r      r   r   r   r   )r;   r   r   r9   )r4   Z
face_colorr   r   r   _orange_face   s    r=   c             C   sF   | d krt  n| } td| j }| |d< | d |d< | d |d< |S )N)r   r   r   r   )r;   r   r   r9   )r4   Zimagesr   r   r   _make_images   s    r>   c              C   sT   t } | j\}}d\}}|| d || d  }t| ||f}|j|||fksPtd S )N)   r?   r   )downsampled_facer9   r   r   )r4   i_hi_wp_hp_wexpected_n_patchespatchesr   r   r   test_extract_patches_all   s    
rG   c              C   s^   t } | jd d \}}d\}}|| d || d  }t| ||f}|j|||dfksZtd S )Nr   )r?   r?   r   r   )orange_facer9   r   r   )r4   rA   rB   rC   rD   rE   rF   r   r   r   test_extract_patches_all_color   s    rI   c              C   sh   t } | d d ddf } | j\}}d\}}|| d || d  }t| ||f}|j|||fksdtd S )N    a   )r?      r   )r@   r9   r   r   )r4   rA   rB   rC   rD   rE   rF   r   r   r   test_extract_patches_all_rect   s    
rM   c           	   C   s   t } | j\}}d\}}t| ||fdd}|jd||fks<ttd|| d  || d  }t| ||fdd}|j|||fksttt t| ||fdd W d Q R X tt t| ||fdd W d Q R X d S )N)r?   r?   d   )max_patchesg      ?r   g       @g      )r@   r9   r   r   r)   pytestraises
ValueError)r4   rA   rB   rC   rD   rF   rE   r   r   r    test_extract_patches_max_patches   s    
 rS   c              C   s*   t } t| | jdd}|jd dks&td S )Nr   )rO   r   r   )r@   r   r9   r   )r4   rF   r   r   r   "test_extract_patch_same_size_image   s    rT   c              C   sj   t } | j\}}d| d d| d  }}|| d || d  }t| ||fdd}|j|||fksftd S )Nr   r   r   i  )rO   )r@   r9   r   r   )r4   rA   rB   rC   rD   rE   rF   r   r   r   *test_extract_patches_less_than_max_patches   s    
rU   c              C   s8   t } d\}}t| ||f}t|| j}tj| | d S )N)r?   r?   )r@   r   r   r9   r   r   assert_array_almost_equal)r4   rC   rD   rF   face_reconstructedr   r   r    test_reconstruct_patches_perfect   s
    rX   c              C   s8   t } d\}}t| ||f}t|| j}tj| | d S )N)r?   r?   )rH   r   r   r9   r   r   rV   )r4   rC   rD   rF   rW   r   r   r   &test_reconstruct_patches_perfect_color   s
    rY   c              C   s(   t } tdddd}||| ks$td S )N)   rZ   rN   r   )
patch_sizerO   random_state)face_collectionr   fitr   )facesextrr   r   r   test_patch_extractor_fit   s    ra   c        	      C   s   t } | jdd \}}d\}}d}t| | }t||f|dd}|| }|j|||fks^td}t| t|| d || d  |  }t||f|dd}|| }|j|||fkstd S )Nr   r   )rZ   rZ   rN   r   )r[   rO   r\   g      ?)r]   r9   lenr   	transformr   r)   )	r_   rA   rB   rC   rD   rO   rE   r`   rF   r   r   r    test_patch_extractor_max_patches   s     
 
rd   c              C   s:   t } tddd}|| }|jt| d ddfks6td S )NrN   r   )rO   r\         )r]   r   rc   r9   rb   r   )r_   r`   rF   r   r   r   (test_patch_extractor_max_patches_default  s    
rg   c              C   sp   t } | jdd \}}d\}}t| || d  || d  }t||fdd}|| }|j|||fksltd S )Nr   r   )rZ   rZ   r   )r[   r\   )r]   r9   rb   r   rc   r   )r_   rA   rB   rC   rD   rE   r`   rF   r   r   r    test_patch_extractor_all_patches  s     
rh   c              C   sv   t t} | jdd \}}d\}}t| || d  || d  }t||fdd}|| }|j|||dfksrtd S )Nr   r   )rZ   rZ   r   )r[   r\   )r>   rH   r9   rb   r   rc   r   )r_   rA   rB   rC   rD   rE   r`   rF   r   r   r   test_patch_extractor_color(  s     
ri   c              C   s  ddddg} ddddg}ddddg}ddddg}ddddg}d	d	d	d
g}ddddg}ddddg}ddddg}ddddg}	ddddg}
ddd d!g}d"d#d$d%g}d&dd'd(g}d)d#d*d+g}| | |
 }|| | }|| | }|| | }||	 | }xt |||||D ]\}}}}}tt||}t|||d,}t|}|jd | |ksTtt	d-d. t ||D }|d/|  || 
 k stqW d S )0N)r   )   )r   )r   )r   )rZ   )r   )	   )r      )rj   rl   )r   r   )r   r   )r   rj   )   rm   )   rn   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   rZ   )rn      )r   r   )r   rZ   )r      )rn   r   r   )r   r   r   )   rZ   rk   )r   r   r   )r   r   r   )r   rq   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   r   )rm   r   rm   )rm   r   r   )patch_shapeZextraction_stepc             s   s"   | ]\}}t ||| d V  qd S )N)slice).0ijr   r   r   	<genexpr>[  s    z/test_extract_patches_strided.<locals>.<genexpr>)r   NN)zipr   Zarangeprodr(   r	   rb   r9   r   tupleZsqueezeall)Zimage_shapes_1DZpatch_sizes_1DZpatch_steps_1DZexpected_views_1DZlast_patch_1DZimage_shapes_2DZpatch_sizes_2DZpatch_steps_2DZexpected_views_2DZlast_patch_2DZimage_shapes_3DZpatch_sizes_3DZpatch_steps_3DZexpected_views_3DZlast_patch_3DZimage_shapesZpatch_sizesZpatch_stepsZexpected_viewsZlast_patchesZimage_shaper[   Z
patch_stepZexpected_viewZ
last_patchimagerF   ndimZlast_patch_slicesr   r   r   test_extract_patches_strided2  s<    r~   c              C   sX   t } | j\}}d}|| d || d f}t| |d}|j|d |d ||fksTtd S )NrZ   r   )rr   r   )r@   r9   r	   r   )r4   rA   rB   prE   rF   r   r   r   test_extract_patches_squareb  s    
r   c           	   C   sf   t dddgdddgddd	gg} tt t| d
 W d Q R X tt t| d W d Q R X d S )Nr   r   r   r   rn   rm   rq   rZ   rk   )r   r   )r   r   )r   r"   rP   rQ   rR   r   )r   r   r   r   test_width_patchl  s
    "r   )N)N)-numpyr   r6   r3   r   Zscipy.sparse.csgraphr   rP   Z sklearn.feature_extraction.imager   r   r   r   r   r	   Zsklearn.utils._testingr
   r   r$   r-   DeprecationWarningr8   r:   r;   r=   r>   r@   rH   r]   rG   rI   rM   rS   rT   rU   rX   rY   ra   rd   rg   rh   ri   r~   r   r   r   r   r   r   <module>   sB    $
	

				

0
