
    doi                     F   S SK r S SKr S SKrS SKrS SKJrJrJrJ	r	J
r
Jr  S SKrS SKJr  S SKJr  SSKJr  \R&                  R(                  r\ R*                  S:H  =(       a    \R,                  S:  r\" SS	S
9 " S S5      5       r\" SS	S
9 " S S5      5       r\" \R4                  5      S 5       r\" \R4                  5      S 5       r\" \R4                  5      S 5       r\" \R4                  5      S 5       r\" \R4                  5      S 5       r\" \R4                  5      S 5       r \" \R4                  5      S 5       r!\" \R4                  5      S 5       r"\" \R4                  5      S 5       r#\" \R4                  5      S 5       r$\" \R4                  5      S 5       r%\" SSS
9\" \R4                  5      S 5       5       r&\" \R4                  5      S 5       r'\" \R4                  5      S 5       r(\" SS/SS 9\" \R4                  5      S! 5       5       r)\" SS/SS 9\" \R4                  5      S" 5       5       r*\" SS#S
9\" \R4                  5      S$ 5       5       r+\" \R4                  5      S% 5       r,\" \R4                  \RZ                  5      S& 5       r.\" \R4                  5      S' 5       r/\" \R4                  \RZ                  5       " S( S)5      5       r0\" \Rb                  5      S* 5       r2\" \Rb                  5      S+ 5       r3\" \Rb                  5      S, 5       r4\" \Rj                  5      S- 5       r6\" \Rj                  5      S. 5       r7\" \Rj                  5      S/ 5       r8\" \Rj                  5      S0 5       r9\" \Rj                  5      S1 5       r:\" \Rj                  5      S2 5       r;\" \Rj                  5      S3 5       r<\" \Rj                  5      S4 5       r=\" \Rj                  5      S5 5       r>\" \Rj                  5      S6 5       r?\" \Rj                  5      S7 5       r@\" \Rj                  5      S8 5       rA\" \Rj                  5      S9 5       rB\" \R                  5      S: 5       rD\" \R                  5      S; 5       rE\" \R                  5      S< 5       rF\" \R                  5      S= 5       rG\" \R                  5      S> 5       rI\" \R                  5      S? 5       rJ\" \R                  5      S@ 5       rK\" \R                  5      SA 5       rL\" \R                  5      SB 5       rN\" \R                  5      SC 5       rO\" \R                  5      SD 5       rP\" \R                  5      SE 5       rQ\" \R                  5      SF 5       rR\" \R                  5      SG 5       rT\" \R                  5      SH 5       rU\" \R                  5      SI 5       rV\" \R                  5      SJ 5       rW\" \R                  5      SK 5       rX\" \R                  5      SL 5       rZ\" \R                  5      SM 5       r[\" \R                  5      SN 5       r\\" \R                  5      SO 5       r]\" \R                  5      SP 5       r^\" \R                  5      SQ 5       r_\" \R                  5      SR 5       ra\" \R                  5      SS 5       rb\" \R                  5      ST 5       rc\" \R                  5      SU 5       rd\" \R                  5      SV 5       re\" \R                  5      SW 5       rf\" \R                  5      SX 5       rg\" \R                  5      SY 5       ri\" \R                  5      SZ 5       rj\" \R                  5      S[ 5       rk\" \R                  5      S\ 5       rl\" \R                  5      S] 5       rm\" \R                  5      S^ 5       rn\" \R                  5      S_ 5       ro\" \R                  5      S` 5       rq\" \R                  5      Sa 5       rr\" \R                  5      Sb 5       rs\" \R                  5      Sc 5       rt\" \R                  5      Sd 5       ru\" \R                  5      Se 5       rv\" \R                  5      Sf 5       rw\" \R                  \R                  \R                  \R                  \R                  5      Sg 5       ry\" \R                  \R                  \R                  \R                  \R                  5      Sh 5       rz\" \R                  \R                  \R                  \R                  \R                  5      Si 5       r{\" \R                  \R                  \R                  \R                  \R                  5      Sj 5       r|\" \R                  5      Sk 5       r~\" \R                  5      Sl 5       r\" \R                  5      Sm 5       r\" \R                  5      Sn 5       r\" \R                  5      So 5       r\" \R                  5      Sp 5       r\" \R                  5      Sq 5       r\" \R                  5      Sr 5       r\" \R                  5      Ss 5       r\" \GR                  5      St 5       r\" \GR                  5      Su 5       r\" SSvS
9\" \GR                  5      Sw 5       5       r\" \R                  \R                  \R                  \R                  \R                  \R                  5      Sx 5       r\" SSySz9\" \GR                  5       " S{ S|5      5       5       r\" SS}9\R&                  GR                  S~\GR                  \GR                   /5      \" \Rb                  5      S 5       5       5       rg)    N)is_torchxp_assert_equalxp_assert_closeassert_array_almost_equalassert_almost_equalmake_xp_test_case)raises   )typesnt2Tz test internal numpy-only helpersnp_onlyreasonc                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
Test_measurements_stats   zndimage._measurements._stats() is a utility used by other functions.

Since internal ndimage/_measurements.py code is NumPy-only,
so is this this test class.
c           	         / SQn/ SQnSS/nS H  n[         R                  " U5      R                  U5      n[         R                  " U5      R                  U5      n[        R                  R                  X#US9u  pg[        (       a  S[         R                  0O0 n[        U[         R                  " SS/40 UD65        [        U[         R                  " S	S
/5      5        M     g )Nr   r
         r   r   r
   r
   r   r
   )   )r   r   labelsindexdtyper         ?       @
nparrayreshapendimage_measurements_statsIS_WINDOWS_AND_NP1int64r   asarray	selfxpxr   r   shpcountssums	dtype_args	            a/var/www/html/land-ocr/venv/lib/python3.13/site-packages/scipy/ndimage/tests/test_measurements.pytest_aTest_measurements_stats.test_a#   s    A!C##C(AXXf%--c2F"0077 8 /LF 0B/A"((+rIFBJJ1v$C$CDD"**c3Z"89 "    c           	         / SQn/ SQnSS/nS H  n[         R                  " U5      R                  U5      n[         R                  " U5      R                  U5      n[        R                  R                  X#US9u  pg[        (       a  S[         R                  0O0 n[        U[         R                  " SS/40 UD65        [        U[         R                  " S	S
/5      5        M     g )Nr   r   r   	   r9   r   r9   r   r   r   r   r   r    r!   r+   s	            r3   test_bTest_measurements_stats.test_b1   s     A!C##C(AXXf%--c2F"0077 8 /LF 0B/A"((+rIFBJJ1v$C$CDD"**c3Z"89 "r6   c           	         / SQn/ SQnSS/nS H  n[         R                  " U5      R                  U5      n[         R                  " U5      R                  U5      n[        R                  R                  X#USS9u  pgn[        (       a  S[         R                  0O0 n	[        U[         R                  " S	S	/40 U	D65        [        U[         R                  " S
S/5      5        [        U[         R                  " SS/5      5        M     g )Nr   r   r   r
   r   Tr   r   centeredr   r   r   r          ?r!   
r,   r-   r.   r   r   r/   r0   r1   centersr2   s
             r3   test_a_centered'Test_measurements_stats.test_a_centeredA       A!C##C(AXXf%--c2F$+$9$9$@$@ %A %>!F' 0B/A"((+rIFBJJ1v$C$CDD"**c3Z"89GRZZc
%;< "r6   c           	         / SQn/ SQnSS/nS H  n[         R                  " U5      R                  U5      n[         R                  " U5      R                  U5      n[        R                  R                  X#USS9u  pgn[        (       a  S[         R                  0O0 n	[        U[         R                  " S	S	/40 U	D65        [        U[         R                  " S
S/5      5        [        U[         R                  " SS/5      5        M     g )Nr   r8   r   r9   r   Tr=   r   r   r   r    r?   r!   r@   s
             r3   test_b_centered'Test_measurements_stats.test_b_centeredP   rD   r6   c           	         / SQn/ SQnSS/nS H  n[         R                  " U5      R                  U5      n[         R                  " U5      R                  U5      n[        R                  R                  X#USS9u  pgn[        (       a  S[         R                  0O0 n	[        U[         R                  " S	S	/40 U	D65        [        U[         R                  " S
S/5      5        [        U[         R                  " SS/5      5        M     g )Nr   )        rI         "@rJ   rI   rJ   r   Tr=   r   r   r   r    r?   r!   r@   s
             r3   test_nonint_labels*Test_measurements_stats.test_nonint_labels_   s    %c
!C##C(AXXf%--c2F$+$9$9$@$@ %A %>!F' 0B/A"((+rIFBJJ1v$C$CDD"**c3Z"89GRZZc
%;< "r6    N)__name__
__module____qualname____firstlineno____doc__r4   r:   rB   rF   rK   __static_attributes__rM   r6   r3   r   r      s     
:: ===r6   r   c                       \ rS rSrSrS rSrg)Test_measurements_selecto   zEndimage._measurements._select() is a utility used by other functions.c           	      ~   / SQn/ SQSS/4/ SQSS/4/ SQSS	/4/nU GH  u  pE[         R                  R                  X$US
9n[        U5      S:X  d   e[         R                  R                  X$USS9n[        U5      S:X  d   e[	        US   SS/5        [         R                  R                  X$USS9n[        U5      S:X  d   e[	        US   SS/5        [         R                  R                  X$USSS9n[        U5      S:X  d   e[	        US   SS/5        [	        US   SS/5        US   R
                  R                  S:X  d   e[         R                  R                  X$USSS9n[        U5      S:X  d   e[	        US   SS/5        [	        US   SS/5        US   R
                  R                  S:X  a  GM   e   g )N)r   r
   r   r   r   r   r
   r8   r9   )rI   rI         @rX   rI   rX   r   T)r   r   find_maxr   )r   r   find_minr   )r   r   rZ   find_min_positions   i)r   r   rY   find_max_positions)r%   r&   _selectlenr   r   kind)r,   r-   r.   casesr   r   results          r3   
test_basic#Test_measurements_select.test_basics   s   Aq6"Aq6"!C:.

 #MF**22 3 /Fv;!###**22 3 >Fv;!###F1I1v.**22 3 >Fv;!###F1I1v.**22#' 3 )F v;!###F1I1v.F1I1v.!9??''3...**22#' 3 )F v;!###F1I1v.F1I1v.!9??''3...3 #r6   rM   N)rN   rO   rP   rQ   rR   rd   rS   rM   r6   r3   rU   rU   o   s
    O /r6   rU   c                 v    U R                  S5      n[        R                  " U5      u  p#US:X  d   eUS:X  d   eg )NrM   r
   )onesr%   labelr-   dataoutns       r3   test_label01rm      s5    772;D]]4 FC!8O86M6r6   c                 v    U R                  S5      n[        R                  " U5      u  p#US:X  d   eUS:X  d   eg )NrM   r   )zerosr%   rh   ri   s       r3   test_label02rp      s5    88B<D]]4 FC!8O86M6r6   c                     U R                  S/5      n[        R                  " U5      u  p#[        X R	                  S/5      5        US:X  d   eg )Nr
   rg   r%   rh   r   r*   ri   s       r3   test_label03rs      s>    77A3<D]]4 FCc::qc?36M6r6   c                     U R                  S/5      n[        R                  " U5      u  p#[        X R	                  S/5      5        US:X  d   eg )Nr
   r   )ro   r%   rh   r   r*   ri   s       r3   test_label04ru      s>    88QC=D]]4 FCc::qc?36M6r6   c                     U R                  S/5      n[        R                  " U5      u  p#[        X R	                  / SQ5      5        US:X  d   eg )N   )r
   r
   r
   r
   r
   r
   rr   ri   s       r3   test_label05rx      s=    77A3<D]]4 FCc::o#>?6M6r6   c                     U R                  / SQ5      n[        R                  " U5      u  p#[        X R                  / SQ5      5        US:X  d   eg )N)r
   r   r
   r
   r   r
   r
   r   r   r   r   r\   r\   r*   r%   rh   r   ri   s       r3   test_label06r|      s>    ::()D]]4 FCc::.@#AB6M6r6   c                     U R                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        R                  " U5      u  p#[        X R                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      5        US:X  d   eg )Nr   r   r   r   r   r   r   r{   ri   s       r3   test_label07r      sp    ::))))))+ ,D ]]4 FCc::%7%7%7%7%7%7%9$: ; 6M6r6   c                     U R                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        R                  " U5      u  p#[        X R                  / SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/5      5        US
:X  d   eg )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   r   r   r   r   r   r   r   r   r{   ri   s       r3   test_label08r      ss    ::))))))+ ,D ]]4 FCc::/A/A/A/A/A/A/C $D E 6M6r6   c                 2   U R                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        R                  " SS5      nU R                  U5      n[        R                  " X5      u  p4[	        X0R                  / SQ/ SQ/ SQ/ S	Q/ S	Q/ S
Q/5      5        US:X  d   eg )Nr   r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r\   r\   r   r\   r*   r%   generate_binary_structurerh   r   r-   rj   structrk   rl   s        r3   test_label09r      s    ::))))))+ ,D ..q!4FZZF]]4(FCc::/A/A/A/A/A/A/C $D E 6M6r6   c           
         U R                  / SQ/ SQ/ SQ/ SQ/5      n[        R                  " SS5      nU R                  U5      n[        R                  " X5      u  p4[	        X0R                  / SQ/ SQ/ SQ/ SQ/5      5        US:X  d   eg )Nr~   )r   r
   r
   r   r
   r   )r   r
   r
   r
   r
   r   r   r
   r   r   s        r3   test_label10r      s    ::))))+ ,D ..q!4FZZF]]4(FCc::/A/A/A/A/C $D E 6M6r6   c           
         [          H  n[        X5      nU R                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/US9n[        R                  " U5      u  pE/ SQ/ SQ/ SQ/ S	Q/ S	Q/ S
Q/nU R                  U5      n[        XF5        US:X  a  M   e   g )Nr   r   r   r   r   r   r   r   r   r   r   r   getattrr*   r%   rh   r   r-   typer   rj   rk   rl   expecteds          r3   test_label11r     s    !zz------/
 7<  = t$&&&&&&( ::h'!#0Avv# r6   z inplace output is numpy-specificc           
         [          H|  n[        X5      nU R                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/US9n[        R                  " X3S9n/ SQ/ SQ/ S	Q/ S
Q/ S
Q/ SQ/nU R                  U5      n[        X55        US:X  a  M|   e   g )Nr   r   r   r   r   r   outputr   r   r   r   r   r   )r-   r   r   rj   rl   r   s         r3   test_label11_inplacer   %  s     !zz------/
 7<  = MM$,&&&&&&( ::h'!$1Avv# r6   c           	         [          Hz  n[        X5      nU R                  / SQ/ SQ/ SQ/ SQ/ SQ/US9n[        R                  " U5      u  pE/ SQ/ SQ/ SQ/ SQ/ SQ/nU R                  U5      n[        XF5        US:X  a  Mz   e   g )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   s          r3   test_label12r   <  s    !zz-----	/ 7<	  =
 t$&&&&&	(
 ::h'!#0Avv r6   c                     [          Ht  n[        X5      nU R                  / SQ/ SQ/ SQ/ SQ/US9n[        R                  " U5      u  pE/ SQ/ SQ/ SQ/ SQ/nU R                  U5      n[        XF5        US:X  a  Mt   e   g )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   r   s          r3   test_label13r   P  s    !zz<<<<> !&	  '
 t$55557 ::h'!#0Avv r6   cupyzoutput=dtype is numpy-specific)r   
exceptionsr   c           	         U R                  S/5      n[         Hi  n[        X5      nU R                  S/US9n[        R
                  " XS9n[        UU R                  UR                  UR                  S95        US:X  a  Mi   e   g )Nrw   r   r   r
   )	rg   r   r   ro   r%   rh   r   shaper   r-   rj   tr   r   rl   s         r3   test_label_output_typedr   c  sv     77A3<D1#U+MM$.!&"$''&,,fll'"K	MAvv r6   c           	         U R                  S/5      n[         Hd  n[        X5      n[        R                  " XS9u  pE[        UU R                  UR                  UR                  S95        UR                  U:X  a  Md   e   g )Nrw   r   r   )rg   r   r   r%   rh   r   r   r   r   s         r3   test_label_output_dtyper   q  sk     77A3<DMM$5	!&"$''&,,fll'"K	M||q    r6   z!in-place output is numpy-specificc                     U R                  S/5      n[         H<  n[        X5      nU R                  S/US9n[	        [
        [        R                  XS9  M>     g )Nrw   
   r   r   )rg   r   r   ro   assert_raises
ValueErrorr%   rh   )r-   rj   r   r   r   s        r3   test_label_output_wrong_sizer   ~  sJ     77A3<D2$e,j'--E r6   c           
         [         R                  " [        R                  R	                  [        R                  R                  [        5      SS5      5      n[         R                  " [        R                  R	                  [        R                  R                  [        5      SS5      5      n[         R                  " [        R                  R	                  [        R                  R                  [        5      SS5      5      nUR                  S5      nUR                  S5      nUR                  S5      nU R                  U5      nU R                  U5      nU R                  U5      nSn[        UR                  S   5       Hh  nXS S 2S S 24   n[        UR                  S   5       H>  nX'S S 2S S 24   n[        [        R                  " Xh5      S   X4S S 2S S 24   SS	9  US
-  nM@     Mj     g )Nrj   zlabel_inputs.txtzlabel_strels.txtzlabel_results.txt)   r   )r   r\   r\   r   Fcheck_dtyper
   )r"   loadtxtospathjoindirname__file__r$   r*   ranger   r   r%   rh   )	r-   rj   strelsresultsrr]   djss	            r3   test_label_structuring_elementsr     sl   ::bggll277??$-/ 0DZZ
!6+=? @Fjj
!6+>@ AG<<
#D^^J'Fooj)G::dDZZFjj!G	A4::a=!AqMv||A'A!QwAGMM!/2Gq!G4DRWXFA ( "r6   c                 J  ^  SU 4S jjn[         R                  " [         R                  5      [         R                  " S5      :w  a^  Sn[         R                  R	                  [         R
                  " U5      5      R                  U5      nT R                  U5      nU" U5        g g )Nc                    > X:  n[        UR                  5      n[        R                  " XD5      nT	R	                  U5      n[        R
                  " UU5      u  pg[        R                  " U5      ng )N)r`   r   r%   r   r*   rh   find_objects)
imgthreshsizemaskrankr   laco_r-   s
            r3   SEtest_ticket_742.<locals>.SE  sZ    |4::224>F#t%'  $r6   r]   )r\     r   )gffffff?r   )r"   r   intprandomrandprodr$   r*   )r-   r   r   as   `   r3   test_ticket_742r     sj    % 
xxBHHSM)IINN2775>*2259JJqM
1 *r6   c                     [         R                  " S5      nSUSS2SS24'   SUSS2SS24'   SUS'   SUS'   SUS'   U R                  U5      n[        R                  " XR                  S	5      5      S   S:X  d   eg)
z/Github issue #3025 - improper merging of labels)<   i@  r
   N  i  )$   r   )#   i  )r   i  )r\   r\   )r"   ro   r*   r%   rh   rg   )r-   r   s     r3   test_gh_issue_3025r     s~     	AAa#gJAagJAgJAgJAgJ


1A==GGFO,Q/1444r6   c                   P    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rSrg)TestFindObjectsi  c                    [         R                  R                  SS5      nUR                  U5      n[        R
                  " US:  5      u  p4UR                  UR                  UR                  4;   d   e[        R                  " U5        g )Nr   r?   )
r"   r   r   r*   r%   rh   r   int32r)   r   )r,   r-   
test_arrayrh   no_featuress        r3   test_label_default_dtype(TestFindObjects.test_label_default_dtype  sg    YY^^B+
ZZ
+
$]]:+;<{{rxx2222U#r6   c                 v    UR                  / UR                  S9n[        R                  " U5      nUS/:X  d   eg )Nr   rM   )rg   r)   r%   r   r,   r-   rj   rk   s       r3   test_find_objects01#TestFindObjects.test_find_objects01  s6    wwrw*""4(rd{{r6   c                 t    UR                  / UR                  S9n[        R                  " U5      nU/ :X  d   eg )Nr   ro   r)   r%   r   r   s       r3   test_find_objects02#TestFindObjects.test_find_objects02  s4    xx"((x+""4(byyr6   c                     UR                  S/UR                  S9n[        R                  " U5      nU[	        SSS 5      4/:X  d   eg )Nr
   r   r   rg   r)   r%   r   slicer   s       r3   test_find_objects03#TestFindObjects.test_find_objects03  G    wws"((w+""4(aD)+,,,,r6   c                 v    UR                  S/UR                  S9n[        R                  " U5      nU/ :X  d   eg )Nr
   r   r   r   s       r3   test_find_objects04#TestFindObjects.test_find_objects04  s6    xx288x,""4(byyr6   c                     UR                  S/UR                  S9n[        R                  " U5      nU[	        SSS 5      4/:X  d   eg )Nrw   r   r   r   r   s       r3   test_find_objects05#TestFindObjects.test_find_objects05  r   r6   c                     UR                  / SQ5      n[        R                  " U5      nU[        SSS 5      4[        SSS 5      4[        SSS 5      4/:X  d   eg )Nrz   r   r
   r   r   rw   r   r*   r%   r   r   r   s       r3   test_find_objects06#TestFindObjects.test_find_objects06  sd    zz,-""4(aD)+aD)+aD)+- - 	- -r6   c           	          UR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        R                  " U5      nU/ :X  d   eg )Nr~   )r*   r%   r   r   s       r3   test_find_objects07#TestFindObjects.test_find_objects07  sE    zz------/ 0 ""4(byyr6   c           
      N   UR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        R                  " U5      nU[        SSS 5      [        SSS 5      4[        SSS 5      [        S	S
S 5      4[        SS
S 5      [        SS	S 5      4[        S
SS 5      [        SS
S 5      4/:X  d   eg )Nr   r   r   r   r   r   r
   r\   r   rw   r   r   r   s       r3   test_find_objects08#TestFindObjects.test_find_objects08  s    zz------/ 0 ""4(aD)5At+<=!!Q-uQ4/@A!!Q-uQ4/@A!!Q-uQ4/@AC C 	C Cr6   c           
         UR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        R                  " U5      nU[        SSS 5      [        SSS 5      4[        SSS 5      [        S	S
S 5      4S [        S
SS 5      [        SS
S 5      4/:X  d   eg )Nr   r   r   r~   r   r   r
   r\   r   rw   r   r   r   s       r3   test_find_objects09#TestFindObjects.test_find_objects09
  s    zz------/ 0 ""4(aD)5At+<=!!Q-uQ4/@A!!Q-uQ4/@AC C 	C Cr6   rM   N)rN   rO   rP   rQ   r   r   r   r   r   r   r   r   r  r  rS   rM   r6   r3   r   r     s6    $---CCr6   r   c           	      .   U R                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n[        R                  " USS9n/ SQn[        UR	                  5       5      U:X  d   eU Vs0 s H  oDU R                  X:H  5      _M     nn[        R                  " USS9nUR	                  5       UR	                  5       :X  d   eUR	                  5        HE  n[        X&   5      [        XV   5      :X  d   e[        X&   XV   5       H  u  px[        Xx5        M     MG     g	s  snf )
z Test dictionary keys and entriesr   r   r   r~   r   r   )ignore_value)r
   r   r   N)	r*   r%   value_indiceslistkeysnonzeror`   zipr   )	r-   rj   vi	true_keysktruevikeyvtrue_vs	            r3   test_value_indices01r    s     ::))))))+ ,D 
		t!	4BI	?i'''09:	1DI&&	F:			t!	4B779%%%wwy27|s6;////RWfk2IAA& 3 	 ;s    Dc                     U R                  SU R                  S9nSn[        [        US9   [        R
                  " U5        SSS5        g! , (       d  f       g= f)zTest input checking)rw   r   r   z(Parameter 'arr' must be an integer array)matchN)ro   float32r   r   r%   r	  )r-   rj   msgs      r3   test_value_indices02r  /  sC     88F"**8-D
4C	z	-d# 
.	-	-s   A
Ac                 l   S GH(  n[         R                  " SS/-  SS/-  -   SS/-  -   [         R                  S9n[         R                  " X!5      n[         R                  " U5      nU R                  U5      n[
        R                  " U5      n[        UR                  5       5      [        U5      :X  d   eU Vs/ s H  n[        U5      PM     sn HT  nU R                  X&:H  5      n[        XF   5      [        U5      :X  d   e[        XF   U5       H  u  p[        X5        M     MV     GM+     gs  snf )z2Test different input array shapes, from 1-D to 4-D))r   )   r   )r\   r\   r   )r\   r\   r   r      r
   r   r\   r   N)r"   r*   r   r$   uniquer%   r	  r
  r  intr  r`   r  r   )
r-   r   r   trueKeysr  r.   r  trueNdxviktrue_viks
             r3   test_value_indices03r$  8  s     ;JJA3r1#vb!f,RXX>JJq 99Q<JJqM""1%BGGI$x.000"*+(Q#a&(+Ajj(Gru:W---!$RUG!4. "5 , ; ,s   ;D1c                     [          H<  n[        X5      nU R                  / US9n[        R                  " U5      nUS:X  a  M<   e   g )Nr   r   )r   r   r*   r%   sumr-   r   r   inputr   s        r3   
test_sum01r)  J  sB    !

2U
+U#{{	 r6   c                     [          H>  n[        X5      nU R                  SS/US9n[        R                  " U5      nUS:X  a  M>   e   g )Nr   r   r   )r   r   ro   r%   r&  r'  s        r3   
test_sum02r+  S  sF    !!Qu-U#{{	 r6   c                     [          HM  n[        X5      nU R                  / US9n[        R                  " U5      n[        X@R                  S5      SS9  MO     g )Nr   r   Fcheck_0d)r   r   rg   r%   r&  r   r*   r'  s        r3   
test_sum03r/  \  sH    !%(U#FJJsOeD	 r6   c                     [          HO  n[        X5      nU R                  SS/US9n[        R                  " U5      n[        X@R                  S5      SS9  MQ     g )Nr
   r   r         @Fr-  r   r   r*   r%   r&  r   r'  s        r3   
test_sum04r3  e  sL    !

Aq6
/U#FJJsOeD	 r6   c                     [          HS  n[        X5      nU R                  SS/SS//US9n[        R                  " U5      n[        X@R                  S5      SS9  MU     g )	Nr
   r   r\   r   r   g      $@Fr-  r2  r'  s        r3   
test_sum05r5  n  sV    !

QFQF+5
9U#FJJt$4uE	 r6   c                     [         R                  " / [        S9nU R                  U5      n[         H:  n[	        X5      nU R                  / US9n[
        R                  " XAS9nUS:X  a  M:   e   g )Nr   r   r   r"   r*   boolr   r   r%   r&  r-   r   r   r   r(  r   s         r3   
test_sum06r;  w  s`    ZZ$'FZZF!

2U
+U2{{	 r6   c                     [         R                  " SS/[        S9nU R                  U5      n[         H<  n[        X5      nU R                  SS/US9n[        R                  " XAS9nUS:X  a  M<   e   g )Nr   r   r   r7  )	r"   rg   r9  r*   r   r   ro   r%   r&  r:  s         r3   
test_sum07r=    sh    WWaV4(FZZF!!Qu-U2{{	 r6   c                     [         R                  " SS/[        S9nU R                  U5      n[         H<  n[	        X5      nU R                  SS/US9n[
        R                  " XAS9nUS:X  a  M<   e   g )Nr
   r   r   r   r7  r8  r:  s         r3   
test_sum08r?    sh    ZZAd+FZZF!

Aq6
/U2{{	 r6   c                    [         R                  " SS/[        S9nU R                  U5      n[         HQ  n[	        X5      nU R                  SS/SS//US9n[
        R                  " XAS9n[        XPR                  S5      S	S
9  MS     g )Nr
   r   r   r   r\   r   r7        @Fr-  )r"   r*   r9  r   r   r%   r&  r   r:  s         r3   
test_sum09rB    sw    ZZAd+FZZF!

QFQF+5
9U2FJJsOeD	 r6   c                    [         R                  " SS/[        S9n[         R                  " SS/SS//[        S9nU R                  U5      nU R                  U5      n[        R                  " X!S9n[        X0R                  S5      S	S
9  g Nr
   r   r   r   r\   r   r7         @Fr-  )r"   r*   r9  r%   r&  r   r-   r   r(  r   s       r3   
test_sum10rG    so    ZZAd+FJJAA't4EZZFJJuE[[.F

3%@r6   c                     U R                  SS/U R                  S9n[         HR  n[        X5      nU R                  SS/SS//US9n[        R
                  " XASS9n[        XPR                  S5      SS	9  MT     g )
Nr
   r   r   r\   r   r         @Fr-  )r*   int8r   r   r%   r&  r   r:  s         r3   
test_sum11rK    st    ZZAbggZ.F!

QFQF+5
9U#$&FJJsOeD r6   c           	      $   U R                  SS/SS//U R                  S9n[         Hf  n[        X5      nU R                  SS/SS//US9n[        R
                  " XAU R                  / SQ5      S9n[        XPR                  / SQ5      5        Mh     g 	Nr
   r   r   r   r\   r      r   r   )rA  rI   g      @)r*   rJ  r   r   r%   r&  r   r:  s         r3   
test_sum12rP    s    ZZ!Q!Q(Z8F!

QFQF+5
9UI9NO!&**_*EF	 r6   c           	         U R                  SS/SS//U R                  S9n[         H  n[        X5      nU R                  SS/SS//US9n[        R
                  " XAU R                  / SQ5      S9n[        R                  " XAU R                  / SQ5      S9nU R                  XV:H  5      (       d   e[        X`R                  / SQ5      5        M     g rM  )	r*   rJ  r   r   r%   r&  
sum_labelsallr   )r-   r   r   r   r(  
output_sumoutput_labelss          r3   test_sum_labelsrV    s    ZZ!Q!Q(Z8F!

QFQF+5
9[[RZZ	=RS
**

9(=? vvj12222!-O1LM r6   c                    [         R                  " SS/[        S9nU R                  U5      n[         HQ  n[	        X5      nU R                  SS/SS//US9n[
        R                  " XAS9n[        XPR                  S5      S	S
9  MS     g rD  )r"   r*   r9  r   r   r%   meanr   r:  s         r3   test_mean01rY    sw    ZZAd+FZZF!

QFQF+5
9e3FJJsOeD	 r6   c                    [         R                  " SS/[        S9n[         R                  " SS/SS//[        S9nU R                  U5      nU R                  U5      n[        R                  " X!S9n[        X0R                  S5      S	S
9  g Nr
   r   r   r   r\   r   r7  r   Fr-  )r"   r*   r9  r%   rX  r   rF  s       r3   test_mean02r\    so    ZZAd+FJJAA't4EZZFJJuE\\%/F

3%@r6   c                     U R                  SS/5      n[         HR  n[        X5      nU R                  SS/SS//US9n[        R                  " XASS9n[        XPR                  S5      SS	9  MT     g )
Nr
   r   r\   r   r   r   r1  Fr-  )r*   r   r   r%   rX  r   r:  s         r3   test_mean03r^    sl    ZZAF!

QFQF+5
9e$%'FJJsOeD r6   c           
         U R                  SS/SS//U R                  S9n[        R                  " SS9   [         H{  n[        X5      nU R                  SS/SS//US9n[        R                  " XAU R                  / SQ5      S	9nUS
   S:X  d   eUS   S:X  d   eU R                  US   5      (       a  M{   e   S S S 5        g ! , (       d  f       g = f)Nr
   r   r   r   ignorerS  r\   rN  r   r   rA        @)	r*   rJ  r"   errstater   r   r%   rX  isnanr:  s         r3   test_mean04re    s    ZZ!Q!Q(Z8F		"DB%EJJAA/uJ=E\\%(*

9(=?F !9###!9###88F1I&&&&  
#	"	"s   A>C7C
Cc                    [         R                  " SS/[        S9nU R                  U5      n[         HQ  n[	        X5      nU R                  SS/SS//US9n[
        R                  " XAS9n[        XPR                  S5      S	S
9  MS     g r[  )r"   r*   r9  r   r   r%   minimumr   r:  s         r3   test_minimum01rh    w    ZZAd+FZZF!

QFQF+5
96FJJsOeD	 r6   c                    [         R                  " SS/[        S9n[         R                  " SS/SS//[        S9nU R                  U5      nU R                  U5      n[        R                  " X!S9n[        X0R                  S5      SS	9  g 
Nr
   r   r   r   r   r7  r   Fr-  )r"   r*   r9  r%   rg  r   rF  s       r3   test_minimum02rl    so    ZZAd+FJJAA't4EZZFJJuE__U2F

3%@r6   c                     U R                  SS/5      n[         HR  n[        X5      nU R                  SS/SS//US9n[        R                  " XASS9n[        XPR                  S5      SS	9  MT     g )
Nr
   r   r\   r   r   r   rE  Fr-  )r*   r   r   r%   rg  r   r:  s         r3   test_minimum03rn    sl    ZZAF!

QFQF+5
9'(*FJJsOeD r6   c           	         U R                  SS/SS//5      n[         Hf  n[        X5      nU R                  SS/SS//US9n[        R                  " XAU R                  / SQ5      S9n[        XPR                  / SQ5      5        Mh     g )	Nr
   r   r\   r   r   r   r\   rO  r   )rE  rA  rI   )r*   r   r   r%   rg  r   r:  s         r3   test_minimum04rq  $  }    ZZ!Q!Q()F!

QFQF+5
9')zz)'<>!&**_*EF r6   c                    [         R                  " SS/[        S9nU R                  U5      n[         HQ  n[	        X5      nU R                  SS/SS//US9n[
        R                  " XAS9n[        XPR                  S5      S	S
9  MS     g )Nr
   r   r   r   r\   r   r7  r1  Fr-  )r"   r*   r9  r   r   r%   maximumr   r:  s         r3   test_maximum01ru  /  ri  r6   c                    [         R                  " SS/[        S9n[         R                  " SS/SS//[        S9nU R                  U5      nU R                  U5      n[        R                  " X!S9n[        X0R                  S5      SS	9  g rk  )r"   r*   r9  r%   rt  r   rF  s       r3   test_maximum02rw  :  so    ZZAd+FJJAA't4EZZFJJuE__U2F

3%@r6   c                     U R                  SS/5      n[         HR  n[        X5      nU R                  SS/SS//US9n[        R                  " XASS9n[        XPR                  S5      SS	9  MT     g )
Nr
   r   r\   r   r   r   rA  Fr-  )r*   r   r   r%   rt  r   r:  s         r3   test_maximum03ry  D  sl    ZZAF!

QFQF+5
9'(*FJJsOeD r6   c           	         U R                  SS/SS//5      n[         Hf  n[        X5      nU R                  SS/SS//US9n[        R                  " XAU R                  / SQ5      S9n[        XPR                  / SQ5      5        Mh     g )	Nr
   r   r\   r   r   rp  r   )r1  rA  rI   )r*   r   r   r%   rt  r   r:  s         r3   test_maximum04r{  O  rr  r6   c                 b    U R                  / SQ5      n[        R                  " U5      S:X  d   eg )N)r   r   )r*   r%   rt  )r-   r.   s     r3   test_maximum05r  Z  s)     	

< A??1###r6   c                     U R                  / SQ/ SQ/ SQ/ SQ/5      nU R                  / SQ/ SQ/ SQ/ SQ/5      n[        R                  " XU R                  / SQ5      S	9n[        X0R                  / S
Q5      5        g )Nr
   r   r   r
   rw   r\   r   r   r   r   r   r   r9   r\   r   r   r
   r
   r   r   r   r   r   r   r\   r\   r   r   )r
   r   r\   r   )rb  rA  rI  )r*   r%   medianr   r-   r   r   r   s       r3   test_median01r  a  sl    


L   " 	#A ZZ%%%' (F ^^ABJJy4IJFfjj&ABr6   c                     U R                  / SQ/ SQ/ SQ/ SQ/5      n[        R                  " U5      n[        X R                  S5      SS9  g )Nr  r  r  r  r   Fr-  r*   r%   r  r   r-   r   r   s      r3   test_median02r  o  sB    


L   " 	#A ^^AF

3%@r6   c                     U R                  / SQ/ SQ/ SQ/ SQ/5      nU R                  / SQ/ SQ/ SQ/ SQ/5      n[        R                  " XS9n[        X0R                  S	5      S
S9  g )Nr  r  r  r  r  r  r  r7  r1  Fr-  r  r  s       r3   test_median03r  y  sb    


L   " 	#A ZZ%%%' (F ^^A-F

3%@r6   c                     [         R                  " SS/[        S9nU R                  U5      n[        R                  " XR                  S5      U R                  S/5      S9n[        X R                  S/5      5        g )Nr
   r   r   r   r   )r"   r*   r9  r%   r  rg   r   r  s      r3   test_median_gh12836_boolr    sZ     	

Aq6&A


1A^^Aggdm2::qc?KFfjj#&78r6   c                     U R                  SS/U R                  S9n[        R                  " XR	                  S5      U R                  S/5      S9n[        X R                  S/5      5        g )NA   F   r   r  r
   r   g     P@)r*   rJ  r%   r  rg   r   r  s      r3   test_median_no_int_overflowr    sS     	

B8277
+A^^Aggdm2::qc?KFfjj$&89r6   c                    [         R                  " SS9   [         H  n[        X5      nU R	                  / US9n[
        R                  " 5          [
        R                  " SS[        5        [        R                  " U5      nS S S 5        U R                  W5      (       a  M   e   S S S 5        g ! , (       d  f       N3= f! , (       d  f       g = fNr`  ra  r   zMean of empty slice)r"   rc  r   r   r*   warningscatch_warningsfilterwarningsRuntimeWarningr%   variancerd  r'  s        r3   test_variance01r    s    		"DB%EJJrJ/E((*''2GX ))%0 + 88F####  
#	" +*	 
#	")   :C 3B/C "C /
B=9C  
Cc                     [          HN  n[        X5      nU R                  S/US9n[        R                  " U5      n[        X@R                  S5      SS9  MP     g Nr
   r   rI   Fr-  r   r   r*   r%   r  r   r'  s        r3   test_variance02r    sL    !

A3e
,!!%(FJJsOeD	 r6   c                     [          HO  n[        X5      nU R                  SS/US9n[        R                  " U5      n[        X@R                  S5      SS9  MQ     g Nr
   r\   r   r   Fr-  r  r'  s        r3   test_variance03r    sN    !

Aq6
/!!%(FJJsOeD	 r6   c                     [         R                  " SS/[        S9nU R                  U5      n[        R                  " U5      n[        X R                  S5      SS9  g )Nr
   r   r   g      ?Fr-  )r"   r*   r9  r%   r  r   r-   r(  r   s      r3   test_variance04r    sG    JJ1vT*EJJuEe$F

4 05Ar6   c                     U R                  / SQ5      n[         HP  n[        X5      nU R                  / SQUS9n[        R                  " XAS5      n[        XPR                  S5      SS9  MR     g N)r   r   r\   )r
   r\   rO  r   r   r   Fr-  )r*   r   r   r%   r  r   r:  s         r3   test_variance05r    sZ    ZZ	"F!

9E
2!!%3FJJsOeD r6   c           
      b   U R                  / SQ5      n[        R                  " SS9   [         Hd  n[	        X5      nU R                  / SQUS9n[
        R                  " XAU R                  / SQ5      5      n[        XPR                  / SQ5      5        Mf     S S S 5        g ! , (       d  f       g = fN)r   r   r\   r\   r   r`  ra  )r
   r\   rO  r   rO  r   )r   r\   r   )r   r   rI   )r*   r"   rc  r   r   r%   r  r   r:  s         r3   test_variance06r    s{    ZZ(F		"DB%EJJ/uJ=E%%eRZZ	5JKF%fjj.IJ	  
#	"	"   A/B  
B.c                    [         R                  " SS9   [         H  n[        X5      nU R	                  / US9n[
        R                  " 5          [
        R                  " SS[        5        [        R                  " U5      nS S S 5        U R                  W5      (       a  M   e   S S S 5        g ! , (       d  f       N3= f! , (       d  f       g = fr  )r"   rc  r   r   r*   r  r  r  r  r%   standard_deviationrd  r'  s        r3   test_standard_deviation01r    s    		"DB%EJJrJ/E((*''2GX 33E: + 88F####  
#	" +*	 
#	"r  c                     [          HN  n[        X5      nU R                  S/US9n[        R                  " U5      n[        X@R                  S5      SS9  MP     g r  r   r   r*   r%   r  r   r'  s        r3   test_standard_deviation02r    sL    !

A3e
,++E2FJJsOeD	 r6   c                     [          HO  n[        X5      nU R                  SS/US9n[        R                  " U5      n[        X@R                  S5      SS9  MQ     g r  r  r'  s        r3   test_standard_deviation03r    sN    !

Aq6
/++E2FJJsOeD	 r6   c                     [         R                  " SS/[        S9nU R                  U5      n[        R                  " U5      n[        X R                  S5      SS9  g )Nr
   r   r   r?   Fr-  )r"   r*   r9  r%   r  r   r  s      r3   test_standard_deviation04r    sF    JJ1vT*EJJuE''.F

3%@r6   c                     U R                  / SQ5      n[         HP  n[        X5      nU R                  / SQUS9n[        R                  " XAS5      n[        XPR                  S5      SS9  MR     g r  )r*   r   r   r%   r  r   r:  s         r3   test_standard_deviation05r    sZ    ZZ	"F!

9E
2++E1=FJJsOeD	 r6   c           
      b   U R                  / SQ5      n[        R                  " SS9   [         Hd  n[	        X5      nU R                  / SQUS9n[
        R                  " XAU R                  / SQ5      5      n[        XPR                  / SQ5      5        Mf     S S S 5        g ! , (       d  f       g = fr  )r*   r"   rc  r   r   r%   r  r   r:  s         r3   test_standard_deviation06r    s    ZZ(F		"DB%EJJ/uJ=E//rzz)4F &fjj.IJ  
#	"	"r  c           	         U R                  S/5      n[        R                  " SS9   [         H  n[	        U 5      (       a  US:X  a  [
        R                  " S5        [        X5      nU R                  S/US9n[        R                  " XAU R                  S/5      5      n[        XPR                  S/5      5        M     S S S 5        g ! , (       d  f       g = f)	Nr
   r`  ra  uint8z8value cannot be converted to type uint8 without overflowgl `yr   r   )r*   r"   rc  r   r   pytestxfailr   r%   r  r   r:  s         r3   test_standard_deviation07r    s    ZZ_F		"D|| 0 1B%EJJ}EJ:E//rzz1#OF%fjj!o>  
#	"	"s   BC
Cc                     [         R                  " SS/[        S9nU R                  U5      n[         H@  n[	        X5      nU R                  SS/SS//US9n[
        R                  " XAS9nUS:X  a  M@   e   g )	Nr
   r   r   r   r\   r   r7  r   r   )r"   r*   r9  r   r   r%   minimum_positionr:  s         r3   test_minimum_position01r    su    ZZAd+FZZF!

QFQF+5
9))%?	 r6   c                     [          HE  n[        X5      nU R                  / SQ/ SQ/ SQ/US9n[        R                  " U5      nUS:X  a  ME   e   g Nrw   r   r   rw   r\   r   r   r   r
   rw   r
   r
   r   r
   r   )r   r   r*   r%   r  r'  s        r3   test_minimum_position02r  *  Y    !

L((*16  8 ))%0 r6   c                     [         R                  " / SQ/ SQ/ SQ/[        S9nU R                  U5      n[        R                  " U5      nUS:X  d   eg r  r"   r*   r9  r%   r  r  s      r3   test_minimum_position03r  5  N    JJ$$&-13E JJuE%%e,FVr6   c                     [         R                  " / SQ/ SQ/ SQ/[        S9nU R                  U5      n[        R                  " U5      nUS:X  d   eg )Nr  )r\   r   r
   r   r  r   r  r  r  s      r3   test_minimum_position04r  ?  r  r6   c                     U R                  / SQ5      n[         HE  n[        X5      nU R                  / SQ/ SQ/ SQ/US9n[        R                  " XA5      nUS:X  a  ME   e   g )Nr
   r   r   r   r  r  )r
   rw   r   r\   r   )r   r   r*   r   r   r%   r  r:  s         r3   test_minimum_position05r  I  g    ZZ%F!

L((*16  8 ))%8 r6   c                     U R                  / SQ5      n[         HF  n[        X5      nU R                  / SQ/ SQ/ SQ/US9n[        R                  " XAS5      nUS:X  a  MF   e   g )Nr
   r   r\   r   r  r  r  r   r   r   r
   r  r:  s         r3   test_minimum_position06r  U  i    ZZ%F!

L((*16  8 ))%; r6   c           	         U R                  / SQ5      n[         He  n[        X5      nU R                  / SQ/ SQ/ SQ/US9n[        R                  " XAU R                  SS/5      5      nUS   S	:X  d   eUS
   S:X  a  Me   e   g )Nr  r  r  r  r   r   r\   r   r  r
   r  r  r:  s         r3   test_minimum_position07r  a      ZZ%F!

L((*16  8 ))%*,**aV*<>ayF"""ayF""" r6   c                     [         R                  " SS/[        S9nU R                  U5      n[         HA  n[	        X5      nU R                  SS/SS//US9n[
        R                  " UUS9nUS:X  a  MA   e   g )	Nr
   r   r   r   r\   r   r7  r
   r   )r"   r*   r9  r   r   r%   maximum_positionr:  s         r3   test_maximum_position01r  o  sz    ZZAd+FZZF!

QFQF+5
9))%179 r6   c                     [          HE  n[        X5      nU R                  / SQ/ SQ/ SQ/US9n[        R                  " U5      nUS:X  a  ME   e   g )Nr  r\   r   rO  r   r  r   r  )r   r   r*   r%   r  r'  s        r3   test_maximum_position02r  {  r  r6   c                     [         R                  " / SQ/ SQ/ SQ/[        S9nU R                  U5      n[        R                  " U5      nUS:X  d   eg )Nr  r  r  r   r  )r"   r*   r9  r%   r  r  s      r3   test_maximum_position03r    r  r6   c                     U R                  / SQ5      n[         HE  n[        X5      nU R                  / SQ/ SQ/ SQ/US9n[        R                  " XA5      nUS:X  a  ME   e   g )Nr  r  r  r  r   r
   r
   r*   r   r   r%   r  r:  s         r3   test_maximum_position04r    r  r6   c                     U R                  / SQ5      n[         HF  n[        X5      nU R                  / SQ/ SQ/ SQ/US9n[        R                  " XAS5      nUS:X  a  MF   e   g )Nr  r  r  r  r   r
   r  r  r:  s         r3   test_maximum_position05r    r  r6   c           	         U R                  / SQ5      n[         He  n[        X5      nU R                  / SQ/ SQ/ SQ/US9n[        R                  " XAU R                  SS/5      5      nUS   S	:X  d   eUS   S
:X  a  Me   e   g )Nr  r  r  r  r   r
   r   r   r  r  r  r:  s         r3   test_maximum_position06r    r  r6   c           	         U R                  / SQ5      n[         He  n[        X5      nU R                  / SQ/ SQ/ SQ/US9n[        R                  " XAU R                  SS/5      5      nUS   S	:X  d   eUS
   S:X  a  Me   e   g )N)r   rb  rI         @r  r  r  r   r   r  r   r  r
   )r   r\   r  r:  s         r3   test_maximum_position07r    s     ZZ,-F!

L((*16  8 ))%*,**c3Z*@BayF"""ayF""" r6   c                    [         R                  " SS/[        S9nU R                  U5      n[         H  n[	        X5      nU R                  SS/SS//US9n[
        R                  " XAS9n[
        R                  " XAS9n[
        R                  " XAS9n[
        R                  " UUS9n[
        R                  " UUS9n	XVXxU	4:X  a  M   e   g )Nr
   r   r   r   r\   r   r7  )r"   r*   r9  r   r   r%   extremarg  rt  r  r  
r-   r   r   r   r(  output1output2output3output4output5s
             r3   test_extrema01r     s     ZZAd+FZZF!

QFQF+5
9//%7//%7//%7**528:**528:Gg>>>> r6   c                 p   U R                  SS/5      n[         H  n[        X5      nU R                  SS/SS//US9n[        R                  " XASS9n[        R
                  " XASS9n[        R                  " XASS9n[        R                  " UUSS9n[        R                  " UUSS9n	XVXxU	4:X  a  M   e   g )Nr
   r   r\   r   r   r   )	r*   r   r   r%   r  rg  rt  r  r  r  s
             r3   test_extrema02r    s     ZZAF!

QFQF+5
9//%()+//%()+//%()+**528C**528CGg>>>> r6   c           	         U R                  SS/SS//5      n[         GHG  n[        U 5      (       a  US;   a  [        R                  " S5        [        X5      nU R                  SS/SS//US9n[        R                  " UUU R                  / SQ5      S	9n[        R                  " UUU R                  / SQ5      S	9n[        R                  " XAU R                  / SQ5      S	9n[        R                  " UUU R                  / SQ5      S	9n[        R                  " UUU R                  / SQ5      S	9n	[        US
   U5        [        US   U5        US   U:X  d   eUS   U	:X  a  GMH   e   g )Nr
   r   r\   uint16uint32uint64/https://github.com/pytorch/pytorch/issues/58734r   r   rp  r   r   r*   r   r   r  r  r   r%   r  rg  rt  r  r  r   r  s
             r3   test_extrema03r
    sX    ZZ!Q!Q()FB<<D$BB\\KL!

QFQF+5
9//%)/(*

9(=? //%)/(*

9(=? //%(*

9(=?**52813I1FH **52813I1FH 	"'!*g6!'!*g6qzW$$$qzW$$$/ r6   c           	         U R                  / SQ5      n[         GHP  n[        U 5      (       a  US;   a  [        R                  " S5        [        X5      nU R                  / SQ/ SQ/ SQ/US9n[        R                  " XAU R                  SS	/5      5      n[        R                  " XAU R                  SS	/5      5      n[        R                  " XAU R                  SS	/5      5      n[        R                  " XAU R                  SS	/5      5      n[        R                  " XAU R                  SS	/5      5      n	[        US
   U5        [        US   U5        US	   U:X  d   eUS   U	:X  a  GMQ   e   g )Nr  r  r  r  r  r  r   r
   r   r   r\   r	  r  s
             r3   test_extrema04r  	  sF    ZZ%FB<<D$BB\\KL!

L((*16  8 //%QF1CD//%QF1CD//%QF1CD**5+-::q!f+=?**5+-::q!f+=?!'!*g6!'!*g6qzW$$$qzW$$$% r6   c                     Sn[          HA  n[        X5      nU R                  SS/SS//US9n[        R                  " U5      nXQ:X  a  MA   e   g )N)rI   rI   r
   r   r   r   r   r*   r%   center_of_massr-   r   r   r   r(  r   s         r3   test_center_of_mass01r  "  V    H!

QFQF+5
9''.!!!	 r6   c                     Sn[          HA  n[        X5      nU R                  SS/SS//US9n[        R                  " U5      nXQ:X  a  MA   e   g )Nr  r   r
   r   r  r  s         r3   test_center_of_mass02r  ,  V    H!

QFQF+5
9''.!!!	 r6   c                     Sn[          HA  n[        X5      nU R                  SS/SS//US9n[        R                  " U5      nXQ:X  a  MA   e   g )Nr  r   r
   r   r  r  s         r3   test_center_of_mass03r  6  r  r6   c                     Sn[          HA  n[        X5      nU R                  SS/SS//US9n[        R                  " U5      nXQ:X  a  MA   e   g )Nr  r   r
   r   r  r  s         r3   test_center_of_mass04r  @  r  r6   c                     Sn[          HA  n[        X5      nU R                  SS/SS//US9n[        R                  " U5      nXQ:X  a  MA   e   g )Nr?   r?   r
   r   r  r  s         r3   test_center_of_mass05r  J  r  r6   c                     Sn[         R                  " SS/SS//[        S9nU R                  U5      n[        R                  " U5      nX1:X  d   eg )Nr  r
   r   r\   r   )r"   r*   r9  r%   r  r-   r   r(  r   s       r3   test_center_of_mass06r  T  sN    HJJAA't4EJJuE##E*Fr6   c                     U R                  SS/5      nSn[        R                   " SS/SS//[        S9nU R                  U5      n[        R                  " X15      nXB:X  d   eg )Nr
   r   r?   rI   r   r\   r   r*   r"   r9  r%   r  r-   r   r   r(  r   s        r3   test_center_of_mass07r$  ]  s`    ZZAFHJJAA't4EJJuE##E2Fr6   c                     U R                  SS/5      nSn[        R                   " SS/SS//[        S9nU R                  U5      n[        R                  " X1S5      nXB:X  d   eg )Nr
   r   r?   r   rw   r\   r   r"  r#  s        r3   test_center_of_mass08r'  g  sb    ZZAFHJJAA't4EJJuE##E15Fr6   c                 b   U R                  S5      nU R                  SS/U R                  S9n[        R                   " SS/SS//[        S9nU R                  U5      n[        R
                  " X1U R                  SS/5      5      n[        U R                  U5      U R                  U5      5        g )Nr  r!  r&  r   r
   r   )r*   float64r"   r9  r%   r  r   r#  s        r3   test_center_of_mass09r*  q  s    ZZFzz:z2"**zEHJJAA't4EJJuE##E2::q!f3EFFBJJv&

8(<=r6   c                     U R                  S5      nU R                  S5      n[        R                  " USSS5      n[	        X15        g )Nr   r   )rg   aranger%   	histogramr   r  s       r3   test_histogram01r.  {  s:    wwr{HIIbMEuaR0Ff/r6   c                     U R                  / SQ5      nU R                  / SQ5      nU R                  / SQ5      n[        R                  " USSSUS5      n[        XB5        g )N)r
   r
   r
   r
   r   r   r   r   )r   r   r   r
   r
   )r
   r
   r\   r   r\   r\   r\   r\   r   r   rw   r
   r*   r%   r-  r   r#  s        r3   test_histogram02r1    sP    ZZ01Fzz/*HJJ/0EuaAvq9Ff/r6   zobject arraysc                    U R                  / SQ5      nU R                  / SQ5      nU R                  / SQ5      nU R                  / SQ5      n[        R                  " USSSUS5      n[        US   U5        [        US	   U5        g )
N)r
   r   r
   r
   r   r   r   r   )r   r
   r   r
   r
   )r   r   r   r\   r   )r
   r
   r\   r   r\   rw   r\   r\   r   r   rw   r  r
   r0  )r-   r   	expected1	expected2r(  r   s         r3   test_histogram03r5    st     ZZ01F

?+I

?+IJJ/0EuaAvv>FfQi3fQi3r6   c           
         U R                  / SQ/ SQ/ SQ/5      nU R                  / SQ/ SQ/ SQ/5      n[        R                  " XU R                  SS/5      S9n[        X0R                  S	S
/U R                  S95        [        R
                  " XU R                  SS/5      S9n[        X@R                  SS/U R                  S95        [        R                  " XU R                  SS/5      S9n[        XPR                  U R                  SS/U R                  S95      5        [        R                  " XU R                  SS/5      S9n[        X`R                  S	S
/U R                  S95        [        R                  " XU R                  SS/5      S9n[        XpR                  SS/5      SS9  [        R                  " XU R                  SS/5      S9n[        XR                  SS/5      SS9  g )N)rw   r   r   r   r   )rO  r9   r   r   r   )r   r   r   r\   rw   )r
   r
   r   r   r   )r   r   r   r   r   r
   r   r   rX   rA  r   rb  r   rw   r\   Fr   r9   )r*   r%   rX  r   r)  r  r  r   sqrtr  rg  rt  )	r-   r   lblrX  varstdmedminmaxs	            r3   test_stat_funcs_2dr>    s    	

O_oFGA
**oH
IC<<RZZA-?@DD**c3Zrzz*BC


1

Aq60B
CCCS#JbjjAB

$
$Q"**aV:L
MCc772::sCj

:+S#TU
..bjj!Q.@
ACCS#JbjjAB
//!rzz1a&/A
BCCQF+?
//!rzz1a&/A
BCCQF+?r6   no watershed_ift on CuPyr   c                       \ rS rSrS rS rS rS rS rS r	\
" SS	S
9S 5       r\
" SSS9S 5       r\
" SSS9S 5       rSrg)TestWatershedIfti  c                    UR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/UR                  S9nUR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/UR                  S9nUR                  / SQ/ SQ/ SQ/5      n[        R                  " X#US9n/ S	Q/ S
Q/ S
Q/ S
Q/ S
Q/ S
Q/ S	Q/ S	Q/n[        XQR                  U5      5        g )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
   	structurer   r   r   r   r   r   r   r   r
   r
   r
   r
   r
   r   r*   r  rJ  r%   watershed_iftr   r,   r-   rj   markersrK  rk   r   s          r3   test_watershed_ift01%TestWatershedIft.test_watershed_ift01  s    zz000000002 :<  C **433333335 =?GG  E **i'') *	 ##DYG0+++++002 	"#zz(';<r6   c                 `   UR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/UR                  S9nUR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/UR                  S9n[        R                  " X#5      n/ SQ/ SQ/ S	Q/ S	Q/ S	Q/ SQ/ SQ/ SQ/n[        XAR                  U5      5        g )
NrD  rE  rF  r   rG  rH  rL  )r   r   r
   r
   r
   r   r   rM  rN  r,   r-   rj   rQ  rk   r   s         r3   test_watershed_ift02%TestWatershedIft.test_watershed_ift02  s    zz000000002 :<  C **433333335 =?GG  E ##D20-+++-002 	"#zz(';<r6   c           
      N   UR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/UR                  S9nUR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/UR                  S9n[        R                  " X#5      n/ SQ/ SQ/ S	Q/ S	Q/ S	Q/ SQ/ SQ/n[        XAR                  U5      5        g )
NrD  rE  r   r
   r   r
   r   r
   r   r   r   r   r   r   r\   r   r   r   r   r   r   r   r   r   rL  )r   r   r   r   r\   r   r   r   r   r   r\   r\   r\   r   rN  rU  s         r3   test_watershed_ift03%TestWatershedIft.test_watershed_ift03  s    zz00000002 :<  C **33333346 >@WW  F ##D20.+++.02 	"#zz(';<r6   c           
         UR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/UR                  S9nUR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/UR                  S9nUR                  / SQ/ SQ/ SQ/5      n[        R                  " X#US9n/ S	Q/ S
Q/ S
Q/ S
Q/ S
Q/ S
Q/ S	Q/n[        XQR                  U5      5        g )NrD  rE  rY  r   rZ  r[  rI  rJ  rL  r\  rN  rP  s          r3   test_watershed_ift04%TestWatershedIft.test_watershed_ift04
  s    zz00000002 :<  C **33333346 $&77  , **i'') *	 ##DYG0+++++02 	"#zz(';<r6   c           
         UR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/UR                  S9nUR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/UR                  S9nUR                  / SQ/ SQ/ SQ/5      n[        R                  " X#US9n/ S	Q/ S
Q/ S
Q/ S
Q/ S
Q/ S
Q/ S	Q/n[        XQR                  U5      5        g )NrD  rE  rY  r   )r   r   r\   r   r   r   r   r[  rI  rJ  rL  )r   r\   r\   r   r   r   r   rN  rP  s          r3   test_watershed_ift05%TestWatershedIft.test_watershed_ift05(  s    zz00000002 :<  C **33333346 $&77  , JJ	 ) ) + ,	 ##DYG0+++++02 	"#zz(';<r6   c           	      n   UR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/UR                  S9nUR                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/UR                  S9nUR                  / SQ/ SQ/ SQ/5      n[        R                  " X#US9n/ S	Q/ S	Q/ S	Q/ S	Q/ S
Q/ S
Q/n[        XQR                  U5      5        g )NrF  rE  rD  r   rG  rH  rI  rJ  rM  rL  rN  rP  s          r3   test_watershed_ift06%TestWatershedIft.test_watershed_ift06E  s    zz0000002
 :<  C **4333335
 =?GG  E **i'') *	 ##DYG++++002 	"#zz(';<r6   Tzinplace ops are numpy-specificr   c           	      ^   Sn[         R                  " U[         R                  S9nUR                  5       n[         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/[         R                  S9US'   UR	                  U5      nUR	                  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/UR
                  S9nUR                  X!R                  S9nUR                  nUR	                  / S	Q/ S	Q/ S	Q/5      n[        R                  " X4UUS
9  / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/n[        XQR	                  U5      5        g )N)r   r   r   rF  rE  rD  .rG  rH  rI  )rK  r   rM  rL  )r"   ro   r  	transposer*   rJ  int16Tr%   rO  r   )r,   r-   r   rj   rQ  rk   rK  r   s           r3   test_watershed_ift07%TestWatershedIft.test_watershed_ift07^  s   xxRXX.~~JJ 5 5 5 5 5 5 7
 ?AhhHS	 zz$**4333335
 =?GG  E hhuHHh-ee**i'') *	 	dy%(	*++++002 	"#zz(';<r6   r   r?  r@  c                     UR                  SS/SS//UR                  S9nUR                  SS/SS//UR                  S9n[        R                  " X#5      nSS/SS//n[        XAR                  U5      5        g )N   r   r   r
   )r*   r  rJ  r%   rO  r   rU  s         r3   test_watershed_ift08%TestWatershedIft.test_watershed_ift08  s     zzC8q6#*,))  5**q!f !f&-/WW  6##D2FF!#zz(';<r6   c                 8   UR                  UR                  UR                  5      R                  S/SS//UR                  S9nUR                  SS/SS//UR                  S9n[
        R                  " X#5      nSS/SS//n[        XAR                  U5      SS9  g )Nr   r   r
   Fr   )r*   iinfor  r=  rJ  r%   rO  r   rU  s         r3   test_watershed_ift09%TestWatershedIft.test_watershed_ift09  s     zzBHHRYY/33Q7q6#*,))  5**q!f !f&-/WW  6##D2FFZZ1uEr6   rM   N)rN   rO   rP   rQ   rR  rV  r]  r`  rc  rf  skip_xp_backendsrl  rp  rt  rS   rM   r6   r3   rB  rB    sz    =>=8=2=<=:=2 d+KL= M=@ f%?@	= A	= f%?@	F A	Fr6   rB  )r   dtc                     [         R                  R                  S5      nSnUR                  SUSS9R	                  U S9n[
        R                  " U5      n[        UR                  5       5      U:X  d   eg )N{   rO  r   )r   r  )lowhighr   r   )	r"   r   default_rngintegersastyper%   r	  r`   r  )rw  r-   rngmax_valimageval_idxs         r3   test_gh_19423r    sh     ))


$CGLLQW8L<CC"CME##E*Gw||~')))r6   )r   os.pathr  numpyr"   scipy._lib._array_apir   r   r   r   r   r   r  r	   r   scipy.ndimager%    r   markrv  name__version__r(   r   rU   rh   rm   rp   rs   ru   rx   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/  r3  r5  r;  r=  r?  rB  rG  rK  rP  rV  rX  rY  r\  r^  re  rg  rh  rl  rn  rq  rt  ru  rw  ry  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r
  r  r  r  r  r  r  r  r  r$  r'  r*  r-  r.  r1  r5  r>  rO  rB  parametrizeintcuintcr  rM   r6   r3   <module>r     s   	      *  ;;// WW_=#)=  $'IJO= O= KO=d $'IJ#/ #/ K#/L 7==! " 7==! " 7==! " 7==! " 7==! " 7==! " 7==! "$ 7==! "" 7==! "& 7==! " 7==! "* $'IJ7==! " K* 7==! "& 7==! "$ $F89;7==! "; $F89;7==!! ";! $'JK7==!F " LF 7==! ". 7=='"6"67 8$ 7==!	5 "	5 7=='"6"67TC TC 8TCn 7(()' *', 7(()$ *$ 7(()/ */" 7;;   7;;   7;;E  E 7;;E  E 7;;F  F 7;;   7;;   7;;   7;;E  E 7;;A  A 7;;E  E 7;;G  G 7;;
N  
N 7<< E !E 7<< A !A 7<< E !E 7<< ' !' 7??#E $E 7??#A $A 7??#E $E 7??#G $G 7??#E $E 7??#A $A 7??#E $E 7??#G $G 7??#$ $$ 7>>"
C #
C 7>>"A #A 7>>"
A #
A 7>>"9 #9 7>>": #: 7##$$ %$ 7##$E %E 7##$E %E 7##$B %B 7##$E %E 7##$K %K 7--.$ /$ 7--.E /E 7--.E /E 7--.A /A 7--.E /E 7--.	K /	K 7--.
? /
? 7++,  -  7++,  -  7++, - 7++, - 7++,  -  7++,  -  7++,
# -
# 7++,  -  7++,  -  7++, - 7++,  -  7++,  -  7++,
# -
# 7++,# -# 7??GOOW__++W-E-EG?G?  7??GOOW__++W-E-EG?G?$ 7??GOOW__++W-E-EG%G%8 7??GOOW__++W-E-EG%G%. 7))*" +" 7))*" +" 7))*" +" 7))*" +" 7))*" +" 7))* + 7))* + 7))* + 7))*> +> 7$$%0 &0 7$$%0 &0 $77$$%	4 & 8	4 7<<!1!173M3M>>7??GOOE@E@. &!;<7(()aF aF * =aFH $237(()* * 4  *r6   