import numpy as np


def log_out(out_str, f_out):
    f_out.write(out_str + '\n')
    f_out.flush()
    print(out_str)


def asymmetricKL(P, Q):
    return np.sum(P * np.log((P + 1e-12) / (Q + 1e-12) + 1e-12), axis=1)  # Calculate the kl-divergence between P and Q


def comput_similarity(a, b):  # (f,) (f,)
    a = a / np.sqrt(np.sum(np.square(a)))
    b = b / np.sqrt(np.sum(np.square(b)))
    return np.sum(a * b)


def distance(p1, p2):
    return np.sqrt(np.sum((p1 - p2) ** 2))