Hello Robert,
> 1) Do you have any priorities for features you'd like to see sooner
> rather than later?
>
> 2) What would be *your* preferred syntax for declaring a templated,
> operator-overloading class in C++?

I just wanted to mention, how  easily C++ classes could be wrapped
using boost::python. Operator overloading works out-of-the-box and
other member functions could be declared very easily. Also,
constructors and destructors are handled automatically. The latter is
very important for wrapping one OO languange by another. For
maintainance reasons such a kind of wrapping mechanism would be a
necessary condition for the PolyBoRi Team to switch upstream from
boost::python the Cython.

Best regards,
  Alexander

PS: Here's a small excerpt from PolyBoRi's original python wrapper:
  boost::python::class_<BoolePolynomial>("Polynomial",
                                         "Construct a BoolePolynomial
object\
   in the given Boolean polynomial ring.")
  .def(init<>())
  .def(init<const BoolePolynomial &>())
  .def("__hash__", &BoolePolynomial::hash, "Fast hash code, based on
the \
pointer to the underlying ZDD node. \nIt may vary from runtime to
runtime.")
  .def("__len__", &BoolePolynomial::length, "Number of terms")
  .def("terms",
       range(&BoolePolynomial::orderedBegin,
&BoolePolynomial::orderedEnd))
  .def("__pow__",poly_power)

  .def(self*BooleMonomial())
  .def(self+BooleVariable())
  .def(self-BooleVariable())
  .def(BooleVariable()+self)
  .def(BooleVariable()-self)
  .def(self+BooleMonomial())
  .def(self-BooleMonomial())
  .def(BooleMonomial()+self)
  .def(BooleMonomial()-self)
  .def(BooleMonomial()*self)
  .def(self*self)
  .def(self*BooleVariable())
  .def(self/int())
  .def(self/BooleMonomial())
  .def(self/self)
  .def(self%BooleVariable())
  .def(self%BooleMonomial())
  .def(self%self)
  .def(int()+self)
  .def(int()-self)
  .def(self+int())
  .def(self-int())
  .def(self+BooleVariable())
  .def(self-BooleVariable())
  .def(self==self)
  .def(self!=int())
  .def(self==int())
  .def(self==bool())
  .def(self!=self)
  .def(self!=bool())
  .def(self+self)
  .def(self-self)
  .def("deg", &BoolePolynomial::deg, "Polynomial degree")
   .def("lead", &BoolePolynomial::lead, "Leading term with respect to
current ordering")
  .def("set", set, "Convert to BooleSet")
  .def("ring", &BoolePolynomial::ring, "Get corresponding ring")
   .def("has_constant_part", &BoolePolynomial::hasConstantPart,
       "Check, whether Polynomials owns constant term")
  .def("__str__", streamable_as_str<BoolePolynomial>)
  .def("__repr__", streamable_as_str<BoolePolynomial>);


--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-devel@googlegroups.com
To unsubscribe from this group, send email to 
sage-devel-unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to