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.º 2
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)
Ejemplo n.º 3
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.º 4
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.º 5
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)