@@ -424,6 +424,97 @@ def test_input_values_setter(self) -> None:
424424 ),
425425 )
426426
427+ def test_input_values (self ) -> None :
428+ """Test the engine.input_values."""
429+ engine = fl .Engine ("Test" )
430+ np .testing .assert_equal (fl .array ([]), engine .input_values )
431+
432+ engine = fl .Engine ("Test" , input_variables = [fl .InputVariable ("A" )])
433+ engine .input_variable (0 ).value = 0.6
434+ np .testing .assert_equal (fl .array ([[0.6 ]]), engine .input_values )
435+
436+ engine .input_variable (0 ).value = fl .array ([0.6 , 0.7 ])
437+ np .testing .assert_equal (fl .array ([[0.6 ], [0.7 ]]), engine .input_values )
438+
439+ engine = fl .Engine ("Test" , input_variables = [fl .InputVariable ("A" ), fl .InputVariable ("B" )])
440+ engine .input_variable (0 ).value = 0.6
441+ engine .input_variable (1 ).value = 0.2
442+ np .testing .assert_equal (fl .array ([[0.6 , 0.2 ]]), engine .input_values )
443+
444+ engine .input_variable (0 ).value = fl .array ([0.6 , 0.7 ])
445+ engine .input_variable (1 ).value = fl .array ([0.2 , 0.3 ])
446+ np .testing .assert_equal (fl .array ([[0.6 , 0.2 ], [0.7 , 0.3 ]]), engine .input_values )
447+
448+ def test_output_values (self ) -> None :
449+ """Test the engine.output_values."""
450+ engine = fl .Engine ("Test" )
451+ np .testing .assert_equal (fl .array ([]), engine .output_values )
452+
453+ engine = fl .Engine ("Test" , output_variables = [fl .OutputVariable ("A" )])
454+ engine .output_variable (0 ).value = 0.6
455+ np .testing .assert_equal (fl .array ([[0.6 ]]), engine .output_values )
456+
457+ engine .output_variable (0 ).value = fl .array ([0.6 , 0.7 ])
458+ np .testing .assert_equal (fl .array ([[0.6 ], [0.7 ]]), engine .output_values )
459+
460+ engine = fl .Engine (
461+ "Test" , output_variables = [fl .OutputVariable ("A" ), fl .OutputVariable ("B" )]
462+ )
463+ engine .output_variable (0 ).value = 0.6
464+ engine .output_variable (1 ).value = 0.2
465+ np .testing .assert_equal (fl .array ([[0.6 , 0.2 ]]), engine .output_values )
466+
467+ engine .output_variable (0 ).value = fl .array ([0.6 , 0.7 ])
468+ engine .output_variable (1 ).value = fl .array ([0.2 , 0.3 ])
469+ np .testing .assert_equal (fl .array ([[0.6 , 0.2 ], [0.7 , 0.3 ]]), engine .output_values )
470+
471+ def test_input_values_manual_bug (self ) -> None :
472+ """Test the bug raised in https://github.com/fuzzylite/pyfuzzylite/issues/75."""
473+ fll = """\
474+ Engine: ObstacleAvoidance
475+ InputVariable: obstacle
476+ enabled: true
477+ range: 0.000 1.000
478+ lock-range: false
479+ term: left Ramp 1.000 0.000
480+ term: right Ramp 0.000 1.000
481+ InputVariable: obstacle2
482+ enabled: true
483+ range: 0.000 1.000
484+ lock-range: false
485+ term: left Ramp 1.000 0.000
486+ term: right Ramp 0.000 1.000
487+ OutputVariable: tsSteer
488+ enabled: true
489+ range: 0.000 1.000
490+ lock-range: false
491+ aggregation: Maximum
492+ defuzzifier: WeightedAverage
493+ default: nan
494+ lock-previous: false
495+ term: right Linear 1 1 0
496+ term: left Linear 0 1 1
497+ RuleBlock: takagiSugeno
498+ enabled: true
499+ conjunction: Minimum
500+ disjunction: none
501+ implication: none
502+ activation: General
503+ rule: if obstacle is left and obstacle2 is left then tsSteer is right
504+ rule: if obstacle is left and obstacle2 is right then tsSteer is right"""
505+ engine = fl .FllImporter ().from_string (fll )
506+ engine .input_variable (0 ).value = 0.2
507+ engine .input_variable (1 ).value = 0.6
508+ engine .process ()
509+ np .testing .assert_allclose (0.8 , engine .output_values )
510+ np .testing .assert_allclose (fl .array ([[0.2 , 0.6 , 0.8 ]]), engine .values )
511+
512+ engine .input_variable (0 ).value = fl .array ([0.2 , 0.2 ])
513+ engine .input_variable (1 ).value = fl .array ([0.6 , 0.6 ])
514+ engine .process ()
515+ np .testing .assert_allclose (fl .array ([[0.8 ], [0.8 ]]), engine .output_values )
516+ np .testing .assert_allclose (fl .array ([[0.2 , 0.6 , 0.8 ], [0.2 , 0.6 , 0.8 ]]), engine .values )
517+
427518 def test_repr (self ) -> None :
428519 """Tests repr."""
429520 code = fl .repr (SimpleDimmer ().engine )
0 commit comments