Skip to content

Commit

Permalink
Merge pull request #950 from naylor-b/viewer_discrete
Browse files Browse the repository at this point in the history
discrete vars now show up in view_model
  • Loading branch information
swryan committed May 31, 2019
2 parents 10004e5 + cc0b9d4 commit 21cba17
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 18 deletions.
33 changes: 33 additions & 0 deletions openmdao/core/tests/test_discrete.py
Expand Up @@ -17,6 +17,7 @@
from openmdao.test_suite.components.paraboloid import Paraboloid
from openmdao.test_suite.components.sellar import StateConnection, \
SellarDis1withDerivatives, SellarDis2withDerivatives
from openmdao.devtools.problem_viewer.problem_viewer import _get_viewer_data


class ModCompEx(ExplicitComponent):
Expand Down Expand Up @@ -525,6 +526,38 @@ def test_obj_pass(self):
self.assertEqual(prob['C3.y'].getval(), 40)
self.assertEqual(prob['C4.y'].getval(), 52)

def _var_iter(obj):
name = obj['name']
if 'children' in obj:
for c in obj['children']:
for vname in _var_iter(c):
if name:
yield '.'.join((name, vname))
else:
yield vname
else:
yield name

# add a test to see if discrete vars show up in view_model
data = _get_viewer_data(prob)
findvars = [
'indep.x',
'G.G1.C1_1.x',
'G.G1.C1_1.y',
'G.G1.C1_2.x',
'G.G1.C1_2.y',
'G.G2.C2_1.x',
'G.G2.C2_1.y',
'G.G2.C2_2.x',
'G.G2.C2_2.y',
'C3.x',
'C3.y',
'C4.x',
'C4.y',
]
vnames = list(_var_iter(data['tree']))
self.assertTrue(sorted(findvars), sorted(vnames))


class DiscreteFeatureTestCase(unittest.TestCase):
def test_feature_discrete(self):
Expand Down
48 changes: 30 additions & 18 deletions openmdao/devtools/problem_viewer/problem_viewer.py
Expand Up @@ -37,6 +37,27 @@
_IND = 4 # HTML indentation (spaces)


def _get_var_dict(system, typ, name):
if name in system._var_discrete[typ]:
meta = system._var_discrete[typ][name]
else:
meta = system._var_abs2meta[name]
name = system._var_abs2prom[typ][name]

var_dict = OrderedDict()
var_dict['name'] = name
if typ == 'input':
var_dict['type'] = 'param'
elif typ == 'output':
isimplicit = isinstance(system, ImplicitComponent)
var_dict['type'] = 'unknown'
var_dict['implicit'] = isimplicit

var_dict['dtype'] = type(meta['value']).__name__

return var_dict


def _get_tree_dict(system, component_execution_orders, component_execution_index, is_parallel=False):
"""Get a dictionary representation of the system hierarchy."""
tree_dict = OrderedDict()
Expand Down Expand Up @@ -64,21 +85,12 @@ def _get_tree_dict(system, component_execution_orders, component_execution_index

children = []
for typ in ['input', 'output']:
for ind, abs_name in enumerate(system._var_abs_names[typ]):
meta = system._var_abs2meta[abs_name]
name = system._var_abs2prom[typ][abs_name]

var_dict = OrderedDict()
var_dict['name'] = name
if typ == 'input':
var_dict['type'] = 'param'
elif typ == 'output':
isimplicit = isinstance(system, ImplicitComponent)
var_dict['type'] = 'unknown'
var_dict['implicit'] = isimplicit

var_dict['dtype'] = type(meta['value']).__name__
children.append(var_dict)
for abs_name in system._var_abs_names[typ]:
children.append(_get_var_dict(system, typ, abs_name))

for prom_name in system._var_discrete[typ]:
children.append(_get_var_dict(system, typ, prom_name))

else:
if isinstance(system, ParallelGroup):
is_parallel = True
Expand Down Expand Up @@ -188,7 +200,7 @@ def _get_viewer_data(data_source):
driver_options = {k: driver.options[k] for k in driver.options}
driver_opt_settings = None
if driver_type is 'optimization' and 'opt_settings' in dir(driver):
driver_opt_settings = driver.opt_settings
driver_opt_settings = driver.opt_settings

elif isinstance(data_source, Group):
if not data_source.pathname: # root group
Expand Down Expand Up @@ -276,8 +288,8 @@ def _get_viewer_data(data_source):
data_dict['connections_list'] = connections_list
data_dict['abs2prom'] = root_group._var_abs2prom

data_dict['driver'] = {'name': driver_name, 'type': driver_type,
'options': driver_options, 'opt_settings': driver_opt_settings}
data_dict['driver'] = {'name': driver_name, 'type': driver_type,
'options': driver_options, 'opt_settings': driver_opt_settings}
data_dict['design_vars'] = root_group.get_design_vars()
data_dict['responses'] = root_group.get_responses()

Expand Down

0 comments on commit 21cba17

Please sign in to comment.