def compute_attack()

in isoexp/main_attack_one_user.py [0:0]


def compute_attack(alg, a_star, x_star, slack=10 **-10):
    d = model.n_features
    func = lambda delta: np.linalg.norm(delta)/2
    theta_a_star = alg.thetas_hat[a_star]
    P_a_star = sqrtm(alg.inv_design_matrices[a_star])
    betas = alg.alpha()
    constraints_list = []
    for a in range(len(alg.thetas_hat)):
        if a != a_star:
            theta = alg.thetas_hat[a]
            P = sqrtm(alg.inv_design_matrices[a])
            temp_constraint = lambda delta, P=P, P_a_star=P_a_star, theta=theta, theta_a_star=theta_a_star, beta=betas[a], beta_a_star=betas[a_star]: \
                -((theta - theta_a_star).dot((x_star + delta)) + beta * np.linalg.norm(P.dot((x_star + delta)))
                  - beta_a_star * np.linalg.norm(P_a_star.dot((x_star + delta))) + slack)
            temp_cons = {'type': 'ineq', 'fun': temp_constraint}
            constraints_list.append(temp_cons)
    cons = tuple(constraints_list)
    res = minimize(func, -x_star, method='SLSQP', constraints=cons)
    # print(res.message)
    try:
        epsilon = res.x
    except:
        epsilon = np.zeros((d,))
    if epsilon is None:
        return np.zeros((d,))
    return epsilon