
    9iG?                        S SK r S SKrS SKrS SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJrJrJr  S SKJr  \R$                  R'                  S\R(                  \R*                  \R,                  \R.                  /5      \R$                  R'                  S	S
S/5      S 5       5       r\R$                  R'                  S\R(                  \R*                  \R,                  \R.                  /5      \R$                  R'                  S	S
S/5      S 5       5       r\R$                  R'                  S\R(                  \R*                  \R,                  \R.                  /5      \R$                  R'                  S	S
S/5      S 5       5       r\R$                  R'                  SSS/5      \R$                  R'                  S/ SQ5      S 5       5       r\R$                  R'                  SSS/5      \R$                  R'                  S/ SQ5      \R$                  R'                  SSS/5      S 5       5       5       r\R$                  R'                  S\R(                  \R*                  \R,                  \R.                  /5      \R$                  R'                  S	S
S/5      S 5       5       rS rS  rS! r \R$                  R'                  SSS/5      \R$                  R'                  S/ SQ5      S" 5       5       r!\R$                  R'                  S\R(                  \R*                  \R,                  /5      \R$                  R'                  S	S
S/5      S# 5       5       r"S$ r#S% r$S& r%S' r&S( r'S) r(S* r)S+ r*g),    N)assert_almost_equal)feature)disk)	ellipsoid)blob_dogblob_dohblob_log)_blob_overlapdtypethreshold_typeabsoluterelativec                   ^ [         R                  " S5      m[        R                  " SU S9n[	        SS5      u  p4SX#U4'   [	        SS5      u  p4SX#U4'   [	        S	S
5      u  p4SX#U4'   US:X  a8  SnUR
                  R                  S:w  a  U[        R                  " U5      -  nS nO
US:X  a  S nSn[        USSWWS9nU4S jn[        XxS9n	Sn
SnU	S   n[        US   S-
  5      U
::  d   e[        US   S-
  5      U
::  d   e[        U" U5      S-
  5      US-  ::  d   eU	S   n[        US   S-
  5      U
::  d   e[        US   S-
  5      U
::  d   e[        U" U5      S-
  5      US-  ::  d   eU	S   n[        US   S-
  5      U
::  d   e[        US   S-
  5      U
::  d   e[        U" U5      S
-
  5      US
-  ::  d   e[        R                  " SU S9n[        U5      R                  S:X  d   eg )N      r   r              d   ,        ^  -   r          @fr         ?   2   	min_sigma	max_sigma	thresholdthreshold_relc                    > TU S   -  $ Nr    xr2s    _/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/skimage/feature/tests/test_blob.pyradius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_dogrM      s)    
1B
''*E
*C*a FBCBK*b!FBCBK*b!FBCB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(((r5   c           	      ~   SnSn[        X"U5      n[        R                  " XCSS9nUS:X  a  SnSnO
US:X  a  SnSn[        US	SS
WWS9nUS   nUR                  S:X  d   eUS   X#-   S-   :X  d   eUS   X#-   S-   :X  d   eUS   X#-   S-   :X  d   e[        [        R                  " S	5      US	   -  U-
  5      S:  d   eg )N
   constantmoder   MbP?r   r   r#      333333?r'   r(   sigma_ratior)   r*   r$   r8   r   皙?)r   r<   padr   shaperA   r:   r;   	r   r   rrZ   im3r)   r*   rG   rK   s	            r1   test_blob_dog_3dr_   J   s     	A
C
A!
C
&&

+C#		:	%	#E 	aA77d??Q417Q;Q417Q;Q417Q;tyy|ad"Q&'#---r5   c           	      n   SnSn[        US-  X"5      n[        R                  " XCSS9nUS:X  a  SnS nO
US:X  a  S nSn[        UR	                  U S	S
9/ SQ/ SQSWWS9nUS   nUR
                  S:X  d   eUS   US-  U-   S-   :X  d   eUS   X#-   S-   :X  d   eUS   X#-   S-   :X  d   e[        [        R                  " S5      US   -  US-  -
  5      S:  d   e[        [        R                  " S5      US   -  U-
  5      S:  d   e[        [        R                  " S5      US   -  U-
  5      S:  d   eg )NrO   r   rP   rQ   r   rS   r   r#   F)copy)      ?rT   rT   r   rO   rO   rU   rV   r      r8   rT   rY   r$   r   )	r   r<   rZ   r   astyper[   rA   r:   r;   r\   s	            r1   test_blob_dog_3d_anisotropicrg   k   sc    	A
C
AE1
 C
&&

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

5u
%#E 	aA77d??Q41q53;?"""Q417Q;Q417Q;tyy|ad"QU*+c111tyy|ad"Q&'#---tyy|ad"Q&'#---r5   disc_centerr   r   r      exclude_border)re   )re   re   r$      c                 (   [         R                  " S5      n[        U S5      u  p4SX#U4'   [        USSSS9nUR                  S   S:X  d   S	5       eUS   nUS   U S   :X  d   S
U S    S35       eUS   U S   :X  d   S
U S    S35       e[        USSSUS9nU S:X  aZ  US:X  aT  UR                  S   S:X  d   S	5       eUS   nUS   U S   :X  d   S
U S    S35       eUS   U S   :X  d   S
U S    S35       eg SnUR                  S   S:X  d   U5       eg )Nr   r   r   rb   rU   )r'   r(   rW   r   r8   "one blob should have been detectedblob should be  px from x border px from y border)r'   r(   rW   rl   rj   rm   ?zero blobs should be detected, as only blob is 5 px from border)r<   r=   r   r   r[   rh   rl   rD   rE   rF   rG   rK   msgs           r1   test_blob_dog_exclude_borderrw      s    ''*
C+q!FBCB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'"r5   anisotropicFTndim)r8   r   rT   r$   function_namer   r	   c                 4   [         R                  " SU-  [         R                  S9nU(       a  S[         R                  " U5      -   nOSn[	        [
        U 5      nU" X4S9nU(       a  SUR                  -  OUR                  S-   nUR                  SU4:X  d   eg )N)   r      )r(   r   r8   r   )r<   rB   float32arangegetattrr   ry   r[   )rz   ry   rx   zr(   	blob_funcrG   expected_shapes           r1   test_nd_blob_no_peaks_shaper      s|    
 	RZZ0A		$'		/Ia-E#.QZAFFQJN;;1n----r5   c           	        ^ [         R                  " S5      m[        R                  " SU S9n[	        SS5      u  p4SX#U4'   [	        SS5      u  p4SX#U4'   [	        S	S
5      u  p4SX#U4'   [	        SS5      u  p4SX#U4'   US:X  a8  SnUR
                  R                  S:w  a  U[        R                  " U5      -  nS nO
US:X  a  S nSn[        USSWWS9nU4S jn[        XxS9n	Sn
U	S   n[        US   S-
  5      U
::  d   e[        US   S-
  5      U
::  d   e[        U" U5      S-
  5      U
::  d   eU	S   n[        US   S-
  5      U
::  d   e[        US   S
-
  5      U
::  d   e[        U" U5      S-
  5      U
::  d   eU	S   n[        US   S-
  5      U
::  d   e[        US   S-
  5      U
::  d   e[        U" U5      S
-
  5      U
::  d   eU	S   n[        US   S-
  5      U
::  d   e[        US   S-
  5      U
::  d   e[        U" U5      S-
  5      U
::  d   e[        USSUUSS 9nU	S   n[        US   S-
  5      U
::  d   e[        US   S-
  5      U
::  d   e[        U" U5      S-
  5      U
::  d   eU	S   n[        US   S-
  5      U
::  d   e[        US   S
-
  5      U
::  d   e[        U" U5      S-
  5      U
::  d   eU	S   n[        US   S-
  5      U
::  d   e[        US   S-
  5      U
::  d   e[        U" U5      S
-
  5      U
::  d   eU	S   n[        US   S-
  5      U
::  d   e[        US   S-
  5      U
::  d   e[        U" U5      S-
  5      U
::  d   e[        R                  " S!5      n[        U5      R                  S:X  d   eg )"Nr      r   r   )r   A   r   r   )P   r   rn   )r%      r   )r         r   r8   r"   r   r#   rk   r&   c                    > TU S   -  $ r,   r-   r.   s    r1   r2   test_blob_log.<locals>.radius   r4   r5   r6   rT   r   r   r   r   r%   r   r   r   T)r'   r(   r)   r*   	log_scaler9   )r:   r;   r<   r=   r   r   r>   r?   r	   r@   rA   rB   rC   )r   r   rD   rE   rF   r)   r*   rG   r2   rH   rI   rK   rL   r0   s                @r1   test_blob_logr      s     
1B
''*E
*C)QFBCBK(BFBCBK)R FBCBK*b!FBCB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(((r5   c                      [         R                  " S5      n [        SS5      u  pSXU4'   [        SS5      u  pSXU4'   [        U SSSS	9  g )
N)   r   ri   r   r      re   rk   rO   皙?)r(   	num_sigmar)   )r<   r=   r   r	   )rD   rE   rF   s      r1   test_blob_log_no_warningsr   &  sN    
''(
C&!_FBCBK&!_FBCBKSB"<r5   c                  N   Sn Sn[        X U 5      n[        R                  " X!SS9n[        USSS9nUS   nUR                  S:X  d   eUS   X-   S	-   :X  d   eUS	   X-   S	-   :X  d   eUS
   X-   S	-   :X  d   e[        [        R                  " S5      US   -  U -
  5      S	:  d   eg )Nre   rO   rP   rQ   rT   r'   r(   r   rX   r8   r   r   r<   rZ   r	   r[   rA   r:   r;   r]   rZ   r^   rG   rK   s        r1   test_blob_log_3dr   2  s    	A
C
A!
C
&&

+CSA4EaA77d??Q417Q;Q417Q;Q417Q;tyy|ad"Q&'!+++r5   c                  "   Sn Sn[        U S-  X 5      n[        R                  " X!SS9n[        U/ SQ/ SQS9nUS	   nUR                  S
:X  d   eUS	   U S-  U-   S-   :X  d   eUS   X-   S-   :X  d   eUS   X-   S-   :X  d   e[        [        R                  " S5      US   -  U S-  -
  5      S:  d   e[        [        R                  " S5      US   -  U -
  5      S:  d   e[        [        R                  " S5      US   -  U -
  5      S:  d   eg )Nre   rO   r   rP   rQ   )r8   r   r   rc   r   r   rd   r8   rT   r$   r   r   r   s        r1   test_blob_log_3d_anisotropicr   C  s'   	A
C
AE1
 C
&&

+CE 	aA77d??Q41q53;?"""Q417Q;Q417Q;tyy|ad"QU*+a///tyy|ad"Q&'!+++tyy|ad"Q&'!+++r5   c                    [         R                  " S5      n[        U S5      u  p4SX#U4'   [        USSS9nUR                  S   S:X  d   eUS   nUS   U S   :X  d   SU S    S	35       eUS   U S   :X  d   SU S    S
35       e[        USSUS9nU S:X  aZ  US:X  aT  UR                  S   S:X  d   S5       eUS   nUS   U S   :X  d   SU S    S	35       eUS   U S   :X  d   SU S    S
35       eg SnUR                  S   S:X  d   U5       eg )Nr   r   r   rb   r   r   r8   rq   rr   rs   )r'   r(   rl   rj   rm   rp   rt   )r<   r=   r   r	   r[   ru   s           r1   test_blob_log_exclude_borderr   Z  s    ''*
C+q!FBCB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'"r5   c           	         [         R                  " SU S9n[        SS5      u  p4SX#U4'   [        SS5      u  p4SX#U4'   [        SS	5      u  p4SX#U4'   [        S
S5      u  p4SX#U4'   US:X  a<  SnUR                  R                  S:X  a  [         R
                  " U5      nXVS-  -  nS nO
US:X  a  S nSn[        USSSWWS9nS n	[        XS9n
SnU
S   n[        US   S-
  5      U::  d   e[        US   S-
  5      U::  d   e[        U	" U5      S-
  5      U::  d   eU
S   n[        US   S-
  5      U::  d   e[        US   S-
  5      U::  d   e[        U	" U5      S-
  5      U::  d   eU
S   n[        US   S-
  5      U::  d   e[        US   S-
  5      U::  d   e[        U	" U5      S	-
  5      U::  d   eU
S   n[        US   S -
  5      U::  d   e[        US   S!-
  5      U::  d   e[        U	" U5      S-
  5      U::  d   eg )"Nr   r   r   rk   r     r%   r   r   (   r   r%   r   皙?r"   r   r   r#   r8   <   rO   )r'   r(   r   r)   r*   c                     U S   $ r,   r-   r/   s    r1   r2   test_blob_doh.<locals>.radius      tr5   r6   r$   r   r   r   r   r   r   rT   r   r   )	r<   r=   r   r   r>   r?   r   r@   rA   )r   r   rD   rE   rF   r)   r?   r*   rG   r2   rH   rI   rK   s                r1   test_blob_dohr     sY    ''*E
*C*b!FBCBK)R FBCBK*b!FBCBK*b!FBCB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~&(((r5   c            	         [         R                  " S[         R                  S9n [        SS5      u  pSXU4'   [        SS5      u  pSXU4'   [        SS	5      u  pSXU4'   [        S
S5      u  pSXU4'   [	        U SSSSSS9nS n[        X4S9nSnUS   n[        US   S-
  5      U::  d   e[        US   S-
  5      U::  d   e[        U" U5      S-
  5      U::  d   eUS   n[        US   S-
  5      U::  d   e[        US   S-
  5      U::  d   e[        U" U5      S-
  5      U::  d   eUS   n[        US   S-
  5      U::  d   e[        US   S-
  5      U::  d   e[        U" U5      S	-
  5      U::  d   eUS   n[        US   S-
  5      U::  d   e[        US   S-
  5      U::  d   e[        U" U5      S-
  5      U::  d   eg )Nr   r   r   rk   r   r   r   r   r   r   r%   r8   r   rO   Tr   )r'   r(   r   r   r)   c                     U S   $ r,   r-   r   s    r1   r2   'test_blob_doh_log_scale.<locals>.radius  r   r5   r6   r   r   r   r   r   r   r   rT   r   r   )r<   r=   uint8r   r   r@   rA   )rD   rE   rF   rG   r2   rH   rI   rK   s           r1   test_blob_doh_log_scaler     s   
''*BHH
-C*b!FBCBK)R FBCBK*b!FBCBK*b!FBCB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~&(((r5   c                  f    [         R                  " S5      n [        U 5      R                  S:X  d   eg )Nr9   r   )r<   rB   r   rC   )rL   s    r1   test_blob_doh_no_peaksr     s)    $II##q(((r5   c                      [         R                  " S[         R                  S9n [        SS5      u  pSXU4'   [        SS5      u  pSXU4'   [	        U SS	S
SS9n[        U5      S:X  d   eg )Nr   r   r9   rk   r   )x   r   r   r8   r   rO   r   )r'   r(   r   r)   )r<   r=   r   r   r   len)rD   rE   rF   rG   s       r1   test_blob_doh_overlapr     sj    
''*BHH
-C*b!FBCBK*b!FBCBKSArTREu:??r5   c                     Su  pSu  p#[        X U 5      n[        R                  " XBSS9n[        XU5      n[        R                  " XSU4US-
  US-   4X34/SS9n[        R                  " XE5      n[	        USSSS	9n[        U5      S
:X  d   eg )Nr   r      rP   rQ   	   r   rO   r   r'   r(   overlapr8   )r   r<   rZ   
logical_orr	   r   )r1r0   pad1pad2blob1blob2r^   rG   s           r1   test_blob_log_overlap_3dr     s    FBJDbb!EFF5Z0Ebb!EFFttax2TLA
E --
%CSASAEu:??r5   c                     [         R                  " S5      n [        [        R                  " SSSSU -  SU -  SU -  /5      [        R                  " SSSSU -  SU -  SU -  /5      SS9n[        US5        [        [        R                  " SSSSU -  SU -  SU -  /5      [        R                  " SSSSU -  SU -  SU -  /5      SS9n[        US5        g )	NrT   r   r   rO   g?r8   )	sigma_dimg?)r:   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
 )r5   c                      [         R                  " S5      n SU SSS24'   [        U SSSS9n[        U5      S:  d   e[        U SS	/SS/SS9n[        U5      S:X  d   eg )
N)r%   r%   r8   rk   rO   r#   r   rT   r'   r(   r   r   r<   rB   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r5   c                     Su  pSu  p#[        X U 5      n[        R                  " XBSS9n[        XU5      n[        R                  " XSU4US-
  US-   4X34/SS9n[        R                  " XE5      n[	        U/ SQSSS	9n[        U5      S
:X  d   e[        [        R                  " SSS[        R                  " S5      -  /5      [        R                  " SSS[        R                  " S5      -  /5      5      n[        US[        R                  -  S[        R                  " S5      -  [        R                  " S5      S-  -
  -  5        g )Nr   r   rP   rQ   r   )r   gGz @g
ףp=
 @rO   r   r   r8   r   r   g      ?r#   rT   r!   )r   r<   rZ   r   r	   r   r
   r   r:   r;   r   piacos)	r   r0   r   r   r   r   r^   rG   r   s	            r1   $test_blob_log_overlap_3d_anisotropicr   2  s   FBJDbb!EFF5Z0Ebb!EFFttax2TLA
E --
%CS$4CPEu:?? 
!QTYYq\)*+RXXq"b499Q<>O6P-QG tww!dii&8"8499Q<#;M"MNr5   c                  j    [         R                  " S5      n [        U SSSS9n[        U5      S:X  d   eg )N)rO   rO   r   r   r$   r   r   r   )imrG   s     r1   test_no_blobr   I  s0    	(	BR1Q?Eu:??r5   )+r:   numpyr<   pytestnumpy.testingr   skimager   skimage.drawr   skimage.draw.draw3dr   skimage.featurer   r   r	   skimage.feature.blobr
   markparametrizer   float16r~   float64rM   r_   rg   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r5   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=)@+)\)*&.r5   