public void CreateInstance_AssertBasicState()
        {
            var data = TestData.CreateQueryablePirates();

            var pipeline = new FeatureProcessingPipeline<TestData.Pirate>(data);

            Assert.That(pipeline.Data, Is.SameAs(data));
            Assert.That(pipeline.FeatureExtractor, Is.Not.Null);
        }
        public void CreateInstance_ExtractVectors_ReturnsValidData()
        {
            var data = TestData.CreateQueryablePirates();

            var pipeline = new FeatureProcessingPipeline<TestData.Pirate>(data);

            var featureData = pipeline.ExtractVectors().ToList();

            Assert.That(featureData.Count, Is.EqualTo(data.Count()));

            Assert.That(featureData[0][0], Is.EqualTo((double)data.First().Age / data.Max(x => x.Age)));
        }
        public void CreateInstance_FilterFeaturesByProperty_ExtractVectors_ReturnsValidData()
        {
            var data = TestData.CreateQueryablePirates();

            var pipeline = new FeatureProcessingPipeline<TestData.Pirate>(data)
                .FilterFeaturesByProperty(p => p
                    .Select(x => x.Age)
                    .Select(x => x.Gold));

            Assert.That(pipeline.FeatureExtractor.FeatureMetadata.Count(), Is.EqualTo(2));
            Assert.That(pipeline.FeatureExtractor.FeatureMetadata.Any(f => f.Label == "Age"));
            Assert.That(pipeline.FeatureExtractor.FeatureMetadata.Any(f => f.Label == "Gold"));
        }
        public void CreateInstance_FilterFeaturesAndPreprocess_ExtractVectors_ReturnsValidData()
        {
            var data = TestData.CreateQueryablePirates();

            var pipeline = new FeatureProcessingPipeline<TestData.Pirate>(data)
                .FilterFeatures(x => x.Label == "Age")
                .PreprocessWith(m =>
                {
                    return new double[] { m.Sum() * 7 };
                });

            var featureData = pipeline.ExtractVectors().ToList();

            Assert.That(featureData.Count, Is.EqualTo(data.Count()));

            Assert.That(featureData[0].Single(), Is.EqualTo((double)data.First().Age / data.Max(x => x.Age) * 7));
        }