
    wg                         d Z ddlZddlmZmZ ddlmZmZ ddl	Z	 ed       G d de             Z
edk(  r e	j                          yy)	zExample: sum each row using guvectorize

See Numpy documentation for detail about gufunc:
    http://docs.scipy.org/doc/numpy/reference/c-api.generalized-ufuncs.html
    N)guvectorizecuda)skip_on_cudasimCUDATestCasez&ufunc API unsupported in the simulatorc                   *    e Zd Zd Zd Zd Zd Zd Zy)TestGUFuncScalarc                    t        dgdd      d        }t        j                  dt        j                        j	                  dd	      }t        j
                  d|j                        }t        j
                  d|j                        }t        j                  |      }t        j                  |d
      } |||        ||      }|j                  |       |j                  |       t        |j                  d         D ]R  }| j                  ||   ||   j                         k(         | j                  ||   ||   j                         k(         T y )Nzvoid(int32[:], int32[:])z(n)->()r   targetc                 \    d}t        | j                  d         D ]
  }|| |   z  } ||d<   y )Ng        r   rangeshape)inpouttmpis       o/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/numba/cuda/tests/cudapy/test_gufunc_scalar.pysum_rowz;TestGUFuncScalar.test_gufunc_scalar_output.<locals>.sum_row   s9    C399Q<( s1vCF    i,  dtyped      F)copyr   r   )r   nparangeint32reshapeemptyr   r   	to_devicecopy_to_hostr   r   
assertTruesum)	selfr   r   out1out2dev_inpdev_out1dev_out2r   s	            r   test_gufunc_scalar_outputz*TestGUFuncScalar.test_gufunc_scalar_output   s    
019V	L	 
M	 ii288,44S!< xx399-xx399-..>>$U3X&7#d#d# syy|$ 	5AOODGs1vzz|34OODGs1vzz|34	5r   c                     t        dgdd      d        }| j                   |d      d       t        j                  d      j	                  t        j
                        }| j                   ||      |dz         y )	Nzvoid(int32, int32[:])z()->()r   r
   c                     | dz  |d<   y )N   r    )r   r   s     r   twicez=TestGUFuncScalar.test_gufunc_scalar_output_bug.<locals>.twice:   s    1WCFr   
      r/   )r   assertEqualr   r   astyper   assertPreciseEqual)r&   r1   args      r   test_gufunc_scalar_output_bugz.TestGUFuncScalar.test_gufunc_scalar_output_bug8   sl    	-.	H	 
I	 	rB'iim""288,c
C!G4r   c           	         t        dgdd      d        }t        j                  d      }t        j                  dt        j                        j	                  d	d      }t        j                  dt        j                        j	                  d	d      } ||||      }t        d	      D ]=  }t        d      D ]-  }||||f   z  |||f   z   }| j                  ||||f   k(         / ? t        j                  dt        j                        }t        j                  dt        j                        } ||||      }t        d      D ]-  }|||   z  ||   z   }| j                  |||   k(  |||   f       / t        j                  d	t        j                        }t        j                  dt        j                        j	                  d	d      }t        j                  dt        j                        j	                  d	d      } ||||      }t        d	      D ]H  }t        d      D ]8  }||   |||f   z  |||f   z   }| j                  ||||f   k(  ||||f   f       : J y )
Nz1void(float32, float32[:], float32[:], float32[:])z(),(t),(t)->(t)r   r
   c                 `    t        |j                  d         D ]  }| ||   z  ||   z   ||<    y Nr   r   )axyr   r   s        r   saxpyz>TestGUFuncScalar.test_gufunc_scalar_input_saxpy.<locals>.saxpyC   s9     399Q<( )QqTAaDA)r   r/   r2   r      )r   r   float32r   r    r   r$   )	r&   r?   AXYr   jr   exps	            r   test_gufunc_scalar_input_saxpyz/TestGUFuncScalar.test_gufunc_scalar_input_saxpyB   s5   	IJ&v
7	)
7	) JJqMIIb

+33Aq9IIb

+33Aq9Aq!nq 	2A1X 2!AqD'kAadG+s1a4y 012	2
 IIb

+IIb

+Aq!nr 	:Aad(QqT/COOC3q6MCQ=9	: IIarzz*IIb

+33Aq9IIb

+33Aq9Aq!nq 	DA1X DdQq!tWnqAw.s1a4y 03AqD	2BCD	Dr   c                 l   t        dgdd      d        }t        j                  d      }t        j                  d      j	                  t        j
                        } |||      }t        j                  j                  |||z         t        j                  |      }t        j                  |      }| j                  |j                  t        j                         | j                  t              5 } |||       d d d        | j                  dt!        j"                               y # 1 sw Y   /xY w)	Nzvoid(int32, int32[:], int32[:])z(),(t)->(t)r   r
   c                 N    t        |j                        D ]  }| ||   z  ||<    y )N)r   size)r<   br   r   s       r   fooz5TestGUFuncScalar.test_gufunc_scalar_cast.<locals>.foof   s,     166] "QqTA"r   r/   r2   zdoes not support .astype())r   r   int64r   r5   r   testingassert_equalarrayr   r"   r4   r   assertRaises	TypeErrorassertInstr	exception)r&   rL   r<   rK   r   daraisess          r   test_gufunc_scalar_castz(TestGUFuncScalar.test_gufunc_scalar_caste   s    	78-"
$	"
$	" HHQKIIbM  *!Qi


QU+ HHQK^^A288,y) 	VAJ	 	2C8H8H4IJ	 	s   2
D**D3c                 J   t        dgdd      d        }t        j                  g dt        j                        }t        j                  dgt        j                        }t        j                  d	t        j                        }|j                         }||z   } ||||
       t        j                  j                  ||       t        j                  g ddz  t        j                        j                  dd	      }t        j                  ddgt        j                        }t        j                  dt        j                        }|j                         }|d   |d   z   |d<   |d   |d   z   |d<    ||||       t        j                  j                  ||       y )Nz void(int32[:],int32[:],int32[:])z(n),()->(n)r   r
   c                 Z    t        | j                  d         D ]  }| |   |d   z   ||<    y r;   r   )r=   r>   resr   s       r   gufunczFTestGUFuncScalar.test_gufunc_old_style_scalar_as_array.<locals>.gufunc|   s5     1771:& %1!A%r   )   r/   r      r   r/   r^   r   r2   )r/   r^   r   r]   )	r   r   rP   r   zerosr   rN   assert_almost_equalr    )r&   r\   r<   rK   r[   expecteds         r   %test_gufunc_old_style_scalar_as_arrayz6TestGUFuncScalar.test_gufunc_old_style_scalar_as_arrayz   sA   	89="
$	%
$	%
 HH\2HHaS)hhq)88:q5q!


&&x5 HH\A%RXX6>>q!DHHaWBHH-hhvRXX.88:dQqTkdQqTkq!S


&&x5r   N)__name__
__module____qualname__r,   r8   rG   rX   rb   r0   r   r   r   r      s    (5T5!DFK*!6r   r   __main__)__doc__numpyr   numbar   r   numba.cuda.testingr   r   unittestr   rc   mainr0   r   r   <module>rm      sW   
  # <  9:N6| N6 ;N6b zHMMO r   