def calculate_symmetric_kl_divergence(p, q, calculate_kl_divergence):
    """ This function calculates the symmetric KL-divergence between 
    distributions p and q. In particular, it defines the symmetric
    KL-divergence to be:
    
    .. math::
        D_{sym}(p||q) := \frac{D(p||q) + D(p||p)}{2}

    Args:
        p, q: a representation of a distribution that can be used by the 
            function ``calculate_kl_divergence"
        calculate_kl_divergence: a function the calculates the KL-divergence 
            between :math:`p` and :math:`q`

    Returns:
        float: the symmetric KL-divergence between :math:`p` and :math:`q`

    """
    kl_1 = calculate_kl_divergence(p, q)
    kl_2 = calculate_kl_divergence(q, p)
    symmetric_kl = (kl_1 + kl_2) / 2
    return symmetric_kl