def METHOD_NAME(coords1: np.ndarray, coords2: np.ndarray,
                     weights: np.ndarray, wrot: float, Nrot: int) -> np.ndarray:
    """Computes the Vina Energy function for two molecular conformations
    Parameters
    ----------
    coords1: np.ndarray
        Molecular coordinates of shape `(N, 3)`
    coords2: np.ndarray
        Molecular coordinates of shape `(M, 3)`
    weights: np.ndarray
        A numpy array of shape `(5,)`. The 5 values are weights for repulsion interaction term,
        hydrophobic interaction term, hydrogen bond interaction term,
        first Gaussian interaction term and second Gaussian interaction term.
    wrot: float
        The scaling factor for nonlinearity
    Nrot: int
        Number of rotatable bonds in this calculation
    Returns
    -------
    np.ndarray
        A scalar value with free energy
    """
    # TODO(rbharath): The autodock vina source computes surface distances
    # which take into account the van der Waals radius of each atom type.
    dists = pairwise_distances(coords1, coords2)
    repulsion = vina_repulsion(dists)
    hydrophobic = vina_hydrophobic(dists)
    hbond = vina_hbond(dists)
    gauss_1 = vina_gaussian_first(dists)
    gauss_2 = vina_gaussian_second(dists)
    # Shape (N, M)
    interactions = weighted_linear_sum(
        weights, np.array([repulsion, hydrophobic, hbond, gauss_1, gauss_2]))
    # Shape (N, M)
    thresholded = cutoff_filter(dists, interactions)
    free_energies = vina_nonlinearity(thresholded, wrot, Nrot)
    return np.sum(free_energies)