public void PartsCountingTest() { var tr = new TimeRegion(firstYear: 2000, lastYear: 2001).GetMonthlyTimeseries(); var request2 = new FetchRequest( "pet", FetchDomain.CreateCellGrid( Enumerable.Range(0, 151).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 171).Select(i => 70.0 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); // 306000 pts in this request Assert.AreEqual(31, JobManager.GetPartitionsCount(request2, 1000, 10000)); Assert.AreEqual(170, JobManager.GetPartitionsCount(request2, 1000, 10000, 310)); Assert.AreEqual(100, JobManager.GetPartitionsCount(request2, 1000, 10000, 100)); var request3 = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 50).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 170).Select(i => 70.0 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); //102000 pts Assert.AreEqual(102, JobManager.GetPartitionsCount(request3, 1000, 10000, 102)); }
public void HashTest() { TimeRegion tr = new TimeRegion(firstYear: 2000, lastYear: 2001).GetMonthlyTimeseries(); FetchRequest request = new FetchRequest( "airt", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 50.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 170).Select(i => 30.0 + i * 0.1).ToArray(), tr), new DateTime(2012, 11, 13), new string[] { "WorldClim 1.4" }); FetchRequest request2 = new FetchRequest( "temp", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 50.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 170).Select(i => 30.0 + i * 0.1).ToArray(), tr), new DateTime(2012, 11, 13), new string[] { "WorldClim 1.4" }); FetchRequest request3 = new FetchRequest( "temp", FetchDomain.CreateCellGrid( Enumerable.Range(0, 150).Select(i => 50.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 170).Select(i => 30.0 + i * 0.1).ToArray(), tr), new DateTime(2012, 11, 13), new string[] { "WorldClim 1.4" }); Assert.IsTrue(request.GetSHAHash() != request2.GetSHAHash()); Assert.IsTrue(request2.GetSHAHash() != request3.GetSHAHash()); }
public void TestInValidtimeRequest() { TimeRegion tr = new TimeRegion(lastDay: 567).GetYearlyTimeseries(); FetchDomain fd = FetchDomain.CreatePointGrid(new double[] { 0, 1, 2 }, new double[] { 3, 4, 5 }, tr); string error; Assert.IsFalse(fd.IsContentValid(out error)); Assert.IsFalse(string.IsNullOrEmpty(error)); }
public void TestInValidAxisRangeRequest() { TimeRegion tr = new TimeRegion(); FetchDomain fd = FetchDomain.CreatePointGrid(new double[] { 0, 1, 2678 }, new double[] { 3, 4, 5 }, tr); string error; Assert.IsFalse(fd.IsContentValid(out error)); Assert.IsFalse(string.IsNullOrEmpty(error)); }
private FetchDomain CreatePointGridDomain(TimeRegion tr) { var eps = r.NextDouble() / 10.0; Trace.WriteLine(String.Format("Using eps={0}", eps)); double latDelta = InFranceLat - BayOfBiscaySELat; double lonDelta = InFranceLon - BayOfBiscaySELon; return(FetchDomain.CreatePointGrid( Enumerable.Range(0, 31).Select(i => eps + BayOfBiscaySELat + i * latDelta / 31.0).ToArray(), Enumerable.Range(0, 21).Select(i => eps + BayOfBiscaySELon + i * lonDelta / 21.0).ToArray(), tr)); }
public void TestValidRequest() { TimeRegion tr = new TimeRegion(); FetchDomain fd = FetchDomain.CreatePointGrid(new double[] { 0, 1, 2 }, new double[] { 3, 4, 5 }, tr); string error; Assert.IsTrue(fd.IsContentValid(out error)); Assert.IsTrue(string.IsNullOrEmpty(error)); fd = FetchDomain.CreatePoints(new double[] { 0, 1, -2 }, new double[] { 3, 4, 5 }, tr); //points allow mixed axis Assert.IsTrue(fd.IsContentValid(out error)); Assert.IsTrue(string.IsNullOrEmpty(error)); }
public async Task PointCubeDataTest() { var storage = TestDataStorageFactory.GetStorageContext(TestConstants.UriCru); CruCl20DataHandler cru = await CruCl20DataHandler.CreateAsync(storage); ITimeRegion tr = new TimeRegion().GetMonthlyTimeseries(firstMonth: 2, lastMonth: 3); IFetchDomain domain = FetchDomain.CreatePointGrid( GenerateAxis(67.25, 67.75, 0.25), GenerateAxis(179.25, 180.75, 0.25), tr); FetchRequest request = new FetchRequest("tmp", domain); bool[, ,,,] mask = new bool[7, 3, 1, 2, 1]; bool[] maskStreched = Enumerable.Repeat(true, 2 * 7 * 3).ToArray(); Buffer.BlockCopy(maskStreched, 0, mask, 0, maskStreched.Length * sizeof(bool)); var handlerPrivate = new PrivateObject(cru, new PrivateType(typeof(DataHandlerFacade))); var aggregatorPrivate = new PrivateObject(handlerPrivate, "valuesAggregator"); for (int i = 0; i < 2; i++) { Array effectiveMask = i == 0 ? null : mask; var res = await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, request), null)); //lon,lat,t double[,,] temps = (double[, , ])res; double precision = TestConstants.FloatPrecision; //float precision //manual data comparasion //lon,lat,t //lat,lon,t Assert.AreEqual(-29.3, temps[0, 0, 0], precision); //corresponding varaible index [793,2155,1] Assert.AreEqual(-30.0, temps[0, 2, 0], precision); //corresponding varaible index [796,2155,1] Assert.AreEqual(-26.6, temps[4, 0, 0], precision); //corresponding varaible index [793,1,1] Assert.AreEqual(-26.8, temps[4, 2, 0], precision); //corresponding varaible index [796,1,1] Assert.AreEqual(-27.4, temps[0, 0, 1], precision); //corresponding varaible index [793,2155,2] Assert.AreEqual(-28.2, temps[0, 2, 1], precision); //corresponding varaible index [796,2155,2] Assert.AreEqual(-25.1, temps[4, 0, 1], precision); //corresponding varaible index [793,1,2] Assert.AreEqual(-25.2, temps[4, 2, 1], precision); //corresponding varaible index [796,1,2] } }
public static void Main(string[] args) { RemoteFetchClient fc = new RemoteFetchClient(new Uri("http://fetchclimate2.cloudapp.net")); TimeRegion tr = new TimeRegion(firstYear: 2000, lastYear: 2001); tr = tr.GetMonthlyTimeseries(); FetchRequest request = new FetchRequest( "airt", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 50.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 170).Select(i => 30.0 + i * 0.1).ToArray(), tr)); var dataSet = fc.FetchAsync(request).Result; Console.WriteLine(dataSet.ToString()); dataSet.View(); }
public void SubrequestExtractionTest() { var tr = new TimeRegion(firstYear: 2000, lastYear: 2001).GetMonthlyTimeseries(); var request = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 170).Select(i => 70.0 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); //let's divide it into 31 part // 170 / 31 = 5 // 170 % 31 = 15 //so we gotta get 15 parts 6 points wide and 16 parts 5 points wide var answer1 = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 6).Select(i => 70.0 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); var answer15 = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 6).Select(i => 78.4 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); var answer16 = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 5).Select(i => 79.0 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); var answer31 = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 5).Select(i => 86.5 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); var guess1 = JobManager.EvaluateSubrequestData(request, 31, 0); var guess15 = JobManager.EvaluateSubrequestData(request, 31, 14); var guess16 = JobManager.EvaluateSubrequestData(request, 31, 15); var guess31 = JobManager.EvaluateSubrequestData(request, 31, 30); Assert.AreEqual(answer1.EnvironmentVariableName, guess1.Item1.EnvironmentVariableName); Assert.AreEqual(answer1.ParticularDataSource, guess1.Item1.ParticularDataSource); Assert.AreEqual(answer1.ReproducibilityTimestamp, guess1.Item1.ReproducibilityTimestamp); Assert.AreEqual(answer1.Domain.SpatialRegionType, guess1.Item1.Domain.SpatialRegionType); Assert.AreEqual(answer15.EnvironmentVariableName, guess15.Item1.EnvironmentVariableName); Assert.AreEqual(answer15.ParticularDataSource, guess15.Item1.ParticularDataSource); Assert.AreEqual(answer15.ReproducibilityTimestamp, guess15.Item1.ReproducibilityTimestamp); Assert.AreEqual(answer15.Domain.SpatialRegionType, guess15.Item1.Domain.SpatialRegionType); Assert.AreEqual(answer16.EnvironmentVariableName, guess16.Item1.EnvironmentVariableName); Assert.AreEqual(answer16.ParticularDataSource, guess16.Item1.ParticularDataSource); Assert.AreEqual(answer16.ReproducibilityTimestamp, guess16.Item1.ReproducibilityTimestamp); Assert.AreEqual(answer16.Domain.SpatialRegionType, guess16.Item1.Domain.SpatialRegionType); Assert.AreEqual(answer31.EnvironmentVariableName, guess31.Item1.EnvironmentVariableName); Assert.AreEqual(answer31.ParticularDataSource, guess31.Item1.ParticularDataSource); Assert.AreEqual(answer31.ReproducibilityTimestamp, guess31.Item1.ReproducibilityTimestamp); Assert.AreEqual(answer31.Domain.SpatialRegionType, guess31.Item1.Domain.SpatialRegionType); for (int i = 0; i < answer1.Domain.Lats.Length; ++i) { Assert.AreEqual(answer1.Domain.Lats[i], guess1.Item1.Domain.Lats[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer1.Domain.Lons.Length; ++i) { Assert.AreEqual(answer1.Domain.Lons[i], guess1.Item1.Domain.Lons[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer15.Domain.Lats.Length; ++i) { Assert.AreEqual(answer15.Domain.Lats[i], guess15.Item1.Domain.Lats[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer15.Domain.Lons.Length; ++i) { Assert.AreEqual(answer15.Domain.Lons[i], guess15.Item1.Domain.Lons[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer16.Domain.Lats.Length; ++i) { Assert.AreEqual(answer16.Domain.Lats[i], guess16.Item1.Domain.Lats[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer16.Domain.Lons.Length; ++i) { Assert.AreEqual(answer16.Domain.Lons[i], guess16.Item1.Domain.Lons[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer31.Domain.Lats.Length; ++i) { Assert.AreEqual(answer31.Domain.Lats[i], guess31.Item1.Domain.Lats[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer31.Domain.Lons.Length; ++i) { Assert.AreEqual(answer31.Domain.Lons[i], guess31.Item1.Domain.Lons[i], TestConstants.DoublePrecision); } Assert.AreEqual(0, guess1.Item2[0]); Assert.AreEqual(84, guess15.Item2[0]); Assert.AreEqual(90, guess16.Item2[0]); Assert.AreEqual(165, guess31.Item2[0]); var request2 = new FetchRequest( "pet", FetchDomain.CreateCellGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 171).Select(i => 70.0 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); var answer115 = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 7).Select(i => 78.4 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); var answer116 = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 6).Select(i => 79.0 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); var guess115 = JobManager.EvaluateSubrequestData(request2, 31, 14); var guess116 = JobManager.EvaluateSubrequestData(request2, 31, 15); for (int i = 0; i < answer115.Domain.Lats.Length; ++i) { Assert.AreEqual(answer115.Domain.Lats[i], guess115.Item1.Domain.Lats[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer115.Domain.Lons.Length; ++i) { Assert.AreEqual(answer115.Domain.Lons[i], guess115.Item1.Domain.Lons[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer116.Domain.Lats.Length; ++i) { Assert.AreEqual(answer116.Domain.Lats[i], guess116.Item1.Domain.Lats[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer116.Domain.Lons.Length; ++i) { Assert.AreEqual(answer116.Domain.Lons[i], guess116.Item1.Domain.Lons[i], TestConstants.DoublePrecision); } var tr2 = new TimeRegion(1990, 2000, 1, -1, 0, 24).GetYearlyTimeseries(1990, 2000); var request3 = new FetchRequest( "airt", FetchDomain.CreateCells( new double[] { 3.0 }, new double[] { 78.0 }, new double[] { 23.0 }, new double[] { 99.0 }, tr2)); var guess117 = JobManager.EvaluateSubrequestData(request3, 1, 0); for (int i = 0; i < request3.Domain.Lats.Length; ++i) { Assert.AreEqual(request3.Domain.Lats[i], guess117.Item1.Domain.Lats[i], TestConstants.DoublePrecision); } for (int i = 0; i < request3.Domain.Lons.Length; ++i) { Assert.AreEqual(request3.Domain.Lons[i], guess117.Item1.Domain.Lons[i], TestConstants.DoublePrecision); } for (int i = 0; i < request3.Domain.Lats2.Length; ++i) { Assert.AreEqual(request3.Domain.Lats2[i], guess117.Item1.Domain.Lats2[i], TestConstants.DoublePrecision); } for (int i = 0; i < request3.Domain.Lons2.Length; ++i) { Assert.AreEqual(request3.Domain.Lons2[i], guess117.Item1.Domain.Lons2[i], TestConstants.DoublePrecision); } }
public void VirtualVariablesInfrastructureTest() { FetchRequest requestA = new FetchRequest("A", FetchDomain.CreatePointGrid( new double[] { 1.0, 2.0 }, new double[] { 2.0, 3.0 }, new TimeRegion())); VirtVarRequestContextStub contextStubA = new VirtVarRequestContextStub(requestA); var handler = new VirtVarTests.FunctionClass(); var result = handler.ProcessRequestAsync(contextStubA).Result; // x1+ 2*x2 + 3*x3 // args: 3,5,7,11,13,17 double expected = 3 + 2 * 5 + 3 * 7; foreach (var item in result) { Assert.AreEqual(expected, (double)item, TestConstants.DoublePrecision); } FetchRequest requestE = new FetchRequest("E", FetchDomain.CreatePointGrid( new double[] { 1.0, 2.0 }, new double[] { 2.0, 3.0 }, new TimeRegion())); VirtVarRequestContextStub contextStubE = new VirtVarRequestContextStub(requestE); handler = new VirtVarTests.FunctionClass(); result = handler.ProcessRequestAsync(contextStubE).Result; // 4*x1 + x2 + 2*x3 + 3*x4 // args: 3,5,7,11,13,17 expected = 4 * 3 + 5 + 2 * 7 + 3 * 11; foreach (var item in result) { Assert.AreEqual(expected, (double)item, TestConstants.DoublePrecision); } FetchRequest requestX = new FetchRequest("X", FetchDomain.CreatePointGrid( new double[] { 1.0, 2.0 }, new double[] { 2.0, 3.0 }, new TimeRegion())); VirtVarRequestContextStub contextStubX = new VirtVarRequestContextStub(requestX); handler = new VirtVarTests.FunctionClass(); result = handler.ProcessRequestAsync(contextStubX).Result; // x1 - 2 * x2 // unc: x1 + 2 * x2 // args: 3,5,7,11,13,17 expected = 3 - 2 * 5; foreach (var item in result) { Assert.AreEqual(expected, (double)item, TestConstants.DoublePrecision); } }