def test_solution_tree_derivative_part(self): derivative_theorems = load_theorems() problem_input = {'expression': '\\frac{d(x)}{dx}', 'variables': []} data = {'problemInput': problem_input, 'theorems': derivative_theorems} response = self.client.post(path='/results/solution-tree', data=data, format='json') tree = SolutionTreeMapper.parse(json.loads(response.content)) theorem_names = tree.get_theorem_names() self.assertEquals(response.status_code, status.HTTP_200_OK) self.assertEquals(theorem_names, {RESOLVER_DERIV})
def solution_tree_derivative_case(self, case): print(case['name']) derivative_theorems = load_theorems() data = { 'problem_input': case["problemInput"], 'theorems': derivative_theorems } response = self.client.post(path='/results/solution-tree', data=data, format='json') tree_dict = json.loads(json.loads(response.content)) #broken_nodes = get_solution_tree_broken_nodes(tree_dict) tree = SolutionTreeMapper.parse(json.loads(response.content)) theorem_names = tree.get_theorem_names() # print('Test case: ' + case['name'] + '\n') # print('Resulting theorems: ' + str(theorem_names) + '\n') # f = open(case['name']+'.txt', "w+") # f.write(json.loads(response.content)) self.assertEquals(response.status_code, status.HTTP_200_OK) self.assertEquals(theorem_names, case["theorems"])
from mathlearning.services.result_service import ResultService from mathlearning.utils.logger import Logger from mathlearning.model.expression import Expression from rest_framework.request import Request from django.urls import path from rest_framework.decorators import api_view from rest_framework.response import Response from rest_framework import status import json result_service = ResultService() logger = Logger.getLogger() validateMapper = ValidateMapper() theoremMapper = TheoremMapper() solutionTreeMapper = SolutionTreeMapper() @api_view(['POST']) def solve_derivative(request: Request): if request.method == 'POST': body = json.loads(request.body) expression = Expression(body['expression']) result = result_service.get_derivative_result(expression) logger.info('Returning the following response: {}'.format(result)) return Response(result.to_latex(), status=status.HTTP_200_OK) @api_view(['POST']) def calculate_solution_tree(request: Request): if request.method == 'POST':
import json from rest_framework import status from rest_framework.test import APITestCase from mathlearning.mappers.solution_tree_mapper import SolutionTreeMapper from mathlearning.model.expression import Expression solution_tree_mapper = SolutionTreeMapper() def load_theorems(): with open("test/jsons/theorems.json", 'r') as theorems_file: return json.load(theorems_file) def get_solution_tree_broken_nodes(tree_dict): result = [] for branch in tree_dict['branches']: try: Expression(branch['expression']) result += get_solution_tree_broken_nodes(branch) except: result.append({ 'before': tree_dict['expression'], 'after': branch['expression'], 'theorem': branch['theorem_applied'] }) return result
def test_is_a_result(self): tree = SolutionTreeMapper.parse(json.loads(tree_byte_arr)) self.assertTrue( tree.is_a_result( Expression(exercise.result['expression'], exercise.result['variables'])))
import json import unittest from mathlearning.mappers.solution_tree_mapper import SolutionTreeMapper from mathlearning.model.expression import Expression from test.testutils.solved_exercises import SolvedExercises tree_byte_arr = '' # TODO exercise = SolvedExercises.derivative_e_plus_sin() tree = SolutionTreeMapper.parse(json.loads(tree_byte_arr)) class TestSolutionTree(unittest.TestCase): def test_is_a_result(self): tree = SolutionTreeMapper.parse(json.loads(tree_byte_arr)) self.assertTrue( tree.is_a_result( Expression(exercise.result['expression'], exercise.result['variables']))) def test_is_a_result_steps_are_not_results(self): steps = exercise.get_results_as_expressions() non_result_steps = exercise.get_results_as_expressions()[:len(steps) - 1] for non_result in non_result_steps: step_is_result = tree.is_a_result(non_result) self.assertFalse(step_is_result) if step_is_result: print('Non result step returned is result True: ' + non_result.to_string())