[Python-checkins] r64516 - in python/trunk: Include/object.h Lib/test/test_builtin.py Lib/test/test_sys.py Misc/NEWS Objects/floatobject.c Objects/intobject.c Objects/longobject.c Objects/typeobject.c Python/bltinmodule.c

raymond.hettinger python-checkins at python.org
Wed Jun 25 00:46:08 CEST 2008


Author: raymond.hettinger
Date: Wed Jun 25 00:46:07 2008
New Revision: 64516

Log:
Revert 64424, 64438, and 64439.

Modified:
   python/trunk/Include/object.h
   python/trunk/Lib/test/test_builtin.py
   python/trunk/Lib/test/test_sys.py
   python/trunk/Misc/NEWS
   python/trunk/Objects/floatobject.c
   python/trunk/Objects/intobject.c
   python/trunk/Objects/longobject.c
   python/trunk/Objects/typeobject.c
   python/trunk/Python/bltinmodule.c

Modified: python/trunk/Include/object.h
==============================================================================
--- python/trunk/Include/object.h	(original)
+++ python/trunk/Include/object.h	Wed Jun 25 00:46:07 2008
@@ -267,9 +267,6 @@
 
 	/* Added in release 2.5 */
 	unaryfunc nb_index;
-
-	/* Added in release 2.6 */
-	unaryfunc nb_bin;
 } PyNumberMethods;
 
 typedef struct {

Modified: python/trunk/Lib/test/test_builtin.py
==============================================================================
--- python/trunk/Lib/test/test_builtin.py	(original)
+++ python/trunk/Lib/test/test_builtin.py	Wed Jun 25 00:46:07 2008
@@ -631,15 +631,6 @@
         self.assertEqual(hex(-16), '-0x10')
         self.assertEqual(hex(-16L), '-0x10L')
         self.assertRaises(TypeError, hex, {})
-        self.assertEqual(hex(3.125), '0x19 * 2.0 ** -3')
-        self.assertEqual(hex(0.0), '0x0 * 2.0 ** 0')
-        for sv in float('nan'), float('inf'), float('-inf'):
-            self.assertEqual(hex(sv), repr(sv))
-        for i in range(100):
-            x = random.expovariate(.05)
-            self.assertEqual(eval(hex(x)), x, (x, hex(x), eval(hex(x))))
-            self.assertEqual(eval(hex(-x)), -x)
-            self.assertEqual(hex(-x), ('-' + hex(x)))
 
     def test_id(self):
         id(None)
@@ -923,15 +914,6 @@
         self.assertEqual(oct(-100), '-0144')
         self.assertEqual(oct(-100L), '-0144L')
         self.assertRaises(TypeError, oct, ())
-        self.assertEqual(oct(3.125), '031 * 2.0 ** -3')
-        self.assertEqual(oct(0.0), '0 * 2.0 ** 0')
-        for sv in float('nan'), float('inf'), float('-inf'):
-            self.assertEqual(oct(sv), repr(sv))
-        for i in range(100):
-            x = random.expovariate(.05)
-            self.assertEqual(eval(oct(x)), x)
-            self.assertEqual(eval(oct(-x)), -x)
-            self.assertEqual(oct(-x), ('-' + oct(x)))
 
     def write_testfile(self):
         # NB the first 4 lines are also used to test input and raw_input, below
@@ -1484,15 +1466,6 @@
         self.assertEqual(bin(2**65-1), '0b' + '1' * 65)
         self.assertEqual(bin(-(2**65)), '-0b1' + '0' * 65)
         self.assertEqual(bin(-(2**65-1)), '-0b' + '1' * 65)
-        self.assertEqual(bin(3.125), '0b11001 * 2.0 ** -3')
-        self.assertEqual(bin(0.0), '0b0 * 2.0 ** 0')
-        for sv in float('nan'), float('inf'), float('-inf'):
-            self.assertEqual(bin(sv), repr(sv))
-        for i in range(100):
-            x = random.expovariate(.05)
-            self.assertEqual(eval(bin(x)), x)
-            self.assertEqual(eval(bin(-x)), -x)
-            self.assertEqual(bin(-x), ('-' + bin(x)))
 
 class TestSorted(unittest.TestCase):
 

Modified: python/trunk/Lib/test/test_sys.py
==============================================================================
--- python/trunk/Lib/test/test_sys.py	(original)
+++ python/trunk/Lib/test/test_sys.py	Wed Jun 25 00:46:07 2008
@@ -523,7 +523,7 @@
         len_typeobject = p + 2*l + 15*p + l + 4*p + l + 9*p +\
                          l + 11*p + self.align(4)
         self.check_sizeof(class_newstyle,
-                          h + len_typeobject + 42*p + 10*p + 3*p + 6*p)
+                          h + len_typeobject + 41*p + 10*p + 3*p + 6*p)
 
     def test_specialtypes(self):
         i = self.i

Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Wed Jun 25 00:46:07 2008
@@ -17,12 +17,6 @@
   slice(None, 10, -1).indices(10) returns (9, 9, -1) instead of (9,
   10, -1).
 
-- Issue 3008: hex(), oct(), and bin() can now create exact reprs 
-  for floats.
-
-- Make bin() implementation parallel oct() and hex().
-
-
 What's New in Python 2.6 beta 1?
 ================================
 

Modified: python/trunk/Objects/floatobject.c
==============================================================================
--- python/trunk/Objects/floatobject.c	(original)
+++ python/trunk/Objects/floatobject.c	Wed Jun 25 00:46:07 2008
@@ -405,11 +405,11 @@
    obj is not of float, int or long type, Py_NotImplemented is incref'ed,
    stored in obj, and returned from the function invoking this macro.
 */
-#define CONVERT_TO_DOUBLE(obj, dbl)					\
-	if (PyFloat_Check(obj))						\
-		dbl = PyFloat_AS_DOUBLE(obj);				\
-	else if (convert_to_double((PyObject **)&(obj), &(dbl)) < 0)	\
-		return (PyObject *)(obj);
+#define CONVERT_TO_DOUBLE(obj, dbl)			\
+	if (PyFloat_Check(obj))				\
+		dbl = PyFloat_AS_DOUBLE(obj);		\
+	else if (convert_to_double(&(obj), &(dbl)) < 0)	\
+		return obj;
 
 static int
 convert_to_double(PyObject **v, double *dbl)
@@ -1204,62 +1204,6 @@
 ">>> (-.25).as_integer_ratio()\n"
 "(-1, 4)");
 
-static PyObject *
-_float_to_base(PyFloatObject *v, unaryfunc int_to_base)
-{
-	PyObject *mant, *conv, *result;
-	double x, fr;
-	int i, exp, n;
-	char *conv_str;
-
-	CONVERT_TO_DOUBLE(v, x);
-	if (!Py_IS_FINITE(x))
-		return PyObject_Repr((PyObject *)v);
-	fr = frexp(x, &exp);
-	for (i=0; i<300 && fr != floor(fr) ; i++) {
-		fr *= 2.0;
-		exp--;
-	}
-	mant = PyLong_FromDouble(floor(fr));
-	if (mant == NULL)
-		return NULL;
-	conv = int_to_base(mant);
-	Py_DECREF(mant);
-	if (conv== NULL)
-		return NULL;
-	n = PyString_GET_SIZE(conv);
-	conv_str = PyString_AS_STRING(conv);
-	/* Remove the trailing 'L' if present */
-	if (n && conv_str[n-1] == 'L') {
-		PyObject *newconv = PySequence_GetSlice(conv, 0, -1);
-		Py_DECREF(conv);
-		if (newconv == NULL)
-			return NULL;
-		conv = newconv;
-		conv_str = PyString_AS_STRING(conv);
-	}
-	result = PyString_FromFormat("%s * 2.0 ** %d", conv_str, exp);
-	Py_DECREF(conv);
-	return result;
-}
-
-static PyObject *
-float_hex(PyFloatObject *v)
-{
-	return _float_to_base(v, PyLong_Type.tp_as_number->nb_hex);
-}
-
-static PyObject *
-float_oct(PyFloatObject *v)
-{
-	return _float_to_base(v, PyLong_Type.tp_as_number->nb_oct);
-}
-
-static PyObject *
-float_bin(PyFloatObject *v)
-{
-	return _float_to_base(v, PyLong_Type.tp_as_number->nb_bin);
-}
 
 static PyObject *
 float_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
@@ -1546,8 +1490,8 @@
 	float_trunc, 	/*nb_int*/
 	float_trunc, 	/*nb_long*/
 	float_float,	/*nb_float*/
-	(unaryfunc)float_oct,		/* nb_oct */
-	(unaryfunc)float_hex,		/* nb_hex */
+	0,		/* nb_oct */
+	0,		/* nb_hex */
 	0,		/* nb_inplace_add */
 	0,		/* nb_inplace_subtract */
 	0,		/* nb_inplace_multiply */
@@ -1563,8 +1507,6 @@
 	float_div,	/* nb_true_divide */
 	0,		/* nb_inplace_floor_divide */
 	0,		/* nb_inplace_true_divide */
-	0,		/* nb_index */
-	(unaryfunc)float_bin,		/* nb_bin */
 };
 
 PyTypeObject PyFloat_Type = {

Modified: python/trunk/Objects/intobject.c
==============================================================================
--- python/trunk/Objects/intobject.c	(original)
+++ python/trunk/Objects/intobject.c	Wed Jun 25 00:46:07 2008
@@ -934,12 +934,6 @@
 }
 
 static PyObject *
-int_bin(PyObject *v)
-{
-        return PyNumber_ToBase(v, 2);
-}
-
-static PyObject *
 int_oct(PyIntObject *v)
 {
 	return _PyInt_Format(v, 8, 0);
@@ -1237,7 +1231,6 @@
 	0,			/* nb_inplace_floor_divide */
 	0,			/* nb_inplace_true_divide */
 	(unaryfunc)int_int,	/* nb_index */
-	(unaryfunc)int_bin, 	/* nb_bin */
 };
 
 PyTypeObject PyInt_Type = {

Modified: python/trunk/Objects/longobject.c
==============================================================================
--- python/trunk/Objects/longobject.c	(original)
+++ python/trunk/Objects/longobject.c	Wed Jun 25 00:46:07 2008
@@ -3301,12 +3301,6 @@
 }
 
 static PyObject *
-long_bin(PyObject *v)
-{
-        return PyNumber_ToBase(v, 2);
-}
-
-static PyObject *
 long_oct(PyObject *v)
 {
 	return _PyLong_Format(v, 8, 1, 0);
@@ -3546,7 +3540,6 @@
 	0,				/* nb_inplace_floor_divide */
 	0,				/* nb_inplace_true_divide */
 	long_long,			/* nb_index */
-	long_bin,			/* nb_bin */
 };
 
 PyTypeObject PyLong_Type = {

Modified: python/trunk/Objects/typeobject.c
==============================================================================
--- python/trunk/Objects/typeobject.c	(original)
+++ python/trunk/Objects/typeobject.c	Wed Jun 25 00:46:07 2008
@@ -3743,7 +3743,6 @@
 		if (base->tp_flags & Py_TPFLAGS_HAVE_INDEX) {
 			COPYNUM(nb_index);
 		}
-		COPYNUM(nb_hex);
 	}
 
 	if (type->tp_as_sequence != NULL && base->tp_as_sequence != NULL) {
@@ -5136,7 +5135,6 @@
 SLOT0(slot_nb_int, "__int__")
 SLOT0(slot_nb_long, "__long__")
 SLOT0(slot_nb_float, "__float__")
-SLOT0(slot_nb_bin, "__bin__")
 SLOT0(slot_nb_oct, "__oct__")
 SLOT0(slot_nb_hex, "__hex__")
 SLOT1(slot_nb_inplace_add, "__iadd__", PyObject *, "O")
@@ -5804,8 +5802,6 @@
 	       "long(x)"),
 	UNSLOT("__float__", nb_float, slot_nb_float, wrap_unaryfunc,
 	       "float(x)"),
-	UNSLOT("__bin__", nb_bin, slot_nb_bin, wrap_unaryfunc,
-	       "bin(x)"),
 	UNSLOT("__oct__", nb_oct, slot_nb_oct, wrap_unaryfunc,
 	       "oct(x)"),
 	UNSLOT("__hex__", nb_hex, slot_nb_hex, wrap_unaryfunc,

Modified: python/trunk/Python/bltinmodule.c
==============================================================================
--- python/trunk/Python/bltinmodule.c	(original)
+++ python/trunk/Python/bltinmodule.c	Wed Jun 25 00:46:07 2008
@@ -211,24 +211,7 @@
 static PyObject *
 builtin_bin(PyObject *self, PyObject *v)
 {
-	PyNumberMethods *nb;
-	PyObject *res;
-
-	if ((nb = v->ob_type->tp_as_number) == NULL ||
-	    nb->nb_hex == NULL) {
-		PyErr_SetString(PyExc_TypeError,
-			   "bin() argument can't be converted to hex");
-		return NULL;
-	}
-	res = (*nb->nb_bin)(v);
-	if (res && !PyString_Check(res)) {
-		PyErr_Format(PyExc_TypeError,
-			     "__bin__ returned non-string (type %.200s)",
-			     res->ob_type->tp_name);
-		Py_DECREF(res);
-		return NULL;
-	}
-	return res;
+        return PyNumber_ToBase(v, 2);
 }
 
 PyDoc_STRVAR(bin_doc,


More information about the Python-checkins mailing list