
    xf                        d dl Zd dlZd dlmZmZmZmZm	Z	m
Z
 d dlmZ d dlmZ ddlmZ  G d d      Z G d d	      Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d  Z*d! Z+d" Z,d# Z-d$ Z.d% Z/d& Z0d' Z1d( Z2d) Z3d* Z4d+ Z5d, Z6d- Z7d. Z8d/ Z9d0 Z:d1 Z;d2 Z<d3 Z=d4 Z>d5 Z?d6 Z@d7 ZAd8 ZBd9 ZCd: ZDd; ZEd< ZFd= ZGd> ZHd? ZId@ ZJdA ZKdB ZLdC ZMdD ZNdE ZOdF ZPdG ZQdH ZRdI ZSdJ ZTdK ZUdL ZVdM ZWdN ZXdO ZYdP ZZdQ Z[dR Z\dS Z]dT Z^dU Z_dV Z`dW ZadX ZbdY ZcdZ Zdd[ Zed\ Zfd] Zgd^ Zhd_ Zid` Zjda Zkdb Zldc Zmdd Znde Zodf Zpdg Zqdh Zrdi Zsdj Ztdk Zudl Zvdm Zwdn Zxdo Zydp Zzdq Z{dr Z|ds Z}dt Z~du Z G dv dw      Zy)x    N)assert_assert_array_almost_equalassert_equalassert_almost_equalassert_array_equalsuppress_warnings)raises   )typesc                   .    e Zd ZdZd Zd Zd Zd Zd Zy)Test_measurements_statszDndimage._measurements._stats() is a utility used by other functions.c                 <   g d}g d}ddg}dD ]  }t        j                  |      j                  |      }t        j                  |      j                  |      }t        j                  j                  |||      \  }}t        |ddg       t        |dd	g        y )
Nr   r
         r   r   r
   r
   r   r
   )   )r   r   labelsindexr         ?       @nparrayreshapendimage_measurements_statsr   selfxr   r   shpcountssumss          G/usr/lib/python3/dist-packages/scipy/ndimage/tests/test_measurements.pytest_azTest_measurements_stats.test_a   s    A! 	1C##C(AXXf%--c2F"0077& 8 /LFDv1v.tc3Z0	1    c                 <   g d}g d}ddg}dD ]  }t        j                  |      j                  |      }t        j                  |      j                  |      }t        j                  j                  |||      \  }}t        |ddg       t        |dd	g        y )
Nr   r   r   	   r,   r   r,   r   r   r   r   r   r   r!   s          r'   test_bzTest_measurements_stats.test_b   s     A! 	1C##C(AXXf%--c2F"0077& 8 /LFDv1v.tc3Z0	1r)   c                 \   g d}g d}ddg}dD ]  }t        j                  |      j                  |      }t        j                  |      j                  |      }t        j                  j                  |||d      \  }}}t        |ddg       t        |d	d
g       t        |dd
g        y )Nr   r   r   r
   r   Tr   r   centeredr   r   r         ?r   r"   r#   r   r   r$   r%   r&   centerss           r'   test_a_centeredz'Test_measurements_stats.test_a_centered,       A! 	4C##C(AXXf%--c2F$+$9$9$@$@& %A %>!FD'v1v.tc3Z0wc
3	4r)   c                 \   g d}g d}ddg}dD ]  }t        j                  |      j                  |      }t        j                  |      j                  |      }t        j                  j                  |||d      \  }}}t        |ddg       t        |d	d
g       t        |dd
g        y )Nr   r+   r   r,   r   Tr/   r   r   r   r1   r   r2   s           r'   test_b_centeredz'Test_measurements_stats.test_b_centered9   r5   r)   c                 \   g d}g d}ddg}dD ]  }t        j                  |      j                  |      }t        j                  |      j                  |      }t        j                  j                  |||d      \  }}}t        |ddg       t        |d	d
g       t        |dd
g        y )Nr   )        r9         "@r:   r9   r:   r   Tr/   r   r   r   r1   r   r2   s           r'   test_nonint_labelsz*Test_measurements_stats.test_nonint_labelsF   s    %c
! 	4C##C(AXXf%--c2F$+$9$9$@$@& %A %>!FD'v1v.tc3Z0wc
3	4r)   N)	__name__
__module____qualname____doc__r(   r-   r4   r7   r;    r)   r'   r   r      s    N
11444r)   r   c                       e Zd ZdZd Zy)Test_measurements_selectzEndimage._measurements._select() is a utility used by other functions.c                    g d}g dddgfg dddgfg ddd	gfg}|D ]  \  }}t         j                  j                  |||
      }t        t	        |      dk(         t         j                  j                  |||d      }t        t	        |      dk(         t        |d   ddg       t         j                  j                  |||d      }t        t	        |      dk(         t        |d   ddg       t         j                  j                  |||dd      }t        t	        |      dk(         t        |d   ddg       t        |d   ddg       t        |d   j                  j                  d       t         j                  j                  |||dd      }t        t	        |      dk(         t        |d   ddg       t        |d   ddg       t        |d   j                  j                  d        y )N)r   r
   r   r   r   r   r
   r+   r,   )r9   r9         @rD   r9   rD   r   T)r   r   find_maxr   )r   r   find_minr   )r   r   rF   find_min_positions   i)r   r   rE   find_max_positions)	r   r   _selectr   lenr   r   dtypekind)r"   r#   casesr   r   results         r'   
test_basicz#Test_measurements_select.test_basicW   s   Aq6"Aq6"!C:.

 # 	4MFE**22& 3 /FCK1$%**22& 3 >FCK1$%vay1a&1**22& 3 >FCK1$%vay1a&1**22&#' 3 )F CK1$%vay1a&1vay1a&1--s3**22&#' 3 )F CK1$%vay1a&1vay1a&1--s33	4r)   N)r<   r=   r>   r?   rQ   r@   r)   r'   rB   rB   T   s
    O 4r)   rB   c                      t        j                  g       } t        j                  |       \  }}t	        |d       t        |d       y Nr
   r   onesr   labelr   r   dataoutns      r'   test_label01r[   z   s5    772;D]]4 FCc1%Ar)   c                      t        j                  g       } t        j                  |       \  }}t	        |d       t        |d       y )Nr   r   zerosr   rV   r   r   rW   s      r'   test_label02r_      s5    88B<D]]4 FCc1%Ar)   c                      t        j                  dg      } t        j                  |       \  }}t	        |dg       t        |d       y rS   rT   rW   s      r'   test_label03ra      s9    77A3<D]]4 FCcA3'Ar)   c                      t        j                  dg      } t        j                  |       \  }}t	        |dg       t        |d       y Nr
   r   r]   rW   s      r'   test_label04rd      s9    88QC=D]]4 FCcA3'Ar)   c                      t        j                  dg      } t        j                  |       \  }}t	        |g d       t        |d       y )N   )r
   r
   r
   r
   r
   r
   rT   rW   s      r'   test_label05rg      s7    77A3<D]]4 FCc?3Ar)   c                      t        j                  g d      } t        j                  |       \  }}t	        |g d       t        |d       y )N)r
   r   r
   r
   r   r
   r
   r   r   r   r   rH   rH   r   r   r   rV   r   r   rW   s      r'   test_label06rk      s8    88&'D]]4 FCc#56Ar)   c            
          t        j                  g dg dg dg dg dg dg      } t        j                  |       \  }}t	        |g dg dg dg dg dg dg       t        |d       y )Nr   r   r   r   r   r   r   rj   rW   s      r'   test_label07rn      h    88'''''') *D ]]4 FCc$6$6$6$6$6$6$8 9 Ar)   c            
          t        j                  g dg dg dg dg dg dg      } t        j                  |       \  }}t	        |g dg dg dg dg dg d	g       t        |d
       y N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   rH   rH   r   r   r   r   r   r   r   r   r   r   r   rj   rW   s      r'   test_label08r{      ro   r)   c            
         t        j                  g dg dg dg dg dg dg      } t        j                  dd      }t        j                  | |      \  }}t        |g dg dg dg d	g d	g d
g       t        |d       y )Nrr   rs   rt   ru   rv   r   rw   rx   )r   r   r   r   r   r   )r   r   r   rH   rH   r   rH   r   r   r   generate_binary_structurerV   r   r   rX   structrY   rZ   s       r'   test_label09r      s|    88'''''') *D ..q!4F]]4(FCc$6$6$6$6$6$6$8 9 Ar)   c                      t        j                  g dg dg dg dg      } t        j                  dd      }t        j                  | |      \  }}t        |g dg dg dg dg       t        |d       y )Nrm   )r   r
   r
   r   r
   r   )r   r
   r
   r
   r
   r   r   r
   r}   r   s       r'   test_label10r      sp    88'''') *D ..q!4F]]4(FCc$6$6$6$6$8 9 Ar)   c            
          t         D ]n  } t        j                  g dg dg dg dg dg dg|       }t        j                  |      \  }}g dg dg dg dg dg d	g}t        ||       t        |d
       p y rq   r   r   r   r   rV   r   r   typerX   rY   rZ   expecteds        r'   test_label11r      s~     xx++++++-
 /34 t$Q&&&&&&( 	"#x0Qr)   c            
          t         D ]m  } t        j                  g dg dg dg dg dg dg|       }t        j                  ||      }g dg dg dg d	g d	g d
g}t        ||       t        |d       o y )Nrr   rs   rt   ru   rv   outputrw   rx   ry   rz   r   r   )r   rX   rZ   r   s       r'   test_label11_inplacer      s|     xx++++++-
 /34 MM$t,&&&&&&( 	"$1Qr)   c            	          t         D ]h  } t        j                  g dg dg dg dg dg|       }t        j                  |      \  }}g dg dg dg dg dg}t        ||       t        |d       j y )N)r   r   r   r   r
   r
   )r   r   r   r   r   r
   )r   r   r
   r   r
   r
   )r   r   r
   r
   r
   r
   rv   r
   r   r   s        r'   test_label12r     sx     xx+++++	- /3	4
 t$Q&&&&&	(
 	"#x0Qr)   c                      t         D ]b  } t        j                  g dg dg dg dg|       }t        j                  |      \  }}g dg dg dg dg}t        ||       t        |d       d y )N)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   r   s        r'   test_label13r     sr     xx::::< 	
 t$Q55557 	"#x0Qr)   c                      t        j                  dg      } t        D ]I  }t        j                  dg|      }t	        j
                  | |      }t        |d       t        |d       K y )Nrf   rM   r   r
   )r   rU   r   r^   r   rV   r   r   rX   tr   rZ   s       r'   test_label_output_typedr   -  sV    77A3<D 1#Q'MM$v.!&!,Q	r)   c                      t        j                  dg      } t        D ]9  }t        j                  | |      \  }}t        |d       |j                  |k(  r9J  y )Nrf   r   r
   )r   rU   r   r   rV   r   rM   r   s       r'   test_label_output_dtyper   6  sP    77A3<D !MM$q1	!&!,||q   !r)   c                      t        j                  dg      } t        D ]@  }t        j                  dg|      }t	        t
        t        ft        j                  | |       B y )Nrf   
   r   )	r   rU   r   r^   assert_raisesRuntimeError
ValueErrorr   rV   )rX   r   r   s      r'   test_label_output_wrong_sizer   >  sL    77A3<D :2$"|Z0mmT&	::r)   c            
      t   t        j                  t        j                  j	                  t        j                  j                  t              dd            } t        j                  t        j                  j	                  t        j                  j                  t              dd            }t        j                  t        j                  j	                  t        j                  j                  t              dd            }| j                  d      } |j                  d      }|j                  d      }d}t        | j                  d         D ]i  }| |d d d d f   }t        |j                  d         D ]@  }||d d d d f   }t        t        j                  ||      d   ||d d d d f          |dz  }B k y )	NrX   zlabel_inputs.txtzlabel_strels.txtzlabel_results.txt)   r   )r   rH   rH   r   r
   )r   loadtxtospathjoindirname__file__r   rangeshaper   r   rV   )rX   strelsresultsrrI   djss           r'   test_label_structuring_elementsr   F  sQ   ::bggll277??$-/ 0DZZ
!6+=? @Fjj
!6+>@ AG<<
#D^^J'Fooj)G	A4::a=! AqMv||A' 	Aq!QwAq!,Q/Aq1ABFA	r)   c                     dd} t        j                  t         j                        t        j                  d      k7  rLd}t         j                  j	                  t        j
                  |            j                  |      } | |       y y )Nc                     | |kD  }t        |j                        }t        j                  |t        j                  ||            \  }}t        j
                  |      }y )N)rL   r   r   rV   r~   find_objects)imgthreshsizemaskranklaco_s           r'   SEztest_ticket_742.<locals>.SEZ  sM    V|4::t&@@tLNB  $r)   rI   )rH     r   )gffffff?r   )r   rM   intprandomrandprodr   )r   r   as      r'   test_ticket_742r   Y  s\    % 
xxBHHSM)IINN2775>*2259
1	 *r)   c                      t        j                  d      } d| ddddf<   d| ddddf<   d| d<   d| d<   d| d<   t        j                  | t        j                  d	            d   dk(  sJ y)
z/Github issue #3025 - improper merging of labels)<   i@  r
   N  i  )$   r   )#   i  )r   i  )rH   rH   )r   r^   r   rV   rU   )r   s    r'   test_gh_issue_3025r   h  sq    
AAa#gJAagJAgJAgJAgJ==BGGFO,Q/1444r)   c                     t         j                  j                  dd      } t        j                  | dkD        \  }}t        |j                  t         j                  t         j                  fv        t        j                  |       y )Nr   r1   )
r   r   r   r   rV   r   rM   int32int64r   )
test_arrayrV   no_featuress      r'   test_label_default_dtyper   s  sZ    B'J zC'78E;EKKBHHbhh//0r)   c                      t        j                  g t              } t        j                  |       }t        |dgk(         y )Nr   r@   )r   rU   intr   r   r   rX   rY   s     r'   test_find_objects01r   {  s0    772S!D


t
$CCB4Kr)   c                      t        j                  g t              } t        j                  |       }t        |g k(         y )Nr   )r   r^   r   r   r   r   r   s     r'   test_find_objects02r     s.    88Bc"D


t
$CC2Ir)   c                      t        j                  dgt              } t        j                  |       }t        |t        ddd       fg       y )Nr
   r   r   r   rU   r   r   r   r   slicer   s     r'   test_find_objects03r     =    77A3c"D


t
$CaD)+,-r)   c                  ~    t        j                  dgt              } t        j                  |       }t        |g        y )Nr
   r   )r   r^   r   r   r   r   r   s     r'   test_find_objects04r     s.    88QCs#D


t
$Cbr)   c                      t        j                  dgt              } t        j                  |       }t        |t        ddd       fg       y )Nrf   r   r   r   r   s     r'   test_find_objects05r     r   r)   c            
          t        j                  g d      } t        j                  |       }t	        |t        ddd       ft        ddd       ft        ddd       fg       y )Nri   r   r
   r   r   rf   r   r   r   r   r   r   r   r   s     r'   test_find_objects06r     s\    88&'D


t
$CaD)+aD)+aD)+- .r)   c            	          t        j                  g dg dg dg dg dg dg      } t        j                  |       }t	        |g        y )Nrm   )r   r   r   r   r   r   s     r'   test_find_objects07r     sC    88'''''') *D 

t
$Cbr)   c                  \   t        j                  g dg dg dg dg dg dg      } t        j                  |       }t	        |t        ddd       t        ddd       ft        ddd       t        d	d
d       ft        dd
d       t        dd	d       ft        d
dd       t        dd
d       fg       y )Nrr   rw   rx   ry   rz   r   r
   rH   r   rf   r   r   r   s     r'   test_find_objects08r     s    88'''''') *D 

t
$CaD)5At+<=aD)5At+<=aD)5At+<=aD)5At+<=? @r)   c                  ,   t        j                  g dg dg dg dg dg dg      } t        j                  |       }t	        |t        ddd       t        ddd       ft        ddd       t        d	d
d       fd t        d
dd       t        dd
d       fg       y )Nrr   rw   rx   rm   rz   r   r
   rH   r   rf   r   r   r   s     r'   test_find_objects09r     s    88'''''') *D 

t
$CaD)5At+<=aD)5At+<=aD)5At+<=? @r)   c            	      \   t        j                  g dg dg dg dg dg dg      } t        j                  | d      }g d}t	        t        |j                               |       i }|D ]  }t        j                  | |k(        ||<    t        j                  | d      }t	        ||       y	)
z Test dictionary keys and entriesrr   rw   rx   rm   rz   r   )ignore_value)r
   r   r   N)r   r   r   value_indicesr   listkeyswhere)rX   vi	true_keystrueviks        r'   test_value_indices01r     s    88'''''') *D 
		t!	4BIbggi),F (HHTQY'q	( 
		t!	4BVr)   c                      t        j                  dt         j                        } d}t        t        |      5  t        j                  |        ddd       y# 1 sw Y   yxY w)zTest input checking)rf   r   r   z(Parameter 'arr' must be an integer array)matchN)r   r^   float32r   r   r   r   )rX   msgs     r'   test_value_indices02r     sH    88F"**-D
4C	z	- $d#$ $ $s   AA!c                     dD ]  } t        j                  ddgz  ddgz  z   ddgz  z   t         j                        j                  |       }t        j                  |      }t        j                  |      }t        t        |j                               t        |             |D ])  }t        j                  ||k(        }t        ||   |       +  y)z2Test different input array shapes, from 1-D to 4-D))r   )   r   )rH   rH   r   )rH   rH   r   r      r
   r   rH   r   N)r   r   r   r   uniquer   r   r   r   r   r   )r   r   trueKeysr   r   trueNdxs         r'   test_value_indices03r     s    : )HHb!fRVmBsF*288<DDUK99Q<""1%T"'')_d8n5 	)AhhqAv&GA(	))r)   c                      t         D ]9  } t        j                  g |       }t        j                  |      }t        |d       ; y )Nr9   )r   r   r   r   sumr   r   inputr   s      r'   
test_sum01r    s9     "T"U#VS!"r)   c                      t         D ];  } t        j                  ddg|       }t        j                  |      }t        |d       = y )Nr   r   r9   )r   r   r^   r   r   r   r  s      r'   
test_sum02r    s=     "!Q&U#VS!"r)   c                      t         D ]9  } t        j                  g |       }t        j                  |      }t        |d       ; y )Nr   )r   r   rU   r   r   r   r  s      r'   
test_sum03r    s9     )D!U#FC()r)   c                      t         D ];  } t        j                  ddg|       }t        j                  |      }t        |d       = y )Nr
   r         @r   r   r   r   r   r   r  s      r'   
test_sum04r    s=     )!Q&U#FC()r)   c                      t         D ]?  } t        j                  ddgddgg|       }t        j                  |      }t        |d       A y )Nr
   r   rH   r   g      $@r
  r  s      r'   
test_sum05r    sF     *1a&1a&)40U#FD)*r)   c                      t        j                  g t              } t        D ];  }t        j                  g |      }t	        j
                  ||       }t        |d       = y )Nr   r9   r   r   boolr   r   r   r   r   r   r  r   s       r'   
test_sum06r    sK    XXb$F "T"U62VS!"r)   c                      t        j                  ddgt              } t        D ]=  }t        j                  ddg|      }t        j                  ||       }t        |d       ? y )Nr   r   r  r9   )r   rU   r  r   r^   r   r   r   r  s       r'   
test_sum07r    sS    WWaVT"F "!Q&U62VS!"r)   c                      t        j                  ddgt              } t        D ]=  }t        j                  ddg|      }t	        j
                  ||       }t        |d       ? y )Nr
   r   r   r  r   r  r  s       r'   
test_sum08r  #  sS    XXq!fd#F "!Q&U62VS!"r)   c                      t        j                  ddgt              } t        D ]A  }t        j                  ddgddgg|      }t	        j
                  ||       }t        |d       C y )Nr
   r   r   rH   r   r        @)r   r   r  r   r   r   r   r  s       r'   
test_sum09r  +  s\    XXq!fd#F )1a&1a&)40U62FC()r)   c                      t        j                  ddgt              } t        j                  ddgddggt              }t        j                  ||       }t        |d       y Nr
   r   r   rH   r   r         @)r   r   r  r   r   r   r   r  r   s      r'   
test_sum10r  3  sM    XXq!fd#FHHq!fq!f%t,E[[v.F$r)   c                      t        j                  ddgt         j                        } t        D ]B  }t        j                  ddgddgg|      }t	        j
                  || d      }t        |d       D y )Nr
   r   rH   r   r         @)r   r   int8r   r   r   r   r  s       r'   
test_sum11r#  :  se    XXq!fbgg&F )1a&1a&)40U6#$&FC(	)r)   c                      t        j                  ddgddggt         j                        } t        D ]F  }t        j                  ddgddgg|      }t	        j
                  || g d      }t        |g d       H y Nr
   r   r   rH   r      r   r   )r  r9   g      @)r   r   r"  r   r   r   r   r  s       r'   
test_sum12r(  C  sk    XX1v1v&0F ;1a&1a&)40U6C!&/:;r)   c                  T   t        j                  ddgddggt         j                        } t        D ]u  }t        j                  ddgddgg|      }t	        j
                  || g d      }t	        j                  || g d      }||k(  j                         sJ t        |g d       w y r%  )	r   r   r"  r   r   r   
sum_labelsallr   )r   r   r  
output_sumoutput_labelss        r'   test_sum_labelsr.  K  s    XX1v1v&0F B1a&1a&)40[[vYG
**&	3 m+00222!-ABr)   c                      t        j                  ddgt              } t        D ]A  }t        j                  ddgddgg|      }t	        j
                  ||       }t        |d       C y r  )r   r   r  r   r   meanr   r  s       r'   test_mean01r1  W  s\    XXq!fd#F )1a&1a&)40eF3FC()r)   c                      t        j                  ddgt              } t        j                  ddgddggt              }t        j                  ||       }t        |d       y Nr
   r   r   rH   r   r  r   )r   r   r  r   r0  r   r  s      r'   test_mean02r4  _  sM    XXq!fd#FHHq!fq!f%t,E\\%/F$r)   c                      t        j                  ddg      } t        D ]B  }t        j                  ddgddgg|      }t        j                  || d      }t        |d       D y )Nr
   r   rH   r   r   r	  )r   r   r   r   r0  r   r  s       r'   test_mean03r6  f  s_    XXq!fF )1a&1a&)40eF$%'FC(	)r)   c                     t        j                  ddgddggt         j                        } t        j                  d      5  t        D ]l  }t        j                  ddgddgg|      }t        j                  || g d      }t        |d	dg   d
dg       t        t        j                  |d                n 	 d d d        y # 1 sw Y   y xY w)Nr
   r   r   ignorer+  rH   r&  r   r   r        @)
r   r   r"  errstater   r   r0  r   r   isnanr  s       r'   test_mean04r=  o  s    XX1v1v&0F		" ) 	)DHHq!fq!f-t4E\\%(13F%faVnsCjABHHVAY'(	)) ) )s   A6CC
c                      t        j                  ddgt              } t        D ]A  }t        j                  ddgddgg|      }t	        j
                  ||       }t        |d       C y r3  )r   r   r  r   r   minimumr   r  s       r'   test_minimum01r@  z  \    XXq!fd#F )1a&1a&)40v6FC()r)   c                      t        j                  ddgt              } t        j                  ddgddggt              }t        j                  ||       }t        |d       y Nr
   r   r   r   r  r   )r   r   r  r   r?  r   r  s      r'   test_minimum02rD    M    XXq!fd#FHHq!fq!f%t,E__U62F$r)   c                      t        j                  ddg      } t        D ]B  }t        j                  ddgddgg|      }t        j                  || d      }t        |d       D y )Nr
   r   rH   r   r   r  )r   r   r   r   r?  r   r  s       r'   test_minimum03rG    _    XXq!fF )1a&1a&)40v'(*FC(	)r)   c                      t        j                  ddgddgg      } t        D ]F  }t        j                  ddgddgg|      }t        j                  || g d      }t        |g d       H y )Nr
   r   rH   r   r   rH   r'  r   )r  r  r9   )r   r   r   r   r?  r   r  s       r'   test_minimum04rK    h    XX1v1v&'F ;1a&1a&)40v'02!&/:	;r)   c                      t        j                  ddgt              } t        D ]A  }t        j                  ddgddgg|      }t	        j
                  ||       }t        |d       C y )Nr
   r   r   rH   r   r  r	  )r   r   r  r   r   maximumr   r  s       r'   test_maximum01rO    rA  r)   c                      t        j                  ddgt              } t        j                  ddgddggt              }t        j                  ||       }t        |d       y rC  )r   r   r  r   rN  r   r  s      r'   test_maximum02rQ    rE  r)   c                      t        j                  ddg      } t        D ]B  }t        j                  ddgddgg|      }t        j                  || d      }t        |d       D y )Nr
   r   rH   r   r   r  )r   r   r   r   rN  r   r  s       r'   test_maximum03rS    rH  r)   c                      t        j                  ddgddgg      } t        D ]F  }t        j                  ddgddgg|      }t        j                  || g d      }t        |g d       H y )Nr
   r   rH   r   rJ  r   )r	  r  r9   )r   r   r   r   rN  r   r  s       r'   test_maximum04rU    rL  r)   c                  p    t        j                  g d      } t        t        j                  |       d       y )N)r   r   )r   r   r   r   rN  )r#   s    r'   test_maximum05rY    s#    
A#R(r)   c                      t        j                  g dg dg dg dg      } t        j                  g dg dg dg dg      }t        j                  | |g d	      }t	        |g d
       y )Nr
   r   r   r
   rf   rH   r   r   r   r   r   r   r,   rH   r   r   r
   r
   r   r   r   r   r   r   rH   rH   r   r   )r
   r   rH   r   )r:  r  r!  )r   r   r   medianr   r   r   r   s      r'   test_median01rd    s^    
,  	!A XX|###% &F ^^AfI>Ffo6r)   c                      t        j                  g dg dg dg dg      } t        j                  |       }t	        |d       y )Nr[  r\  r]  r^  r   r   r   r   rb  r   r   r   s     r'   test_median02rh    s:    
,  	!A ^^AF$r)   c                      t        j                  g dg dg dg dg      } t        j                  g dg dg dg dg      }t        j                  | |      }t	        |d	       y )
Nr[  r\  r]  r^  r_  r`  ra  r  r	  rf  rc  s      r'   test_median03rj    s\    
,  	!A XX|###% &F ^^Af-F$r)   c                      t        j                  ddgt              } t        j                  | t        j
                  d      dg      }t        |dg       y )Nr
   r   r   r   r   )r   asarrayr  r   rb  rU   r   rg  s     r'   test_median_gh12836_boolrn    s>    


Aq6&A^^AbggdmA3?Ffse,r)   c                      t        j                  ddgt         j                        } t        j                  | t        j
                  d      dg      }t        |dg       y )NA   F   r   rl  r
   r   g     P@)r   rm  r"  r   rb  rU   r   rg  s     r'   test_median_no_int_overflowrr    sB    


B8277+A^^AbggdmA3?Fftf-r)   c                  n   t        j                  d      5  t        D ]t  } t        j                  g |       }t	               5 }|j                  t        d       t        j                  |      }d d d        t        t        j                               v 	 d d d        y # 1 sw Y   3xY w# 1 sw Y   y xY wNr8  r9  zMean of empty slice)r   r;  r   r   r   filterRuntimeWarningr   variancer   r<  r   r  supr   s       r'   test_variance01rz    s    		" & 	&DHHR&E"$ 1

>+@A ))%01 BHHV$%	&& &1 1& &#   *B+,B-(B+B($B++B4c                      t         D ]:  } t        j                  dg|       }t        j                  |      }t        |d       < y Nr
   r9   r   r   r   r   rw  r   r  s      r'   test_variance02r    s=     )!d#!!%(FC()r)   c                      t         D ];  } t        j                  ddg|       }t        j                  |      }t        |d       = y Nr
   rH   r   r~  r  s      r'   test_variance03r    s?     )!Q&!!%(FC()r)   c                  ~    t        j                  ddgt              } t        j                  |       }t        |d       y )Nr
   r   g      ?)r   r   r  r   rw  r   r  r   s     r'   test_variance04r    s0    HHaVT"Ee$F%r)   c                      g d} t         D ]=  }t        j                  g d|      }t        j                  || d      }t        |d       ? y N)r   r   rH   )r
   rH   r'  r   r   r~  r  s       r'   test_variance05r    sD    F )D)!!%3FC()r)   c                      g d} t        j                  d      5  t        D ]A  }t        j                  g d|      }t	        j
                  || g d      }t        |g d       C 	 d d d        y # 1 sw Y   y xY wN)r   r   rH   rH   r   r8  r9  )r
   rH   r'  r   r'  )r   rH   r   )r   r   r9   )r   r;  r   r   r   rw  r   r  s       r'   test_variance06r    sf    F		" ? 	?DHH-t4E%%eVY?F%fo>	?? ? ?   AA00A9c                  n   t        j                  d      5  t        D ]t  } t        j                  g |       }t	               5 }|j                  t        d       t        j                  |      }d d d        t        t        j                               v 	 d d d        y # 1 sw Y   3xY w# 1 sw Y   y xY wrt  )r   r;  r   r   r   ru  rv  r   standard_deviationr   r<  rx  s       r'   test_standard_deviation01r  "  s    		" & 	&DHHR&E"$ ;

>+@A 33E:; BHHV$%	&& &; ;& &r{  c                      t         D ]:  } t        j                  dg|       }t        j                  |      }t        |d       < y r}  r   r   r   r   r  r   r  s      r'   test_standard_deviation02r  ,  s=     )!d#++E2FC()r)   c                      t         D ]N  } t        j                  ddg|       }t        j                  |      }t        |t        j                  d             P y r  )r   r   r   r   r  r   sqrtr  s      r'   test_standard_deviation03r  3  sG     2!Q&++E2FBGGCL12r)   c                  ~    t        j                  ddgt              } t        j                  |       }t        |d       y )Nr
   r   r1   )r   r   r  r   r  r   r  s     r'   test_standard_deviation04r  :  s0    HHaVT"E''.F$r)   c                      g d} t         D ]=  }t        j                  g d|      }t        j                  || d      }t        |d       ? y r  r  r  s       r'   test_standard_deviation05r  @  sD    F )D)++E61=FC()r)   c                      g d} t        j                  d      5  t        D ]A  }t        j                  g d|      }t	        j
                  || g d      }t        |g d       C 	 d d d        y # 1 sw Y   y xY wr  r   r;  r   r   r   r  r   r  s       r'   test_standard_deviation06r  H  sf    F		" ? 	?DHH-t4E//vyIF%fo>	?? ? ?r  c                      dg} t        j                  d      5  t        D ]>  }t        j                  dg|      }t	        j
                  || dg      }t        |dg       @ 	 d d d        y # 1 sw Y   y xY w)Nr
   r8  r9  gl `yr   r  r  s       r'   test_standard_deviation07r  Q  sm    SF		" 3 	3DHHk]D1E//vsCF%fqc2	33 3 3s   AA,,A5c                      t        j                  ddgt              } t        D ]A  }t        j                  ddgddgg|      }t	        j
                  ||       }t        |d       C y )Nr
   r   r   rH   r   r  r   r   )r   r   r  r   r   minimum_positionr   r  s       r'   test_minimum_position01r  Z  s^    XXq!fd#F %1a&1a&)40))%?VV$%r)   c                      t         D ]B  } t        j                  g dg dg dg|       }t        j                  |      }t        |d       D y Nrf   r   r   rf   rH   r   r   r   r
   rf   r
   r
   r
   r   r   r   r   r   r  r   r  s      r'   test_minimum_position02r  b  K     %,&&()-/ ))%0VV$%r)   c                      t        j                  g dg dg dgt              } t        j                  |       }t        |d       y r  r   r   r  r   r  r   r  s     r'   test_minimum_position03r  k  <    HHl""$%)+E %%e,F r)   c                      t        j                  g dg dg dgt              } t        j                  |       }t        |d       y )Nr  )rH   r   r
   r   r  r  r  r  s     r'   test_minimum_position04r  s  r  r)   c                      g d} t         D ]C  }t        j                  g dg dg dg|      }t        j                  ||       }t        |d       E y )Nr
   r   r   r   r  r  )r
   rf   r   rH   )r   r   r  r  s       r'   test_minimum_position05r  {  R    F %,&&()-/ ))%8VV$%r)   c                      g d} t         D ]D  }t        j                  g dg dg dg|      }t        j                  || d      }t        |d       F y )Nr
   r   rH   r   r  r  r  r   r   r
   r  r  s       r'   test_minimum_position06r    T    F %,&&()-/ ))%;VV$%r)   c                      g d} t         D ]X  }t        j                  g dg dg dg|      }t        j                  || ddg      }t        |d   d       t        |d	   d
       Z y )Nr  r  r  r  r   rH   r   r  r
   r  r  r  s       r'   test_minimum_position07r    m    F (,&&()-/ ))%+,a&2VAY'VAY'(r)   c                      t        j                  ddgt              } t        D ]A  }t        j                  ddgddgg|      }t	        j
                  ||       }t        |d       C y )Nr
   r   r   rH   r   r  )r
   r   )r   r   r  r   r   maximum_positionr   r  s       r'   test_maximum_position01r    sa    XXq!fd#F %1a&1a&)40))%179VV$	%r)   c                      t         D ]B  } t        j                  g dg dg dg|       }t        j                  |      }t        |d       D y )Nr  rH   r   r'  r   r  r  r   r   r   r   r  r   r  s      r'   test_maximum_position02r    r  r)   c                      t        j                  g dg dg dgt              } t        j                  |       }t        |d       y )Nr  r  r  r  )r   r   r  r   r  r   r  s     r'   test_maximum_position03r    r  r)   c                      g d} t         D ]C  }t        j                  g dg dg dg|      }t        j                  ||       }t        |d       E y )Nr  r  r  r  r
   r
   r  r  s       r'   test_maximum_position04r    r  r)   c                      g d} t         D ]D  }t        j                  g dg dg dg|      }t        j                  || d      }t        |d       F y )Nr  r  r  r  r
   r  r  r  s       r'   test_maximum_position05r    r  r)   c                      g d} t         D ]X  }t        j                  g dg dg dg|      }t        j                  || ddg      }t        |d   d       t        |d   d	       Z y )
Nr  r  r  r  r
   r   r   r  r  r  r  s       r'   test_maximum_position06r    r  r)   c                      t        j                  g d      } t        D ]X  }t        j                  g dg dg dg|      }t        j                  || ddg      }t        |d   d       t        |d	   d
       Z y )N)r   r:  r9         @r  r  r  r   r  r   r  r
   )r   rH   )r   r   r   r   r  r   r  s       r'   test_maximum_position07r    sw    XX*+F (,&&()-/ ))%+.*6VAY'VAY'(r)   c                     t        j                  ddgt              } t        D ]  }t        j                  ddgddgg|      }t	        j
                  ||       }t	        j                  ||       }t	        j                  ||       }t	        j                  ||       }t	        j                  ||       }t        |||||f        y )Nr
   r   r   rH   r   r  )r   r   r  r   r   extremar?  rN  r  r  r   r   r   r  output1output2output3output4output5s           r'   test_extrema01r    s    XXq!fd#F 	D1a&1a&)40//%7//%7//%7**528:**528:Ww'BC	Dr)   c                     t        j                  ddg      } t        D ]  }t        j                  ddgddgg|      }t        j                  || d      }t        j
                  || d      }t        j                  || d      }t        j                  || d      }t        j                  || d      }t        |||||f        y )Nr
   r   rH   r   r   )
r   r   r   r   r  r?  rN  r  r  r   r  s           r'   test_extrema02r    s    XXq!fF D1a&1a&)40//%()+//%()+//%()+**528C**528CWw'BCDr)   c                     t        j                  ddgddgg      } t        D ]  }t        j                  ddgddgg|      }t        j                  || g d      }t        j
                  || g d      }t        j                  || g d      }t        j                  || g d      }t        j                  || g d      }t        |d   |       t        |d   |       t        |d   |       t        |d   |        y )Nr
   r   rH   r   rJ  r   r   )
r   r   r   r   r  r?  rN  r  r  r   r  s           r'   test_extrema03r    s    XX1v1v&'F 71a&1a&)40//%(13//%(13//%(13**528	K**528	K!'!*g6!'!*g6!'!*g6!'!*g67r)   c                     g d} t         D ]  }t        j                  g dg dg dg|      }t        j                  || ddg      }t        j
                  || ddg      }t        j                  || ddg      }t        j                  || ddg      }t        j                  || ddg      }t        |d   |       t        |d   |       t        |d   |       t        |d   |        y )	Nr  r  r  r  r
   r   r   rH   )
r   r   r   r   r  r?  rN  r  r  r   r  s           r'   test_extrema04r    s    F 7,&&()-/ //%!Q8//%!Q8//%!Q8**5&,-q63**5&,-q63!'!*g6!'!*g6!'!*g6!'!*g67r)   c                      ddg} t         D ]?  }t        j                  ddgddgg|      }t        j                  |      }t        ||        A y )Nr9   r
   r   r   r   r   r   center_of_massr   r   r   r  r   s       r'   test_center_of_mass01r  (  Q    SzH 41a&1a&)40''.!&(34r)   c                      ddg} t         D ]?  }t        j                  ddgddgg|      }t        j                  |      }t        ||        A y rc   r  r  s       r'   test_center_of_mass02r  0  Q    1vH 41a&1a&)40''.!&(34r)   c                      ddg} t         D ]?  }t        j                  ddgddgg|      }t        j                  |      }t        ||        A y )Nr   r
   r  r  s       r'   test_center_of_mass03r  8  r  r)   c                      ddg} t         D ]?  }t        j                  ddgddgg|      }t        j                  |      }t        ||        A y rc   r  r  s       r'   test_center_of_mass04r  @  r  r)   c                      ddg} t         D ]?  }t        j                  ddgddgg|      }t        j                  |      }t        ||        A y )Nr1   r
   r  r  s       r'   test_center_of_mass05r  H  r  r)   c                      ddg} t        j                  ddgddggt              }t        j                  |      }t        ||        y )Nr1   r
   r   rH   r   r   r  r   r  r   r   r  r   s      r'   test_center_of_mass06r  P  sB    SzHHHq!fq!f%t,E##E*Ffh/r)   c                      ddg} ddg}t        j                  ddgddggt              }t        j                  ||       }t        ||       y )Nr
   r   r1   r9   r   rH   r  r   r   r  r   s       r'   test_center_of_mass07r  W  sM    VFSzHHHq!fq!f%t,E##E62Ffh/r)   c                      ddg} ddg}t        j                  ddgddggt              }t        j                  || d      }t        ||       y )Nr
   r   r1   r   rf   rH   r  r  s       r'   test_center_of_mass08r  _  sO    VFSzHHHq!fq!f%t,E##E615Ffh/r)   c                      ddg} ddg}t        j                  ddgddggt              }t        j                  || ddg      }t        ||       y )Nr
   r   )r1   r9   )r1   r   r  r  s       r'   test_center_of_mass09r  g  sT    VFJ'HHHq!fq!f%t,E##E6Aq6:Ffh/r)   c                      t        j                  d      } t        j                  d      }t        j                  |ddd      }t        ||        y )Nr   r   )r   rU   aranger   	histogramr   r  s      r'   test_histogram01r  o  s<    wwr{HIIbMEuaR0Ffh/r)   c                      g d} g d}t        j                  g d      }t        j                  |ddd| d      }t	        ||       y )N)r
   r
   r
   r
   r   r   r   r   )r   r   r   r
   r
   )r
   r
   rH   r   rH   rH   rH   rH   r   r   rf   r
   r   r   r   r  r   r  s       r'   test_histogram02r   v  s?    %FHHH-.EuaAvq9Ffh/r)   c                      g d} g d}g d}t        j                  g d      }t        j                  |ddd| d      }t	        |d   |       t	        |d	   |       y )
N)r
   r   r
   r
   r   r   r   r   )r   r
   r   r
   r
   )r   r   r   rH   r   )r
   r
   rH   r   rH   rf   rH   rH   r   r   rf   r  r
   r  )r   	expected1	expected2r  r   s        r'   test_histogram03r  ~  sV    %FIIHH-.EuaAvv>FfQi3fQi3r)   c                     t        j                  g dg dg dg      } t        j                  g dg dg dg      }t        j                  | |ddg      }t	        |d	d
g       t        j
                  | |ddg      }t	        |ddg       t        j                  | |ddg      }t        |t        j                  ddg             t        j                  | |ddg      }t	        |d	d
g       t        j                  | |ddg      }t	        |ddg       t        j                  | |ddg      }t	        |ddg       y )N)rf   r   r   r   r   )r'  r,   r   r   r   )r   r   r   rH   rf   )r
   r
   r   r   r   )r   r   r   r   r   r
   r   r   rD   r  r:  r   rf   rH   r,   )r   r   r   r0  r   rw  r  r   r  rb  r?  rN  )r   lblr0  varstdmedminmaxs           r'   test_stat_funcs_2dr    s   
/?ODEA
((O_oF
GC<<#aV4Dtc3Z(


1SA
7CsS#J'

$
$Qs1a&
ACc277C:#67
..3q!f
5CsS#J'
//!C1v
6CsQF#
//!C1v
6CsQF#r)   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestWatershedIftc                    t        j                  g dg dg dg dg dg dg dg dgt         j                        }t        j                  g dg dg dg dg dg dg dg dgt         j                        }t	        j
                  ||g dg dg dg      }g dg d	g d	g d	g d	g d	g dg dg}t        ||       y )
N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
   	structurer   r   r   r   r   r   r   r   r
   r
   r
   r
   r
   r   r   r   uint8r"  r   watershed_iftr   r"   rX   markersrY   r   s        r'   test_watershed_ift01z%TestWatershedIft.test_watershed_ift01  s    xx........0 24; ((211111113 57GG= ##D'i>G>G>I J 1+++++002 	"#x0r)   c                 l   t        j                  g dg dg dg dg dg dg dg dgt         j                        }t        j                  g dg dg dg dg dg dg dg dgt         j                        }t	        j
                  ||      }g dg dg dg dg dg dg dg dg}t        ||       y )	Nr  r  r  r  r  r  )r   r   r
   r
   r
   r   r   r  r  r  s        r'   test_watershed_ift02z%TestWatershedIft.test_watershed_ift02  s    xx........0 24; ((211111113 57GG= ##D'20-+++-002 	"#x0r)   c           
      Z   t        j                  g dg dg dg dg dg dg dgt         j                        }t        j                  g dg dg dg dg dg dg dgt         j                        }t	        j
                  ||      }g dg dg dg dg dg dg dg}t        ||       y )	Nr  r  r   r
   r   r
   r   r
   r   r   r   r   r   rH   r   r   r   r   r   r   r   r   r   r  )r   r   r   r   rH   r   r   r   r   r   rH   rH   rH   r   r  r  s        r'   test_watershed_ift03z%TestWatershedIft.test_watershed_ift03  s    xx.......0 24; ((11111124 68WW> ##D'20.+++.02 	"#x0r)   c           
      p   t        j                  g dg dg dg dg dg dg dgt         j                        }t        j                  g dg dg dg dg dg dg dgt         j                        }t	        j
                  ||g dg dg dg      }g dg d	g d	g d	g d	g d	g dg}t        ||       y )
Nr  r  r#  r$  r%  r  r  r  r&  r  r  s        r'   test_watershed_ift04z%TestWatershedIft.test_watershed_ift04      xx.......0 24; ((11111124 77$ ##D'/8/8/8/:; 1+++++02 	"#x0r)   c           
      p   t        j                  g dg dg dg dg dg dg dgt         j                        }t        j                  g dg dg dg dg dg dg dgt         j                        }t	        j
                  ||g dg dg dg      }g dg d	g d	g d	g d	g d	g dg}t        ||       y )
Nr  r  r#  )r   r   rH   r   r   r   r   r%  r  r  r  )r   rH   rH   r   r   r   r   r  r  s        r'   test_watershed_ift05z%TestWatershedIft.test_watershed_ift05  r*  r)   c           	      ^   t        j                  g dg dg dg dg dg dgt         j                        }t        j                  g dg dg dg dg dg dgt         j                        }t	        j
                  ||g dg dg dg      }g dg dg dg dg d	g d	g}t        ||       y )
Nr  r  r  r  r  r  r  r  r  r  r  s        r'   test_watershed_ift06z%TestWatershedIft.test_watershed_ift06/  s    xx......0
 24; ((2111113
 57GG= ##D'/8/8/8/:; ,+++002 	"#x0r)   c           	      >   d}t        j                  |t         j                        }|j                         }t        j                  g dg dg dg dg dg dgt         j                        |d<   t        j                  g dg dg dg dg dg dgt         j
                        }t        j                  |t         j                        }|j                         }t        j                  ||g d	g d	g d	g|
       g dg dg dg dg dg dg}t        ||       y )N)r   r   r   r  r  r  .r  r  r  )r  r   r  r  )
r   r^   r  	transposer   r"  int16r   r  r   )r"   r   rX   r  rY   r   s         r'   test_watershed_ift07z%TestWatershedIft.test_watershed_ift07H  s    xxRXX.~~HH3333335
 79hh@S	 ((2111113
 57GG= hhuBHH-mmodG)2)2)2)4 &)		*
 ,+++002 	"#x0r)   c                     t        j                  ddgddggt         j                        }t        j                  ddgddggt         j                        }t	        j
                  ||      }ddgddgg}t        ||       y )N   r   r
   )r   r   uint16r"  r   r  r   r  s        r'   test_watershed_ift08z%TestWatershedIft.test_watershed_ift08g  s    xx#qQ!"$))-((QFF$%'WW.##D'2FF!#x0r)   N)r<   r=   r>   r  r!  r'  r)  r,  r.  r2  r6  r@   r)   r'   r  r    s*    1<18121:1:121>	1r)   r  )os.pathr   numpyr   numpy.testingr   r   r   r   r   r   pytestr	   r   scipy.ndimager    r   r   rB   r[   r_   ra   rd   rg   rk   rn   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.  r1  r4  r6  r=  r@  rD  rG  rK  rO  rQ  rS  rU  rY  rd  rh  rj  rn  rr  rz  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)   r'   <module>r=     sg    . . +  B4 B4J#4 #4L""$&&" !:&5 ...@@($	)""))*""")%);	B)%)))%);)%);)
7%
%-.&))&)?&)2%)?3%%!!%%	(%%!%%	(
(DD"7(7&444440000004$.P1 P1r)   