def test_shapes(self): self.hobj.add('sh1', Array(array([[2.0, 4.5],[3.14, 2.5]]), iotype='in', units='kg', shape=(2,2))) self.assertEqual(self.hobj.sh1[1][1], 2.5) try: self.hobj.add('sh1', Array(array([2.0, 2.5]), iotype='in', units='kg', shape=(2,2))) except ValueError, err: msg = "Shape of the default value does not match the shape attribute." self.assertEqual(str(err), msg)
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 setUp(self): """this setup function will be called before each test in this class""" self.hobj = Component() self.hobj.add('arr1',Array(array([98.9]), iotype='in', units='ft')) self.hobj.add('arr2', Array(array([13.2]), iotype='out', units='inch')) self.hobj.add('arr3', Array(iotype='in', units='kg', desc='stuff')) self.hobj.arr1 = [1.0, 2.0, 3.0] self.hobj.arr2 = [[1.,2.],[3.,4.]] self.hobj.arr3 = [1.1]
def test_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_slice(self): ex = ExprEvaluator('a1d[1::2]', self.top.a) self.assertTrue(all(array([2., 4., 6.]) == ex.evaluate())) ex.text = 'a1d[2:4]' self.assertTrue(all(array([3., 4.]) == ex.evaluate())) ex.text = 'a1d[2:]' self.assertTrue(all(array([3., 4., 5., 6.]) == ex.evaluate())) ex.text = 'a1d[::-1]' self.assertTrue(all(array([6., 5., 4., 3., 2., 1.]) == ex.evaluate())) ex.text = 'a1d[:2]' self.assertTrue(all(array([1., 2.]) == ex.evaluate()))
def test_slice(self): ex = ExprEvaluator('a1d[1::2]', self.top.a) self.assertTrue(all(array([2.,4.,6.]) == ex.evaluate())) ex.text = 'a1d[2:4]' self.assertTrue(all(array([3.,4.]) == ex.evaluate())) ex.text = 'a1d[2:]' self.assertTrue(all(array([3.,4.,5.,6.]) == ex.evaluate())) ex.text = 'a1d[::-1]' self.assertTrue(all(array([6.,5.,4.,3.,2.,1.]) == ex.evaluate())) ex.text = 'a1d[:2]' self.assertTrue(all(array([1.,2.]) == ex.evaluate()))
def test_set_to_default(self): comp = MyDefComp() self.assertEqual(3.14, comp.f_in) comp.f_in = 42. comp.arr_in = array([88., 32.]) self.assertFalse(array([1.,2.,3.])==comp.arr_in) self.assertEqual(comp.get_valid(['f_out']), [False]) comp.run() self.assertEqual(comp.get_valid(['f_out']), [True]) comp.revert_to_defaults() # make sure reverting to defaults invalidates our outputs self.assertEqual(comp.get_valid(['f_out']), [False]) self.assertEqual(3.14, comp.f_in) self.assertTrue(all(array([1.,2.,3.])==comp.arr_in))
def test_set_to_default(self): comp = MyDefComp() self.assertEqual(3.14, comp.f_in) comp.f_in = 42. comp.arr_in = array([88., 32.]) self.assertFalse(array([1., 2., 3.]) == comp.arr_in) self.assertEqual(comp.get_valid(['f_out']), [False]) comp.run() self.assertEqual(comp.get_valid(['f_out']), [True]) comp.revert_to_defaults() # make sure reverting to defaults invalidates our outputs self.assertEqual(comp.get_valid(['f_out']), [False]) self.assertEqual(3.14, comp.f_in) self.assertTrue(all(array([1., 2., 3.]) == comp.arr_in))
def test_constructor_defaults(self): self.hobj.add('arr_nodefault3', Array(iotype='in', units='kg')) self.assertTrue(all(array([]) == self.hobj.arr_nodefault3)) self.hobj.add('arr_nounits', Array(iotype='in')) if hasattr(self.hobj.arr_nounits, 'units'): self.fail("Unitless Array should not have units")
def test_flatten(self): a = array([[1,2],[3,4],[5,6]]) self.assertEqual(flatten_obj('foo',a), [('foo[0][0]',1), ('foo[0][1]',2), ('foo[1][0]',3), ('foo[1][1]',4), ('foo[2][0]',5), ('foo[2][1]',6),])
def test_shapes(self): self.hobj.add( 'sh1', Array(array([[2.0, 4.5], [3.14, 2.5]]), iotype='in', units='kg', shape=(2, 2))) self.assertEqual(self.hobj.sh1[1][1], 2.5) try: self.hobj.add( 'sh1', Array(array([2.0, 2.5]), iotype='in', units='kg', shape=(2, 2))) except ValueError, err: msg = "Shape of the default value does not match the shape attribute." self.assertEqual(str(err), msg)
def get_gradient(self, output_name=None): """Returns the gradient of the given output with respect to all parameters. output_name: string Name of the output in the local OpenMDAO hierarchy. """ return array([self.gradient[wrt][output_name] for wrt in self.param_names])
def test_flatten(self): a = array([[1, 2], [3, 4], [5, 6]]) self.assertEqual(flatten_obj('foo', a), [ ('foo[0][0]', 1), ('foo[0][1]', 2), ('foo[1][0]', 3), ('foo[1][1]', 4), ('foo[2][0]', 5), ('foo[2][1]', 6), ])
def get_Hessian(self, output_name=None): """Returns the Hessian matrix of the given output with respect to all parameters. output_name: string Name of the output in the local OpenMDAO hierarchy. """ return array([self.hessian[in1][in2][output_name] \ for (in1,in2) in product(self.param_names, self.param_names)])
class A(Component): f = Float(iotype='in') a1d = Array(array([1.0, 1.0, 2.0, 3.0]), iotype='in') a2d = Array(array([[1.0, 1.0], [2.0, 3.0]]), iotype='in') b1d = Array(array([1.0, 1.0, 2.0, 3.0]), iotype='out') b2d = Array(array([[1.0, 1.0], [2.0, 3.0]]), iotype='out') def some_funct(self, a, b, op='add'): if op == 'add': return a + b elif op == 'mult': return a * b elif op == 'sub': return a - b raise RuntimeError("bad input to some_funct") @property def some_prop(self): return 7
def get_gradient(self, output_name=None): """Returns the gradient of the given output with respect to all parameters. output_name: string Name of the output in the local OpenMDAO hierarchy. """ return array([self.gradient[wrt][output_name] \ for wrt in self.param_names])
def setUp(self): self.top = top = set_as_top(Assembly()) driver = top.add('driver', SimpleCaseIterDriver()) top.add('comp1', ExecComp(exprs=['z=x+y'])) top.add('comp2', ExecComp(exprs=['z=x+1'])) top.connect('comp1.z', 'comp2.x') top.comp1.add('a_string', Str("Hello',;','", iotype='out')) top.comp1.add('a_array', Array(array([1.0, 3.0, 5.5]), iotype='out')) top.comp1.add('x_array', Array(array([1.0, 1.0, 1.0]), iotype='in')) driver.workflow.add(['comp1', 'comp2']) # now create some Cases outputs = ['comp1.z', 'comp2.z', 'comp1.a_string', 'comp1.a_array[2]'] cases = [] for i in range(10): inputs = [('comp1.x', i+0.1), ('comp1.y', i*2 + .1), ('comp1.x_array[1]', 99.88)] cases.append(Case(inputs=inputs, outputs=outputs, label='case%s'%i)) driver.iterator = ListCaseIterator(cases) self.filename = "openmdao_test_csv_case_iterator.csv"
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 setUp(self): self.top = top = set_as_top(Assembly()) driver = top.add('driver', SimpleCaseIterDriver()) top.add('comp1', ExecComp(exprs=['z=x+y'])) top.add('comp2', ExecComp(exprs=['z=x+1'])) top.connect('comp1.z', 'comp2.x') top.comp1.add('a_string', Str("Hello',;','", iotype='out')) top.comp1.add('a_array', Array(array([1.0, 3.0, 5.5]), iotype='out')) top.comp1.add('x_array', Array(array([1.0, 1.0, 1.0]), iotype='in')) top.comp1.add('vt', Slot(DumbVT, iotype='out')) top.comp1.vt = DumbVT() driver.workflow.add(['comp1', 'comp2']) # now create some Cases outputs = ['comp1.z', 'comp2.z', 'comp1.a_string', 'comp1.a_array[2]'] cases = [] for i in range(10): inputs = [('comp1.x', i+0.1), ('comp1.y', i*2 + .1), ('comp1.x_array[1]', 99.88)] cases.append(Case(inputs=inputs, outputs=outputs, label='case%s'%i)) driver.iterator = ListCaseIterator(cases) self.filename = "openmdao_test_csv_case_iterator.csv"
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_set_to_unset_default(self): comp = MyNoDefComp() self.assertEqual(0., comp.f_in) comp.f_in = 42. comp.arr_in = array([88., 32.]) comp.list_in = [1, 2, 3] self.assertEqual(comp.get_valid(['f_out']), [False]) comp.run() self.assertEqual(comp.get_valid(['f_out']), [True]) comp.revert_to_defaults() # make sure reverting to defaults invalidates our outputs self.assertEqual(comp.get_valid(['f_out']), [False]) self.assertEqual(0., comp.f_in) self.assertTrue(all(zeros(0, 'd') == comp.arr_in)) self.assertEqual([], comp.list_in)
def test_set_to_unset_default(self): comp = MyNoDefComp() self.assertEqual(0., comp.f_in) comp.f_in = 42. comp.arr_in = array([88., 32.]) comp.list_in = [1,2,3] self.assertEqual(comp.get_valid(['f_out']), [False]) comp.run() self.assertEqual(comp.get_valid(['f_out']), [True]) comp.revert_to_defaults() # make sure reverting to defaults invalidates our outputs self.assertEqual(comp.get_valid(['f_out']), [False]) self.assertEqual(0., comp.f_in) self.assertTrue(all(zeros(0,'d')==comp.arr_in)) self.assertEqual([], comp.list_in)
def test_flatten(self): # create some Cases outputs = ['comp1.a_array', 'comp1.vt'] inputs = [('comp1.x_array', array([2.0, 2.0, 2.0]))] self.top.driver.iterator = ListCaseIterator([Case(inputs=inputs, outputs=outputs, label='case1')]) self.top.driver.recorders = [CSVCaseRecorder(filename=self.filename)] self.top.driver.recorders[0].num_backups = 0 self.top.run() # now use the CSV recorder as source of Cases self.top.driver.iterator = self.top.driver.recorders[0].get_iterator() sout = StringIO.StringIO() self.top.driver.recorders = [DumpCaseRecorder(sout)] self.top.run() expected = [ 'Case: case1', ' uuid: ad4c1b76-64fb-11e0-95a8-001e8cf75fe', ' timestamp: 1383238593.781986', ' inputs:', ' comp1.x_array[0]: 2.0', ' comp1.x_array[1]: 2.0', ' comp1.x_array[2]: 2.0', ' outputs:', " comp1.a_array[0]: 1.0", " comp1.a_array[1]: 3.0", " comp1.a_array[2]: 5.5", " comp1.vt.v1: 1.0", " comp1.vt.v2: 2.0", " comp1.vt.vt2.vt3.a: 1.0", " comp1.vt.vt2.vt3.b: 12.0", " comp1.vt.vt2.x: -1.0", " comp1.vt.vt2.y: -2.0", ] lines = sout.getvalue().split('\n') for index, line in enumerate(lines): if line.startswith('Case: case1'): for i in range(len(expected)): if expected[i].startswith(' uuid:'): self.assertTrue(lines[index+i].startswith(' uuid:')) elif expected[i].startswith(' timestamp:'): self.assertTrue(lines[index+i].startswith(' timestamp:')) else: self.assertEqual(lines[index+i], expected[i]) break else: self.fail("couldn't find the expected Case")
def test_flatten(self): # create some Cases outputs = ['comp1.a_array', 'comp1.vt'] inputs = [('comp1.x_array', array([2.0, 2.0, 2.0]))] self.top.driver.iterator = ListCaseIterator( [Case(inputs=inputs, outputs=outputs, label='case1')]) self.top.driver.recorders = [CSVCaseRecorder(filename=self.filename)] self.top.driver.recorders[0].num_backups = 0 self.top.run() # now use the CSV recorder as source of Cases self.top.driver.iterator = self.top.driver.recorders[0].get_iterator() sout = StringIO.StringIO() self.top.driver.recorders = [DumpCaseRecorder(sout)] self.top.run() expected = [ 'Case: case1', ' uuid: ad4c1b76-64fb-11e0-95a8-001e8cf75fe', ' inputs:', ' comp1.x_array[0]: 2.0', ' comp1.x_array[1]: 2.0', ' comp1.x_array[2]: 2.0', ' outputs:', " comp1.a_array[0]: 1.0", " comp1.a_array[1]: 3.0", " comp1.a_array[2]: 5.5", " comp1.vt.v1: 1.0", " comp1.vt.v2: 2.0", " comp1.vt.vt2.vt3.a: 1.0", " comp1.vt.vt2.vt3.b: 12.0", " comp1.vt.vt2.x: -1.0", " comp1.vt.vt2.y: -2.0", ] lines = sout.getvalue().split('\n') for index, line in enumerate(lines): if line.startswith('Case: case1'): for i in range(len(expected)): if expected[i].startswith(' uuid:'): self.assertTrue(lines[index + i].startswith(' uuid:')) else: self.assertEqual(lines[index + i], expected[i]) break else: self.fail("couldn't find the expected Case")
units='kg', shape=(2, 2))) self.assertEqual(self.hobj.sh1[1][1], 2.5) try: self.hobj.add( 'sh1', Array(array([2.0, 2.5]), iotype='in', units='kg', shape=(2, 2))) except ValueError, err: msg = "Shape of the default value does not match the shape attribute." self.assertEqual(str(err), msg) else: self.fail('ValueError expected') self.hobj.sh1 = array([[9.0, 11.0], [1.0, 2.0]]) self.assertEqual(self.hobj.sh1[1][1], 2.0) try: self.hobj.sh1 = array([[11.0, 2.0]]) except ValueError, err: msg = ": Variable 'sh1' must be an array-like object of shape (2, 2), but a shape of (1, 2) (<type 'numpy.ndarray'>) was specified." self.assertEqual(str(err), msg) else: self.fail('ValueError expected') def test_flatten(self): a = array([[1, 2], [3, 4], [5, 6]]) self.assertEqual(flatten_obj('foo', a), [ ('foo[0][0]', 1), ('foo[0][1]', 2),
self.fail('TypeError expected') def test_shapes(self): self.hobj.add('sh1', Array(array([[2.0, 4.5],[3.14, 2.5]]), iotype='in', units='kg', shape=(2,2))) self.assertEqual(self.hobj.sh1[1][1], 2.5) try: self.hobj.add('sh1', Array(array([2.0, 2.5]), iotype='in', units='kg', shape=(2,2))) except ValueError, err: msg = "Shape of the default value does not match the shape attribute." self.assertEqual(str(err), msg) else: self.fail('ValueError expected') self.hobj.sh1 = array([[9.0, 11.0], [1.0, 2.0]]) self.assertEqual(self.hobj.sh1[1][1], 2.0) try: self.hobj.sh1 = array([[11.0, 2.0]]) except ValueError, err: msg = ": Variable 'sh1' must be an array-like object of shape (2, 2), but a shape of (1, 2) (<type 'numpy.ndarray'>) was specified." self.assertEqual(str(err), msg) else: self.fail('ValueError expected') def test_flatten(self): a = array([[1,2],[3,4],[5,6]]) self.assertEqual(flatten_obj('foo',a), [('foo[0][0]',1), ('foo[0][1]',2),
def test_set_evaluate(self): ex = ExprEvaluator('comp.x', self.top) self.assertEqual(3.14, ex.evaluate()) ex.set(75.4) self.assertEqual(75.4, self.top.comp.x) self.top.comp.contlist = [A(), A(), A()] self.top.comp.contlist[1].a1d = [4]*5 ex = ExprEvaluator('comp.contlist[1].a1d[3]', self.top) self.assertEqual(ex.evaluate(), 4) ex.set(123) self.assertEqual(ex.evaluate(), 123) ex = ExprEvaluator("comp.contlist[1].some_funct(3,5,'sub')", self.top) self.assertEqual(ex.evaluate(), -2) ex = ExprEvaluator("comp.get_cont(1).some_funct(3,5,'add')", self.top) self.assertEqual(ex.evaluate(), 8) ex = ExprEvaluator("comp.get_cont(1).a1d[2]", self.top) self.assertEqual(ex.evaluate(), 4) ex = ExprEvaluator("a2d[1][0]", self.top.a) self.assertEqual(ex.evaluate(), 2.) ex.set(7.) self.assertEqual(self.top.a.a2d[1][0], 7.) ex = ExprEvaluator("a2d[1,0]", self.top.a) self.assertEqual(ex.evaluate(), 7.) ex.set(11.) self.assertEqual(self.top.a.a2d[1][0], 11.) ex = ExprEvaluator("a2d[1]", self.top.a) self.assertTrue(all(ex.evaluate() == array([11., 3.]))) ex.set([0.1, 0.2]) self.assertTrue(all(self.top.a.a2d[1] == array([0.1, 0.2]))) self.top.comp.cont = A() ex = ExprEvaluator("comp.cont.a2d[1][0]", self.top) self.assertEqual(ex.evaluate(), 2.) ex.set(7.) self.assertEqual(self.top.comp.cont.a2d[1][0], 7.) ex = ExprEvaluator("comp.cont.a2d[1,0]", self.top) self.assertEqual(ex.evaluate(), 7.) ex.set(11.) self.assertEqual(self.top.comp.cont.a2d[1][0], 11.) # try a numpy function try: import numpy except ImportError: pass else: ex = ExprEvaluator("numpy.eye(2)", self.top.a) val = ex.evaluate() self.assertTrue((val == numpy.eye(2)).all()) ex = ExprEvaluator("comp.get_cont(1).a1d", self.top) self.assertEqual(list(ex.evaluate()), [4, 4, 4, 123, 4]) ex = ExprEvaluator("comp.get_attrib('get_cont')(1).a1d", self.top) self.assertEqual(list(ex.evaluate()), [4, 4, 4, 123, 4])
def test_get(self): self.assertTrue(all(self.hobj.get('arr1') == array([1.,2.,3.])))
def test_get(self): self.assertTrue(all(self.hobj.get('arr1') == array([1., 2., 3.])))
def test_set_evaluate(self): ex = ExprEvaluator('comp.x', self.top) self.assertEqual(3.14, ex.evaluate()) ex.set(75.4) self.assertEqual(75.4, self.top.comp.x) self.top.comp.contlist = [A(), A(), A()] self.top.comp.contlist[1].a1d = [4] * 5 ex = ExprEvaluator('comp.contlist[1].a1d[3]', self.top) self.assertEqual(ex.evaluate(), 4) ex.set(123) self.assertEqual(ex.evaluate(), 123) ex = ExprEvaluator("comp.contlist[1].some_funct(3,5,'sub')", self.top) self.assertEqual(ex.evaluate(), -2) ex = ExprEvaluator("comp.get_cont(1).some_funct(3,5,'add')", self.top) self.assertEqual(ex.evaluate(), 8) ex = ExprEvaluator("comp.get_cont(1).a1d[2]", self.top) self.assertEqual(ex.evaluate(), 4) ex = ExprEvaluator("a2d[1][0]", self.top.a) self.assertEqual(ex.evaluate(), 2.) ex.set(7.) self.assertEqual(self.top.a.a2d[1][0], 7.) ex = ExprEvaluator("a2d[1,0]", self.top.a) self.assertEqual(ex.evaluate(), 7.) ex.set(11.) self.assertEqual(self.top.a.a2d[1][0], 11.) ex = ExprEvaluator("a2d[1]", self.top.a) self.assertTrue(all(ex.evaluate() == array([11., 3.]))) ex.set([0.1, 0.2]) self.assertTrue(all(self.top.a.a2d[1] == array([0.1, 0.2]))) self.top.comp.cont = A() ex = ExprEvaluator("comp.cont.a2d[1][0]", self.top) self.assertEqual(ex.evaluate(), 2.) ex.set(7.) self.assertEqual(self.top.comp.cont.a2d[1][0], 7.) ex = ExprEvaluator("comp.cont.a2d[1,0]", self.top) self.assertEqual(ex.evaluate(), 7.) ex.set(11.) self.assertEqual(self.top.comp.cont.a2d[1][0], 11.) # try a numpy function try: import numpy except ImportError: pass else: ex = ExprEvaluator("numpy.eye(2)", self.top.a) val = ex.evaluate() self.assertTrue((val == numpy.eye(2)).all()) ex = ExprEvaluator("comp.get_cont(1).a1d", self.top) self.assertEqual(list(ex.evaluate()), [4, 4, 4, 123, 4]) ex = ExprEvaluator("comp.get_attr('get_cont')(1).a1d", self.top) self.assertEqual(list(ex.evaluate()), [4, 4, 4, 123, 4])