public static Converter <Leaf, SufficientStatistics> DictionaryToLeafMap(Dictionary <string, GaussianStatistics> caseIdToNonMissingValue)
 {
     return(delegate(Leaf leaf)
     {
         string name = leaf.CaseName;
         if (name == null || !caseIdToNonMissingValue.ContainsKey(name))
         {
             return GaussianStatistics.GetMissingInstance();
         }
         else
         {
             return caseIdToNonMissingValue[name];
         }
     });
 }
        //public override Converter<Leaf, SufficientStatistics> CreateTargetSufficientStatisticsMap(Dictionary<string, ISufficientStatistics> caseIdToNonMissingValue)
        //{
        //    return ISufficientStatistics.DictionaryToLeafMap(caseIdToNonMissingValue);
        //}

        public override Converter <Leaf, SufficientStatistics> CreateAlternativeSufficientStatisticsMap(
            Converter <Leaf, SufficientStatistics> predictorDistributionClassFunction,
            Converter <Leaf, SufficientStatistics> targetDistributionClassFunction)
        {
            return(delegate(Leaf leaf)
            {
                SufficientStatistics predStats = predictorDistributionClassFunction(leaf);
                SufficientStatistics targetStats = targetDistributionClassFunction(leaf);


                // bail on missing data.
                if (predStats.IsMissing() || targetStats.IsMissing())
                {
                    return GaussianStatistics.GetMissingInstance();
                }
                else
                {
                    return targetStats;
                }
            });
        }