def test_interval(client): tol = 1e-3 I_integral_ideal = [0.77272105923056, 46.639683900497, 6.80452330242669] I_terminal_ideal = 8.99891199975 phase_errors_ideal = [34784.1137839443, 5.62296778644782e-07, 0.0] controller_variance_ideal = [4.0, 0.0, 0.0] terminal_error = 1e-3 parameters = { 'u1_0': Interval.from_value(5), 'u1_1': Interval.from_value(6), 'u1_2': Interval.from_value(7), 'u2_0': Interval.from_value(2), 'u2_1': Interval.from_value(2), 'u2_2': Interval.from_value(2), 'u2_3': Interval.from_value(2), 'a': Interval.from_value(5) } url = '/process_request?field=sim&scope=interval' for k, v in parameters.items(): url += '&{0}={1}'.format(k, json.dumps(v)) response = client.get(url) error = Interval.from_dict(json.loads(response.data)).middle_point assert response.status_code == 200 assert math.fabs(error - (sum(I_integral_ideal) + I_terminal_ideal + terminal_error + sum(phase_errors_ideal) + sum(controller_variance_ideal))) < tol
def test_interval(): tol = 1e-3 I_integral_ideal = [0.77272105923056, 46.639683900497, 6.80452330242669] I_terminal_ideal = 8.99891199975 phase_errors_ideal = [34784.1137839443, 5.62296778644782e-07, 0.0] controller_variance_ideal = [4.0, 0.0, 0.0] terminal_error = 1e-3 parameters = { 'u1_0': Interval.from_value(5), 'u1_1': Interval.from_value(6), 'u1_2': Interval.from_value(7), 'u2_0': Interval.from_value(2), 'u2_1': Interval.from_value(2), 'u2_2': Interval.from_value(2), 'u2_3': Interval.from_value(2), 'a': Interval.from_value(5) } error = core.request('sim', parameters).middle_point assert math.fabs(error - (sum(I_integral_ideal) + I_terminal_ideal + terminal_error + sum(phase_errors_ideal) + sum(controller_variance_ideal))) < tol
def test_interval_f(client): data = { 'x': Interval(1, 2), 'y': Interval(2, 3), 'z': Interval(3, 4) } url = '/process_request?field=f&scope=interval' for k, v in data.items(): url += '&{0}={1}'.format(k, json.dumps(v)) response = client.get(url) output = Interval.from_dict(json.loads(response.data)) assert response.status_code == 200 assert output == Interval(36.0, 70.0)
def convert(e, points=np.linspace(0, 1, 11)): coeffs = dict([(kvp['key'], Interval.from_dict(kvp['value'])) for kvp in e['IntervalVector']['elements']]) u1 = lambda t: coeffs['a1'] + coeffs['b1'] * t + coeffs['c1'] * t * t u2 = lambda t: coeffs['a2'] + coeffs['b2'] * t + coeffs['c2'] * t * t u3 = lambda t: coeffs['a3'] + coeffs['b3'] * t + coeffs['c3'] * t * t u = {'u1': u1, 'u2': u2, 'u3': u3} new_coeffs = [] for i, p in enumerate(points): for u_name, u_func in u.items(): new_coeffs.append({'key': '{0}_{1}'.format(u_name, i), 'value': u_func(p)}) new_e = e.copy() new_e['IntervalVector']['elements'] = new_coeffs return new_e
def process_request(): args = json.loads(json.dumps(request.args)) field = args.pop('field') if field == 'target' or field == 'f' or field == 'sim' or field == 'df_grad': scope = args.pop('scope', 'real') if scope == 'interval': for k in args.keys(): args[k] = Interval.from_json(args[k]) elif scope == 'real': for k in args.keys(): args[k] = float(args[k]) else: raise Exception('Unsupported scope: {}'.format(scope)) return json.dumps(app.core.request(field, args)) elif field == 'sim_out': json_file = args['json_file'] save_loc = args['save_loc'] return json.dumps(app.core.request(field, {'json_file': json_file, 'save_loc': save_loc}))
def test_interval_df(client): data = { 'x': Interval(3, 4), 'y': Interval(-2, 1), 'z': Interval.from_value(11) } url = '/process_request?field=df_grad&scope=interval' for k, v in data.items(): url += '&{0}={1}'.format(k, json.dumps(v)) response = client.get(url) output = list(map(Interval.from_dict, json.loads(response.data))) assert response.status_code == 200 assert output[0] == Interval(6, 8) assert output[1] == Interval(-8, 4) assert output[2] == Interval.from_value(66.0)
def test_interval_gradient(): grad = core.request('df_grad', {'z': Interval.from_value(11), 'x': Interval(3, 4), 'y': Interval(-2, 1)}) assert almost_equal_interval(grad[0], Interval(6, 8)) assert almost_equal_interval(grad[1], Interval(-8, 4)) assert almost_equal_interval(grad[2], Interval.from_value(66.0))
def test_interval_derivatives(): assert almost_equal_interval(core.request('df_x', {'x': Interval(3, 4), 'y': Interval.from_value(2), 'z': Interval.from_value(3)}), Interval(6, 8)) assert almost_equal_interval(core.request('df_y', {'x': Interval.from_value(1), 'y': Interval(-2, 1), 'z': Interval.from_value(3)}), Interval(-8, 4)) assert almost_equal_interval(core.request('df_z', {'x': Interval.from_value(1), 'y': Interval.from_value(2), 'z': Interval.from_value(11)}), Interval.from_value(66.0))
def test_interval_calculation(): assert almost_equal_interval(core.request('f', {'x': Interval(1, 2), 'y': Interval(2, 3), 'z': Interval(3, 4)}), Interval(36.0, 70.0))
def convert_interval_vector(dict): v = {} for kvp in dict['IntervalVector']['elements']: v[kvp['key']] = Interval.from_dict(kvp['value']) return v