def completion_acd(edm, X0, W=None, tol=1e-6, sweeps=3):
    """ Complete an denoise EDM using alternating decent. 

    The idea here is to simply run reconstruct_acd for a few iterations, 
    yieding a position estimate, which can in turn be used 
    to get a completed and denoised edm. 

    :param edm: noisy matrix (NxN) 
    :param X0: starting points (Nxd) 
    :param W: optional weight matrix. 
    :param tol: Stopping criterion of iterative algorithm.
    :param sweeps: Maximum number of sweeps. 
    """ 
    from .algorithms import reconstruct_acd
    Xhat, costs = reconstruct_acd(edm, X0, W, tol=tol, sweeps=sweeps)
    return get_edm(Xhat)