def test_check_similarity_metric():
    for metric in get_available_similarity_metrics():
        check_similarity_metric(metric)

    with pytest.raises(AssertionError) as ve:
        output = check_similarity_metric("fail")
    assert "fail not supported. Available similarity metrics:" in str(ve.value)
def test_evaluate_replicate_reproducibility():
    similarity_metrics = get_available_similarity_metrics()
    replicate_reproducibility_quantiles = [0.5, 0.95]

    expected_result = {
        "gene": {
            "pearson": {"0.5": 0.431, "0.95": 0.056},
            "kendall": {"0.5": 0.429, "0.95": 0.054},
            "spearman": {"0.5": 0.429, "0.95": 0.055},
        },
        "compound": {
            "pearson": {"0.5": 0.681, "0.95": 0.458},
            "kendall": {"0.5": 0.679, "0.95": 0.463},
            "spearman": {"0.5": 0.679, "0.95": 0.466},
        },
    }

    for sim_metric in similarity_metrics:
        for quant in replicate_reproducibility_quantiles:
            gene_res = evaluate(
                profiles=gene_profiles,
                features=gene_features,
                meta_features=gene_meta_features,
                replicate_groups=gene_groups,
                operation="replicate_reproducibility",
                replicate_reproducibility_return_median_cor=False,
                similarity_metric=sim_metric,
                replicate_reproducibility_quantile=quant,
            )

            compound_res = evaluate(
                profiles=compound_profiles,
                features=compound_features,
                meta_features=compound_meta_features,
                replicate_groups=compound_groups,
                operation="replicate_reproducibility",
                replicate_reproducibility_return_median_cor=False,
                similarity_metric=sim_metric,
                replicate_reproducibility_quantile=quant,
            )

            assert (
                np.round(gene_res, 3) == expected_result["gene"][sim_metric][str(quant)]
            )
            assert (
                np.round(compound_res, 3)
                == expected_result["compound"][sim_metric][str(quant)]
            )
def test_get_available_similarity_metrics():
    expected_result = ["pearson", "kendall", "spearman"]
    assert expected_result == get_available_similarity_metrics()