def run(self):
        if not self.task.is_valid():
            return

        table = Table(self.task).create_table()
        sigma_table = PreSolver(table).get_table()
        solver = Solver(sigma_table, self.task)
        solver.calculate()
        solution = solver.get_solution()
        self.solution.set_solution_data(table, sigma_table, solution)
Exemplo n.º 2
0
def main(cfg):
    net = importlib.import_module("model.{}".format(cfg.model)).Net
    print(json.dumps(vars(cfg), indent=4, sort_keys=True))
    solver = Solver(net, cfg)
    solver.calculate()
    print('Done')
Exemplo n.º 3
0
    Allowed operators: +-*/()
    Example: "3*(5-7)"
    Enter q to quit
    """
    print(output_str)
    data_last = persistence.get_last_calculations()  # Get last calculation from file
    if data_last is not None:  # Only show it if available
        last_calculation, last_result = data_last
        print("Last calculation: %s = %s" % (last_calculation, last_result))
    else:
        last_result = ""
    while True:
        user_input = input('calculation: ')  # Get user input
        pattern = r"^[+\-*\/]{1}"  # regular expressions for leading operator
        match = re.search(pattern, user_input)  # search in user input
        if match:  # if leading operator is found add last result in front of input
            user_input = str(last_result) + user_input
        if user_input == "q":  # close program
            del persistence
            print("Bye")
            sys.exit()
        result = solver.calculate(user_input)  # solve the equation
        if result == 'wrong format':  # solver didn't understand the equation
            print("                  Wrong input format")
        elif result == 'zero division':
            print("                  Division by zero!")
        else:  #
            print("                  Result: " + str(result))
            last_result = result
            persistence.add_calculation(user_input, str(result))
Exemplo n.º 4
0
class TestSolver(unittest.TestCase):
    def setUp(
            self
    ):  # настройка параметров тестов, запускается перед каждым тестом
        self.test_table = []
        test_table = self.test_table
        test_table.append(Sigma([2, 3], 1, 2))
        test_table.append(Sigma([5, 5], 2, 4))
        test_table.append(Sigma([9, 7], 3, 7))
        test_table.append(Sigma([6, 8], 4, 8))
        test_table.append(Sigma([10, 10], 4, 11))
        test_table.append(Sigma([8, 12], 5, 11))
        test_table.append(Sigma([11, 11], 5, 11))
        self.test_task = Task()
        self.test_task.set_task_data(
            5, 11, [[2, 3, 4, 1, 2], [3, 2, 2, 3, 4], [2, 2, 3, 4, 3]])
        self.solver = Solver(test_table, self.test_task)

    def test_get_less_or_equal_record_6_8(self):
        u = [6, 8]
        ksi = 4
        eta = 8
        answer = self.solver.get_less_or_equal_record(u, ksi, eta)
        correct_answer = Sigma([6, 8], 4, 8)
        self.assertEqual(answer.u, correct_answer.u)
        self.assertEqual(answer.ksi, correct_answer.ksi)
        self.assertEqual(answer.eta, correct_answer.eta)

    def test_get_less_or_equal_record_10_10(self):
        u = [10, 10]
        ksi = 5
        eta = 12
        answer = self.solver.get_less_or_equal_record(u, ksi, eta)
        correct_answer = Sigma(u, 4, 11)
        self.assertEqual(answer.u, correct_answer.u)
        self.assertEqual(answer.ksi, correct_answer.ksi)
        self.assertEqual(answer.eta, correct_answer.eta)

    def test_set_x_ksi_to_one(self):
        for x in range(self.test_task.dimension):
            with self.subTest(x=x):
                correct_answer = []
                self.setUp()
                for i in range(self.test_task.dimension):
                    correct_answer.append(0)  # забили нулями
                correct_answer[x] = 1  # установили нужный х в единицу
                self.solver.set_x_ksi_to_one(x + 1)
                self.assertEqual(self.solver.get_solution(), correct_answer)

    def test_change_u_vector(self):
        self.solver.u = [8, 12]
        self.solver.ksi = 5
        self.solver.eta = 11
        self.solver.change_u_vector()
        self.assertEqual(self.solver.u, [6, 8])

        self.solver.change_ksi_and_eta()
        self.solver.change_u_vector()
        self.assertEqual(self.solver.u, [5, 5])

    def test_calculate(self):
        self.solver.calculate()
        self.assertEqual(self.solver.get_solution(), [1, 1, 0, 1, 1])