public void Conditionals() { SeriesExpressionParser.Debug = true; var tiew_qj = new Series("tiew_qj"); var nscw_qj = new Series("nscw_qj"); tiew_qj.TimeInterval = TimeInterval.Daily; nscw_qj.TimeInterval = TimeInterval.Daily; DateTime t1 = DateTime.Parse("1/1/2015"); DateTime t2 = DateTime.Parse("1/10/2015"); tiew_qj.AfterRead += new EventHandler(delegate(object o, EventArgs a) { tiew_qj.AddRange(t1, new double[] { 10, 10, 1, 1 }); }); nscw_qj.AfterRead += new EventHandler(delegate(object o, EventArgs a) { nscw_qj.AddRange(t1, new double[] { 11, 10, 1, 100 }); }); var expected = new double[] { 35, 0, 0, 35 }; var expected2 = new double[] { 0, 0, 35, 0 }; var qu = new CalculationSeries(); qu.Expression = "If( tiew_qj + nscw_qj > 20.0 , 35.0, 0.0)"; qu.TimeInterval = TimeInterval.Daily; qu.Parser.VariableResolver.Add("tiew_qj", tiew_qj); qu.Parser.VariableResolver.Add("nscw_qj", nscw_qj); qu.Calculate(t1, t2); qu.WriteToConsole(); Assert.AreEqual(4, qu.Count, " expected 4 QU values"); for (int i = 0; i < expected.Length; i++) { Assert.AreEqual(expected[i], qu[i].Value, 0.001); } expected = null; qu.Expression = "If( tiew_qj + nscw_qj < 20.0 , 35.0, 0.0)"; qu.Calculate(t1, t2); qu.WriteToConsole(); Assert.AreEqual(4, qu.Count, " expected 4 QU values"); for (int i = 0; i < expected2.Length; i++) { Assert.AreEqual(expected2[i], qu[i].Value, 0.001); } }
public void MathInDatabase() { _svr.CreateDataBase(_fn); Series one = new Series(); one.Name = "o"; one.Add(DateTime.Parse("2001-01-01"), 1); one.Add(DateTime.Parse("2001-01-02"), 1); Series two = new Series(); two.Name = "two"; two.Add(DateTime.Parse("2001-01-01"), 2); two.Add(DateTime.Parse("2001-01-02"), 2); CalculationSeries onePlusTwo = new CalculationSeries(); onePlusTwo.Name = "one+two"; // this name will match 'one%' in SQL onePlusTwo.Expression = "o+two"; _db.AddSeries(one); _db.AddSeries(two); _db.AddSeries(onePlusTwo); onePlusTwo.Calculate(); Assert.AreEqual(2, onePlusTwo.Count); Assert.AreEqual(3, onePlusTwo[0].Value); Assert.AreEqual(3, onePlusTwo[1].Value); onePlusTwo.WriteToConsole(); }
public void MpollQU() { var qu = new CalculationSeries(); qu.Expression = "WOD_AF-WOD_AF[t-1]+WOD_OM"; qu.TimeInterval = TimeInterval.Monthly; qu.Parser.VariableResolver = new HydrometVariableResolver(); DateTime t1 = DateTime.Parse("9/1/1957"); DateTime t2 = DateTime.Parse("12/23/1957"); qu.Calculate(t1, t2); Assert.AreEqual(4120, qu["10/1/1957"].Value); qu.WriteToConsole(); }
public void SimpleDailyAverageNoPrefix() { var mm = new CalculationSeries(); mm.SiteID = "pici"; mm.Expression = "DailyAverage(%site%_ob)"; mm.TimeInterval = TimeInterval.Irregular; mm.Parser.VariableResolver = new HydrometVariableResolver(); DateTime t1 = DateTime.Parse("5/2/2013"); DateTime t2 = DateTime.Parse("5/2/2013"); mm.Calculate(t1, t2); Assert.AreEqual(44.56, mm["5/2/2013"].Value, 0.01); mm.WriteToConsole(); }
public void SimpleDailyAverageWithInterval() { var mm = new CalculationSeries(); mm.SiteID = "pici"; // test feautre that replaces %site% with SiteID mm.Expression = "DailyAverage(instant_%site%_ob)"; mm.TimeInterval = TimeInterval.Daily; mm.Parser.VariableResolver = new HydrometVariableResolver(); DateTime t1 = DateTime.Parse("5/2/2013"); DateTime t2 = DateTime.Parse("5/2/2013"); mm.Calculate(t1, t2); Assert.AreEqual(44.56, mm["5/2/2013"].Value, 0.01); mm.WriteToConsole(); }
public void FunctionNames() { _svr.CreateDataBase(_fn); ParserFunction f; string subExpr = ""; bool ok = ParserUtility.TryGetFunctionCall("Merge(series1,'series 2')+'Series 5'", out subExpr, out f); Assert.IsTrue(ok); Assert.AreEqual("Merge", f.Name); Assert.AreEqual(2, f.Parameters.Length); Series observed = new Series(); observed.Name = "observed"; observed.Add(DateTime.Parse("2001-01-01"), 1); observed.AddMissing(DateTime.Parse("2001-1-02")); observed.Add(DateTime.Parse("2001-01-04"), 1); observed.TimeInterval = TimeInterval.Daily; Series estimated = new Series(); estimated.Name = "estimated"; estimated.Add(DateTime.Parse("2001-1-02"), 2); estimated.Add(DateTime.Parse("2001-1-03"), 2); estimated.Add(DateTime.Parse("2000-12-25"), 2); estimated.Add(DateTime.Parse("2001-12-26"), 2); estimated.TimeInterval = TimeInterval.Daily; CalculationSeries c = new CalculationSeries(); //c.SetMissingDataToZero = true; c.TimeInterval = TimeInterval.Daily; c.Name = "merged"; c.Expression = "Merge(observed, estimated)"; _db.AddSeries(observed); _db.AddSeries(estimated); _db.AddSeries(c); c.Calculate(); Assert.AreEqual(2, c["2001-1-03"].Value, 0.0001); c.WriteToConsole(); }
public void MathMax() { //DailyCalculator. DateTime t = new DateTime(2012, 12, 6); ConstantSeries s1 = new ConstantSeries("s1", "aa", -1, TimeInterval.Daily); s1.TimeInterval = TimeInterval.Daily; Reclamation.TimeSeries.Parser.SeriesExpressionParser.Debug = true; var s = new CalculationSeries(); s.Expression = "Max(s1,0)"; s.TimeInterval = TimeInterval.Daily; s.Parser.VariableResolver = new VariableResolver(); s.Parser.VariableResolver.Add("s1", s1); s.Calculate(t, t.AddDays(2)); s.WriteToConsole(); Assert.AreEqual(3, s.Count); }
public void ConvertToCelcius() { var fn = Path.Combine(TestData.DataPath, "CalculationTests.xlsx"); Series s = new ExcelDataReaderSeries(fn, "ConvertToCelcius", "Date", "value"); s.Units = "degrees C"; s.Name = "series1"; CalculationSeries c = new CalculationSeries(); c.Parser.VariableResolver.Add("series1", s); c.Expression = "5/9*(series1-32)"; c.Read(); // c.WriteToConsole(); c.Clear(); c.Calculate(); //t,t.AddDays(3)); c.WriteToConsole(); Assert.AreEqual(0, c[0].Value, 0.01); Assert.AreEqual(100, c[1].Value, 0.01); }
public void UnregulatedFlow() { var fn = Path.Combine(TestData.DataPath, "calculationtests_jck_qu.csv"); var csv = new CsvFile(fn); Series af = new DataTableSeries(csv, TimeInterval.Daily, "Date", "jck af"); Series qd = new DataTableSeries(csv, TimeInterval.Daily, "Date", "jck qd"); var qu = new CalculationSeries(); qu.Parser.VariableResolver.Add("jck_af", af); qu.Parser.VariableResolver.Add("jck_qd", qd); qu.Expression = "(jck_af[t]-jck_af[t-1])/1.98347+jck_qd"; DateTime t1 = DateTime.Parse("12/25/2010"); DateTime t2 = DateTime.Parse("12/27/2010"); qu.Calculate(t1, t2); qu.WriteToConsole(); Assert.AreEqual(674.39, qu["12/26/2010"].Value, .01); }
public void ConvertToCelcius() { var fn = Path.Combine(TestData.DataPath, "calculationtests_convert.csv"); var csv = new CsvFile(fn); Series s = new DataTableSeries(csv, TimeInterval.Daily, "Date", "value"); s.Units = "degrees C"; s.Name = "series1"; CalculationSeries c = new CalculationSeries(); c.Parser.VariableResolver.Add("series1", s); c.Expression = "5/9*(series1-32)"; c.Read(); // c.WriteToConsole(); c.Clear(); c.Calculate(); //t,t.AddDays(3)); c.WriteToConsole(); Assert.AreEqual(0, c[0].Value, 0.01); Assert.AreEqual(100, c[1].Value, 0.01); }
public void UnregulatedFlow() { var fn = Path.Combine(TestData.DataPath, "CalculationTests.xlsx"); Series af = new ExcelDataReaderSeries(fn, "jck_qu", "Date", "jck af"); Series qd = new ExcelDataReaderSeries(fn, "jck_qu", "Date", "jck qd"); var qu = new CalculationSeries(); qu.Parser.VariableResolver.Add("jck_af", af); qu.Parser.VariableResolver.Add("jck_qd", qd); qu.Expression = "(jck_af[t]-jck_af[t-1])/1.98347+jck_qd"; DateTime t1 = DateTime.Parse("12/25/2010"); DateTime t2 = DateTime.Parse("12/27/2010"); qu.Calculate(t1, t2); qu.WriteToConsole(); Assert.AreEqual(674.39, qu["12/26/2010"].Value, .01); }