def calculate(): f = request.args.get('f') start_point = request.args.get('start_point') eps = request.args.get('eps') option = request.args.get('option') if start_point is not None: start_point = [float(x) for x in start_point.split()] if eps is not None: eps = float(eps) find_min = True if option == 'max': find_min = False descent = GradientDescent(f, start_point, eps, find_min) length = Diff.length(descent.get_start_point()) diff_by_direction = descent.calculate_diff_by_direction(length) mess = 'not monotonically' if Diff.is_increasing(diff_by_direction): mess = 'monotonically increasing' if Diff.is_decreasing(diff_by_direction): mess = 'monotonically decreasing' res = descent.calculate() report = descent.get_report() return render_template('index.html', descent=descent, point=' '.join(map(str, descent.get_start_point())), length=length, diff_by_direction=diff_by_direction, mess=mess, report=report, res='; '.join(map(str, res)))