def test_run(self): comp = Component() try: comp.run() except NotImplementedError as err: self.assertEqual(str(err), ".execute") else: self.fail('expected NotImplementedError')
def __init__(self): """ OpenMDAO component to wrap finance model of the NREL Cost and Scaling Model (csmFinance.py) """ Component.__init__(self) # controls what happens if derivatives are missing self.missing_deriv_policy = "assume_zero"
def __init__(self): ''' Initial computation of the costs for the wind turbine gearbox component. ''' Component.__init__(self) #controls what happens if derivatives are missing self.missing_deriv_policy = 'assume_zero'
def __init__(self): """ OpenMDAO component to wrap O&M model of the NREL _cost and Scaling model data (csmOM.py). """ Component.__init__(self) #controls what happens if derivatives are missing self.missing_deriv_policy = 'assume_zero'
def test_driver(self): # Ensure we can't add a Driver to a component that is not an Assembly. comp = Component() try: comp.add('driver', Driver()) except Exception as err: self.assertEqual(str(err), "A Driver may only be added to an Assembly") pass
def __init__(self): """ OpenMDAO component to wrap BOS model of the NREL _cost and Scaling Model (csmBOS.py) """ #super(bos_csm_component, self).__init__() #update for FUSED - not recognizing bos_csm_component super due to decorator Component.__init__(self) #controls what happens if derivatives are missing self.missing_deriv_policy = 'assume_zero'
def setUp(self): """this setup function will be called before each test in this class""" self.hobj = Component() self.hobj.add('arr1', Array(array([98.9]), iotype='in', units='ft')) self.hobj.add('arr2', Array(array([13.2]), iotype='out', units='inch')) self.hobj.add('arr3', Array(iotype='in', units='kg', desc='stuff')) self.hobj.arr1 = [1.0, 2.0, 3.0] self.hobj.arr2 = [[1., 2.], [3., 4.]] self.hobj.arr3 = [1.1]
def test_illegal_directory(self): logging.debug('') logging.debug('test_bad_directory') try: # Set an illegal execution directory, verify error. comp = Component(directory='/illegal') comp.cpath_updated() except ValueError, exc: msg = ": Illegal path '/illegal', not a descendant of" self.assertEqual(str(exc)[:len(msg)], msg)
def test_bad_new_directory(self): logging.debug('') logging.debug('test_bad_new_directory') comp = Component() comp.directory = '/illegal' try: comp.run() except ValueError, exc: msg = ": Illegal path '/illegal', not a descendant of" self.assertEqual(str(exc)[:len(msg)], msg)
def __init__(self, ssfile=None): """ OpenMDAO component to wrap ECN Offshore O&M Excel Model (ecnomXLS.py). Call __init__ with a file name to override default ECN spreadsheet file """ Component.__init__(self) #open excel account self.ecnxls = ecnomXLS(debug=False) self.ecnxls.ssopen(ssfile)
def test_component(self): comp = set_as_top(self.factory.create('ASTestComp')) comp.set('x', 6) comp.set('y', 7) path = 'output' with comp.dir_context: with open(path, 'w') as out: out.write('Hello world!') comp.set('in_file', FileRef(path, comp)) with comp.dir_context: os.remove(path) comp.run() self.assertEqual(comp.get('z'), 42.) with comp.get('out_file').open() as inp: data = inp.read() self.assertEqual(data, 'Hello world!') before = self.get_state(comp, 'the_obj', comp._client) state_file = 'state.pickle' try: comp.save(state_file) restored = Component.load(state_file) after = self.get_state(restored, 'the_obj', restored._client) restored.pre_delete() self.assertEqual(after, before) finally: os.remove(state_file) os.remove('AS-the_obj.in_file.dat') os.remove('AS-the_obj.out_file.dat') comp.pre_delete() comp = set_as_top(self.factory.create('ASTestComp')) comp.__del__()
def test_wrapper(self): # Test that wrapping via passthroughs to proxy traits works. top = set_as_top(Wrapper()) expected = [ '%s.FloatProxy' % __name__, 'openmdao.main.datatypes.float.Float', 'openmdao.main.variable.Variable', 'traits.trait_handlers.TraitType', 'traits.trait_handlers.BaseTraitHandler', '__builtin__.object' ] self.assertEqual(top.get_trait_typenames('x'), expected) for varname in ('x', 'comp.x', 'y', 'comp.y', 'z', 'comp.z'): self.assertEqual(top.get(varname), 0.) top.set('x', 6) top.set('y', 7) top.run() self.assertEqual(top.get('x'), 6.) self.assertEqual(top.get('comp.x'), 6.) self.assertEqual(top.get('y'), 7.) self.assertEqual(top.get('comp.y'), 7.) self.assertEqual(top.get('z'), 42.) self.assertEqual(top.get('comp.z'), 42.) top.set('x', 7) top.set('y', 8) top.run() self.assertEqual(top.get('x'), 7.) self.assertEqual(top.get('comp.x'), 7.) self.assertEqual(top.get('y'), 8.) self.assertEqual(top.get('comp.y'), 8.) self.assertEqual(top.get('z'), 56.) self.assertEqual(top.get('comp.z'), 56.) egg_info = top.save_to_egg('Top', 'v1') try: egg = Component.load_from_eggfile(egg_info[0]) self.assertEqual(egg.get('x'), 7.) self.assertEqual(egg.get('comp.x'), 7.) self.assertEqual(egg.get('y'), 8.) self.assertEqual(egg.get('comp.y'), 8.) self.assertEqual(egg.get('z'), 56.) self.assertEqual(egg.get('comp.z'), 56.) egg.set('x', 11) egg.set('y', 3) egg.run() self.assertEqual(egg.get('x'), 11.) self.assertEqual(egg.get('comp.x'), 11.) self.assertEqual(egg.get('y'), 3) self.assertEqual(egg.get('comp.y'), 3.) self.assertEqual(egg.get('z'), 33.) self.assertEqual(egg.get('comp.z'), 33.) finally: os.remove(egg_info[0]) shutil.rmtree('Top', onerror=onerror)
def test_save_bad_child(self): logging.debug('') logging.debug('test_save_bad_child') # Create orphan component. orphan = Component() code = 'self.model.save_to_egg(self.model.name, next_egg(),' \ ' py_dir=PY_DIR, child_objs=[orphan])' assert_raises(self, code, globals(), locals(), RuntimeError, 'Entry point object has no parent!') # Create non-orphan component that is not part of model. badboy = orphan.add('badboy', Component()) code = 'self.model.save_to_egg(self.model.name, next_egg(),' \ ' py_dir=PY_DIR, child_objs=[badboy])' assert_raises(self, code, globals(), locals(), RuntimeError, 'Egg_TestModel: badboy is not a child of Egg_TestModel.')
def test_replace(self): # Ensure we can replace a child component. c0 = Component() c1 = Component() c2 = Component() c0.add('c', c1) self.assertEqual(id(c0.c), id(c1)) c0.replace('c', c2) self.assertEqual(id(c0.c), id(c2))
def test_override(self): code = """\ class BadComponent(Component): run = Float(iotype='in') """ assert_raises(self, code, globals(), locals(), NameError, "BadComponent overrides attribute 'run' of Component", use_exec=True) code = "Component.add_class_trait('run', Float(iotype='in'))" assert_raises(self, code, globals(), locals(), NameError, "Would override attribute 'run' of Component") comp = Component() comp.add_trait('x', Float(iotype='in')) code = "comp.add_trait('run', Float(iotype='in'))" assert_raises(self, code, globals(), locals(), NameError, "Would override attribute 'run' of Component")
def setUp(self): """this setup function will be called before each test in this class""" self.hobj = Component() self.hobj.add('arr1',Array(array([98.9]), iotype='in', units='ft')) self.hobj.add('arr2', Array(array([13.2]), iotype='out', units='inch')) self.hobj.add('arr3', Array(iotype='in', units='kg', desc='stuff')) self.hobj.arr1 = [1.0, 2.0, 3.0] self.hobj.arr2 = [[1.,2.],[3.,4.]] self.hobj.arr3 = [1.1]
def test_file_in_place_of_directory(self): logging.debug('') logging.debug('test_file_in_place_of_directory') # Create a plain file. directory = 'plain_file' if os.path.exists(directory): os.remove(directory) out = open(directory, 'w') out.write('Hello world!\n') out.close() try: # Set execution directory to plain file. comp = Component(directory=directory) comp.tree_rooted() except ValueError, exc: path = os.path.join(os.getcwd(), directory) self.assertEqual(str(exc), ": Execution directory path '%s' is not a directory." % path)
def test_file_in_place_of_directory(self): logging.debug('') logging.debug('test_file_in_place_of_directory') # Create a plain file. directory = 'plain_file' if os.path.exists(directory): os.remove(directory) out = open(directory, 'w') out.write('Hello world!\n') out.close() try: # Set execution directory to plain file. comp = Component(directory=directory) comp.tree_rooted() except ValueError, exc: path = os.path.join(os.getcwd(), directory) self.assertEqual( str(exc), ": Execution directory path '%s' is not a directory." % path)
def test_file_in_place_of_directory(self): logging.debug("") logging.debug("test_file_in_place_of_directory") # Create a plain file. directory = "plain_file" if os.path.exists(directory): os.remove(directory) out = open(directory, "w") out.write("Hello world!\n") out.close() try: # Set execution directory to plain file. comp = Component() comp.directory = directory comp.cpath_updated() except ValueError, exc: path = os.path.join(os.getcwd(), directory) if sys.platform == "win32": path = path.lower() self.assertEqual(str(exc), ": Execution directory path '%s' is not a directory." % path)
def test_protected_directory(self): if sys.platform == 'win32': raise SkipTest("Windows box has permission problems with this test") logging.debug('') logging.debug('test_protected_directory') # Create a protected directory. directory = 'protected' if os.path.exists(directory): os.rmdir(directory) os.mkdir(directory) os.chmod(directory, 0) exe_dir = os.path.join(directory, 'xyzzy') try: # Attempt auto-creation of execution directory in protected area. comp = Component(directory=exe_dir) comp.cpath_updated() except OSError, exc: msg = ": Can't create execution directory" self.assertEqual(str(exc)[:len(msg)], msg)
def load_master(self): f = open(self.master_input_file,'r') loaded = json.load(f) self.add('vtrees_in',Component()) for name, comp in loaded.iteritems(): decoded = self.decode_json(comp) print 'loading', name vt = self.load_vartree(decoded) self.vtrees_in.add(name, vt)
def test_component(self): logging.debug('') logging.debug('test_component') # We should get version 0.2 (with directory 'floyd'). comp = set_as_top(self.factory.create('ASTestComp')) comp.set('x', 6) comp.set('y', 7) comp.set('obj_input.tof', 2.781828) comp.set('obj_input.subobj.sof', 3.14159) path = 'output' with comp.dir_context: with open(path, 'w') as out: out.write('Hello world!') comp.set('in_file', FileRef(path, comp)) with comp.dir_context: os.remove(path) comp.run() exe_dir = comp.get('exe_dir') if sys.platform == 'win32': expected = r'floyd\\ASTestComp' # Odd that backslash is repeated. else: expected = os.path.join('floyd', 'ASTestComp') print 'exe_dir', exe_dir print 'expected', expected self.assertTrue(exe_dir.endswith(expected)) self.assertEqual(comp.get('z'), 42.) self.assertEqual(comp.get('obj_output.tof'), 2.781828) self.assertEqual(comp.get('obj_output.subobj.sof'), 3.14159) with comp.get('out_file').open() as inp: data = inp.read() self.assertEqual(data, 'Hello world!') result_b = comp.float_method() before = self.get_state(comp, 'the_obj', comp._client) state_file = 'state.pickle' try: comp.save(state_file) restored = Component.load(state_file) result_a = restored.float_method() after = self.get_state(restored, 'the_obj', restored._client) restored.pre_delete() self.assertEqual(result_a, result_b) self.compare_states(before, after) finally: os.remove(state_file) os.remove('AS-the_obj.in_file.dat') os.remove('AS-the_obj.out_file.dat') comp.pre_delete()
def test_mimic(self): # Ensure we can mimic a driver. top = Assembly() top.add('c1', Component()) top.add('c2', Component()) top.driver.workflow.add(('c1', 'c2')) top.driver.printvars = ['c1.force_execute', 'c2.force_execute'] recorder1 = FakeRecorder() recorder2 = FakeRecorder() top.driver.recorders = [recorder1, recorder2] workflow_id = id(top.driver.workflow) new_driver = Driver() new_id = id(new_driver) self.assertNotEqual(new_id, id(top.driver)) top.replace('driver', new_driver) self.assertEqual(new_id, id(top.driver)) self.assertEqual(workflow_id, id(top.driver.workflow)) self.assertEqual(top.driver.printvars, ['c1.force_execute', 'c2.force_execute']) self.assertEqual(top.driver.recorders, [recorder1, recorder2])
def test_wrapper(self): # Test that wrapping via passthroughs to proxy traits works. top = set_as_top(Wrapper()) expected = [ "%s.FloatProxy" % __name__, "openmdao.main.datatypes.float.Float", "openmdao.main.variable.Variable", "traits.trait_handlers.TraitType", "traits.trait_handlers.BaseTraitHandler", "__builtin__.object", ] self.assertEqual(top.get_trait_typenames("x"), expected) for varname in ("x", "comp.x", "y", "comp.y", "z", "comp.z"): self.assertEqual(top.get(varname), 0.0) top.set("x", 6) top.set("y", 7) top.run() self.assertEqual(top.get("x"), 6.0) self.assertEqual(top.get("comp.x"), 6.0) self.assertEqual(top.get("y"), 7.0) self.assertEqual(top.get("comp.y"), 7.0) self.assertEqual(top.get("z"), 42.0) self.assertEqual(top.get("comp.z"), 42.0) egg_info = top.save_to_egg("Top", "v1") try: egg = Component.load_from_eggfile(egg_info[0]) self.assertEqual(egg.get("x"), 6.0) self.assertEqual(egg.get("comp.x"), 6.0) self.assertEqual(egg.get("y"), 7.0) self.assertEqual(egg.get("comp.y"), 7.0) self.assertEqual(egg.get("z"), 42.0) self.assertEqual(egg.get("comp.z"), 42.0) egg.set("x", 11) egg.set("y", 3) egg.run() self.assertEqual(egg.get("x"), 11.0) self.assertEqual(egg.get("comp.x"), 11.0) self.assertEqual(egg.get("y"), 3) self.assertEqual(egg.get("comp.y"), 3.0) self.assertEqual(egg.get("z"), 33.0) self.assertEqual(egg.get("comp.z"), 33.0) finally: os.remove(egg_info[0]) shutil.rmtree("Top", onerror=onerror)
def test_remove(self): top = Assembly() g = top._depgraph.component_graph() comps = [name for name in g] self.assertEqual(comps, ['driver']) top.add('comp', Component()) g = top._depgraph.component_graph() comps = [name for name in g] self.assertEqual(set(comps), set(['driver', 'comp'])) top.remove('comp') g = top._depgraph.component_graph() comps = [name for name in g] self.assertEqual(comps, ['driver'])
def test_basic(self): top = set_as_top(Assembly()) box = top.add('box', Component()) box.add('geo', VarTree(GeomData(13, 17, 3), iotype='in')) self.assertTrue(box.geo.points.shape == (13, 3)) self.assertTrue(box.geo.facets.shape == (17, 3)) self.assertTrue(issubclass(box.geo.facets.dtype.type, np.int)) box.add('geo2', VarTree(GeomData(13, 17, 4), iotype='out')) self.assertTrue(box.geo2.facets.shape == (17, 4)) try: box.geo = GeomData(3, 4, 5) except ValueError, err: msg = 'facet size must be either 3 or 4' self.assertEqual(str(err), msg)
def configure(self): self.add('vtrees', Component()) self.vtrees.add('wt', WindTurbineDescriptionVT()) self.vtrees.wt.turbine_name = 'DTU 10MW RWT' self.vtrees.add('machine_type', VarSpeedVarPitch()) self.vtrees.machine_type.ratedPower = 10.e7 self.vtrees.machine_type.minOmega = 6. self.vtrees.machine_type.maxOmega = 9.6 self.vtrees.machine_type.Vin = 4. self.vtrees.machine_type.Vout = 25. self.vtrees.machine_type.orientation = 'upwind' self.vtrees.machine_type.wind_class = 'IEC Class 1A' self.vtrees.add('rotor', RotorVT()) self.vtrees.rotor.hub_height = 119. self.vtrees.rotor.diameter = 178.332 self.vtrees.rotor.nb = 3 self.vtrees.rotor.cone_angle = 2.5 self.vtrees.rotor.tilt_angle = 5. self.vtrees.rotor.mass = 227962. self.vtrees.rotor.overhang = 7.1 self.vtrees.add('blade', BladeVT()) self.vtrees.blade.airfoils = [ 'cylinder', 'FFA-W3-480GF', 'FFA-W3-360GF', 'FFA-W3-301', 'FFA-W3-241' ] self.vtrees.blade.length = 89.166 self.vtrees.blade.max_chord = 6.203 self.vtrees.blade.tip_chord = 1.23 self.vtrees.blade.root_chord = 5.38 self.vtrees.add('hub', HubVT()) self.vtrees.hub.diameter = 5.6 self.vtrees.add('nacelle', NacelleVT()) self.vtrees.nacelle.mass = 446036. self.vtrees.add('tower', TowerVT()) self.vtrees.tower.mass = 628442. self.vtrees.tower.height = 115.63 self.vtrees.tower.bottom_diameter = 8.3 self.vtrees.tower.top_diameter = 5.5 self.vtrees.add('airfoil_data', AirfoilDataArrayVT()) data = AirfoilDataVT() data.alpha = np.linspace(0, 20, 11) data.cl = 2. * np.pi * data.alpha * np.pi / 180. self.vtrees.airfoil_data.polars.append(data)
def test_component(self): logging.debug('') logging.debug('test_component') comp = set_as_top(self.factory.create('ASTestComp')) comp.set('x', 6) comp.set('y', 7) comp.set('obj_input.tof', 2.781828) comp.set('obj_input.subobj.sof', 3.14159) path = 'output' with comp.dir_context: with open(path, 'w') as out: out.write('Hello world!') comp.set('in_file', FileRef(path, comp)) with comp.dir_context: os.remove(path) comp.run() self.assertEqual(comp.get('z'), 42.) self.assertEqual(comp.get('obj_output.tof'), 2.781828) self.assertEqual(comp.get('obj_output.subobj.sof'), 3.14159) with comp.get('out_file').open() as inp: data = inp.read() self.assertEqual(data, 'Hello world!') result_b = comp.float_method() before = self.get_state(comp, 'the_obj', comp._client) state_file = 'state.pickle' try: comp.save(state_file) restored = Component.load(state_file) result_a = restored.float_method() after = self.get_state(restored, 'the_obj', restored._client) restored.pre_delete() self.assertEqual(result_a, result_b) self.compare_states(before, after) finally: os.remove(state_file) os.remove('AS-the_obj.in_file.dat') os.remove('AS-the_obj.out_file.dat') comp.pre_delete()
def test_checks(self): # Tests out the validity checks. # Test 1, add a driver to its own workflow try: self.model.driver.workflow.add('driver', check=True) except AttributeError, err: msg = 'You cannot add a driver to its own workflow' self.assertEqual(str(err), msg) else: self.fail('Expected AttributeError') # Test 2, add a comp that is out of scope. self.model.add('sub', Assembly()) self.model.sub.add('comp', Component()) try: self.model.driver.workflow.add('sub.comp', check=True) except AttributeError, err: msg = "Component 'sub.comp' is not in the scope of the top assembly." self.assertEqual(str(err), msg) else: self.fail('Expected AttributeError') # Test 3, add a comp that does not exist try: self.model.driver.workflow.add('stuff', check=True) except AttributeError, err: msg = "Component 'stuff' does not exist in the top assembly." self.assertEqual(str(err), msg) else:
def setUp(self): self.geomcomp = GeomComponent() self.tdir = tempfile.mkdtemp() comp = Component() self.base_inputs = set(comp.list_inputs()) self.base_outputs = set(comp.list_outputs())
def test_wrong_interface(self): try: self.sc.iterator = Component('dummy') except TypeError, exc: self.assertEqual( str(exc), ": iterator must provide interface 'ICaseIterator'")
class ArrayTestCase(unittest.TestCase): def setUp(self): """this setup function will be called before each test in this class""" self.hobj = Component() self.hobj.add('arr1', Array(array([98.9]), iotype='in', units='ft')) self.hobj.add('arr2', Array(array([13.2]), iotype='out', units='inch')) self.hobj.add('arr3', Array(iotype='in', units='kg', desc='stuff')) self.hobj.add('arr98', Array(iotype='in')) self.hobj.add('arr99', Array(iotype='in')) self.hobj.arr1 = [1.0, 2.0, 3.0] self.hobj.arr2 = [[1., 2.], [3., 4.]] self.hobj.arr3 = [1.1] self.hobj.arr98 = [[0., 1., 0.1944, 0.1944], [0., 33., 1., 0.]] self.hobj.arr99 = [[0, 1, 0.1944, 0.1944], [0, 0, 1, 0]] def tearDown(self): """this teardown function will be called after each test""" self.hobj = None def test_set_to_default(self): self.hobj.add('arr4', Array(iotype='in', units='kg')) self.assertTrue(all(array([]) == self.hobj.arr4)) self.hobj.arr4 = [6.5] self.assertEqual(6.5, self.hobj.arr4[0]) self.hobj.revert_to_defaults() self.assertTrue(all(array([98.9]) == self.hobj.arr1)) self.assertTrue(all(array([]) == self.hobj.arr4)) def test_assignment(self): # check starting value self.assertTrue(all(array([1., 2., 3.]) == self.hobj.arr1)) # check default value self.assertEqual([98.9], self.hobj.get_trait('arr1').trait_type.default_value) # use convert_units to perform unit conversion self.hobj.arr2 = convert_units(self.hobj.arr1, self.hobj.get_trait('arr1').units, 'inch') self.assertAlmostEqual(12., self.hobj.arr2[0], 5) self.assertAlmostEqual(24., self.hobj.arr2[1], 5) self.assertAlmostEqual(36., self.hobj.arr2[2], 5) def test_bogus_units(self): try: uf = Array([0.], iotype='in', units='bogus') except ValueError, err: self.assertEqual(str(err), "Units of 'bogus' are invalid") else:
def save_load(self): """ Save to egg and reload. """ global SOURCE_INIT, SINK_INIT # Verify initial state. self.assertEqual(SOURCE_INIT, True) self.assertEqual(SINK_INIT, True) self.assertNotEqual(self.model.Sink.text_data, self.model.Source.text_data) self.assertNotEqual(self.model.Sink.binary_data, self.model.Source.sub.binary_data) for path in EXTERNAL_FILES: path = os.path.join(self.model.Source.get_abs_directory(), path) if not os.path.exists(path): self.fail("pre-save path '%s' does not exist" % path) for i in range(3): self.assertEqual(self.model.Source.obj_list[i].data, i) self.assertEqual(self.model.Sink.executions, 0) # Save to egg. global OBSERVATIONS OBSERVATIONS = [] egg_info = self.model.save_to_egg(self.model.name, next_egg(), py_dir=PY_DIR, child_objs=self.child_objs, observer=observer) self.egg_name = egg_info[0] # Check observations. expected = [ ('add', 'EGG-INFO/PKG-INFO'), ('add', 'EGG-INFO/dependency_links.txt'), ('add', 'EGG-INFO/entry_points.txt'), ('add', 'EGG-INFO/not-zip-safe'), ('add', 'EGG-INFO/requires.txt'), ('add', 'EGG-INFO/openmdao_orphans.txt'), ('add', 'EGG-INFO/top_level.txt'), ('add', 'EGG-INFO/SOURCES.txt'), ('add', 'Egg_TestModel/Egg_TestModel.pickle'), ('add', 'Egg_TestModel/Egg_TestModel_loader.py'), ('add', 'Egg_TestModel/Oddball.pickle'), ('add', 'Egg_TestModel/Oddball_loader.py'), ('add', 'Egg_TestModel/Oddball_oddcomp.pickle'), ('add', 'Egg_TestModel/Oddball_oddcomp_loader.py'), ('add', 'Egg_TestModel/Oddball_oddcont.pickle'), ('add', 'Egg_TestModel/Oddball_oddcont_loader.py'), ('add', 'Egg_TestModel/Sink.pickle'), ('add', 'Egg_TestModel/Sink_loader.py'), ('add', 'Egg_TestModel/Source.pickle'), ('add', 'Egg_TestModel/Source/hello'), ('add', 'Egg_TestModel/Source/xyzzy'), ('add', 'Egg_TestModel/Source_loader.py'), ('add', 'Egg_TestModel/__init__.py'), ('add', 'Egg_TestModel/sub/data2'), ('add', 'Egg_TestModel/sub/data4'), ] # Add our file if we're not considered part of an egg. # Commenting out this if as a proposed fix from SET for our release testing problems. # if sys.modules[self.__module__].__file__.find('.egg') < 0: expected.append(('add', 'Egg_TestModel/test_egg_save.py')) expected.append(('complete', 'Egg_TestModel-1.2.3-py%d.%d.egg' % sys.version_info[:2])) if len(OBSERVATIONS) != len(expected): logging.debug('Observed, Expected') for i in range(max(len(OBSERVATIONS), len(expected))): if i < len(OBSERVATIONS): ob_state, ob_string, ffract, bfract = OBSERVATIONS[i] else: ob_state = '---' ob_string = '---' if i < len(expected): ex_state = expected[i][0] ex_string = expected[i][1] else: ex_state = '---' ex_string = '---' logging.debug('%s:%s\t%s:%s', ob_state, ob_string, ex_state, ex_string) self.assertEqual(len(OBSERVATIONS), len(expected)) for i, observation in enumerate(OBSERVATIONS): state, string, file_fraction, byte_fraction = observation self.assertEqual(state, expected[i][0]) if expected[i][1].endswith('.egg'): # Unique versions mess this up. self.assertEqual(string.startswith(self.model.name), True) self.assertEqual(string.endswith('.egg'), True) else: self.assertEqual(string.replace('\\', '/'), expected[i][1]) self.assertEqual(file_fraction, float(i) / float(len(expected) - 1)) # Run and verify correct operation. self.model.run() self.assertEqual(self.model.Sink.text_data, self.model.Source.text_data) self.assertEqual(True, all(self.model.Sink.binary_data == self.model.Source.sub.binary_data)) self.assertEqual(self.model.Sink.binary_file.binary, True) self.assertEqual(self.model.Sink.executions, 3) # Restore in test directory. orig_dir = os.getcwd() test_dir = 'EggTest' if os.path.exists(test_dir): shutil.rmtree(test_dir, onerror=onerror) os.mkdir(test_dir) os.chdir(test_dir) try: # Clear flags to detect if loading calls __init__. SOURCE_INIT = False SINK_INIT = False # Load from saved initial state in egg. self.model.pre_delete() egg_path = os.path.join('..', self.egg_name) OBSERVATIONS = [] self.model = Component.load_from_eggfile(egg_path, observer=observer) self.model.directory = os.path.join(os.getcwd(), self.model.name) # Check observations. expected = [ ('extract', 'EGG-INFO/PKG-INFO'), ('extract', 'EGG-INFO/dependency_links.txt'), ('extract', 'EGG-INFO/entry_points.txt'), ('extract', 'EGG-INFO/not-zip-safe'), ('extract', 'EGG-INFO/requires.txt'), ('extract', 'EGG-INFO/openmdao_orphans.txt'), ('extract', 'EGG-INFO/top_level.txt'), ('extract', 'EGG-INFO/SOURCES.txt'), ('extract', 'Egg_TestModel/Egg_TestModel.pickle'), ('extract', 'Egg_TestModel/Egg_TestModel_loader.py'), ('extract', 'Egg_TestModel/Oddball.pickle'), ('extract', 'Egg_TestModel/Oddball_loader.py'), ('extract', 'Egg_TestModel/Oddball_oddcomp.pickle'), ('extract', 'Egg_TestModel/Oddball_oddcomp_loader.py'), ('extract', 'Egg_TestModel/Oddball_oddcont.pickle'), ('extract', 'Egg_TestModel/Oddball_oddcont_loader.py'), ('extract', 'Egg_TestModel/Sink.pickle'), ('extract', 'Egg_TestModel/Sink_loader.py'), ('extract', 'Egg_TestModel/Source.pickle'), ('extract', 'Egg_TestModel/Source/hello'), ('extract', 'Egg_TestModel/Source/xyzzy'), ('extract', 'Egg_TestModel/Source_loader.py'), ('extract', 'Egg_TestModel/__init__.py'), ('extract', 'Egg_TestModel/sub/data2'), ('extract', 'Egg_TestModel/sub/data4'), ] # Add our file if we're not considered part of an egg. # if sys.modules[self.__module__].__file__.find('.egg') < 0: expected.append(('extract', 'Egg_TestModel/test_egg_save.py')) expected.append(('complete', None)) self.assertEqual(len(OBSERVATIONS), len(expected)) for i, observation in enumerate(OBSERVATIONS): state, string, file_fraction, byte_fraction = observation self.assertEqual(state, expected[i][0]) self.assertEqual(string, expected[i][1]) self.assertEqual(file_fraction, float(i) / float(len(expected) - 1)) # Verify initial state. self.assertEqual(SOURCE_INIT, False) self.assertEqual(SINK_INIT, False) self.assertNotEqual(self.model.Sink.text_data, self.model.Source.text_data) self.assertNotEqual(self.model.Sink.binary_data, self.model.Source.sub.binary_data) for path in EXTERNAL_FILES: path = os.path.join(self.model.Source.get_abs_directory(), path) if not os.path.exists(path): self.fail("after loading, path '%s' does not exist" % path) for i in range(3): self.assertEqual(self.model.Source.obj_list[i].data, i) self.assertEqual(self.model.Oddball.executions, 0) # Run and verify correct operation. self.model.run() self.assertEqual(self.model.Sink.text_data, self.model.Source.text_data) self.assertEqual(all(self.model.Sink.binary_data == self.model.Source.sub.binary_data), True) self.assertEqual( self.model.Sink.binary_file.binary, True) self.assertEqual(self.model.Oddball.executions, 3) finally: os.chdir(orig_dir) shutil.rmtree(test_dir, onerror=onerror)
def __init__(self): Component.__init__(self) #controls what happens if derivatives are missing self.missing_deriv_policy = 'assume_zero'
def save_load(self): """ Save to egg and reload. """ global SOURCE_INIT, SINK_INIT # Verify initial state. self.assertEqual(SOURCE_INIT, True) self.assertEqual(SINK_INIT, True) self.assertNotEqual(self.model.Sink.text_data, self.model.Source.text_data) self.assertNotEqual(self.model.Sink.binary_data, self.model.Source.sub.binary_data) for path in EXTERNAL_FILES: path = os.path.join(self.model.Source.get_abs_directory(), path) if not os.path.exists(path): self.fail("pre-save path '%s' does not exist" % path) for i in range(3): self.assertEqual(self.model.Source.obj_list[i].data, i) self.assertEqual(self.model.Sink.executions, 0) # Save to egg. global OBSERVATIONS OBSERVATIONS = [] egg_info = self.model.save_to_egg(self.model.name, next_egg(), py_dir=PY_DIR, child_objs=self.child_objs, observer=observer) self.egg_name = egg_info[0] # Check observations. expected = [ ('add', 'EGG-INFO/PKG-INFO'), ('add', 'EGG-INFO/dependency_links.txt'), ('add', 'EGG-INFO/entry_points.txt'), ('add', 'EGG-INFO/not-zip-safe'), ('add', 'EGG-INFO/requires.txt'), ('add', 'EGG-INFO/openmdao_orphans.txt'), ('add', 'EGG-INFO/top_level.txt'), ('add', 'EGG-INFO/SOURCES.txt'), ('add', 'Egg_TestModel/Egg_TestModel.pickle'), ('add', 'Egg_TestModel/Egg_TestModel_loader.py'), ('add', 'Egg_TestModel/Oddball.pickle'), ('add', 'Egg_TestModel/Oddball_loader.py'), ('add', 'Egg_TestModel/Oddball_oddcomp.pickle'), ('add', 'Egg_TestModel/Oddball_oddcomp_loader.py'), ('add', 'Egg_TestModel/Oddball_oddcont.pickle'), ('add', 'Egg_TestModel/Oddball_oddcont_loader.py'), ('add', 'Egg_TestModel/Sink.pickle'), ('add', 'Egg_TestModel/Sink_loader.py'), ('add', 'Egg_TestModel/Source.pickle'), ('add', 'Egg_TestModel/Source/hello'), ('add', 'Egg_TestModel/Source/xyzzy'), ('add', 'Egg_TestModel/Source_loader.py'), ('add', 'Egg_TestModel/__init__.py'), ('add', 'Egg_TestModel/sub/data2'), ('add', 'Egg_TestModel/sub/data4'), ] # Add our file if we're not considered part of an egg. #Commenting out this if as a proposed fix from SET for our release testing problems. #if sys.modules[self.__module__].__file__.find('.egg') < 0: expected.append(('add', 'Egg_TestModel/test_egg_save.py')) expected.append(('complete', 'Egg_TestModel-1.2.3-py%d.%d.egg' % sys.version_info[:2])) if len(OBSERVATIONS) != len(expected): logging.debug('Observed, Expected') for i in range(max(len(OBSERVATIONS), len(expected))): if i < len(OBSERVATIONS): ob_state, ob_string, ffract, bfract = OBSERVATIONS[i] else: ob_state = '---' ob_string = '---' if i < len(expected): ex_state = expected[i][0] ex_string = expected[i][1] else: ex_state = '---' ex_string = '---' logging.debug('%s:%s\t%s:%s', ob_state, ob_string, ex_state, ex_string) self.assertEqual(len(OBSERVATIONS), len(expected)) for i, observation in enumerate(OBSERVATIONS): state, string, file_fraction, byte_fraction = observation self.assertEqual(state, expected[i][0]) if expected[i][1].endswith('.egg'): # Unique versions mess this up. self.assertEqual(string.startswith(self.model.name), True) self.assertEqual(string.endswith('.egg'), True) else: self.assertEqual(string.replace('\\', '/'), expected[i][1]) self.assertEqual(file_fraction, float(i)/float(len(expected)-1)) # Run and verify correct operation. self.model.run() self.assertEqual(self.model.Sink.text_data, self.model.Source.text_data) self.assertEqual(True, all(self.model.Sink.binary_data == self.model.Source.sub.binary_data)) self.assertEqual(self.model.Sink.binary_file.binary, True) self.assertEqual(self.model.Sink.executions, 3) # Restore in test directory. orig_dir = os.getcwd() test_dir = 'EggTest' if os.path.exists(test_dir): shutil.rmtree(test_dir, onerror=onerror) os.mkdir(test_dir) os.chdir(test_dir) try: # Clear flags to detect if loading calls __init__. SOURCE_INIT = False SINK_INIT = False # Load from saved initial state in egg. self.model.pre_delete() egg_path = os.path.join('..', self.egg_name) OBSERVATIONS = [] self.model = Component.load_from_eggfile(egg_path, observer=observer) self.model.directory = os.path.join(os.getcwd(), self.model.name) # Check observations. expected = [ ('extract', 'EGG-INFO/PKG-INFO'), ('extract', 'EGG-INFO/dependency_links.txt'), ('extract', 'EGG-INFO/entry_points.txt'), ('extract', 'EGG-INFO/not-zip-safe'), ('extract', 'EGG-INFO/requires.txt'), ('extract', 'EGG-INFO/openmdao_orphans.txt'), ('extract', 'EGG-INFO/top_level.txt'), ('extract', 'EGG-INFO/SOURCES.txt'), ('extract', 'Egg_TestModel/Egg_TestModel.pickle'), ('extract', 'Egg_TestModel/Egg_TestModel_loader.py'), ('extract', 'Egg_TestModel/Oddball.pickle'), ('extract', 'Egg_TestModel/Oddball_loader.py'), ('extract', 'Egg_TestModel/Oddball_oddcomp.pickle'), ('extract', 'Egg_TestModel/Oddball_oddcomp_loader.py'), ('extract', 'Egg_TestModel/Oddball_oddcont.pickle'), ('extract', 'Egg_TestModel/Oddball_oddcont_loader.py'), ('extract', 'Egg_TestModel/Sink.pickle'), ('extract', 'Egg_TestModel/Sink_loader.py'), ('extract', 'Egg_TestModel/Source.pickle'), ('extract', 'Egg_TestModel/Source/hello'), ('extract', 'Egg_TestModel/Source/xyzzy'), ('extract', 'Egg_TestModel/Source_loader.py'), ('extract', 'Egg_TestModel/__init__.py'), ('extract', 'Egg_TestModel/sub/data2'), ('extract', 'Egg_TestModel/sub/data4'), ] # Add our file if we're not considered part of an egg. #if sys.modules[self.__module__].__file__.find('.egg') < 0: expected.append(('extract', 'Egg_TestModel/test_egg_save.py')) expected.append(('complete', None)) self.assertEqual(len(OBSERVATIONS), len(expected)) for i, observation in enumerate(OBSERVATIONS): state, string, file_fraction, byte_fraction = observation self.assertEqual(state, expected[i][0]) self.assertEqual(string, expected[i][1]) self.assertEqual(file_fraction, float(i)/float(len(expected)-1)) # Verify initial state. self.assertEqual(SOURCE_INIT, False) self.assertEqual(SINK_INIT, False) self.assertNotEqual(self.model.Sink.text_data, self.model.Source.text_data) self.assertNotEqual(self.model.Sink.binary_data, self.model.Source.sub.binary_data) for path in EXTERNAL_FILES: path = os.path.join(self.model.Source.get_abs_directory(), path) if not os.path.exists(path): self.fail("after loading, path '%s' does not exist" % path) for i in range(3): self.assertEqual(self.model.Source.obj_list[i].data, i) self.assertEqual(self.model.Oddball.executions, 0) # Run and verify correct operation. self.model.run() self.assertEqual(self.model.Sink.text_data, self.model.Source.text_data) self.assertEqual(all(self.model.Sink.binary_data == self.model.Source.sub.binary_data), True) self.assertEqual( self.model.Sink.binary_file.binary, True) self.assertEqual(self.model.Oddball.executions, 3) finally: os.chdir(orig_dir) shutil.rmtree(test_dir, onerror=onerror)
def test_get_entry_group(self): self.assertEqual(_get_entry_group(Component()), 'openmdao.component')
class ArrayTestCase(unittest.TestCase): def setUp(self): """this setup function will be called before each test in this class""" self.hobj = Component() self.hobj.add('arr1',Array(array([98.9]), iotype='in', units='ft')) self.hobj.add('arr2', Array(array([13.2]), iotype='out', units='inch')) self.hobj.add('arr3', Array(iotype='in', units='kg', desc='stuff')) self.hobj.arr1 = [1.0, 2.0, 3.0] self.hobj.arr2 = [[1.,2.],[3.,4.]] self.hobj.arr3 = [1.1] def tearDown(self): """this teardown function will be called after each test""" self.hobj = None def test_set_to_default(self): self.hobj.add('arr4', Array(iotype='in', units='kg')) self.assertTrue(all(array([]) == self.hobj.arr4)) self.hobj.arr4 = [6.5] self.assertEqual(6.5, self.hobj.arr4[0]) self.hobj.revert_to_defaults() self.assertTrue(all(array([98.9]) == self.hobj.arr1)) self.assertTrue(all(array([]) == self.hobj.arr4)) def test_assignment(self): # check starting value self.assertTrue(all(array([1.,2.,3.]) == self.hobj.arr1)) # check default value self.assertEqual([98.9], self.hobj.get_trait('arr1').trait_type.default_value) # use convert_units to perform unit conversion self.hobj.arr2 = convert_units(self.hobj.arr1, self.hobj.get_trait('arr1').units, 'inch') self.assertAlmostEqual(12., self.hobj.arr2[0], 5) self.assertAlmostEqual(24., self.hobj.arr2[1], 5) self.assertAlmostEqual(36., self.hobj.arr2[2], 5) def test_unit_conversion(self): self.hobj.arr1 = [1.,2.,3.] self.hobj.arr2 = self.hobj.get_wrapped_attr('arr1') self.assertAlmostEqual(12., self.hobj.arr2[0]) self.assertAlmostEqual(24., self.hobj.arr2[1]) self.assertAlmostEqual(36., self.hobj.arr2[2]) # unit to unitless self.hobj.add('arr5', Array(iotype='in')) self.hobj.arr5 = [1., 2., 4.] self.hobj.arr2 = self.hobj.get_wrapped_attr('arr5') self.assertAlmostEqual(1., self.hobj.arr2[0]) self.assertAlmostEqual(2., self.hobj.arr2[1]) self.assertAlmostEqual(4., self.hobj.arr2[2]) def test_bogus_units(self): try: uf = Array([0.], iotype='in', units='bogus') except ValueError, err: self.assertEqual(str(err), "Units of 'bogus' are invalid") else:
def __init__(self): Component.__init__(self) self.missing_deriv_policy = 'assume_zero'