/**
         * <summary> The predict method takes an Instance as an input. First it gets the size of prior distribution and loops this size times.
         * Then it gets the possible class labels and and calculates metric value. At the end, it returns the class which has the
         * maximum value of metric.</summary>
         *
         * <param name="instance">{@link Instance} to predict.</param>
         * <returns>The class which has the maximum value of metric.</returns>
         */
        public override string Predict(Instance.Instance instance)
        {
            string predictedClass;
            var    maxMetric = double.MinValue;
            int    size;

            if (instance is CompositeInstance compositeInstance)
            {
                predictedClass = compositeInstance.GetPossibleClassLabels()[0];
                size           = compositeInstance.GetPossibleClassLabels().Count;
            }
            else
            {
                predictedClass = priorDistribution.GetMaxItem();
                size           = priorDistribution.Count;
            }
            for (var i = 0; i < size; i++)
            {
                string ci;
                if (instance is CompositeInstance compositeInstance1)
                {
                    ci = compositeInstance1.GetPossibleClassLabels()[i];
                }
                else
                {
                    ci = priorDistribution.GetItem(i);
                }
                if (priorDistribution.ContainsItem(ci))
                {
                    var metric = CalculateMetric(instance, ci);
                    if (metric > maxMetric)
                    {
                        maxMetric      = metric;
                        predictedClass = ci;
                    }
                }
            }

            return(predictedClass);
        }
 public void TestGetItem()
 {
     Assert.AreEqual("item1", smallDistribution.GetItem(0));
     Assert.AreEqual("item2", smallDistribution.GetItem(1));
     Assert.AreEqual("item3", smallDistribution.GetItem(2));
 }