summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
authorTravis Oliphant <oliphant@enthought.com>2009-11-23 22:01:54 +0000
committerTravis Oliphant <oliphant@enthought.com>2009-11-23 22:01:54 +0000
commit9d658f98abd143a5f21d32ae326201029c9f40d3 (patch)
treefe08341a0f6975024075f79825cb7e45fe8bc829 /numpy
parentdf1edd4f4ec28fd14db64ce565b49c0e1b0f6bb9 (diff)
downloadnumpy-9d658f98abd143a5f21d32ae326201029c9f40d3.tar.gz
numpy.datetime --> numpy.datetime_ and fix Descr_FromScalar to correctly add DateTime Meta data.
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/numerictypes.py8
-rw-r--r--numpy/core/src/multiarray/arraytypes.c.src2
-rw-r--r--numpy/core/src/multiarray/descriptor.c10
-rw-r--r--numpy/core/src/multiarray/scalarapi.c36
4 files changed, 43 insertions, 13 deletions
diff --git a/numpy/core/numerictypes.py b/numpy/core/numerictypes.py
index 0767d32ea..f9ddf8ce1 100644
--- a/numpy/core/numerictypes.py
+++ b/numpy/core/numerictypes.py
@@ -37,7 +37,7 @@ Exported symbols include:
float_, complex_,
longfloat, clongfloat,
- datetime, timedelta, (these inherit from timeinteger which inherits from signedinteger)
+ datetime_, timedelta_, (these inherit from timeinteger which inherits from signedinteger)
As part of the type-hierarchy: xx -- is bit-width
@@ -373,13 +373,15 @@ def _set_up_aliases():
('unicode_', 'unicode'),
('str_', 'string'),
('string_', 'string'),
- ('object_', 'object')]
+ ('object_', 'object'),
+ ('timedelta_', 'timedelta'),
+ ('datetime_', 'datetime')]
for alias, t in type_pairs:
allTypes[alias] = allTypes[t]
sctypeDict[alias] = sctypeDict[t]
# Remove aliases overriding python types and modules
for t in ['ulong', 'object', 'unicode', 'int', 'long', 'float',
- 'complex', 'bool', 'string']:
+ 'complex', 'bool', 'string', 'datetime', 'timedelta']:
try:
del allTypes[t]
del sctypeDict[t]
diff --git a/numpy/core/src/multiarray/arraytypes.c.src b/numpy/core/src/multiarray/arraytypes.c.src
index 2cac3c04e..bffe9f332 100644
--- a/numpy/core/src/multiarray/arraytypes.c.src
+++ b/numpy/core/src/multiarray/arraytypes.c.src
@@ -3359,7 +3359,7 @@ set_typeinfo(PyObject *dict)
(PyObject *)\
&Py@Name@ArrType_Type));
Py_DECREF(s);
- /**end repeat**/
+/**end repeat**/
PyDict_SetItemString(infodict, "OBJECT",
s=Py_BuildValue("ciiiO", PyArray_OBJECTLTR,
diff --git a/numpy/core/src/multiarray/descriptor.c b/numpy/core/src/multiarray/descriptor.c
index c2087a77b..664ed94c9 100644
--- a/numpy/core/src/multiarray/descriptor.c
+++ b/numpy/core/src/multiarray/descriptor.c
@@ -621,8 +621,6 @@ _convert_from_datetime_tuple(PyObject *obj)
PyObject *dt_tuple;
PyObject *dt_cobj;
PyObject *datetime;
- static PyObject *freq_key=NULL;
-
if (!PyTuple_Check(obj) || PyTuple_GET_SIZE(obj)!=2) {
PyErr_SetString(PyExc_RuntimeError, "_datetimestring is " \
@@ -649,12 +647,6 @@ _convert_from_datetime_tuple(PyObject *obj)
if (new == NULL) return NULL;
- /* Add correct metadata */
- if (freq_key == NULL) {
- freq_key = PyString_InternFromString(NPY_METADATA_DTSTR);
- if (freq_key == NULL) return NULL;
- }
-
/* Remove any reference to old metadata dictionary */
/* And create a new one for this new dtype */
Py_XDECREF(new->metadata);
@@ -667,7 +659,7 @@ _convert_from_datetime_tuple(PyObject *obj)
}
/* Assume this sets a new reference to dt_cobj */
- PyDict_SetItem(new->metadata, freq_key, dt_cobj);
+ PyDict_SetItemString(new->metadata, NPY_METADATA_DTSTR, dt_cobj);
Py_DECREF(dt_cobj);
return new;
diff --git a/numpy/core/src/multiarray/scalarapi.c b/numpy/core/src/multiarray/scalarapi.c
index 225850bb7..c723533e5 100644
--- a/numpy/core/src/multiarray/scalarapi.c
+++ b/numpy/core/src/multiarray/scalarapi.c
@@ -282,6 +282,7 @@ PyArray_FromScalar(PyObject *scalar, PyArray_Descr *outcode)
Py_INCREF(scalar);
return r;
}
+
r = PyArray_NewFromDescr(&PyArray_Type,
typecode,
0, NULL,
@@ -510,6 +511,41 @@ PyArray_DescrFromScalar(PyObject *sc)
Py_INCREF(descr);
return descr;
}
+
+ if (PyArray_IsScalar(sc, TimeInteger)) {
+ PyObject *cobj;
+ PyArray_DatetimeMetaData *dt_data;
+
+ dt_data = _pya_malloc(sizeof(PyArray_DatetimeMetaData));
+
+ if (PyArray_IsScalar(sc, Datetime)) {
+ descr = PyArray_DescrNewFromType(PyArray_DATETIME);
+ memcpy(dt_data, &((PyDatetimeScalarObject *)sc)->obmeta,
+ sizeof(PyArray_DatetimeMetaData));
+ }
+ else {/* Timedelta */
+ descr = PyArray_DescrNewFromType(PyArray_TIMEDELTA);
+ memcpy(dt_data, &((PyTimedeltaScalarObject *)sc)->obmeta,
+ sizeof(PyArray_DatetimeMetaData));
+ }
+ cobj = PyCObject_FromVoidPtr((void *)dt_data, _pya_free);
+
+ /* Add correct meta-data to the data-type */
+
+ if (descr == NULL) {Py_DECREF(cobj); return NULL;}
+
+ Py_XDECREF(descr->metadata);
+ if ((descr->metadata = PyDict_New())== NULL) {
+ Py_DECREF(descr); Py_DECREF(cobj); return NULL;
+ }
+
+ /* Assume this sets a new reference to cobj */
+ PyDict_SetItemString(descr->metadata, NPY_METADATA_DTSTR, cobj);
+ Py_DECREF(cobj);
+
+ return descr;
+ }
+
descr = PyArray_DescrFromTypeObject((PyObject *)sc->ob_type);
if (descr->elsize == 0) {
PyArray_DESCR_REPLACE(descr);