[Scipy-svn] r2449 - trunk/Lib/sandbox/timeseries/src

scipy-svn at scipy.org scipy-svn at scipy.org
Thu Dec 21 15:58:44 EST 2006


Author: mattknox_ca
Date: 2006-12-21 14:58:41 -0600 (Thu, 21 Dec 2006)
New Revision: 2449

Removed:
   trunk/Lib/sandbox/timeseries/src/cseries.c
Log:
Removed file/folder

Deleted: trunk/Lib/sandbox/timeseries/src/cseries.c
===================================================================
--- trunk/Lib/sandbox/timeseries/src/cseries.c	2006-12-21 19:54:04 UTC (rev 2448)
+++ trunk/Lib/sandbox/timeseries/src/cseries.c	2006-12-21 20:58:41 UTC (rev 2449)
@@ -1,594 +0,0 @@
-#include <Python.h>
-#include <structmember.h>
-#include <stdio.h>
-#include <string.h>
-#include "mxDateTime.h"
-#include "arrayobject.h"
-
-static char cseries_doc[] = "Speed sensitive time series operations";
-
-///////////////////////////////////////////////////////////////////////
-
-
-static //PyArrayObject *
-setArrayItem_1D(PyArrayObject **theArray, long index, PyObject *newVal)
-{
-    if (index >= 0)
-    {
-        //set value in array
-        PyArray_SETITEM(*theArray, PyArray_GetPtr(*theArray, &index), newVal);
-    }
-
-}
-
-static //PyArrayObject *
-setArrayItem_2D(PyArrayObject **theArray, long index_x, long index_y, PyObject *newVal)
-{
-    long idx[] = {index_x, index_y};
-
-    if (index_x >= 0 && index_y >= 0) {
-        //set value in array
-        PyArray_SETITEM(*theArray, PyArray_GetPtr(*theArray, idx), newVal);
-    }
-
-}
-
-
-static int
-freqVal(char freq)
-{
-    switch(freq)
-    {
-        case 'A':
-            //annual
-            return 1;
-        case 'Q':
-            //quarterly
-            return 2;
-        case 'M':
-            //monthly
-            return 3;
-        case 'B':
-            //business
-            return 4;
-        case 'D':
-            //daily
-            return 5;
-        default:
-            return 0;
-    }
-}
-
-static long
-toDaily(long fromDate, char fromFreq)
-{
-    long absdate;
-    int y,m,d;
-
-    mxDateTimeObject *theDate;
-
-    //convert fromDate to days since (0 AD - 1 day)
-    switch(fromFreq)
-    {
-        case 'D':
-            absdate = fromDate;
-            break;
-        case 'B':
-            absdate = ((fromDate-1)/5)*7 + (fromDate-1)%5 + 1;
-            break;
-        case 'M':
-            y = fromDate/12;
-            m = fromDate%12;
-
-            if (m == 0)
-            {
-                m = 12;
-                y--;
-            }
-            d=1;
-            break;
-        case 'Q':
-            y = fromDate/4;
-            m = (fromDate%4) * 3 - 2;
-
-            if (m < 1)
-            {
-                m += 12;
-                y--;
-            }
-            else if (m == 12)
-            {
-                m = 1;
-                y++;
-            }
-            d=1;
-            break;
-        case 'A':
-            y = fromDate;
-            m = 1;
-            d = 1;
-            break;
-        default:
-            return -1;
-    }
-
-    if (freqVal(fromFreq) < 4)
-    {
-        theDate = (mxDateTimeObject *)mxDateTime.DateTime_FromDateAndTime(y,m,d,0,0,0);
-        absdate = (long)(theDate->absdate);
-    }
-
-    return absdate;
-
-}
-
-
-static long
-getDateInfo_sub(long dateNum, char freq, char info) {
-
-    long monthNum;
-    mxDateTimeObject *convDate;
-    convDate = (mxDateTimeObject *)mxDateTime.DateTime_FromAbsDateAndTime(toDaily(dateNum,freq),0);
-
-    switch(info)
-    {
-        case 'Y': //year
-
-            return (long)(convDate->year);
-
-        case 'Q': //quarter
-            monthNum = (long)(convDate->month);
-            return ((monthNum-1)/3)+1;
-
-        case 'M': //month
-            return (long)(convDate->month);
-
-        case 'D': //day
-            return (long)(convDate->day);
-
-        case 'W': //day of week
-            return (long)(convDate->day_of_week);
-        default:
-            return -1;
-    }
-}
-
-
-static char cseries_getDateInfo_doc[] = "";
-static PyObject *
-cseries_getDateInfo(PyObject *self, PyObject *args)
-{
-    char *freq;
-    char *info;
-
-    PyArrayObject *array;
-    PyArrayObject *tempArray;
-    PyArrayObject *newArray;
-
-    char *getptr;
-    PyObject *val;
-    long i, lngVal, dInfo, dim;
-
-    if (!PyArg_ParseTuple(args, "Oss:getDateInfo(array, freq, info)", &tempArray, &freq, &info)) return NULL;
-
-    array = PyArray_GETCONTIGUOUS(tempArray);
-
-    dim = array->dimensions[0];
-
-    //initialize new array
-    newArray = (PyArrayObject*)PyArray_SimpleNew(array->nd, &dim, array->descr->type_num);
-
-    for (i = 0; i < array->dimensions[0]; i++)
-    {
-        getptr = array->data + i*array->strides[0];
-        val = PyArray_GETITEM(array, getptr);
-        lngVal = PyInt_AsLong(val);
-        dInfo = getDateInfo_sub(lngVal, *freq, *info);
-
-        setArrayItem_1D(&newArray, i, PyInt_FromLong(dInfo));
-    }
-
-    return (PyObject *) newArray;
-
-}
-
-
-static long
-convert(long fromDate, char fromFreq, char toFreq, int notStartInd)
-{
-    long absdate, secsInDay;
-    long converted;
-    int y,m;
-
-    mxDateTimeObject *convDate;
-
-    secsInDay = 86400;
-
-    absdate = toDaily(fromDate, fromFreq);
-
-    convDate = (mxDateTimeObject *)mxDateTime.DateTime_FromAbsDateAndTime(absdate,0);
-
-    y = convDate->year;
-    m = convDate->month;
-
-    //convert convDate to appropriate # of periods according to toFreq
-    switch(toFreq)
-    {
-        case 'D':
-            converted = absdate;
-            break;
-        case 'B':
-            if (convDate->day_of_week > 4) //is weekend day
-            {
-                if (notStartInd == 1 && freqVal(fromFreq) > 4)
-                {
-                    return -1;
-                }
-                else
-                {
-                    if (convDate->day - (convDate->day_of_week - 4) < 1) {
-                        //change to Monday after weekend
-                        absdate += (7 - convDate->day_of_week);
-                    } else {
-                        //change to friday before weekend
-                        absdate -= (convDate->day_of_week - 4);
-                    }
-
-                    converted = (long)((absdate / 7 * 5.0) + absdate%7);
-                }
-            }
-            else
-            {
-                converted = (long)((absdate / 7 * 5.0) + absdate%7);
-            }
-            break;
-        case 'M':
-            converted = (long)(y*12 + m);
-            break;
-        case 'Q':
-            converted = (long)(y*4 + ((m-1)/3) + 1);
-            break;
-        case 'A':
-            converted = (long)(y);
-            break;
-        default:
-            return -1;
-    }
-
-    return converted;
-}
-
-static int validFreq(char freq) {
-    switch(freq)
-    {
-        case 'A':
-            return 1;
-        case 'Q':
-            return 1;
-        case 'M':
-            return 1;
-        case 'B':
-            return 1;
-        case 'D':
-            return 1;
-        default:
-            return 0;
-    }
-}
-
-
-static int
-expand(long oldSize, char fromFreq, char toFreq, long *newLen, long *newHeight)
-{
-
-    int maxBusDaysPerYear, maxBusDaysPerQuarter, maxBusDaysPerMonth;
-    int minBusDaysPerYear, minBusDaysPerQuarter, minBusDaysPerMonth;
-
-    int maxDaysPerYear, maxDaysPerQuarter, maxDaysPerMonth;
-    int minDaysPerYear, minDaysPerQuarter, minDaysPerMonth;
-
-    minBusDaysPerYear = 260;    maxBusDaysPerYear = 262;
-    minBusDaysPerQuarter = 64;  maxBusDaysPerQuarter = 66;
-    minBusDaysPerMonth = 20;    maxBusDaysPerMonth = 23;
-
-    minDaysPerYear = 365;       maxDaysPerYear = 366;
-    minDaysPerQuarter = 90;     maxDaysPerQuarter = 92;
-    minDaysPerMonth = 28;       maxDaysPerMonth = 31;
-
-    if (!validFreq(fromFreq)) return 0;
-    if (!validFreq(toFreq)) return 0;
-
-    if (fromFreq == toFreq) {
-        *newLen = oldSize;
-        *newHeight = 1;
-    } else {
-
-        switch(fromFreq)
-        {
-            case 'A': //annual
-
-                switch(toFreq)
-                {
-                    case 'Q':
-                        *newLen = oldSize * 4;
-                        *newHeight = 1;
-                        break;
-                    case 'M':
-                        *newLen = oldSize * 12;
-                        *newHeight = 1;
-                        break;
-                    case 'B':
-                        *newLen = oldSize * maxBusDaysPerYear;
-                        *newHeight = 1;
-                        break;
-                    case 'D':
-                        *newLen = oldSize * maxDaysPerYear;
-                        *newHeight = 1;
-                        break;
-                }
-                break;
-
-            case 'Q': //quarterly
-
-                switch(toFreq)
-                {
-                    case 'A':
-                        *newLen = (oldSize / 4) + 2;
-                        *newHeight = 4;
-                        break;
-                    case 'M':
-                        *newLen = oldSize * 3;
-                        *newHeight = 1;
-                        break;
-                    case 'B':
-                        *newLen = oldSize * maxBusDaysPerQuarter;
-                        *newHeight = 1;
-                        break;
-                    case 'D':
-                        *newLen = oldSize * maxDaysPerQuarter;
-                        *newHeight = 1;
-                        break;
-                }
-                break;
-
-            case 'M': //monthly
-
-                switch(toFreq)
-                {
-                    case 'A':
-                        *newLen = (oldSize / 12) + 2;
-                        *newHeight = 12;
-                        break;
-                    case 'Q':
-                        *newLen = (oldSize / 3) + 2;
-                        *newHeight = 3;
-                        break;
-                    case 'B':
-                        *newLen = oldSize * maxBusDaysPerMonth;
-                        *newHeight = 1;
-                        break;
-                    case 'D':
-                        *newLen = oldSize * maxDaysPerMonth;
-                        *newHeight = 1;
-                        break;
-                }
-                break;
-
-            case 'B': //business
-
-                switch(toFreq)
-                {
-                    case 'A':
-                        *newLen = (oldSize / minBusDaysPerYear) + 2;
-                        *newHeight = maxBusDaysPerYear;
-                        break;
-                    case 'Q':
-                        *newLen = (oldSize / minBusDaysPerQuarter) + 2;
-                        *newHeight = maxBusDaysPerQuarter;
-                        break;
-                    case 'M':
-                        *newLen = (oldSize / minBusDaysPerMonth) + 2;
-                        *newHeight = maxBusDaysPerMonth;
-                        break;
-                    case 'D':
-                        *newLen = ((7 * oldSize)/5) + 2;
-                        *newHeight = 1;
-                        break;
-                }
-                break;
-
-            case 'D': //daily
-
-                switch(toFreq)
-                {
-                    case 'A':
-                        *newLen = (oldSize / minDaysPerYear) + 2;
-                        *newHeight = maxDaysPerYear;
-                        break;
-                    case 'Q':
-                        *newLen = (oldSize / minDaysPerQuarter) + 2;
-                        *newHeight = maxDaysPerQuarter;
-                        break;
-                    case 'M':
-                        *newLen = (oldSize / minDaysPerMonth) + 2;
-                        *newHeight = maxDaysPerMonth;
-                        break;
-                    case 'B':
-                        *newLen = ((5 * oldSize)/7) + 2;
-                        *newHeight = 1;
-                        break;                }
-                break;
-        }
-    }
-
-    return 1;
-
-}
-
-
-static char cseries_reindex_doc[] = "";
-static PyObject *
-cseries_reindex(PyObject *self, PyObject *args)
-{
-    PyArrayObject *array;
-    PyArrayObject *tempArray;
-    PyArrayObject *newArray;
-
-    PyArrayObject *mask;
-    PyArrayObject *tempMask;
-    PyArrayObject *newMask;
-
-    PyObject *returnVal = NULL;
-
-    int notStartInd;
-    long startIndex, newStart, newStartYaxis;
-    long newLen, newHeight;
-    long i, currIndex, prevIndex;
-    long nd;
-    long *dim;
-    long currPerLen;
-    char *fromFreq, *toFreq, *position;
-
-    PyObject *val, *valMask;
-
-    int toFrVal, fromFrVal;
-
-    returnVal = PyDict_New();
-
-    if (!PyArg_ParseTuple(args, "OssslO:reindex(array, fromfreq, tofreq, position, startIndex, mask)", &tempArray, &fromFreq, &toFreq, &position, &startIndex, &tempMask)) return NULL;
-
-    if (toFreq[0] == fromFreq[0])
-    {
-
-        PyDict_SetItemString(returnVal, "values", (PyObject*)tempArray);
-        PyDict_SetItemString(returnVal, "mask", (PyObject*)tempMask);
-
-        return returnVal;
-    }
-
-    //get frequency numeric mapping
-    fromFrVal = freqVal(fromFreq[0]);
-    toFrVal = freqVal(toFreq[0]);
-
-    array = PyArray_GETCONTIGUOUS(tempArray);
-    mask = PyArray_GETCONTIGUOUS(tempMask);
-
-    //expand size to fit new values if needed
-    if (!expand(array->dimensions[0], fromFreq[0], toFreq[0], &newLen, &newHeight)) return NULL;
-
-    //convert start index to new frequency
-    notStartInd = 0;
-    newStart = convert(startIndex, fromFreq[0], toFreq[0], notStartInd);
-
-    if (newHeight > 1) {
-
-        newStartYaxis = startIndex - convert(newStart, toFreq[0], fromFreq[0], notStartInd);
-        currPerLen = newStartYaxis;
-
-        nd = 2;
-        dim = malloc(nd * sizeof(int));
-        dim[0] = newLen;
-        dim[1] = newHeight;
-    } else {
-        currPerLen = 0;
-        nd = 1;
-        dim = malloc(nd * sizeof(int));
-        dim[0] = newLen;
-    }
-
-    newArray = (PyArrayObject*)PyArray_SimpleNew(nd, dim, array->descr->type_num);
-    newMask  = (PyArrayObject*)PyArray_SimpleNew(nd, dim, mask->descr->type_num);
-
-    free(dim);
-
-    PyArray_FILLWBYTE(newArray,0);
-    PyArray_FILLWBYTE(newMask,1);
-
-    //initialize prevIndex
-    prevIndex = newStart;
-
-    notStartInd = 1;
-
-    //set values in the new array
-    for (i = 0; i < array->dimensions[0]; i++)
-    {
-
-        //get value from old array
-        val = PyArray_GETITEM(array, PyArray_GetPtr(array, &i));
-
-        //get the mask corresponding to the old value
-        valMask = PyArray_GETITEM(mask, PyArray_GetPtr(mask, &i));
-
-        //find index for start of current period in new frequency
-        if (newHeight == 1 && (position[0] == 'E' && !((fromFrVal == 4 && toFrVal == 5) || (fromFrVal == 5 && toFrVal == 4))) ) {
-            currIndex = convert(startIndex + i + 1, fromFreq[0], toFreq[0], notStartInd)-1;
-        } else {
-            currIndex = convert(startIndex + i, fromFreq[0], toFreq[0], notStartInd);
-        }
-
-        if (newHeight > 1) {
-
-                if (currIndex != prevIndex)
-                {
-                    //reset period length
-                    currPerLen = 0;
-                    prevIndex = currIndex;
-                }
-
-                //set value in the new array
-                setArrayItem_2D(&newArray, currIndex-newStart, currPerLen, val);
-                setArrayItem_2D(&newMask, currIndex-newStart, currPerLen, valMask);
-
-                currPerLen++;
-
-        } else {
-
-            setArrayItem_1D(&newArray, currIndex-newStart, val);
-            setArrayItem_1D(&newMask, currIndex-newStart, valMask);
-
-        }
-
-    }
-
-    PyDict_SetItemString(returnVal, "values", (PyObject*)newArray);
-    PyDict_SetItemString(returnVal, "mask", (PyObject*)newMask);
-
-    return returnVal;
-
-}
-
-
-static char cseries_convert_doc[] = "";
-static PyObject *
-cseries_convert(PyObject *self, PyObject *args)
-{
-    long fromDate;
-    char* fromFreq;
-    char* toFreq;
-    int notStartInd;
-
-    if (!PyArg_ParseTuple(args, "lss:convert(fromDate, fromfreq, tofreq)", &fromDate, &fromFreq, &toFreq)) return NULL;
-
-    //always want start of period (only matters when converting from lower freq to higher freq ie. m -> d)
-    notStartInd = 0;
-
-    return PyInt_FromLong(convert(fromDate, fromFreq[0], toFreq[0], notStartInd));
-}
-
-
-///////////////////////////////////////////////////////////////////////
-
-static PyMethodDef cseries_methods[] = {
-    {"reindex", cseries_reindex, METH_VARARGS, cseries_reindex_doc},
-    {"convert", cseries_convert, METH_VARARGS, cseries_convert_doc},
-    {"getDateInfo", cseries_getDateInfo, METH_VARARGS, cseries_getDateInfo_doc},
-    {NULL, NULL}
-};
-
-PyMODINIT_FUNC
-initcseries(void)
-{
-    Py_InitModule3("cseries", cseries_methods, cseries_doc);
-    mxDateTime_ImportModuleAndAPI();
-    import_array();
-}
\ No newline at end of file




More information about the Scipy-svn mailing list