def METHOD_NAME(lifted: FOnewayData):
    """Performs a 1-way ANOVA.
    Parameters
    ----------
    lifted : FOnewayData
        The result of `to_monoid`.
    Returns
    -------
    F-value : float
        The computed F-value of the test.
    p-value : float
        The associated p-value from the F-distribution.
    """
    classes = lifted.classes
    n_samples_per_class = lifted.n_samples_per_class
    n_samples = lifted.n_samples
    ss_alldata = lifted.ss_alldata
    sums_samples = lifted.sums_samples
    sums_alldata = lifted.sums_alldata
    n_classes = len(classes)
    square_of_sums_alldata = sums_alldata**2
    square_of_sums_args = {k: s**2 for k, s in sums_samples.items()}
    sstot = ss_alldata - square_of_sums_alldata / float(n_samples)
    ssbn = 0.0
    for k in n_samples_per_class:
        ssbn += square_of_sums_args[k] / n_samples_per_class[k]
    ssbn -= square_of_sums_alldata / float(n_samples)
    sswn = sstot - ssbn
    dfbn = n_classes - 1
    dfwn = n_samples - n_classes
    msb = ssbn / float(dfbn)
    msw = sswn / float(dfwn)
    # constant_features_idx = np.where(msw == 0.0)[0]
    # if (np.nonzero(msb)[0].size != msb.size and constant_features_idx.size):
    #     warnings.warn("Features %s are constant." % constant_features_idx,
    #                   UserWarning)
    f = msb / msw
    # flatten matrix to vector in sparse case
    f = np.asarray(f).ravel()
    prob = special.fdtrc(dfbn, dfwn, f)
    return f, prob