def test_upsample(): data, labels = make_blobs(n_samples=3000, n_features=2, centers=3, random_state=42) data = pd.DataFrame(data, columns=["X", "Y"]) g = gate.Gate(gate_name="test", parent="test parent", x="X", y="Y", method="manual", sampling={ "method": "uniform", "frac": 0.5 }) sample = g._downsample(data=data) sample_labels = labels[sample.index.values] pops = list() for x in np.unique(sample_labels): idx = sample.index.values[np.where(sample_labels == x)[0]] pops.append( gate.Population(population_name=f"Pop_{x}", parent="root", index=idx[:498])) pops = g._upsample(data=data, sample=sample, populations=pops) assert isinstance(pops, list) assert all([isinstance(p, gate.Population) for p in pops]) assert all([len(p.index) == 1000 for p in pops]) for x in np.unique(labels): p = [i for i in pops if i.population_name == f"Pop_{x}"][0] assert np.array_equal(p.index, np.where(labels == x)[0])
def test_downsample(kwargs): g = gate.Gate(gate_name="test", parent="test parent", x="X", y="Y", method="manual", sampling=kwargs) data = pd.DataFrame({ "X": np.random.normal(1, scale=0.5, size=1000), "Y": np.random.normal(1, scale=0.5, size=1000) }) sample = g._downsample(data=data) if kwargs.get("method") is None: assert sample is None else: assert sample.shape[0] < data.shape[0]
def test_transform_none(): g = gate.Gate(gate_name="test", parent="test parent", x="X", y="Y", method="manual") data = pd.DataFrame({ "X": np.random.normal(1, scale=0.5, size=1000), "Y": np.random.normal(1, scale=0.5, size=1000) }) transformed = g._transform(data) assert isinstance(transformed, pd.DataFrame) assert transformed.shape[0] == 1000 assert transformed.shape[1] == 2 for i in ["X", "Y"]: assert transformed[i].mean() == pytest.approx(1., 0.1) assert transformed[i].std() == pytest.approx(0.5, 0.1)
def test_transform_x(): g = gate.Gate(gate_name="test", parent="test parent", x="X", y="Y", method="manual", transformations={"x": "logicle"}) data = pd.DataFrame({ "X": np.random.normal(1, scale=0.5, size=1000), "Y": np.random.normal(1, scale=0.5, size=1000) }) transformed = g._transform(data) assert isinstance(transformed, pd.DataFrame) assert transformed.shape[0] == 1000 assert transformed.shape[1] == 2 assert transformed["X"].mean() != pytest.approx(1., 0.1) assert transformed["X"].std() != pytest.approx(0.5, 0.1) assert transformed["Y"].mean() == pytest.approx(1., 0.1) assert transformed["Y"].std() == pytest.approx(0.5, 0.1)
def test_dim_reduction(): g = gate.Gate(gate_name="test", parent="test parent", x="X", y="Y", method="manual", dim_reduction={ "method": "UMAP", "n_neighbors": 100 }) data = pd.DataFrame({ "X": np.random.normal(1, 0.5, 1000), "Y": np.random.normal(1, 0.5, 1000), "Z": np.random.normal(1, 0.5, 1000), "W": np.random.normal(1, 0.5, 1000) }) data = g._dim_reduction(data=data) assert g.x == "UMAP1" assert g.y == "UMAP2" assert data.shape == (1000, 6) assert all([f"UMAP{i + 1}" in data.columns for i in range(2)])