def train_and_save_svr_dynamics(train_file_base_name, svr_output_path,
                                delta_t, n, m, epsilons, feature_names, target_names, xtra_names,
                                kernel_type='LINEAR',
                                kernel_params = {}):
    # Read data from disk
    print 'Reading training file:', train_file_base_name
    (train_X, train_Y) = dynamics_learning.read_dynamics_learning_example_files(train_file_base_name)
    # print 'train_X:\n',train_X
    # print 'train_Y:\n',train_Y
    print 'len(train_X)',len(train_X)
    print 'len(train_Y)',len(train_Y)
    # Build model class
    if _LEARN_SVR_ERR_DYNAMICS:
        svr_dynamics = SVRWithNaiveLinearPushDynamics(delta_t, n, m, epsilons=epsilons)
        svr_dynamics.learn_model(train_X, train_Y, kernel_params)
    elif _LEARN_GP_DYNAMICS:
        svr_dynamics = GPPushDynamics(delta_t, n, m,
                                      feature_names = feature_names,
                                      target_names = target_names,
                                      xtra_names = xtra_names,
                                      mean_fnc = kernel_type.lower())
        svr_dynamics.learn_model(train_X, train_Y)
    else:
        svr_dynamics = SVRPushDynamics(delta_t, n, m, epsilons=epsilons,
                                       feature_names = feature_names,
                                       target_names = target_names,
                                       xtra_names = xtra_names,
                                       kernel_type = kernel_type)
        # Train and save model
        svr_dynamics.learn_model(train_X, train_Y, kernel_params)

    print 'Saving model to:', svr_output_path
    svr_dynamics.save_models(svr_output_path)
    return svr_dynamics
def test_svr_offline(model_param_file_name, test_data_example_base_name):
    delta_t = 1./9.
    n = 6
    m = 3
    if _LEARN_SVR_ERR_DYNAMICS:
        svr_dynamics = SVRWithNaiveLinearPushDynamics(delta_t, n, m, param_file_name = model_param_file_name)
    elif _LEARN_GP_DYNAMICS:
        svr_dynamics = GPPushDynamics(param_file_name = model_param_file_name)
    else:
        svr_dynamics = SVRPushDynamics(param_file_name = model_param_file_name)
    (test_X, test_Y) = dynamics_learning.read_dynamics_learning_example_files(test_data_example_base_name)
    # Run batch testing
    (Y_hat, Y_gt, _) = svr_dynamics.test_batch_data(test_X, test_Y)
    return (Y_hat, Y_gt)