summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
authorTravis Oliphant <oliphant@enthought.com>2006-07-26 16:55:07 +0000
committerTravis Oliphant <oliphant@enthought.com>2006-07-26 16:55:07 +0000
commit44011bc6f9fadaef25dacf127f46ca66c2f04df3 (patch)
treee425546346747cba6b2d41e3fcd64d6eeede2383 /numpy
parentc47dfadf925b567ad0ff7dc0331afa8247160240 (diff)
downloadnumpy-44011bc6f9fadaef25dacf127f46ca66c2f04df3.tar.gz
Merge non-white space changes from ver1.0 branch. Change to Py_ssize_t and better error on align=True with array_descr conversion.
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/src/arrayobject.c45
-rw-r--r--numpy/core/src/arraytypes.inc.src3
-rw-r--r--numpy/core/src/scalartypes.inc.src5
3 files changed, 35 insertions, 18 deletions
diff --git a/numpy/core/src/arrayobject.c b/numpy/core/src/arrayobject.c
index 836fa2e8b..854a848a2 100644
--- a/numpy/core/src/arrayobject.c
+++ b/numpy/core/src/arrayobject.c
@@ -4702,7 +4702,7 @@ _IsWriteable(PyArrayObject *ap)
{
PyObject *base=ap->base;
void *dummy;
- int n;
+ Py_ssize_t n;
/* If we own our own data, then no-problem */
if ((base == NULL) || (ap->flags & OWNDATA)) return TRUE;
@@ -5565,8 +5565,8 @@ array_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds)
dims.ptr[0] = (buffer.len-(intp)offset) / itemsize;
}
else if ((strides.ptr == NULL) && \
- buffer.len < itemsize* \
- PyArray_MultiplyList(dims.ptr, dims.len)) {
+ (buffer.len < ((intp)itemsize)* \
+ PyArray_MultiplyList(dims.ptr, dims.len))) {
PyErr_SetString(PyExc_TypeError,
"buffer is too small for " \
"requested array");
@@ -5684,7 +5684,7 @@ array_strides_set(PyArrayObject *self, PyObject *obj)
PyArrayObject *new;
intp numbytes=0;
intp offset=0;
- int buf_len;
+ Py_ssize_t buf_len;
char *buf;
if (!PyArray_IntpConverter(obj, &newstrides) || \
@@ -5874,7 +5874,7 @@ static int
array_data_set(PyArrayObject *self, PyObject *op)
{
void *buf;
- int buf_len;
+ Py_ssize_t buf_len;
int writeable=1;
if (PyObject_AsWriteBuffer(op, &buf, &buf_len) < 0) {
@@ -7832,7 +7832,7 @@ PyArray_FromInterface(PyObject *input)
PyArrayObject *ret;
PyArray_Descr *type=NULL;
char *data;
- int buffer_len;
+ Py_ssize_t buffer_len;
int res, i, n;
intp dims[MAX_DIMS], strides[MAX_DIMS];
int dataflags = BEHAVED;
@@ -7867,7 +7867,7 @@ PyArray_FromInterface(PyObject *input)
}
attr = PyDict_GetItemString(inter, "offset");
if (attr) {
- long num = PyInt_AsLong(attr);
+ longlong num = PyLong_AsLongLong(attr);
if (error_converting(num)) {
PyErr_SetString(PyExc_TypeError,
"offset "\
@@ -10445,13 +10445,30 @@ arraydescr_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds)
conv = _convert_from_dict(odescr, 1);
else if PyList_Check(odescr) {
conv = _convert_from_list(odescr, 1, 0);
- if ((conv == NULL) &&
- (!PyErr_Occurred())) {
- PyErr_SetString(PyExc_ValueError,
- "cannot specify align=1 "\
- "with array_descriptor "\
- "specification of the data-"\
- "type.");
+ if (conv == NULL) {
+ /* There is an errror. Possibly it's
+ because we have an array_descriptor.
+ Try converting from an array_descriptor.
+ If that fails then raise the old error.
+ */
+ PyObject *type, *value, *traceback;
+ PyArray_Descr *temp;
+ PyErr_Fetch(&type, &value, &traceback);
+ temp = _convert_from_array_descr(odescr);
+ if (!PyErr_Occurred()) {
+ Py_DECREF(temp);
+ Py_XDECREF(type);
+ Py_XDECREF(value);
+ Py_XDECREF(traceback);
+ PyErr_SetString(PyExc_ValueError,
+ "align cannot be True" \
+ " with array_descriptor " \
+ "specification.");
+ }
+ else {
+ PyErr_Restore(type, value, traceback);
+ }
+ return NULL;
}
}
else if PyString_Check(odescr)
diff --git a/numpy/core/src/arraytypes.inc.src b/numpy/core/src/arraytypes.inc.src
index 6e81c7659..a3aa90d4a 100644
--- a/numpy/core/src/arraytypes.inc.src
+++ b/numpy/core/src/arraytypes.inc.src
@@ -554,7 +554,7 @@ VOID_setitem(PyObject *op, char *ip, PyArrayObject *ap)
/* Default is to use buffer interface to set item */
{
const void *buffer;
- int buflen;
+ Py_ssize_t buflen;
if (descr->hasobject) {
PyErr_SetString(PyExc_ValueError,
"tried to set void-array with object"
@@ -1370,7 +1370,6 @@ static Bool
/**end repeat**/
-
#define WHITESPACE " \t\n\r\v\f"
#define WHITELEN 6
diff --git a/numpy/core/src/scalartypes.inc.src b/numpy/core/src/scalartypes.inc.src
index 355b1047c..efd0816e4 100644
--- a/numpy/core/src/scalartypes.inc.src
+++ b/numpy/core/src/scalartypes.inc.src
@@ -884,7 +884,8 @@ gentype_real_get(PyObject *self)
if (PyArray_IsScalar(self, ComplexFloating)) {
typecode = _realdescr_fromcomplexscalar(self, &typenum);
- ret = PyArray_Scalar(scalar_value(self, NULL), typecode, NULL);
+ ret = PyArray_Scalar(scalar_value(self, NULL),
+ typecode, NULL);
Py_DECREF(typecode);
return ret;
}
@@ -1226,7 +1227,7 @@ gentype_reduce(PyObject *self, PyObject *args)
{
PyObject *ret=NULL, *obj=NULL, *mod=NULL;
const char *buffer;
- int buflen;
+ Py_ssize_t buflen;
/* Return a tuple of (callable object, arguments) */