MCPcopy Create free account
hub / github.com/audeering/opensmile / generate_dot_file

Function generate_dot_file

scripts/conf2dot.py:122–193  ·  view source on GitHub ↗
(sections: List[Section], f, omit_levels=False)

Source from the content-addressed store, hash-verified

120
121
122def generate_dot_file(sections: List[Section], f, omit_levels=False):
123 def is_data_memory_reader(property_name: str, section: Section) -> bool:
124 if property_name.endswith(".dmLevel"):
125 if property_name.lower().find("reader") != -1:
126 return True
127 elif property_name.lower().find("writer") == -1:
128 print("Warning: property {} of component {}:{} appears to reference a data memory level but could not be interpreted as reading or writing.".format(property_name, section.name, section.type))
129 return False
130 def is_data_memory_writer(property_name: str, section: Section) -> bool:
131 if property_name.endswith(".dmLevel"):
132 if property_name.lower().find("writer") != -1:
133 return True
134 elif property_name.lower().find("reader") == -1:
135 print("Warning: property {} of component {}:{} appears to reference a data memory level but could not be interpreted as reading or writing.".format(property_name, section.name, section.type))
136 return False
137 def get_levels(property_value: str) -> List[str]:
138 if isinstance(property_value, str):
139 return [property_value]
140 elif isinstance(property_value, list):
141 return property_value
142
143 components = [(section.name, section.type) for section in sections.values() if section.type != "cComponentManager"]
144 levels = set()
145 reads = []
146 writes = []
147
148 for section in sections.values():
149 for property_name, property_value in section.properties.items():
150 if is_data_memory_reader(property_name, section):
151 l = get_levels(property_value)
152 levels.update(l)
153 for level in l:
154 reads.append((section.name, level))
155 elif is_data_memory_writer(property_name, section):
156 l = get_levels(property_value)
157 levels.update(l)
158 for level in l:
159 writes.append((section.name, level))
160
161 #for section in sections.values():
162 # for property_name, property_value in section.properties.items():
163 # if not is_data_memory_reader(property_name, section) and not is_data_memory_writer(property_name, section):
164 # if not levels.isdisjoint(get_levels(property_value)):
165 # print("Warning: property {} = {} of component {}:{} appears to reference a data memory level but was not recognized as such.".format(property_name, property_value, section.name, section.type))
166
167 f.write("digraph G {\n")
168 for (component_name, component_type) in components:
169 f.write(' "nodeComponent' + component_name + '" [\n')
170 f.write(' label = "' + component_name + "\\n" + component_type + '"\n')
171 f.write(' shape = "box"\n')
172 f.write(' fillcolor = "gray85"\n')
173 f.write(' style = "filled"\n')
174 f.write(" ];\n")
175 if not omit_levels:
176 for level in levels:
177 f.write(' "nodeLevel' + level + '" [\n')
178 f.write(' label = "' + level + '"\n')
179 f.write(' shape = "ellipse"\n')

Callers 1

mainFunction · 0.85

Calls 3

is_data_memory_readerFunction · 0.85
get_levelsFunction · 0.85
is_data_memory_writerFunction · 0.85

Tested by

no test coverage detected