Core
momapy.rendering.core
Base classes and functions for rendering maps or layout elements.
Classes:
| Name | Description |
|---|---|
Renderer |
Base class for renderers. |
StatefulRenderer |
Base class for stateful renderers. |
SupportsFileOutput |
Mixin declaring the file-output capability of a renderer. |
Functions:
| Name | Description |
|---|---|
get_renderer |
Get a renderer class by name. |
list_renderers |
List all available renderer names. |
register_lazy_renderer |
Register a renderer for lazy loading. |
register_renderer |
Register a renderer class. |
render_layout_element |
Render a layout element to a file in the given format with the given registered renderer. |
render_layout_elements |
Render a collection of layout elements to a file in the given format with the given registered renderer. |
render_map |
Render a map to a file in the given format with the given registered renderer. |
render_maps |
Render a collection of maps to a file in the given format with the given registered renderer. |
Renderer
dataclass
Bases: ABC
Base class for renderers.
The abstract contract is the five render-session methods only
(begin_session, end_session, new_page,
render_layout_element, render_drawing_element). render_map is
a concrete convenience method (it renders map_.layout via
render_layout_element), so backends need not implement it. File
output is a
separate capability provided by the :class:SupportsFileOutput mixin, not a
base-class obligation: a renderer that does not target a file (in-memory
surface, interactive canvas, null/test renderer) subclasses Renderer
directly and has neither from_file nor supported_formats.
Methods:
| Name | Description |
|---|---|
begin_session |
Begin a rendering session. |
end_session |
End the current rendering session. |
get_bolder_font_weight |
Return the lightest font weight bolder than the given font weight. |
get_lighter_font_weight |
Return the boldest font weight lighter than the given font weight. |
new_page |
Start a new page. |
render_drawing_element |
Render a drawing element. |
render_layout_element |
Render a layout element. |
render_map |
Render a map. |
begin_session
abstractmethod
end_session
abstractmethod
get_bolder_font_weight
classmethod
get_bolder_font_weight(font_weight: FontWeight | float) -> float
Return the lightest font weight bolder than the given font weight.
Source code in src/momapy/rendering/core.py
get_lighter_font_weight
classmethod
get_lighter_font_weight(font_weight: FontWeight | float) -> float
Return the boldest font weight lighter than the given font weight.
Source code in src/momapy/rendering/core.py
new_page
abstractmethod
Start a new page.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
width
|
float
|
Width of the page. |
required |
height
|
float
|
Height of the page. |
required |
render_drawing_element
abstractmethod
render_drawing_element(drawing_element: DrawingElement) -> None
Render a drawing element.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
drawing_element
|
DrawingElement
|
The drawing element to render. |
required |
render_layout_element
abstractmethod
render_layout_element(layout_element: LayoutElement) -> None
Render a layout element.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
layout_element
|
LayoutElement
|
The layout element to render. |
required |
render_map
render_map(map_: Map) -> None
Render a map.
This is a convenience method, not part of the abstract
contract: the default implementation renders the map's layout via
:meth:render_layout_element, which is what every built-in backend
needs. Subclasses may override it if a backend requires
map-specific handling, but they are not obliged to. The file
pipeline (:func:render_map/:func:render_maps) does not call this
method; it renders each page through :meth:render_layout_element.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
map_
|
Map
|
The map to render. |
required |
Raises:
| Type | Description |
|---|---|
ValueError
|
If the map has no layout to render. |
Source code in src/momapy/rendering/core.py
StatefulRenderer
dataclass
Bases: Renderer
Base class for stateful renderers.
Methods:
| Name | Description |
|---|---|
__post_init__ |
Initialize the renderer's current state after initialization. |
begin_session |
Begin a rendering session. |
end_session |
End the current rendering session. |
get_bolder_font_weight |
Return the lightest font weight bolder than the given font weight. |
get_current_state |
Return the current state. |
get_current_value |
Return the current value for an attribute. |
get_initial_value |
Return the initial value for an attribute. |
get_lighter_font_weight |
Return the boldest font weight lighter than the given font weight. |
new_page |
Start a new page. |
render_drawing_element |
Render a drawing element. |
render_layout_element |
Render a layout element. |
render_map |
Render a map. |
restore |
Set the current state to the last saved state. |
save |
Save the current state. |
self_restore |
Restore the internal state of the renderer. |
self_save |
Save the internal state of the renderer. |
set_current_state |
Set the current state to the given state. |
set_current_state_from_drawing_element |
Set the current state to a state given by a drawing element. |
set_current_value |
Set the current value for an attribute. |
__post_init__
begin_session
abstractmethod
end_session
abstractmethod
get_bolder_font_weight
classmethod
get_bolder_font_weight(font_weight: FontWeight | float) -> float
Return the lightest font weight bolder than the given font weight.
Source code in src/momapy/rendering/core.py
get_current_state
get_current_value
get_initial_value
Return the initial value for an attribute.
Source code in src/momapy/rendering/core.py
get_lighter_font_weight
classmethod
get_lighter_font_weight(font_weight: FontWeight | float) -> float
Return the boldest font weight lighter than the given font weight.
Source code in src/momapy/rendering/core.py
new_page
abstractmethod
Start a new page.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
width
|
float
|
Width of the page. |
required |
height
|
float
|
Height of the page. |
required |
render_drawing_element
abstractmethod
render_drawing_element(drawing_element: DrawingElement) -> None
Render a drawing element.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
drawing_element
|
DrawingElement
|
The drawing element to render. |
required |
render_layout_element
abstractmethod
render_layout_element(layout_element: LayoutElement) -> None
Render a layout element.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
layout_element
|
LayoutElement
|
The layout element to render. |
required |
render_map
render_map(map_: Map) -> None
Render a map.
This is a convenience method, not part of the abstract
contract: the default implementation renders the map's layout via
:meth:render_layout_element, which is what every built-in backend
needs. Subclasses may override it if a backend requires
map-specific handling, but they are not obliged to. The file
pipeline (:func:render_map/:func:render_maps) does not call this
method; it renders each page through :meth:render_layout_element.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
map_
|
Map
|
The map to render. |
required |
Raises:
| Type | Description |
|---|---|
ValueError
|
If the map has no layout to render. |
Source code in src/momapy/rendering/core.py
restore
Set the current state to the last saved state.
Source code in src/momapy/rendering/core.py
save
self_restore
abstractmethod
Restore the internal state of the renderer.
This method must be implemented by subclasses to restore any internal state that is not part of the current state dictionary.
Source code in src/momapy/rendering/core.py
self_save
abstractmethod
Save the internal state of the renderer.
This method must be implemented by subclasses to save any internal state that is not part of the current state dictionary.
set_current_state
Set the current state to the given state.
set_current_state_from_drawing_element
set_current_state_from_drawing_element(drawing_element: DrawingElement) -> None
Set the current state to a state given by a drawing element.
Source code in src/momapy/rendering/core.py
set_current_value
Set the current value for an attribute.
Source code in src/momapy/rendering/core.py
SupportsFileOutput
Bases: ABC
Mixin declaring the file-output capability of a renderer.
Mix into a :class:Renderer subclass to declare that it can build from and
write to a file. This is the capability required by the file-output entry
points (:func:render_map, :func:render_maps,
:func:render_layout_element, :func:render_layout_elements); it is a
capability, not an identity — a renderer mixing it in may still support
other output targets (a live canvas, an in-memory surface) through its own
constructors. Renderers with no file output simply do not mix it in.
Implementers must declare :attr:supported_formats and implement
:meth:from_file.
Methods:
| Name | Description |
|---|---|
from_file |
Build a renderer that writes its output to |
Attributes:
| Name | Type | Description |
|---|---|---|
default_format |
str | None
|
The format used when |
default_format
class-attribute
The format used when from_file is called with format_=None.
Subclasses set this to one of their :attr:supported_formats.
from_file
abstractmethod
classmethod
from_file(file_path: str | PathLike, width: float, height: float, format_: str | None = None) -> Self
Build a renderer that writes its output to file_path.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
file_path
|
str | PathLike
|
The output file path. |
required |
width
|
float
|
The width of the canvas. |
required |
height
|
float
|
The height of the canvas. |
required |
format_
|
str | None
|
The output format. |
None
|
Returns:
| Type | Description |
|---|---|
Self
|
A new renderer instance writing to |
Source code in src/momapy/rendering/core.py
get_renderer
get_renderer(name: str) -> type[Renderer]
Get a renderer class by name.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Renderer name (e.g., "skia", "cairo", "svg-native"). |
required |
Returns:
| Type | Description |
|---|---|
type[Renderer]
|
Renderer class for the specified backend. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If no renderer with that name exists. |
ImportError
|
If the renderer is registered but its backend module cannot be imported (e.g. an optional dependency such as skia-python or pycairo is not installed). |
Source code in src/momapy/rendering/core.py
list_renderers
List all available renderer names.
Returns:
| Type | Description |
|---|---|
list[str]
|
Sorted list of available renderer names. |
register_lazy_renderer
Register a renderer for lazy loading.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Name to register the renderer under. |
required |
import_path
|
str
|
Import path in format "module.path:ClassName". |
required |
Source code in src/momapy/rendering/core.py
register_renderer
register_renderer(name: str, cls: type[Renderer]) -> None
Register a renderer class.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Name to register the renderer under. |
required |
cls
|
type[Renderer]
|
Renderer class (must inherit from Renderer). |
required |
Source code in src/momapy/rendering/core.py
render_layout_element
render_layout_element(layout_element: LayoutElement, file_path: str | PathLike, format_: str | None = None, renderer: str | None = None, style_sheet: StyleSheet | None = None, to_top_left: bool = False) -> None
Render a layout element to a file in the given format with the given registered renderer.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
layout_element
|
LayoutElement
|
The layout element to render |
required |
file_path
|
str | PathLike
|
The output file path |
required |
format_
|
str | None
|
The output format. If None, inferred from file extension. |
None
|
renderer
|
str | None
|
The registered renderer to use. If None, auto-detected based on format. |
None
|
style_sheet
|
StyleSheet | None
|
An optional style sheet to apply before rendering |
None
|
to_top_left
|
bool
|
Whether to move the layout element to the top left or not before rendering |
False
|
Source code in src/momapy/rendering/core.py
render_layout_elements
render_layout_elements(layout_elements: Sequence[LayoutElement], file_path: str | PathLike, format_: str | None = None, renderer: str | None = None, style_sheet: StyleSheet | None = None, to_top_left: bool = False, multi_pages: bool = False) -> None
Render a collection of layout elements to a file in the given format with the given registered renderer.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
layout_elements
|
Sequence[LayoutElement]
|
The layout elements to render |
required |
file_path
|
str | PathLike
|
The output file path |
required |
format_
|
str | None
|
The output format. If None, inferred from file extension. |
None
|
renderer
|
str | None
|
The registered renderer to use. If None, auto-detected based on format. |
None
|
style_sheet
|
StyleSheet | None
|
An optional style sheet to apply before rendering |
None
|
to_top_left
|
bool
|
Whether to move the layout elements to the top left before rendering |
False
|
multi_pages
|
bool
|
Whether to render each layout element on a separate page.
Defaults to |
False
|
Source code in src/momapy/rendering/core.py
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 | |
render_map
render_map(map_: Map, file_path: str | PathLike, format_: str | None = None, renderer: str | None = None, style_sheet: StyleSheet | None = None, to_top_left: bool = False) -> None
Render a map to a file in the given format with the given registered renderer.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
map_
|
Map
|
The map to render |
required |
file_path
|
str | PathLike
|
The output file path |
required |
format_
|
str | None
|
The output format. If None, inferred from file extension. |
None
|
renderer
|
str | None
|
The registered renderer to use. If None, auto-detected based on format. |
None
|
style_sheet
|
StyleSheet | None
|
An optional style sheet to apply before rendering |
None
|
to_top_left
|
bool
|
Whether to move the map to the top left before rendering |
False
|
Examples:
from momapy.io import read
from momapy.rendering import render_map
# Read a map from file
result = read("path/to/map.sbgn")
sbgn_map = result.obj
# Render the map to SVG
render_map(sbgn_map, "output.svg")
Source code in src/momapy/rendering/core.py
render_maps
render_maps(maps: Collection[Map], file_path: str | PathLike, format_: str | None = None, renderer: str | None = None, style_sheet: StyleSheet | None = None, to_top_left: bool = False, multi_pages: bool = False) -> None
Render a collection of maps to a file in the given format with the given registered renderer.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
maps
|
Collection[Map]
|
The maps to render |
required |
file_path
|
str | PathLike
|
The output file path |
required |
format_
|
str | None
|
The output format. If None, inferred from file extension. |
None
|
renderer
|
str | None
|
The registered renderer to use. If None, auto-detected based on format. |
None
|
style_sheet
|
StyleSheet | None
|
An optional style sheet to apply before rendering |
None
|
to_top_left
|
bool
|
Whether to move the maps to the top left before rendering |
False
|
multi_pages
|
bool
|
Whether to render each map on a separate page.
Defaults to |
False
|
Examples:
from momapy.io import read
from momapy.rendering import render_maps
# Read multiple maps from files
result1 = read("path/to/map1.sbgn")
first_map = result1.obj
result2 = read("path/to/map2.sbgn")
second_map = result2.obj
# Render both maps to a multi-page PDF
render_maps([first_map, second_map], "output.pdf", multi_pages=True)