• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright Jim Bosch & Ankit Daftery 2010-2012.
2 // Copyright Stefan Seefeld 2016.
3 // Distributed under the Boost Software License, Version 1.0.
4 // (See accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
6 
7 #include <boost/python/numpy.hpp>
8 
9 namespace p = boost::python;
10 namespace np = boost::python::numpy;
11 
12 struct UnaryCallable
13 {
14   typedef double argument_type;
15   typedef double result_type;
16 
operator ()UnaryCallable17   double operator()(double r) const { return r * 2;}
18 };
19 
20 struct BinaryCallable
21 {
22   typedef double first_argument_type;
23   typedef double second_argument_type;
24   typedef double result_type;
25 
operator ()BinaryCallable26   double operator()(double a, double b) const { return a * 2 + b * 3;}
27 };
28 
BOOST_PYTHON_MODULE(ufunc_ext)29 BOOST_PYTHON_MODULE(ufunc_ext)
30 {
31   np::initialize();
32   p::class_<UnaryCallable>("UnaryCallable")
33     .def("__call__", np::unary_ufunc<UnaryCallable>::make());
34   p::class_< BinaryCallable>("BinaryCallable")
35     .def("__call__", np::binary_ufunc<BinaryCallable>::make());
36 }
37