
    |hG?                        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$                  j'                  dej(                  ej*                  ej,                  ej.                  g      ej$                  j'                  d	d
dg      d               Zej$                  j'                  dej(                  ej*                  ej,                  ej.                  g      ej$                  j'                  d	d
dg      d               Zej$                  j'                  dej(                  ej*                  ej,                  ej.                  g      ej$                  j'                  d	d
dg      d               Zej$                  j'                  dddg      ej$                  j'                  dg d      d               Zej$                  j'                  dddg      ej$                  j'                  dg d      ej$                  j'                  dddg      d                      Zej$                  j'                  dej(                  ej*                  ej,                  ej.                  g      ej$                  j'                  d	d
dg      d               Zd Zd  Zd! Z ej$                  j'                  dddg      ej$                  j'                  dg d      d"               Z!ej$                  j'                  dej(                  ej*                  ej,                  g      ej$                  j'                  d	d
dg      d#               Z"d$ Z#d% Z$d& Z%d' Z&d( Z'd) Z(d* Z)d+ Z*y),    N)assert_almost_equal)feature)disk)	ellipsoid)blob_dogblob_dohblob_log)_blob_overlapdtypethreshold_typeabsoluterelativec                    t        j                  d      t        j                  d|       }t	        dd      \  }}d|||f<   t	        dd      \  }}d|||f<   t	        d	d
      \  }}d|||f<   |dk(  r6d}|j
                  j                  dk7  r|t        j                  |      z  }d }n	|dk(  rd }d}t        |dd      }fd}t        ||      }	d}
d}|	d   }t        |d   dz
        |
k  sJ t        |d   dz
        |
k  sJ t         ||      dz
        |dz  k  sJ |	d   }t        |d   dz
        |
k  sJ t        |d   dz
        |
k  sJ t         ||      dz
        |dz  k  sJ |	d   }t        |d   dz
        |
k  sJ t        |d   dz
        |
k  sJ t         ||      d
z
        |d
z  k  sJ t        j                  d|       }t        |      j                  dk(  sJ y )N      r   r              d   ,        ^  -   r          @fr         ?   2   	min_sigma	max_sigma	thresholdthreshold_relc                     | d   z  S Nr    xr2s    ^/var/www/html/test/engine/venv/lib/python3.12/site-packages/skimage/feature/tests/test_blob.pyradiusztest_blob_dog.<locals>.radius/       AaDy    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*   blobsr2   sthreshratio_threshb	img_emptyr0   s                 @r1   test_blob_dogrL      s7    
1B
''*E
*C*a FBCBK*b!FBCBK*b!FBCBK#	99>>S $I	:	%	#E 	u&!AFL	!Aqtcz?f$$$qtcz?f$$$vay1}!1111	!Aqtcz?f$$$qtcz?f$$$vay2~,"3333	!Aqtcz?f$$$qtcz?f$$$vay2~,"3333 51II##q(((r4   c                    d}d}t        |||      }t        j                  ||d      }|dk(  rd}d}n	|dk(  rd}d}t        |d	dd
      }|d   }|j                  dk(  sJ |d   ||z   dz   k(  sJ |d   ||z   dz   k(  sJ |d   ||z   dz   k(  sJ t        t        j                  d	      |d	   z  |z
        dk  sJ y )N
   constantmoder   MbP?r   r   r#      333333?r'   r(   sigma_ratior)   r*   r$   r7   r   皙?)r   r;   padr   shaper@   r9   r:   	r   r   rrY   im3r)   r*   rF   rJ   s	            r1   test_blob_dog_3dr^   J   s     	A
C
Aq!
C
&&c

+C#		:	%	#E 	aA77d??Q41s7Q;Q41s7Q;Q41s7Q;tyy|ad"Q&'#---r4   c                 n   d}d}t        |dz  ||      }t        j                  ||d      }|dk(  rd}d }n	|dk(  rd }d}t        |j	                  | d	
      g dg dd      }|d   }|j
                  dk(  sJ |d   |dz  |z   dz   k(  sJ |d   ||z   dz   k(  sJ |d   ||z   dz   k(  sJ t        t        j                  d      |d   z  |dz  z
        dk  sJ t        t        j                  d      |d   z  |z
        dk  sJ t        t        j                  d      |d   z  |z
        dk  sJ y )NrN   r   rO   rP   r   rR   r   r#   F)copy)      ?rS   rS   r   rN   rN   rT   rU   r      r7   rS   rX   r$   r   )	r   r;   rY   r   astyperZ   r@   r9   r:   r[   s	            r1   test_blob_dog_3d_anisotropicrf   k   sk    	A
C
AE1a
 C
&&c

+C#		:	%	

5u
%#E 	aA77d??Q41q53;?"""Q41s7Q;Q41s7Q;tyy|ad"QU*+c111tyy|ad"Q&'#---tyy|ad"Q&'#---r4   disc_centerr   r   r      exclude_border)rd   )rd   rd   r$      c                 $   t        j                  d      }t        | d      \  }}d|||f<   t        |ddd      }|j                  d   dk(  sJ d	       |d   }|d   | d   k(  sJ d
| d    d       |d   | d   k(  sJ d
| d    d       t        |ddd|      }| dk(  rV|dk(  rQ|j                  d   dk(  sJ d	       |d   }|d   | d   k(  sJ d
| d    d       |d   | d   k(  sJ d
| d    d       y d}|j                  d   dk(  sJ |       y )Nr   r   r   ra   rT   )r'   r(   rV   r   r7   "one blob should have been detectedblob should be  px from x border px from y border)r'   r(   rV   rk   ri   rl   ?zero blobs should be detected, as only blob is 5 px from border)r;   r<   r   r   rZ   rg   rk   rC   rD   rE   rF   rJ   msgs           r1   test_blob_dog_exclude_borderrv      s    ''*
C+q!FBCBK	E ;;q>QD DDaAQ4;q>!V_[^4DDU#VV!Q4;q>!V_[^4DDU#VV!%E g.G";{{1~"H$HH"!HaDKN"	?[^,,=>	?" aDKN"	?[^,,=>	?" P{{1~"'C'"r4   anisotropicFTndim)r7   r   rS   r$   function_namer   r	   c                 (   t        j                  d|z  t         j                        }|rdt        j                  |      z   }nd}t	        t
        |       } |||      }|rd|j                  z  n|j                  dz   }|j                  d|fk(  sJ y )N)   r      )r(   r   r7   r   )r;   rA   float32arangegetattrr   rx   rZ   )ry   rx   rw   zr(   	blob_funcrF   expected_shapes           r1   test_nd_blob_no_peaks_shaper      s~    
 	RZZ0A		$'		/Ia9-E#.QZAFFQJN;;1n----r4   c                    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<   |dk(  r6d}|j
                  j                  dk7  r|t        j                  |      z  }d }n	|dk(  rd }d}t        |dd      }fd}t        ||      }	d}
|	d   }t        |d   dz
        |
k  sJ t        |d   dz
        |
k  sJ t         ||      dz
        |
k  sJ |	d   }t        |d   dz
        |
k  sJ t        |d   d
z
        |
k  sJ t         ||      dz
        |
k  sJ |	d   }t        |d   dz
        |
k  sJ t        |d   dz
        |
k  sJ t         ||      d
z
        |
k  sJ |	d   }t        |d   dz
        |
k  sJ t        |d   dz
        |
k  sJ t         ||      dz
        |
k  sJ t        |dd||d       }|	d   }t        |d   dz
        |
k  sJ t        |d   dz
        |
k  sJ t         ||      dz
        |
k  sJ |	d   }t        |d   dz
        |
k  sJ t        |d   d
z
        |
k  sJ t         ||      dz
        |
k  sJ |	d   }t        |d   dz
        |
k  sJ t        |d   dz
        |
k  sJ t         ||      d
z
        |
k  sJ |	d   }t        |d   dz
        |
k  sJ t        |d   dz
        |
k  sJ t         ||      dz
        |
k  sJ t        j                  d!      }t        |      j                  dk(  sJ y )"Nr      r   r   )r   A   r   r   )P   r   rm   )r%      r   )r         r   r7   r"   r   r#   rj   r&   c                     | d   z  S r,   r-   r.   s    r1   r2   ztest_blob_log.<locals>.radius   r3   r4   r5   rS   r   r   r   r   r%   r   r   r   T)r'   r(   r)   r*   	log_scaler8   )r9   r:   r;   r<   r   r   r=   r>   r	   r?   r@   rA   rB   )r   r   rC   rD   rE   r)   r*   rF   r2   rG   rH   rJ   rK   r0   s                @r1   test_blob_logr      s    
1B
''*E
*C)QFBCBK(BFBCBK)R FBCBK*b!FBCBK#	99>>S $I	:	%	qB)=E 	u&!AF	!Aqtcz?f$$$qtby>V###vay1}'''	!Aqtby>V###qtby>V###vay2~&(((	!Aqtby>V###qtcz?f$$$vay2~&(((	!Aqtcz?f$$$qtcz?f$$$vay2~&((( #E 	
!Aqtcz?f$$$qtby>V###vay1}'''	!Aqtby>V###qtby>V###vay2~&(((	!Aqtby>V###qtcz?f$$$vay2~&(((	!Aqtcz?f$$$qtcz?f$$$vay2~&((( $II##q(((r4   c                      t        j                  d      } t        dd      \  }}d| ||f<   t        dd      \  }}d| ||f<   t        | ddd	       y )
N)   r   rh   r   r      rd   rj   rN   皙?)r(   	num_sigmar)   )r;   r<   r   r	   )rC   rD   rE   s      r1   test_blob_log_no_warningsr   &  sV    
''(
C&!_FBCBK&!_FBCBKSB"<r4   c                  V   d} d}t        | | |       }t        j                  ||d      }t        |dd      }|d   }|j                  dk(  sJ |d   | |z   d	z   k(  sJ |d	   | |z   d	z   k(  sJ |d
   | |z   d	z   k(  sJ t        t        j                  d      |d   z  | z
        d	k  sJ y )Nrd   rN   rO   rP   rS   r'   r(   r   rW   r7   r   r   r;   rY   r	   rZ   r@   r9   r:   r\   rY   r]   rF   rJ   s        r1   test_blob_log_3dr   2  s    	A
C
Aq!
C
&&c

+CSA4EaA77d??Q41s7Q;Q41s7Q;Q41s7Q;tyy|ad"Q&'!+++r4   c                      d} d}t        | dz  | |       }t        j                  ||d      }t        |g dg d      }|d	   }|j                  d
k(  sJ |d	   | dz  |z   dz   k(  sJ |d   | |z   dz   k(  sJ |d   | |z   dz   k(  sJ t        t        j                  d      |d   z  | dz  z
        dk  sJ t        t        j                  d      |d   z  | z
        dk  sJ t        t        j                  d      |d   z  | z
        dk  sJ y )Nrd   rN   r   rO   rP   )r7   r   r   rb   r   r   rc   r7   rS   r$   r   r   r   s        r1   test_blob_log_3d_anisotropicr   C  s/   	A
C
AE1a
 C
&&c

+CE 	aA77d??Q41q53;?"""Q41s7Q;Q41s7Q;tyy|ad"QU*+a///tyy|ad"Q&'!+++tyy|ad"Q&'!+++r4   c                    t        j                  d      }t        | d      \  }}d|||f<   t        |dd      }|j                  d   dk(  sJ |d   }|d   | d   k(  sJ d| d    d	       |d   | d   k(  sJ d| d    d
       t        |dd|      }| dk(  rV|dk(  rQ|j                  d   dk(  sJ d       |d   }|d   | d   k(  sJ d| d    d	       |d   | d   k(  sJ d| d    d
       y d}|j                  d   dk(  sJ |       y )Nr   r   r   ra   r   r   r7   rp   rq   rr   )r'   r(   rk   ri   rl   ro   rs   )r;   r<   r   r	   rZ   rt   s           r1   test_blob_log_exclude_borderr   Z  s    ''*
C+q!FBCBKE
 ;;q>QaAQ4;q>!V_[^4DDU#VV!Q4;q>!V_[^4DDU#VV!%	E g.G";{{1~"H$HH"!HaDKN"	?[^,,=>	?" aDKN"	?[^,,=>	?" P{{1~"'C'"r4   c                 
   t        j                  d|       }t        dd      \  }}d|||f<   t        dd      \  }}d|||f<   t        dd	      \  }}d|||f<   t        d
d      \  }}d|||f<   |dk(  r;d}|j                  j                  dk(  rt        j
                  |      }||dz  z  }d }n	|dk(  rd }d}t        |ddd      }d }	t        ||	      }
d}|
d   }t        |d   dz
        |k  sJ t        |d   dz
        |k  sJ t         |	|      dz
        |k  sJ |
d   }t        |d   dz
        |k  sJ t        |d   dz
        |k  sJ t         |	|      dz
        |k  sJ |
d   }t        |d   dz
        |k  sJ t        |d   dz
        |k  sJ t         |	|      d	z
        |k  sJ |
d   }t        |d   d z
        |k  sJ t        |d   d!z
        |k  sJ t         |	|      dz
        |k  sJ y )"Nr   r   r   rj   r     r%   r   r   (   r   r%   r   皙?r"   r   r   r#   r7   <   rN   )r'   r(   r   r)   r*   c                     | d   S r,   r-   r/   s    r1   r2   ztest_blob_doh.<locals>.radius      tr4   r5   r$   r   r   r   r   r   r   rS   r   r   )	r;   r<   r   r   r=   r>   r   r?   r@   )r   r   rC   rD   rE   r)   r>   r*   rF   r2   rG   rH   rJ   s                r1   test_blob_dohr     sm    ''*E
*C*b!FBCBK)R FBCBK*b!FBCBK*b!FBCBK# 	99>>S &&+CaI	:	%	#E 	u&!AF	!Aqtcz?f$$$qtcz?f$$$vay2~&(((	!Aqtcz?f$$$qtby>V###vay2~&(((	!Aqtcz?f$$$qtcz?f$$$vay2~&(((	!Aqtcz?f$$$qtcz?f$$$vay2~&(((r4   c                     t        j                  dt         j                        } 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 }t        ||      }d}|d   }t        |d   dz
        |k  sJ t        |d   dz
        |k  sJ t         ||      dz
        |k  sJ |d   }t        |d   dz
        |k  sJ t        |d   dz
        |k  sJ t         ||      dz
        |k  sJ |d   }t        |d   dz
        |k  sJ t        |d   dz
        |k  sJ t         ||      d	z
        |k  sJ |d   }t        |d   dz
        |k  sJ t        |d   dz
        |k  sJ t         ||      dz
        |k  sJ y )Nr   r   r   rj   r   r   r   r   r   r   r%   r7   r   rN   Tr   )r'   r(   r   r   r)   c                     | d   S r,   r-   r   s    r1   r2   z'test_blob_doh_log_scale.<locals>.radius  r   r4   r5   r   r   r   r   r   r   r   rS   r   r   )r;   r<   uint8r   r   r?   r@   )rC   rD   rE   rF   r2   rG   rH   rJ   s           r1   test_blob_doh_log_scaler     s   
''*BHH
-C*b!FBCBK)R FBCBK*b!FBCBK*b!FBCBKqB"PTE 	u&!AF	!Aqtcz?f$$$qtcz?f$$$vay2~&(((	!Aqtcz?f$$$qtby>V###vay2~&(((	!Aqtcz?f$$$qtcz?f$$$vay2~&(((	!Aqtcz?f$$$qtcz?f$$$vay2~&(((r4   c                  b    t        j                  d      } t        |       j                  dk(  sJ y )Nr8   r   )r;   rA   r   rB   )rK   s    r1   test_blob_doh_no_peaksr     s)    $II##q(((r4   c                      t        j                  dt         j                        } t        dd      \  }}d| ||f<   t        dd      \  }}d| ||f<   t	        | dd	d
d      }t        |      dk(  sJ y )Nr   r   r8   rj   r   )x   r   r   r7   r   rN   r   )r'   r(   r   r)   )r;   r<   r   r   r   len)rC   rD   rE   rF   s       r1   test_blob_doh_overlapr     sr    
''*BHH
-C*b!FBCBK*b!FBCBKSArTREu:??r4   c                  4   d\  } }d\  }}t        | | |       }t        j                  ||d      }t        |||      }t        j                  |||f|dz
  |dz   f||fgd      }t        j                  ||      }t	        |ddd	      }t        |      d
k(  sJ y )Nr   r      rO   rP   	   r   rN   r   r'   r(   overlapr7   )r   r;   rY   
logical_orr	   r   )r1r0   pad1pad2blob1blob2r]   rF   s           r1   test_blob_log_overlap_3dr     s    FBJD$b"b!EFF5$Z0Eb"b!EFFttax2T4LA
E --u
%CSASAEu:??r4   c                     t        j                  d      } t        t        j                  dddd| z  d| z  d| z  g      t        j                  dddd| z  d| z  d| z  g      d      }t        |d       t        t        j                  dddd| z  d| z  d| z  g      t        j                  dddd| z  d| z  d| z  g      d      }t        |d       y )	NrS   r   r   rN   g?r7   )	sigma_dimg?)r9   r:   r
   r;   arrayr   )s3r   s     r1    test_blob_overlap_3d_anisotropicr     s     
1B
!Q1r627BG45
!QC"Ha"fa"f56G
 )
!Q1r627BG45
!Q38QVQV45G
 )r4   c                      t        j                  d      } d| dddf<   t        | ddd      }t        |      dkD  sJ t        | dd	gddgd      }t        |      dk(  sJ y )
N)r%   r%   r7   rj   rN   r#   r   rS   r'   r(   r   r   r;   rA   r	   r   )imageisotropic_blobs	ani_blobss      r1   test_blob_log_anisotropicr   '  st    HHXEE"be)uqANO!####qaWI y>Qr4   c                     d\  } }d\  }}t        | | |       }t        j                  ||d      }t        |||      }t        j                  |||f|dz
  |dz   f||fgd      }t        j                  ||      }t	        |g ddd	      }t        |      d
k(  sJ t        t        j                  dddt        j                  d      z  g      t        j                  dddt        j                  d      z  g            }t        |dt        j                  z  dt        j                  d      z  t        j                  d      dz  z
  z         y )Nr   r   rO   rP   r   )r   gGz @g
ףp=
 @rN   r   r   r7   r   r   g      ?r#   rS   r!   )r   r;   rY   r   r	   r   r
   r   r9   r:   r   piacos)	r   r0   r   r   r   r   r]   rF   r   s	            r1   $test_blob_log_overlap_3d_anisotropicr   2  s-   FBJD$b"b!EFF5$Z0Eb"b!EFFttax2T4LA
E --u
%CS$4CPEu:?? 
!QTYYq\)*+RXXq"b499Q<>O6P-QG tww!dii&8"8499Q<#;M"MNr4   c                  l    t        j                  d      } t        | ddd      }t        |      dk(  sJ y )N)rN   rN   r   r   r$   r   r   r   )imrF   s     r1   test_no_blobr   I  s0    	(	BR1Q?Eu:??r4   )+r9   numpyr;   pytestnumpy.testingr   skimager   skimage.drawr   skimage.draw.draw3dr   skimage.featurer   r   r	   skimage.feature.blobr
   markparametrizer   float16r}   float64rL   r^   rf   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r4   r1   <module>r      s%      -   ) 8 8 . 288RZZRZZ"PQ)J
+CD7) E R7)t 288RZZRZZ"PQ)J
+CD. E R.> 288RZZRZZ"PQ)J
+CD. E R.B (9:)+?@%( A ;%(P 6.:z*BC. D / 7. 288RZZRZZ"PQ)J
+CDX) E RX)v	=,",. (9:)+?@"( A ;"(J 288RZZ"DE)J
+CD=) E F=)@+)\)*&.r4   