def parse_input_vars(self, text): """ Parsea las variables de entrada. Devuelve un VariableCollection """ pattern = re.compile(r'input: \((\w+)\) \((\w+)\) \((.*)\)') m = pattern.search(text) d = {} while m: name = m.group(1) value_raw = m.group(2) func = self.parse_function(m.group(3)) value = ValueDefinition(value_raw, func) if not name in d: d[name] = [] d[name].append(value) m = pattern.search(text, m.end()) variables = VariableCollection() for name, values in d.items(): variables.append(VariableDefinition(name, values)) return variables
class EvaluatorTests(unittest.TestCase): def setUp(self): f1 = TriangularFunction( Point(0, 0), Point(10, 0), Point(5, 1) ) f2 = TriangularFunction( Point(5, 0), Point(15, 0), Point(10, 1) ) agua_values = [ ValueDefinition('Fria', f1), ValueDefinition('Tibia', f2) ] propina_values = [ ValueDefinition('Poca', f1), ValueDefinition('Mucha', f2) ] self.variables = VariableCollection( ( VariableDefinition('Agua', agua_values), VariableDefinition('Propina', propina_values) ) ) self.variables.add_input('Agua', 2.5) self.variables.add_input('Propina', 7.5) self.evaluator = RuleEvaluator() def test_one_var(self): result = self.evaluator.evaluate(self.variables, 'Agua = Fria') self.assertEqual(result, 0.5) def test_one_var_(self): result = self.evaluator.evaluate(self.variables, 'Agua = Tibia') self.assertEqual(result, 0) def test_OR(self): result = self.evaluator.evaluate(self.variables, 'Agua = Fria or Agua = Tibia') self.assertEqual(result, 0.5) def test_AND(self): result = self.evaluator.evaluate(self.variables, 'Agua = Fria and Agua = Tibia') self.assertEqual(result, 0) def test_NOT(self): result = self.evaluator.evaluate(self.variables, 'not(Agua = Tibia)') self.assertEqual(result, 1)
def setUp(self): f1 = TriangularFunction( Point(0, 0), Point(10, 0), Point(5, 1) ) f2 = TriangularFunction( Point(5, 0), Point(15, 0), Point(10, 1) ) agua_values = [ ValueDefinition('Fria', f1), ValueDefinition('Tibia', f2) ] propina_values = [ ValueDefinition('Poca', f1), ValueDefinition('Mucha', f2) ] self.variables = VariableCollection( ( VariableDefinition('Agua', agua_values), VariableDefinition('Propina', propina_values) ) ) self.variables.add_input('Agua', 2.5) self.variables.add_input('Propina', 7.5) self.evaluator = RuleEvaluator()