public void FeatureMetadata_FilterOnlyX_ExpectSingleItem()
        {
            var ext = new ObjectFeatureExtractorFactory();
            var fe = ext.CreateFeatureExtractor<FeatureObject>();
            var tfe = new TransformingFeatureExtractor<FeatureObject, double>(fe, null, f => f.Label == "x");

            var featurex = tfe.FeatureMetadata.Single();

            Assert.That(featurex.DataType == System.TypeCode.Int32);
            Assert.That(featurex.Label == "x");
        }
        public void FeatureMetadata_AggregateInputsInto1D_ExpectSingleItem()
        {
            var ext = new ObjectFeatureExtractorFactory();
            var fe = ext.CreateFeatureExtractor<FeatureObject>();
            var tfe = new TransformingFeatureExtractor<FeatureObject, double>(fe, v => new double[] { v[0] * v[1] * v[2] });

            tfe.NormaliseUsing(new FeatureObject[] { new FeatureObject() { x = 10, y = 10, z = 10 } });

            var trasnformedFeature = tfe.FeatureMetadata.Single();

            Assert.That(trasnformedFeature.DataType == System.TypeCode.Double);
            Assert.That(trasnformedFeature.Index == 0);
            Assert.That(trasnformedFeature.Label == "Transform 1");

            var vector = tfe.ExtractVector(new FeatureObject()
            {
                x = 3,
                y = 5,
                z = 7
            });

            Assert.That(vector.First(), Is.EqualTo((3d / 10d) * (5d / 10d) * (7d / 10d)));
        }
        public void CreateFeatureExtractor_SimpleObject()
        {
            var fo = new ObjectFeatureExtractorFactory();
            var fe = fo.CreateFeatureExtractorFunc<FeatureObject>();

            var data = fe(new FeatureObject()
            {
                Height = 105.23,
                Quantity = 16,
                Width = 123.6f,
                Cost = 12,
                Category = "a",
                Amount = 4323.31M
            });

            Assert.That(data.Length, Is.EqualTo(5));

            Assert.That(data[0], Is.EqualTo(12d));
            Assert.That(data[1], Is.EqualTo(105.23d));
            Assert.That(data[2], Is.EqualTo(16d));
            Assert.That(data[2], Is.EqualTo(16d));
            Assert.That(Math.Round(data[3], 1), Is.EqualTo(123.6d));
            Assert.That(data[4], Is.EqualTo(0.5d));
        }