Example #1
0
 def testSpreadsheetDataCompare5(self):
     sp = SpreadsheetData(data=[[i * 0.5, 1] for i in range(10)],
                          names=['t', 'val'])
     diff = sp.compare(sp, "val")
     self.assertAlmostEqual(diff["max"], 0)
     self.assertAlmostEqual(diff["average"], 0)
     self.assertAlmostEqual(diff["wAverage"], 0)
 def __init__(self,
              timeName=None,
              validData=None,
              validMatchRegexp=False,
              csvName=None,
              txtName=None,
              excelName=None,
              namePrefix=None,
              skip_header=0,
              stripCharacters=None,
              progressTemplate=None,
              replaceFirstLine=None,
              startTime=None,
              endTime=None):
     self.__data=SpreadsheetData(timeName=timeName,
                                 validData=validData,
                                 validMatchRegexp=validMatchRegexp,
                                 csvName=csvName,
                                 txtName=txtName,
                                 excelName=excelName,
                                 skip_header=skip_header,
                                 stripCharacters=stripCharacters,
                                 replaceFirstLine=replaceFirstLine)
     self.namePrefix=namePrefix
     GeneralLineAnalyzer.__init__(self,
                                  titles=[self.makeName(n) for n in self.__data.names(withTime=False)],
                                  doTimelines=True,
                                  doFiles=False,
                                  progressTemplate=progressTemplate,
                                  startTime=startTime,
                                  endTime=endTime)
     self.timeNew=False
     self.tRange=self.__data.tRange()
Example #3
0
 def testSpreadsheetReadFileTest(self):
     fName="/tmp/testdata"
     open(fName,"w").write(filecontent)
     sp=SpreadsheetData(txtName=fName)
     self.assertEqual(len(sp.names()),4)
     self.assertEqual(sp.size(),5)
     self.assertEqual(sp.tRange(),(0.005,0.025))
     self.assertEqual(sp.names()[1],"Initial")
Example #4
0
 def testSpreadsheetDataCompare4c(self):
     sp=SpreadsheetData(data=[[i*0.5,math.sin(i)] for i in range(10)],names=['t','val'])
     sp2=SpreadsheetData(data=[[i*0.5,math.sin(i)+0.5] for i in range(10)],names=['t','val'])
     diff1=sp.compare(sp2,"val")
     diff2=sp2.compare(sp,"val")
     self.assertAlmostEqual(diff1["max"],diff2["max"])
     self.assertAlmostEqual(diff1["average"],diff2["average"])
     self.assertAlmostEqual(diff1["wAverage"],diff2["wAverage"])
     self.assertAlmostEqual(diff1["average"],diff1["wAverage"])
Example #5
0
 def testSpreadsheetDataCompare4f(self):
     sp=SpreadsheetData(data=[[i*0.5,i*0.5] for i in range(10)],names=['t','val'])
     sp2=SpreadsheetData(data=[[i*0.5-0.25,i*0.5-0.25] for i in range(10)],names=['t','val'])
     diff3=sp.compare(sp2,"val",common=True)
     diff4=sp2.compare(sp,"val",common=True)
     self.assertAlmostEqual(diff3["max"],diff4["max"])
     self.assertAlmostEqual(diff3["average"],diff4["average"])
     self.assertAlmostEqual(diff3["wAverage"],diff4["wAverage"])
     self.assertAlmostEqual(diff3["average"],diff3["wAverage"])
     self.assertAlmostEqual(diff4["average"],diff4["wAverage"])
Example #6
0
    def run(self):
        dest=self.parser.getArgs()[-1]
        if path.exists(dest) and not self.opts.force:
            self.error("CSV-file",dest,"exists already. Use --force to overwrite")
        sources=self.parser.getArgs()[0:-1]

        data=SpreadsheetData(txtName=sources[0],
                             timeName=self.opts.time,
                             validData=self.opts.columns,
                             title=path.splitext(path.basename(sources[0]))[0])

        if self.opts.time==None:
            self.opts.time=data.names()[0]

        for s in sources[1:]:
            addition=path.splitext(path.basename(s))[0]
            sData=SpreadsheetData(txtName=s)
            for n in sData.names():
                if n!=self.opts.time and (self.opts.columns==[] or n in self.opts.columns):
                    d=data.resample(sData,
                                    n,
                                    time=self.opts.time,
                                    extendData=self.opts.extendData)
                    data.append(addition+" "+n,d)

        data.writeCSV(dest,
                      delimiter=self.opts.delimiter)
Example #7
0
 def testSpreadsheetDataCompare3(self):
     sp=SpreadsheetData(data=data6,names=names3)
     sp2=SpreadsheetData(data=data7,names=names4)
     diff1=sp.compare(sp2,"val")
     self.assertAlmostEqual(diff1["max"],0)
     self.assertAlmostEqual(diff1["average"],0)
     self.assertAlmostEqual(diff1["wAverage"],0)        
     diff2=sp2.compare(sp,"val")
     self.assertAlmostEqual(diff2["max"],0.5)
     self.assertAlmostEqual(diff2["average"],0.09090909)
     self.assertAlmostEqual(diff2["wAverage"],0.05)
Example #8
0
 def testSpreadsheetDataCompare2(self):
     sp=SpreadsheetData(data=data3,names=names3)
     sp2=SpreadsheetData(data=data5,names=names4)
     diff1=sp.compare(sp2,"val")
     self.assertAlmostEqual(diff1["max"],0.25)
     self.assertAlmostEqual(diff1["average"],0.25)
     self.assertAlmostEqual(diff1["wAverage"],0.25)        
     diff2=sp2.compare(sp,"val")
     self.assertAlmostEqual(diff2["max"],9.25)
     self.assertAlmostEqual(diff2["average"],1.0681818181)
     self.assertAlmostEqual(diff2["wAverage"],0.7)        
Example #9
0
 def testGetSpreadsheet(self):
     csvName="/tmp/nix.csv"
     sd=TimelineDirectory(theDir)
     st=sd["p"]
     spread=st()
     spread.writeCSV(csvName)
     self.assertEqual(len(st.positions)+1,len(spread.names()))
     rereadSpread=SpreadsheetData(csvName=csvName)
     self.assertEqual(len(spread.names()),len(rereadSpread.names()))
     self.assertEqual(len(spread.data),len(rereadSpread.data))        
     sd=TimelineDirectory(theDir,"timeline")
     st=sd["p"]
     spread=st()
     spread.writeCSV("/tmp/nix2.csv")
Example #10
0
 def testGetSpreadsheet(self):
     csvName = path.join(self.theDir, "nix.csv")
     sd = TimelineDirectory(self.theDir)
     st = sd["p"]
     spread = st()
     spread.writeCSV(csvName)
     self.assertEqual(len(st.positions) + 1, len(spread.names()))
     rereadSpread = SpreadsheetData(csvName=csvName)
     self.assertEqual(len(spread.names()), len(rereadSpread.names()))
     self.assertEqual(len(spread.data), len(rereadSpread.data))
     sd = TimelineDirectory(self.theDir, "timeline")
     st = sd["p"]
     spread = st()
     spread.writeCSV(path.join(self.theDir, "nix2.csv"))
Example #11
0
 def testSpreadsheetDataCompare1(self):
     sp=SpreadsheetData(data=data3,names=names3)
     sp2=SpreadsheetData(data=data4,names=names4)
     diff1=sp.compare(sp2,"val")
     self.assertAlmostEqual(diff1["max"],1)
     self.assertAlmostEqual(diff1["average"],1)
     self.assertAlmostEqual(diff1["wAverage"],1)        
     diff2=sp2.compare(sp,"val")
     self.assertEqual(diff1["max"],diff2["max"])
     self.assertEqual(diff1["average"],diff2["average"])
     self.assertEqual(diff1["wAverage"],diff2["wAverage"])
     diff3=sp.compare(sp,"val")
     self.assertAlmostEqual(diff3["max"],0)
     self.assertAlmostEqual(diff3["average"],0)
     self.assertAlmostEqual(diff3["wAverage"],0)        
 def testGetSpreadsheet(self):
     csvName = path.join(self.theDir, "nix.csv")
     sd = TimelineDirectory(self.theDir)
     st = sd["p"]
     spread = st()
     assert len(spread.names()) == 5
     assert spread.size() == 3
     spread.writeCSV(csvName)
     assert len(st.positions) + 1 == len(spread.names())
     rereadSpread = SpreadsheetData(csvName=csvName)
     assert len(spread.names()) == len(rereadSpread.names())
     assert len(spread.data) == len(rereadSpread.data)
     sd = TimelineDirectory(self.theDir, "timeline")
     st = sd["p"]
     spread = st()
     spread.writeCSV(path.join(self.theDir, "nix2.csv"))
 def testGetSpreadsheet(self):
     csvName=path.join(self.theDir,"nix.csv")
     sd=TimelineDirectory(self.theDir)
     st=sd["p"]
     spread=st()
     assert len(spread.names())==5
     assert spread.size()==3
     spread.writeCSV(csvName)
     assert len(st.positions)+1==len(spread.names())
     rereadSpread=SpreadsheetData(csvName=csvName)
     assert len(spread.names())==len(rereadSpread.names())
     assert len(spread.data)==len(rereadSpread.data)
     sd=TimelineDirectory(self.theDir,"timeline")
     st=sd["p"]
     spread=st()
     spread.writeCSV(path.join(self.theDir,"nix2.csv"))
Example #14
0
 def testSpreadsheetScaleData(self):
     sp1 = SpreadsheetData(data=data1, names=names1)
     self.assertAlmostEqual(min(sp1.data["t"]), 0)
     self.assertAlmostEqual(max(sp1.data["t"]), 5.0)
     self.assertAlmostEqual(min(sp1.data["p1"]), 0)
     self.assertAlmostEqual(max(sp1.data["p1"]), 10.0)
     self.assertAlmostEqual(min(sp1.data["p2"]), 0)
     self.assertAlmostEqual(max(sp1.data["p2"]), 15.0)
     sp1.recalcData("t", "t/60")
     self.assertAlmostEqual(min(sp1.data["t"]), 0)
     self.assertAlmostEqual(max(sp1.data["t"]), 5.0 / 60.)
     sp1.recalcData("p 3", "p1+p2", create=True)
     self.assertAlmostEqual(min(sp1.data["p 3"]), 0)
     self.assertAlmostEqual(max(sp1.data["p 3"]), 25.0)
     sp1.recalcData("p4", "data['p1']+data['p2']", create=True)
     self.assertAlmostEqual(min(sp1.data["p4"]), 0)
     self.assertAlmostEqual(max(sp1.data["p4"]), 25.0)
     sp1.recalcData("p1", "this/10+1")
     self.assertAlmostEqual(min(sp1.data["p1"]), 1)
     self.assertAlmostEqual(max(sp1.data["p1"]), 2)
 def testSpreadsheetDataInterpolateNoName(self):
     sp = SpreadsheetData(data=data3a, names=names3a)
     data = sp(-1, invalidExtend=True)
     self.assertEqual(len(data), 2)
     self.assertAlmostEqual(data["val"], 0)
     self.assertEqual(data["descr"], b('val_0'))
     data = sp(2, invalidExtend=True)
     self.assertAlmostEqual(data["val"], 4)
     self.assertEqual(data["descr"], b('val_2'))
     data = sp(5.1, invalidExtend=True)
     self.assertAlmostEqual(data["val"], 26.1)
     self.assertEqual(data["descr"], b('val_5'))
Example #16
0
 def testSpreadsheetReadFileTest(self):
     fName = mktemp()
     open(fName, "wb").write(filecontent)
     sp = SpreadsheetData(txtName=fName)
     self.assertEqual(len(sp.names()), 4)
     self.assertEqual(sp.size(), 5)
     self.assertEqual(sp.tRange(), (0.005, 0.025))
     self.assertEqual(sp.names()[1], "Initial")
Example #17
0
 def testSpreadsheetScaleData(self):
     sp1=SpreadsheetData(data=data1,names=names1)
     self.assertAlmostEqual(min(sp1.data["t"]),0)
     self.assertAlmostEqual(max(sp1.data["t"]),5.0)
     self.assertAlmostEqual(min(sp1.data["p1"]),0)
     self.assertAlmostEqual(max(sp1.data["p1"]),10.0)
     self.assertAlmostEqual(min(sp1.data["p2"]),0)
     self.assertAlmostEqual(max(sp1.data["p2"]),15.0)
     sp1.recalcData("t","t/60")
     self.assertAlmostEqual(min(sp1.data["t"]),0)
     self.assertAlmostEqual(max(sp1.data["t"]),5.0/60.)
     sp1.recalcData("p 3","p1+p2",create=True)
     self.assertAlmostEqual(min(sp1.data["p 3"]),0)
     self.assertAlmostEqual(max(sp1.data["p 3"]),25.0)
     sp1.recalcData("p4","data['p1']+data['p2']",create=True)
     self.assertAlmostEqual(min(sp1.data["p4"]),0)
     self.assertAlmostEqual(max(sp1.data["p4"]),25.0)
     sp1.recalcData("p1","this/10+1")
     self.assertAlmostEqual(min(sp1.data["p1"]),1)
     self.assertAlmostEqual(max(sp1.data["p1"]),2)
Example #18
0
    def testSpreadsheetDataInterpolation(self):
        sp = SpreadsheetData(data=data3, names=names3)
        self.assertAlmostEqual(sp(-1, "val", invalidExtend=True), 0)
        self.assert_(numpy.isnan(sp(-1, "val")))
        self.assertAlmostEqual(sp(10, "val", invalidExtend=True), 81)
        self.assert_(numpy.isnan(sp(10, "val")))
        self.assertAlmostEqual(sp(1, "val"), 1)
        self.assertAlmostEqual(sp(1.5, "val"), 2.5)
        self.assertAlmostEqual(sp(5, "val"), 25)
        self.assertAlmostEqual(sp(5.1, "val"), 26.1)
        self.assertAlmostEqual(sp(8.9, "val"), 79.3)
        self.assertAlmostEqual(sp(8.9, "t"), 8.9)

        self.assertAlmostEqual(sp(1, "val", noInterpolation=True), 1)
        self.assert_(numpy.isnan(sp(1.5, "val", noInterpolation=True)))
Example #19
0
 def testSpreadsheetDataCompare3(self):
     sp = SpreadsheetData(data=data6, names=names3)
     sp2 = SpreadsheetData(data=data7, names=names4)
     diff1 = sp.compare(sp2, "val")
     self.assertAlmostEqual(diff1["max"], 0)
     self.assertAlmostEqual(diff1["average"], 0)
     self.assertAlmostEqual(diff1["wAverage"], 0)
     diff2 = sp2.compare(sp, "val")
     self.assertAlmostEqual(diff2["max"], 0.5)
     self.assertAlmostEqual(diff2["average"], 0.09090909)
     self.assertAlmostEqual(diff2["wAverage"], 0.05)
Example #20
0
 def testSpreadsheetDataCompare4b(self):
     sp = SpreadsheetData(data=[[i * 0.5, 1 + i * i] for i in range(10)],
                          names=['t', 'val'])
     sp2 = SpreadsheetData(data=[[i * 0.5, 2 + i * i] for i in range(10)],
                           names=['t', 'val'])
     diff1 = sp.compare(sp2, "val")
     diff2 = sp2.compare(sp, "val")
     self.assertAlmostEqual(diff1["max"], diff2["max"])
     self.assertAlmostEqual(diff1["average"], diff2["average"])
     self.assertAlmostEqual(diff1["wAverage"], diff2["wAverage"])
     self.assertAlmostEqual(diff1["average"], diff1["wAverage"])
Example #21
0
 def testSpreadsheetDataCompare2(self):
     sp = SpreadsheetData(data=data3, names=names3)
     sp2 = SpreadsheetData(data=data5, names=names4)
     diff1 = sp.compare(sp2, "val")
     self.assertAlmostEqual(diff1["max"], 0.25)
     self.assertAlmostEqual(diff1["average"], 0.25)
     self.assertAlmostEqual(diff1["wAverage"], 0.25)
     diff2 = sp2.compare(sp, "val")
     self.assertAlmostEqual(diff2["max"], 9.25)
     self.assertAlmostEqual(diff2["average"], 1.0681818181)
     self.assertAlmostEqual(diff2["wAverage"], 0.7)
Example #22
0
 def testSpreadsheetDataCompare1(self):
     sp = SpreadsheetData(data=data3, names=names3)
     sp2 = SpreadsheetData(data=data4, names=names4)
     diff1 = sp.compare(sp2, "val")
     self.assertAlmostEqual(diff1["max"], 1)
     self.assertAlmostEqual(diff1["average"], 1)
     self.assertAlmostEqual(diff1["wAverage"], 1)
     diff2 = sp2.compare(sp, "val")
     self.assertEqual(diff1["max"], diff2["max"])
     self.assertEqual(diff1["average"], diff2["average"])
     self.assertEqual(diff1["wAverage"], diff2["wAverage"])
     diff3 = sp.compare(sp, "val")
     self.assertAlmostEqual(diff3["max"], 0)
     self.assertAlmostEqual(diff3["average"], 0)
     self.assertAlmostEqual(diff3["wAverage"], 0)
Example #23
0
 def testSpreadsheetDataCompare4f(self):
     sp = SpreadsheetData(data=[[i * 0.5, i * 0.5] for i in range(10)],
                          names=['t', 'val'])
     sp2 = SpreadsheetData(data=[[i * 0.5 - 0.25, i * 0.5 - 0.25]
                                 for i in range(10)],
                           names=['t', 'val'])
     diff3 = sp.compare(sp2, "val", common=True)
     diff4 = sp2.compare(sp, "val", common=True)
     self.assertAlmostEqual(diff3["max"], diff4["max"])
     self.assertAlmostEqual(diff3["average"], diff4["average"])
     self.assertAlmostEqual(diff3["wAverage"], diff4["wAverage"])
     self.assertAlmostEqual(diff3["average"], diff3["wAverage"])
     self.assertAlmostEqual(diff4["average"], diff4["wAverage"])
Example #24
0
 def testSpreadsheetDataCompare4d(self):
     sp = SpreadsheetData(data=[[i * 0.5, math.sin(i)] for i in range(10)],
                          names=['t', 'val'])
     sp2 = SpreadsheetData(data=[[i * 0.5 - 0.5,
                                  math.sin(i - 1) + 0.5]
                                 for i in range(11)],
                           names=['t', 'val'])
     diff1 = sp.compare(sp2, "val")
     diff2 = sp2.compare(sp, "val")
     self.assertAlmostEqual(diff1["max"], diff2["max"])
     #        self.assertAlmostEqual(diff1["average"],diff2["average"])
     #        self.assertAlmostEqual(diff1["wAverage"],diff2["wAverage"])
     self.assertAlmostEqual(diff1["average"], diff1["wAverage"])
     #        self.assertAlmostEqual(diff2["average"],diff2["wAverage"])
     diff3 = sp.compare(sp2, "val", common=True)
     diff4 = sp2.compare(sp, "val", common=True)
     self.assertAlmostEqual(diff3["max"], diff4["max"])
     self.assertAlmostEqual(diff3["average"], diff4["average"])
     self.assertAlmostEqual(diff3["wAverage"], diff4["wAverage"])
     self.assertAlmostEqual(diff3["average"], diff3["wAverage"])
     self.assertAlmostEqual(diff4["average"], diff4["wAverage"])
Example #25
0
 def testSpreadsheetDataCompare6(self):
     sp = SpreadsheetData(data=[[i * 0.5, 1] for i in range(10)],
                          names=['t', 'val'])
     sp2 = SpreadsheetData(data=[[i * 0.5 + 10, 2] for i in range(10)],
                           names=['t', 'val'])
     diff1 = sp.compare(sp2, "val")
     diff2 = sp2.compare(sp, "val")
     self.assertAlmostEqual(diff1["max"], 1)
     self.assertAlmostEqual(diff1["average"], 1)
     self.assertAlmostEqual(diff1["wAverage"], 1)
     self.assertAlmostEqual(diff2["max"], 1)
     self.assertAlmostEqual(diff2["average"], 1)
     self.assertAlmostEqual(diff2["wAverage"], 1)
     diff1 = sp.compare(sp2, "val", common=True)
     diff2 = sp2.compare(sp, "val", common=True)
     self.assertEqual(diff1["max"], None)
     self.assertEqual(diff1["average"], None)
     self.assertEqual(diff1["wAverage"], None)
     self.assertEqual(diff2["max"], None)
     self.assertEqual(diff2["average"], None)
     self.assertEqual(diff2["wAverage"], None)
Example #26
0
    def __call__(self):
        """Return the data as a SpreadsheetData-object"""

        lines = open(self.file).readlines()
        data = []
        for l in lines:
            v = l.split()
            if v[0][0] != '#':
                data.append(
                    [float(x.replace('(', '').replace(')', '')) for x in v])
        names = ["time"]
        if self.isVector:
            for p in self.positions:
                names += [p + " x", p + " y", p + " z"]
        else:
            names += self.positions

        return SpreadsheetData(data=data,
                               names=names,
                               title="%s_t=%s" % (self.val, self.time))
    def testSpreadsheetDataInterpolationWithString(self):
        sp = SpreadsheetData(data=data3a, names=names3a)
        self.assertAlmostEqual(sp(-1, "val", invalidExtend=True), 0)
        self.assert_(numpy.isnan(sp(-1, "val")))
        self.assertAlmostEqual(sp(10, "val", invalidExtend=True), 81)
        self.assert_(numpy.isnan(sp(10, "val")))
        self.assertAlmostEqual(sp(1, "val"), 1)
        self.assertAlmostEqual(sp(1.5, "val"), 2.5)
        self.assertAlmostEqual(sp(5, "val"), 25)
        self.assertAlmostEqual(sp(5.1, "val"), 26.1)
        self.assertAlmostEqual(sp(8.9, "val"), 79.3)
        self.assertAlmostEqual(sp(8.9, "t"), 8.9)

        self.assertAlmostEqual(sp(1, "val", noInterpolation=True), 1)
        self.assert_(numpy.isnan(sp(1.5, "val", noInterpolation=True)))

        self.assertEqual(sp(-1, "descr", invalidExtend=True), b('val_0'))
        self.assertEqual(sp(-1, "descr"), '')
        self.assertEqual(sp(2, "descr"), b('val_2'))
        self.assertEqual(sp(3, "descr"), b('val_3'))
        self.assertEqual(sp(2.4, "descr"), b('val_2'))
        self.assertEqual(sp(2.5, "descr"), b('val_3'))
        self.assertEqual(sp(2.7, "descr"), b('val_3'))
Example #28
0
    def __call__(self, scaleX=1., scaleData=1, offsetData=0, offsetX=0):
        """Return the data as SpreadsheetData-object"""

        data = []
        if self.isVector():
            for i, c in enumerate(self.coord):
                data.append([scaleX * c + offsetX] +
                            [scaleData * v + offsetData for v in self.data[i]])
        else:
            for i, c in enumerate(self.coord):
                data.append([
                    scaleX * c + offsetX, scaleData * self.data[i] + offsetData
                ])

        names = ["coord"]
        if self.isVector():
            names += [self.name + "_x", self.name + "_y", self.name + "_z"]
        else:
            names.append(self.name)

        return SpreadsheetData(data=data,
                               names=names,
                               title="%s_t=%s" % (self.line(), self.time()))
Example #29
0
    def __call__(self,addTitle=True):
        """Return the data as a SpreadsheetData-object"""

        def safeFloat(v):
            try:
                return float(v)
            except ValueError:
                return v
        lines=open(self.file).readlines()
        data=[]
        for l in lines:
            v=l.split()
            if v[0][0]!='#':
                data.append([safeFloat(x.replace('(','').replace(')','')) for x in v])
        names=["time"]
        if self.isVector:
            for p in self.positions:
                names+=[p+" x",p+" y",p+" z"]
        else:
            names+=self.positions

        return SpreadsheetData(data=data,
                               names=names,
                               title="%s_t=%s" % (self.val,self.time) if addTitle else None)
Example #30
0
 def testSpreadsheetDataCompare6(self):
     sp=SpreadsheetData(data=[[i*0.5,1] for i in range(10)],names=['t','val'])
     sp2=SpreadsheetData(data=[[i*0.5+10,2] for i in range(10)],names=['t','val'])
     diff1=sp.compare(sp2,"val")
     diff2=sp2.compare(sp,"val")
     self.assertAlmostEqual(diff1["max"],1)
     self.assertAlmostEqual(diff1["average"],1)
     self.assertAlmostEqual(diff1["wAverage"],1)        
     self.assertAlmostEqual(diff2["max"],1)
     self.assertAlmostEqual(diff2["average"],1)
     self.assertAlmostEqual(diff2["wAverage"],1)        
     diff1=sp.compare(sp2,"val",common=True)
     diff2=sp2.compare(sp,"val",common=True)
     self.assertEqual(diff1["max"],None)
     self.assertEqual(diff1["average"],None)
     self.assertEqual(diff1["wAverage"],None)        
     self.assertEqual(diff2["max"],None)
     self.assertEqual(diff2["average"],None)
     self.assertEqual(diff2["wAverage"],None)        
Example #31
0
 def testSpreadsheetDataAddTimes(self):
     sp1 = SpreadsheetData(data=data1, names=names1)
     self.assertEqual(len(sp1.data), 6)
     sp1.addTimes([1.5], interpolate=True)
     self.assertEqual(len(sp1.data), 7)
     self.assertAlmostEqual(sp1.data["p1"][2], 3)
     sp1.addTimes([2.5], interpolate=False)
     self.assertEqual(len(sp1.data), 8)
     self.assert_(numpy.isnan(sp1.data["p1"][4]))
     sp1.addTimes([-1], interpolate=True, invalidExtend=True)
     self.assertEqual(len(sp1.data), 9)
     self.assertAlmostEqual(sp1.data["p1"][0], 0)
     sp1.addTimes([10], interpolate=True, invalidExtend=False)
     self.assertEqual(len(sp1.data), 10)
     self.assert_(numpy.isnan(sp1.data["p1"][-1]))
     sp1.addTimes([0, 1, 2], interpolate=True)
     self.assertEqual(len(sp1.data), 10)
     sp1.addTimes([-2, 2.37, 20], interpolate=True)
     self.assertEqual(len(sp1.data), 13)
     sp1.addTimes([-3, 4, 19], interpolate=True)
     self.assertEqual(len(sp1.data), 15)
Example #32
0
 def testSpreadsheetReadFileHandleTest(self):
     sp = SpreadsheetData(txtName=BytesIO(filecontent))
     self.assertEqual(len(sp.names()), 4)
Example #33
0
 def testSpreadsheetDataExtend(self):
     sp1 = SpreadsheetData(data=data1, names=names1)
     sp1.append("test", [i * i for i in range(len(data1))])
     self.assertEqual(len(sp1.names()), len(names1) + 1)
     self.assert_("test" in sp1.names())
Example #34
0
 def testSpreadsheetDataExtend(self):
     sp1=SpreadsheetData(data=data1,names=names1)
     sp1.append("test",[i*i for i in range(len(data1))])
     self.assertEqual(len(sp1.names()),len(names1)+1)
     self.assert_("test" in sp1.names())
Example #35
0
 def testSpreadsheetReadFileHandleTest(self):
     fName = mktemp()
     open(fName, "w").write(filecontent)
     sp = SpreadsheetData(txtName=open(fName))
     self.assertEqual(len(sp.names()), 4)
Example #36
0
    def run(self):
        dest = self.parser.getArgs()[-1]
        if path.exists(dest) and not self.opts.force:
            self.error("CSV-file", dest, "exists already. Use --force to overwrite")
        sources = self.parser.getArgs()[0:-1]

        data = SpreadsheetData(csvName=sources[0], title=path.splitext(path.basename(sources[0]))[0])

        if self.opts.time == None:
            self.opts.time = data.names()[0]

        for s in sources[1:]:
            addition = path.splitext(path.basename(s))[0]
            sData = SpreadsheetData(csvName=s)
            if self.opts.addTimes:
                data.addTimes(
                    time=self.opts.time, times=sData.data[self.opts.time], interpolate=self.opts.interpolateNewTime
                )
            for n in sData.names():
                if n != self.opts.time:
                    d = data.resample(
                        sData,
                        n,
                        time=self.opts.time,
                        extendData=self.opts.extendData,
                        noInterpolation=not self.opts.newDataInterpolate,
                    )
                    data.append(addition + " " + n, d, allowDuplicates=True)

        data.writeCSV(dest, delimiter=self.opts.delimiter)
Example #37
0
 def testSpreadsheetReadFileHandleTest(self):
     fName="/tmp/testdata"
     open(fName,"w").write(filecontent)
     sp=SpreadsheetData(txtName=open(fName))
     self.assertEqual(len(sp.names()),4)
Example #38
0
 def testSpreadsheetDataConstruction(self):
     sp=SpreadsheetData(data=data1,names=names1)
     self.assertEqual(names1,list(sp.names()))
     self.assertEqual(len(sp.data),len(names1)*2)
     self.assertEqual(max(sp.data['t']-range(len(names1)*2)),0)
Example #39
0
    def run(self):
        dest = self.parser.getArgs()[-1]
        if path.exists(dest) and not self.opts.force:
            self.error("CSV-file", dest,
                       "exists already. Use --force to overwrite")
        sources = self.parser.getArgs()[0:-1]

        data = SpreadsheetData(csvName=sources[0],
                               title=path.splitext(path.basename(
                                   sources[0]))[0])

        if self.opts.time == None:
            self.opts.time = data.names()[0]

        for s in sources[1:]:
            addition = path.splitext(path.basename(s))[0]
            sData = SpreadsheetData(csvName=s)
            if self.opts.addTimes:
                data.addTimes(time=self.opts.time,
                              times=sData.data[self.opts.time],
                              interpolate=self.opts.interpolateNewTime)
            for n in sData.names():
                if n != self.opts.time:
                    d = data.resample(
                        sData,
                        n,
                        time=self.opts.time,
                        extendData=self.opts.extendData,
                        noInterpolation=not self.opts.newDataInterpolate)
                    data.append(addition + " " + n, d, allowDuplicates=True)

        data.writeCSV(dest, delimiter=self.opts.delimiter)
Example #40
0
    def run(self):
        dest = self.parser.getArgs()[-1]
        if path.exists(dest) and not self.opts.force:
            self.error("CSV-file", dest,
                       "exists already. Use --force to overwrite")
        sources = self.parser.getArgs()[0:-1]

        data = SpreadsheetData(txtName=sources[0],
                               timeName=self.opts.time,
                               validData=self.opts.columns,
                               title=path.splitext(path.basename(
                                   sources[0]))[0])

        if self.opts.time == None:
            self.opts.time = data.names()[0]

        for s in sources[1:]:
            addition = path.splitext(path.basename(s))[0]
            sData = SpreadsheetData(txtName=s)
            for n in sData.names():
                if n != self.opts.time and (self.opts.columns == []
                                            or n in self.opts.columns):
                    d = data.resample(sData,
                                      n,
                                      time=self.opts.time,
                                      extendData=self.opts.extendData)
                    data.append(addition + " " + n, d)

        data.writeCSV(dest, delimiter=self.opts.delimiter)
Example #41
0
 def testSpreadsheetDataAddition(self):
     sp1 = SpreadsheetData(data=data1, names=names1)
     sp2 = SpreadsheetData(data=data2, names=names2, title="nix")
     sp = sp1 + sp2
     self.assertEqual(len(names1) + len(names2) - 1, len(sp.names()))
class ReplayDataFileAnalyzer(GeneralLineAnalyzer):
    """Reads Data into a SpreadsheetData-object and then every time a
    new time value comes up returns the data from that file"""

    def __init__(self,
                 timeName=None,
                 validData=None,
                 validMatchRegexp=False,
                 csvName=None,
                 txtName=None,
                 excelName=None,
                 namePrefix=None,
                 skip_header=0,
                 stripCharacters=None,
                 progressTemplate=None,
                 replaceFirstLine=None,
                 startTime=None,
                 endTime=None):
        self.__data=SpreadsheetData(timeName=timeName,
                                    validData=validData,
                                    validMatchRegexp=validMatchRegexp,
                                    csvName=csvName,
                                    txtName=txtName,
                                    excelName=excelName,
                                    skip_header=skip_header,
                                    stripCharacters=stripCharacters,
                                    replaceFirstLine=replaceFirstLine)
        self.namePrefix=namePrefix
        GeneralLineAnalyzer.__init__(self,
                                     titles=[self.makeName(n) for n in self.__data.names(withTime=False)],
                                     doTimelines=True,
                                     doFiles=False,
                                     progressTemplate=progressTemplate,
                                     startTime=startTime,
                                     endTime=endTime)
        self.timeNew=False
        self.tRange=self.__data.tRange()

    def makeName(self,name):
        if self.namePrefix is None:
            return name
        else:
            return self.namePrefix+name

    def timeChanged(self):
        time=float(self.getTime())
        if time<self.tRange[0] or time>self.tRange[1]:
            return
        self.timeNew=True
        self.lines.setTime(time)

    def doMatch(self,line):
        if self.timeNew:
            time=float(self.getTime())
            if time<self.tRange[0] or time>self.tRange[1]:
                return None
            data=self.__data(time,invalidExtend=True)
            self.timeNew=False
            return {self.makeName(k):v for k,v in data.items()}
        else:
            return None

    def addToTimelines(self,data):
        for t in self.titles:
            self.lines.setValue(self.fName(t),data[t])

    def processProgressTemplate(self,data):
        ldata={k[len(self.namePrefix):]:data[k] for k in data}
        myProgress=self.progressTemplate.format(**ldata)
        return myProgress
Example #43
0
 def testSpreadsheetDataConstruction(self):
     sp = SpreadsheetData(data=data1, names=names1)
     self.assertEqual(names1, list(sp.names()))
     self.assertEqual(len(sp.data), len(names1) * 2)
     self.assertEqual(max(sp.data['t'] - range(len(names1) * 2)), 0)
Example #44
0
    def run(self):
        dest=self.parser.getArgs()[-1]
        if path.exists(dest) and not self.opts.force:
            self.error("CSV-file",dest,"exists already. Use --force to overwrite")
        sources=self.parser.getArgs()[0:-1]

        diffs=[None]
        if len(sources)>1:
            # find differing parts
            commonStart=1e4
            commonEnd=1e4
            for s in sources[1:]:
                a=path.abspath(sources[0])
                b=path.abspath(s)
                start=0
                end=0
                for i in range(min(len(a),len(b))):
                    start=i
                    if a[i]!=b[i]:
                        break
                commonStart=min(commonStart,start)
                for i in range(min(len(a),len(b))):
                    end=i
                    if a[-(i+1)]!=b[-(i+1)]:
                        break
                commonEnd=min(commonEnd,end)
            diffs=[]
            for s in sources:
                b=path.abspath(s)
                if commonEnd>0:
                    diffs.append(b[commonStart:-(commonEnd)])
                else:
                    diffs.append(b[commonStart:])

        names=None
        title=path.splitext(path.basename(sources[0]))[0]
        if self.opts.namesFromFilename:
            names=path.splitext(path.basename(sources[0]))[0].split("_")
            title=None

        data=SpreadsheetData(names=names,
                             timeName=self.opts.time,
                             validData=self.opts.columns,
                             validMatchRegexp=self.opts.columnsRegexp,
                             title=title,
                             **self.dataFormatOptions(sources[0]))
        self.printColumns(sources[0],data)
        self.recalcColumns(data)
        self.rawAddColumns(data)

        if self.opts.time==None:
            self.opts.time=data.names()[0]

        for i,s in enumerate(sources[1:]):
            names=None
            title=path.splitext(path.basename(s))[0]
            if self.opts.namesFromFilename:
                names=title.split("_")
                title=None
            sData=SpreadsheetData(names=names,
                                  timeName=self.opts.time,
                                  validData=self.opts.columns,
                                  validMatchRegexp=self.opts.columnsRegexp,
                                  title=title,
                                  **self.dataFormatOptions(s))
            self.printColumns(s,sData)
            self.recalcColumns(sData)
            self.rawAddColumns(sData)

            for n in sData.names():
                if n!=self.opts.time and (self.opts.columns==[] or data.validName(n,self.opts.columns,True)):
                    d=data.resample(sData,
                                    n,
                                    time=self.opts.time,
                                    extendData=self.opts.extendData)
                    data.append(diffs[i+1]+" "+n,d)

        self.joinedAddColumns(data)

        if len(sources)>1:
            self.printColumns("written data",data)

        if self.opts.writeExcel:
            data.getData().to_excel(dest)
        else:
            data.writeCSV(dest,
                          delimiter=self.opts.delimiter)
Example #45
0
 def testSpreadsheetReadFileHandleTest(self):
     sp=SpreadsheetData(txtName=StringIO(filecontent))
     self.assertEqual(len(sp.names()),4)
Example #46
0
 def testSpreadsheetDataOuterLimitNoInterpolate(self):
     sp = SpreadsheetData(data=data3, names=names3)
     self.assertAlmostEqual(sp(0, "val", noInterpolation=True), 0)
     self.assertAlmostEqual(sp(9, "val", noInterpolation=True), 81)
     self.assertAlmostEqual(sp(0, "val"), 0)
     self.assertAlmostEqual(sp(9, "val"), 81)
Example #47
0
    def run(self):
        dest=self.parser.getArgs()[-1]
        if path.exists(dest) and not self.opts.force:
            self.error("CSV-file",dest,"exists already. Use --force to overwrite")
        sources=self.parser.getArgs()[0:-1]

        data=SpreadsheetData(title=path.splitext(path.basename(sources[0]))[0],
                             validData=self.opts.columns,
                             validMatchRegexp=self.opts.columnsRegexp,
                             **self.dataFormatOptions(sources[0]))
        self.printColumns(sources[0],data)
        self.recalcColumns(data)
        self.rawAddColumns(data)

        if self.opts.time==None:
            self.opts.time=data.names()[0]

        for s in sources[1:]:
            addition=path.splitext(path.basename(s))[0]

            sData=SpreadsheetData(validData=self.opts.columns,
                                  validMatchRegexp=self.opts.columnsRegexp,
                                  **self.dataFormatOptions(s))
            self.printColumns(s,sData)
            self.recalcColumns(sData)
            self.rawAddColumns(sData)

            if self.opts.addTimes:
                data.addTimes(time=self.opts.time,
                               times=sData.data[self.opts.time],
                               interpolate=self.opts.interpolateNewTime)
            for n in sData.names():
                if n!=self.opts.time:
                    d=data.resample(sData,
                                    n,
                                    time=self.opts.time,
                                    extendData=self.opts.extendData,
                                    noInterpolation=not self.opts.newDataInterpolate)
                    data.append(addition+" "+n,
                                d,
                                allowDuplicates=True)

        self.joinedAddColumns(data)

        if len(sources)>1:
            self.printColumns("written data",data)

        if self.opts.writeExcel:
            data.getData().to_excel(dest)
        else:
            data.writeCSV(dest,
                          delimiter=self.opts.delimiter)
Example #48
0
 def testSpreadsheetDataAddTimes(self):
     sp1=SpreadsheetData(data=data1,names=names1)
     self.assertEqual(len(sp1.data),6)
     sp1.addTimes([1.5],interpolate=True)
     self.assertEqual(len(sp1.data),7)
     self.assertAlmostEqual(sp1.data["p1"][2],3)
     sp1.addTimes([2.5],interpolate=False)
     self.assertEqual(len(sp1.data),8)
     self.assert_(math.isnan(sp1.data["p1"][4]))
     sp1.addTimes([-1],interpolate=True,invalidExtend=True)
     self.assertEqual(len(sp1.data),9)
     self.assertAlmostEqual(sp1.data["p1"][0],0)
     sp1.addTimes([10],interpolate=True,invalidExtend=False)
     self.assertEqual(len(sp1.data),10)
     self.assert_(math.isnan(sp1.data["p1"][-1]))
     sp1.addTimes([0,1,2],interpolate=True)
     self.assertEqual(len(sp1.data),10)
     sp1.addTimes([-2,2.37,20],interpolate=True)
     self.assertEqual(len(sp1.data),13)
     sp1.addTimes([-3,4,19],interpolate=True)
     self.assertEqual(len(sp1.data),15)
Example #49
0
 def testSpreadsheetDataCompare5(self):
     sp=SpreadsheetData(data=[[i*0.5,1] for i in range(10)],names=['t','val'])
     diff=sp.compare(sp,"val")
     self.assertAlmostEqual(diff["max"],0)
     self.assertAlmostEqual(diff["average"],0)
     self.assertAlmostEqual(diff["wAverage"],0)        
    def run(self):
        dest=self.parser.getArgs()[-1]
        if path.exists(dest) and not self.opts.force:
            self.error("CSV-file",dest,"exists already. Use --force to overwrite")
        sources=[]
        for s in self.parser.getArgs()[0:-1]:
            if s.find("/*lastTime*/")>=0:
                front,back=s.split("/*lastTime*/",1)
                for d in glob(front):
                    lastTime=None
                    for f in listdir(d):
                        if path.exists(path.join(d,f,back)):
                            try:
                                t=float(f)
                                if lastTime:
                                    if t>float(lastTime):
                                        lastTime=f
                                else:
                                    lastTime=f
                            except ValueError:
                                pass
                    if lastTime:
                        sources.append(path.join(d,lastTime,back))
            else:
                sources.append(s)

        diffs=[None]
        if len(sources)>1:
            # find differing parts
            commonStart=1e4
            commonEnd=1e4
            for s in sources[1:]:
                a=path.abspath(sources[0])
                b=path.abspath(s)
                start=0
                end=0
                for i in range(min(len(a),len(b))):
                    start=i
                    if a[i]!=b[i]:
                        break
                commonStart=min(commonStart,start)
                for i in range(min(len(a),len(b))):
                    end=i
                    if a[-(i+1)]!=b[-(i+1)]:
                        break
                commonEnd=min(commonEnd,end)
            diffs=[]
            for s in sources:
                b=path.abspath(s)
                if commonEnd>0:
                    diffs.append(b[commonStart:-(commonEnd)])
                else:
                    diffs.append(b[commonStart:])

        names=None
        title=path.splitext(path.basename(sources[0]))[0]
        if self.opts.namesFromFilename:
            names=path.splitext(path.basename(sources[0]))[0].split("_")
            title=None

        data=SpreadsheetData(names=names,
                             timeName=self.opts.time,
                             validData=self.opts.columns,
                             validMatchRegexp=self.opts.columnsRegexp,
                             title=title,
                             **self.dataFormatOptions(sources[0]))
        rawData=[deepcopy(data)]
        self.printColumns(sources[0],data)
        self.recalcColumns(data)
        self.rawAddColumns(data)

        if self.opts.time==None:
            self.opts.time=data.timeName()

        if not diffs[0] is None:
            data.rename(lambda c:diffs[0]+" "+c)

        for i,s in enumerate(sources[1:]):
            names=None
            title=path.splitext(path.basename(s))[0]
            if self.opts.namesFromFilename:
                names=title.split("_")
                title=None
            sData=SpreadsheetData(names=names,
                                  timeName=self.opts.time,
                                  validData=self.opts.columns,
                                  validMatchRegexp=self.opts.columnsRegexp,
                                  title=title,
                                  **self.dataFormatOptions(s))
            rawData.append(sData)
            self.printColumns(s,sData)
            self.recalcColumns(sData)
            self.rawAddColumns(sData)

            if self.opts.addTimes:
                data.addTimes(time=self.opts.time,
                               times=sData.data[self.opts.time],
                               interpolate=self.opts.interpolateNewTime)
            for n in sData.names():
                if n!=self.opts.time and (self.opts.columns==[] or data.validName(n,self.opts.columns,True)):
                    d=data.resample(sData,
                                    n,
                                    time=self.opts.time,
                                    extendData=self.opts.extendData,
                                    noInterpolation=not self.opts.newDataInterpolate)
                    data.append(diffs[i+1]+" "+n,d)

        self.joinedAddColumns(data)
        data.rename(self.processName,renameTime=True)
        data.rename(lambda c:c.strip())

        if len(sources)>1:
            self.printColumns("written data",data)

        if self.opts.automaticFormat:
            if self.getDataFormat(dest)=="excel":
                self.opts.writeExcel=True

        if self.opts.writeExcel:
            from pandas import ExcelWriter
            with ExcelWriter(dest) as writer:
                data.getData().to_excel(writer)
                if self.opts.addSheets:
                    for n,d in enumerate(rawData):
                        d.getData().to_excel(writer,
                                             sheet_name="Original file %d" % n)
        else:
            data.writeCSV(dest,
                          delimiter=self.opts.delimiter)
    def run(self):
        dest=self.parser.getArgs()[-1]
        if path.exists(dest) and not self.opts.force:
            self.error("CSV-file",dest,"exists already. Use --force to overwrite")
        sources=[]
        for s in self.parser.getArgs()[0:-1]:
            if s.find("/*lastTime*/")>=0:
                front,back=s.split("/*lastTime*/",1)
                for d in glob(front):
                    lastTime=None
                    for f in listdir(d):
                        if path.exists(path.join(d,f,back)):
                            try:
                                t=float(f)
                                if lastTime:
                                    if t>float(lastTime):
                                        lastTime=f
                                else:
                                    lastTime=f
                            except ValueError:
                                pass
                    if lastTime:
                        sources.append(path.join(d,lastTime,back))
            else:
                sources.append(s)

        diffs=[None]
        if len(sources)>1:
            # find differing parts
            commonStart=1e4
            commonEnd=1e4
            for s in sources[1:]:
                a=path.abspath(sources[0])
                b=path.abspath(s)
                start=0
                end=0
                for i in range(min(len(a),len(b))):
                    start=i
                    if a[i]!=b[i]:
                        break
                commonStart=min(commonStart,start)
                for i in range(min(len(a),len(b))):
                    end=i
                    if a[-(i+1)]!=b[-(i+1)]:
                        break
                commonEnd=min(commonEnd,end)
            diffs=[]
            for s in sources:
                b=path.abspath(s)
                if commonEnd>0:
                    diffs.append(b[commonStart:-(commonEnd)])
                else:
                    diffs.append(b[commonStart:])

        names=self.names
        title=path.splitext(path.basename(sources[0]))[0]
        if self.opts.namesFromFilename:
            if not names is None:
                self.error("Names already specified as",names,". Can't calc from filename")
            names=path.splitext(path.basename(sources[0]))[0].split("_")
            title=None

        data=SpreadsheetData(names=names,
                             timeName=self.opts.time,
                             validData=self.opts.columns,
                             skip_header=self.opts.skipHeaderLines,
                             stripCharacters=self.opts.stripCharacters,
                             replaceFirstLine=self.opts.replaceFirstLine,
                             validMatchRegexp=self.opts.columnsRegexp,
                             title=title,
                             **self.dataFormatOptions(sources[0]))
        rawData=[deepcopy(data)]
        self.printColumns(sources[0],data)
        self.recalcColumns(data)
        self.rawAddColumns(data)

        if self.opts.time==None:
            self.opts.time=data.timeName()

        if not diffs[0] is None:
            data.rename(lambda c:diffs[0]+" "+c)

        for i,s in enumerate(sources[1:]):
            names=None
            title=path.splitext(path.basename(s))[0]
            if self.opts.namesFromFilename:
                names=title.split("_")
                title=None
            sData=SpreadsheetData(names=names,
                                  skip_header=self.opts.skipHeaderLines,
                                  stripCharacters=self.opts.stripCharacters,
                                  replaceFirstLine=self.opts.replaceFirstLine,
                                  timeName=self.opts.time,
                                  validData=self.opts.columns,
                                  validMatchRegexp=self.opts.columnsRegexp,
                                  title=title,
                                  **self.dataFormatOptions(s))
            rawData.append(sData)
            self.printColumns(s,sData)
            self.recalcColumns(sData)
            self.rawAddColumns(sData)

            if self.opts.addTimes:
                data.addTimes(time=self.opts.time,
                               times=sData.data[self.opts.time],
                               interpolate=self.opts.interpolateNewTime)
            for n in sData.names():
                if n!=self.opts.time and (self.opts.columns==[] or data.validName(n,self.opts.columns,True)):
                    d=data.resample(sData,
                                    n,
                                    time=self.opts.time,
                                    extendData=self.opts.extendData,
                                    noInterpolation=not self.opts.newDataInterpolate)
                    data.append(diffs[i+1]+" "+n,d)

        self.joinedAddColumns(data)
        data.rename(self.processName,renameTime=True)
        data.rename(lambda c:c.strip())

        data.eliminatedNames=None
        if len(sources)>1:
            self.printColumns("written data",data)

        if self.opts.automaticFormat:
            if self.getDataFormat(dest)=="excel":
                self.opts.writeExcel=True

        if self.opts.writeExcel:
            from pandas import ExcelWriter
            with ExcelWriter(dest) as writer:
                data.getData().to_excel(writer,sheet_name="Data")
                if self.opts.addSheets:
                    for n,d in enumerate(rawData):
                        d.getData().to_excel(writer,
                                             sheet_name="Original file %d" % n)
                if hasXlsxWriter:
                    if len(self.opts.addFormulas)>0:
                        from xlsxwriter.utility import xl_rowcol_to_cell as rowCol2Cell
                        rows=len(data.getData())
                        sheet=writer.sheets["Data"]
                        cols={}
                        for i,n in enumerate(data.names()):
                            cols[n]=i
                            newC=i

                        for f in self.opts.addFormulas:
                            newC+=1
                            name,formula=f.split(":::")
                            sheet.write(0,newC,name)
                            cols[name]=newC
                            splitted=[]
                            ind=0
                            while ind>=0:
                                if ind>=len(formula):
                                    break
                                nInd=formula.find("'",ind)
                                if nInd<0:
                                    splitted.append(formula[ind:])
                                    ind=nInd
                                elif nInd!=ind:
                                    splitted.append(formula[ind:nInd])
                                    ind=nInd
                                else:
                                    nInd=formula.find("'",ind+1)
                                    if nInd<0:
                                        self.error("No closing ' in formula",formula)
                                    name=formula[ind+1:nInd]
                                    if name not in cols:
                                        self.error("Name",name,"not in column names",cols.keys())
                                    splitted.append(cols[name])
                                    ind=nInd+1
                            for row in range(rows):
                                cellFormula="="
                                for s in splitted:
                                    if type(s)==int:
                                        cellFormula+=rowCol2Cell(row+1,s)
                                    else:
                                        cellFormula+=s
                                sheet.write(row+1,newC,cellFormula)
                        print_("Formulas written. In LibreOffice recalculate with Ctrl+Shift+F9")
        else:
            data.writeCSV(dest,
                          delimiter=self.opts.delimiter)
Example #52
0
    def run(self):
        dest = self.parser.getArgs()[-1]
        if path.exists(dest) and not self.opts.force:
            self.error("CSV-file", dest,
                       "exists already. Use --force to overwrite")
        sources = self.parser.getArgs()[0:-1]

        data = SpreadsheetData(title=path.splitext(path.basename(
            sources[0]))[0],
                               validData=self.opts.columns,
                               validMatchRegexp=self.opts.columnsRegexp,
                               **self.dataFormatOptions(sources[0]))
        self.printColumns(sources[0], data)
        self.recalcColumns(data)
        self.rawAddColumns(data)

        if self.opts.time == None:
            self.opts.time = data.names()[0]

        for s in sources[1:]:
            addition = path.splitext(path.basename(s))[0]

            sData = SpreadsheetData(validData=self.opts.columns,
                                    validMatchRegexp=self.opts.columnsRegexp,
                                    **self.dataFormatOptions(s))
            self.printColumns(s, sData)
            self.recalcColumns(sData)
            self.rawAddColumns(sData)

            if self.opts.addTimes:
                data.addTimes(time=self.opts.time,
                              times=sData.data[self.opts.time],
                              interpolate=self.opts.interpolateNewTime)
            for n in sData.names():
                if n != self.opts.time:
                    d = data.resample(
                        sData,
                        n,
                        time=self.opts.time,
                        extendData=self.opts.extendData,
                        noInterpolation=not self.opts.newDataInterpolate)
                    data.append(addition + " " + n, d, allowDuplicates=True)

        self.joinedAddColumns(data)

        if len(sources) > 1:
            self.printColumns("written data", data)

        if self.opts.writeExcel:
            data.getData().to_excel(dest)
        else:
            data.writeCSV(dest, delimiter=self.opts.delimiter)