
    xKg^                     P   d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
mZ d dlmZmZmZ d dlZd dlmZ d dlmZ d Zd Zd	 Zd
 Zd Z G d de
ej                        Z G d de      Z G d de      Z G d de
ej                        Zedk(  r ej>                          yy)    N)njit	vectorize)MemoryLeakMixinTestCase)TypingErrorNumbaNotImplementedErrorNumbaExperimentalFeatureWarning)dufunc)
from_dtypec                     | |z   S N a0a1s     d/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/npyufunc/test_dufunc.pypyuaddr          7N    c                     | |z
  S r   r   r   s     r   pysubr      r   r   c                     | |z  S r   r   r   s     r   pymultr      r   r   c                     | |z  S r   r   r   s     r   pydivr      s    8Or   c                     | |k  r| S |S r   r   r   s     r   pyminr   !   s    b2 b r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	
TestDUFuncc                 D    t        j                  |t        d            S )NT)nopython)targetoptions)r
   DUFuncdict)selfpyfuncs     r   nopython_dufunczTestDUFunc.nopython_dufunc'   s    }}V43FGGr   c           	         | j                  t              }| j                  |j                         d|_        | j	                  |j                         | j                  t              5  d|_        d d d        | j                  t              5   |t        j                  ddd      t        j                  ddd             d d d        y # 1 sw Y   [xY w# 1 sw Y   y xY w)NTFr      
      )
r'   r   assertFalse_frozen
assertTrueassertRaises
ValueError	TypeErrornplinspacer%   duadds     r   test_frozenzTestDUFunc.test_frozen*   s    $$V,'&z*!EM +y)"++a"%r{{1Qr':; *) +*))s   (C
4C
CCc                 t    | j                  t              }| j                  t        dd       |dd             y )Nr)   r+   )r'   r   assertEqualr4   s     r   test_scalarzTestDUFunc.test_scalar4   s.    $$V,!eAaj1r   c                 h   | j                  t              t        fd       }t        j                  ddd      }|d d }|dd  }t        j
                  d      } ||||       t        j                  j                  ||z   |       |j                  d      }|j                  d      }t        j
                  d      } ||||       t        j                  j                  ||z   |       |d d }	t        j
                  d      }
 |||	|
       t        j                  j                  ||	z   |
       y )Nc                      | ||       y r   r   )r   r   o0r5   s      r   npmaddz(TestDUFunc.test_npm_call.<locals>.npmadd;   s    "b"r   r   ffffff?   r*   r+      rA   )	r'   r   r   r2   r3   zerostestingassert_array_equalreshape)r%   r=   XX0X1out0Y0Y1out1Y2out2r5   s              @r   test_npm_callzTestDUFunc.test_npm_call8   s   $$V,		 
	KK#b!sVrsVxx|r2t


%%b2gt4ZZZZxxr2t


%%b2gt4Vxxr2t


%%b2gt4r   c                    | j                  t              t        fd       }t        j                  ddd      }|d d }|dd  } |||      }t        j
                  j                  ||z   |       |j                  d      }|j                  d      } |||      }t        j
                  j                  ||z   |       |d d }	 |||	      }
t        j
                  j                  ||	z   |
        |dd	      }| j                  |d
       y )Nc                      | |      S r   r   )r   r   r5   s     r   r=   z8TestDUFunc.test_npm_call_implicit_output.<locals>.npmaddQ   s    R= r   r   r>   r?   r*   r@   rA         ?g       @g      @)	r'   r   r   r2   r3   rC   rD   rE   r8   )r%   r=   rF   rG   rH   rI   rJ   rK   rL   rM   rN   out3r5   s               @r   test_npm_call_implicit_outputz(TestDUFunc.test_npm_call_implicit_outputN   s    $$V,		! 
	!KK#b!sVrsVb"~


%%b2gt4ZZZZb"~


%%b2gt4Vb"~


%%b2gt4b}r"r   c                    | j                  t              }| j                  |j                  d       | j                  |j                  d       | j                  |j
                  |j                  |j                  z          | j                  |j                  d       | j                  |j                  g        | j                  |j                  d         |dd       | j                  |j                  d       | j                  |j                  t        |j                               | j                  |j                         y )Nr+   r)   r   )r'   r   r8   ninnoutnargsntypestypesidentitylenassertIsNone	signaturer4   s     r   test_ufunc_propszTestDUFunc.test_ufunc_propsc   s    $$V,A&Q'eii%**&<=q)b).aq)s5;;'78%//*r   c                 H   | j                  t               dd       j                  j                  j                  j
                  j                  d}fd}|j                         D ]1  \  }}t         ||            }| j                  | |       d|        3 y )Nr)   r+   )rV   rW   rX   r[   r^   c                 b    d|  d}i }t        t        j                  |      di|       |d   S )Nz>
                def impl():
                    return duadd.z
            r5   impl)exectextwrapdedent)attrfnlr5   s      r   get_attr_fnz4TestDUFunc.test_ufunc_props_jit.<locals>.get_attr_fn|   sD    ""& (B A$w&6:V9r   z!Attribute differs from original: )
r'   r   rV   rW   rX   r[   r^   itemsr   r8   )r%   
attributesri   rf   valcfuncr5   s         @r   test_ufunc_props_jitzTestDUFunc.test_ufunc_props_jitp   s    $$V,a"YY#jj${{ #(..#(??4
	 $))+ID#T*+ES%'@GI ,r   N)
__name__
__module____qualname__r'   r6   r9   rO   rT   r_   rn   r   r   r   r   r   %   s'    H<25,#*+Ir   r   c                       e 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ej&                  d        Zd Zd Zd Zd Zej&                  d        Zd Zd Zd Zd Zd Zy)TestDUFuncAtc                     |j                         }|j                         } |j                  |g|   ||g|  | j                  ||       y r   )copyatassertPreciseEqual)r%   rg   ufuncaargsexpectedgots          r   _compare_outputzTestDUFuncAt._compare_output   sF    668ffh!D!
3#.r   c                     j                   dk(  r t               fd      n t               fd      t        fd       }|S )Nr+   c                      | |      S r   r   )ry   brx   s     r   <lambda>z,TestDUFuncAt._generate_jit.<locals>.<lambda>   s    5A;r   c                      |       S r   r   )ry   rx   s    r   r   z,TestDUFuncAt._generate_jit.<locals>.<lambda>   s	    ar   c                  "     j                   |  S r   rv   )rz   vecs    r   rg   z&TestDUFuncAt._generate_jit.<locals>.fn   s    3664= r   )rV   r   r   )r%   rx   rg   r   s    ` @r   _generate_jitzTestDUFuncAt._generate_jit   sC    99>)+67C)+01C		! 
	!	r   c                    t        j                  dt              }| j                  t         j                        }| j                  t         j
                        } t               d       t        fd       }| j                  |t         j                  |g dd       d}| j                  t        |      5   ||j                         g dd        d d d        | j                  |t         j
                  |j                         g d       t        j                  g d	      }| j                  |t         j                  |j                         g d|       d
}| j                  t        |      5   ||j                         g dg d       d d d        | j                  t              5   ||j                         g dddgdg       d d d        y # 1 sw Y   xY w# 1 sw Y   RxY w# 1 sw Y   y xY w)Nr*   dtypec                 ,    t        j                  |       S r   )r2   negative)ry   s    r   r   z8TestDUFuncAt.test_numpy_ufunc_at_basic.<locals>.<lambda>   s    R[[^r   c                 *    j                  | ||      S r   r   )ry   indicesr   negative_vecs      r   negative_jit_2z>TestDUFuncAt.test_numpy_ufunc_at_basic.<locals>.negative_jit_2   s    ??1gq11r   r+   rA   r+   r)   zsecond operand needed for ufunc)r+   rA      d   r   r   z+second operand provided when ufunc is unaryr)   r+   r   r+   )r2   arangeintr   addr   r   r   r}   assertRaisesRegexr   ru   arrayr/   )r%   ry   add_atnegative_atr   err_msgr   r   s          @r   test_numpy_ufunc_at_basicz&TestDUFuncAt.test_numpy_ufunc_at_basic   sr    IIb$##BFF+((5"y{#;<		2 
	2 	VRVVQ	1= 4##K91668Y- : 	["++qvvxKHH_%VRVVQVVXy!D @##K91668Y	: : {+1668Y!Q4 ,+ :9 :9 ,+s$   7G.G(G(GG%(G1c           
      |   t         j                  d   }t         j                  t         j                  t         j                  f}|D ]R  }	 t        t        j                  |             |D ]*  }t        j                  d|      }t        j                  t        j                  dt         j                        t        j                  ddt         j                        g      }|j                  j                  d      }| j                  |      } ||||       t        j                  |      }	|t         j                  u rdx|	d	<   |	d<   |	d	xx   d|t         j                  u r|n| z  z  cc<   |	dxx   d|t         j                  u r|n| z  z  cc<   - U | j                  	       y # t        $ r Y uw xY w)
NComplexr*   r            y              ?r)   )r2   	typecodesr   subtractmultiplyr   r   r   onesconcatenateintpfulltyper   	ones_likerw   )
r%   r   ufuncstypecoderx   ry   indxvalueufunc_atr{   s
             r   test_ufunc_at_inner_loopz%TestDUFuncAt.test_ufunc_at_inner_loop   s_   LL+	&&"++r{{3!H288H-.  GGBh/~~rwwq'@')wwr1BGG'D'F GR(--e4D%(<<?BKK'022HQK(1+QK1"&&uf#MMKQK2%266/v#NNK   "* 	8,# , s   
F..	F;:F;c           
         t        j                  dt              }| j                  t         j                        }| j                  |t         j                  |t        d       t        j                  dt                     y )NrA   r   )r2   rB   r   r   r   r}   slicer   r%   arrr   s      r   test_ufunc_at_ellipsisz#TestDUFuncAt.test_ufunc_at_ellipsis   sT     hhq$##BFF+VRVVS%+WWQc2	4r   c                     t        j                  dt         j                        }t        j                  d      }| j	                  t         j
                        } |||       t        j                  |g dk(        sJ y )NrA   r   )r   r   r   r   r   )r2   r   int32r   r   r   all)r%   r   r   rv   s       r   test_ufunc_at_negativez#TestDUFuncAt.test_ufunc_at_negative   sX    ggarxx(yy|,
3vvc11222r   c                 Z   t        j                  dt         j                        }t        j                  dt              }d|d<   d|d<   d|dd  t        j                  dt              }| j	                  t         j
                        } ||||       |d   |j                         k(  sJ y )	Ni   r   r*   r   rA   r)   r   i    )r2   rB   int16floatr   r   sum)r%   r   r   ry   r   s        r   test_ufunc_at_largez TestDUFuncAt.test_ufunc_at_large   s    ((4rxx0HHT'!!$%HHQe$##BFF+q'1tquuwr   c                 ,   t        j                  d      }t        j                  d      }| j                  t         j                        }t        j                  t        |      t         j                        } ||||       |d   t        |      k(  sJ y )Nr*   i r   r   )r2   rB   r   r   r   r\   uint8)r%   r   valuesr   indexs        r   test_cast_index_fastpathz%TestDUFuncAt.test_cast_index_fastpath   sj    hhrl##BFF+VBHH5sE6"1vV$$$r   c           	         t        j                  d      t        j                  d      t        j                  d      df}|D ]  }t        j                  d      }t        j                  t        j
                  d      d      }| j                  t         j                        } ||||       t         j                  j                  |t        j                  |d|z                y )Nr)   r   rR   i  r+   )r2   r   float64rB   repeatr   r   r   rC   rD   	full_like)r%   r   r   r   r   r   s         r   #test_ufunc_at_scalar_value_fastpathz0TestDUFuncAt.test_ufunc_at_scalar_value_fastpath  s    ''!*bggbk2::b>2>E((4.CIIbiioq1E''/F3u%JJ))#r||CU/KL r   c                 x	   t        j                  d      j                  dd      }t        j                  g dg dg dg      }| j	                  t         j
                        } ||t        d       t        j                  g d      f|       | j                  |t        j                  g dg dg d	g             t        j                  d
      j                  ddd      }t        j                  g d      } ||t        d       t        d       t        j                  g d      f|       | j                  |t        j                  g dg dg dgg dg dg dgg dg dg dgg             t        j                  d      j                  dd      }t        j                  g dg dg dg      } ||t        j                  g d      t        d       f|       | j                  |t        j                  g dg dg dg             t        j                  d
      j                  ddd      }t        j                  g d      } ||t        d       t        j                  g d      t        d       f|       | j                  |t        j                  g dg dg dgg dg dg dgg dg dg dgg             t        j                  d      j                  dd      }t        j                  g d      } ||dt        j                  g d      f|       | j                  |t        j                  g dg d g d!g             t        j                  d
      j                  ddd      }t        j                  g d      } ||t        j                  g d      dt        d       f|       | j                  |t        j                  g dg d g d!gg d"g d#g d$gg d%g d&g d'gg             t        j                  d
      j                  ddd      }t        j                  g d      }| j	                  t         j
                        } ||t        d       t        d       t        d       f|       | j                  |t        j                  g d(g d)g dgg d*g d+g dgg d%g d,g dgg             y )-N	   r   r   )   r   r   ),  r   r   r)   r+   r)   )r      f   )r        )r   i_  4     )r   r   r   )r   i     )r   i     )r        )        )   i     )r   i     )        )   i     )r   r)   r+   )i  r   i  )      r   )   r   i]  )j   r   r   )r   r*      )   r   if  )s      i=  )r      r?   )   r   io  )|      iF  r   )r   r   rA   )r         )   r   ic  )r         )r         )v      i@  )r         )r         )r   r   i.  )g      i1  )m      i7  )p      i:  )y      iC  )	r2   r   rE   r   r   r   r   asarrayrw   )r%   ry   r   r   s       r   test_ufunc_at_multiDz!TestDUFuncAt.test_ufunc_at_multiD  s   IIaL  A&HHoHI##BFF+q5;

9 56:288M=9$; 	< IIbM!!!Q*HH_%q5;dRZZ	-BCQG288"/"/"/"1 #0"0"0"2 #1"0"0"2
!3$4 	5 IIaL  A&HHoHIq2::i(%+6:2::9$; 	< IIbM!!!Q*HH_%q5;

9 5uT{CQG2::"-"1"1"3 #/"1"1"3 #/"1"1"3
!4$5 	6 IIaL  A&HH_%q1bjj+,a02::Iy1$3 	4 IIbM!!!Q*HH_%q2::i(!U4[91=2::"-"-"-"/ #2"/"/"1 #2"/"/"1
!2$3 	4 IIbM!!!Q*HH_%##BFF+q5;dU4[91=2::"1"1"1"3 #2"1"1"3 #2"1"1"3
!4$5 	6r   c                 &   t        j                  d      }| j                  t         j                        } ||dd       | j	                  |t        j                  d             | j                  t              5   ||dd       d d d        t        j                  d      } ||dd       | j	                  |t        j                  g d             | j                  t              5   ||g d       d d d        y # 1 sw Y   xxY w# 1 sw Y   y xY w)Nr   r   r)   r   )r)   r)   r+   )	r2   r   r   r   rw   r/   r   r   r0   )r%   ry   r   r   s       r   test_ufunc_at_0DzTestDUFuncAt.test_ufunc_at_0Df  s    HHQK##BFF+q"a288A;/{+1aO , IIaLq!Q288I#67 z*1b! +* ,+ +*s   9C;'D;DDc                     t        j                  d      }| j                  t         j                        } ||g dd       | j	                  |t        j
                  g d             y )Nr*   )r)   r+   r   r+   g      @)
r   r)   i>  .   r   rA   r   r   r   r   )r2   r   r   powerrw   r   )r%   ry   power_ats      r   test_ufunc_at_dtypesz!TestDUFuncAt.test_ufunc_at_dtypesx  sI    IIbM%%bhh/L#&288,N#OPr   c                     t        j                  d      }|dz  dk(  }| j                  t         j                        } |||g d       | j	                  |t        j
                  g d             y )Nr*   r+   r   )r   r+   r   r   r   )
r)   r)   r)   r   r)   rA   r)   r   r)   r   )r2   r   r   equalrw   r   )r%   ry   r   equal_ats       r   test_ufunc_at_booleanz"TestDUFuncAt.test_ufunc_at_boolean  sV    IIbMA
%%bhh/E?+288,J#KLr   c                     t        j                  dd      }| j                  t         j                        } ||g d       | j	                  |t        j
                  g dt         j                               y )Nr*   u4r   r   )
r   r)   r+   r   r   l    r   r   r   r   )r2   r   r   invertrw   r   uint32)r%   ry   	invert_ats      r   test_ufunc_at_boolean2z#TestDUFuncAt.test_ufunc_at_boolean2  sY    IIb%&&ryy1	!Y288 -6=?YY$H 	Ir   c                     t        j                  d      }|d d d f   d d ddf   }| j                  t         j                        } ||ddgd       | j	                  |t        j                  d             y )Nr   r   r)   r   )r2   r   r   r   rw   )r%   origry   r   s       r   test_ufunc_at_advancedz#TestDUFuncAt.test_ufunc_at_advanced  se    yy|DM!QqS&!##BFF+q1a&!biil3r   c                 b   t        j                  g dt        j                  d      j                               }t        j                  g dt        j                  d      j                               }| j	                  t         j
                        } |||d       | j                  |g d       y )Nr   i)r)   r+   r   r   fr   )r)   r   r   r   )r2   r   r   newbyteorderr   r   rw   )r%   r   r   r   s       r   test_ufunc_at_advanced_2z%TestDUFuncAt.test_ufunc_at_advanced_2  sv     BHHSM$>$>$@A,(B(B(DE##BFF+vua 5r   c                 B   t        j                  ddgt              }| j                  t         j                        }| j                  t              5   ||ddgd       d d d        | j                  |t        j                  ddgt                     y # 1 sw Y   7xY w)Nry   r)   r   r   )r2   r   objectr   r   r/   r   rw   )r%   r   r   s      r   test_ufunc_at_advanced_3z%TestDUFuncAt.test_ufunc_at_advanced_3  su    3(&1##BFF+{+6Aq61% ,#q(HI ,+s   BBc                     | j                  t        j                        }| j                  t              5   |t        j
                  d      dg       d d d        y # 1 sw Y   y xY w)Nr*   r)   )r   r2   modfr/   r   r   )r%   modf_ats     r   test_ufunc_at_advanced_4z%TestDUFuncAt.test_ufunc_at_advanced_4  sD    $$RWW-{+BIIbMA3' ,++s   AA%c                     | j                  t        j                        }t        j                  g d      } ||dgd       | j	                  |t        j                  g d             y )Nr   r   )r   r2   maximumr   rw   )r%   
maximum_atry   s      r   test_ufunc_at_advanced_5z%TestDUFuncAt.test_ufunc_at_advanced_5  sK    ''

3
HHY1qc1288I#67r   c                    t         j                  d   t         j                  d   z   }t         j                  t         j                  t         j                  t         j
                  t         j                  f}|D ]6  }|dv r		 t        t        j                  |             |D ]	  }t        j                  dd      j                  |      }t        j                  g d      j                  t         j                        }t        j                  g d|j                        }|j                         }t        ||      D ]  \  }	}
 |||	   |
      ||	<    | j!                  |      } ||||       t         j"                  j%                  ||       t        j&                  |g dk(        r
J  9 y # t        $ r Y Gw xY w)	N
AllIntegerFloat)er   r*   )r   r)   r   r+   )r)   rA   r+   r*   r   )r2   r   r   r   divideminimumr)  r   r   r   r   astyper   r   ru   zipr   rC   rD   r   )r%   dtypesr   r   rx   ry   indxsvalsr{   r  vr   s               r   test_ufunc_at_negative_indexesz+TestDUFuncAt.test_ufunc_at_negative_indexes  sT   l+bll7.CC&&"++ryy"**bjjIE288E?+  IIa$++E2077@xxQWW=668t,DAq"'Q"7HQK -  --e4E4(

--a:vve~5666    , s   F22	F?>F?c                    t        j                  d      }t        j                  d      }| j                  t         j                        }d}| j	                  t
        |      5   ||dg|       d d d        y # 1 sw Y   y xY w)N)r+   r+   r+   )r)   r+   r+   z1does not support ufunc with non-trivial signaturer   )r2   r   r   matmulr   r   )r%   ry   r   	matmul_atr   s        r    test_ufunc_at_not_none_signaturez-TestDUFuncAt.test_ufunc_at_not_none_signature  sc     GGIGGI&&ryy1	E##K9a!a  :99s   "A77B c                     t        j                  dt              }| j                  t         j                        }| j                  t              5   ||ddgddg       d d d        y # 1 sw Y   y xY w)Nr*   r   r   r)   )r2   r   strr   r   r/   r   r   s      r   test_ufunc_at_no_loop_for_opz)TestDUFuncAt.test_ufunc_at_no_loop_for_op  sT    ggb$##BFF+{+3AA' ,++s   A((A1c                     t        j                  dg      }| j                  t         j                        } ||dgdg       |d   dk(  sJ y )Nr   r   )r2   r   r   r  )r%   r   r  s      r   test_ufunc_at_output_castingz)TestDUFuncAt.test_ufunc_at_output_casting  sE    hhtn%%bhh/qcA31v{{r   c                     t        j                  d      }| j                  t         j                        }d}| j	                  t
        |      5   ||ddgg d       d d d        y # 1 sw Y   y xY w)NrA   z=operands could not be broadcast together with remapped shapesr   r)   r   )r2   r   r   r   r   r0   )r%   r   r   msgs       r   test_ufunc_at_broadcast_failurez,TestDUFuncAt.test_ufunc_at_broadcast_failure  sW    iil##BFF+ N##J43A	* 544s   A%%A.c                    t        j                  d      }t        d        }| j                  t	        |j
                        d       |j                  |ddg       | j                  t	        |j
                        d       y )NrA   c                     | dz   S )Nr)   r   )xs    r   incz/TestDUFuncAt.test_ufunc_at_dynamic.<locals>.inc  s    q5Lr   r   r)   r   )r2   r   r   r8   r\   rZ   rv   assertGreater)r%   r   rH  s      r   test_ufunc_at_dynamicz"TestDUFuncAt.test_ufunc_at_dynamic  sg    iil		 
	 	SYY+ 	sQF3syy>1-r   c                    t        j                  d      }| j                  t         j                        }t	        j
                  d      5 }t	        j                  dt                ||ddgd       d d d        | j                  t              d       | j                  dt        |d   j                               y # 1 sw Y   MxY w)	NrA   T)recordalwaysr   r   r*   z ufunc.at feature is experimental)r2   r   r   r   warningscatch_warningssimplefilterr	   rI  r\   assertInr>  message)r%   r   r   ws       r   "test_ufunc_at_experimental_warningz/TestDUFuncAt.test_ufunc_at_experimental_warning  s    iil##BFF+$$D1Q!!(,KL3A# 2
 	3q61%8#adll:KL 21s   'B>>CN)ro   rp   rq   r}   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  unittestexpectedFailurer   r#  r'  r+  r8  r<  r?  rA  rD  rJ  rT  r   r   r   rs   rs      s    /	"5H-443
%MS6j$QMI4 6 6J(878 ! !(+.
Mr   rs   c                   X    e Zd ZddZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zy)TestDUFuncReduceNc                    t         fd       }t        j                  d      t        j                  d      j                  dd      t        j                  d      j                  ddd      g}|D ]M  }t	        |j
                        D ]3  }|j                  ||||      } |||||      }	| j                  ||	       5 O y )Nc                 .    j                  | |||      S )N)axisr   initialreduce)ry   r[  r   r\  rx   s       r   fooz+TestDUFuncReduce._check_reduce.<locals>.foo  s$    <<%)&+(/   1 1r   rA   r   r+   (   )r   r2   r   rE   rangendimpy_funcrw   )
r%   rx   r   r\  r_  inputsr   r[  r{   r|   s
    `        r   _check_reducezTestDUFuncReduce._check_reduce  s    		1 
	1 IIaLIIaL  A&IIbM!!!Q*

 Eejj);;udE7C%ug6''#6 * r   c                    	
 t         fd       
	
 fd}dj                   d	t        j                  d|      j	                  ddd	      t        j                  d
|      g}|D ]h  t        dj                  dz         D ]:  }t        j                  t        j                        |      D ]   |        < dD ]   |        j y )Nc                 ,    j                  | |      S )N)r[  r\  r]  )ry   r[  r\  rx   s     r   r_  z0TestDUFuncReduce._check_reduce_axis.<locals>.foo*  s    <<g<>>r   c                  @   	 j                        }       }j                  ||       y # t        $ rc}j                  |j                  d          j                  t              5         }d d d        n# 1 sw Y   nxY wY d }~y Y d }~y d }~ww xY w)Nr   )rc  rw   r0   r8   rz   r   r   )	rz   r{   r|   r/  r   r[  exc_msgr_  r%   s	       r   _checkz3TestDUFuncReduce._check_reduce_axis.<locals>._check.  s    7;;ud3 %&''#6  +  G4++KAeT*C BAAAA+s,   1 	B5B/
B9	BB	BBzreduction operation 'z:' is not reorderable, so at most one axis may be specifiedr`  r   rA   r   r+   r*   r)   )r)r   N)	r   ro   r2   r   rE   ra  rb  	itertoolscombinations)r%   rx   r   r\  rj  rd  r  r   r[  ri  r_  s   `` `   @@@@r   _check_reduce_axisz#TestDUFuncReduce._check_reduce_axis(  s    		? 
	?		7 		7 +5>>*: ;G G IIb&..q!Q7IIb&
 E1ejj1n-%2253DJD5$' K .
 #ud# # r   c                      t        dd      t              }| j                  |       | j                  |t        j
                         y )Nint64(int64, int64)r   r[   r   )r   r   re  rn  r2   int64r4   s     r   test_add_reducez TestDUFuncReduce.test_add_reduceH  s;    <	/!<VD5!RXX6r   c                 T     t        dd      t              }| j                  |       y )Nrp  r)   rq  )r   r   re  )r%   dumuls     r   test_mul_reducez TestDUFuncReduce.test_mul_reduceM  s$    <	/!<VD5!r   c                      t        d      t              } t        d      t              }| j                  |       | j	                  |t
        j                         | j                  |       | j	                  |t
        j                         y Nrp  r   )r   r   r   re  rn  r2   rr  )r%   dusubdudivs      r   test_non_associative_reducez,TestDUFuncReduce.test_non_associative_reduceQ  sp    0	/070	/075!RXX65!RXX6r   c                 t     t        dd      t              }| j                  |t        j                         y )Nfloat64(float64, int64)r   rq  r   )r   r   re  r2   r   r4   s     r   test_reduce_dtypez"TestDUFuncReduce.test_reduce_dtypeY  s-    @	3a@H5

3r   c                      t        d      t              }| j                  |d       | j                  |t        j
                         y )Nrp  r*   )r\  r   )r   r   re  rn  r2   rr  )r%   dumins     r   test_min_reducez TestDUFuncReduce.test_min_reduce]  s>    0	/075"-RXX6r   c                 v     t        dd      t              }| j                  |t        j                  d       y )Nrp  r   rq  r   )r   r\  r   r   re  r2   rr  r4   s     r   test_add_reduce_initialz(TestDUFuncReduce.test_add_reduce_initialb  s/    <	/!<VD5#>r   c                 p     t        d      t              }| j                  |t        j                         y rx  r  r4   s     r   &test_add_reduce_no_initial_or_identityz7TestDUFuncReduce.test_add_reduce_no_initial_or_identityg  s+    0	/0851r   c                      t        dd      t              t        fd       }d}| j                  t        |      5   |d       d d d        y # 1 sw Y   y xY w)Nr}  r   rq  c                 &    j                  |       S r   r]  )ry   r5   s    r   r_  z0TestDUFuncReduce.test_invalid_input.<locals>.fooo  s    <<?"r   z-The first argument "array" must be array-likery   )r   r   r   r   r   )r%   r_  ri  r5   s      @r   test_invalid_inputz#TestDUFuncReduce.test_invalid_inputl  sT    @	3a@H		# 
	# B##K9H :99s   	AAc                     t        dd      t              t        fd       }t        j                  d      j                  ddd      }d	}|D ]/  }j                  ||      } |||      }| j                  ||       1 y )
Nrp  r   rq  c                 *    j                  | |      S N)r[  r]  ry   r[  r5   s     r   r_  z7TestDUFuncReduce.test_dufunc_negative_axis.<locals>.fooz      <<<--r   r`  rA   r   r+   )r   r   )r   r   )r   )r)   r   )r   r   r   r2   r   rE   r^  rw   )r%   r_  ry   casesr[  r{   r|   r5   s          @r   test_dufunc_negative_axisz*TestDUFuncReduce.test_dufunc_negative_axisw  s    <	/!<VD		. 
	. IIbM!!!Q*7D||At,Ha,C##Hc2 r   c                     t        dd      t              t        fd       }t        j                  d      j                  ddd      }d	}|D ],  }d
}| j                  t        |      5   |||       d d d        . d}|D ]*  }| j                  t        d      5   |||       d d d        , y # 1 sw Y   jxY w# 1 sw Y   CxY w)Nrp  r   rq  c                 *    j                  | |      S r  r]  r  s     r   r_  z6TestDUFuncReduce.test_dufunc_invalid_axis.<locals>.foo  r  r   r`  rA   r   r+   ))r   r   )r   r)   r   )r   r  )r   r   )r   r+   zduplicate value in 'axis')r   )r   r  zInvalid axis)r   r   r   r2   r   rE   r   r0   )r%   r_  ry   r  r[  rC  r5   s         @r   test_dufunc_invalid_axisz)TestDUFuncReduce.test_dufunc_invalid_axis  s    <	/!<VD		. 
	. IIbM!!!Q*?D-C''
C8At 98 
 "D''
NCAt DC 	 98
 DCs   ,
B2
B>2B;	>C	)NNr   )ro   rp   rq   re  rn  rs  rv  r{  r~  r  r  r  r  r  r  r   r   r   rX  rX    s?    7($@7
"747
?
2
	3r   rX  c                       e Zd Zd Zd Zd Zy)TestDUFuncPicklingc                 &   t        j                  |      }t        j                  |       d      }| j                  d|       | j	                  ||       t
        fd       } |d      }| j                  d|       | j	                  ||       y )N{   c                      |       S r   r   )rG  rebuilts    r   r_  z%TestDUFuncPickling.check.<locals>.foo  s    1:r   iA  )pickledumpsloadsr8   assertIsInstancer   )r%   identresult_typebufrk  r_  r  s         @r   checkzTestDUFuncPickling.check  s    ll5!,,s# CLa a- 
	 
	 Ha a-r   c                 j    t         d        }| j                  |t        t        j                  f       y )Nc                     | S r   r   x1s    r   r  z3TestDUFuncPickling.test_unrestricted.<locals>.ident      Ir   r  )r   r  r   r2   integerr%   r  s     r   test_unrestrictedz$TestDUFuncPickling.test_unrestricted  s/    		 
	 	

5sBJJ&7
8r   c                 V    t        dg      d        }| j                  |t               y )Nzfloat64(float64)c                     | S r   r   r  s    r   r  z1TestDUFuncPickling.test_restricted.<locals>.ident  r  r   r  )r   r  r   r  s     r   test_restrictedz"TestDUFuncPickling.test_restricted  s/    	&'	(	 
)	 	

5e
,r   N)ro   rp   rq   r  r  r  r   r   r   r  r    s    .$9-r   r  __main__) rl  r  rd   rN  numpyr2   numbar   r   numba.tests.supportr   r   numba.core.errorsr   r   r	   rU  numba.np.ufuncr
   numba.np.numpy_supportr   r   r   r   r   r   r   rs   rX  r  ro   mainr   r   r   <module>r     s         ! 9@ @  ! -!cI("3"3 cIZ~M8 ~MBCx CL-(*;*; -D zHMMO r   