mirror of
https://github.com/gsi-upm/soil
synced 2024-11-14 15:32:29 +00:00
70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
import os
|
|
import networkx as nx
|
|
from server import VisualizationElement
|
|
from soil.simulation import SoilSimulation
|
|
from xml.etree import ElementTree
|
|
|
|
|
|
class Model():
|
|
|
|
def __init__(self, dump=True, dir_path='output'):
|
|
self.name = 'soil'
|
|
self.dump = dump
|
|
self.dir_path = dir_path
|
|
|
|
def run(self, config):
|
|
name = config['name']
|
|
print('Using config(s): {name}'.format(name=name))
|
|
|
|
sim = SoilSimulation(**config)
|
|
sim.dir_path = os.path.join(self.dir_path, name)
|
|
sim.dump = self.dump
|
|
|
|
print('Dumping results to {} : {}'.format(sim.dir_path, sim.dump))
|
|
|
|
sim.run_simulation()
|
|
|
|
|
|
def get_trial(self, name, trial):
|
|
graph = nx.read_gexf(os.path.join(self.dir_path, name, '{}_trial_{}.gexf'.format(name, trial)))
|
|
|
|
attributes = self.get_attributes(os.path.join(self.dir_path, name, '{}_trial_{}.gexf'.format(name, trial)))
|
|
json = {}
|
|
json['graph'] = nx.node_link_data(graph)
|
|
json['models'] = attributes
|
|
return json
|
|
|
|
def reset(self):
|
|
pass
|
|
|
|
def get_attributes(self, path_gexf):
|
|
attributes = {}
|
|
tree = ElementTree.parse(path_gexf)
|
|
root = tree.getroot()
|
|
|
|
ns = { 'gexf': 'http://www.gexf.net/1.2draft' }
|
|
|
|
for mode in root[0].findall('gexf:attributes', ns):
|
|
attributes[mode.attrib['mode']] = []
|
|
for attribute in mode:
|
|
values = {
|
|
'id' : attribute.attrib['id'],
|
|
'title' : attribute.attrib['title'],
|
|
'type' : attribute.attrib['type']
|
|
}
|
|
attributes[mode.attrib['mode']].append(values)
|
|
|
|
return attributes
|
|
|
|
|
|
class GraphVisualization(VisualizationElement):
|
|
package_includes = []
|
|
|
|
# TODO: esta por definir todos los ajustes de simulacion
|
|
def __init__(self, params=None):
|
|
new_element = ("new funcion()")
|
|
self.js_code = "elements.push(" + new_element + ");"
|
|
|
|
def render(self, model):
|
|
pass
|