#include #include #include #include #include #include #include #include #include #include #include "mismatch.H" #include "vector_arith.hpp" #include "Scalar.H" typedef std::complex Complex; typedef std::complex ComplexI; using namespace boost::python; using namespace vec; // ordinary vector #define VECIMP(TYPE, PROXY) \ class_ >("vector_"#TYPE) \ .def(init()) \ .def(init()) \ .def(init&>()) \ .def("size", &std::vector::size) \ .def("resize", (void (std::vector::*)(size_t, const TYPE&) )&std::vector::resize) \ .def("resize", (void (std::vector::*)(size_t) )&std::vector::resize) \ .def(self + self) \ .def(self - self) \ .def(self * self) \ .def(self / self) \ .def(self + TYPE()) \ .def(self - TYPE()) \ .def(self * TYPE()) \ .def(self / TYPE()) \ .def(self + std::complex()) \ .def(self - std::complex()) \ .def(self * std::complex()) \ .def(self / std::complex()) \ .def(self += self) \ .def(self -= self) \ .def(self *= self) \ .def(self /= self) \ .def(self += TYPE()) \ .def(self -= TYPE()) \ .def(self *= TYPE()) \ .def(self /= TYPE()) \ .def(vector_indexing_suite, PROXY >()) \ ; // vector #define VECCMPLXIMP(TYPE, PROXY) \ class_ >("vector_"#TYPE) \ .def(init()) \ .def(init()) \ .def(init&>()) \ .def("size", &std::vector::size) \ .def("resize", (void (std::vector::*)(size_t, const TYPE&) )&std::vector::resize) \ .def("resize", (void (std::vector::*)(size_t) )&std::vector::resize) \ .def(self + self) \ .def(self - self) \ .def(self * self) \ .def(self / self) \ .def(self + TYPE()) \ .def(self - TYPE()) \ .def(self * TYPE()) \ .def(self / TYPE()) \ .def(self + Scalar::type()) \ .def(self - Scalar::type()) \ .def(self * Scalar::type()) \ .def(self / Scalar::type()) \ .def(self + other::type> >()) \ .def(other::type> >() + self) \ .def(self - other::type> >()) \ .def(other::type> >() - self) \ .def(self * other::type> >()) \ .def(other::type> >() * self) \ .def(self / other::type> >()) \ .def(other::type> >() / self) \ .def(self += self) \ .def(self -= self) \ .def(self *= self) \ .def(self /= self) \ .def(self += other::type> >()) \ .def(self -= other::type> >()) \ .def(self *= other::type> >()) \ .def(self /= other::type> >()) \ .def(self += TYPE()) \ .def(self -= TYPE()) \ .def(self *= TYPE()) \ .def(self /= TYPE()) \ .def(self += Scalar::type()) \ .def(self -= Scalar::type()) \ .def(self *= Scalar::type()) \ .def(self /= Scalar::type()) \ .def(vector_indexing_suite, PROXY >()) \ ; BOOST_PYTHON_MODULE(vector) { VECIMP (double, false); VECCMPLXIMP (Complex, true); class_("CInt") .def(init()) .def ("real", &ComplexI::real) .def ("imag", &ComplexI::imag) ; VECIMP (int, false); VECCMPLXIMP (ComplexI, true); }