a
    h1/                     @   s.  d dl Zd dlZd dlmZ d dlm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'd7d8 Z(dS )9    N)ndimage)connected_components)PatchExtractor_extract_patchesextract_patches_2dgrid_to_graphimg_to_graphreconstruct_from_patches_2dc                  C   sh   t jd dd df d \} }t| }t|}|j|jks>J t j|j|jdk |j|jdk  d S )N   
   r   )npZmgridr   Znnztestingassert_array_equaldata)xygrad_xZgrad_y r   g/var/www/html/assistant/venv/lib/python3.9/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 g dg dg dg}t j|| d S )N      dtype   r   r   r   )r   r   r   r   maskr   r   r   )r   r   r   )r   r   r   )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szJ t jdtd}d|d< d|d d df< tdd	d| d
 }t 	g dg dg dg}t j
|| t j| | ft jd}t| | | |d}t|d dksJ t | | f}t| | | |td}|jtksLJ t| | | |td}|jtksnJ t| | | |t jd}|jt jksJ d S )Nr   r   r   Tr   )n_xn_yr!   Z	return_asr   r   r   r    r"   )r   r   r   )r)   r*   n_zr!   )r)   r*   r+   r!   r   )r   r#   r$   reshaper   Zndarrayr   Zravelr%   r&   r   r   ZonesZint16r   intZfloat64)sizeZroi_sizer!   Agraphr'   r   r   r   test_grid_to_graph/   s0    r1   c                 C   s\   | }|d d dd d df }dD ]6}||k}t ||d}t|d t|d ks J q d S )Nr
   )2      r    r   r   )r   r   labelr   )raccoon_face_fxtfaceZthrr!   r0   r   r   r   test_connect_regionsS   s    r7   c                 C   s   | }|d d dd d df }|dk}t |jd|i}t|d t|d ksRJ |dk}t |j|d d}t|d t|d ksJ d S )Nr
   r2   r!   r   r   r3   )r!   r   )r   shaper   r4   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_facel   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_facev   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sPJ d S )N   rC   r   r8   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sZJ 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sdJ 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<J td|| d  || d  }t|||fdd}|j |||fksJ tt" t|||fdd W d    n1 s0    Y  tt" t|||fdd W d    n1 s0    Y  d S )NrB   d   max_patches      ?r   g       @g      )r8   r   r-   pytestraises
ValueError)r:   r6   rF   rG   rH   rI   rK   rJ   r   r   r    test_extract_patches_max_patches   s    
 0rY   c                 C   s*   | }t ||jdd}|jd dks&J d S )Nr   rS   r   r   )r   r8   )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sfJ 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$J d S )N   rb   rR   r   
patch_sizerT   random_state)r   fit)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^J d}t|t|| d || d  |  }t||f|dd}||}	|	j |||fksJ d S )Nr   r   ra   rR   r   rc   rU   )r8   lenr   	transformr-   )
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s6J d S )NrR   r   )rT   re         )r   rk   r8   rj   )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slJ d S Nr   r   ra   r   )rd   re   )r8   rj   r   rk   )	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srJ d S rp   )r?   r8   rj   r   rk   )	r>   rg   rF   rG   rH   rI   rJ   rh   rK   r   r   r   test_patch_extractor_color  s     
rr   c                  C   sT  g d} g d}g d}g d}g d}g d}g d}g d}g d	}g d
}	g d}
g d}g d}g d}g d}| | |
 }|| | }|| | }|| | }||	 | }t |||||D ]\}}}}}tt||}t|||d}t|}|jd | |ksJ tdd t ||D }|d|  || 	 k
 sJ qd S )N)r   rs   )   rs   )r   r   r;   rb   )ru   ru   )r
   rv   )rs   )	   r;   rv   )rs   rw   rw   rv   )r      ry   ry   )rt   rz   ))r   r   )r   r   )r   rt   )   r{   ))   r|   )r   r   )r   r
   )r
   r   ))r   r
   r   )r   r   )r   rb   ))r|      )r   r   )r   rb   )r
      ))r|   r
   r   )r   r   r      rb   rx   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   r   )r
   r   r   )r   r   r   ))r   r   r   r   )r{   r   r{   )r{   r   r
   )patch_shapeZextraction_stepc                 s   s"   | ]\}}t ||| d V  qd S r@   )slice).0ijr   r   r   	<genexpr>B  s   z/test_extract_patches_strided.<locals>.<genexpr>)r   NN)zipr   Zarangeprodr,   r   rj   r8   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  sD    
r   c                 C   sX   | }|j \}}d}|| d || d f}t||d}|j |d |d ||fksTJ d S )Nrb   r   )r   r   )r8   r   )r:   r6   rF   rG   prJ   rK   r   r   r   test_extract_patches_squareJ  s    
r   c                  C   s   t g dg dg dg} tt t| d W d    n1 sF0    Y  tt t| d W d    n1 sz0    Y  d S )N)r   r   r   )r
   r|   r{   r   )r
   r   )r   r
   )r   r&   rV   rW   rX   r   )r   r   r   r   test_width_patchT  s
    (r   c                 C   sR   t | }d}tdd}tjt|d || W d   n1 sD0    Y  dS )zICheck that an informative error is raised if the patch_size is not valid.z*patch_size must be a tuple of two integers)rb   rb   rb   )rd   )matchN)r?   r   rV   rW   rX   rk   )r>   rg   err_msgZ	extractorr   r   r    test_patch_extractor_wrong_input]  s
    
r   ))numpyr   rV   Zscipyr   Zscipy.sparse.csgraphr   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   r   <module>   sB    
$

	
		
				

/
	