Source code for tyssue.utils.decorators

from functools import wraps


[docs]def do_undo(func): """Decorator that creates a copy of the first argument (usually an epithelium object) and restores it if the function fails. The first argument in `*args` should have `backup()` and `restore()` methods. """ @wraps(func) def with_bckup(*args, **kwargs): eptm = args[0] eptm.backup() try: res = func(*args, **kwargs) return res except Exception as err: eptm.restore() raise err return with_bckup
[docs]def validate(func): """Decorator that validate the epithelium after the decorated function was applied. the first argument of `func` should be an epithelium instance, and is at least assumed to have a `validate` method. """ @wraps(func) def with_validate(*args, **kwargs): eptm = args[0] result = func(*args, **kwargs) if not eptm.validate(): raise ValueError( """ An invalid epithelium was produced To see which edges are invalid, you can inspect the 'is_valid' column of the `edge_df` dataframe, or for example the bad cells involved: >>> bad_edges = eptm.edge_df[~eptm.edge_df['is_valid']].index >>> bad_cells = eptm.edge_df.loc[bad_edges, 'cell'].unique() If case the epithelium was restored after being invalidated, you can find the invalid epithelium as the `_bad` attribute of the restored one""" ) return result return with_validate
[docs]def face_lookup(func): @wraps(func) def with_face_lookup(*args, **kwargs): sheet = args[0] face_id = kwargs["face_id"] face = sheet.idx_lookup(face_id, "face") if face is None: return kwargs["face"] = face return func(*args, **kwargs) return with_face_lookup
[docs]def cell_lookup(func): @wraps(func) def with_cell_lookup(*args, **kwargs): sheet = args[0] cell_id = kwargs["cell_id"] cell = sheet.idx_lookup(cell_id, "cell") if cell is None: return kwargs["cell"] = cell return func(*args, **kwargs) return with_cell_lookup