utils
Utility module for plotting reactions/compounds/networks dotfiles.
- rnets.plotter.utils.C_WHITE
Default white color.
- Type:
Color
- rnets.plotter.utils.C_BLACK
Default black color.
- Type:
Color
- rnets.plotter.utils.COLORSCH
Default colorscheme.
- Type:
sequence of
Color
- rnets.plotter.utils.GRAPH_ATTR_DEF
Default graph global attributes.
- Type:
Opts
- rnets.plotter.utils.NODE_ATTR_DEF
Default node global attributes.
- Type:
Opts
- rnets.plotter.utils.EDCE_ATTR_DEF
Default edge global attributes.
- Type:
Opts
- rnets.plotter.utils.BOX_TMP
HTML box template.
- Type:
str
- rnets.plotter.utils.LABEL_TMP
HTML label template.
- Type:
str
- class rnets.plotter.utils.EdgeArgs(react: Reaction, width: float | None, color: Color | None, reversed: bool = False)[source]
Situational tuple to store the filter arguments for the filter function.
Notes
Internal use to avoid type checker complaints.
- class rnets.plotter.utils.EdgeCfg(opts: Opts | None = {'weight': '2.'}, solid_color: Color | None = None, width: float = 1.0, max_width: float | None = 5.0)[source]
Dot edge general configuration.
- opts
Dot additional global edge options. Defauts to None.
- Type:
dict of str as keys and str as values or None, optional
- solid_color
If set, all lines will be draw with that color, else, the color will be decided based on the reaction energy. Defaults to None.
- Type:
Color
or None, optional
- width
Minimum width of the edges. Defaults to 1..
- Type:
float, optional
- max_width
If set, the width or the arrows will be decided based on their kinetic constant (k, see
calc_pseudo_k_constant
), using width as the minimum width and this max_width as the maximum width, if None, all the arrows will be draw with constant width.- Type:
float or None, optional
- class rnets.plotter.utils.GraphCfg(opts: Opts | None = {'nodesep': '0.25', 'rankdir': 'TB', 'ranksep': '0.5'}, kind: str = 'digraph', colorscheme: Colorscheme = ((0.267004, 0.004874, 0.329415), (0.26851, 0.009605, 0.335427), (0.269944, 0.014625, 0.341379), (0.271305, 0.019942, 0.347269), (0.272594, 0.025563, 0.353093), (0.273809, 0.031497, 0.358853), (0.274952, 0.037752, 0.364543), (0.276022, 0.044167, 0.370164), (0.277018, 0.050344, 0.375715), (0.277941, 0.056324, 0.381191), (0.278791, 0.062145, 0.386592), (0.279566, 0.067836, 0.391917), (0.280267, 0.073417, 0.397163), (0.280894, 0.078907, 0.402329), (0.281446, 0.08432, 0.407414), (0.281924, 0.089666, 0.412415), (0.282327, 0.094955, 0.417331), (0.282656, 0.100196, 0.42216), (0.28291, 0.105393, 0.426902), (0.283091, 0.110553, 0.431554), (0.283197, 0.11568, 0.436115), (0.283229, 0.120777, 0.440584), (0.283187, 0.125848, 0.44496), (0.283072, 0.130895, 0.449241), (0.282884, 0.13592, 0.453427), (0.282623, 0.140926, 0.457517), (0.28229, 0.145912, 0.46151), (0.281887, 0.150881, 0.465405), (0.281412, 0.155834, 0.469201), (0.280868, 0.160771, 0.472899), (0.280255, 0.165693, 0.476498), (0.279574, 0.170599, 0.479997), (0.278826, 0.17549, 0.483397), (0.278012, 0.180367, 0.486697), (0.277134, 0.185228, 0.489898), (0.276194, 0.190074, 0.493001), (0.275191, 0.194905, 0.496005), (0.274128, 0.199721, 0.498911), (0.273006, 0.20452, 0.501721), (0.271828, 0.209303, 0.504434), (0.270595, 0.214069, 0.507052), (0.269308, 0.218818, 0.509577), (0.267968, 0.223549, 0.512008), (0.26658, 0.228262, 0.514349), (0.265145, 0.232956, 0.516599), (0.263663, 0.237631, 0.518762), (0.262138, 0.242286, 0.520837), (0.260571, 0.246922, 0.522828), (0.258965, 0.251537, 0.524736), (0.257322, 0.25613, 0.526563), (0.255645, 0.260703, 0.528312), (0.253935, 0.265254, 0.529983), (0.252194, 0.269783, 0.531579), (0.250425, 0.27429, 0.533103), (0.248629, 0.278775, 0.534556), (0.246811, 0.283237, 0.535941), (0.244972, 0.287675, 0.53726), (0.243113, 0.292092, 0.538516), (0.241237, 0.296485, 0.539709), (0.239346, 0.300855, 0.540844), (0.237441, 0.305202, 0.541921), (0.235526, 0.309527, 0.542944), (0.233603, 0.313828, 0.543914), (0.231674, 0.318106, 0.544834), (0.229739, 0.322361, 0.545706), (0.227802, 0.326594, 0.546532), (0.225863, 0.330805, 0.547314), (0.223925, 0.334994, 0.548053), (0.221989, 0.339161, 0.548752), (0.220057, 0.343307, 0.549413), (0.21813, 0.347432, 0.550038), (0.21621, 0.351535, 0.550627), (0.214298, 0.355619, 0.551184), (0.212395, 0.359683, 0.55171), (0.210503, 0.363727, 0.552206), (0.208623, 0.367752, 0.552675), (0.206756, 0.371758, 0.553117), (0.204903, 0.375746, 0.553533), (0.203063, 0.379716, 0.553925), (0.201239, 0.38367, 0.554294), (0.19943, 0.387607, 0.554642), (0.197636, 0.391528, 0.554969), (0.19586, 0.395433, 0.555276), (0.1941, 0.399323, 0.555565), (0.192357, 0.403199, 0.555836), (0.190631, 0.407061, 0.556089), (0.188923, 0.41091, 0.556326), (0.187231, 0.414746, 0.556547), (0.185556, 0.41857, 0.556753), (0.183898, 0.422383, 0.556944), (0.182256, 0.426184, 0.55712), (0.180629, 0.429975, 0.557282), (0.179019, 0.433756, 0.55743), (0.177423, 0.437527, 0.557565), (0.175841, 0.44129, 0.557685), (0.174274, 0.445044, 0.557792), (0.172719, 0.448791, 0.557885), (0.171176, 0.45253, 0.557965), (0.169646, 0.456262, 0.55803), (0.168126, 0.459988, 0.558082), (0.166617, 0.463708, 0.558119), (0.165117, 0.467423, 0.558141), (0.163625, 0.471133, 0.558148), (0.162142, 0.474838, 0.55814), (0.160665, 0.47854, 0.558115), (0.159194, 0.482237, 0.558073), (0.157729, 0.485932, 0.558013), (0.15627, 0.489624, 0.557936), (0.154815, 0.493313, 0.55784), (0.153364, 0.497, 0.557724), (0.151918, 0.500685, 0.557587), (0.150476, 0.504369, 0.55743), (0.149039, 0.508051, 0.55725), (0.147607, 0.511733, 0.557049), (0.14618, 0.515413, 0.556823), (0.144759, 0.519093, 0.556572), (0.143343, 0.522773, 0.556295), (0.141935, 0.526453, 0.555991), (0.140536, 0.530132, 0.555659), (0.139147, 0.533812, 0.555298), (0.13777, 0.537492, 0.554906), (0.136408, 0.541173, 0.554483), (0.135066, 0.544853, 0.554029), (0.133743, 0.548535, 0.553541), (0.132444, 0.552216, 0.553018), (0.131172, 0.555899, 0.552459), (0.129933, 0.559582, 0.551864), (0.128729, 0.563265, 0.551229), (0.127568, 0.566949, 0.550556), (0.126453, 0.570633, 0.549841), (0.125394, 0.574318, 0.549086), (0.124395, 0.578002, 0.548287), (0.123463, 0.581687, 0.547445), (0.122606, 0.585371, 0.546557), (0.121831, 0.589055, 0.545623), (0.121148, 0.592739, 0.544641), (0.120565, 0.596422, 0.543611), (0.120092, 0.600104, 0.54253), (0.119738, 0.603785, 0.5414), (0.119512, 0.607464, 0.540218), (0.119423, 0.611141, 0.538982), (0.119483, 0.614817, 0.537692), (0.119699, 0.61849, 0.536347), (0.120081, 0.622161, 0.534946), (0.120638, 0.625828, 0.533488), (0.12138, 0.629492, 0.531973), (0.122312, 0.633153, 0.530398), (0.123444, 0.636809, 0.528763), (0.12478, 0.640461, 0.527068), (0.126326, 0.644107, 0.525311), (0.128087, 0.647749, 0.523491), (0.130067, 0.651384, 0.521608), (0.132268, 0.655014, 0.519661), (0.134692, 0.658636, 0.517649), (0.137339, 0.662252, 0.515571), (0.14021, 0.665859, 0.513427), (0.143303, 0.669459, 0.511215), (0.146616, 0.67305, 0.508936), (0.150148, 0.676631, 0.506589), (0.153894, 0.680203, 0.504172), (0.157851, 0.683765, 0.501686), (0.162016, 0.687316, 0.499129), (0.166383, 0.690856, 0.496502), (0.170948, 0.694384, 0.493803), (0.175707, 0.6979, 0.491033), (0.180653, 0.701402, 0.488189), (0.185783, 0.704891, 0.485273), (0.19109, 0.708366, 0.482284), (0.196571, 0.711827, 0.479221), (0.202219, 0.715272, 0.476084), (0.20803, 0.718701, 0.472873), (0.214, 0.722114, 0.469588), (0.220124, 0.725509, 0.466226), (0.226397, 0.728888, 0.462789), (0.232815, 0.732247, 0.459277), (0.239374, 0.735588, 0.455688), (0.24607, 0.73891, 0.452024), (0.252899, 0.742211, 0.448284), (0.259857, 0.745492, 0.444467), (0.266941, 0.748751, 0.440573), (0.274149, 0.751988, 0.436601), (0.281477, 0.755203, 0.432552), (0.288921, 0.758394, 0.428426), (0.296479, 0.761561, 0.424223), (0.304148, 0.764704, 0.419943), (0.311925, 0.767822, 0.415586), (0.319809, 0.770914, 0.411152), (0.327796, 0.77398, 0.40664), (0.335885, 0.777018, 0.402049), (0.344074, 0.780029, 0.397381), (0.35236, 0.783011, 0.392636), (0.360741, 0.785964, 0.387814), (0.369214, 0.788888, 0.382914), (0.377779, 0.791781, 0.377939), (0.386433, 0.794644, 0.372886), (0.395174, 0.797475, 0.367757), (0.404001, 0.800275, 0.362552), (0.412913, 0.803041, 0.357269), (0.421908, 0.805774, 0.35191), (0.430983, 0.808473, 0.346476), (0.440137, 0.811138, 0.340967), (0.449368, 0.813768, 0.335384), (0.458674, 0.816363, 0.329727), (0.468053, 0.818921, 0.323998), (0.477504, 0.821444, 0.318195), (0.487026, 0.823929, 0.312321), (0.496615, 0.826376, 0.306377), (0.506271, 0.828786, 0.300362), (0.515992, 0.831158, 0.294279), (0.525776, 0.833491, 0.288127), (0.535621, 0.835785, 0.281908), (0.545524, 0.838039, 0.275626), (0.555484, 0.840254, 0.269281), (0.565498, 0.84243, 0.262877), (0.575563, 0.844566, 0.256415), (0.585678, 0.846661, 0.249897), (0.595839, 0.848717, 0.243329), (0.606045, 0.850733, 0.236712), (0.616293, 0.852709, 0.230052), (0.626579, 0.854645, 0.223353), (0.636902, 0.856542, 0.21662), (0.647257, 0.8584, 0.209861), (0.657642, 0.860219, 0.203082), (0.668054, 0.861999, 0.196293), (0.678489, 0.863742, 0.189503), (0.688944, 0.865448, 0.182725), (0.699415, 0.867117, 0.175971), (0.709898, 0.868751, 0.169257), (0.720391, 0.87035, 0.162603), (0.730889, 0.871916, 0.156029), (0.741388, 0.873449, 0.149561), (0.751884, 0.874951, 0.143228), (0.762373, 0.876424, 0.137064), (0.772852, 0.877868, 0.131109), (0.783315, 0.879285, 0.125405), (0.79376, 0.880678, 0.120005), (0.804182, 0.882046, 0.114965), (0.814576, 0.883393, 0.110347), (0.82494, 0.88472, 0.106217), (0.83527, 0.886029, 0.102646), (0.845561, 0.887322, 0.099702), (0.85581, 0.888601, 0.097452), (0.866013, 0.889868, 0.095953), (0.876168, 0.891125, 0.09525), (0.886271, 0.892374, 0.095374), (0.89632, 0.893616, 0.096335), (0.906311, 0.894855, 0.098125), (0.916242, 0.896091, 0.100717), (0.926106, 0.89733, 0.104071), (0.935904, 0.89857, 0.108131), (0.945636, 0.899815, 0.112838), (0.9553, 0.901065, 0.118128), (0.964894, 0.902323, 0.123941), (0.974417, 0.90359, 0.130215), (0.983868, 0.904867, 0.136897), (0.993248, 0.906157, 0.143936)), color_offset: tuple[float, float] = (0.0, 0.0), node: NodeCfg = ({'shape': 'plaintext', 'style': 'filled'}, '<\n<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0">\n <TR>\n <TD>{0}</TD>\n </TR>\n</TABLE>\n>\n', (0.0, 0.0, 0.0), (1.0, 1.0, 1.0), None), edge: EdgeCfg = ({'weight': '2.'}, None, 1.0, 5.0))[source]
Dot graph general configuration.
- opts
Dot additional global graph options. Defauts to None. Defaults to
GRAPH_ATTR_DEF
.- Type:
dict of str as keys and str as values or None, optional
- kind
Kind of the dotgraph. Defaults to digraph.
- Type:
str, optional
- colorscheme
Sequence of colors that will be interpolate to set the colors of the graph. See
interp_cs
. Defaults toCOLORSCH
.- Type:
sequence of floats
- color_offset
When using the energy of a node to decide its color, the offset to apply to norm. Should be a value between 0. and 1. Useful to avoid falling on the extremes of a predefined colorscheme. Defaults to (0., 0.)
- Type:
tuple of two floats, optional
- class rnets.plotter.utils.HTMLFormat(value, names=_not_given, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]
HTML format for strings.
- class rnets.plotter.utils.NodeCfg(opts: Opts | None = {'shape': 'plaintext', 'style': 'filled'}, box_tmp: str = '<\n<TABLE BORDER="0" CELLBORDER="0" CELLSPACING="0" CELLPADDING="0">\n <TR>\n <TD>{0}</TD>\n </TR>\n</TABLE>\n>\n', font_color: Color = (0.0, 0.0, 0.0), font_color_alt: Color | None = (1.0, 1.0, 1.0), font_lum_threshold: float | None = None)[source]
Dot node general configuration.
- opts
Dot additional global node options. Defauts to None.
- Type:
dict of str as keys and str as values or None, optional
- box_tmp
Box template. Should have two format modificators, the first consisting on the label and the second consisting on the background color. Defaults to
BOX_TMP
- Type:
str, optional
- font_color_alt
Alternative font color. If not None, would be used as the font color for dark background colors (see
calc_relative_luminance
)- Type:
Color
or None, optional
- font_lum_threshold
If
font_color_alt
is defined, the luminance threshold to use it instead offont_color
.- Type:
float on None, optional
- rnets.plotter.utils.apply_html_format(s: str, fs: set[FFlags]) str [source]
Given a set of
FFlags
apply it as HTML format labels to a string.- Parameters:
s (str) -- String to apply the format.
fs (set of
FFlags
) -- Set with the formats to apply.
- Returns:
with the applied HTML formats.
- Return type:
str
- rnets.plotter.utils.build_dotedge(o: str, t: str, opts: Opts | None = None, c: Color | None = None, w: float | None = None) Edge [source]
Build a dot
Edge
.- Parameters:
o (str) -- Origin node.
t (str) -- Target node.
opts (
Opts
or None, optional) -- Graphviz attributes of the edge. Defaults to None.c (
Color
or None, optional) -- Color of edge. Defaults to None.w (float or None, optional) -- Edge width. Defaults to None.
- Return type:
Edge
Note
None values will not be defined in the generated file and default Graphviz values will be used. Opts overrides color and width definitions.
- rnets.plotter.utils.build_dotedges(r: Reaction, width: float, color: Color | None = C_BLACK, reverse: bool = False) Iterator[Edge] [source]
Converts a Reaction into one or more dot
Edge
.- Parameters:
r (
Reaction
) -- Reaction to convert.width (float) -- Width of the reaction arrow.
color (
Color
, optional) -- Color of the arrow. Defaults toC_BLACK
.reverse (bool, optional) -- If True, invert the order of the reactants and the products.
- Returns:
Iterator with the generated dot
Edge
corresponding to theReaction
with the given width and color.- Return type:
Iterator[Edge]
- rnets.plotter.utils.build_dotnode(c: Compound, bc: Color = C_WHITE, fc: Color = C_BLACK) Node [source]
Creates a
Node
from aCompound
.- Parameters:
c (
Compound
) -- Compound to be coverted.bc (
Color
, optional) -- RGB color of the background. Defaults to white.fc (
Color
, optional) -- RGB color of the text. Defaults to black (C_BLACK
).
- Returns:
Dot node with the given font and background colors. Inherits applies the format flags and the dot opts in
Compound
.- Return type:
Node
Note
- To allow custom labels, this function will check for "label" in
Compound.opts
, if found, it will use it instead of the layer.
- rnets.plotter.utils.build_glob_opt(cfg: GraphCfg) OptsGlob | None [source]
Given a certain
GraphCfg
, build a dictionary containing the dot options for the graph, the node and the edges.- Parameters:
cfg (
GraphCfg
) -- Configuration to use to generate the dictionary.- Returns:
With the given dictionary. Using graph, node and edge as keys and their corresponding
Opts
as values. None: If no Opts are found.- Return type:
OptsGlob
- rnets.plotter.utils.build_node_box(s: str, fc: Color = C_BLACK, box_tmp: str = BOX_TMP) str [source]
Creates an string describing a colored-background HTML with a text label in the middle. This is the typical node representation of this code.
- Parameters:
- Returns:
HTML table with the given label, background color and text color.
- Return type:
str
Note
- Note that
Color
follows the colorsys representation, meaning that it consists of 3 float values ranging from [0, 1].
- rnets.plotter.utils.color_interp(norm_fn: Callable[[float], float], cs: Sequence[Color], offset: tuple[float, float] = (0., 0.), cspace: ColorSpace = 'lab') Callable[[float], Color] [source]
Given a reaction network and a sequence of colors, build a color interpolation function that converts the energy of a component inside the network to the corresponding color in the color sequence.
- Parameters:
n (
Network
) -- Reaction network.cs (sequence of
Color
) -- Sequence of colors to interpolate.offset (tuple of 2 float, optional) -- Minimum and maximum energy offsets to add to the minimum and maximum detected energies.
c_space (str) -- Colorspace in which the interpolation will be perform. Check
ColorSpace
for available values.
- Returns:
A function that takes a float as input an returns a
Color
as output.- Return type:
Callable[[float], Color]
Notes
- The normalizer is set for the input network and thus, if an energy
value that it is out of range is used as input, the normalization will follow the (under)overflow rules of
normalizer
.- I found that the offset is extremely useful to avoid very dark and very
bright zones of certain colorschemes.
- rnets.plotter.utils.fformat_to_html(f: FFlags) HTMLFormat [source]
Convert
FFlags
toHTMLFormat
.- Parameters:
f (
FFlags
) -- FFlags to convert.- Returns:
HTML format conversion.
- Return type:
- rnets.plotter.utils.gen_react_arrows(rt: Sequence[Compound], pt: Sequence[Compound]) Iterator[tuple[Compound, Compound]] [source]
Given a set of reactants and a set of products, generate an iterator that returns every react->product combination, skipping the ones containing a not visible
Compound
.- Parameters:
rt (sequence of
Compound
) -- Compounds acting as reactants.pt (sequence of
Compound
) -- Compounds acting as products.
- Returns:
A consumable iterator with all the (react, product) combinations excluding the ones with non visible compounds.
- Return type:
Iterator[tuple[Compound, Compound]]
Note
To avoid duplicated edges due to duplicated compounds, e.g. 2H + 2O -> 2H2O ((H,H,O,O), (H2O,H2O)), only the unique reactants and products will be taken into account.
- rnets.plotter.utils.nodecolor_sel(c_norm: Callable[[float], Color], fg_c: Color = C_BLACK, fg_alt: Color | None = None, lum_threshold: float | None = None) Callable[[float, Visibility], tuple[Color, Color]] [source]
Creates a function that takes an energy as input and returns the assigned color for the background of the node and the foreground.
- Parameters:
c_norm (Function taking a float as input and returns a
Color
) -- Color normalizer that will be used to compute the color of the node background. Seenetwork_color_enery_interp
.fg_c (
Color
, optional) -- Color of the text. Defaults toC_BLACK
.fg_alt (
Color
, optional) -- If set, alternativeColor
for the text if the luminance is below the a certain threshold. Defaults to None.lum_threshold (float, optional) -- If set, threshold of the luminance. If None, the default value in
color_sel_lum
will be used. This argument has no effect iffg_alt
is not defined. Ideally, a value between 0. and 1. Defaults to None.
- Returns:
A function that given a
Compound
returns a tuple of twoColor
s, the first being the background color and the second one being the color of the font.- Return type:
Callable(Compound) -> tuple[Color, Color]