def METHOD_NAME(self, params, residual_global):
    """Computes the euclidean gradient
    Args:
        params (Iterator): An iterator containing the manifold point at which
        the cost needs to be evaluated.
        residual_global (csr_matrix): Residual matrix.
    """
    U = params[0]
    B = params[1]
    V = params[2]
    residual_global_csr = csr_matrix(
        (residual_global, self.Y.indices, self.Y.indptr),
        shape=self.shape,
    )
    gradU = (
        np.dot(self.X.T, residual_global_csr.dot(self.Z.dot(V.dot(B.T))))
        / self.nSamples
    )
    gradB = (
        np.dot((self.X.dot(U)).T, residual_global_csr.dot(self.Z.dot(V)))
        / self.nSamples
        + self.lambda1 * B
    )
    gradB_sym = (gradB + gradB.T) / 2
    gradV = (
        np.dot((self.X.dot(U.dot(B))).T, residual_global_csr.dot(self.Z)).T
        / self.nSamples
    )
    return [gradU, gradB_sym, gradV]