Source code for spinn_front_end_common.interface.interface_functions.database_interface
# utilities imports
from spinn_utilities.progress_bar import ProgressBar
# front end common imports
from spinn_front_end_common.utilities.database import DatabaseWriter
[docs]class DatabaseInterface(object):
""" Writes a database of the graph(s) and other information
"""
__slots__ = [
# the database writer object
"_writer",
# True if the end user has asked for the database to be written
"_user_create_database",
# True if the network is computed to need the database to be written
"_needs_database"
]
def __init__(self):
self._writer = None
self._user_create_database = None
self._needs_database = None
def __call__(
self, machine_graph, user_create_database, tags,
runtime, machine, time_scale_factor, machine_time_step,
placements, routing_infos, router_tables, database_directory,
create_atom_to_event_id_mapping=False, application_graph=None,
graph_mapper=None):
self._writer = DatabaseWriter(database_directory)
self._user_create_database = user_create_database
# add database generation if requested
self._needs_database = self._writer.auto_detect_database(
machine_graph)
if self.needs_database:
with self._writer as w, ProgressBar(9, "Creating database") as p:
w.add_system_params(
time_scale_factor, machine_time_step, runtime)
p.update()
w.add_machine_objects(machine)
p.update()
if application_graph is not None \
and application_graph.n_vertices:
w.add_application_vertices(application_graph)
p.update()
w.add_vertices(machine_graph, graph_mapper, application_graph)
p.update()
w.add_placements(placements)
p.update()
w.add_routing_infos(routing_infos, machine_graph)
p.update()
w.add_routing_tables(router_tables)
p.update()
w.add_tags(machine_graph, tags)
p.update()
if (graph_mapper is not None
and application_graph is not None
and create_atom_to_event_id_mapping):
w.create_atom_to_event_id_mapping(
graph_mapper=graph_mapper,
application_graph=application_graph,
machine_graph=machine_graph,
routing_infos=routing_infos)
p.update()
return self, self.database_file_path
@property
def needs_database(self):
return ((self._user_create_database == "None" and self._needs_database)
or self._user_create_database == "True")
@property
def database_file_path(self):
if self.needs_database:
return self._writer.database_path
return None