[PyGiNaC-users] Python lists of GiNaC objects?
Status: Alpha
Brought to you by:
jbrandmeyer
From: Richard B. K. <kr...@gi...> - 2005-09-14 21:56:03
|
Hi, I've just tried to hack a continued fraction routine into PyGiNaC: diff -r1.7 numeric.cpp 17a18 > #include <cln/real.h> 111a113,146 > static PyObject* > do_contfrac(const GiNaC::numeric x, unsigned len) > { > boost::python::list result; > if (!x.is_real()) { > // Complex? > Py_INCREF(result.ptr()); > return result.ptr(); > } > cln::cl_R x_ = cln::the<cln::cl_R>(x.to_cl_N()); > bool negative = false; > if (cln::minusp(x_)) { > negative = true; > x_ = -x_; > } > for (unsigned r=0; r<len; ++r) { > // Split x into integral and fractional part. > cln::cl_R_div_t x_split = cln::floor2(x_); > if (negative) { > result.append(boost::python::object(GiNaC::ex(-GiNaC::numeric(x_split.quotient)))); > negative = false; > } else { > result.append(boost::python::object(GiNaC::ex(GiNaC::numeric(x_split.quotient)))); > } > x_ = x_split.remainder; > if (cln::zerop(x_)) > break; > // Invert x. > x_ = cln::recip(x_); > } > Py_INCREF(result.ptr()); > return result.ptr(); > } > 156a192 > def( "contfrac", &do_contfrac, "continued fraction of a real number."); However, when I use it: >>> l=contfrac(3.1415926,2) >>> print l [<cginac.numeric object at 0xb7dbf974>, <cginac.numeric object at 0xb7dbf9bc>] >>> print l[0] 3 >>> print l[1] 7 >>> print l[0:1] [<cginac.numeric object at 0xb7dbf974>] I wish to print [3,7]. What am I missing? Thanks in advance -richy. -- Richard B. Kreckel <http://www.ginac.de/~kreckel/> |