Ejemplo n.º 1
0
 def test_run(self):
     comp = Component()
     try:
         comp.run()
     except NotImplementedError as err:
         self.assertEqual(str(err), ".execute")
     else:
         self.fail('expected NotImplementedError')
Ejemplo n.º 2
0
 def test_run(self):
     comp = Component()
     try:
         comp.run()
     except NotImplementedError as err:
         self.assertEqual(str(err), ".execute")
     else:
         self.fail('expected NotImplementedError')
Ejemplo n.º 3
0
    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'
Ejemplo n.º 5
0
    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'
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
    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'
Ejemplo n.º 9
0
    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]
Ejemplo n.º 10
0
    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' 
Ejemplo n.º 11
0
    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)
Ejemplo n.º 12
0
    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)
Ejemplo n.º 13
0
    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)
Ejemplo n.º 14
0
    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)
Ejemplo n.º 15
0
    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)
Ejemplo n.º 16
0
    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)
Ejemplo n.º 17
0
    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__()
Ejemplo n.º 18
0
    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_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)
Ejemplo n.º 20
0
    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.')
Ejemplo n.º 21
0
    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.')
Ejemplo n.º 22
0
    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))
Ejemplo n.º 23
0
    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")
Ejemplo n.º 24
0
 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]
Ejemplo n.º 25
0
    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)
Ejemplo n.º 27
0
    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)
Ejemplo n.º 28
0
    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)
Ejemplo n.º 29
0
    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)
Ejemplo n.º 30
0
    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)
Ejemplo n.º 31
0
    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()
Ejemplo n.º 32
0
    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()
Ejemplo n.º 33
0
    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])
Ejemplo n.º 34
0
    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)
Ejemplo n.º 35
0
    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'])
Ejemplo n.º 36
0
    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)
Ejemplo n.º 37
0
 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)
Ejemplo n.º 38
0
    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()
Ejemplo n.º 39
0
    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()
Ejemplo n.º 40
0
         
 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:
Ejemplo n.º 41
0
 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())
Ejemplo n.º 42
0
 def test_wrong_interface(self):
     try:
         self.sc.iterator = Component('dummy')
     except TypeError, exc:
         self.assertEqual(
             str(exc), ": iterator must provide interface 'ICaseIterator'")
Ejemplo n.º 43
0
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:
Ejemplo n.º 44
0
    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)
Ejemplo n.º 45
0
    def __init__(self):

        Component.__init__(self)

        #controls what happens if derivatives are missing
        self.missing_deriv_policy = 'assume_zero'
Ejemplo n.º 46
0
    def __init__(self):

        Component.__init__(self)

        #controls what happens if derivatives are missing
        self.missing_deriv_policy = 'assume_zero'
Ejemplo n.º 47
0
    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)
Ejemplo n.º 48
0
 def test_get_entry_group(self):
     self.assertEqual(_get_entry_group(Component()), 'openmdao.component')
Ejemplo n.º 49
0
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:
Ejemplo n.º 50
0
 def __init__(self):
     
     Component.__init__(self)
     
     self.missing_deriv_policy = 'assume_zero'
Ejemplo n.º 51
0
    def __init__(self):

        Component.__init__(self)

        self.missing_deriv_policy = 'assume_zero'
Ejemplo n.º 52
0
 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())