o
    tBh-                     @   s.  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 Zdd Zd	d
 Zdd Zdd Zdd Zd5ddZd5d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-d. Z&d/d0 Z'd1d2 Z(d3d4 Z)dS )6    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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/html/riverr-enterprise-integrations-main/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_graph1   s0   r;   c                  C   sf   t jjdd} | d d dd d df } dD ]}| |k}t| |d}t|d t|d ks0J qd S )NTgrayr
   )2      r#   r   r   )spmiscfacer   r   labelr   )rB   thrr$   r:   r   r   r   test_connect_regionsU   s    rE   c                  C   s   t jjdd} | 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sJJ d S )
NTr<   r
   r>   r$   r   r   r?   )r$   r   )r@   rA   rB   r   shaper   rC   r   )rB   r$   r:   r   r   r   test_connect_regions_with_grid_   s   "rG   c                  C   s   zt jdd} W n ty   ddlm} |jdd} Y nw | 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 )NTr<   r   )rA   r   r   g      0@)r@   rB   AttributeErrorscipyrA   astyper   float32)rB   rA   r   r   r   _downsampled_facen   s   ``rL   c                 C   s|   | d u 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
   rL   r   r&   rF   )rB   
face_colorr   r   r   _orange_face~   s   rQ   c                 C   sF   | d u rt  n| } td| j }| |d< | d |d< | d |d< |S )NrM   r   r   r   rO   )rB   imagesr   r   r   _make_images   s   rS   c                  C   sT   t } | j\}}d\}}|| d || d  }t| ||f}|j|||fks(J d S )N   rU   r   downsampled_facerF   r   rB   i_hi_wp_hp_wexpected_n_patchespatchesr   r   r   test_extract_patches_all   s   
r_   c                  C   s^   t } | jd d \}}d\}}|| d || d  }t| ||f}|j|||dfks-J d S )Nr   rT   r   r   )orange_facerF   r   rX   r   r   r   test_extract_patches_all_color   s   ra   c                  C   sh   t } | d d ddf } | j\}}d\}}|| d || d  }t| ||f}|j|||fks2J d S )N    a   )rU      r   rV   rX   r   r   r   test_extract_patches_all_rect   s   
re   c                  C   s   t } | 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 )NrT   d   max_patches      ?r   g       @g      )rW   rF   r   r5   pytestraises
ValueError)rB   rY   rZ   r[   r\   r^   r]   r   r   r    test_extract_patches_max_patches   s   
 "rm   c                  C   s*   t } t| | jdd}|jd dksJ d S )Nr   rg   r   r   )rW   r   rF   )rB   r^   r   r   r   "test_extract_patch_same_size_image   s   rn   c                  C   sj   t } | j\}}d| d d| d }}|| d || d  }t| ||fdd}|j|||fks3J d S )Nr   r
   r   i  rg   rV   rX   r   r   r   *test_extract_patches_less_than_max_patches   s   
ro   c                  C   8   t } d\}}t| ||f}t|| j}tj| | d S NrT   )rW   r   r   rF   r   r   assert_array_almost_equalrB   r[   r\   r^   face_reconstructedr   r   r    test_reconstruct_patches_perfect   
   ru   c                  C   rp   rq   )r`   r   r   rF   r   r   rr   rs   r   r   r   &test_reconstruct_patches_perfect_color   rv   rw   c                  C   s(   t } tdddd}||| ksJ d S )N   ry   rf   r   
patch_sizerh   random_state)face_collectionr   fit)facesextrr   r   r   test_patch_extractor_fit   s   r   c            	      C   s   t } | 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s]J d S )Nr   r   rx   rf   r   rz   ri   )r}   rF   lenr   	transformr5   )	r   rY   rZ   r[   r\   rh   r]   r   r^   r   r   r    test_patch_extractor_max_patches   s&   



r   c                  C   s:   t } tddd}|| }|jt| d ddfksJ d S )Nrf   r   )rh   r|         )r}   r   r   rF   r   )r   r   r^   r   r   r   (test_patch_extractor_max_patches_default  s   
 r   c                  C   sp   t } | jdd \}}d\}}t| || d  || d  }t||fdd}|| }|j|||fks6J d S Nr   r   rx   r   )r{   r|   )r}   rF   r   r   r   r   rY   rZ   r[   r\   r]   r   r^   r   r   r    test_patch_extractor_all_patches  s    
r   c                  C   sv   t t} | jdd \}}d\}}t| || d  || d  }t||fdd}|| }|j|||dfks9J d S r   )rS   r`   rF   r   r   r   r   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   rM   ry   )r   r   )r
   r   )r   )	   rM   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   ry   ))r      )r   r   )r   ry   )r
      ))r   r
   r   )r   r   r      ry   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 N)slice).0ijr   r   r   	<genexpr>K  s    
z/test_extract_patches_strided.<locals>.<genexpr>)r    NN)zipr   arangeprodr0   r	   r   rF   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_shaper{   
patch_stepexpected_view
last_patchimager^   ndimlast_patch_slicesr   r   r   test_extract_patches_strided#  sH   
r   c                  C   sX   t } | j\}}d}|| d || d f}t| |d}|j|d |d ||fks*J d S )Nry   r   )r   r   )rW   rF   r	   )rB   rY   rZ   pr]   r^   r   r   r   test_extract_patches_squareS  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)   rj   rk   rl   r   )r   r   r   r   test_width_patch]  s   "r   r   )*numpyr   rI   r@   r   scipy.sparse.csgraphr   rj    sklearn.feature_extraction.imager   r   r   r   r   r	   r   r+   r;   rE   rG   rL   rQ   rS   rW   r`   r}   r_   ra   re   rm   rn   ro   ru   rw   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sB    
$


	
				

0
