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.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 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 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)