public RankingEvaluator(IHostEnvironment env, RankingEvaluatorOptions options)
            : base(env, LoadName)
        {
            // REVIEW: What kind of checking should be applied to labelGains?
            // add the setter to utils here
            if (options.DcgTruncationLevel <= 0)
            {
                throw Host.ExceptUserArg(nameof(options.DcgTruncationLevel), "DCG Truncation Level must be greater than 0");
            }
            Host.CheckUserArg(options.LabelGains != null, nameof(options.LabelGains), "Label gains cannot be null");

            _truncationLevel = options.DcgTruncationLevel;
            _groupSummary    = options.OutputGroupSummary;

            var labelGains = new List <Double>();

            string[] gains = options.LabelGains.Split(',');
            for (int i = 0; i < gains.Length; i++)
            {
                Double gain;
                if (!Double.TryParse(gains[i], out gain))
                {
                    throw Host.ExceptUserArg(nameof(options.LabelGains), "Label Gains must be of floating or integral type");
                }
                labelGains.Add(gain);
            }
            _labelGains = labelGains.ToArray();
        }
        public RankingMamlEvaluator(IHostEnvironment env, Arguments args)
            : base(args, env, AnnotationUtils.Const.ScoreColumnKind.Ranking, "RankerMamlEvaluator")
        {
            Host.CheckValue(args, nameof(args));
            Utils.CheckOptionalUserDirectory(args.GroupSummaryFilename, nameof(args.GroupSummaryFilename));

            var evalOpts = new RankingEvaluatorOptions();

            evalOpts.DcgTruncationLevel = args.DcgTruncationLevel;
            evalOpts.LabelGains         = args.LabelGains;
            evalOpts.OutputGroupSummary = !string.IsNullOrEmpty(args.GroupSummaryFilename);

            _evaluator            = new RankingEvaluator(Host, evalOpts);
            _groupSummaryFilename = args.GroupSummaryFilename;
            _groupIdCol           = args.GroupIdColumn;
        }