U
    ½mœd.  ã                   @   s&  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„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zejdd„ ƒZejdd„ ƒZdd„ Zej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/d0„ Z$d1d2„ Z%d3d4„ Z&d5d6„ Z'dS )7é    N)Úndimage)Úconnected_components)Úimg_to_graphÚgrid_to_graphÚextract_patches_2dÚreconstruct_from_patches_2dÚPatchExtractorÚ_extract_patchesc                  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   úd/home/sam/Atlas/atlas_env/lib/python3.8/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�sšt‚d S )Nr   r   r   Tr   )Ún_xÚn_yr"   Z	return_asr   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_graph0   s0    "r1   c                 C   s\   | }|d d d…d d d…f }dD ]6}||k}t ||d�}t |¡d t|ƒd ks t‚q d S )Nr
   )é2   é–   r!   r   r   )r   r   Úlabelr   r   )Úraccoon_face_fxtÚfaceZthrr"   r0   r   r   r   Útest_connect_regionsT   s    r7   c                 C   sŽ   | }|d d d…d d d…f }|dk}t |jd|iŽ}t |¡d t|ƒd ksRt‚|dk}t |j|d dœŽ}t |¡d t|ƒd ksŠt‚d S )Nr
   r2   r"   r   r   r3   )r"   r   )r   Úshaper   r4   r   r   )r5   r6   r"   r0   r   r   r   Útest_connect_regions_with_grid^   s    r9   c                 C   sÜ   | }|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 )Nr   r   g      0@)Zastyper   Zfloat32)r5   r6   r   r   r   Údownsampled_facem   s    ``r:   c                 C   sn   | }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#   r8   )r:   r6   Z
face_colorr   r   r   Úorange_facew   s    r>   c                 C   s4   t  d| j ¡}| |d< | d |d< | d |d< |S )Nr;   r   r   r   r=   )r6   Zimagesr   r   r   Ú_make_images�   s
    r?   c                 C   s   t | ƒS ©N)r?   )r:   r   r   r   Údownsampled_face_collectionŠ   s    rA   c                 C   sT   | }|j \}}d\}}|| d || d  }t|||fƒ}|j |||fksPt‚d S )N©é   rC   r   ©r8   r   r   ©r:   r6   Úi_hÚi_wÚp_hÚp_wÚexpected_n_patchesÚpatchesr   r   r   Útest_extract_patches_all�   s    
rL   c                 C   s^   | }|j d d… \}}d\}}|| d || d  }t|||fƒ}|j |||dfksZt‚d S )Nr   rB   r   r   rD   )r>   r6   rF   rG   rH   rI   rJ   rK   r   r   r   Útest_extract_patches_all_color˜   s    rM   c                 C   sh   | }|d d …dd…f }|j \}}d\}}|| d || d  }t|||fƒ}|j |||fksdt‚d S )Né    éa   )rC   é   r   rD   rE   r   r   r   Útest_extract_patches_all_rect¡   s    
rQ   c              	   C   sÖ   | }|j \}}d\}}t|||fdd�}|j d||fks<t‚td|| d  || d  ƒ}t|||fdd�}|j |||fks‚t‚t t¡� t|||fdd� W 5 Q R X t t¡� t|||fdd� W 5 Q R X d S )NrB   éd   ©Úmax_patchesç      à?r   g       @g      ð¿)r8   r   r   r-   ÚpytestÚraisesÚ
ValueError)r:   r6   rF   rG   rH   rI   rK   rJ   r   r   r   Ú test_extract_patches_max_patches¬   s    
 rY   c                 C   s*   | }t ||jdd�}|jd dks&t‚d S )Nr   rS   r   r   )r   r8   r   )r:   r6   rK   r   r   r   Ú"test_extract_patch_same_size_image¾   s    rZ   c                 C   sj   | }|j \}}d| d d| d  }}|| d || d  }t|||fdd�}|j |||fksft‚d S )Nr   r
   r   i   rS   rD   rE   r   r   r   Ú*test_extract_patches_less_than_max_patchesÆ   s    
r[   c                 C   s8   | }d\}}t |||fƒ}t||jƒ}tj ||¡ d S ©NrB   ©r   r   r8   r   r   Zassert_array_almost_equal)r:   r6   rH   rI   rK   Úface_reconstructedr   r   r   Ú test_reconstruct_patches_perfectÑ   s
    r_   c                 C   s8   | }d\}}t |||fƒ}t||jƒ}tj ||¡ d S r\   r]   )r>   r6   rH   rI   rK   r^   r   r   r   Ú&test_reconstruct_patches_perfect_colorÚ   s
    r`   c                 C   s(   | }t dddd�}|| |¡ks$t‚d S )N©é   rb   rR   r   ©Ú
patch_sizerT   Úrandom_state)r   Úfitr   )rA   ÚfacesÚextrr   r   r   Útest_patch_extractor_fitã   s    ri   c           
      C   s¾   | }|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sºt‚d S )Nr   r   ra   rR   r   rc   rU   )r8   Úlenr   Ú	transformr   r-   )
rA   rg   rF   rG   rH   rI   rT   rJ   rh   rK   r   r   r   Ú test_patch_extractor_max_patchesé   s.      ÿ
ÿ  ÿ
rl   c                 C   s:   | }t ddd�}| |¡}|jt|ƒd ddfks6t‚d S )NrR   r   )rT   re   é   é   )r   rk   r8   rj   r   )rA   rg   rh   rK   r   r   r   Ú(test_patch_extractor_max_patches_default  s    
ro   c           	      C   sp   | }|j dd… \}}d\}}t|ƒ|| d  || d  }t||fdd�}| |¡}|j |||fkslt‚d S ©Nr   r   ra   r   )rd   re   )r8   rj   r   rk   r   )	rA   rg   rF   rG   rH   rI   rJ   rh   rK   r   r   r   Ú test_patch_extractor_all_patches  s     
rq   c           	      C   sv   t | ƒ}|jdd… \}}d\}}t|ƒ|| d  || d  }t||fdd�}| |¡}|j|||dfksrt‚d S rp   )r?   r8   rj   r   rk   r   )	r>   rg   rF   rG   rH   rI   rJ   rh   rK   r   r   r   Útest_patch_extractor_color  s     
rr   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}| | |
 }|| | }|| | }|| | }||	 | }t |||||ƒD ]Ž\}}}}}t t |¡¡ |¡}t|||d,�}t|ƒ}|jd |… |k�sRt‚t	d-d.„ t ||ƒD ƒƒ}|d/|  ||  
¡ k ¡ �s t‚�q d S )0N)r   )é   )r   )r   r;   )rb   )r
   )é	   )r   é   )rs   ru   )r   r   )r   r   )r   rs   )é   rv   )é   rw   )r   r   )r   r
   )r
   r   )r   r
   r    )r   r   )r   rb   )rw   é   )r   r   )r   rb   )r
   é   )rw   r
   r   )r   r   r   )é   rb   rt   )r   r   r   )r   r   r   )r   rz   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   )rv   r   rv   )rv   r   r
   )Úpatch_shapeZextraction_stepc                 s   s"   | ]\}}t ||| d ƒV  qd S r@   )Úslice)Ú.0ÚiÚjr   r   r   Ú	<genexpr>D  s    z/test_extract_patches_strided.<locals>.<genexpr>)r   NN)Úzipr   ZarangeÚprodr,   r	   rj   r8   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_shaperd   Z
patch_stepZexpected_viewZ
last_patchÚimagerK   ÚndimZlast_patch_slicesr   r   r   Útest_extract_patches_strided  sP        ÿ  ÿÿÿr‡   c                 C   sX   | }|j \}}d}|| d || d f}t||d�}|j |d |d ||fksTt‚d S )Nrb   r   )r{   r   )r8   r	   r   )r:   r6   rF   rG   ÚprJ   rK   r   r   r   Útest_extract_patches_squareL  s    
r‰   c               	   C   sf   t  dddgdddgddd	gg¡} t t¡� t| d
ƒ W 5 Q R X t t¡� t| dƒ W 5 Q R X d S )Nr   r   r   r
   rw   rv   rz   rb   rt   )r
   r   )r   r
   )r   r&   rV   rW   rX   r   )r   r   r   r   Útest_width_patchV  s
    "rŠ   )(Únumpyr   Zscipyr   Zscipy.sparse.csgraphr   rV   Z sklearn.feature_extraction.imager   r   r   r   r   r	   r   r(   r1   r7   r9   Zfixturer:   r>   r?   rA   rL   rM   rQ   rY   rZ   r[   r_   r`   ri   rl   ro   rq   rr   r‡   r‰   rŠ   r   r   r   r   Ú<module>   s@    
$

	
		
				

0
