momapy is a library for working with molecular maps. It currently supports SBGN and CellDesigner maps. Its key feature is its definition of a map, that is formed of two entities: a model, that describes what concepts are represented, and a layout, that describes how these concepts are represented. This definition is borrowed from SBML and its extensions layout+render, that allow users to add a layout to an SBML model. momapy aims at extending this definition to SBGN and CellDesigner maps.
Features of momapy include the following:
- support for SBGN PD and AF maps (read/write SBGN-ML with annotations, rendering information, and notes) and CellDesigner (read/write, with annotations and notes)
- decomposition of a map object into:
- a model object;
- a layout object;
- a mapping from layout element objects to model element objects.
- map, model, layout and mapping objects comparison; fast object in set checking
- rendering of maps to images (SVG, PDF, JPEG, PNG, WebP) and other surfaces (e.g. GLFW window)
- support for styling and CSS like stylesheets (including effects such as shadows)
- automatic geometry and anchors (for arcs, shape borders)
- local positioning (e.g. right of shape, fit set of shapes)
- easy extension with new model and layout element types
momapy is available as a Python package and can be installed with pip as follows (Python >=3.10,<=3.14):
pip install momapy
momapy includes several optional dependencies for rendering maps with the skia or cairo backends:
skia
pip install momapy[skia]
This extra depends on skia-python (https://github.com/kyamagu/skia-python), which itself depends on the following system packages:
- opengl
- libegl
- fontconfig
cairo
pip install momapy[cairo]
This extra depends on pygobject (https://pygobject.gnome.org/guide/sysdeps.html), which itself depends on the following system packages:
- glib
- libffi
all
All optional dependencies can also be installed together:
pip install momapy[all]
Typical usage of momapy includes reading a map and exploring its model:
from momapy.io import read
map_ = read("my_map.sbgn").obj
for process in map_.model.processes:
print(process)Or rendering its layout:
from momapy.rendering import render_map
render_map(map_, "my_file.svg")To run the user manual demo locally:
git clone https://github.com/adrienrougny/momapy.git
cd momapy
pip install . jupyter
jupyter notebook demos/user_manual/main.ipynbThe user manual demo includes additional files (utils.py, example data) in the demos/ directory that are only available in the repository.
The documentation for momapy is available here.