[Scipy-svn] r2490 - in trunk/Lib/sandbox/timeseries: . old

scipy-svn at scipy.org scipy-svn at scipy.org
Fri Jan 5 09:09:38 EST 2007


Author: mattknox_ca
Date: 2007-01-05 08:09:36 -0600 (Fri, 05 Jan 2007)
New Revision: 2490

Added:
   trunk/Lib/sandbox/timeseries/old/shiftingarray.py
Removed:
   trunk/Lib/sandbox/timeseries/shiftingarray.py
Log:
Moved remotely

Copied: trunk/Lib/sandbox/timeseries/old/shiftingarray.py (from rev 2489, trunk/Lib/sandbox/timeseries/shiftingarray.py)

Deleted: trunk/Lib/sandbox/timeseries/shiftingarray.py
===================================================================
--- trunk/Lib/sandbox/timeseries/shiftingarray.py	2007-01-05 14:09:19 UTC (rev 2489)
+++ trunk/Lib/sandbox/timeseries/shiftingarray.py	2007-01-05 14:09:36 UTC (rev 2490)
@@ -1,290 +0,0 @@
-import numpy, types , corelib
-from numpy import ma
-
-class ShiftingArray(object):
-    def __init__(self, values, dtype=None, startIndex=None, mask=ma.nomask):
-
-        # hack to convert our fake date data types to real data types
-        if corelib.isDateType(dtype):
-            self.dtype = numpy.int_
-        else:
-            self.dtype = dtype
-            
-        if self.dtype is None:
-            self.dtype = values.dtype
-
-        # need to use the empty function instead of passing an empty list
-        # because that won't work when type=numpy.object_
-        if len(values) == 0 and dtype is numpy.object_: 
-            tempData = ma.array(numpy.empty((0,), self.dtype))
-        else:
-            tempData = ma.array(values, self.dtype)
-        
-        #newSize = tempData.size*2
-        newShape = list(tempData.shape)
-        newShape[0] *= 2
-        newShape = tuple(newShape)
-        
-
-        firstIndex = newShape[0]//4
-        lastIndex = firstIndex + tempData.shape[0] - 1
-        if startIndex is None:
-            self.indexZeroRepresents = None
-        else:    
-            self.indexZeroRepresents = int(startIndex)-firstIndex
-        
-        if mask is not ma.nomask:
-            tempMask = ma.make_mask(mask)
-            tempData[tempMask] = ma.masked
-
-        self.data = ma.array(numpy.empty(newShape,self.dtype))
-
-        if firstIndex > 0:
-            self.data[0:firstIndex] = ma.masked
-            if self.data.size > lastIndex+1: self.data[lastIndex+1:self.data.size] = ma.masked
-
-        self.data[firstIndex:lastIndex+1] = tempData[:]
-
-
-    def shift(self, n):
-        self.indexZeroRepresents += n
-
-
-    #DATA ACCESS        
-
-    def __setitem__(self, index, value):
-        self.__expandToFit(self.__minIndex(index),self.__maxIndex(index))
-        convIndex = self.__convIndex(index)
-        self.data[convIndex] = value
-
-
-    def __getitem__(self, index):
-        self.__expandToFit(self.__minIndex(index),self.__maxIndex(index))
-        convIndex = self.__convIndex(index)
-        return self.data[convIndex]
-
-    def _shift(self, startIndex, endIndex):
-        self.__expandToFit(startIndex, endIndex)
-        return self.data[startIndex-self.indexZeroRepresents:endIndex-self.indexZeroRepresents+1]
-
-        
-    #PRIVATE FUNCTIONS
-
-    def __convIndex(self,index):
-
-        if self.indexZeroRepresents is not None:
-            if isinstance(index,ShiftingArray):
-
-                if index.indexZeroRepresents > self.indexZeroRepresents:
-                    #expand index to the left
-                    originalSize = index.data.size
-                    shiftAmt = index.indexZeroRepresents - self.indexZeroRepresents
-                    newSize = originalSize + shiftAmt
-                    temp = ma.array(numpy.empty(newSize, index.data.dtype))
-                    temp[newSize-originalSize:] = index.data
-                    temp[0:shiftAmt] = False
-                    temp = temp.filled(False)
-                else:
-                    #chop off first portion of data
-                    temp = index.data[self.indexZeroRepresents - index.indexZeroRepresents:].filled(False)
-
-                # chop off extra values on right hand side
-                if temp.size > self.data.size: return temp[:self.data.size]
-                else: return temp
-
-            elif type(index) == types.SliceType:
-                if index.start is None: tempStart = None
-                else: tempStart = index.start - self.indexZeroRepresents
-                if index.stop is None: tempStop = None
-                else: tempStop = index.stop - self.indexZeroRepresents
-                tempStep = index.step
-                
-                return slice(tempStart,tempStop,tempStep)
-            else:
-                return index - self.indexZeroRepresents
-                
-        else:
-            return index
-
-    def __maxIndex(self,index):
-        if type(index) == types.IntType: return index
-        if type(index) == types.SliceType: return index.stop
-        elif isinstance(index,ShiftingArray): return index.lastValue()
-        elif hasattr(index,'__len__'): return max(index)
-        else: return int(index)
-    
-    def __minIndex(self,index):
-        if type(index) == types.IntType: return index
-        if type(index) == types.SliceType: return index.start
-        elif isinstance(index,ShiftingArray): return index.firstValue()
-        elif hasattr(index,'__len__'): return min(index)
-        else: return int(index)
-
-    def __expandToFit(self, minRange, maxRange=None):
-
-        if self.indexZeroRepresents is None:
-            self.indexZeroRepresents = minRange
-
-        if maxRange is None:
-            maxRange = minRange
-        if maxRange < minRange:
-            raise ValueError("invalid range: " + str(minRange) + " to " + str(maxRange))
-
-        minRange -= self.indexZeroRepresents
-        maxRange -= self.indexZeroRepresents
-
-        if maxRange > self.data.size-1:   #expand to the right
-            originalSize = self.data.size
-            newSize = originalSize
-            while maxRange > newSize-1:
-                newSize = expandAmt(newSize)
-            
-            self.data = self.data.resize(numpy.shape(numpy.empty(newSize)))
-            self.data[originalSize:] = ma.masked
-
-
-        if minRange < 0:                  #expand to the left
-            originalSize = self.data.size
-            newSize = originalSize
-            shiftAmt = int(0)
-            while minRange + shiftAmt < 0:
-                newSize = expandAmt(newSize)
-                shiftAmt = int(newSize - originalSize)
-
-            temp = ma.array(numpy.empty(newSize, self.data.dtype))
-            temp[newSize-originalSize:] = self.data
-            self.data = temp
-            self.data[0:shiftAmt] = ma.masked
-
-            self.indexZeroRepresents -= shiftAmt
-
-
-
-    #MATH FUNCTIONS
-
-    def __add__(self, other,fill_value=ma.masked):  return doFunc(self,other, ma.add,fill_value=fill_value)
-    def __radd__(self, other):                      return self+other
-    def __sub__(self, other,fill_value=ma.masked):  return doFunc(self,other, ma.subtract,fill_value=fill_value)
-    def __rsub__(self, other):                      return doFunc((self*-1),other, ma.add)
-    def __mul__(self, other,fill_value=ma.masked):  return doFunc(self,other, ma.multiply,fill_value=fill_value)
-    def __rmul__(self, other):                      return self*other
-    def __div__(self, other,fill_value=ma.masked):  return doFunc(self,other, ma.divide,fill_value=fill_value)
-    def __rdiv__(self, other):                      return doFunc(pow(self,-1),other, ma.multiply)
-    def __pow__(self, other,fill_value=ma.masked):  return doFunc(self,other, ma.power,fill_value=fill_value)
-
-    def __eq__(self, other):                        return doFunc(self,other, ma.equal)
-    def __le__(self, other):                        return doFunc(self,other, ma.less_equal)
-    def __lt__(self, other):                        return doFunc(self,other, ma.less)
-    def __ge__(self, other):                        return doFunc(self,other, ma.greater_equal)
-    def __gt__(self, other):                        return doFunc(self,other, ma.greater)
-
-    def max(self,other):                            return doFunc(self,other, ma.maximum)
-    def min(self,other):                            return doFunc(self,other, ma.minimum)
-
-    #INFO FUNCTIONS
-
-    def __len__(self):
-        fv = self.firstValue()
-        if fv is not None:
-            return self.lastValue()-fv+1
-        else:
-            return 0
-
-    def firstValue(self):
-        firstIndex = corelib.first_unmasked(self.data)
-        if self.indexZeroRepresents is None or firstIndex is None:
-            return None
-        else:
-            return firstIndex+self.indexZeroRepresents
-
-
-    def lastValue(self):
-        lastIndex = corelib.last_unmasked(self.data)
-        if self.indexZeroRepresents is None or lastIndex is None:
-            return None
-        else:
-            return lastIndex+self.indexZeroRepresents
-
-
-    #DISPLAY FUNCTIONS
-
-    def __str__(self):
-        retVal = ""
-        if self.firstValue() is not None:
-            for i in range(corelib.first_unmasked(self.data), corelib.last_unmasked(self.data)+1):
-                index = str(i+self.indexZeroRepresents)
-                index = index + (" " * (6-len(index)))
-                retVal += index + "---> " + str(self.data[i]) + "\n"
-            return retVal
-        else:
-            return "<no data>"
-
-
-
-#apply func to ser1 and ser2, replacing masked values with fill_value
-def doFunc(ser1, ser2, func,fill_value=ma.masked):
-    if not isinstance(ser2, ShiftingArray):
-        if ser1.indexZeroRepresents is None:
-            return ShiftingArray([],ser1.data.dtype)        
-        else:
-            tempSer = numpy.empty(ser1.data.shape,dtype=ser1.data.dtype)
-            tempSer.fill(ser2)
-            ser2 = ShiftingArray(tempSer, startIndex=ser1.firstValue())
-    
-    sFV, sLV = ser1.firstValue(), ser1.lastValue()
-    oFV, oLV = ser2.firstValue(), ser2.lastValue()
-
-    if ser1.indexZeroRepresents is not None and ser2.indexZeroRepresents is not None:
-        if fill_value is not ma.masked:
-            minVal = min(sFV, oFV)
-            maxVal = max(sLV, oLV)
-        else:
-            minVal = max(sFV, oFV)
-            maxVal = min(sLV, oLV)
-    elif ser1.indexZeroRepresents is None and ser2.indexZeroRepresents is None:
-        return ShiftingArray([],ser1.data.dtype)
-    elif ser1.indexZeroRepresents is None:
-        minVal = oFV
-        maxVal = oLV
-    else: #ser2.indexZeroRepresents is None:
-        minVal = sFV
-        maxVal = sLV
-
-    if maxVal < minVal:
-        return ShiftingArray([],ser1.data.dtype, startIndex=minVal)
-
-    data1 = ser1._shift(minVal, maxVal)
-    data2 = ser2._shift(minVal, maxVal)
-
-    if fill_value is ma.masked:
-        mask = data1.mask | data2.mask
-    else:
-        mask = data1.mask & data2.mask
-
-        data1 = data1.filled(fill_value)
-        data2 = data2.filled(fill_value)
-
-    data = func(data1,data2)
-
-    return ShiftingArray(data,data.dtype,minVal, mask)
-    
-    
-def doFunc_oneseries(ser,func):
-    
-    sFV = ser.firstValue()
-    
-    if sFV is None:
-        return ser
-    else:
-        result = func(ser.data)
-        return ShiftingArray(result,result.dtype,sFV,result.mask)
-
-
-#MISC GLOBAL FUNCTIONS
-
-def expandAmt(size):
-    EXPAND_MULT = 1.2
-    EXPAND_ADD  = 5
-    return round(size*EXPAND_MULT) + EXPAND_ADD
-
-




More information about the Scipy-svn mailing list