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));
        }
Пример #2
0
        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());
        }
Пример #3
0
        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));
        }
Пример #4
0
        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));
        }
Пример #5
0
        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));
        }
Пример #6
0
        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));
        }
Пример #7
0
        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]
            }
        }
Пример #8
0
        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);
            }
        }
Пример #10
0
        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);
            }
        }