a
    
d?                     @   sn  d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZ d dlmZ ejdejejejejgejd	d
dgdd Zejdejejejejgejd	d
dgdd Zejdejejejejgejd	d
dgdd Zejdddgejdg ddd Zejdddgejdg dejddd gd!d" Zejdejejejejgejd	d
dgd#d$ Zd%d& Zd'd( Zd)d* Z ejdddgejdg dd+d, Z!ejdejejejgejd	d
dgd-d. Z"d/d0 Z#d1d2 Z$d3d4 Z%d5d6 Z&d7d8 Z'd9d: Z(d;d< Z)d=d> Z*dS )?    N)assert_almost_equal)feature)disk)	ellipsoid)blob_dogblob_dohblob_log)_blob_overlapdtypethreshold_typeabsoluterelativec                    s  t d tjd| d}tdd\}}d|||f< tdd\}}d|||f< td	d
\}}d|||f< |dkrd}|jjdkr||  }d }n|dkrd }d}t|dd||d} fdd}t	||d}	d}
d}|	d }t
|d d |
ksJ t
|d d |
ksJ t
||d |d ks*J |	d }t
|d d |
ksLJ t
|d d |
ksfJ t
||d |d ksJ |	d }t
|d d |
ksJ t
|d d |
ksJ t
||d
 |d
 ksJ tjd| d}t|jdks J d S ) N      r   r
              d   ,        ^  -   r          @fr         ?   2   	min_sigma	max_sigma	thresholdthreshold_relc                    s    | d  S Nr    xr2r*   h/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/skimage/feature/tests/test_blob.pyradius0   s    ztest_blob_dog.<locals>.radiuskeyg      ?r   r      r   r   r   r   r   r   r   )mathsqrtnponesr   r
   kindptpr   sortedabszerossize)r
   r   imgxsysr'   r(   blobsr0   sthreshZratio_threshb	img_emptyr*   r-   r/   test_blob_dog   sR    
rG   c           	      C   s   d}d}t |||}tj||dd}|dkr6d}d}n|dkrFd}d}t|d	dd
||d}|d }|jdkspJ |d || d ksJ |d || d ksJ |d || d ksJ ttd	|d	  | dk sJ d S )N
   constantmoder   MbP?r   r   r!      333333?r%   r&   sigma_ratior'   r(   r"   r3   r   皙?)r   r7   padr   shaper<   r5   r6   	r
   r   rrS   im3r'   r(   rB   rE   r*   r*   r/   test_blob_dog_3dJ   s0    rX   c           	      C   sD  d}d}t |d ||}tj||dd}|dkr:d}d }n|dkrJd }d}t|j| d	d
g dg dd||d}|d }|jdksJ |d |d | d ksJ |d || d ksJ |d || d ksJ ttd|d  |d  dk sJ ttd|d  | dk sJ ttd|d  | dk s@J d S )NrH   r   rI   rJ   r   rL   r   r!   F)copy)      ?rM   rM   r   rH   rH   rN   rO   r      r3   rM   rR   r"   r   )	r   r7   rS   r   ZastyperT   r<   r5   r6   rU   r*   r*   r/   test_blob_dog_3d_anisotropicm   s4    &$r^   disc_centerr   r   r      exclude_border)r]   )r]   r]   r"      c                 C   sL  t d}t| d\}}d|||f< t|dddd}|jd dksJJ d	|d }|d | d ksvJ d
| d  d|d | d ksJ d
| d  dt|ddd|d}| dkr,|dkr,|jd dksJ d	|d }|d | d ksJ d
| d  d|d | d ksHJ d
| d  dnd}|jd dksHJ |d S )Nr   r   r   rZ   rN   )r%   r&   rP   r   r3   "one blob should have been detectedblob should be  px from x border px from y border)r%   r&   rP   rc   ra   rd   ?zero blobs should be detected, as only blob is 5 px from border)r7   r8   r   r   rT   r_   rc   r?   r@   rA   rB   rE   msgr*   r*   r/   test_blob_dog_exclude_border   s6    
$$&(rm   anisotropicFTndim)r3   r   rM   r"   function_namer   r   c                 C   sp   t jd| t jd}|r(dt | }nd}tt| }|||d}|rPd|j n|jd }|jd|fkslJ d S )N)   r      )r&   r   r3   r   )r7   r=   float32Zarangegetattrr   ro   rT   )rp   ro   rn   zr&   Z	blob_funcrB   Zexpected_shaper*   r*   r/   test_nd_blob_no_peaks_shape   s    
rv   c                    s  t d tjd| d}tdd\}}d|||f< tdd\}}d|||f< td	d
\}}d|||f< tdd\}}d|||f< |dkrd}|jjdkr||  }d }n|dkrd }d}t|dd||d} fdd}t	||d}	d}
|	d }t
|d d |
ks
J t
|d d |
ks$J t
||d |
ks>J |	d }t
|d d |
ks`J t
|d d
 |
kszJ t
||d |
ksJ |	d }t
|d d |
ksJ t
|d d |
ksJ t
||d
 |
ksJ |	d }t
|d d |
ksJ t
|d d |
ks&J t
||d |
ks@J t|dd||d d!}|	d }t
|d d |
ksvJ t
|d d |
ksJ t
||d |
ksJ |	d }t
|d d |
ksJ t
|d d
 |
ksJ t
||d |
ks J |	d }t
|d d |
ks"J t
|d d |
ks<J t
||d
 |
ksVJ |	d }t
|d d |
ksxJ t
|d d |
ksJ t
||d |
ksJ td"}t|jdksJ d S )#Nr      rx   r   )r   A   r   r   )P   r   re   )r#      r   )r         r   r3   r    r   r!   rb   r$   c                    s    | d  S r)   r*   r+   r-   r*   r/   r0      s    ztest_blob_log.<locals>.radiusr1   rM   r   r   ry   rz   r#   r{   r   r|   T)r%   r&   r'   r(   	log_scaler4   )r5   r6   r7   r8   r   r
   r9   r:   r   r;   r<   r=   r>   )r
   r   r?   r@   rA   r'   r(   rB   r0   rC   rD   rE   rF   r*   r-   r/   test_blob_log   s    


r   c                  C   sR   t d} tdd\}}d| ||f< tdd\}}d| ||f< t| dddd	 d S )
N)   r   r`   r   r      r]   rb   rH   皙?)r&   	num_sigmar'   )r7   r8   r   r   )r?   r@   rA   r*   r*   r/   test_blob_log_no_warnings%  s    
r   c                  C   s   d} d}t | | | }tj||dd}t|ddd}|d }|jdksHJ |d | | d	 ks`J |d	 | | d	 ksxJ |d
 | | d	 ksJ ttd|d  |  d	k sJ d S )Nr]   rH   rI   rJ   rM   r%   r&   r   rQ   r3   r   r   r7   rS   r   rT   r<   r5   r6   rV   rS   rW   rB   rE   r*   r*   r/   test_blob_log_3d1  s    r   c                  C   s  d} d}t | d | | }tj||dd}t|g dg dd}|d	 }|jd
ksTJ |d	 | d | d kspJ |d | | d ksJ |d | | d ksJ ttd|d  | d  dk sJ ttd|d  |  dk sJ ttd|d  |  dk sJ d S )Nr]   rH   r   rI   rJ   )r3   r   r   r[   r   r   r\   r3   rM   r"   r   r   r   r*   r*   r/   test_blob_log_3d_anisotropicB  s"    &"r   c                 C   sB  t d}t| d\}}d|||f< t|ddd}|jd dksDJ |d }|d | d kspJ d| d  d	|d | d ksJ d| d  d
t|dd|d}| dkr"|dkr"|jd dksJ d|d }|d | d ksJ d| d  d	|d | d ks>J d| d  d
nd}|jd dks>J |d S )Nr   r   r   rZ   r   r   r3   rg   rh   ri   )r%   r&   rc   ra   rd   rf   rj   )r7   r8   r   r   rT   rk   r*   r*   r/   test_blob_log_exclude_borderX  s2    
$$$(r   c                 C   s@  t jd| d}tdd\}}d|||f< tdd\}}d|||f< tdd	\}}d|||f< td
d\}}d|||f< |dkrd}|jjdkr| }||d 9 }d }n|dkrd }d}t|ddd||d}dd }	t||	d}
d}|
d }t|d d |ksJ t|d d |ks J t|	|d |ks:J |
d }t|d d |ks\J t|d d |ksvJ t|	|d |ksJ |
d }t|d d |ksJ t|d d |ksJ t|	|d	 |ksJ |
d  }t|d d! |ksJ t|d d" |ks"J t|	|d |ks<J d S )#Nr   r   r   rb   r     r#   r}   r   (   r   r#   r   皙?r    r   r   r!   r3   <   rH   )r%   r&   r   r'   r(   c                 S   s   | d S r)   r*   r+   r*   r*   r/   r0     s    ztest_blob_doh.<locals>.radiusr1   r"   r   r   r   r   r   r   rM   r   r   )	r7   r8   r   r
   r9   r:   r   r;   r<   )r
   r   r?   r@   rA   r'   r:   r(   rB   r0   rC   rD   rE   r*   r*   r/   test_blob_doh{  sZ    r   c                  C   s  t jdt jd} tdd\}}d| ||f< tdd\}}d| ||f< tdd	\}}d| ||f< td
d\}}d| ||f< t| dddddd}dd }t||d}d}|d }t|d d |ksJ t|d d |ksJ t||d |ksJ |d }t|d d |ksJ t|d d |ks0J t||d |ksJJ |d }t|d d |kslJ t|d d |ksJ t||d	 |ksJ |d }t|d d |ksJ t|d d |ksJ t||d |ksJ d S )Nr   r   r   rb   r   r   r}   r   r   r   r#   r3   r   rH   Tr   )r%   r&   r   r~   r'   c                 S   s   | d S r)   r*   r+   r*   r*   r/   r0     s    z'test_blob_doh_log_scale.<locals>.radiusr1   r   r   r   r   r   r   r   rM   r   r   )r7   r8   uint8r   r   r;   r<   )r?   r@   rA   rB   r0   rC   rD   rE   r*   r*   r/   test_blob_doh_log_scale  sH    r   c                  C   s    t d} t| jdksJ d S )Nr4   r   )r7   r=   r   r>   )rF   r*   r*   r/   test_blob_doh_no_peaks  s    
r   c                  C   sj   t jdt jd} tdd\}}d| ||f< tdd\}}d| ||f< t| dd	d
dd}t|dksfJ d S )Nrw   r   r4   rb   r   )x   r   r}   r3   r   rH   r   )r%   r&   r   r'   )r7   r8   r   r   r   len)r?   r@   rA   rB   r*   r*   r/   test_blob_doh_overlap  s    r   c                  C   s   d\} }d\}}t | | | }tj||dd}t |||}tj|||f|d |d f||fgdd}t||}t|dddd	}t|d
ksJ d S )Nr   r      rI   rJ   	   r   rH   r   r%   r&   overlapr3   )r   r7   rS   
logical_orr   r   )r1r.   pad1pad2blob1blob2rW   rB   r*   r*   r/   test_blob_log_overlap_3d  s    r   c                  C   s   t d} ttdddd|  d|  d|  gtdddd|  d|  d|  gdd}t|d ttdddd|  d|  d|  gtdddd|  d|  d|  gdd}t|d d S )	NrM   r   r   rH   g?r3   )Z	sigma_dimg?)r5   r6   r	   r7   arrayr   )Zs3r   r*   r*   r/    test_blob_overlap_3d_anisotropic  s    
" 
" r   c                  C   sf   t d} d| dddf< t| dddd}t|dks:J t| dd	gddgdd}t|dksbJ d S )
N)r#   r#   r3   rb   rH   r!   r   rM   r%   r&   r   r   r7   r=   r   r   )imageZisotropic_blobsZ	ani_blobsr*   r*   r/   test_blob_log_anisotropic$  s    
r   c            	   
   C   s   d\} }d\}}t | | | }tj||dd}t |||}tj|||f|d |d f||fgdd}t||}t|g dddd	}t|d
ksJ ttdddt	d gtdddt	d g}t
|dtj dtd t	dd    d S )Nr   r   rI   rJ   r   )r   gGz @g
ףp=
 @rH   r   r   r3   r   r   g      ?r!   rM   r   )r   r7   rS   r   r   r   r	   r   r5   r6   r   piacos)	r   r.   r   r   r   r   rW   rB   r   r*   r*   r/   $test_blob_log_overlap_3d_anisotropic.  s*    
$r   c                  C   s.   t d} t| dddd}t|dks*J d S )N)rH   rH   r   r   r"   r   r   r   )ZimrB   r*   r*   r/   test_no_blobD  s    
r   )+r5   numpyr7   ZpytestZnumpy.testingr   Zskimager   Zskimage.drawr   Zskimage.draw.draw3dr   Zskimage.featurer   r   r   Zskimage.feature.blobr	   markZparametrizer   float16rs   float64rG   rX   r^   rm   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r*   r*   r*   r/   <module>   sh   8!$X!>1
