예제 #1
0
        public void GetFilteredValuesFrom2DFunction()
        {
            var x = new Variable <int>();
            var y = new Variable <int>();

            var z = new Variable <double> {
                Arguments = { x, y }
            };

            z[0, 0] = 1.0;
            z[0, 1] = 2.0;
            z[1, 0] = 3.0;
            z[1, 1] = 4.0;

            var xFilter = new VariableValueFilter <int>(x, 0);
            var yFilter = new VariableValueFilter <int>(y, 1);

            var values = z.GetValues(xFilter, yFilter);

            values.Count
            .Should("query values using 2 filters").Be.EqualTo(1);

            values[0]
            .Should("query values using 2 filters").Be.EqualTo(2.0);
        }
예제 #2
0
    private static FilterDefinition <VariableValue> BuildFindKeyFilter(
        VariableValueFilter filter)
    {
        FilterDefinition <VariableValue> dbFilter = Filter.Eq(x => x.Key.VariableId, filter.Id);

        if (filter.EnvironmentId.HasValue)
        {
            dbFilter &= Filter
                        .EqOrNull(x => x.Key.EnvironmentId, filter.EnvironmentId.Value);
        }

        if (filter.ApplicationId.HasValue)
        {
            dbFilter &= Filter
                        .EqOrNull(x => x.Key.ApplicationId, filter.ApplicationId.Value);
        }

        if (filter.PartId.HasValue)
        {
            dbFilter &= Filter
                        .EqOrNull(x => x.Key.PartId, filter.PartId.Value);
        }

        return(dbFilter);
    }
예제 #3
0
        public void ConstructorPreconditions()
        {
            var variable = new Variable <int>();

            try
            {
                var t = new VariableValueFilter <int>(variable, new int[] {});
                Assert.Fail("ArgumentOutOfRangeException Should be thrown");
            }
            catch (Exception e)
            {
                Assert.AreEqual(typeof(ArgumentOutOfRangeException), e.GetType());
                Assert.AreEqual("Cannot be empty\r\nParameter name: values", e.Message);
            }

            try
            {
                var t = new VariableValueFilter <double>(variable, new[] { 1.1 });
                Assert.Fail("ArgumentOutOfRangeException Should be thrown");
            }
            catch (Exception e)
            {
                Assert.AreEqual(typeof(ArgumentOutOfRangeException), e.GetType());
                Assert.AreEqual("Invalid value type\r\nParameter name: values", e.Message);
            }
        }
예제 #4
0
        public void Extrapolation()
        {
            var argument = new Variable <int>("x")
            {
                Values = { 0, 10, 20 }
            };

            argument.InterpolationType = InterpolationType.Constant;
            argument.ExtrapolationType = ExtrapolationType.Constant;
            var component = new Variable <int>("y")
            {
                Values = { 3, 4, 5 }
            };
            var component2 = new Variable <int>("yy")
            {
                Values = { 6, 7, 8 }
            };

            var function = new Function()
            {
                Arguments = { argument }, Components = { component, component2 }
            };

            var xFilter = new VariableValueFilter <int>(argument, 40);
            var valueY  = function.Components[0].Evaluate <int>(xFilter);
            var valueYY = function.Components[1].Evaluate <int>(xFilter);

            Assert.AreEqual(5, valueY);
            Assert.AreEqual(8, valueYY);
        }
        private void ReplaceTimeFilter(DateTime time, IVariableFilter[] filters)
        {
            var timeFilter      = (IVariableValueFilter)filters.FirstOrDefault(f => f is IVariableValueFilter && f.Variable == Time);
            var timeFilterIndex = filters.ToList().IndexOf(timeFilter);

            filters[timeFilterIndex] = new VariableValueFilter <DateTime>(Time, time);
        }
예제 #6
0
 public TimeArgumentNavigatable(VariableValueFilter<DateTime> filter)
 {
     if (filter == null)
     {
         throw new InvalidOperationException("Filter should not be null");
     }
     this.filter = filter;
     
     filter.Variable.ValuesChanged += VariableValuesChanged;
 }
예제 #7
0
    public async Task <IEnumerable <VariableValue> > GetValuesAsync(
        VariableValueFilter filter,
        bool decrypt,
        CancellationToken cancellationToken)
    {
        Variable variable =
            await _variableStore.GetByIdAsync(filter.Id, cancellationToken);

        return(await GetValuesAsync(variable, filter, decrypt, cancellationToken));
    }
        public TimeArgumentNavigatable(VariableValueFilter <DateTime> filter)
        {
            if (filter == null)
            {
                throw new InvalidOperationException("Filter should not be null");
            }
            this.filter = filter;

            filter.Variable.ValuesChanged += VariableValuesChanged;
        }
예제 #9
0
    public async Task <IEnumerable <VariableValue> > GetByFilterAsync(
        VariableValueFilter filter,
        CancellationToken cancellationToken)
    {
        FilterDefinition <VariableValue> dbFilter = BuildFindKeyFilter(filter);

        IAsyncCursor <VariableValue> cursor = await _dbContext.VariableValues.FindAsync(
            dbFilter,
            options : null,
            cancellationToken);

        return(await cursor.ToListAsync(cancellationToken));
    }
예제 #10
0
        public void Interpolation()
        {
            var argument = new Variable<int>("x") { Values = { 0, 10, 20 } };
            argument.InterpolationType = InterpolationType.Constant;
            var component = new Variable<int>("y") { Values = { 3, 4, 5 } };
            var component2 = new Variable<int>("yy") { Values = { 6, 7, 8 } };

            var function = new Function() { Arguments = { argument }, Components = { component, component2 } };

            var xFilter = new VariableValueFilter<int>(argument, 15);
            var valueY = function.Components[0].Evaluate<int>(xFilter);
            var valueYY = function.Components[1].Evaluate<int>(xFilter);

            Assert.AreEqual(4, valueY);
            Assert.AreEqual(7, valueYY);
        }
예제 #11
0
        public void WriteSlicesUsingTimeFilterShouldBeTheSameAsUsingIndexFilter()
        {
            var network = CreateNetwork();


            var networkCoverage = new NetworkCoverage("test", true)
            {
                Network = network
            };
            var locations = new[] { new NetworkLocation(network.Branches[0], 0.0),
                                    new NetworkLocation(network.Branches[0], 100.0),
                                    new NetworkLocation(network.Branches[1], 100.0) };

            networkCoverage.SetLocations(locations);
            networkCoverage.Locations.FixedSize = locations.Length;

            var networkCoverage2 = new NetworkCoverage("test", true)
            {
                Network = network
            };

            networkCoverage2.SetLocations(locations);
            networkCoverage2.Locations.FixedSize = locations.Length;


            // set 1000 values using time filters in coverage 1 and 2
            var startTime = new DateTime(2000, 1, 1);

            for (int i = 0; i < 1000; i++)
            {
                IEnumerable <double> values = new[] { 1.0, 2.0, 3.0 }.Select(d => d * i);
                DateTime             currentTime = startTime.AddMinutes(i);
                //set values for coverage 1 using value filter
                networkCoverage.Time.AddValues(new[] { currentTime });
                var timeValueFilter = new VariableValueFilter <DateTime>(networkCoverage.Time, currentTime);
                networkCoverage.SetValues(values, timeValueFilter);

                //set values for coverage 2 using index filter
                networkCoverage2.Time.AddValues(new[] { currentTime });
                var timeIndexFilter = new VariableIndexRangeFilter(networkCoverage2.Time, i);
                networkCoverage2.SetValues(values, timeIndexFilter);
            }

            Assert.AreEqual(networkCoverage.Components[0].Values, networkCoverage2.Components[0].Values);
        }
예제 #12
0
    public async Task <IEnumerable <VariableValue> > GetValuesAsync(
        Variable variable,
        VariableValueFilter filter,
        bool decrypt,
        CancellationToken cancellationToken)
    {
        IEnumerable <VariableValue> values = await _variableValueStore.GetByFilterAsync(
            filter,
            cancellationToken);

        if (variable.IsSecret && decrypt)
        {
            values = await values
                     .ToAsyncEnumerable()
                     .SelectAwait(async value => value with
            {
                Value = await _cryptoProvider.DecryptAsync(
                    value.Value,
                    value.Encryption !,
                    cancellationToken)
            })
예제 #13
0
        public void MultiRasterBandTest()
        {
            string fileName = rasterDataPath + "4band.tif";

            var functionStore = new GdalFunctionStore {
                Path = fileName
            };

            functionStore.Open();

            var grid = (IRegularGridCoverage)functionStore.Functions.First(f => f is IRegularGridCoverage);

            //RasterBands to Components should be one to one. Tif -> 4 bands (values per ARGB channel)
            Assert.AreEqual(4, grid.Components.Count);

            var xFilter = new VariableValueFilter <double>(grid.X, grid.X.Values[9]);
            var yFilter = new VariableValueFilter <double>(grid.Y, grid.Y.Values[9]);

            var c1 = grid.Components[0].GetValues(xFilter, yFilter)[0];
            var c2 = grid.Components[1].GetValues(xFilter, yFilter)[0];
            var c3 = grid.Components[2].GetValues(xFilter, yFilter)[0];
            var c4 = grid.Components[3].GetValues(xFilter, yFilter)[0];

            Assert.AreEqual(255, c1);
            Assert.AreEqual(255, c2);
            Assert.AreEqual(255, c3);
            Assert.AreEqual(255, c4);

            // F = (value)(x,y) components - arguments

            /*
             * F........ grid coverage is a vector function
             * value.... grid contains n band variables (components)
             * x........ grid contains 2 variables for x and y
             * y
             */
            Assert.AreEqual(functionStore.Functions.Count, 7,
                            "store should contain 1 function for grid coverage, variable for 1st grid component and variables for x and y arguments");
        }
예제 #14
0
        public void GetFilteredValuesFrom2DFunction()
        {
            var x = new Variable<int>();
            var y = new Variable<int>();

            var z = new Variable<double> { Arguments = { x, y } };

            z[0, 0] = 1.0;
            z[0, 1] = 2.0;
            z[1, 0] = 3.0;
            z[1, 1] = 4.0;

            var xFilter = new VariableValueFilter<int>(x, 0);
            var yFilter = new VariableValueFilter<int>(y, 1);

            var values = z.GetValues(xFilter, yFilter);

            values.Count
                .Should("query values using 2 filters").Be.EqualTo(1);

            values[0]
                .Should("query values using 2 filters").Be.EqualTo(2.0);
        }
예제 #15
0
        public void WriteSlicesUsingTimeFilterShouldBeTheSameAsUsingIndexFilter()
        {
            var network = CreateNetwork();

            
            var networkCoverage = new NetworkCoverage("test", true) { Network = network };
            var locations = new[] { new NetworkLocation(network.Branches[0], 0.0),
                                    new NetworkLocation(network.Branches[0], 100.0), 
                                    new NetworkLocation(network.Branches[1], 100.0) };
            networkCoverage.SetLocations(locations);
            networkCoverage.Locations.FixedSize = locations.Length;

            var networkCoverage2 = new NetworkCoverage("test", true) { Network = network };
            networkCoverage2.SetLocations(locations);
            networkCoverage2.Locations.FixedSize = locations.Length;
            

            // set 1000 values using time filters in coverage 1 and 2
            var startTime = new DateTime(2000, 1, 1);
            for (int i = 0; i < 1000;i++ )
            {
                IEnumerable<double> values = new[] { 1.0, 2.0, 3.0 }.Select(d => d * i);
                DateTime currentTime = startTime.AddMinutes(i);
                //set values for coverage 1 using value filter
                networkCoverage.Time.AddValues(new[] { currentTime });
                var timeValueFilter = new VariableValueFilter<DateTime>(networkCoverage.Time, currentTime);
                networkCoverage.SetValues(values,timeValueFilter);

                //set values for coverage 2 using index filter
                networkCoverage2.Time.AddValues(new[] { currentTime });
                var timeIndexFilter = new VariableIndexRangeFilter(networkCoverage2.Time, i);
                networkCoverage2.SetValues(values, timeIndexFilter);

            }
            
            Assert.AreEqual(networkCoverage.Components[0].Values,networkCoverage2.Components[0].Values);
        }
예제 #16
0
        public void MultiRasterBandTest()
        {
            string fileName = rasterDataPath + "4band.tif";

            var functionStore = new GdalFunctionStore {Path = fileName};
            functionStore.Open();

            var grid = (IRegularGridCoverage) functionStore.Functions.First(f => f is IRegularGridCoverage);

            //RasterBands to Components should be one to one. Tif -> 4 bands (values per ARGB channel)
            Assert.AreEqual(4, grid.Components.Count);

            var xFilter = new VariableValueFilter<double>(grid.X, grid.X.Values[9]);
            var yFilter = new VariableValueFilter<double>(grid.Y, grid.Y.Values[9]);

            var c1 = grid.Components[0].GetValues(xFilter, yFilter)[0];
            var c2 = grid.Components[1].GetValues(xFilter, yFilter)[0];
            var c3 = grid.Components[2].GetValues(xFilter, yFilter)[0];
            var c4 = grid.Components[3].GetValues(xFilter, yFilter)[0];

            Assert.AreEqual(255, c1);
            Assert.AreEqual(255, c2);
            Assert.AreEqual(255, c3);
            Assert.AreEqual(255, c4);

            // F = (value)(x,y) components - arguments

            /*
             * F........ grid coverage is a vector function
             * value.... grid contains n band variables (components)
             * x........ grid contains 2 variables for x and y
             * y
             */
            Assert.AreEqual(functionStore.Functions.Count, 7,
                            "store should contain 1 function for grid coverage, variable for 1st grid component and variables for x and y arguments");
        }
예제 #17
0
        public void ConstructorPreconditions()
        {
            var variable = new Variable<int>();
            try
            {
                var t = new VariableValueFilter<int>(variable, new int[] {});
                Assert.Fail("ArgumentOutOfRangeException Should be thrown");
            }
            catch (Exception e)
            {
                Assert.AreEqual(typeof(ArgumentOutOfRangeException), e.GetType());
                Assert.AreEqual("Cannot be empty\r\nParameter name: values", e.Message);
            }

            try
            {
                var t = new VariableValueFilter<double>(variable, new[] { 1.1 });
                Assert.Fail("ArgumentOutOfRangeException Should be thrown");
            }
            catch (Exception e)
            {
                Assert.AreEqual(typeof(ArgumentOutOfRangeException), e.GetType());
                Assert.AreEqual("Invalid value type\r\nParameter name: values", e.Message);
            }
        }