private static string[] GetDetails(Classifier classifier, List <FeatureVector> vectors, TextIdMapper classToClassId, TextIdMapper featureToFeatureId)
        {
            TBLClassifier tblClassifier = (TBLClassifier)classifier;
            var           systemClasses = new int[vectors.Count];
            var           details       = new string[vectors.Count];

            for (int v_i = 0; v_i < vectors.Count; v_i++)
            {
                StringBuilder sb           = new StringBuilder();
                int           currentClass = tblClassifier.DefaultClass;
                foreach (TBLClassifier.Transformation t in tblClassifier.Transformations)
                {
                    int newClass = tblClassifier.Transform(currentClass, t, vectors[v_i]);
                    if (newClass == currentClass)
                    {
                        continue;
                    }

                    string featName   = featureToFeatureId[t.FeatureId];
                    string from_class = classToClassId[t.FromClass];
                    string to_class   = classToClassId[t.ToClass];
                    sb.AppendFormat($" {featName} {from_class} {to_class}");
                    currentClass = newClass;
                }
                systemClasses[v_i] = currentClass;
                details[v_i]       = sb.ToString();
            }
            return(details);
        }
        // Methods

        public override int ExecuteCommand()
        {
            FeatureVectorFile vectorFile = new FeatureVectorFile(path: vector_data, noOfHeaderColumns: 1, featureDelimiter: ':', isSortRequired: false);
            int gold_i = 0;

            TBLClassifier classifier = null;

            Program.TrainModel(vectorFile, model_file, classifierFactory: (vectors, classToClassId, featureToFeatureId) =>
            {
                return(classifier = new TBLClassifier(vectors, classToClassId.Count, min_gain, gold_i));
            }
                               );

            return(classifier.Transformations.Count);
        }
        // Methods

        public override double ExecuteCommand()
        {
            int gold_i = 0;

            FeatureVectorFile vectorFile = new FeatureVectorFile(path: vector_file, noOfHeaderColumns: 1, featureDelimiter: ':', isSortRequired: false);

            var accuracy = Program.ReportOnModel(vectorFile, sys_output
                                                 , classifierFactory: (classToClassId, featureToFeatureId) =>
            {
                return(TBLClassifier.LoadModel(model_file, classToClassId, featureToFeatureId, N, gold_i));
            }
                                                 , getDetailsFunc: GetDetails
                                                 );

            return(accuracy);
        }