public SelectionResult Select(Dictionary <string, string> jsonModelsToIds, List <int> sequence) { List <string> errors = new List <string>(); List <IHsmModelHolder> models = new List <IHsmModelHolder>(); foreach (KeyValuePair <string, string> entry in jsonModelsToIds) { IHsmModel model = _jsonModelFactory.CreateModel(entry.Value); IValidator validator = _validatorFactory.CreateModelValidator(model); validator.Validate(); if (validator.HasErrors()) { errors.AddRange(validator.GetErrors()); continue; } else { models.Add(new HsmModelHolder(entry.Key, model)); } } if (errors.Count > 0) { return(SelectionResult.Failure(errors)); } IModelSelector modelSelector = _modelSelectorFactory.CreateModelSelector(_modelSelectorType, _selectionCriterionType); IHsmModelHolder selectedModel = modelSelector.Select(sequence, models); return(SelectionResult.Success(selectedModel.Name)); }
public GenerationResult Generate(String jsonModel, int length) { IHsmModel model = _jsonModelFactory.CreateModel(jsonModel); IValidator validator = _validatorFactory.CreateModelValidator(model); validator.Validate(); if (validator.HasErrors()) { GenerationResult.Failure(validator.GetErrors()); } IGenerator generator = _generatorFactory.CreateModelGenerator(model, _pseudoRandomNumberGenerator); return(GenerationResult.Success(generator.Generate(length))); }
public EvaluationResult Evaluate(string jsonModel, List <int> sequence) { IHsmModel model = _jsonModelFactory.CreateModel(jsonModel); IValidator validator = _validatorFactory.CreateModelValidator(model); validator.Validate(); if (validator.HasErrors()) { return(EvaluationResult.Failure(validator.GetErrors())); } IProbabilityCalculator probabilityCalculator = _probabilityCalculatorFactory.CreateProbabilityCalculator(model, sequence); return(EvaluationResult.Success(probabilityCalculator.Calculate())); }
public IValidator CreateModelValidator(IHsmModel model) { switch (model.Type) { case ModelType.HsmFergusonModel: { return(new HsmFergusonModelValidator((HsmFergusonModel)model)); } case ModelType.HsmQpModel: { return(new HsmQpModelValidator((HsmQpModel)model)); } default: { throw new NotImplementedException("ModelType is not supported"); } } }
public IProbabilityCalculator CreateProbabilityCalculator(IHsmModel model, List <int> sequence) { switch (model.Type) { case ModelType.HsmFergusonModel: { return(new HsmFergusonProbabilityCalculator((HsmFergusonModel)model, sequence)); } case ModelType.HsmQpModel: { return(new HsmQpProbabilityCalculator((HsmQpModel)model, sequence)); } default: { throw new NotImplementedException("ModelType is not supported"); } } }
public IGenerator CreateModelGenerator(IHsmModel model, IPseudoRandomNumberGenerator pRnGenerator) { switch (model.Type) { case ModelType.HsmFergusonModel: { return(new HsmFergusonModelGenerator((HsmFergusonModel)model, pRnGenerator)); } case ModelType.HsmQpModel: { return(new HsmQpModelGenerator((HsmQpModel)model, pRnGenerator)); } default: { throw new NotImplementedException("ModelType is not supported"); } } }
public HsmModelHolder(string name, IHsmModel model) { this.Name = name; this.Model = model; }