def test_3d_eptm_cell_getter_setter(): datasets_2d, specs = three_faces_sheet() datasets = extrude(datasets_2d) eptm = Epithelium("3faces_3D", datasets) assert eptm.cell_df is not None datasets_3d = extrude(datasets_2d, method="translation") eptm.cell_df = datasets_3d["cell"] for key in eptm.cell_df: assert key in datasets_3d["cell"]
def test_apoptosis(): specs = config.geometry.bulk_spec() sheet = Sheet.planar_sheet_3d("flat", 4, 5, 1, 1) sheet.sanitize() datasets = extrude(sheet.datasets, method="translation") mono = Monolayer("mono", datasets, specs) mono.face_df["id"] = mono.face_df.index.values geom.center(mono) geom.update_all(mono) mono.face_df["contractility"] = 1.0 manager = EventManager("face") cell_id = 0 apical_face = mono.face_df[ (mono.face_df.index.isin(mono.get_orbits("cell", "face")[cell_id])) & (mono.face_df.segment == "apical")].index[0] sheet.settings["apoptosis"] = {"cell_id": cell_id} initial_cell_event = [(apoptosis, sheet.settings["apoptosis"])] manager.extend(initial_cell_event) manager.execute(mono) manager.update() assert len(manager.current) == 1 i = 0 while i < 5: manager.execute(mono) manager.update() i = i + 1 assert mono.face_df.loc[apical_face, "contractility"] > 1.0
def test_retrieve_bulk(): eptm = Epithelium("3", extrude(three_faces_sheet()[0])) RNRGeometry.update_all(eptm) history = History(eptm) eptm_ = history.retrieve(0) RNRGeometry.update_all(eptm_)
def test_modify(): datasets, _ = three_faces_sheet() extruded = extrude(datasets, method="translation") mono = Monolayer("test", extruded, config.geometry.bulk_spec()) mono.update_specs(config.dynamics.quasistatic_bulk_spec(), reset=True) modifiers = { "apical": { "edge": { "line_tension": 1.0 }, "face": { "contractility": 0.2 } }, "basal": { "edge": { "line_tension": 3.0 }, "face": { "contractility": 0.1 } }, } utils.modify_segments(mono, modifiers) assert mono.edge_df.loc[mono.apical_edges, "line_tension"].unique()[0] == 1.0 assert mono.edge_df.loc[mono.basal_edges, "line_tension"].unique()[0] == 3.0
def test_cell_cell_connectivity(): data, _ = three_faces_sheet() mono = Monolayer("test", extrude(data), bulk_spec()) ccc = connectivity.cell_cell_connectivity(mono) expected = np.array([[0, 36, 36], [36, 0, 36], [36, 36, 0]]) np.testing.assert_array_equal(ccc, expected)
def test_verts_in_cell_connectivity(): data, specs = three_faces_sheet() mono = Monolayer("test", extrude(data), bulk_spec()) ccc = connectivity.verts_in_cell_connectivity(mono) assert ccc[0][ccc[0] == 9].shape == (18, ) assert ccc[0][ccc[0] == 18].shape == (6, ) assert ccc[0][ccc[0] == 27].shape == (1, )
def test_find_transitions(): sheet = Sheet.planar_sheet_3d("sheet", 5, 5, 1, 1) sheet.sanitize() datasets = extrude(sheet.datasets, method="translation") eptm = Monolayer("test_IHt", datasets, bulk_spec()) BulkGeometry.update_all(eptm) eptm.settings["threshold_length"] = 1e-3 IH_transition(eptm, 26) BulkGeometry.update_all(eptm) eptm.settings["threshold_length"] = 1e-2 ih, hi = find_rearangements(eptm) assert len(ih) == 0 assert len(hi) == 2 assert len(find_HIs(eptm)) face = eptm.face_df.index[-1] HI_transition(eptm, face) BulkGeometry.update_all(eptm) eptm.settings["threshold_length"] = 2e-1 ih, hi = find_rearangements(eptm) assert len(ih) == 1 assert len(hi) == 0 assert len(find_IHs(eptm))
def test_extrude(): datasets, specs = generation.three_faces_sheet() sheet = Sheet("test", datasets, specs) extruded = extrude(sheet.datasets, method="translation") assert extruded["cell"].shape[0] == 3 assert extruded["face"].shape[0] == 24 assert extruded["edge"].shape[0] == 108 assert extruded["vert"].shape[0] == 26
def test_number_getters(): datasets_2d, specs = three_faces_sheet(zaxis=True) datasets = extrude(datasets_2d) eptm = Epithelium("3faces_3D", datasets, specs) assert eptm.Nc == datasets["cell"].shape[0] assert eptm.Nv == datasets["vert"].shape[0] assert eptm.Nf == datasets["face"].shape[0] assert eptm.Ne == datasets["edge"].shape[0]
def test_get_simple_index(): tri_face = Epithelium("3", *three_faces_sheet()) idx = get_simple_index(tri_face.edge_df) assert idx.shape == (15, ) datasets_2d, specs = three_faces_sheet(zaxis=True) datasets = extrude(datasets_2d, scale=1 / 3.0) eptm = Epithelium("3faces_3D", datasets, specs) idx = get_simple_index(eptm.edge_df) assert idx.shape == (43, )
def test_cell_centered_patch(): grid = hexa_grid2d(6, 4, 3, 3) datasets = from_2d_voronoi(Voronoi(grid)) _ = Sheet("test", datasets) extruded = extrude(datasets, method="translation") mono = Monolayer("test", extruded, config.geometry.bulk_spec()) submono = utils.cell_centered_patch(mono, 5, 1) assert submono.Nc == 4
def test_highlight(): dsets = extrude(three_faces_sheet()[0]) mono3 = Epithelium("3", dsets, config.geometry.bulk_spec()) RNRGeometry.update_all(mono3) highlight_cells(mono3, 0) assert mono3.face_df.visible.sum() == 8 highlight_cells(mono3, [0, 1], reset_visible=False) assert mono3.face_df.visible.sum() == 16 highlight_cells(mono3, 2, reset_visible=True) assert mono3.face_df.visible.sum() == 8
def test_orbits(): datasets_2d, specs = three_faces_sheet(zaxis=True) datasets = extrude(datasets_2d) eptm = Epithelium("3faces_3D", datasets, specs) expected_res_cell = datasets["edge"].groupby("srce").apply( lambda df: df["cell"]) expected_res_face = datasets["edge"].groupby("face").apply( lambda df: df["trgt"]) assert_array_equal(expected_res_cell, eptm.get_orbits("srce", "cell")) assert_array_equal(expected_res_face, eptm.get_orbits("face", "trgt"))
def test_polygons(): datasets_2d, specs = three_faces_sheet(zaxis=True) datasets = extrude(datasets_2d, scale=1 / 3.0) eptm = Epithelium("3faces_3D", datasets, specs) RNRGeometry.update_all(eptm) with raises(ValueError): fp = eptm.face_polygons() eptm.reset_index(order=True) res = eptm.face_polygons(["x", "y", "z"]) shapes = res.apply(lambda s: s.shape in ((6, 3), (4, 3))) assert all(shapes)
def test_monolayer_division(): datasets_2d, _ = three_faces_sheet(zaxis=True) datasets = extrude(datasets_2d, method="translation") eptm = Monolayer("test_volume", datasets, bulk_spec(), coords=["x", "y", "z"]) eptm.vert_df[eptm.coords] += np.random.normal(scale=1e-6, size=(eptm.Nv, 3)) MonolayerGeometry.update_all(eptm) for orientation in ["vertical", "horizontal", "apical"]: monolayer_division(eptm, 0, orientation=orientation) eptm.reset_topo() eptm.reset_index() assert eptm.validate() assert eptm.Nc == 6
def test_face_centered_patch(): grid = hexa_grid2d(6, 4, 3, 3) datasets = from_2d_voronoi(Voronoi(grid)) sheet = Sheet("test", datasets) subsheet = utils.face_centered_patch(sheet, 5, 2) assert subsheet.Nf == 6 extruded = extrude(datasets, method="translation") mono = Monolayer("test", extruded, config.geometry.bulk_spec()) submono = utils.face_centered_patch(mono, 15, 1) assert submono.Nf == 19
def test_copy(): datasets, specs = three_faces_sheet() extruded = extrude(datasets, method="translation") mono = Monolayer("test", extruded, config.geometry.bulk_spec()) assert mono.Nc == 3 assert mono.Nf == 24 assert mono.Ne == 108 assert mono.Nv == 26 mono2 = mono.copy() assert mono2.Nc == 3 assert isinstance(mono2, Monolayer)
def test_ab_pull_edge(): specs = config.geometry.bulk_spec() sheet = Sheet.planar_sheet_3d("flat", 4, 5, 1, 1) sheet.sanitize() datasets = extrude(sheet.datasets, method="translation") mono = Monolayer("mono", datasets, specs) geom.center(mono) geom.update_all(mono) mono.edge_df["line_tension"] = 1.0 mono.specs["edge"]["line_tension"] = 1.0 assert len(mono.edge_df.line_tension.unique()) == 1 ab_pull_edge(mono, 1, 2, False) assert len(mono.edge_df.line_tension.unique()) == 2
def test_monolayer_division(): datasets_2d, specs = three_faces_sheet(zaxis=True) datasets = extrude(datasets_2d, method="translation") eptm = Monolayer("test_volume", datasets, bulk_spec(), coords=["x", "y", "z"]) MonolayerGeometry.update_all(eptm) for orientation in ["vertical", "horizontal"]: daughter = cell_division(eptm, 0, orientation=orientation) eptm.reset_topo() eptm.reset_index() assert eptm.validate() assert eptm.Nc == 5
def test_subdivide(): datasets, specs = generation.three_faces_sheet() sheet = Sheet("test", datasets, specs) subdivided = subdivide_faces(sheet, [0]) assert subdivided["face"].shape[0] == 3 assert subdivided["edge"].shape[0] == 30 assert subdivided["vert"].shape[0] == 14 datasets_3d = extrude(datasets, method="translation") sheet_3d = Sheet("test3d", datasets_3d, specs) subdivided_3d = subdivide_faces(sheet_3d, [0]) assert subdivided_3d["face"].shape[0] == 24 assert subdivided_3d["edge"].shape[0] == 120 assert subdivided_3d["vert"].shape[0] == 27 assert subdivided_3d["cell"].shape[0] == 3
def test_shrink(): specs = config.geometry.bulk_spec() sheet = Sheet.planar_sheet_3d("flat", 4, 5, 1, 1) sheet.sanitize() datasets = extrude(sheet.datasets, method="translation") mono = Monolayer("mono", datasets, specs) geom.center(mono) geom.update_all(mono) mono.cell_df["prefered_vol"] = 1.0 mono.cell_df["prefered_area"] = 1.0 shrink(mono, 0, 0.2) assert round(mono.cell_df.loc[0, "prefered_vol"], 4) == 0.8333 assert round(mono.cell_df.loc[0, "prefered_area"], 4) == 0.8855
def test_upcast(): datasets_2d, specs = three_faces_sheet(zaxis=True) datasets = extrude(datasets_2d) eptm = Epithelium("3faces_3D", datasets, specs) eptm.cell_df["test_data"] = eptm.cell_df.index eptm.face_df["test_data"] = eptm.face_df.index eptm.vert_df["test_data"] = eptm.vert_df.index assert_array_equal(eptm.upcast_srce(eptm.vert_df["test_data"]), eptm.edge_df["srce"]) assert_array_equal(eptm.upcast_srce("test_data"), eptm.edge_df["srce"]) assert_array_equal(eptm.upcast_trgt(eptm.vert_df["test_data"]), eptm.edge_df["trgt"]) assert_array_equal(eptm.upcast_trgt("test_data"), eptm.edge_df["trgt"]) assert_array_equal(eptm.upcast_face("test_data"), eptm.edge_df["face"]) assert_array_equal(eptm.upcast_cell("test_data"), eptm.edge_df["cell"])
def test_contract(): specs = config.geometry.bulk_spec() sheet = Sheet.planar_sheet_3d("flat", 4, 5, 1, 1) sheet.sanitize() datasets = extrude(sheet.datasets, method="translation") mono = Monolayer("mono", datasets, specs) geom.center(mono) geom.update_all(mono) mono.face_df["contractility"] = 1.0 assert len(mono.face_df.contractility.unique()) == 1 faces = mono.edge_df[mono.edge_df["cell"] == 0]["face"].unique() for f in faces: contract(mono, f, 0.2) assert len(mono.face_df.contractility.unique()) == 2 for f in faces: assert mono.face_df.loc[f, "contractility"] == 1.2
def test_update_rank(): sheet = Sheet("3", *three_faces_sheet()) sheet.update_rank() np.testing.assert_array_equal( np.array([3, 3, 2, 2, 2, 3, 2, 2, 2, 3, 2, 2, 2]), sheet.vert_df["rank"]) mono = Epithelium("3", extrude(sheet.datasets)) mono.update_rank() mono.vert_df["rank"].values np.testing.assert_array_equal( np.array([ 4, 4, 3, 3, 3, 4, 3, 3, 3, 4, 3, 3, 3, 4, 4, 3, 3, 3, 4, 3, 3, 3, 4, 3, 3, 3, ]), mono.vert_df["rank"].values, )
def test_simple_history(): sheet = Sheet("3", *three_faces_sheet()) history = History(sheet) assert "dx" in history.datasets["edge"].columns for element in sheet.datasets: assert sheet.datasets[element].shape[0] == history.datasets[ element].shape[0] history.record() assert sheet.datasets["vert"].shape[0] * 2 == history.datasets[ "vert"].shape[0] history.record() assert sheet.datasets["vert"].shape[0] * 3 == history.datasets[ "vert"].shape[0] assert sheet.datasets["face"].shape[0] * 3 == history.datasets[ "face"].shape[0] mono = Epithelium("eptm", extrude(sheet.datasets)) histo2 = History(mono) for element in mono.datasets: assert mono.datasets[element].shape[0] == histo2.datasets[ element].shape[0]
def test_face_face_connectivity(): data, specs = three_faces_sheet() sheet = Sheet("test", data, specs) ffc = connectivity.face_face_connectivity(sheet, exclude_opposites=False) expected = np.array([[0, 2, 2], [2, 0, 2], [2, 2, 0]]) np.testing.assert_array_equal(ffc, expected) ffc = connectivity.face_face_connectivity(sheet, exclude_opposites=True) expected = np.array([[0, 2, 2], [2, 0, 2], [2, 2, 0]]) np.testing.assert_array_equal(ffc, expected) mono = Monolayer("test", extrude(data), bulk_spec()) ffc = connectivity.face_face_connectivity(mono, exclude_opposites=False) assert ffc[0][ffc[0] == 2].shape == (10, ) assert ffc[0][ffc[0] == 1].shape == (4, ) assert ffc.max() == 4 ffc = connectivity.face_face_connectivity(mono, exclude_opposites=True) assert ffc[0][ffc[0] == 2].shape == (10, ) assert ffc[0][ffc[0] == 1].shape == (4, ) assert ffc.max() == 2
def test_HI_transition(): sheet = Sheet.planar_sheet_3d("sheet", 5, 5, 1, 1) sheet.sanitize() datasets = extrude(sheet.datasets, method="translation") eptm = Monolayer("test_HIt", datasets, bulk_spec()) BulkGeometry.update_all(eptm) Nc, Nf, Ne, Nv = eptm.Nc, eptm.Nf, eptm.Ne, eptm.Nv eptm.settings["threshold_length"] = 1e-3 IH_transition(eptm, 26) BulkGeometry.update_all(eptm) face = eptm.face_df.index[-1] HI_transition(eptm, face) assert eptm.Nc == Nc assert eptm.Nf == Nf assert eptm.Ne == Ne assert eptm.Nv == Nv invalid = eptm.get_invalid() assert np.alltrue(1 - invalid) assert np.alltrue(eptm.edge_df["sub_vol"] > 0)
def test_IH_transition(): sheet = Sheet.planar_sheet_3d("sheet", 5, 5, 1, 1) sheet.sanitize() datasets = extrude(sheet.datasets, method="translation") eptm = Monolayer("test_IHt", datasets, bulk_spec()) BulkGeometry.update_all(eptm) Nc, Nf, Ne, Nv = eptm.Nc, eptm.Nf, eptm.Ne, eptm.Nv eptm.settings["threshold_length"] = 1e-3 IH_transition(eptm, 26) BulkGeometry.update_all(eptm) assert eptm.Nc == Nc assert eptm.Nf == Nf + 2 assert eptm.Ne == Ne + 12 assert eptm.Nv == Nv + 1 invalid = eptm.get_invalid() assert np.alltrue(1 - invalid) assert np.alltrue(eptm.edge_df["sub_vol"] > 0) assert (eptm.face_df[eptm.face_df.segment == "apical"].shape[0] == eptm.cell_df.shape[0])
def test_constriction(): specs = config.geometry.bulk_spec() sheet = Sheet.planar_sheet_3d("flat", 6, 8, 1, 1) sheet.sanitize() datasets = extrude(sheet.datasets, method="translation") mono = Monolayer("mono", datasets, specs) geom.center(mono) geom.update_all(mono) dyn_specs = config.dynamics.quasistatic_bulk_spec() dyn_specs["cell"]["area_elasticity"] = 0.05 dyn_specs["cell"]["prefered_area"] = 6.0 dyn_specs["cell"]["vol_elasticity"] = 1.0 dyn_specs["cell"]["prefered_vol"] = 1.2 dyn_specs["face"]["contractility"] = 0.0 dyn_specs["edge"]["line_tension"] = 0.0 mono.update_specs(dyn_specs, reset=True) mono.face_df.loc[mono.apical_faces, "contractility"] = 1.12 mono.face_df.loc[mono.basal_faces, "contractility"] = 1.12 manager = EventManager("face") sheet.face_df["enter_in_process"] = 0 mono.settings["constriction"] = {} mono.cell_df["is_mesoderm"] = False mono.face_df["is_mesoderm"] = False cell_to_constrict = [12] apical_face = mono.face_df[(mono.face_df.index.isin( mono.get_orbits("cell", "face")[cell_to_constrict[0]])) & (mono.face_df.segment == "apical")].index[0] mono.cell_df.loc[cell_to_constrict, "is_mesoderm"] = True mono.cell_df["id"] = mono.cell_df.index.values mono.face_df["id"] = mono.face_df.index.values list_face_in_cell = mono.get_orbits("cell", "face") cell_in_mesoderm = mono.cell_df[mono.cell_df.is_mesoderm].index.values for i in cell_in_mesoderm: faces_in_cell = mono.face_df.loc[list_face_in_cell[i].unique()] for f in faces_in_cell.index.values: mono.face_df.loc[f, "is_mesoderm"] = True for i in cell_to_constrict: delam_kwargs = mono.settings["constriction"].copy() delam_kwargs.update({ "cell_id": i, "contract_rate": 2, "critical_area": 0.02, "shrink_rate": 0.4, "critical_volume": 0.1, "radial_tension": 3, "max_traction": 35, "contract_neighbors": True, "contract_span": 1, "with_rearrangement": True, "critical_area_reduction": 5, }) initial_cell_event = [(constriction, delam_kwargs)] manager.extend(initial_cell_event) manager.execute(mono) manager.update() assert len(manager.current) == 1 i = 0 while i < 10: manager.execute(mono) manager.update() i = i + 1 assert mono.face_df.loc[apical_face, "contractility"] > 1.0 for c in cell_to_constrict: assert mono.cell_df.loc[c, "num_faces"] <= 4
def test_extrude_invalid_method(): datasets, specs = generation.three_faces_sheet() with raises(ValueError): datasets_3d = extrude(datasets, method="invalid_method")