def test_expectile_sets_correct_distribution_and_link(self, adata_cflare: AnnData): g = GAM(adata_cflare, expectile=0.2) g.prepare(adata_cflare.var_names[0], "0") g.fit() g.predict() g.confidence_interval() assert isinstance(g.model, ExpectileGAM) assert g.y_test is not None assert g.conf_int is not None
def test_custom_grid(self, adata_cflare: AnnData): g = GAM(adata_cflare, grid={"lam": [0.1, 1, 10]}) g.prepare(adata_cflare.var_names[0], "0") g.fit() g.predict() g.confidence_interval() assert g._grid is not None assert g._grid == {"lam": [0.1, 1, 10]} assert g.y_test is not None assert g.conf_int is not None
def test_default_grid(self, adata_cflare: AnnData): g = GAM(adata_cflare, grid="default") g.prepare(adata_cflare.var_names[0], "0") g.fit() g.predict() g.confidence_interval() assert g._grid is not None assert not isinstance(g._grid, str) assert g.y_test is not None assert g.conf_int is not None
def pygam_model(adata_cflare: AnnData) -> GAM: m = GAM(adata_cflare) m.prepare(adata_cflare.var_names[0], "0").fit() m.predict() m.confidence_interval() return m
def test_create_models_lineage_specific_fallback(self, adata: AnnData): m1 = create_model(adata) m2 = GAM(adata) models = _create_models( {"foo": {"baz": m1, "*": m2}, "bar": {"quux": m2, "*": m1}}, ["foo", "bar"], ["baz", "quux", "quas", "wex"], ) assert set(models.keys()) == {"foo", "bar"} for k, vs in models.items(): assert set(vs.keys()) == {"baz", "quux", "quas", "wex"} assert isinstance(models["foo"]["baz"], type(m1)) assert models["foo"]["baz"] is not m1 for l in {"quux", "quas", "wex"}: assert isinstance(models["foo"][l], type(m2)) assert models["foo"][l] is not m2 assert isinstance(models["bar"]["quux"], type(m2)) assert models["bar"]["quux"] is not m2 for l in {"baz", "quas", "wex"}: assert isinstance(models["bar"][l], type(m1)) assert models["bar"][l] is not m1
def test_dist_link_combinations( self, adata_cflare: AnnData, dist: GamDistribution, link: GamLinkFunction ): g = GAM(adata_cflare, link=link, distribution=dist) expected_model_type = _gams[dist, link] assert isinstance(g.model, expected_model_type)
def test_create_models_lineage_specific(self, adata: AnnData): m1 = create_model(adata) m2 = GAM(adata) models = _create_models( {"foo": {"bar": m1, "baz": m2}}, ["foo"], ["bar", "baz"] ) assert set(models["foo"].keys()) == {"bar", "baz"} assert isinstance(models["foo"]["bar"], type(m1)) assert models["foo"]["bar"] is not m1 assert isinstance(models["foo"]["baz"], type(m2)) assert models["foo"]["baz"] is not m2
def test_raises_invalid_kwargs(self, adata_cflare: AnnData): with pytest.raises(TypeError): GAM(adata_cflare, n_lineages=12)
def test_expectilegam_invalid_expectile(self, adata: AnnData): with pytest.raises(ValueError): GAM(adata, expectile=0) with pytest.raises(ValueError): GAM(adata, expectile=1)
def test_invalid_grid_type(self, adata: AnnData): with pytest.raises(TypeError): GAM(adata, grid=1311)
def test_invalid_link_function(self, adata: AnnData): with pytest.raises(ValueError): GAM(adata, link="foob")
def test_invalid_distribution(self, adata: AnnData): with pytest.raises(ValueError): GAM(adata, distribution="foobar")