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)
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')
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))
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])