def test_pyxdsm_case_reading(self): """ Writes a recorder file, and the XDSM writer makes the diagram based on the SQL file and not the Problem instance. """ from openmdao.recorders.sqlite_recorder import SqliteRecorder filename = 'xdsm_from_sql' case_recording_filename = filename + '.sql' prob = Problem() prob.model = model = SellarNoDerivatives() model.add_design_var('z', lower=np.array([-10.0, 0.0]), upper=np.array([10.0, 10.0]), indices=np.arange(2, dtype=int)) model.add_design_var('x', lower=0.0, upper=10.0) model.add_objective('obj') model.add_constraint('con1', equals=np.zeros(1)) model.add_constraint('con2', upper=0.0) recorder = SqliteRecorder(case_recording_filename) prob.driver.add_recorder(recorder) prob.setup(check=False) prob.final_setup() # Write output write_xdsm(case_recording_filename, filename=filename, out_format='tex', show_browser=False, quiet=QUIET) # Check if file was created self.assertTrue(os.path.isfile(case_recording_filename)) self.assertTrue(os.path.isfile('.'.join([filename, 'tex']))) # Check that there are no errors when running from the command line with a recording. check_call('openmdao xdsm --no_browser %s' % case_recording_filename)
def test_xdsmjs_right_outputs(self): """Makes XDSM for the Sellar problem""" filename = 'xdsmjs_outputs_on_the_right' prob = om.Problem() prob.model = model = SellarNoDerivatives() model.add_design_var('z', lower=np.array([-10.0, 0.0]), upper=np.array([10.0, 10.0]), indices=np.arange(2, dtype=int)) model.add_design_var('x', lower=0.0, upper=10.0) model.add_objective('obj') model.add_constraint('con1', equals=np.zeros(1)) model.add_constraint('con2', upper=0.0) prob.setup() prob.final_setup() msg = 'Right side outputs not implemented for XDSMjs.' # Write output with assert_warning(Warning, msg): om.write_xdsm(prob, filename=filename, out_format='html', show_browser=SHOW, quiet=QUIET, output_side='right') # Check if file was created self.assertTrue(os.path.isfile('.'.join([filename, 'html'])))
def test_pyxdsm_solver(self): import openmdao.api as om out_format = PYXDSM_OUT prob = om.Problem() prob.model = model = SellarNoDerivatives() model.nonlinear_solver = om.NonlinearBlockGS() prob.driver = om.ScipyOptimizeDriver() prob.model.add_objective('obj') prob.setup() prob.run_model() filename = 'pyxdsm_solver' # Write output om.write_xdsm(prob, filename=filename, out_format=out_format, quiet=QUIET, show_browser=SHOW, include_solver=True) # Check if file was created self.assertTrue(os.path.isfile('.'.join([filename, out_format]))) filename = 'pyxdsm_solver2' # Write output om.write_xdsm(prob, filename=filename, out_format=out_format, quiet=QUIET, show_browser=SHOW, include_solver=True, recurse=False) # Check if file was created self.assertTrue(os.path.isfile('.'.join([filename, out_format])))
def test_xdsmjs(self): """ Makes XDSMjs input file for the Sellar problem. Data is in a separate JSON file. """ filename = 'xdsmjs' # this name is needed for XDSMjs prob = Problem() prob.model = model = SellarNoDerivatives() model.add_design_var('z', lower=np.array([-10.0, 0.0]), upper=np.array([10.0, 10.0]), indices=np.arange(2, dtype=int)) model.add_design_var('x', lower=0.0, upper=10.0) model.add_objective('obj') model.add_constraint('con1', equals=np.zeros(1)) model.add_constraint('con2', upper=0.0) prob.setup(check=False) prob.final_setup() # Write output write_xdsm(prob, filename=filename, out_format='html', subs=(), show_browser=False, quiet=True, embed_data=False) # Check if file was created self.assertTrue(os.path.isfile('.'.join([filename, 'json']))) self.assertTrue(os.path.isfile('.'.join([filename, 'html'])))
def test_pyxdsm_sellar(self): """Makes XDSM for the Sellar problem""" filename = FILENAME + '0' prob = Problem() prob.model = model = SellarNoDerivatives() model.add_design_var('z', lower=np.array([-10.0, 0.0]), upper=np.array([10.0, 10.0]), indices=np.arange(2, dtype=int)) model.add_design_var('x', lower=0.0, upper=10.0) model.add_objective('obj') model.add_constraint('con1', equals=np.zeros(1)) model.add_constraint('con2', upper=0.0) prob.setup(check=False) prob.final_setup() # Write output write_xdsm(prob, filename=filename, out_format='tex', quiet=True, show_browser=False) # Check if file was created self.assertTrue(os.path.isfile('.'.join([filename, 'tex'])))
def test_pyxdsm_output_sides(self): """Makes XDSM for the Sellar problem""" p = om.Problem() p.model = model = SellarNoDerivatives() model.add_design_var('z', lower=np.array([-10.0, 0.0]), upper=np.array([10.0, 10.0]), indices=np.arange(2, dtype=int)) model.add_design_var('x', lower=0.0, upper=10.0) model.add_objective('obj') model.add_constraint('con1', equals=np.zeros(1)) model.add_constraint('con2', upper=0.0) p.setup() p.final_setup() # Write output (outputs on the left) filename = 'xdsm_outputs_on_the_left' write_xdsm(p, filename=filename, out_format=PYXDSM_OUT, show_browser=SHOW, quiet=QUIET, output_side='left') # Check if file was created self.assertTrue(os.path.isfile(filename + '.' + PYXDSM_OUT)) filename = 'xdsm_outputs_on_the_right' # Write output (all outputs on the right) write_xdsm(p, filename=filename, out_format=PYXDSM_OUT, show_browser=SHOW, quiet=QUIET, output_side='right') # Check if file was created self.assertTrue(os.path.isfile(filename + '.' + PYXDSM_OUT)) filename = 'xdsm_outputs_side_mixed' # Write output (outputs mixed) write_xdsm(p, filename=filename, out_format=PYXDSM_OUT, show_browser=SHOW, quiet=QUIET, output_side={'optimization': 'left', 'default': 'right'}) # Check if file was created self.assertTrue(os.path.isfile(filename + '.' + PYXDSM_OUT))
def test_pyxdsm_sellar_no_recurse(self): """Makes XDSM for the Sellar problem, with no recursion.""" filename = 'xdsm1' prob = om.Problem() prob.model = model = SellarNoDerivatives() model.add_design_var('z', lower=np.array([-10.0, 0.0]), upper=np.array([10.0, 10.0]), indices=np.arange(2, dtype=int)) model.add_design_var('x', lower=0.0, upper=10.0) model.add_objective('obj') model.add_constraint('con1', equals=np.zeros(1)) model.add_constraint('con2', upper=0.0) prob.setup() prob.final_setup() # Write output om.write_xdsm(prob, filename=filename, out_format=PYXDSM_OUT, show_browser=SHOW, recurse=False, quiet=QUIET) # Check if file was created self.assertTrue(os.path.isfile('.'.join([filename, PYXDSM_OUT])))
def test_xdsmjs_embeddable(self): """ Makes XDSMjs HTML file for the Sellar problem. The HTML file is embeddable (no head and body tags). """ filename = 'xdsmjs_embeddable' # this name is needed for XDSMjs prob = om.Problem() prob.model = model = SellarNoDerivatives() model.add_design_var('z', lower=np.array([-10.0, 0.0]), upper=np.array([10.0, 10.0]), indices=np.arange(2, dtype=int)) model.add_design_var('x', lower=0.0, upper=10.0) model.add_objective('obj') model.add_constraint('con1', equals=np.zeros(1)) model.add_constraint('con2', upper=0.0) prob.setup() prob.final_setup() # Write output om.write_xdsm(prob, filename=filename, out_format='html', subs=(), show_browser=SHOW, embed_data=True, embeddable=True) # Check if file was created self.assertTrue(os.path.isfile('.'.join([filename, 'html'])))
def test_feature_sellar(self): prob = om.Problem() prob.model = SellarNoDerivatives() prob.setup() prob.final_setup() om.view_connections(prob, outfile= "sellar_connections.html", show_browser=False)
def test_sellar(self): # Just tests Newton on Sellar with FD derivs. prob = Problem() prob.model = SellarNoDerivatives() prob.setup(check=False) prob.final_setup() # no output checking, just make sure no exceptions raised view_connections(prob, show_browser=False)
def test_no_setup_warning(self): prob = om.Problem() prob.model = SellarNoDerivatives() prob.setup() msg = "<model> <class SellarNoDerivatives>: Values will not be shown because final_setup has not been called yet." with assert_warning(om.OpenMDAOWarning, msg): om.view_connections(prob, outfile= "sellar_connections.html", show_values=True, show_browser=False)
def test_feature_sellar(self): import openmdao.api as om from openmdao.test_suite.components.sellar import SellarNoDerivatives prob = om.Problem() prob.model = SellarNoDerivatives() prob.setup() prob.final_setup() om.view_connections(prob, outfile="sellar_connections.html", show_browser=False)
def test_sellar(self): # Just tests Newton on Sellar with FD derivs. prob = Problem(model=SellarNoDerivatives(nonlinear_solver=NewtonSolver())) prob.setup(check=False) prob.run_model() assert_rel_error(self, prob['y1'], 25.58830273, .00001) assert_rel_error(self, prob['y2'], 12.05848819, .00001) # Make sure we aren't iterating like crazy self.assertLess(prob.model.nonlinear_solver._iter_count, 8)
def test_sellar(self): # Just tests Newton on Sellar with FD derivs. prob = om.Problem(model=SellarNoDerivatives(nonlinear_solver=om.NewtonSolver(solve_subsystems=False))) prob.setup() prob.run_model() assert_near_equal(prob.get_val('y1'), 25.58830273, .00001) assert_near_equal(prob.get_val('y2'), 12.05848819, .00001) # Make sure we aren't iterating like crazy self.assertLess(prob.model.nonlinear_solver._iter_count, 8)
def test_wrong_out_format(self): """Incorrect output format error.""" filename = 'xdsm_wrong_format' # this name is needed for XDSMjs prob = Problem() prob.model = SellarNoDerivatives() prob.setup(check=False) prob.final_setup() # no output checking, just make sure no exceptions raised with self.assertRaises(ValueError): write_xdsm(prob, filename=filename, out_format='jpg', subs=(), show_browser=SHOW)
def test_custom_writer(self): from openmdao.visualization.xdsm_viewer.xdsm_writer import XDSMjsWriter class CustomWriter(XDSMjsWriter): """Customized XDSM writer, based on the XDSMjs writer.""" @staticmethod def format_block(names, **kwargs): """This method is overwritten, to implement some different formatting.""" return [name.upper() for name in names] prob = om.Problem() prob.model = SellarNoDerivatives() prob.setup() prob.final_setup() my_writer = CustomWriter() filename = 'xdsm_custom_writer' # this name is needed for XDSMjs # Write output om.write_xdsm(prob, filename=filename, writer=my_writer, show_browser=SHOW) # Check if file was created self.assertTrue( os.path.isfile('.'.join([filename, my_writer.extension]))) # Check that error is raised in case of wrong writer type filename = 'xdsm_custom_writer2' # this name is needed for XDSMjs with self.assertRaises(TypeError): # Wrong type passed for writer om.write_xdsm(prob, filename=filename, writer=1, subs=(), show_browser=SHOW) # Check warning, if settings for custom writer are not found my_writer2 = CustomWriter(name='my_writer') filename = 'xdsm_custom_writer3' msg = 'Writer name "my_writer" not found, there will be no character ' \ 'substitutes used. Add "my_writer" to your settings, or provide a tuple for' \ 'character substitutes.' # Write output with assert_warning(Warning, msg): om.write_xdsm(prob, filename=filename, writer=my_writer2, show_browser=SHOW)
def test_sellar(self): prob = Problem(SellarNoDerivatives()).setup() iprof_mem.setup() # check that the callback has been registered as expected self.assertTrue(iprof_mem._registered) self.assertTrue(isinstance(iprof_mem._trace_memory, types.FunctionType)) self.assertTrue(isinstance(iprof_mem.mem_usage, types.FunctionType)) # can't check output (it comes at system exit) # just make sure no exceptions are raised iprof_mem.start() prob.run_model() iprof_mem.stop()
def test_no_indepvarcomps(self): p = om.Problem() p.model = model = SellarNoDerivatives() model.add_design_var('z', lower=np.array([-10.0, 0.0]), upper=np.array([10.0, 10.0]), indices=np.arange(2, dtype=int)) # model.add_design_var('x', lower=0.0, upper=10.0) model.add_objective('obj') model.add_constraint('con1', equals=np.zeros(1)) model.add_constraint('con2', upper=0.0) p.setup() p.final_setup() filename = 'pyxdsm_no_indepvarcomps' write_xdsm(p, filename=filename, out_format='pdf', show_browser=SHOW, quiet=True, include_indepvarcomps=False) self.assertTrue(os.path.isfile(filename + '.' + PYXDSM_OUT))
def test_xdsm_solver(self): import openmdao.api as om filename = 'xdsmjs_solver' out_format = 'html' p = om.Problem(model=SellarNoDerivatives()) p.model.nonlinear_solver = om.NonlinearBlockGS() p.driver = om.ScipyOptimizeDriver() p.model.add_objective('obj') p.setup() p.run_model() # Write output write_xdsm(p, filename=filename, out_format=out_format, show_browser=SHOW, include_solver=True) # Check if file was created self.assertTrue(os.path.isfile(filename + '.' + out_format))
def test_xdsm_solver(self): from openmdao.api import NonlinearBlockGS filename = 'xdsmjs_solver' out_format = 'html' prob = Problem(model=SellarNoDerivatives()) prob.model.nonlinear_solver = NonlinearBlockGS() prob.driver = ScipyOptimizeDriver() prob.model.add_objective('obj') prob.setup(check=False) prob.run_model() # Write output write_xdsm(prob, filename=filename, out_format=out_format, show_browser=SHOW, include_solver=True) # Check if file was created self.assertTrue(os.path.isfile('.'.join([filename, out_format])))
def test_pyxdsm_case_reading(self): """ Writes a recorder file, and the XDSM writer makes the diagram based on the SQL file and not the Problem instance. """ from openmdao.recorders.sqlite_recorder import SqliteRecorder filename = 'xdsm_from_sql' case_recording_filename = filename + '.sql' prob = Problem() prob.model = model = SellarNoDerivatives() model.add_design_var('z', lower=np.array([-10.0, 0.0]), upper=np.array([10.0, 10.0]), indices=np.arange(2, dtype=int)) model.add_design_var('x', lower=0.0, upper=10.0) model.add_objective('obj') model.add_constraint('con1', equals=np.zeros(1)) model.add_constraint('con2', upper=0.0) recorder = SqliteRecorder(case_recording_filename) prob.driver.add_recorder(recorder) prob.setup(check=False) prob.final_setup() # Write output msg = ( 'For SQL input the XDSM writer shows only the model hierarchy, ' 'and the driver, design variables and responses are not part of the ' 'diagram.') with assert_warning(Warning, msg): write_xdsm(case_recording_filename, filename=filename, out_format='tex', show_browser=False, quiet=QUIET) # Check if file was created self.assertTrue(os.path.isfile(case_recording_filename)) self.assertTrue(os.path.isfile('.'.join([filename, 'tex'])))
def test_pyxdsm_right_outputs(self): """Makes XDSM for the Sellar problem""" filename = 'xdsm_outputs_on_the_right' prob = Problem() prob.model = model = SellarNoDerivatives() model.add_design_var('z', lower=np.array([-10.0, 0.0]), upper=np.array([10.0, 10.0]), indices=np.arange(2, dtype=int)) model.add_design_var('x', lower=0.0, upper=10.0) model.add_objective('obj') model.add_constraint('con1', equals=np.zeros(1)) model.add_constraint('con2', upper=0.0) prob.setup(check=False) prob.final_setup() # Write output write_xdsm(prob, filename=filename, out_format='pdf', show_browser=False, quiet=QUIET, output_side='right') # Check if file was created self.assertTrue(os.path.isfile('.'.join([filename, 'tex']))) filename = 'xdsm_outputs_side_mixed' # Write output write_xdsm(prob, filename=filename, out_format='pdf', show_browser=False, quiet=QUIET, output_side={ 'optimization': 'left', 'default': 'right' }) # Check if file was created self.assertTrue(os.path.isfile('.'.join([filename, 'tex'])))
def test_pyxdsm_solver(self): from openmdao.api import NonlinearBlockGS filename = 'pyxdsm_solver' out_format = PYXDSM_OUT prob = Problem() prob.model = model = SellarNoDerivatives() model.nonlinear_solver = NonlinearBlockGS() prob.driver = ScipyOptimizeDriver() prob.setup(check=False) prob.run_model() # Write output write_xdsm(prob, filename=filename, out_format=out_format, quiet=QUIET, show_browser=False, include_solver=True) # Check if file was created self.assertTrue(os.path.isfile('.'.join([filename, out_format])))
""" Creates on output of the Sellar problem using XDSMjs. """ import numpy as np import openmdao.api as om from openmdao.test_suite.components.sellar import SellarNoDerivatives from omxdsm import write_xdsm if __name__ == '__main__': prob = om.Problem() prob.model = model = SellarNoDerivatives() model.add_design_var('z', lower=np.array([-10.0, 0.0]), upper=np.array([10.0, 10.0]), indices=np.arange(2, dtype=int)) model.add_design_var('x', lower=0.0, upper=10.0) model.add_objective('obj') model.add_constraint('con1', equals=np.zeros(1)) model.add_constraint('con2', upper=0.0) prob.setup() prob.final_setup() # Write output. write_xdsm(prob, filename='sellar_pyxdsm', out_format='html', show_browser=True, quiet=False, output_side='left')
def test_sellar(self): prob = Problem(SellarNoDerivatives()).setup() with iprof_mem.memtrace(min_mem=0.1): prob.run_model()