Example #1
0
 /**
  *  @brief A C++ function with object arguments that broadcasts its arguments before
  *         passing them to the underlying C++ functor.
  */
 static object call(TUnaryFunctor & self, object const & input, object const & output)
 {
   dtype in_dtype = dtype::get_builtin<TArgument>();
   dtype out_dtype = dtype::get_builtin<TResult>();
   ndarray in_array = from_object(input, in_dtype, ndarray::ALIGNED);
   ndarray out_array = (output != object()) ?
     from_object(output, out_dtype, ndarray::ALIGNED | ndarray::WRITEABLE)
     : zeros(in_array.get_nd(), in_array.get_shape(), out_dtype);
   multi_iter iter = make_multi_iter(in_array, out_array);
   while (iter.not_done()) 
   {
     TArgument * argument = reinterpret_cast<TArgument*>(iter.get_data(0));
     TResult * result = reinterpret_cast<TResult*>(iter.get_data(1));
     *result = self(*argument);
     iter.next();
   } 
   return out_array.scalarize();
 }
Example #2
0
 static python::object 
 call(TBinaryFunctor & self, python::object const & input1, python::object const & input2, 
      python::object const & output) 
 {
   dtype in1_dtype = dtype::get_builtin<TArgument1>();
   dtype in2_dtype = dtype::get_builtin<TArgument2>();
   dtype out_dtype = dtype::get_builtin<TResult>();
   ndarray in1_array = from_object(input1, in1_dtype, ndarray::ALIGNED);
   ndarray in2_array = from_object(input2, in2_dtype, ndarray::ALIGNED);
   multi_iter iter = make_multi_iter(in1_array, in2_array);
   ndarray out_array = (output != python::object())
     ? from_object(output, out_dtype, ndarray::ALIGNED | ndarray::WRITEABLE)
     : zeros(iter.get_nd(), iter.get_shape(), out_dtype);
   iter = make_multi_iter(in1_array, in2_array, out_array);
   while (iter.not_done()) 
   {
     TArgument1 * argument1 = reinterpret_cast<TArgument1*>(iter.get_data(0));
     TArgument2 * argument2 = reinterpret_cast<TArgument2*>(iter.get_data(1));
     TResult * result = reinterpret_cast<TResult*>(iter.get_data(2));
     *result = self(*argument1, *argument2);
     iter.next();
   } 
   return out_array.scalarize();
 }
Example #3
0
inline ndarray from_object(python::object const & obj, ndarray::bitflag flags=ndarray::NONE)
{
  return from_object(obj, 0, 0, flags);
}
Example #4
0
inline ndarray from_object(python::object const & obj, dtype const & dt, 
                           int nd, ndarray::bitflag flags=ndarray::NONE)
{
  return from_object(obj, dt, nd, nd, flags);
}