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_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_run(self): comp = Component() try: comp.run() except NotImplementedError as err: self.assertEqual(str(err), ".execute") else: self.fail('expected NotImplementedError')
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_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 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 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 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_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_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_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 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_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 test_get_entry_group(self): self.assertEqual(_get_entry_group(Component()), 'openmdao.component')
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'")