Source code for tyssue.dynamics.planar_gradients

import pandas as pd

from ..utils.utils import _to_2d


[docs]def area_grad(sheet): coords = sheet.coords inv_area = sheet.edge_df.eval("1 / (4 * sub_area)") face_pos = sheet.edge_df[["f" + c for c in coords]] srce_pos = sheet.edge_df[["s" + c for c in coords]] trgt_pos = sheet.edge_df[["t" + c for c in coords]] r_ak = srce_pos - face_pos.values r_aj = trgt_pos - face_pos.values grad_a_srce = pd.DataFrame(index=sheet.edge_df.index, columns=["gx", "gy"]) grad_a_srce["gx"] = r_aj["ty"] * sheet.edge_df["nz"] grad_a_srce["gy"] = -r_aj["tx"] * sheet.edge_df["nz"] grad_a_trgt = pd.DataFrame(index=sheet.edge_df.index, columns=["gx", "gy"]) grad_a_trgt["gx"] = -r_ak["sy"] * sheet.edge_df["nz"] grad_a_trgt["gy"] = r_ak["sx"] * sheet.edge_df["nz"] grad_a_srce = _to_2d(inv_area) * grad_a_srce grad_a_trgt = _to_2d(inv_area) * grad_a_trgt return grad_a_srce, grad_a_trgt
[docs]def lumen_area_grad(eptm): srce_pos = eptm.edge_df[eptm.scoords] trgt_pos = eptm.edge_df[eptm.tcoords] grad_srce = srce_pos.copy() grad_srce.columns = ["g" + c for c in eptm.coords] grad_trgt = grad_srce.copy() grad_srce["gx"] = trgt_pos["ty"] grad_srce["gy"] = -trgt_pos["tx"] grad_trgt["gx"] = -srce_pos["sy"] grad_trgt["gy"] = srce_pos["sx"] lumen_side = eptm.settings.get("lumen_side", "basal") grad_srce[eptm.edge_df.segment != lumen_side] = 0 grad_trgt[eptm.edge_df.segment != lumen_side] = 0 # minus sign due to the backward orientation return -grad_srce, -grad_trgt