[Jython-checkins] jython: math.trunc support.
frank.wierzbicki
jython-checkins at python.org
Wed Apr 4 20:37:25 CEST 2012
http://hg.python.org/jython/rev/ba98e28a2dea
changeset: 6529:ba98e28a2dea
user: Frank Wierzbicki <fwierzbicki at gmail.com>
date: Wed Apr 04 11:37:09 2012 -0700
summary:
math.trunc support.
files:
src/org/python/core/PyFloat.java | 17 +++++++++++++++++
src/org/python/core/PyInteger.java | 10 ++++++++++
src/org/python/core/PyLong.java | 11 +++++++++++
src/org/python/core/PyObject.java | 11 +++++++++++
src/org/python/modules/math.java | 4 ++++
5 files changed, 53 insertions(+), 0 deletions(-)
diff --git a/src/org/python/core/PyFloat.java b/src/org/python/core/PyFloat.java
--- a/src/org/python/core/PyFloat.java
+++ b/src/org/python/core/PyFloat.java
@@ -9,6 +9,7 @@
import org.python.core.stringlib.InternalFormatSpecParser;
import java.io.Serializable;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import org.python.expose.ExposedClassMethod;
import org.python.expose.ExposedGet;
@@ -799,6 +800,22 @@
}
@Override
+ public PyObject __trunc__() {
+ return float___trunc__();
+ }
+
+ @ExposedMethod(doc = BuiltinDocs.float___trunc___doc)
+ final PyObject float___trunc__() {
+ if (value < Integer.MAX_VALUE) {
+ return new PyInteger((int)value);
+ } else if (value < Long.MAX_VALUE) {
+ return new PyLong((long)value);
+ }
+ BigDecimal d = new BigDecimal(value);
+ return new PyLong(d.toBigInteger());
+ }
+
+ @Override
public PyComplex __complex__() {
return new PyComplex(getValue(), 0.);
}
diff --git a/src/org/python/core/PyInteger.java b/src/org/python/core/PyInteger.java
--- a/src/org/python/core/PyInteger.java
+++ b/src/org/python/core/PyInteger.java
@@ -868,6 +868,16 @@
}
@Override
+ public PyObject __trunc__() {
+ return int___trunc__();
+ }
+
+ @ExposedMethod(doc = BuiltinDocs.int___trunc___doc)
+ final PyObject int___trunc__() {
+ return this;
+ }
+
+ @Override
public PyComplex __complex__() {
return new PyComplex(getValue(), 0.);
}
diff --git a/src/org/python/core/PyLong.java b/src/org/python/core/PyLong.java
--- a/src/org/python/core/PyLong.java
+++ b/src/org/python/core/PyLong.java
@@ -920,6 +920,17 @@
}
@Override
+ public PyObject __trunc__() {
+ return long___trunc__();
+ }
+
+ @ExposedMethod(doc = BuiltinDocs.long___trunc___doc)
+ final PyObject long___trunc__() {
+ return this;
+ }
+
+
+ @Override
public PyString __oct__() {
return long___oct__();
}
diff --git a/src/org/python/core/PyObject.java b/src/org/python/core/PyObject.java
--- a/src/org/python/core/PyObject.java
+++ b/src/org/python/core/PyObject.java
@@ -1800,6 +1800,17 @@
}
/**
+ * Equivalent to the standard Python __trunc__ method.
+ * Should only be overridden by numeric objects that can reasonably
+ * be truncated to an Integral.
+ *
+ * @return the Integral closest to x between 0 and x.
+ **/
+ public PyObject __trunc__() {
+ throw Py.AttributeError("__trunc__");
+ }
+
+ /**
* Equivalent to the standard Python __pos__ method.
*
* @return +this.
diff --git a/src/org/python/modules/math.java b/src/org/python/modules/math.java
--- a/src/org/python/modules/math.java
+++ b/src/org/python/modules/math.java
@@ -357,6 +357,10 @@
return new PyTuple(new PyFloat(x), new PyInteger(exponent));
}
+ public static PyObject trunc(PyObject number) {
+ return number.__getattr__("__trunc__").__call__();
+ }
+
public static double ldexp(double v, PyObject wObj) {
if (ZERO == v) {
return v; // can be negative zero
--
Repository URL: http://hg.python.org/jython
More information about the Jython-checkins
mailing list