[Numpy-svn] r8098 - in branches/1.4.x/numpy/core: . code_generators include/numpy src/multiarray src/umath tests

numpy-svn@scip... numpy-svn@scip...
Tue Feb 9 00:11:19 CST 2010


Author: cdavid
Date: 2010-02-09 00:11:19 -0600 (Tue, 09 Feb 2010)
New Revision: 8098

Removed:
   branches/1.4.x/numpy/core/src/multiarray/datetime.c
   branches/1.4.x/numpy/core/tests/test_datetime.py
Modified:
   branches/1.4.x/numpy/core/SConscript
   branches/1.4.x/numpy/core/code_generators/genapi.py
   branches/1.4.x/numpy/core/code_generators/generate_umath.py
   branches/1.4.x/numpy/core/include/numpy/arrayscalars.h
   branches/1.4.x/numpy/core/include/numpy/ndarrayobject.h
   branches/1.4.x/numpy/core/setup.py
   branches/1.4.x/numpy/core/src/multiarray/arraytypes.c.src
   branches/1.4.x/numpy/core/src/multiarray/convert_datatype.c
   branches/1.4.x/numpy/core/src/multiarray/descriptor.c
   branches/1.4.x/numpy/core/src/multiarray/multiarraymodule.c
   branches/1.4.x/numpy/core/src/multiarray/scalarapi.c
   branches/1.4.x/numpy/core/src/multiarray/scalartypes.c.src
   branches/1.4.x/numpy/core/src/multiarray/scalartypes.h
   branches/1.4.x/numpy/core/src/umath/loops.h
   branches/1.4.x/numpy/core/src/umath/loops.h.src
   branches/1.4.x/numpy/core/src/umath/ufunc_object.c
Log:
REF: remove datetime support at the C level.

Modified: branches/1.4.x/numpy/core/SConscript
===================================================================
--- branches/1.4.x/numpy/core/SConscript	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/SConscript	2010-02-09 06:11:19 UTC (rev 8098)
@@ -427,7 +427,6 @@
     multiarray_src = [pjoin('src', 'multiarray', 'multiarraymodule.c'),
         pjoin('src', 'multiarray', 'hashdescr.c'),
         pjoin('src', 'multiarray', 'arrayobject.c'),
-        pjoin('src', 'multiarray', 'datetime.c'),
         pjoin('src', 'multiarray', 'numpyos.c'),
         pjoin('src', 'multiarray', 'flagsobject.c'),
         pjoin('src', 'multiarray', 'descriptor.c'),

Modified: branches/1.4.x/numpy/core/code_generators/genapi.py
===================================================================
--- branches/1.4.x/numpy/core/code_generators/genapi.py	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/code_generators/genapi.py	2010-02-09 06:11:19 UTC (rev 8098)
@@ -44,7 +44,6 @@
              join('multiarray', 'refcount.c'),
              join('multiarray', 'conversion_utils.c'),
              join('multiarray', 'buffer.c'),
-             join('multiarray', 'datetime.c'),
              join('umath', 'ufunc_object.c'),
              join('umath', 'loops.c.src'),
             ]

Modified: branches/1.4.x/numpy/core/code_generators/generate_umath.py
===================================================================
--- branches/1.4.x/numpy/core/code_generators/generate_umath.py	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/code_generators/generate_umath.py	2010-02-09 06:11:19 UTC (rev 8098)
@@ -168,19 +168,16 @@
               'F': 'cfloat',
               'D': 'cdouble',
               'G': 'clongdouble',
-              'M': 'datetime',
-              'm': 'timedelta',
               'O': 'OBJECT',
               # '.' is like 'O', but calls a method of the object instead
               # of a function
               'P': 'OBJECT',
               }
 
-all = '?bBhHiIlLqQfdgFDGOMm'
+all = '?bBhHiIlLqQfdgFDGO'
 O = 'O'
 P = 'P'
 ints = 'bBhHiIlLqQ'
-times = 'Mm'
 intsO = ints + O
 bints = '?' + ints
 bintsO = bints + O
@@ -193,13 +190,13 @@
 inexact = flts + cmplx
 noint = inexact+O
 nointP = inexact+P
-allP = bints+times+flts+cmplxP
+allP = bints+flts+cmplxP
 nobool = all[1:]
-noobj = all[:-3]+all[-2:]
-nobool_or_obj = all[1:-3]+all[-2:]
+noobj = all[:-2]
+nobool_or_obj = all[1:-2]
 intflt = ints+flts
 intfltcmplx = ints+flts+cmplx
-nocmplx = bints+times+flts
+nocmplx = bints+flts
 nocmplxO = nocmplx+O
 nocmplxP = nocmplx+P
 notimes_or_obj = bints + inexact
@@ -218,20 +215,20 @@
     Ufunc(2, 1, Zero,
           docstrings.get('numpy.core.umath.add'),
           TD(notimes_or_obj),
-          [TypeDescription('M', UsesArraysAsData, 'Mm', 'M'),
-           TypeDescription('m', UsesArraysAsData, 'mm', 'm'),
-           TypeDescription('M', UsesArraysAsData, 'mM', 'M'),
-          ],
+          #[TypeDescription('M', UsesArraysAsData, 'Mm', 'M'),
+          # TypeDescription('m', UsesArraysAsData, 'mm', 'm'),
+          # TypeDescription('M', UsesArraysAsData, 'mM', 'M'),
+          #],
           TD(O, f='PyNumber_Add'),
           ),
 'subtract' :
     Ufunc(2, 1, Zero,
           docstrings.get('numpy.core.umath.subtract'),
           TD(notimes_or_obj),
-          [TypeDescription('M', UsesArraysAsData, 'Mm', 'M'),
-           TypeDescription('m', UsesArraysAsData, 'mm', 'm'),
-           TypeDescription('M', UsesArraysAsData, 'MM', 'm'),
-          ],
+          #[TypeDescription('M', UsesArraysAsData, 'Mm', 'M'),
+          # TypeDescription('m', UsesArraysAsData, 'mm', 'm'),
+          # TypeDescription('M', UsesArraysAsData, 'MM', 'm'),
+          #],
           TD(O, f='PyNumber_Subtract'),
           ),
 'multiply' :

Modified: branches/1.4.x/numpy/core/include/numpy/arrayscalars.h
===================================================================
--- branches/1.4.x/numpy/core/include/numpy/arrayscalars.h	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/include/numpy/arrayscalars.h	2010-02-09 06:11:19 UTC (rev 8098)
@@ -112,19 +112,6 @@
 
 typedef struct {
         PyObject_HEAD
-        npy_datetime obval;
-        PyArray_DatetimeMetaData obmeta;
-} PyDatetimeScalarObject;
-
-typedef struct {
-        PyObject_HEAD
-        npy_timedelta obval;
-        PyArray_DatetimeMetaData obmeta;
-} PyTimedeltaScalarObject;
-
-
-typedef struct {
-        PyObject_HEAD
         char obval;
 } PyScalarObject;
 

Modified: branches/1.4.x/numpy/core/include/numpy/ndarrayobject.h
===================================================================
--- branches/1.4.x/numpy/core/include/numpy/ndarrayobject.h	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/include/numpy/ndarrayobject.h	2010-02-09 06:11:19 UTC (rev 8098)
@@ -78,7 +78,6 @@
                     NPY_OBJECT=17,
                     NPY_STRING, NPY_UNICODE,
                     NPY_VOID,
-                    NPY_DATETIME, NPY_TIMEDELTA,
                     NPY_NTYPES,
                     NPY_NOTYPE,
                     NPY_CHAR,      /* special flag */
@@ -574,25 +573,6 @@
         int flags;
 } PyArray_Chunk;
 
-
-typedef struct {
-        NPY_DATETIMEUNIT base;
-        int num;
-        int den;      /* Converted to 1 on input for now -- an input-only mechanism */
-        int events;
-} PyArray_DatetimeMetaData;
-
-typedef struct {
-        npy_longlong year;
-        int month, day, hour, min, sec, us, ps, as;
-} npy_datetimestruct;
-
-typedef struct {
-        npy_longlong day;
-        int sec, us, ps, as;
-} npy_timedeltastruct;
-
-
 #define PyDataType_GetDatetimeMetaData(descr) ((descr->metadata == NULL) ? NULL : ((PyArray_DatetimeMetaData *)(PyCObject_AsVoidPtr(PyDict_GetItemString(descr->metadata, NPY_METADATA_DTSTR)))))
 
 typedef int (PyArray_FinalizeFunc)(PyArrayObject *, PyObject *);

Modified: branches/1.4.x/numpy/core/setup.py
===================================================================
--- branches/1.4.x/numpy/core/setup.py	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/setup.py	2010-02-09 06:11:19 UTC (rev 8098)
@@ -703,7 +703,6 @@
         join('src', 'multiarray', 'hashdescr.c'),
         join('src', 'multiarray', 'arrayobject.c'),
         join('src', 'multiarray', 'buffer.c'),
-        join('src', 'multiarray', 'datetime.c'),
         join('src', 'multiarray', 'numpyos.c'),
         join('src', 'multiarray', 'conversion_utils.c'),
         join('src', 'multiarray', 'flagsobject.c'),

Modified: branches/1.4.x/numpy/core/src/multiarray/arraytypes.c.src
===================================================================
--- branches/1.4.x/numpy/core/src/multiarray/arraytypes.c.src	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/src/multiarray/arraytypes.c.src	2010-02-09 06:11:19 UTC (rev 8098)
@@ -1,7 +1,6 @@
 /* -*- c -*- */
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
-#include "datetime.h"
 #include "structmember.h"
 
 #define _MULTIARRAYMODULE
@@ -16,7 +15,6 @@
 #include "ctors.h"
 #include "usertypes.h"
 #include "npy_config.h"
-#include "_datetime.h"
 #include "scalartypes.h"
 
 #include "numpyos.h"
@@ -705,458 +703,6 @@
 }
 
 /*
- * Acknowledgment:  Example code contributed by Marty Fuhr sponsored by
- * Google Summer of Code 2009 was used to integrate and adapt the mxDateTime
- * parser
- */
-
-/* #include "datetime.c" --- now included in multiarray_onefile */
-
-
-/* DateTime Objects in Python only keep microsecond resolution.
- *
- * When converting from datetime objects with an event component return a
- * tuple: * (baseunit, number of event)  where baseunit follows is a datetime
- * type and number of events is a Python integer
- */
-
-
-/*
- * Return a Python Datetime Object from a number representing the number of
- * units since the epoch (1970-01-01T00:00:00Z) ignoring leap seconds.
- */
-
-NPY_NO_EXPORT PyObject *
-PyDateTime_FromNormalized(npy_datetime val, NPY_DATETIMEUNIT base)
-{
-    npy_datetimestruct ydate;
-
-    /* Must be here to use PyDateTime_FromDateAndTime */
-    PyDateTime_IMPORT;
-
-    /* We just truncate the unused variables and don't wory about overflow */
-    PyArray_DatetimeToDatetimeStruct(val, base, &ydate);
-
-    /* FIXME?: We discard ydate.ns, ydate.ps, ydate.fs, and ydate.as */
-    return PyDateTime_FromDateAndTime(ydate.year, ydate.month, ydate.day,
-                                      ydate.hour, ydate.min, ydate.sec,
-                                      ydate.us);
-}
-
-/*
- * We also can lose precision and range here.  Ignored.
- * Don't use this function if you care.
- */
-
-NPY_NO_EXPORT PyObject *
-PyTimeDelta_FromNormalized(npy_timedelta val, NPY_DATETIMEUNIT base)
-{
-    npy_timedeltastruct td;
-
-    PyDateTime_IMPORT;
-    PyArray_TimedeltaToTimedeltaStruct(val, base, &td);
-
-    /* We discard td.ps and td.as */
-    return PyDelta_FromDSU(td.day, td.sec, td.us);
-}
-
-
-NPY_NO_EXPORT PyObject *
-PyDateTime_FromInt64(datetime val, PyArray_Descr *descr)
-{
-    PyArray_DatetimeMetaData *meta;
-
-    meta = PyDataType_GetDatetimeMetaData(descr);
-    if (meta == NULL) {
-        PyErr_SetString(PyExc_RuntimeError,
-                "metadata not set for descriptor");
-        return NULL;
-    }
-
-    if (meta->events > 1) {
-        int events, rem, div;
-        PyObject *obj;
-
-        obj = PyTuple_New(2);
-        events = meta->events;
-        div = val/events;
-        rem = val % events;
-        PyTuple_SET_ITEM(obj, 1, PyInt_FromLong(rem));
-        /* This resets meta->events for recursive call */
-        meta->events = 1;
-        PyTuple_SET_ITEM(obj, 0, PyDateTime_FromInt64(div, descr));
-        meta->events = events;
-        if (PyErr_Occurred()) {
-            Py_DECREF(obj);
-            return NULL;
-        }
-        return obj;
-    }
-
-    /*
-     * We normalize the number to a base-unit and then return a
-     * Python Datetime Object
-     *
-     * FIXME? : We silently truncate if it doesn't fit, either too
-     *  wide (e.g. 10 BC) or too narrow (nanoseconds)
-     */
-
-    /* Normalization and then conversion to Datetime */
-    /* FIXME? : Check for Overflow... */
-    return PyDateTime_FromNormalized(val*meta->num, meta->base);
-}
-
-
-NPY_NO_EXPORT PyObject *
-PyTimeDelta_FromInt64(timedelta val, PyArray_Descr *descr)
-{
-    PyArray_DatetimeMetaData *meta;
-    meta = PyDataType_GetDatetimeMetaData(descr);
-    if (meta == NULL) {
-        PyErr_SetString(PyExc_RuntimeError,
-                "metadata not set for descriptor");
-        return NULL;
-    }
-
-    if (meta->events > 1) {
-        int events, rem, div;
-        PyObject *obj;
-
-        obj = PyTuple_New(2);
-        events = meta->events;
-        div = val/events;
-        rem = val % events;
-        PyTuple_SET_ITEM(obj, 1, PyInt_FromLong(rem));
-        /* This resets meta->events for recursive call */
-        meta->events = 1;
-        PyTuple_SET_ITEM(obj, 0, PyTimeDelta_FromInt64(div, descr));
-        meta->events = events;
-        if (PyErr_Occurred()) {
-            Py_DECREF(obj);
-            return NULL;
-        }
-        return obj;
-    }
-
-    /* FIXME? : Check for Overflow */
-    return PyTimeDelta_FromNormalized(val*meta->num, meta->base);
-}
-
-
-
-NPY_NO_EXPORT npy_datetime
-PyDateTime_AsNormalized(PyObject *obj, NPY_DATETIMEUNIT base)
-{
-    npy_datetimestruct ydate;
-
-    /* Must be here to use PyDateTime_FromDateAndTime */
-    PyDateTime_IMPORT;
-
-    if (!PyDateTime_Check(obj) && !PyDate_Check(obj)) {
-        PyErr_SetString(PyExc_ValueError,
-                "Must be a datetime.date or datetime.datetime object");
-        return -1;
-    }
-
-    ydate.year = PyDateTime_GET_YEAR(obj);
-    ydate.month = PyDateTime_GET_MONTH(obj);
-    ydate.day = PyDateTime_GET_DAY(obj);
-
-    if (PyDateTime_Check(obj)) {
-        ydate.hour = PyDateTime_DATE_GET_HOUR(obj);
-        ydate.min = PyDateTime_DATE_GET_MINUTE(obj);
-        ydate.sec = PyDateTime_DATE_GET_SECOND(obj);
-        ydate.us = PyDateTime_DATE_GET_MICROSECOND(obj);
-    }
-    else {
-        ydate.hour = 0;
-        ydate.min = 0;
-        ydate.sec = 0;
-        ydate.us = 0;
-    }
-
-    ydate.ps = 0;
-    ydate.as = 0;
-
-    /* We just truncate the unused variables and don't wory about overflow */
-    return PyArray_DatetimeStructToDatetime(base, &ydate);
-}
-
-NPY_NO_EXPORT npy_timedelta
-PyTimeDelta_AsNormalized(PyObject *obj, NPY_DATETIMEUNIT base)
-{
-    npy_timedeltastruct td;
-
-    PyDateTime_IMPORT;
-
-    if (!PyDelta_Check(obj)) {
-        PyErr_SetString(PyExc_ValueError,
-                "Must be a datetime.timedelta object");
-        return -1;
-    }
-
-    td.day = ((PyDateTime_Delta *)obj)->days;
-    td.sec = ((PyDateTime_Delta *)obj)->seconds;
-    td.us  = ((PyDateTime_Delta *)obj)->microseconds;
-    td.ps  = 0;
-    td.as  = 0;
-
-    return PyArray_TimedeltaStructToTimedelta(base, &td);
-}
-
-
-/*
- * These expect a 2-tuple if meta->events > 1  (baseobj, num-counts)
- * where baseobj is a datetime object or a timedelta object respectively.
- *
- */
-
-NPY_NO_EXPORT npy_datetime
-PyDateTime_AsInt64(PyObject *obj, PyArray_Descr *descr)
-{
-    PyArray_DatetimeMetaData *meta;
-    npy_datetime res;
-
-    meta = PyDataType_GetDatetimeMetaData(descr);
-    if (meta == NULL) {
-        PyErr_SetString(PyExc_RuntimeError,
-                "metadata not set for descriptor");
-        return -1;
-    }
-
-
-    if (meta->events > 1) {
-        datetime tmp;
-        int events;
-
-        if (!PyTuple_Check(obj) || PyTuple_GET_SIZE(obj) != 2) {
-            PyErr_SetString(PyExc_ValueError,
-                    "need a 2-tuple on setting if events > 1");
-            return -1;
-        }
-        /* Alter the dictionary and call again */
-        /* FIXME:  not thread safe */
-        events = meta->events;
-        meta->events = 1;
-        tmp = PyDateTime_AsInt64(PyTuple_GET_ITEM(obj, 0), descr);
-        meta->events = events;
-        if (PyErr_Occurred()) {
-            return -1;
-        }
-        /* FIXME: Check for overflow */
-        tmp *= events;
-        tmp += MyPyLong_AsLongLong(PyTuple_GET_ITEM(obj, 1));
-        if (PyErr_Occurred()) {
-            return -1;
-        }
-        return tmp;
-    }
-
-    res = PyDateTime_AsNormalized(obj, meta->base);
-    return res/meta->num;
-}
-
-
-NPY_NO_EXPORT timedelta
-PyTimeDelta_AsInt64(PyObject *obj, PyArray_Descr *descr)
-{
-    PyArray_DatetimeMetaData *meta;
-    npy_timedelta res;
-
-    meta = PyDataType_GetDatetimeMetaData(descr);
-    if (meta == NULL) {
-        PyErr_SetString(PyExc_RuntimeError,
-                "metadata not set for descriptor");
-        return -1;
-    }
-
-    if (meta->events > 1) {
-        timedelta tmp;
-        int events;
-
-        if (!PyTuple_Check(obj) || PyTuple_GET_SIZE(obj) != 2) {
-            PyErr_SetString(PyExc_ValueError,
-                    "need a 2-tuple on setting if events > 1");
-            return -1;
-        }
-        /* Alter the dictionary and call again (not thread safe) */
-        events = meta->events;
-        meta->events = 1;
-        tmp = PyTimeDelta_AsInt64(PyTuple_GET_ITEM(obj, 0), descr);
-        meta->events = events;
-        if (PyErr_Occurred()) {
-            return -1;
-        }
-        /* FIXME: Check for overflow */
-        tmp *= events;
-        tmp += MyPyLong_AsLongLong(PyTuple_GET_ITEM(obj, 1));
-        if (PyErr_Occurred()) {
-            return -1;
-        }
-        return tmp;
-    }
-
-    res = PyTimeDelta_AsNormalized(obj, meta->base);
-    return res / meta->num;
-}
-
-
-/*
- * Always return DateTime Object after normalizing to basic units (or a tuple
- * if meta->events > 1):
- *
- *  Problem:  DateTime does not support all the resolutions (ns) nor the
- *  dynamic range (pre 1 AD) of NumPy Date-times.
- *
- * getitem is not used that much --- if losing resolution hurts, stick
- * with the array scalar versions of the date-time.
- *
- * considered returning array scalars here just like longdouble. This has the
- * problem of recursion in some cases (because in a few places the code
- * expects getitem to return a Python-system object)
- *
- * considered returning different things depending on the resolution but this
- * would make it hard to write generic code  --- but do you need to write
- * generic code on all the frequencies because they cover a wide range.
- *
- * Solution:  The use-case of actually wanting a date-time object when the
- * resolution and dynamic range match, make it the compelling default. When it
- * does fails, there are alternatives for the programmer to use.
- *
- * New question: Should we change (c)longdouble at this point? to return Python Float?
- */
-
-static PyObject *
-DATETIME_getitem(char *ip, PyArrayObject *ap) {
-    datetime t1;
-
-    if ((ap == NULL) || PyArray_ISBEHAVED_RO(ap)) {
-        t1 = *((datetime *)ip);
-        return PyDateTime_FromInt64((datetime)t1, ap->descr);
-    }
-    else {
-        ap->descr->f->copyswap(&t1, ip, !PyArray_ISNOTSWAPPED(ap), ap);
-        return PyDateTime_FromInt64((datetime)t1, ap->descr);
-    }
-}
-
-static PyObject *
-TIMEDELTA_getitem(char *ip, PyArrayObject *ap) {
-    timedelta t1;
-
-    if ((ap == NULL) || PyArray_ISBEHAVED_RO(ap)) {
-        t1 = *((timedelta *)ip);
-        return PyTimeDelta_FromInt64((timedelta)t1, ap->descr);
-    }
-    else {
-        ap->descr->f->copyswap(&t1, ip, !PyArray_ISNOTSWAPPED(ap), ap);
-        return PyTimeDelta_FromInt64((timedelta)t1, ap->descr);
-    }
-}
-
-/* FIXME:
- *  This needs to take
- *      1) Integers and Longs (anything that can be converted to an Int)
- *      2) Strings (ISO-style dates)
- *      3) Datetime Scalars (that it converts based on scalar dtype.
- *      4) Datetime and Date objects
- *  Plus a tuple for meta->events > 1
- *
- *      3) is partially implemented, 4) is implemented
- */
-
-static int
-DATETIME_setitem(PyObject *op, char *ov, PyArrayObject *ap) {
-    /* ensure alignment */
-    datetime temp;
-
-    if (PyArray_IsScalar(op, Datetime)) {
-        /* This needs to convert based on type */
-        temp = ((PyDatetimeScalarObject *)op)->obval;
-    }
-    else if (PyString_Check(op) || PyUnicode_Check(op)) {
-        /* FIXME:  Converts to DateTime first and therefore does not handle extended notation */
-        /* import _mx_datetime_parser 
-         * res = _mx_datetime_parser(name)
-         *  Convert from datetime to Int
-         */
-        PyObject *res, *module;
-
-        module = PyImport_ImportModule("numpy.core._mx_datetime_parser");
-        if (module == NULL) { return -1; }
-        res = PyObject_CallMethod(module, "datetime_from_string", "O", op);
-        Py_DECREF(module);
-        if (res == NULL) { return -1; }
-        temp = PyDateTime_AsInt64(res, ap->descr);
-        Py_DECREF(res);
-        if (PyErr_Occurred()) return -1;
-    }
-    else if (PyInt_Check(op)) {
-        temp = PyInt_AS_LONG(op);
-    }
-    else if (PyLong_Check(op)) {
-        temp = PyLong_AsLongLong(op);
-    }
-    else {
-        temp = PyDateTime_AsInt64(op, ap->descr);
-    }
-    if (PyErr_Occurred()) {
-        if (PySequence_Check(op)) {
-            PyErr_Clear();
-            PyErr_SetString(PyExc_ValueError, _SEQUENCE_MESSAGE);
-        }
-        return -1;
-    }
-    if (ap == NULL || PyArray_ISBEHAVED(ap))
-        *((datetime *)ov)=temp;
-    else {
-        ap->descr->f->copyswap(ov, &temp, !PyArray_ISNOTSWAPPED(ap), ap);
-    }
-    return 0;
-}
-
-/* FIXME: This needs to take
- *    1) Integers and Longs (anything that can be converted to an Int)
- *    2) Timedelta scalar objects (with resolution conversion)
- *    3) Python Timedelta objects
- *
- *    Plus a tuple for meta->events > 1
- */
-
-static int
-TIMEDELTA_setitem(PyObject *op, char *ov, PyArrayObject *ap) {
-    /* ensure alignment */
-    timedelta temp;
-
-    if (PyArray_IsScalar(op, Timedelta)) {
-        temp = ((PyTimedeltaScalarObject *)op)->obval;
-    }
-    else if (PyInt_Check(op)) {
-        temp = PyInt_AS_LONG(op);
-    }
-    else if (PyLong_Check(op)) {
-        temp = PyLong_AsLongLong(op);
-    }
-    else {
-        temp = PyTimeDelta_AsInt64(op, ap->descr);
-    }
-    if (PyErr_Occurred()) {
-        if (PySequence_Check(op)) {
-            PyErr_Clear();
-            PyErr_SetString(PyExc_ValueError, _SEQUENCE_MESSAGE);
-        }
-        return -1;
-    }
-    if (ap == NULL || PyArray_ISBEHAVED(ap))
-        *((timedelta *)ov)=temp;
-    else {
-        ap->descr->f->copyswap(ov, &temp, !PyArray_ISNOTSWAPPED(ap), ap);
-    }
-    return 0;
-}
-
-
-/*
  *****************************************************************************
  **                       TYPE TO TYPE CONVERSIONS                          **
  *****************************************************************************
@@ -1169,21 +715,17 @@
 /**begin repeat
  *
  * #TOTYPE = BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG,
- *           LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE, DATETIME,
- *           TIMEDELTA#
+ *           LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE#
  * #totype = byte, ubyte, short, ushort, int, uint, long, ulong,
- *           longlong, ulonglong, float, double, longdouble, datetime,
- *           timedelta#
+ *           longlong, ulonglong, float, double, longdouble#
 */
 
 /**begin repeat1
  *
  * #FROMTYPE = BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG,
- *             LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE, DATETIME,
- *             TIMEDELTA#
+ *             LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE#
  * #fromtype = byte, ubyte, short, ushort, int, uint, long, ulong,
- *             longlong, ulonglong, float, double, longdouble, datetime,
- *             timedelta#
+ *             longlong, ulonglong, float, double, longdouble#
  */
 static void
 @FROMTYPE@_to_@TOTYPE@(@fromtype@ *ip, @totype@ *op, intp n,
@@ -1217,11 +759,9 @@
 /**begin repeat
  *
  * #FROMTYPE = BOOL, BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG,
- *             LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE, DATETIME,
- *             TIMEDELTA#
+ *             LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE#
  * #fromtype = Bool, byte, ubyte, short, ushort, int, uint, long, ulong,
- *             longlong, ulonglong, float, double, longdouble, datetime,
- *             timedelta#
+ *             longlong, ulonglong, float, double, longdouble#
 */
 static void
 @FROMTYPE@_to_BOOL(@fromtype@ *ip, Bool *op, intp n,
@@ -1252,11 +792,9 @@
 
 /**begin repeat
  * #TOTYPE = BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG,
- *           LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE, DATETIME,
- *           TIMEDELTA#
+ *           LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE#
  * #totype = byte, ubyte, short, ushort, int, uint, long, ulong,
- *           longlong, ulonglong, float, double, longdouble, datetime,
- *           timedelta#
+ *           longlong, ulonglong, float, double, longdouble#
 */
 static void
 BOOL_to_@TOTYPE@(Bool *ip, @totype@ *op, intp n,
@@ -1276,11 +814,9 @@
 
 /**begin repeat1
  * #FROMTYPE = BOOL, BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG,
- *             LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE, DATETIME,
- *             TIMEDELTA#
+ *             LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE#
  * #fromtype = Bool, byte, ubyte, short, ushort, int, uint, long, ulong,
- *             longlong, ulonglong, float, double, longdouble, datetime,
- *             timedelta#
+ *             longlong, ulonglong, float, double, longdouble#
  */
 static void
 @FROMTYPE@_to_@TOTYPE@(@fromtype@ *ip, @totype@ *op, intp n,
@@ -1322,13 +858,11 @@
  *
  * #FROMTYPE = BOOL, BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG,
  *             LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE,
- *             CFLOAT, CDOUBLE, CLONGDOUBLE, STRING, UNICODE, VOID, OBJECT,
- *             DATETIME, TIMEDELTA#
+ *             CFLOAT, CDOUBLE, CLONGDOUBLE, STRING, UNICODE, VOID, OBJECT#
  * #fromtype = Bool, byte, ubyte, short, ushort, int, uint, long, ulong,
  *             longlong, ulonglong, float, double, longdouble,
- *             cfloat, cdouble, clongdouble, char, char, char, PyObject *,
- *             datetime, timedelta#
- * #skip = 1*17, aip->descr->elsize*3, 1*3#
+ *             cfloat, cdouble, clongdouble, char, char, char, PyObject *#
+ * #skip = 1*17, aip->descr->elsize*3, 1*1#
  */
 static void
 @FROMTYPE@_to_OBJECT(@fromtype@ *ip, PyObject **op, intp n, PyArrayObject *aip,
@@ -1370,13 +904,11 @@
  *
  * #TOTYPE = BOOL, BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG,
  *           LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE,
- *           CFLOAT, CDOUBLE, CLONGDOUBLE, STRING, UNICODE, VOID, DATETIME,
- *           TIMEDELTA#
+ *           CFLOAT, CDOUBLE, CLONGDOUBLE, STRING, UNICODE, VOID#
  * #totype = Bool, byte, ubyte, short, ushort, int, uint, long, ulong,
  *           longlong, ulonglong, float, double, longdouble,
- *           cfloat, cdouble, clongdouble, char, char, char, datetime,
- *           timedelta#
- * #skip = 1*17, aop->descr->elsize*3, 1*2#
+ *           cfloat, cdouble, clongdouble, char, char, char#
+ * #skip = 1*17, aop->descr->elsize*3#
  */
 static void
 OBJECT_to_@TOTYPE@(PyObject **ip, @totype@ *op, intp n,
@@ -1399,13 +931,13 @@
 
 /**begin repeat
  *
- * #from = STRING*22, UNICODE*22, VOID*22#
- * #fromtyp = char*66#
- * #to = (BOOL, BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE, CFLOAT, CDOUBLE, CLONGDOUBLE, STRING, UNICODE, VOID, DATETIME, TIMEDELTA)*3#
- * #totyp = (Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble, cfloat, cdouble, clongdouble, char, char, char, datetime, timedelta)*3#
- * #oskip = (1*17,aop->descr->elsize*3,1*2)*3#
- * #convert = 1*17, 0*3, 1*2, 1*17, 0*3, 1*2, 0*22#
- * #convstr = (Int*9, Long*2, Float*3, Complex*3, Tuple*3, Long*2)*3#
+ * #from = STRING*20, UNICODE*20, VOID*20#
+ * #fromtyp = char*60#
+ * #to = (BOOL, BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE, CFLOAT, CDOUBLE, CLONGDOUBLE, STRING, UNICODE, VOID)*3#
+ * #totyp = (Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble, cfloat, cdouble, clongdouble, char, char, char)*3#
+ * #oskip = (1*17,aop->descr->elsize*3)*3#
+ * #convert = 1*17, 0*3, 1*17, 0*3, 0*20#
+ * #convstr = (Int*9, Long*2, Float*3, Complex*3, Tuple*3)*3#
 */
 static void
 @from@_to_@to@(@fromtyp@ *ip, @totyp@ *op, intp n, PyArrayObject *aip,
@@ -1444,10 +976,10 @@
 
 /**begin repeat
  *
- * #to = STRING*19, UNICODE*19, VOID*19#
- * #totyp = char*19, char*19, char*19#
- * #from = (BOOL, BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE, CFLOAT, CDOUBLE, CLONGDOUBLE, DATETIME, TIMEDELTA)*3#
- * #fromtyp = (Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble, cfloat, cdouble, clongdouble, datetime, timedelta)*3#
+ * #to = STRING*17, UNICODE*17, VOID*17#
+ * #totyp = char*17, char*17, char*17#
+ * #from = (BOOL, BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE, CFLOAT, CDOUBLE, CLONGDOUBLE)*3#
+ * #fromtyp = (Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble, cfloat, cdouble, clongdouble)*3#
  */
 static void
 @from@_to_@to@(@fromtyp@ *ip, @totyp@ *op, intp n, PyArrayObject *aip,
@@ -1549,11 +1081,11 @@
 
 /**begin repeat
  * #fname = BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG,
- *          ULONGLONG, DATETIME, TIMEDELTA#
+ *          ULONGLONG#
  * #type = byte, ubyte, short, ushort, int, uint, long, ulong, longlong,
- *         ulonglong, datetime, timedelta#
- * #func = (l, ul)*5, l, l#
- * #btype = (long, ulong)*5, long, long#
+ *         ulonglong#
+ * #func = (l, ul)*5#
+ * #btype = (long, ulong)*5#
  */
 static int
 @fname@_fromstr(char *str, @type@ *ip, char **endptr, PyArray_Descr *NPY_UNUSED(ignore))
@@ -1596,11 +1128,11 @@
 /**begin repeat
  *
  * #fname = SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, FLOAT,
- *          DOUBLE, LONGDOUBLE, DATETIME, TIMEDELTA#
+ *          DOUBLE, LONGDOUBLE#
  * #fsize = SHORT, SHORT, INT, INT, LONG, LONG, LONGLONG, LONGLONG, FLOAT,
- *          DOUBLE, LONGDOUBLE, DATETIME, TIMEDELTA#
+ *          DOUBLE, LONGDOUBLE#
  * #type = short, ushort, int, uint, long, ulong, longlong, ulonglong, float,
- *         double, longdouble, datetime, timedelta#
+ *         double, longdouble#
  */
 static void
 @fname@_copyswapn (void *dst, intp dstride, void *src, intp sstride,
@@ -2090,8 +1622,8 @@
 /****************** nonzero **********************************/
 
 /**begin repeat
-#fname=BOOL,BYTE,UBYTE,SHORT,USHORT,INT,UINT,LONG,ULONG,LONGLONG,ULONGLONG,FLOAT,DOUBLE,LONGDOUBLE,DATETIME,TIMEDELTA#
-#type=Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble, datetime, timedelta#
+#fname=BOOL,BYTE,UBYTE,SHORT,USHORT,INT,UINT,LONG,ULONG,LONGLONG,ULONGLONG,FLOAT,DOUBLE,LONGDOUBLE#
+#type=Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble#
 */
 static Bool
 @fname@_nonzero (char *ip, PyArrayObject *ap)
@@ -2293,9 +1825,9 @@
 
 /**begin repeat
  * #TYPE = BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG,
- *         LONGLONG, ULONGLONG, DATETIME, TIMEDELTA#
+ *         LONGLONG, ULONGLONG#
  * #type = byte, ubyte, short, ushort, int, uint, long, ulong,
- *         longlong, ulonglong, datetime, timedelta#
+ *         longlong, ulonglong#
  */
 
 static int
@@ -2551,9 +2083,9 @@
 
 /**begin repeat
 
-#fname= BOOL,BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE, CFLOAT, CDOUBLE, CLONGDOUBLE, DATETIME, TIMEDELTA#
-#type= Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble, float, double, longdouble, datetime, timedelta#
-#incr= ip++*14, ip+=2*3, ip++*2#
+#fname= BOOL,BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE, CFLOAT, CDOUBLE, CLONGDOUBLE#
+#type= Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble, float, double, longdouble#
+#incr= ip++*14, ip+=2*3#
 */
 
 static int
@@ -2641,9 +2173,9 @@
 }
 
 /**begin repeat
-#name=BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE, DATETIME, TIMEDELTA#
-#type= byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble, datetime, timedelta#
-#out= long, ulong, long, ulong, long, ulong, long, ulong, longlong, ulonglong, float, double, longdouble, datetime, timedelta#
+#name=BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE#
+#type= byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble#
+#out= long, ulong, long, ulong, long, ulong, long, ulong, longlong, ulonglong, float, double, longdouble#
 */
 static void
 @name@_dot(char *ip1, intp is1, char *ip2, intp is2, char *op, intp n,
@@ -2746,8 +2278,8 @@
 }
 
 /**begin repeat
-#NAME=BYTE,UBYTE,SHORT,USHORT,INT,UINT,LONG,ULONG,LONGLONG,ULONGLONG,FLOAT,DOUBLE,LONGDOUBLE,DATETIME,TIMEDELTA#
-#typ=byte,ubyte,short,ushort,int,uint,long,ulong,longlong,ulonglong,float,double,longdouble,datetime,timedelta#
+#NAME=BYTE,UBYTE,SHORT,USHORT,INT,UINT,LONG,ULONG,LONGLONG,ULONGLONG,FLOAT,DOUBLE,LONGDOUBLE#
+#typ=byte,ubyte,short,ushort,int,uint,long,ulong,longlong,ulonglong,float,double,longdouble#
 */
 static void
 @NAME@_fill(@typ@ *buffer, intp length, void *NPY_UNUSED(ignored))
@@ -2812,8 +2344,8 @@
 /**end repeat**/
 
 /**begin repeat
-#NAME=SHORT,USHORT,INT,UINT,LONG,ULONG,LONGLONG,ULONGLONG,FLOAT,DOUBLE,LONGDOUBLE,CFLOAT,CDOUBLE,CLONGDOUBLE,DATETIME,TIMEDELTA#
-#typ=short,ushort,int,uint,long,ulong,longlong,ulonglong,float,double,longdouble,cfloat,cdouble,clongdouble,datetime,timedelta#
+#NAME=SHORT,USHORT,INT,UINT,LONG,ULONG,LONGLONG,ULONGLONG,FLOAT,DOUBLE,LONGDOUBLE,CFLOAT,CDOUBLE,CLONGDOUBLE#
+#typ=short,ushort,int,uint,long,ulong,longlong,ulonglong,float,double,longdouble,cfloat,cdouble,clongdouble#
 */
 static void
 @NAME@_fillwithscalar(@typ@ *buffer, intp length, @typ@ *value, void *NPY_UNUSED(ignored))
@@ -2834,8 +2366,8 @@
  *************************/
 
 /**begin repeat
-#name=BOOL, BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE, DATETIME, TIMEDELTA#
-#type= Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble, datetime, timedelta#
+#name=BOOL, BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE#
+#type= Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble#
 */
 static void
 @name@_fastclip(@type@ *in, intp ni, @type@ *min, @type@ *max, @type@ *out)
@@ -2933,8 +2465,8 @@
  *************************/
 
 /**begin repeat
-#name=BOOL,BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE,CFLOAT, CDOUBLE, CLONGDOUBLE, DATETIME, TIMEDELTA#
-#type= Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble,cfloat, cdouble, clongdouble, datetime, timedelta#
+#name=BOOL,BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE,CFLOAT, CDOUBLE, CLONGDOUBLE#
+#type= Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble,cfloat, cdouble, clongdouble#
 */
 static void
 @name@_fastputmask(@type@ *in, Bool *mask, intp ni, @type@ *vals, intp nv)
@@ -2970,8 +2502,8 @@
  *************************/
 
 /**begin repeat
-#name=BOOL,BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE,CFLOAT, CDOUBLE, CLONGDOUBLE, DATETIME, TIMEDELTA#
-#type= Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble,cfloat, cdouble, clongdouble, datetime, timedelta#
+#name=BOOL,BYTE, UBYTE, SHORT, USHORT, INT, UINT, LONG, ULONG, LONGLONG, ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE,CFLOAT, CDOUBLE, CLONGDOUBLE#
+#type= Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble,cfloat, cdouble, clongdouble#
 */
 static int
 @name@_fasttake(@type@ *dest, @type@ *src, intp *indarray,
@@ -3088,8 +2620,6 @@
         (PyArray_VectorUnaryFunc*)@from@_to_STRING,
         (PyArray_VectorUnaryFunc*)@from@_to_UNICODE,
         (PyArray_VectorUnaryFunc*)@from@_to_VOID,
-        (PyArray_VectorUnaryFunc*)@from@_to_DATETIME,
-        (PyArray_VectorUnaryFunc*)@from@_to_TIMEDELTA
     },
     (PyArray_GetItemFunc*)@from@_getitem,
     (PyArray_SetItemFunc*)@from@_setitem,
@@ -3138,13 +2668,13 @@
 
 /**begin repeat
 
-#from= BOOL,BYTE,UBYTE,SHORT,USHORT,INT,UINT,LONG,ULONG,LONGLONG,ULONGLONG,FLOAT,DOUBLE,LONGDOUBLE,CFLOAT,CDOUBLE,CLONGDOUBLE,OBJECT,DATETIME,TIMEDELTA#
-#num= 1*14,2*3,1*3#
-#fromtyp= Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble, float, double, longdouble, PyObject *, datetime, timedelta#
-#NAME= Bool, Byte, UByte, Short, UShort, Int, UInt, Long, ULong, LongLong, ULongLong, Float, Double, LongDouble, CFloat, CDouble, CLongDouble, Object, Datetime, Timedelta#
-#kind= GENBOOL, SIGNED, UNSIGNED, SIGNED, UNSIGNED, SIGNED, UNSIGNED, SIGNED, UNSIGNED, SIGNED, UNSIGNED, FLOATING, FLOATING, FLOATING, COMPLEX, COMPLEX, COMPLEX, OBJECT, DATETIME, TIMEDELTA#
-#endian= |*3, =*14, |, =*2#
-#isobject= 0*17,NPY_OBJECT_DTYPE_FLAGS,0*2#
+#from= BOOL,BYTE,UBYTE,SHORT,USHORT,INT,UINT,LONG,ULONG,LONGLONG,ULONGLONG,FLOAT,DOUBLE,LONGDOUBLE,CFLOAT,CDOUBLE,CLONGDOUBLE,OBJECT#
+#num= 1*14,2*3,1*1#
+#fromtyp= Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong, ulonglong, float, double, longdouble, float, double, longdouble, PyObject *#
+#NAME= Bool, Byte, UByte, Short, UShort, Int, UInt, Long, ULong, LongLong, ULongLong, Float, Double, LongDouble, CFloat, CDouble, CLongDouble, Object#
+#kind= GENBOOL, SIGNED, UNSIGNED, SIGNED, UNSIGNED, SIGNED, UNSIGNED, SIGNED, UNSIGNED, SIGNED, UNSIGNED, FLOATING, FLOATING, FLOATING, COMPLEX, COMPLEX, COMPLEX, OBJECT#
+#endian= |*3, =*14, |#
+#isobject= 0*17,NPY_OBJECT_DTYPE_FLAGS#
 */
 
 static PyArray_ArrFuncs _Py@NAME@_ArrFuncs = {
@@ -3170,8 +2700,6 @@
         (PyArray_VectorUnaryFunc*)@from@_to_STRING,
         (PyArray_VectorUnaryFunc*)@from@_to_UNICODE,
         (PyArray_VectorUnaryFunc*)@from@_to_VOID,
-        (PyArray_VectorUnaryFunc*)@from@_to_DATETIME,
-        (PyArray_VectorUnaryFunc*)@from@_to_TIMEDELTA
     },
     (PyArray_GetItemFunc*)@from@_getitem,
     (PyArray_SetItemFunc*)@from@_setitem,
@@ -3218,25 +2746,6 @@
 
 /**end repeat**/
 
-static void
-_init_datetime_descr(PyArray_Descr *descr)
-{
-    PyArray_DatetimeMetaData *dt_data;
-    PyObject *cobj;
-
-    dt_data = _pya_malloc(sizeof(PyArray_DatetimeMetaData));
-    dt_data->base = NPY_FR_us;
-    dt_data->num = 1;
-    dt_data->den = 1;
-    dt_data->events = 1;
-
-    cobj = PyCObject_FromVoidPtr((void *)dt_data, _pya_free);
-    descr->metadata = PyDict_New();
-    PyDict_SetItemString(descr->metadata, NPY_METADATA_DTSTR, cobj);
-    Py_DECREF(cobj);
-
-}
-
 #define _MAX_LETTER 128
 static char _letter_to_num[_MAX_LETTER];
 
@@ -3262,8 +2771,6 @@
     &STRING_Descr,
     &UNICODE_Descr,
     &VOID_Descr,
-    &DATETIME_Descr,
-    &TIMEDELTA_Descr,
 };
 
 /*NUMPY_API
@@ -3318,13 +2825,6 @@
         Py_INCREF(ret);
     }
 
-    /* Make sure dtype metadata is initialized for DATETIME */
-    if (PyTypeNum_ISDATETIME(type)) {
-        if (ret->metadata == NULL) {
-            _init_datetime_descr(ret);
-        }
-    }
-
     return ret;
 }
 
@@ -3340,14 +2840,14 @@
     }
 
 /**begin repeat
-#name=BOOL,BYTE,UBYTE,SHORT,USHORT,INT,UINT,INTP,UINTP,LONG,ULONG,LONGLONG,ULONGLONG,FLOAT,DOUBLE,LONGDOUBLE,CFLOAT,CDOUBLE,CLONGDOUBLE,OBJECT,STRING,UNICODE,VOID,DATETIME,TIMEDELTA#
+#name=BOOL,BYTE,UBYTE,SHORT,USHORT,INT,UINT,INTP,UINTP,LONG,ULONG,LONGLONG,ULONGLONG,FLOAT,DOUBLE,LONGDOUBLE,CFLOAT,CDOUBLE,CLONGDOUBLE,OBJECT,STRING,UNICODE,VOID#
 */
     _letter_to_num[PyArray_@name@LTR] = PyArray_@name@;
 /**end repeat**/
     _letter_to_num[PyArray_STRINGLTR2] = PyArray_STRING;
 
 /**begin repeat
-#name=BOOL,BYTE,UBYTE,SHORT,USHORT,INT,UINT,LONG,ULONG,LONGLONG,ULONGLONG,FLOAT,DOUBLE,LONGDOUBLE,CFLOAT,CDOUBLE,CLONGDOUBLE,OBJECT,STRING,UNICODE,VOID,DATETIME,TIMEDELTA#
+#name=BOOL,BYTE,UBYTE,SHORT,USHORT,INT,UINT,LONG,ULONG,LONGLONG,ULONGLONG,FLOAT,DOUBLE,LONGDOUBLE,CFLOAT,CDOUBLE,CLONGDOUBLE,OBJECT,STRING,UNICODE,VOID#
 */
     @name@_Descr.fields = Py_None;
 /**end repeat**/
@@ -3429,22 +2929,6 @@
                 (PyObject *)\
                 &PyVoidArrType_Type));
     Py_DECREF(s);
-    PyDict_SetItemString(infodict, "DATETIME",
-            s=Py_BuildValue("ciiiNNO", PyArray_DATETIMELTR,
-                PyArray_DATETIME,
-                sizeof(npy_datetime)*CHAR_BIT,
-                _ALIGN(npy_datetime),
-                MyPyLong_FromInt64(MAX_DATETIME), MyPyLong_FromInt64(MIN_DATETIME),
-                (PyObject *)&PyDatetimeArrType_Type));
-    Py_DECREF(s);
-    PyDict_SetItemString(infodict, "TIMEDELTA",
-            s=Py_BuildValue("ciiiNNO", PyArray_TIMEDELTALTR,
-                PyArray_TIMEDELTA,
-                sizeof(npy_timedelta)*CHAR_BIT,
-                _ALIGN(npy_timedelta),
-                MyPyLong_FromInt64(MAX_TIMEDELTA), MyPyLong_FromInt64(MIN_TIMEDELTA),
-                (PyObject *)&PyTimedeltaArrType_Type));
-    Py_DECREF(s);
 
 #define SETTYPE(name)                           \
     Py_INCREF(&Py##name##ArrType_Type);     \
@@ -3456,7 +2940,6 @@
     SETTYPE(Integer);
     SETTYPE(Inexact);
     SETTYPE(SignedInteger);
-    SETTYPE(TimeInteger);
     SETTYPE(UnsignedInteger);
     SETTYPE(Floating);
     SETTYPE(ComplexFloating);

Modified: branches/1.4.x/numpy/core/src/multiarray/convert_datatype.c
===================================================================
--- branches/1.4.x/numpy/core/src/multiarray/convert_datatype.c	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/src/multiarray/convert_datatype.c	2010-02-09 06:11:19 UTC (rev 8098)
@@ -510,10 +510,6 @@
     if (totype == PyArray_BOOL) {
         return 0;
     }
-    if (fromtype == PyArray_DATETIME || fromtype == PyArray_TIMEDELTA ||
-            totype == PyArray_DATETIME || totype == PyArray_TIMEDELTA) {
-        return 0;
-    }
     if (totype == PyArray_OBJECT || totype == PyArray_VOID) {
         return 1;
     }

Deleted: branches/1.4.x/numpy/core/src/multiarray/datetime.c
===================================================================
--- branches/1.4.x/numpy/core/src/multiarray/datetime.c	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/src/multiarray/datetime.c	2010-02-09 06:11:19 UTC (rev 8098)
@@ -1,910 +0,0 @@
-#define PY_SSIZE_T_CLEAN
-#include <Python.h>
-#include <datetime.h>
-
-#include <time.h>
-
-#define _MULTIARRAYMODULE
-#define NPY_NO_PREFIX
-#include <numpy/ndarrayobject.h>
-
-#include "npy_config.h"
-
-#include "_datetime.h"
-
-/* For defaults and errors */
-#define NPY_FR_ERR  -1
-
-/* Offset for number of days between Dec 31, 1969 and Jan 1, 0001
-*  Assuming Gregorian calendar was always in effect (proleptic Gregorian calendar)
-*/
-
-/* Calendar Structure for Parsing Long -> Date */
-typedef struct {
-    int year, month, day;
-} ymdstruct;
-
-typedef struct {
-    int hour, min, sec;
-} hmsstruct;
-
-
-/*
-  ====================================================
-  == Beginning of section borrowed from mx.DateTime ==
-  ====================================================
-*/
-
-/*
- * Functions in the following section are borrowed from mx.DateTime version
- * 2.0.6, and hence this code is subject to the terms of the egenix public
- * license version 1.0.0
- */
-
-#define Py_AssertWithArg(x,errortype,errorstr,a1) {if (!(x)) {PyErr_Format(errortype,errorstr,a1);goto onError;}}
-
-/* Table with day offsets for each month (0-based, without and with leap) */
-static int month_offset[2][13] = {
-    { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
-    { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
-};
-
-/* Table of number of days in a month (0-based, without and with leap) */
-static int days_in_month[2][12] = {
-    { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
-    { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
-};
-
-/* Return 1/0 iff year points to a leap year in calendar. */
-static int
-is_leapyear(register long year)
-{
-    return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
-}
-
-
-/*
- * Return the day of the week for the given absolute date.
- * Monday is 0 and Sunday is 6
- */
-static int
-day_of_week(npy_longlong absdate)
-{
-    /* Add in four for the Thursday on Jan 1, 1970 (epoch offset)*/
-    absdate += 4;
-
-    if (absdate >= 0) {
-        return absdate % 7;
-    }
-    else {
-        return 6 + (absdate + 1) % 7;
-    }
-}
-
-/*
- * Return the year offset, that is the absolute date of the day
- * 31.12.(year-1) since 31.12.1969 in the proleptic Gregorian calendar.
- */
-static npy_longlong
-year_offset(register npy_longlong year)
-{
-    /* Note that 477 == 1969/4 - 1969/100 + 1969/400 */
-    year--;
-    if (year >= 0 || -1/4 == -1)
-        return (year-1969)*365 + year/4 - year/100 + year/400 - 477;
-    else
-        return (year-1969)*365 + (year-3)/4 - (year-99)/100 + (year-399)/400 - 477;
-}
-
-/*
- * Modified version of mxDateTime function
- * Returns absolute number of days since Jan 1, 1970
- * assuming a proleptic Gregorian Calendar
- * Raises a ValueError if out of range month or day
- * day -1 is Dec 31, 1969, day 0 is Jan 1, 1970, day 1 is Jan 2, 1970
- */
-static npy_longlong
-days_from_ymd(int year, int month, int day)
-{
-
-    /* Calculate the absolute date */
-    int leap;
-    npy_longlong yearoffset, absdate;
-
-    /* Is it a leap year ? */
-    leap = is_leapyear(year);
-
-    /* Negative month values indicate months relative to the years end */
-    if (month < 0) month += 13;
-    Py_AssertWithArg(month >= 1 && month <= 12,
-                     PyExc_ValueError,
-                     "month out of range (1-12): %i",
-                     month);
-
-    /* Negative values indicate days relative to the months end */
-    if (day < 0) day += days_in_month[leap][month - 1] + 1;
-    Py_AssertWithArg(day >= 1 && day <= days_in_month[leap][month - 1],
-                     PyExc_ValueError,
-                     "day out of range: %i",
-                     day);
-
-    /*
-     * Number of days between Dec 31, (year - 1) and Dec 31, 1969
-     *    (can be negative).
-     */
-    yearoffset = year_offset(year);
-
-    if (PyErr_Occurred()) goto onError;
-
-    /*
-     * Calculate the number of days using yearoffset
-     * Jan 1, 1970 is day 0 and thus Dec. 31, 1969 is day -1
-     */
-    absdate = day-1 + month_offset[leap][month - 1] + yearoffset;
-
-    return absdate;
-
- onError:
-    return 0;
-
-}
-
-/* Returns absolute seconds from an hour, minute, and second
- */
-#define secs_from_hms(hour, min, sec) ((hour)*3600 + (min)*60 + (sec))
-
-/*
- * Takes a number of days since Jan 1, 1970 (positive or negative)
- * and returns the year. month, and day in the proleptic
- * Gregorian calendar
- *
- * Examples:
- *
- * -1 returns 1969, 12, 31
- * 0  returns 1970, 1, 1
- * 1  returns 1970, 1, 2
- */
-
-static ymdstruct
-days_to_ymdstruct(npy_datetime dlong)
-{
-    ymdstruct ymd;
-    register long year;
-    npy_longlong yearoffset;
-    int leap, dayoffset;
-    int month = 1, day = 1;
-    int *monthoffset;
-
-    dlong += 1;
-
-    /* Approximate year */
-    year = 1970 + dlong / 365.2425;
-
-    /* Apply corrections to reach the correct year */
-    while (1) {
-        /* Calculate the year offset */
-        yearoffset = year_offset(year);
-
-        /*
-         * Backward correction: absdate must be greater than the
-         * yearoffset
-         */
-        if (yearoffset >= dlong) {
-            year--;
-            continue;
-        }
-
-        dayoffset = dlong - yearoffset;
-        leap = is_leapyear(year);
-
-        /* Forward correction: non leap years only have 365 days */
-        if (dayoffset > 365 && !leap) {
-            year++;
-            continue;
-        }
-        break;
-    }
-
-    /* Now iterate to find the month */
-    monthoffset = month_offset[leap];
-    for (month = 1; month < 13; month++) {
-        if (monthoffset[month] >= dayoffset)
-            break;
-    }
-    day = dayoffset - month_offset[leap][month-1];
-
-    ymd.year  = year;
-    ymd.month = month;
-    ymd.day   = day;
-
-    return ymd;
-}
-
-/*
- * Converts an integer number of seconds in a day to hours minutes seconds.
- * It assumes seconds is between 0 and 86399.
- */
-
-static hmsstruct
-seconds_to_hmsstruct(npy_longlong dlong)
-{
-    int hour, minute, second;
-    hmsstruct hms;
-
-    hour   = dlong / 3600;
-    minute = (dlong % 3600) / 60;
-    second = dlong - (hour*3600 + minute*60);
-
-    hms.hour   = hour;
-    hms.min = minute;
-    hms.sec = second;
-
-    return hms;
-}
-
-/*
-  ====================================================
-  == End of section adapted from mx.DateTime       ==
-  ====================================================
-*/
-
-
-/*==================================================
-// Parsing DateTime struct and returns a date-time number
-// =================================================
-
- Structure is assumed to be already normalized
-*/
-
-/*
- * Create a datetime value from a filled datetime struct and resolution unit.
- */
-NPY_NO_EXPORT npy_datetime
-PyArray_DatetimeStructToDatetime(NPY_DATETIMEUNIT fr, npy_datetimestruct *d)
-{
-    npy_datetime ret;
-    npy_longlong days; /* The absolute number of days since Jan 1, 1970 */
-
-    if (fr > NPY_FR_M) {
-        days = days_from_ymd(d->year, d->month, d->day);
-    }
-    if (fr == NPY_FR_Y) {
-        ret = d->year - 1970;
-    }
-    else if (fr == NPY_FR_M) {
-        ret = (d->year - 1970) * 12 + d->month - 1;
-    }
-    else if (fr == NPY_FR_W) {
-        /* This is just 7-days for now. */
-        if (days >= 0) {
-            ret = days / 7;
-        }
-        else {
-            ret = (days - 6) / 7;
-        }
-    }
-    else if (fr == NPY_FR_B) {
-        npy_longlong x;
-        int dotw = day_of_week(days);
-
-        if (dotw > 4) {
-            /* Invalid business day */
-            ret = 0;
-        }
-        else {
-            if (days >= 0) {
-                /* offset to adjust first week */
-                x = days - 4;
-            }
-            else {
-                x = days - 2;
-            }
-            ret = 2 + (x / 7) * 5 + x % 7;
-        }
-    }
-    else if (fr == NPY_FR_D) {
-        ret = days;
-    }
-    else if (fr == NPY_FR_h) {
-        ret = days * 24 + d->hour;
-    }
-    else if (fr == NPY_FR_m) {
-        ret = days * 1440 + d->hour * 60 + d->min;
-    }
-    else if (fr == NPY_FR_s) {
-        ret = days * 86400 + secs_from_hms(d->hour, d->min, d->sec);
-    }
-    else if (fr == NPY_FR_ms) {
-        ret = days * 86400000 + secs_from_hms(d->hour, d->min, d->sec) * 1000
-            + (d->us / 1000);
-    }
-    else if (fr == NPY_FR_us) {
-        npy_int64 num = 86400 * 1000;
-        num *= 1000;
-        ret = days * num + secs_from_hms(d->hour, d->min, d->sec) * 1000000
-            + d->us;
-    }
-    else if (fr == NPY_FR_ns) {
-        npy_int64 num = 86400 * 1000;
-        num *= 1000 * 1000;
-        ret = days * num + secs_from_hms(d->hour, d->min, d->sec) * 1000000000
-            + d->us * 1000 + (d->ps / 1000);
-    }
-    else if (fr == NPY_FR_ps) {
-        npy_int64 num2 = 1000 * 1000;
-        npy_int64 num1;
-
-        num2 *= 1000 * 1000;
-        num1 = 86400 * num2;
-        ret = days * num1 + secs_from_hms(d->hour, d->min, d->sec) * num2
-            + d->us * 1000000 + d->ps;
-    }
-    else if (fr == NPY_FR_fs) {
-        /* only 2.6 hours */
-        npy_int64 num2 = 1000000;
-        num2 *= 1000000;
-        num2 *= 1000;
-
-        /* get number of seconds as a postive or negative number */
-        if (days >= 0) {
-            ret = secs_from_hms(d->hour, d->min, d->sec);
-        }
-        else {
-            ret = ((d->hour - 24)*3600 + d->min*60 + d->sec);
-        }
-        ret = ret * num2 + d->us * 1000000000 + d->ps * 1000 + (d->as / 1000);
-    }
-    else if (fr == NPY_FR_as) {
-        /* only 9.2 secs */
-        npy_int64 num1, num2;
-
-        num1 = 1000000;
-        num1 *= 1000000;
-        num2 = num1 * 1000000;
-
-        if (days >= 0) {
-            ret = d->sec;
-        }
-        else {
-            ret = d->sec - 60;
-        }
-        ret = ret * num2 + d->us * num1 + d->ps * 1000000 + d->as;
-    }
-    else {
-        /* Shouldn't get here */
-        PyErr_SetString(PyExc_ValueError, "invalid internal frequency");
-        ret = -1;
-    }
-
-    return ret;
-}
-
-/* Uses Average values when frequency is Y, M, or B */
-
-#define _DAYS_PER_MONTH 30.436875
-#define _DAYS_PER_YEAR  365.2425
-
-/*
- * Create a timdelta value from a filled timedelta struct and resolution unit.
- */
-NPY_NO_EXPORT npy_datetime
-PyArray_TimedeltaStructToTimedelta(NPY_DATETIMEUNIT fr, npy_timedeltastruct *d)
-{
-    npy_datetime ret;
-
-    if (fr == NPY_FR_Y) {
-        ret = d->day / _DAYS_PER_YEAR;
-    }
-    else if (fr == NPY_FR_M) {
-        ret = d->day / _DAYS_PER_MONTH;
-    }
-    else if (fr == NPY_FR_W) {
-        /* This is just 7-days for now. */
-        if (d->day >= 0) {
-            ret = d->day / 7;
-        }
-        else {
-            ret = (d->day - 6) / 7;
-        }
-    }
-    else if (fr == NPY_FR_B) {
-        /*
-         * What is the meaning of a relative Business day?
-         *
-         * This assumes you want to take the day difference and
-         * convert it to business-day difference (removing 2 every 7).
-         */
-        ret = (d->day / 7) * 5 + d->day % 7;
-    }
-    else if (fr == NPY_FR_D) {
-        ret = d->day;
-    }
-    else if (fr == NPY_FR_h) {
-        ret = d->day + d->sec / 3600;
-    }
-    else if (fr == NPY_FR_m) {
-        ret = d->day * 1440 + d->sec / 60;
-    }
-    else if (fr == NPY_FR_s) {
-        ret = d->day * 86400 + d->sec;
-    }
-    else if (fr == NPY_FR_ms) {
-        ret = d->day * 86400000 + d->sec * 1000 + d->us / 1000;
-    }
-    else if (fr == NPY_FR_us) {
-        npy_int64 num = 86400000;
-        num *= 1000;
-        ret = d->day * num + d->sec * 1000000 + d->us;
-    }
-    else if (fr == NPY_FR_ns) {
-        npy_int64 num = 86400000;
-        num *= 1000000;
-        ret = d->day * num + d->sec * 1000000000 + d->us * 1000 + (d->ps / 1000);
-    }
-    else if (fr == NPY_FR_ps) {
-        npy_int64 num2, num1;
-
-        num2 = 1000000;
-        num2 *= 1000000;
-        num1 = 86400 * num2;
-
-        ret = d->day * num1 + d->sec * num2 + d->us * 1000000 + d->ps;
-    }
-    else if (fr == NPY_FR_fs) {
-        /* only 2.6 hours */
-        npy_int64 num2 = 1000000000;
-        num2 *= 1000000;
-        ret = d->sec * num2 + d->us * 1000000000 + d->ps * 1000 + (d->as / 1000);
-    }
-    else if (fr == NPY_FR_as) {
-        /* only 9.2 secs */
-        npy_int64 num1, num2;
-
-        num1 = 1000000;
-        num1 *= 1000000;
-        num2 = num1 * 1000000;
-        ret = d->sec * num2 + d->us * num1 + d->ps * 1000000 + d->as;
-    }
-    else {
-        /* Shouldn't get here */
-        PyErr_SetString(PyExc_ValueError, "invalid internal frequency");
-        ret = -1;
-    }
-
-    return ret;
-}
-
-
-
-/*
- * Fill the datetime struct from the value and resolution unit.
- */
-NPY_NO_EXPORT void
-PyArray_DatetimeToDatetimeStruct(npy_datetime val, NPY_DATETIMEUNIT fr,
-                                 npy_datetimestruct *result)
-{
-    int year = 1970, month = 1, day = 1,
-        hour = 0, min = 0, sec = 0,
-        us = 0, ps = 0, as = 0;
-
-    npy_int64 tmp;
-    ymdstruct ymd;
-    hmsstruct hms;
-
-    /*
-     * Note that what looks like val / N and val % N for positive numbers maps to
-     * [val - (N-1)] / N and [N-1 + (val+1) % N] for negative numbers (with the 2nd
-     * value, the remainder, being positive in both cases).
-     */
-    if (fr == NPY_FR_Y) {
-        year = 1970 + val;
-    }
-    else if (fr == NPY_FR_M) {
-        if (val >= 0) {
-            year  = 1970 + val / 12;
-            month = val % 12 + 1;
-        }
-        else {
-            year  = 1969 + (val + 1) / 12;
-            month = 12 + (val + 1)% 12;
-        }
-    }
-    else if (fr == NPY_FR_W) {
-        /* A week is the same as 7 days */
-        ymd = days_to_ymdstruct(val * 7);
-        year  = ymd.year;
-        month = ymd.month;
-        day   = ymd.day;
-    }
-    else if (fr == NPY_FR_B) {
-        /* Number of business days since Thursday, 1-1-70 */
-        npy_longlong absdays;
-        /*
-         * A buisness day is M T W Th F (i.e. all but Sat and Sun.)
-         * Convert the business day to the number of actual days.
-         *
-         * Must convert [0,1,2,3,4,5,6,7,...] to
-         *                  [0,1,4,5,6,7,8,11,...]
-         * and  [...,-9,-8,-7,-6,-5,-4,-3,-2,-1,0] to
-         *        [...,-13,-10,-9,-8,-7,-6,-3,-2,-1,0]
-         */
-        if (val >= 0) {
-            absdays = 7 * ((val + 3) / 5) + ((val + 3) % 5) - 3;
-        }
-        else {
-            /* Recall how C computes / and % with negative numbers */
-            absdays = 7 * ((val - 1) / 5) + ((val - 1) % 5) + 1;
-        }
-        ymd = days_to_ymdstruct(absdays);
-        year  = ymd.year;
-        month = ymd.month;
-        day   = ymd.day;
-    }
-    else if (fr == NPY_FR_D) {
-        ymd = days_to_ymdstruct(val);
-        year  = ymd.year;
-        month = ymd.month;
-        day   = ymd.day;
-    }
-    else if (fr == NPY_FR_h) {
-        if (val >= 0) {
-            ymd  = days_to_ymdstruct(val / 24);
-            hour  = val % 24;
-        }
-        else {
-            ymd  = days_to_ymdstruct((val - 23) / 24);
-            hour = 23 + (val + 1) % 24;
-        }
-        year  = ymd.year;
-        month = ymd.month;
-        day   = ymd.day;
-    }
-    else if (fr == NPY_FR_m) {
-        if (val >= 0) {
-            ymd = days_to_ymdstruct(val / 1440);
-            min = val % 1440;
-        }
-        else {
-            ymd = days_to_ymdstruct((val - 1439) / 1440);
-            min = 1439 + (val + 1) % 1440;
-        }
-        hms = seconds_to_hmsstruct(min * 60);
-        year   = ymd.year;
-        month  = ymd.month;
-        day    = ymd.day;
-        hour   = hms.hour;
-        min = hms.min;
-    }
-    else if (fr == NPY_FR_s) {
-        if (val >= 0) {
-            ymd = days_to_ymdstruct(val / 86400);
-            sec = val % 86400;
-        }
-        else {
-            ymd = days_to_ymdstruct((val - 86399) / 86400);
-            sec = 86399 + (val + 1) % 86400;
-        }
-        hms = seconds_to_hmsstruct(val);
-        year   = ymd.year;
-        month  = ymd.month;
-        day    = ymd.day;
-        hour   = hms.hour;
-        min = hms.min;
-        sec = hms.sec;
-    }
-    else if (fr == NPY_FR_ms) {
-        if (val >= 0) {
-            ymd = days_to_ymdstruct(val / 86400000);
-            tmp  = val % 86400000;
-        }
-        else {
-            ymd = days_to_ymdstruct((val - 86399999) / 86400000);
-            tmp  = 86399999 + (val + 1) % 86399999;
-        }
-        hms = seconds_to_hmsstruct(tmp / 1000);
-        us  = (tmp % 1000)*1000;
-        year    = ymd.year;
-        month   = ymd.month;
-        day     = ymd.day;
-        hour    = hms.hour;
-        min     = hms.min;
-        sec     = hms.sec;
-    }
-    else if (fr == NPY_FR_us) {
-        npy_int64 num1, num2;
-        num1 = 86400000;
-        num1 *= 1000;
-        num2 = num1 - 1;
-        if (val >= 0) {
-            ymd = days_to_ymdstruct(val / num1);
-            tmp = val % num1;
-        }
-        else {
-            ymd = days_to_ymdstruct((val - num2)/ num1);
-            tmp = num2 + (val + 1) % num1;
-        }
-        hms = seconds_to_hmsstruct(tmp / 1000000);
-        us = tmp % 1000000;
-        year    = ymd.year;
-        month   = ymd.month;
-        day     = ymd.day;
-        hour    = hms.hour;
-        min     = hms.min;
-        sec     = hms.sec;
-    }
-    else if (fr == NPY_FR_ns) {
-        npy_int64 num1, num2, num3;
-        num1 = 86400000;
-        num1 *= 1000000000;
-        num2 = num1 - 1;
-        num3 = 1000000;
-        num3 *= 1000000;
-        if (val >= 0) {
-            ymd = days_to_ymdstruct(val / num1);
-            tmp = val % num1;
-        }
-        else {
-            ymd = days_to_ymdstruct((val - num2)/ num1);
-            tmp = num2 + (val + 1) % num1;
-        }
-        hms = seconds_to_hmsstruct(tmp / 1000000000);
-        tmp = tmp % 1000000000;
-        us = tmp / 1000;
-        ps = (tmp % 1000) * 1000;
-        year    = ymd.year;
-        month   = ymd.month;
-        day     = ymd.day;
-        hour    = hms.hour;
-        min     = hms.min;
-        sec     = hms.sec;
-    }
-    else if (fr == NPY_FR_ps) {
-        npy_int64 num1, num2, num3;
-        num3 = 1000000000;
-        num3 *= 1000;
-        num1 = 86400 * num3;
-        num2 = num1 - 1;
-
-        if (val >= 0) {
-            ymd = days_to_ymdstruct(val / num1);
-            tmp = val % num1;
-        }
-        else {
-            ymd = days_to_ymdstruct((val - num2)/ num1);
-            tmp = num2 + (val + 1) % num1;
-        }
-        hms = seconds_to_hmsstruct(tmp / num3);
-        tmp = tmp % num3;
-        us = tmp / 1000000;
-        ps = tmp % 1000000;
-        year    = ymd.year;
-        month   = ymd.month;
-        day     = ymd.day;
-        hour    = hms.hour;
-        min     = hms.min;
-        sec     = hms.sec;
-    }
-    else if (fr == NPY_FR_fs) {
-        /* entire range is only += 2.6 hours */
-        npy_int64 num1, num2;
-        num1 = 1000000000;
-        num1 *= 1000;
-        num2 = num1 * 1000;
-
-        if (val >= 0) {
-            sec = val / num2;
-            tmp = val % num2;
-            hms = seconds_to_hmsstruct(sec);
-            hour = hms.hour;
-            min = hms.min;
-            sec = hms.sec;
-        }
-        else {
-            /* tmp (number of fs) will be positive after this segment */
-            year = 1969;
-            day = 31;
-            month = 12;
-            sec = (val - (num2-1))/num2;
-            tmp = (num2-1) + (val + 1) % num2;
-            if (sec == 0) {
-                /* we are at the last second */
-                hour = 23;
-                min = 59;
-                sec = 59;
-            }
-            else {
-                hour = 24 + (sec - 3599)/3600;
-                sec = 3599 + (sec+1)%3600;
-                min = sec / 60;
-                sec = sec % 60;
-            }
-        }
-        us = tmp / 1000000000;
-        tmp = tmp % 1000000000;
-        ps = tmp / 1000;
-        as = (tmp % 1000) * 1000;
-    }
-    else if (fr == NPY_FR_as) {
-        /* entire range is only += 9.2 seconds */
-        npy_int64 num1, num2, num3;
-        num1 = 1000000;
-        num2 = num1 * 1000000;
-        num3 = num2 * 1000000;
-        if (val >= 0) {
-            hour = 0;
-            min = 0;
-            sec = val / num3;
-            tmp = val % num3;
-        }
-        else {
-            year = 1969;
-            day = 31;
-            month = 12;
-            hour = 23;
-            min = 59;
-            sec = 60 + (val - (num3-1)) / num3;
-            tmp = (num3-1) + (val+1) % num3;
-        }
-        us = tmp / num2;
-        tmp = tmp % num2;
-        ps = tmp / num1;
-        as = tmp % num1;
-    }
-    else {
-        PyErr_SetString(PyExc_RuntimeError, "invalid internal time resolution");
-    }
-
-    result->year  = year;
-    result->month = month;
-    result->day   = day;
-    result->hour  = hour;
-    result->min   = min;
-    result->sec   = sec;
-    result->us    = us;
-    result->ps    = ps;
-    result->as    = as;
-
-    return;
-}
-
-/*
- * FIXME: Overflow is not handled at all
- *   To convert from Years, Months, and Business Days, multiplication by the average is done
- */
-
-/*
- * Fill the timedelta struct from the timedelta value and resolution unit.
- */
-NPY_NO_EXPORT void
-PyArray_TimedeltaToTimedeltaStruct(npy_timedelta val, NPY_DATETIMEUNIT fr,
-                                 npy_timedeltastruct *result)
-{
-    npy_longlong day=0;
-    int sec=0, us=0, ps=0, as=0;
-    npy_bool negative=0;
-
-    /*
-     * Note that what looks like val / N and val % N for positive numbers maps to
-     * [val - (N-1)] / N and [N-1 + (val+1) % N] for negative numbers (with the 2nd
-     * value, the remainder, being positive in both cases).
-     */
-
-    if (val < 0) {
-        val = -val;
-        negative = 1;
-    }
-    if (fr == NPY_FR_Y) {
-        day = val * _DAYS_PER_YEAR;
-    }
-    else if (fr == NPY_FR_M) {
-        day = val * _DAYS_PER_MONTH;
-    }
-    else if (fr == NPY_FR_W) {
-        day = val * 7;
-    }
-    else if (fr == NPY_FR_B) {
-        /* Number of business days since Thursday, 1-1-70 */
-        day = (val * 7) / 5;
-    }
-    else if (fr == NPY_FR_D) {
-        day = val;
-    }
-    else if (fr == NPY_FR_h) {
-        day = val / 24;
-        sec = (val % 24)*3600;
-    }
-    else if (fr == NPY_FR_m) {
-        day = val / 1440;
-        sec = (val % 1440)*60;
-    }
-    else if (fr == NPY_FR_s) {
-        day = val / 86400;
-        sec = val % 86400;
-    }
-    else if (fr == NPY_FR_ms) {
-        day = val / 86400000;
-        val = val % 86400000;
-        sec = val / 1000;
-        us = (val % 1000)*1000;
-    }
-    else if (fr == NPY_FR_us) {
-        npy_int64 num1;
-        num1 = 86400000;
-        num1 *= 1000;
-        day = val / num1;
-        us = val % num1;
-        sec = us / 1000000;
-        us = us % 1000000;
-    }
-    else if (fr == NPY_FR_ns) {
-        npy_int64 num1;
-        num1 = 86400000;
-        num1 *= 1000000;
-        day = val / num1;
-        val = val % num1;
-        sec = val / 1000000000;
-        val = val % 1000000000;
-        us  = val / 1000;
-        ps  = (val % 1000) * 1000;
-    }
-    else if (fr == NPY_FR_ps) {
-        npy_int64 num1, num2;
-        num2 = 1000000000;
-        num2 *= 1000;
-        num1 = 86400 * num2;
-
-        day = val / num1;
-        ps = val % num1;
-        sec = ps / num2;
-        ps = ps % num2;
-        us = ps / 1000000;
-        ps = ps % 1000000;
-    }
-    else if (fr == NPY_FR_fs) {
-        /* entire range is only += 9.2 hours */
-        npy_int64 num1, num2;
-        num1 = 1000000000;
-        num2 = num1 * 1000000;
-
-        day = 0;
-        sec = val / num2;
-        val = val % num2;
-        us = val / num1;
-        val = val % num1;
-        ps = val / 1000;
-        as = (val % 1000) * 1000;
-    }
-    else if (fr == NPY_FR_as) {
-        /* entire range is only += 2.6 seconds */
-        npy_int64 num1, num2, num3;
-        num1 = 1000000;
-        num2 = num1 * 1000000;
-        num3 = num2 * 1000000;
-        day = 0;
-        sec = val / num3;
-        as = val % num3;
-        us = as / num2;
-        as = as % num2;
-        ps = as / num1;
-        as = as % num1;
-    }
-    else {
-        PyErr_SetString(PyExc_RuntimeError, "invalid internal time resolution");
-    }
-
-    if (negative) {
-        result->day = -day;
-        result->sec = -sec;
-        result->us = -us;
-        result->ps = -ps;
-        result->as = -as;
-    }
-    else {
-        result->day   = day;
-        result->sec   = sec;
-        result->us    = us;
-        result->ps    = ps;
-        result->as    = as;
-    }
-    return;
-}

Modified: branches/1.4.x/numpy/core/src/multiarray/descriptor.c
===================================================================
--- branches/1.4.x/numpy/core/src/multiarray/descriptor.c	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/src/multiarray/descriptor.c	2010-02-09 06:11:19 UTC (rev 8098)
@@ -125,21 +125,8 @@
     return 0;
 }
 
-static int
-_check_for_datetime(char *type, int len)
-{
-    if (len < 1) return 0;
-    if (type[1] == '8' && (type[0] == 'M' || type[0] == 'm'))
-        return 1;
-    if (len < 10) return 0;
-    if (strncmp(type, "datetime64", 10) == 0) return 1;
-    if (len < 11) return 0;
-    if (strncmp(type, "timedelta64", 11) == 0) return 1;
-    return 0;
-}
 
 
-
 #undef _chk_byteorder
 
 static PyArray_Descr *
@@ -477,234 +464,6 @@
     return NULL;
 }
 
-/* Exported as DATETIMEUNITS in multiarraymodule.c */
-NPY_NO_EXPORT char *_datetime_strings[] = {
-    NPY_STR_Y,
-    NPY_STR_M,
-    NPY_STR_W,
-    NPY_STR_B,
-    NPY_STR_D,
-    NPY_STR_h,
-    NPY_STR_m,
-    NPY_STR_s,
-    NPY_STR_ms,
-    NPY_STR_us,
-    NPY_STR_ns,
-    NPY_STR_ps,
-    NPY_STR_fs,
-    NPY_STR_as
-};
-
-static NPY_DATETIMEUNIT
- _unit_from_str(char *base)
-{
-    NPY_DATETIMEUNIT unit;
-
-    if (base == NULL)
-        return NPY_DATETIME_DEFAULTUNIT;
-
-    unit = NPY_FR_Y;
-    while (unit < NPY_DATETIME_NUMUNITS) {
-        if (strcmp(base, _datetime_strings[unit]) == 0)
-            break;
-        unit++;
-    }
-
-    if (unit == NPY_DATETIME_NUMUNITS)
-        return NPY_DATETIME_DEFAULTUNIT;
-
-    return unit;
-}
-
-static int _multiples_table[16][4] = {
-    {12, 52, 365},                            /* NPY_FR_Y */
-    {NPY_FR_M, NPY_FR_W, NPY_FR_D},
-    {4,  30, 720},                            /* NPY_FR_M */
-    {NPY_FR_W, NPY_FR_D, NPY_FR_h},
-    {5,  7,  168, 10080},                     /* NPY_FR_W */
-    {NPY_FR_B, NPY_FR_D, NPY_FR_h, NPY_FR_m},
-    {24, 1440, 86400},                        /* NPY_FR_B */
-    {NPY_FR_h, NPY_FR_m, NPY_FR_s},
-    {24, 1440, 86400},                        /* NPY_FR_D */
-    {NPY_FR_h, NPY_FR_m, NPY_FR_s},
-    {60, 3600},                               /* NPY_FR_h */
-    {NPY_FR_m, NPY_FR_s},
-    {60, 60000},                              /* NPY_FR_m */
-    {NPY_FR_s, NPY_FR_ms},
-    {1000, 1000000},                          /* >=NPY_FR_s */
-    {0, 0}
-};
-
-
-/* Translate divisors into multiples of smaller units */
-static int
-_convert_divisor_to_multiple(PyArray_DatetimeMetaData *meta)
-{
-    int i, num, ind;
-    int *totry;
-    NPY_DATETIMEUNIT *baseunit;
-    int q, r;
-
-    ind = ((int)meta->base - (int)NPY_FR_Y)*2;
-    totry = _multiples_table[ind];
-    baseunit = (NPY_DATETIMEUNIT *)_multiples_table[ind+1];
-
-    num = 3;
-    if (meta->base == NPY_FR_W) num = 4;
-    else if (meta->base > NPY_FR_D) num = 2;
-
-    if (meta->base >= NPY_FR_s) {
-        ind = ((int)NPY_FR_s - (int)NPY_FR_Y)*2;
-        totry = _multiples_table[ind];
-        baseunit = (NPY_DATETIMEUNIT *)_multiples_table[ind+1];
-        baseunit[0] = meta->base + 1;
-        baseunit[1] = meta->base + 2;
-        if (meta->base == NPY_DATETIME_NUMUNITS-2) num = 1;
-	if (meta->base == NPY_DATETIME_NUMUNITS-1) num = 0;
-    }
-
-    for (i=0; i<num; i++) {
-        q = totry[i] / meta->den;
-        r = totry[i] % meta->den;
-        if (r==0) break;
-    }
-    if (i==num) {
-        PyErr_Format(PyExc_ValueError, "divisor (%d) is not a multiple of a lower-unit", meta->den);
-        return -1;
-    }
-    meta->base = baseunit[i];
-    meta->den = 1;
-    meta->num *= q;
-
-    return 0;
-}
-
-
-static PyObject *
-_get_datetime_tuple_from_cobj(PyObject *cobj)
-{
-    PyArray_DatetimeMetaData *dt_data;
-    PyObject *dt_tuple;
-
-    dt_data = PyCObject_AsVoidPtr(cobj);
-    dt_tuple = PyTuple_New(4);
-
-    PyTuple_SET_ITEM(dt_tuple, 0,
-                     PyString_FromString(_datetime_strings[dt_data->base]));
-    PyTuple_SET_ITEM(dt_tuple, 1,
-                     PyInt_FromLong(dt_data->num));
-    PyTuple_SET_ITEM(dt_tuple, 2,
-                     PyInt_FromLong(dt_data->den));
-    PyTuple_SET_ITEM(dt_tuple, 3,
-                     PyInt_FromLong(dt_data->events));
-
-    return dt_tuple;
-}
-
-static PyObject *
-_convert_datetime_tuple_to_cobj(PyObject *tuple)
-{
-    PyArray_DatetimeMetaData *dt_data;
-
-    dt_data = _pya_malloc(sizeof(PyArray_DatetimeMetaData));
-
-    dt_data->base = _unit_from_str\
-        (PyString_AsString(PyTuple_GET_ITEM(tuple, 0)));
-
-    /* Assumes other objects are Python integers */
-    dt_data->num = PyInt_AS_LONG(PyTuple_GET_ITEM(tuple, 1));
-    dt_data->den = PyInt_AS_LONG(PyTuple_GET_ITEM(tuple, 2));
-    dt_data->events = PyInt_AS_LONG(PyTuple_GET_ITEM(tuple, 3));
-
-    if (dt_data->den > 1) {
-        if (_convert_divisor_to_multiple(dt_data) < 0) return NULL;
-    }
-
-    return PyCObject_FromVoidPtr((void *)dt_data, _pya_free);
-}
-
-static PyArray_Descr *
-_convert_from_datetime_tuple(PyObject *obj)
-{
-    PyArray_Descr *new;
-    PyObject *dt_tuple;
-    PyObject *dt_cobj;
-    PyObject *datetime;
-
-    if (!PyTuple_Check(obj) || PyTuple_GET_SIZE(obj)!=2) {
-        PyErr_SetString(PyExc_RuntimeError, "_datetimestring is "       \
-                        "not returning a tuple with length 2");
-        return NULL;
-    }
-
-    dt_tuple = PyTuple_GET_ITEM(obj, 0);
-    datetime = PyTuple_GET_ITEM(obj, 1);
-    if (!PyTuple_Check(dt_tuple) || PyTuple_GET_SIZE(dt_tuple) != 4 || \
-        !PyInt_Check(datetime)) {
-        PyErr_SetString(PyExc_RuntimeError, "_datetimestring is "       \
-                        "not returning a length 4 tuple and an integer");
-        return NULL;
-    }
-
-    /* Create new timedelta or datetime dtype */
-    if (PyObject_IsTrue(datetime)) {
-        new = PyArray_DescrNewFromType(PyArray_DATETIME);
-    }
-    else {
-        new = PyArray_DescrNewFromType(PyArray_TIMEDELTA);
-    }
-
-    if (new == NULL) return NULL;
-
-    /* Remove any reference to old metadata dictionary */
-    /* And create a new one for this new dtype */
-    Py_XDECREF(new->metadata);
-    if ((new->metadata = PyDict_New())== NULL) return NULL;
-
-    dt_cobj = _convert_datetime_tuple_to_cobj(dt_tuple);
-    if (dt_cobj == NULL) { /* Failure in conversion */
-        Py_DECREF(new);
-        return NULL;
-    }
-
-    /* Assume this sets a new reference to dt_cobj */
-    PyDict_SetItemString(new->metadata, NPY_METADATA_DTSTR, dt_cobj);
-    Py_DECREF(dt_cobj);
-
-    return new;
-}
-
-
-static PyArray_Descr *
-_convert_from_datetime(PyObject *obj)
-{
-    PyObject *tupleobj;
-    PyArray_Descr *res;
-    PyObject *_numpy_internal;
-
-    if (!PyString_Check(obj)) {
-        return NULL;
-    }
-    _numpy_internal = PyImport_ImportModule("numpy.core._internal");
-    if (_numpy_internal == NULL) {
-        return NULL;
-    }
-    tupleobj = PyObject_CallMethod(_numpy_internal, "_datetimestring", "O", obj);
-    Py_DECREF(_numpy_internal);
-    if (!tupleobj) return NULL;
-    /* tuple of a standard tuple (baseunit, num, den, events) and a
-       timedelta boolean
-    */
-    res = _convert_from_datetime_tuple(tupleobj);
-    Py_DECREF(tupleobj);
-    if (!res && !PyErr_Occurred()) {
-        PyErr_SetString(PyExc_ValueError, "invalid data-type");
-        return NULL;
-    }
-    return res;
-}
-
-
 /*
  * comma-separated string
  * this is the format developed by the numarray records module
@@ -1161,6 +920,7 @@
         if (len <= 0) {
             goto fail;
         }
+#if 0
         /* check for datetime format */
         if ((len > 1) && _check_for_datetime(type, len)) {
             *at = _convert_from_datetime(obj);
@@ -1169,6 +929,7 @@
             }
             return PY_FAIL;
         }
+#endif
         /* check for commas present or first (or second) element a digit */
         if (_check_for_commastring(type, len)) {
             *at = _convert_from_commastring(obj, 0);
@@ -1415,47 +1176,6 @@
                          self->subarray->shape);
 }
 
-static PyObject *
-_append_to_datetime_typestr(PyArray_Descr *self, PyObject *ret)
-{
-    PyObject *tmp;
-    PyObject *res;
-    int num, den, events;
-    char *basestr;
-    PyArray_DatetimeMetaData *dt_data;
-
-    /* This shouldn't happen */
-    if (self->metadata == NULL) return ret;
-
-    tmp = PyDict_GetItemString(self->metadata, NPY_METADATA_DTSTR);
-    dt_data = PyCObject_AsVoidPtr(tmp);
-    num = dt_data->num;
-    den = dt_data->den;
-    events = dt_data->events;
-    basestr = _datetime_strings[dt_data->base];
-
-    if (num == 1) {
-        tmp = PyString_FromString(basestr);
-    }
-    else {
-        tmp = PyString_FromFormat("%d%s", num, basestr);
-    }
-    if (den != 1) {
-        res = PyString_FromFormat("/%d", den);
-        PyString_ConcatAndDel(&tmp, res);
-    }
-
-    res = PyString_FromString("[");
-    PyString_ConcatAndDel(&res, tmp);
-    PyString_ConcatAndDel(&res, PyString_FromString("]"));
-    if (events != 1) {
-        tmp = PyString_FromFormat("//%d", events);
-        PyString_ConcatAndDel(&res, tmp);
-    }
-    PyString_ConcatAndDel(&ret, res);
-    return ret;
-}
-
 NPY_NO_EXPORT PyObject *
 arraydescr_protocol_typestr_get(PyArray_Descr *self)
 {
@@ -1475,9 +1195,6 @@
     }
 
     ret = PyString_FromFormat("%c%c%d", endian, basic_, size);
-    if (PyDataType_ISDATETIME(self)) {
-        ret = _append_to_datetime_typestr(self, ret);
-    }
     return ret;
 
 }
@@ -1518,9 +1235,6 @@
         p = PyString_FromFormat("%d", self->elsize * 8);
         PyString_ConcatAndDel(&res, p);
     }
-    if (PyDataType_ISDATETIME(self)) {
-        res = _append_to_datetime_typestr(self, res);
-    }
     return res;
 }
 
@@ -1870,30 +1584,6 @@
     return (PyObject *)conv;
 }
 
-/* Return a tuple of (cleaned metadata dictionary,
-                      tuple with (str, num, events))
-*/
-static PyObject *
-_get_pickleabletype_from_metadata(PyObject *metadata)
-{
-    PyObject *newdict;
-    PyObject *newtup, *dt_tuple;
-    PyObject *cobj;
-
-    newdict = PyDict_Copy(metadata);
-    PyDict_DelItemString(newdict, NPY_METADATA_DTSTR);
-    newtup = PyTuple_New(2);
-    PyTuple_SET_ITEM(newtup, 0, newdict);
-
-    cobj = PyDict_GetItemString(metadata, NPY_METADATA_DTSTR);
-    dt_tuple = _get_datetime_tuple_from_cobj(cobj);
-
-    PyTuple_SET_ITEM(newtup, 1, dt_tuple);
-
-    return newtup;
-}
-
-
 /* return a tuple of (callable object, args, state). */
 static PyObject *
 arraydescr_reduce(PyArray_Descr *self, PyObject *NPY_UNUSED(args))
@@ -1981,18 +1671,8 @@
     PyTuple_SET_ITEM(state, 6, PyInt_FromLong(alignment));
     PyTuple_SET_ITEM(state, 7, PyInt_FromLong(self->hasobject));
     if (self->metadata) {
-        if (PyDataType_ISDATETIME(self)) {
-            PyObject *newobj;
-            /* Handle CObject in NPY_METADATA_DTSTR key separately */
-            /* newobj is a tuple of cleaned metadata dictionary
-               and tuple of date_time info (str, num, den, events) */
-            newobj = _get_pickleabletype_from_metadata(self->metadata);
-            PyTuple_SET_ITEM(state, 8, newobj);
-        }
-        else {
-            Py_INCREF(self->metadata);
-            PyTuple_SET_ITEM(state, 8, self->metadata);
-        }
+        Py_INCREF(self->metadata);
+        PyTuple_SET_ITEM(state, 8, self->metadata);
     }
     else {
         PyTuple_SET_ITEM(state, 8, Py_None);
@@ -2179,22 +1859,12 @@
     }
 
     Py_XDECREF(self->metadata);
-    if (PyDataType_ISDATETIME(self) && (metadata != Py_None) && (metadata != NULL)) {
-        PyObject *cobj;
-        self->metadata = PyTuple_GET_ITEM(metadata, 0);
-        Py_INCREF(self->metadata);
-        cobj = _convert_datetime_tuple_to_cobj(PyTuple_GET_ITEM(metadata, 1));
-        PyDict_SetItemString(self->metadata, NPY_METADATA_DTSTR, cobj);
-        Py_DECREF(cobj);
-    }
-    else {
-        /* We have a borrowed reference to metadata so no need
-           to alter reference count
-        */
-        if (metadata == Py_None) metadata = NULL;
-        self->metadata = metadata;
-        Py_XINCREF(metadata);
-    }
+    /* We have a borrowed reference to metadata so no need
+       to alter reference count
+    */
+    if (metadata == Py_None) metadata = NULL;
+    self->metadata = metadata;
+    Py_XINCREF(metadata);
 
     Py_INCREF(Py_None);
     return Py_None;

Modified: branches/1.4.x/numpy/core/src/multiarray/multiarraymodule.c
===================================================================
--- branches/1.4.x/numpy/core/src/multiarray/multiarraymodule.c	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/src/multiarray/multiarraymodule.c	2010-02-09 06:11:19 UTC (rev 8098)
@@ -1307,34 +1307,6 @@
     return same;
 }
 
-/*
- * compare the metadata for two date-times
- * return 1 if they are the same 
- * or 0 if not
- */
-static int
-_equivalent_units(PyObject *meta1, PyObject *meta2) 
-{
-    PyObject *cobj1, *cobj2;
-    PyArray_DatetimeMetaData *data1, *data2;
-    
-    /* Same meta object */
-    if (meta1 == meta2)
-	return 1;
-    
-    cobj1 = PyDict_GetItemString(meta1, NPY_METADATA_DTSTR);
-    cobj2 = PyDict_GetItemString(meta2, NPY_METADATA_DTSTR);
-    if (cobj1 == cobj2) 
-	return 1;
-    
-    data1 = PyCObject_AsVoidPtr(cobj1);
-    data2 = PyCObject_AsVoidPtr(cobj2);
-    
-    return ((data1->base == data2->base) && (data1->num == data2->num) 
-	    && (data1->den == data2->den) && (data1->events == data2->events));    
-}
-
-
 /*NUMPY_API
  *
  * This function returns true if the two typecodes are
@@ -1359,11 +1331,6 @@
         return ((typenum1 == typenum2) &&
                 _equivalent_fields(typ1->fields, typ2->fields));
     }
-    if (typenum1 == PyArray_DATETIME || typenum1 == PyArray_DATETIME
-	|| typenum2 == PyArray_TIMEDELTA || typenum2 == PyArray_TIMEDELTA) {
-	return ((typenum1 == typenum2) &&
-		_equivalent_units(typ1->metadata, typ2->metadata));
-    }
     return (typ1->kind == typ2->kind);
 }
 
@@ -2839,10 +2806,6 @@
     SINGLE_INHERIT(LongLong, SignedInteger);
 #endif
 
-    SINGLE_INHERIT(TimeInteger, SignedInteger);
-    SINGLE_INHERIT(Datetime, TimeInteger);
-    SINGLE_INHERIT(Timedelta, TimeInteger);
-
     /*
        fprintf(stderr,
         "tp_free = %p, PyObject_Del = %p, int_tp_free = %p, base.tp_free = %p\n",
@@ -2999,10 +2962,6 @@
     PyDict_SetItemString(d, "METADATA_DTSTR", s);
     Py_DECREF(s);
 
-    s = PyCObject_FromVoidPtr((void *)_datetime_strings, NULL);
-    PyDict_SetItemString(d, "DATETIMEUNITS", s);
-    Py_DECREF(s);
-
 #define ADDCONST(NAME)                          \
     s = PyInt_FromLong(NPY_##NAME);             \
     PyDict_SetItemString(d, #NAME, s);          \

Modified: branches/1.4.x/numpy/core/src/multiarray/scalarapi.c
===================================================================
--- branches/1.4.x/numpy/core/src/multiarray/scalarapi.c	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/src/multiarray/scalarapi.c	2010-02-09 06:11:19 UTC (rev 8098)
@@ -60,8 +60,6 @@
         CASE(CDOUBLE, CDouble);
         CASE(CLONGDOUBLE, CLongDouble);
         CASE(OBJECT, Object);
-        CASE(DATETIME, Datetime);
-        CASE(TIMEDELTA, Timedelta);
 #undef CASE
         case NPY_STRING:
             return (void *)PyString_AS_STRING(scalar);
@@ -89,10 +87,6 @@
                 _IFCASE(Int);
                 _IFCASE(Long);
                 _IFCASE(LongLong);
-                if _CHK(TimeInteger) {
-                    _IFCASE(Datetime);
-                    _IFCASE(Timedelta);
-                }
             }
             else {
                 /* Unsigned Integer */
@@ -513,40 +507,6 @@
         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);
@@ -647,16 +607,6 @@
     if (obj == NULL) {
         return NULL;
     }
-    if PyTypeNum_ISDATETIME(type_num) {
-        /* We need to copy the resolution information over to the scalar */
-        /* Get the void * from the metadata dictionary */
-        PyObject *cobj; 
-        PyArray_DatetimeMetaData *dt_data;
-        cobj = PyDict_GetItemString(descr->metadata, NPY_METADATA_DTSTR);
-        dt_data = PyCObject_AsVoidPtr(cobj);
-        memcpy(&(((PyDatetimeScalarObject *)obj)->obmeta), dt_data,
-               sizeof(PyArray_DatetimeMetaData));       
-    }
     if PyTypeNum_ISFLEXIBLE(type_num) {
             if (type_num == PyArray_STRING) {
                 destptr = PyString_AS_STRING(obj);

Modified: branches/1.4.x/numpy/core/src/multiarray/scalartypes.c.src
===================================================================
--- branches/1.4.x/numpy/core/src/multiarray/scalartypes.c.src	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/src/multiarray/scalartypes.c.src	2010-02-09 06:11:19 UTC (rev 8098)
@@ -1917,12 +1917,12 @@
 /**begin repeat
  * #name = byte, short, int, long, longlong, ubyte, ushort, uint, ulong,
  *         ulonglong, float, double, longdouble, cfloat, cdouble, clongdouble,
- *         string, unicode, object, datetime, timedelta#
+ *         string, unicode, object#
  * #TYPE = BYTE, SHORT, INT, LONG, LONGLONG, UBYTE, USHORT, UINT, ULONG,
  *         ULONGLONG, FLOAT, DOUBLE, LONGDOUBLE, CFLOAT, CDOUBLE, CLONGDOUBLE,
- *         STRING, UNICODE, OBJECT, DATETIME, TIMEDELTA#
- * #work = 0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,z,z,0,0,0#
- * #default = 0*16,1*2,2,0*2#
+ *         STRING, UNICODE, OBJECT#
+ * #work = 0,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,z,z,0#
+ * #default = 0*16,1*2,2#
  */
 
 #define _NPY_UNUSED2_1
@@ -2324,50 +2324,6 @@
 
 #endif
 
-
-/**begin repeat
- * #lname=datetime, timedelta#
- * #name=Datetime,Timedelta#
- */
-#if SIZEOF_LONG==SIZEOF_DATETIME
-static long
-@lname@_arrtype_hash(PyObject *obj)
-{
-    long x = (long)(((Py@name@ScalarObject *)obj)->obval);
-    if (x == -1) {
-        x = -2;
-    }
-    return x;
-}
-#elif SIZEOF_LONGLONG==SIZEOF_DATETIME
-static long
-@lname@_arrtype_hash(PyObject *obj)
-{
-    long y;
-    longlong x = (((Py@name@ScalarObject *)obj)->obval);
-
-    if ((x <= LONG_MAX)) {
-        y = (long) x;
-    }
-    else {
-        union Mask {
-            long hashvals[2];
-            longlong v;
-        } both;
-
-        both.v = x;
-        y = both.hashvals[0] + (1000003)*both.hashvals[1];
-    }
-    if (y == -1) {
-        y = -2;
-    }
-    return y;
-}
-#endif
-/**end repeat**/
-
-
-
 /* Wrong thing to do for longdouble, but....*/
 
 /**begin repeat
@@ -2791,10 +2747,9 @@
 
 /**begin repeat
  * #NAME = Byte, Short, Int, Long, LongLong, UByte, UShort, UInt, ULong,
- *         ULongLong, Float, Double, LongDouble, Datetime, Timedelta#
- * #name = int*5, uint*5, float*3, datetime, timedelta#
- * #CNAME = (CHAR, SHORT, INT, LONG, LONGLONG)*2, FLOAT, DOUBLE, LONGDOUBLE,
- *          DATETIME, TIMEDELTA#
+ *         ULongLong, Float, Double, LongDouble#
+ * #name = int*5, uint*5, float*3#
+ * #CNAME = (CHAR, SHORT, INT, LONG, LONGLONG)*2, FLOAT, DOUBLE, LONGDOUBLE#
  */
 #if BITSOF_@CNAME@ == 8
 #define _THIS_SIZE "8"
@@ -3046,10 +3001,10 @@
     /**begin repeat
      * #name = bool, byte, short, int, long, longlong, ubyte, ushort, uint,
      *         ulong, ulonglong, float, double, longdouble, cfloat, cdouble,
-     *         clongdouble, string, unicode, void, object, datetime, timedelta#
+     *         clongdouble, string, unicode, void, object#
      * #NAME = Bool, Byte, Short, Int, Long, LongLong, UByte, UShort, UInt,
      *         ULong, ULongLong, Float, Double, LongDouble, CFloat, CDouble,
-     *         CLongDouble, String, Unicode, Void, Object, Datetime, Timedelta#
+     *         CLongDouble, String, Unicode, Void, Object#
      */
     Py@NAME@ArrType_Type.tp_flags = BASEFLAGS;
     Py@NAME@ArrType_Type.tp_new = @name@_arrtype_new;
@@ -3058,11 +3013,9 @@
 
     /**begin repeat
      * #name = bool, byte, short, ubyte, ushort, uint, ulong, ulonglong,
-     *         float, longdouble, cfloat, clongdouble, void, object, datetime,
-     *         timedelta#
+     *         float, longdouble, cfloat, clongdouble, void, object#
      * #NAME = Bool, Byte, Short, UByte, UShort, UInt, ULong, ULongLong,
-     *         Float, LongDouble, CFloat, CLongDouble, Void, Object, Datetime,
-     *         Timedelta#
+     *         Float, LongDouble, CFloat, CLongDouble, Void, Object#
      */
     Py@NAME@ArrType_Type.tp_hash = @name@_arrtype_hash;
     /**end repeat**/
@@ -3141,8 +3094,6 @@
     &PyStringArrType_Type,
     &PyUnicodeArrType_Type,
     &PyVoidArrType_Type,
-    &PyDatetimeArrType_Type,
-    &PyTimedeltaArrType_Type
 };
 
 NPY_NO_EXPORT int

Modified: branches/1.4.x/numpy/core/src/multiarray/scalartypes.h
===================================================================
--- branches/1.4.x/numpy/core/src/multiarray/scalartypes.h	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/src/multiarray/scalartypes.h	2010-02-09 06:11:19 UTC (rev 8098)
@@ -16,19 +16,4 @@
 NPY_NO_EXPORT void *
 scalar_value(PyObject *scalar, PyArray_Descr *descr);
 
-/*
- * XXX: those are defined here for 1.4.x only -> they are intended to become
- * public types, and are declared like all other types through the code
- * generator machinery for >= 1.5.0
- */
-#ifdef NPY_ENABLE_SEPARATE_COMPILATION
-extern NPY_NO_EXPORT PyTypeObject PyTimeIntegerArrType_Type;
-extern NPY_NO_EXPORT PyTypeObject PyDatetimeArrType_Type;
-extern NPY_NO_EXPORT PyTypeObject PyTimedeltaArrType_Type;
-#else
-NPY_NO_EXPORT PyTypeObject PyTimeIntegerArrType_Type;
-NPY_NO_EXPORT PyTypeObject PyDatetimeArrType_Type;
-NPY_NO_EXPORT PyTypeObject PyTimedeltaArrType_Type;
 #endif
-
-#endif

Modified: branches/1.4.x/numpy/core/src/umath/loops.h
===================================================================
--- branches/1.4.x/numpy/core/src/umath/loops.h	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/src/umath/loops.h	2010-02-09 06:11:19 UTC (rev 8098)
@@ -2357,177 +2357,31 @@
 
 /*
  *****************************************************************************
- **                            DATETIME LOOPS                               **
- *****************************************************************************
- */
-
-#line 406
-#define DATETIME_fmax DATETIME_maximum
-#define DATETIME_fmin DATETIME_minimum
-
-#line 406
-#define TIMEDELTA_fmax TIMEDELTA_maximum
-#define TIMEDELTA_fmin TIMEDELTA_minimum
-
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_equal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_equal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_not_equal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_not_equal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_greater(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_greater(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_greater_equal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_greater_equal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_less(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_less(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_less_equal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_less_equal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_absolute(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_absolute(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_logical_and(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_logical_and(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_logical_not(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_logical_not(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_logical_or(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_logical_or(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_logical_xor(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_logical_xor(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_maximum(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_maximum(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_minimum(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_minimum(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_negative(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_negative(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_ones_like(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-#line 415
-NPY_NO_EXPORT void
-DATETIME_sign(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_sign(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-
-NPY_NO_EXPORT void
-DATETIME_Mm_M_add(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-DATETIME_mM_M_add(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-DATETIME_Mm_M_subtract(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-DATETIME_MM_m_subtract(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_mm_m_add(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_mm_m_subtract(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-/*
- *****************************************************************************
  **                            OBJECT LOOPS                                 **
  *****************************************************************************
  */
 
-#line 450
+#line 407
 NPY_NO_EXPORT void
 OBJECT_equal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
 
-#line 450
+#line 407
 NPY_NO_EXPORT void
 OBJECT_not_equal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
 
-#line 450
+#line 407
 NPY_NO_EXPORT void
 OBJECT_greater(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
 
-#line 450
+#line 407
 NPY_NO_EXPORT void
 OBJECT_greater_equal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
 
-#line 450
+#line 407
 NPY_NO_EXPORT void
 OBJECT_less(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
 
-#line 450
+#line 407
 NPY_NO_EXPORT void
 OBJECT_less_equal(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
 

Modified: branches/1.4.x/numpy/core/src/umath/loops.h.src
===================================================================
--- branches/1.4.x/numpy/core/src/umath/loops.h.src	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/src/umath/loops.h.src	2010-02-09 06:11:19 UTC (rev 8098)
@@ -396,49 +396,6 @@
 
 /*
  *****************************************************************************
- **                            DATETIME LOOPS                               **
- *****************************************************************************
- */
-
-/**begin repeat
- * #TYPE = DATETIME, TIMEDELTA#
- */
-#define @TYPE@_fmax @TYPE@_maximum
-#define @TYPE@_fmin @TYPE@_minimum
-/**end repeat**/
-
-/**begin repeat
- * #kind = equal, not_equal, greater, greater_equal, less, less_equal,
- *      absolute, logical_and, logical_not, logical_or, logical_xor, maximum,
- *      minimum, negative, ones_like, sign#
- */
-NPY_NO_EXPORT void
-DATETIME_@kind@(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_@kind@(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-/**end repeat**/
-
-NPY_NO_EXPORT void
-DATETIME_Mm_M_add(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-DATETIME_mM_M_add(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-DATETIME_Mm_M_subtract(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-DATETIME_MM_m_subtract(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_mm_m_add(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-NPY_NO_EXPORT void
-TIMEDELTA_mm_m_subtract(char **args, intp *dimensions, intp *steps, void *NPY_UNUSED(func));
-
-/*
- *****************************************************************************
  **                            OBJECT LOOPS                                 **
  *****************************************************************************
  */

Modified: branches/1.4.x/numpy/core/src/umath/ufunc_object.c
===================================================================
--- branches/1.4.x/numpy/core/src/umath/ufunc_object.c	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/src/umath/ufunc_object.c	2010-02-09 06:11:19 UTC (rev 8098)
@@ -213,9 +213,6 @@
     case PyArray_INT:
     case PyArray_LONG:
     case PyArray_LONGLONG:
-    case PyArray_DATETIME:
-    case PyArray_TIMEDELTA:
-        return PyArray_BYTE;
     /* case PyArray_UBYTE */
     case PyArray_USHORT:
     case PyArray_UINT:
@@ -1539,13 +1536,6 @@
                     || (arg_types[i] == PyArray_OBJECT))) {
             loop->obj = UFUNC_OBJ_ISOBJECT|UFUNC_OBJ_NEEDS_API;
         }
-        if (!(loop->obj & UFUNC_OBJ_NEEDS_API)
-                && ((mps[i]->descr->type_num == PyArray_DATETIME)
-                    || (mps[i]->descr->type_num == PyArray_TIMEDELTA)
-                    || (arg_types[i] == PyArray_DATETIME)
-                    || (arg_types[i] == PyArray_TIMEDELTA))) {
-            loop->obj = UFUNC_OBJ_NEEDS_API;
-        }
     }
 
     if (self->core_enabled && (loop->obj & UFUNC_OBJ_ISOBJECT)) {
@@ -2504,13 +2494,6 @@
     if (otype == PyArray_OBJECT || aar->descr->type_num == PyArray_OBJECT) {
         loop->obj = UFUNC_OBJ_ISOBJECT | UFUNC_OBJ_NEEDS_API;
     }
-    else if ((otype == PyArray_DATETIME)
-            || (aar->descr->type_num == PyArray_DATETIME)
-            || (otype == PyArray_TIMEDELTA)
-            || (aar->descr->type_num == PyArray_TIMEDELTA))
-    {
-        loop->obj = UFUNC_OBJ_NEEDS_API;
-    }
     else {
         loop->obj = 0;
     }

Deleted: branches/1.4.x/numpy/core/tests/test_datetime.py
===================================================================
--- branches/1.4.x/numpy/core/tests/test_datetime.py	2010-02-09 06:10:41 UTC (rev 8097)
+++ branches/1.4.x/numpy/core/tests/test_datetime.py	2010-02-09 06:11:19 UTC (rev 8098)
@@ -1,59 +0,0 @@
-from os import path
-import numpy as np
-from numpy.testing import *
-
-class TestDateTime(TestCase):
-    def test_creation(self):
-        for unit in ['Y', 'M', 'W', 'B', 'D',
-                     'h', 'm', 's', 'ms', 'us',
-                     'ns', 'ps', 'fs', 'as']:            
-            dt1 = np.dtype('M8[750%s]'%unit)
-            assert dt1 == np.dtype('datetime64[750%s]' % unit)
-            dt2 = np.dtype('m8[%s]' % unit)
-            assert dt2 == np.dtype('timedelta64[%s]' % unit)
-        
-    def test_divisor_conversion_year(self):
-        assert np.dtype('M8[Y/4]') == np.dtype('M8[3M]')
-        assert np.dtype('M8[Y/13]') == np.dtype('M8[4W]')
-        assert np.dtype('M8[3Y/73]') == np.dtype('M8[15D]')
-
-    def test_divisor_conversion_month(self):
-        assert np.dtype('M8[M/2]') == np.dtype('M8[2W]')
-        assert np.dtype('M8[M/15]') == np.dtype('M8[2D]')
-        assert np.dtype('M8[3M/40]') == np.dtype('M8[54h]')
-
-    def test_divisor_conversion_week(self):
-        assert np.dtype('m8[W/5]') == np.dtype('m8[B]')
-        assert np.dtype('m8[W/7]') == np.dtype('m8[D]')
-        assert np.dtype('m8[3W/14]') == np.dtype('m8[36h]')
-        assert np.dtype('m8[5W/140]') == np.dtype('m8[360m]') 
-        
-    def test_divisor_conversion_bday(self):
-        assert np.dtype('M8[B/12]') == np.dtype('M8[2h]')
-        assert np.dtype('M8[B/120]') == np.dtype('M8[12m]')
-        assert np.dtype('M8[3B/960]') == np.dtype('M8[270s]')
-
-    def test_divisor_conversion_day(self):
-        assert np.dtype('M8[D/12]') == np.dtype('M8[2h]')
-        assert np.dtype('M8[D/120]') == np.dtype('M8[12m]')
-        assert np.dtype('M8[3D/960]') == np.dtype('M8[270s]')
-
-    def test_divisor_conversion_hour(self):
-        assert np.dtype('m8[h/30]') == np.dtype('m8[2m]')
-        assert np.dtype('m8[3h/300]') == np.dtype('m8[36s]')
-
-    def test_divisor_conversion_minute(self):
-        assert np.dtype('m8[m/30]') == np.dtype('m8[2s]')
-        assert np.dtype('m8[3m/300]') == np.dtype('m8[600ms]')
-
-    def test_divisor_conversion_second(self):
-        assert np.dtype('m8[s/100]') == np.dtype('m8[10ms]')
-        assert np.dtype('m8[3s/10000]') == np.dtype('m8[300us]')
-
-    def test_divisor_conversion_fs(self):
-        assert np.dtype('M8[fs/100]') == np.dtype('M8[10as]')
-        self.failUnlessRaises(ValueError, lambda : np.dtype('M8[3fs/10000]'))
-
-    def test_divisor_conversion_as(self):
-        self.failUnlessRaises(ValueError, lambda : np.dtype('M8[as/10]'))
-



More information about the Numpy-svn mailing list