o
    \i0                     @   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   )npmgridr   nnztestingassert_array_equaldata)xygrad_xgrad_y r   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/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s=J 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sJ t | | f}t| | | |td}|jtksJ t| | | |td}|jtksJ t| | | |t jd}|jt jksJ d S )Nr   r   r   Tr   )n_xn_yr$   	return_asr   r   r   r#   r%   )r   r   r   )r,   r-   n_zr$   )r,   r-   r/   r$   r   )r   r&   r'   reshaper   ndarrayr   ravelr(   r)   r   r   onesint16r   intfloat64)sizeroi_sizer$   Agraphr*   r   r   r   test_grid_to_graph/   s0   r;   c                 C   s\   | }|d d dd d df }dD ]}||k}t ||d}t|d t|d ks+J qd S )Nr
   )2      r#   r   r   )r   r   labelr   )raccoon_face_fxtfacethrr$   r:   r   r   r   test_connect_regionsS   s    rB   c                 C   s   | }|d d dd d df }|dk}t |jd|i}t|d t|d ks)J |dk}t |j|d d}t|d t|d ksEJ d S )Nr
   r<   r$   r   r   r=   )r$   r   )r   shaper   r>   r   )r?   r@   r$   r:   r   r   r   test_connect_regions_with_grid]   s   "rD   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@)astyper   float32)r?   r@   r   r   r   downsampled_facel   s   ``rG   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&   rC   )rG   r@   
face_colorr   r   r   orange_facev   s   rL   c                 C   s4   t d| j }| |d< | d |d< | d |d< |S )NrH   r   r   r   rJ   )r@   imagesr   r   r   _make_images   s
   rN   c                 C   s   t | S N)rN   )rG   r   r   r   downsampled_face_collection   s   rP   c                 C   sT   | }|j \}}d\}}|| d || d  }t|||f}|j |||fks(J d S )N   rR   r   rC   r   rG   r@   i_hi_wp_hp_wexpected_n_patchespatchesr   r   r   test_extract_patches_all   s   
r[   c                 C   s^   | }|j d d \}}d\}}|| d || d  }t|||f}|j |||dfks-J d S )Nr   rQ   r   r   rS   )rL   r@   rU   rV   rW   rX   rY   rZ   r   r   r   test_extract_patches_all_color   s   r\   c                 C   sh   | }|d d ddf }|j \}}d\}}|| d || d  }t|||f}|j |||fks2J d S )N    a   )rR      r   rS   rT   r   r   r   test_extract_patches_all_rect   s   
r`   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sAJ tt t|||fdd W d    n1 sZw   Y  tt t|||fdd W d    d S 1 syw   Y  d S )NrQ   d   max_patches      ?r   g       @g      )rC   r   r5   pytestraises
ValueError)rG   r@   rU   rV   rW   rX   rZ   rY   r   r   r    test_extract_patches_max_patches   s   
 "rh   c                 C   s*   | }t ||jdd}|jd dksJ d S )Nr   rb   r   r   )r   rC   )rG   r@   rZ   r   r   r   "test_extract_patch_same_size_image   s   ri   c                 C   sj   | }|j \}}d| d d| d }}|| d || d  }t|||fdd}|j |||fks3J d S )Nr   r
   r   i  rb   rS   rT   r   r   r   *test_extract_patches_less_than_max_patches   s   
rj   c                 C   8   | }d\}}t |||f}t||j}tj|| d S NrQ   r   r	   rC   r   r   assert_array_almost_equal)rG   r@   rW   rX   rZ   face_reconstructedr   r   r    test_reconstruct_patches_perfect   
   rp   c                 C   rk   rl   rm   )rL   r@   rW   rX   rZ   ro   r   r   r   &test_reconstruct_patches_perfect_color   rq   rr   c                 C   s(   | }t dd|d}|||ksJ d S )N   rt   ra   
patch_sizerc   random_state)r   fit)rP   global_random_seedfacesextrr   r   r   test_patch_extractor_fit   s
   r|   c                 C   s   | }|j dd \}}d\}}d}t|| }t||f||d}	|	|}
|
j |||fks/J d}t|t|| d || d  |  }t||f||d}	|	|}
|
j |||fks]J d S )Nr   r   rs   ra   ru   rd   )rC   lenr   	transformr5   )rP   ry   rz   rU   rV   rW   rX   rc   rY   r{   rZ   r   r   r    test_patch_extractor_max_patches   s&   



r   c                 C   s:   | }t d|d}||}|jt|d ddfksJ d S )Nra   )rc   rw         )r   r~   rC   r}   )rP   ry   rz   r{   rZ   r   r   r   (test_patch_extractor_max_patches_default  s   
 r   c           
      C   sp   | }|j dd \}}d\}}t||| d  || d  }t||f|d}||}	|	j |||fks6J d S Nr   r   rs   )rv   rw   )rC   r}   r   r~   )
rP   ry   rz   rU   rV   rW   rX   rY   r{   rZ   r   r   r    test_patch_extractor_all_patches  s    
r   c           
      C   sv   t | }|jdd \}}d\}}t||| d  || d  }t||f|d}||}	|	j|||dfks9J d S r   )rN   rC   r}   r   r~   )
rL   ry   rz   rU   rV   rW   rX   rY   r{   rZ   r   r   r   test_patch_extractor_color  s    
r   c                  C   sR  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 ]D\}}}}}tt||}t|||d}t|}|jd | |ksJ tdd t ||D }|d|  || 	 k
 sJ qbd S )N)r   r   )   r   )r   r   rH   rt   )r   r   )r
   r   )r   )	   rH   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   rt   ))r      )r   r   )r   rt   )r
      ))r   r
   r   )r   r   r      rt   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   r
   )patch_shapeextraction_stepc                 s   s$    | ]\}}t ||| d V  qd S rO   )slice).0ijr   r   r   	<genexpr>F  s    
z/test_extract_patches_strided.<locals>.<genexpr>)r    NN)zipr   arangeprodr0   r   r}   rC   tuplesqueezeall)image_shapes_1Dpatch_sizes_1Dpatch_steps_1Dexpected_views_1Dlast_patch_1Dimage_shapes_2Dpatch_sizes_2Dpatch_steps_2Dexpected_views_2Dlast_patch_2Dimage_shapes_3Dpatch_sizes_3Dpatch_steps_3Dexpected_views_3Dlast_patch_3Dimage_shapespatch_sizespatch_stepsexpected_viewslast_patchesimage_shaperv   
patch_stepexpected_view
last_patchimagerZ   ndimlast_patch_slicesr   r   r   test_extract_patches_strided  sH   
r   c                 C   sX   | }|j \}}d}|| d || d f}t||d}|j |d |d ||fks*J d S )Nrt   r   )r   r   )rC   r   )rG   r@   rU   rV   prY   rZ   r   r   r   test_extract_patches_squareN  s   
"r   c                  C   s   t g dg dg dg} tt t| d W d    n1 s#w   Y  tt t| d W d    d S 1 s>w   Y  d S )N)r   r   r   )r
   r   r   r   )r
   r   )r   r
   )r   r)   re   rf   rg   r   )r   r   r   r   test_width_patchX  s   "r   c                 C   sT   t | }d}tdd}tjt|d || W d   dS 1 s#w   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)rt   rt   rt   )rv   )matchN)rN   r   re   rf   rg   r~   )rL   rz   err_msg	extractorr   r   r    test_patch_extractor_wrong_inputa  s   
"r   ))numpyr   re   scipyr   scipy.sparse.csgraphr    sklearn.feature_extraction.imager   r   r   r   r   r	   r   r+   r;   rB   rD   fixturerG   rL   rN   rP   r[   r\   r`   rh   ri   rj   rp   rr   r|   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sD    
$

	
		
					

/
	