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"])
Пример #3
0
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

Пример #5
0
 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'])))
Пример #6
0
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())