summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTravis Oliphant <oliphant@enthought.com>2005-10-10 02:08:44 +0000
committerTravis Oliphant <oliphant@enthought.com>2005-10-10 02:08:44 +0000
commit9eda64cb9e3ca4114d716ba9c33f47a79185fe2f (patch)
tree6ee719d1a146cf6da722cb50a8d2818ee9013c24
parent150f901dceea1f613553d9be6fb475a2c35b4119 (diff)
downloadnumpy-9eda64cb9e3ca4114d716ba9c33f47a79185fe2f.tar.gz
Infinite recursion for long doubles.
-rw-r--r--scipy/base/src/arraytypes.inc.src3
-rw-r--r--scipy/base/src/scalartypes.inc.src97
2 files changed, 32 insertions, 68 deletions
diff --git a/scipy/base/src/arraytypes.inc.src b/scipy/base/src/arraytypes.inc.src
index 0f863c658..6d449b867 100644
--- a/scipy/base/src/arraytypes.inc.src
+++ b/scipy/base/src/arraytypes.inc.src
@@ -106,7 +106,7 @@ static PyObject *
/**begin repeat
-#TYP=CFLOAT,CDOUBLE, CLONGDOUBLE#
+#TYP=CFLOAT, CDOUBLE, CLONGDOUBLE#
#typ=float, double, longdouble#
#kind=CFloat, CDouble, CLongDouble#
*/
@@ -182,6 +182,7 @@ CLONGDOUBLE_getitem(char *ip, PyArrayObject *ap)
}
+
/* UNICODE */
static PyObject *
UNICODE_getitem(char *ip, PyArrayObject *ap)
diff --git a/scipy/base/src/scalartypes.inc.src b/scipy/base/src/scalartypes.inc.src
index c844b3236..11ea66fb7 100644
--- a/scipy/base/src/scalartypes.inc.src
+++ b/scipy/base/src/scalartypes.inc.src
@@ -175,38 +175,20 @@ gentype_generic_method(PyObject *self, PyObject *args, PyObject *kwds,
static PyObject *
gentype_@name@(PyObject *m1, PyObject *m2)
{
- PyObject *arr, *ret, *tup;
-
+ PyObject *arr, *ret=NULL, *tup;
+
if (!PyArray_IsScalar(m1, Generic)) {
if (PyArray_Check(m1)) {
ret = m1->ob_type->tp_as_number->nb_@name@(m1,m2);
}
- else if ((m1->ob_type->tp_as_number == NULL) ||
- (m1->ob_type->tp_as_number->nb_@name@ == NULL)) {
- arr = PyArray_FromScalar(m2, NULL);
- if (arr == NULL) return NULL;
- ret = arr->ob_type->tp_as_number->nb_@name@(m1, arr);
- Py_DECREF(arr);
- }
- else {
- /* Convert m2 to a Python object and then try */
- tup = PyTuple_New(0);
- arr = gentype_generic_method(m2, tup, NULL,
- "toscalar");
- Py_DECREF(tup);
- if (arr == NULL) return NULL;
- ret = PyNumber_@PYNAME@(m1, arr);
- if (ret==NULL) {
- PyObject *newarr;
- PyErr_Clear();
- /* Convert object to Array scalar and try again */
- newarr = PyArray_FromAny(m1, NULL, 0, 0, 0);
- if (newarr!=NULL) {
- ret = newarr->ob_type->tp_as_number->nb_@name@(m1, newarr);
- Py_DECREF(newarr);
- }
+ else {
+ PyObject *newarr;
+ /* Convert object to Array scalar and try again */
+ newarr = PyArray_FromAny(m1, NULL, 0, 0, 0);
+ if (newarr!=NULL) {
+ ret = newarr->ob_type->tp_as_number->nb_@name@(m1, newarr);
+ Py_DECREF(newarr);
}
- Py_DECREF(arr);
}
return ret;
}
@@ -214,31 +196,14 @@ gentype_@name@(PyObject *m1, PyObject *m2)
if (PyArray_Check(m2)) {
ret = m2->ob_type->tp_as_number->nb_@name@(m1,m2);
}
- else if ((m2->ob_type->tp_as_number == NULL) ||
- (m2->ob_type->tp_as_number->nb_@name@ == NULL)) {
- arr = PyArray_FromScalar(m1, NULL);
- if (arr == NULL) return NULL;
- ret = arr->ob_type->tp_as_number->nb_@name@(arr, m2);
- Py_DECREF(arr);
- }
else {
- /* Convert m1 to a Python object and then try */
- tup = PyTuple_New(0);
- arr = gentype_generic_method(m1, tup, NULL,
- "toscalar");
- Py_DECREF(tup);
- ret = PyNumber_@PYNAME@(arr,m2);
- if (ret==NULL) {
- PyObject *newarr;
- PyErr_Clear();
- /* Convert object to Array and try again */
- newarr = PyArray_FromAny(m1, NULL, 0, 0, 0);
- if (newarr!=NULL) {
- ret = newarr->ob_type->tp_as_number->nb_@name@(newarr, m2);
- Py_DECREF(newarr);
- }
+ PyObject *newarr;
+ /* Convert object to Array and try again */
+ newarr = PyArray_FromAny(m1, NULL, 0, 0, 0);
+ if (newarr!=NULL) {
+ ret = newarr->ob_type->tp_as_number->nb_@name@(newarr, m2);
+ Py_DECREF(newarr);
}
- Py_DECREF(arr);
}
return ret;
}
@@ -259,7 +224,7 @@ gentype_@name@(PyObject *m1, PyObject *m2)
static PyObject *
gentype_multiply(PyObject *m1, PyObject *m2)
{
- PyObject *arr, *ret, *tup;
+ PyObject *arr, *ret=NULL, *tup;
long repeat;
if (!PyArray_IsScalar(m1, Generic)) {
@@ -283,14 +248,13 @@ gentype_multiply(PyObject *m1, PyObject *m2)
}
}
else {
- /* Convert m2 to a Python object */
- tup = PyTuple_New(0);
- arr = gentype_generic_method(m2, tup, NULL,
- "toscalar");
- Py_DECREF(tup);
- if (arr == NULL) return NULL;
- ret = PyNumber_Multiply(m1, arr);
- Py_DECREF(arr);
+ PyObject *newarr;
+ /* Convert object to Array scalar and try again */
+ newarr = PyArray_FromAny(m1, NULL, 0, 0, 0);
+ if (newarr!=NULL) {
+ ret = newarr->ob_type->tp_as_number->nb_multiply(m1, newarr);
+ Py_DECREF(newarr);
+ }
}
return ret;
}
@@ -315,14 +279,13 @@ gentype_multiply(PyObject *m1, PyObject *m2)
}
}
else {
- /* Convert m1 to a Python object */
- tup = PyTuple_New(0);
- arr = gentype_generic_method(m1, tup, NULL,
- "toscalar");
- Py_DECREF(tup);
- if (arr == NULL) return NULL;
- ret = PyNumber_Multiply(arr, m2);
- Py_DECREF(arr);
+ PyObject *newarr;
+ /* Convert object to Array scalar and try again */
+ newarr = PyArray_FromAny(m1, NULL, 0, 0, 0);
+ if (newarr!=NULL) {
+ ret = newarr->ob_type->tp_as_number->nb_multiply(m1, newarr);
+ Py_DECREF(newarr);
+ }
}
return ret;
}