def test_super_simple_backward(self):
        model = Assembly()

        model.add('driver', DistributionCaseDriver())
        model.add('driven', SimpleComponent())
        model.driver.workflow.add('driven')

        model.driver.distribution_generator = FiniteDifferenceGenerator(model.driver)
        model.driver.add_response('driven.y')
        model.driver.add_parameter("driven.x", low=-10., high=10., fd_step=0.1)

        model.driver.distribution_generator.form = "BACKWARD"
        model.driver.distribution_generator.order = 2

        model.run()

        x = model.driver.case_inputs.driven.x
        y = model.driver.case_outputs.driven.y

        self.assertAlmostEqual(x[0], 1.0, places=6)
        self.assertAlmostEqual(y[0], 2.0, places=6)
        self.assertAlmostEqual(x[1], 0.8, places=6)
        self.assertAlmostEqual(y[1], 1.6, places=6)
        self.assertAlmostEqual(x[2], 0.9, places=6)
        self.assertAlmostEqual(y[2], 1.8, places=6)
Пример #2
0
class GeomTestCase(unittest.TestCase):

    def setUp(self):
        """this setup function will be called before each test in this class"""
        self.top = Assembly()
        self.top.add('g1', GeoSource())
        self.top.add('g2', GeoSink())
        self.top.connect('g1.g_out', 'g2.g_inp')
        self.top.driver.workflow.add(['g1', 'g2'])
        
    def tearDown(self):
        """this teardown function will be called after each test"""
        self.top = None
    
    def testGeom(self):
        
        self.top.run()
        
        self.assertEqual(1, self.top.g2.g_inp.get_tessellation())
        
        try:
            self.top.g2.g_extra = "hey"
        except TypeError as err:
            msg = "g2 (1-2): g_extra must provide interface 'IStaticGeometry'"
            self.assertEqual(str(err), msg)        
        else:
            self.fail("exception expected")
Пример #3
0
    def test_super_simple_forward(self):
        model = Assembly()

        model.add('driver', DistributionCaseDriver())
        model.add('driven', SimpleComponent())
        model.driver.workflow.add('driven')

        # Forward
        model.driver.distribution_generator = FiniteDifferenceGenerator(
            model.driver)
        model.driver.add_response('driven.y')
        model.driver.add_parameter("driven.x", low=-10., high=10., fd_step=0.1)

        model.driver.distribution_generator.form = "FORWARD"
        model.driver.distribution_generator.order = 2

        model.run()

        x = model.driver.case_inputs.driven.x
        y = model.driver.case_outputs.driven.y

        self.assertAlmostEqual(x[0], 1.0, places=6)
        self.assertAlmostEqual(y[0], 2.0, places=6)
        self.assertAlmostEqual(x[1], 1.1, places=6)
        self.assertAlmostEqual(y[1], 2.2, places=6)
        self.assertAlmostEqual(x[2], 1.2, places=6)
        self.assertAlmostEqual(y[2], 2.4, places=6)
Пример #4
0
    def test_request(self):
        logging.debug('')
        logging.debug('test_request')

        assembly = Assembly()
        comp1 = assembly.add('comp1', ExtCode())
        comp2 = assembly.add('comp2', ExtCode())
        sub = assembly.add('sub', Assembly())
        comp3 = sub.add('comp3', ExtCode())

        comp1.resources = dict(min_cpus=10,
                               max_cpus=10,
                               resource_limits=dict(virtual_memory=100,
                                                    cpu_time=120),
                               rerunnable=True,
                               accounting_id='frobozz',
                               queue_name='debug',
                               job_category='MPI')

        comp2.resources = dict(max_cpus=2,
                               resource_limits=dict(wallclock_time=1000000))

        comp3.resources = dict(min_cpus=200,
                               resource_limits=dict(virtual_memory=20,
                                                    cpu_time=1000,
                                                    wallclock_time=500),
                               rerunnable=True,
                               accounting_id='frobozz',
                               queue_name='debug',
                               job_category='MPI')

        req = RAM.max_request(assembly)
        expected = dict(min_cpus=200,
                        max_cpus=200,
                        resource_limits=dict(virtual_memory=100,
                                             cpu_time=1000,
                                             wallclock_time=1000000))
        logging.debug('req: %r', req)
        logging.debug('exp: %r', expected)
        self.assertEqual(req, expected)

        req = RAM.total_request(assembly)
        expected = dict(min_cpus=200,
                        max_cpus=200,
                        resource_limits=dict(virtual_memory=100,
                                             cpu_time=1120,
                                             wallclock_time=1000500),
                        rerunnable=True,
                        accounting_id='frobozz',
                        queue_name='debug',
                        job_category='MPI')
        logging.debug('req: %r', req)
        logging.debug('exp: %r', expected)
        self.assertEqual(req, expected)

        comp3.resources['accounting_id'] = 'xyzzy'
        assert_raises(
            self, 'RAM.total_request(assembly)', globals(), locals(),
            ValueError, "Incompatible settings for 'accounting_id':"
            " 'xyzzy' vs. 'frobozz'")
    def test_linearGS_simul_element_and_full_connection(self):
        # Added because of a bug with array slices for Linear GS

        top = Assembly()
        top.add('comp1', ArrayComp2D())
        top.add('comp2', ArrayComp2D())

        top.add('driver', SimpleDriver())
        top.driver.workflow.add(['comp1', 'comp2'])
        top.connect('comp1.y', 'comp2.x')
        top.driver.add_parameter('comp1.x[0][0]', low=-10, high=10)
        top.driver.add_objective('comp1.y[0][0]')
        top.driver.add_constraint('comp2.y[0][1] < 0')
        top.driver.gradient_options.lin_solver = 'linear_gs'
        top.driver.gradient_options.maxiter = 1

        top.run()

        J = top.driver.calc_gradient(mode='forward')
        assert_rel_error(self, J[0, 0], 2.0, .000001)
        assert_rel_error(self, J[1, 0], 39.0, .000001)

        J = top.driver.calc_gradient(mode='adjoint')
        assert_rel_error(self, J[0, 0], 2.0, .000001)
        assert_rel_error(self, J[1, 0], 39.0, .000001)
    def test_request(self):
        logging.debug('')
        logging.debug('test_request')

        assembly = Assembly()
        comp1 = assembly.add('comp1', ExtCode())
        comp2 = assembly.add('comp2', ExtCode())
        sub = assembly.add('sub', Assembly())
        comp3 = sub.add('comp3', ExtCode())

        comp1.resources = dict(min_cpus=10,
                               max_cpus=10,
                               resource_limits=dict(virtual_memory=100,
                                                    cpu_time=120),
                               rerunnable=True,
                               accounting_id='frobozz',
                               queue_name='debug',
                               job_category='MPI')

        comp2.resources = dict(max_cpus=2,
                               resource_limits=dict(wallclock_time=1000000))

        comp3.resources = dict(min_cpus=200,
                               resource_limits=dict(virtual_memory=20,
                                                    cpu_time=1000,
                                                    wallclock_time=500),
                               rerunnable=True,
                               accounting_id='frobozz',
                               queue_name='debug',
                               job_category='MPI')

        req = RAM.max_request(assembly)
        expected = dict(min_cpus=200,
                        max_cpus=200,
                        resource_limits=dict(virtual_memory=100,
                                             cpu_time=1000,
                                             wallclock_time=1000000))
        logging.debug('req: %r', req)
        logging.debug('exp: %r', expected)
        self.assertEqual(req, expected)

        req = RAM.total_request(assembly)
        expected = dict(min_cpus=200,
                        max_cpus=200,
                        resource_limits=dict(virtual_memory=100,
                                             cpu_time=1120,
                                             wallclock_time=1000500),
                        rerunnable=True,
                        accounting_id='frobozz',
                        queue_name='debug',
                        job_category='MPI')
        logging.debug('req: %r', req)
        logging.debug('exp: %r', expected)
        self.assertEqual(req, expected)

        comp3.resources['accounting_id'] = 'xyzzy'
        assert_raises(self, 'RAM.total_request(assembly)',
                      globals(), locals(), ValueError,
                      "Incompatible settings for 'accounting_id':"
                      " 'xyzzy' vs. 'frobozz'")
    def test_nested_2Darray_simul_element_and_full_connection2(self):
        # Slightly different config

        top = Assembly()
        top.add('nest', Assembly())
        top.nest.add('comp1', ArrayComp2D())
        top.nest.add('comp2', ArrayComp2D())
        top.driver.gradient_options.lin_solver = 'petsc_ksp'
        top.nest.driver.gradient_options.lin_solver = 'petsc_ksp'

        top.nest.driver.workflow.add(['comp1', 'comp2'])
        top.nest.connect('comp1.y', 'comp2.x')
        top.nest.create_passthrough('comp1.x')
        top.nest.create_passthrough('comp1.y')
        top.nest.add('yy', Array(iotype='out'))
        top.nest.connect('comp2.y', 'yy')

        top.add('driver', SimpleDriver())
        top.driver.workflow.add(['nest'])
        top.driver.add_parameter('nest.x[0][0]', low=-10, high=10)
        top.driver.add_objective('nest.yy[0][0]')
        top.driver.add_constraint('nest.y[0][1] < 0')
        top.run()

        J = top.driver.calc_gradient(mode='forward')
        assert_rel_error(self, J[0, 0], 24.0, .000001)
        assert_rel_error(self, J[1, 0], 4.0, .000001)

        J = top.driver.calc_gradient(mode='adjoint')
        assert_rel_error(self, J[0, 0], 24.0, .000001)
        assert_rel_error(self, J[1, 0], 4.0, .000001)

        J = top.driver.calc_gradient(mode='fd')
        assert_rel_error(self, J[0, 0], 24.0, .000001)
        assert_rel_error(self, J[1, 0], 4.0, .000001)
    def test_super_simple_forward(self):

        model = Assembly()

        model.add("driver", DistributionCaseDriver())
        model.add("driven", SimpleComponent())
        model.driver.workflow.add("driven")

        # Forward
        model.driver.distribution_generator = FiniteDifferenceGenerator(model.driver)
        model.driver.case_outputs = ["driven.y"]
        model.driver.add_parameter("driven.x", low=-10.0, high=10.0, fd_step=0.1)

        results = ListCaseRecorder()
        model.driver.recorders = [results]

        model.driver.distribution_generator.form = "FORWARD"
        model.driver.distribution_generator.order = 2
        model.run()

        self.assertAlmostEqual(results.cases[0]["driven.x"], 1.0, places=6)
        self.assertAlmostEqual(results.cases[0]["driven.y"], 2.0, places=6)
        self.assertAlmostEqual(results.cases[1]["driven.x"], 1.1, places=6)
        self.assertAlmostEqual(results.cases[1]["driven.y"], 2.2, places=6)
        self.assertAlmostEqual(results.cases[2]["driven.x"], 1.2, places=6)
        self.assertAlmostEqual(results.cases[2]["driven.y"], 2.4, places=6)
    def test_super_simple_backward(self):

        model = Assembly()

        model.add('driver', DistributionCaseDriver())
        model.add('driven', SimpleComponent())
        model.driver.workflow.add('driven')

        model.driver.distribution_generator = FiniteDifferenceGenerator(model.driver)
        model.driver.case_outputs = ['driven.y']
        model.driver.add_parameter("driven.x", low=-10., high=10., fd_step = 0.1 )

        results = ListCaseRecorder()
        model.driver.recorders = [results]

        model.driver.distribution_generator.form = "BACKWARD"
        model.driver.distribution_generator.order = 2

        model.run()

        self.assertAlmostEqual( results.cases[0][ 'driven.x' ], 1.0, places = 6 )
        self.assertAlmostEqual( results.cases[0][ 'driven.y' ], 2.0, places = 6 )
        self.assertAlmostEqual( results.cases[1][ 'driven.x' ], 0.8, places = 6 )
        self.assertAlmostEqual( results.cases[1][ 'driven.y' ], 1.6, places = 6 )
        self.assertAlmostEqual( results.cases[2][ 'driven.x' ], 0.9, places = 6 )
        self.assertAlmostEqual( results.cases[2][ 'driven.y' ], 1.8, places = 6 )
Пример #10
0
class GeomTestCase(unittest.TestCase):
    def setUp(self):
        """this setup function will be called before each test in this class"""
        self.top = Assembly()
        self.top.add('g1', GeoSource())
        self.top.add('g2', GeoSink())
        self.top.connect('g1.g_out', 'g2.g_inp')
        self.top.driver.workflow.add(['g1', 'g2'])

    def tearDown(self):
        """this teardown function will be called after each test"""
        self.top = None

    def testGeom(self):

        self.top.run()

        self.assertEqual(1, self.top.g2.g_inp.get_tessellation())

        try:
            self.top.g2.g_extra = "hey"
        except TypeError as err:
            msg = "g2 (1-g2): object g_extra of type <type 'str'> must provide interface 'IStaticGeometry'"
            self.assertEqual(str(err), msg)
        else:
            self.fail("exception expected")
Пример #11
0
    def test_nested_2Darray_simul_element_and_full_connection2(self):
        # Slightly different config

        top = Assembly()
        top.add('nest', Assembly())
        top.nest.add('comp1', ArrayComp2D())
        top.nest.add('comp2', ArrayComp2D())
        top.driver.gradient_options.lin_solver = 'petsc_ksp'
        top.nest.driver.gradient_options.lin_solver = 'petsc_ksp'

        top.nest.driver.workflow.add(['comp1', 'comp2'])
        top.nest.connect('comp1.y', 'comp2.x')
        top.nest.create_passthrough('comp1.x')
        top.nest.create_passthrough('comp1.y')
        top.nest.add('yy', Array(iotype='out'))
        top.nest.connect('comp2.y', 'yy')

        top.add('driver', SimpleDriver())
        top.driver.workflow.add(['nest'])
        top.driver.add_parameter('nest.x[0][0]', low=-10, high=10)
        top.driver.add_objective('nest.yy[0][0]')
        top.driver.add_constraint('nest.y[0][1] < 0')
        top.run()

        J = top.driver.calc_gradient(mode='forward')
        assert_rel_error(self, J[0, 0], 24.0, .000001)
        assert_rel_error(self, J[1, 0], 4.0, .000001)

        J = top.driver.calc_gradient(mode='adjoint')
        assert_rel_error(self, J[0, 0], 24.0, .000001)
        assert_rel_error(self, J[1, 0], 4.0, .000001)

        J = top.driver.calc_gradient(mode='fd')
        assert_rel_error(self, J[0, 0], 24.0, .000001)
        assert_rel_error(self, J[1, 0], 4.0, .000001)
    def test_linearGS_simul_element_and_full_connection(self):
        # Added because of a bug with array slices for Linear GS

        top = Assembly()
        top.add('comp1', ArrayComp2D())
        top.add('comp2', ArrayComp2D())

        top.add('driver', SimpleDriver())
        top.driver.workflow.add(['comp1', 'comp2'])
        top.connect('comp1.y', 'comp2.x')
        top.driver.add_parameter('comp1.x[0][0]', low=-10, high=10)
        top.driver.add_objective('comp1.y[0][0]')
        top.driver.add_constraint('comp2.y[0][1] < 0')
        top.driver.gradient_options.lin_solver = 'linear_gs'
        top.driver.gradient_options.maxiter = 1

        top.run()

        J = top.driver.calc_gradient(mode='forward')
        assert_rel_error(self, J[0, 0], 2.0, .000001)
        assert_rel_error(self, J[1, 0], 39.0, .000001)

        J = top.driver.calc_gradient(mode='adjoint')
        assert_rel_error(self, J[0, 0], 2.0, .000001)
        assert_rel_error(self, J[1, 0], 39.0, .000001)
 def _create_assembly(self, dbname):
     asm = Assembly()
     driver = asm.add('driver', SimpleCaseIterDriver())
     asm.add('comp1', ExecComp(exprs=['z=x+y']))
     asm.add('comp2', ExecComp(exprs=['z=x+y']))
     asm.connect('comp1.z', 'comp2.x')
     driver.workflow.add(['comp1', 'comp2'])
     driver.recorder = DBCaseRecorder(dbname, append=True)
     return asm
 def _create_assembly(self, dbname, drivertype):
     asm = Assembly()
     driver = asm.add("driver", drivertype())
     asm.add("comp1", ExecComp(exprs=["z=x+y"]))
     asm.add("comp2", ExecComp(exprs=["z=x+y"]))
     asm.connect("comp1.z", "comp2.x")
     driver.workflow.add(["comp1", "comp2"])
     driver.recorders = [DBCaseRecorder(dbname, append=True)]
     return asm
 def _create_assembly(self, dbname, drivertype):
     asm = Assembly()
     driver = asm.add('driver', drivertype())
     asm.add('comp1', TracedExecComp(exprs=['z=x+y']))
     asm.add('comp2', TracedExecComp(exprs=['z=x+y']))
     asm.connect('comp1.z', 'comp2.x')
     driver.workflow.add(['comp1', 'comp2'])
     asm.recorders = [DBCaseRecorder(dbname, append=True)]
     return asm
 def _create_assembly(self, dbname, drivertype):
     asm = Assembly()
     driver = asm.add('driver', drivertype())
     asm.add('comp1', ExecComp(exprs=['z=x+y']))
     asm.add('comp2', ExecComp(exprs=['z=x+y']))
     asm.connect('comp1.z', 'comp2.x')
     driver.workflow.add(['comp1', 'comp2'])
     driver.recorders = [DBCaseRecorder(dbname, append=True)]
     return asm
    def test_smart_low_high_array_param(self):

        top = Assembly()
        top.add('paraboloid', ArrayParaboloid())
        driver = top.add('driver', SimpleDriver())
        driver.add_objective('paraboloid.f_x')
        driver.add_parameter('paraboloid.x', low=[-100, -99], high=[100, 99])
        driver.workflow.add('paraboloid')
        top.run()
        J = top.driver.calc_gradient()
    def test_smart_low_high_array_param(self):

        top = Assembly()
        top.add('paraboloid', ArrayParaboloid())
        driver = top.add('driver', SimpleDriver())
        driver.add_objective('paraboloid.f_x')
        driver.add_parameter('paraboloid.x', low=[-100, -99], high=[100, 99])
        driver.workflow.add('paraboloid')
        top.run()
        J = top.driver.workflow.calc_gradient()
 def test_set_recursive(self):
     asm = Assembly()
     asm.add('defcomp', MyDefComp())
     asm.add('nodefcomp', MyNoDefComp())
     self.assertEqual(0., asm.nodefcomp.f_in)
     self.assertEqual(3.14, asm.defcomp.f_in)
     asm.nodefcomp.f_in = 99
     asm.defcomp.f_in = 99
     asm.revert_to_defaults()
     self.assertEqual(0., asm.nodefcomp.f_in)
     self.assertEqual(3.14, asm.defcomp.f_in)
Пример #20
0
    def test_scaler_array_expression(self):
        model = Assembly()
        model.add('sub', SubAsmb())
        model.driver.workflow.add('sub')
        model.run()
        J = model.driver.workflow.calc_gradient(inputs=['sub.x', 'sub.y'],
                                                outputs=['sub.z'])

        assert_rel_error(self, J[0, 0], 10.0, .001)
        assert_rel_error(self, J[0, 1], 10.0, .001)
        assert_rel_error(self, J[0, 2], 20.0, .001)
Пример #21
0
 def test_set_recursive(self):
     asm = Assembly()
     asm.add('defcomp', MyDefComp())
     asm.add('nodefcomp', MyNoDefComp())
     self.assertEqual(0., asm.nodefcomp.f_in)
     self.assertEqual(3.14, asm.defcomp.f_in)
     asm.nodefcomp.f_in = 99
     asm.defcomp.f_in = 99
     asm.revert_to_defaults()
     self.assertEqual(0., asm.nodefcomp.f_in)
     self.assertEqual(3.14, asm.defcomp.f_in)
Пример #22
0
 def test_multiconnect(self):
     top = Assembly()
     for name in ("m1", "m2", "m3"):
         top.add(name, Multiplier())
         top.driver.workflow.add(name)
     top.connect("m1.rval_out", ("m2.mult", "m3.mult"))
     top.m1.rval_in = 1.0
     top.m2.rval_in = 3.0
     top.m3.rval_in = 4.0
     top.run()
     self.assertEqual(top.m2.rval_out, 4.5)
     self.assertEqual(top.m3.rval_out, 6.0)
Пример #23
0
 def test_multiconnect(self):
     top = Assembly()
     for name in ('m1', 'm2', 'm3'):
         top.add(name, Multiplier())
         top.driver.workflow.add(name)
     top.connect('m1.rval_out', ('m2.mult', 'm3.mult'))
     top.m1.rval_in = 1.
     top.m2.rval_in = 3.
     top.m3.rval_in = 4.
     top.run()
     self.assertEqual(top.m2.rval_out, 4.5)
     self.assertEqual(top.m3.rval_out, 6.)
 def test_multiconnect(self):
     top = Assembly()
     for name in ('m1', 'm2', 'm3'):
         top.add(name, Multiplier())
         top.driver.workflow.add(name)
     top.connect('m1.rval_out', ('m2.mult', 'm3.mult'))
     top.m1.rval_in = 1.
     top.m2.rval_in = 3.
     top.m3.rval_in = 4.
     top.run()
     self.assertEqual(top.m2.rval_out, 4.5)
     self.assertEqual(top.m3.rval_out, 6.)
Пример #25
0
    def test_scaler_array_expression(self):

        model = Assembly()
        model.add('sub', SubAsmb())
        model.driver.workflow.add('sub')
        model.run()
        J = model.driver.workflow.calc_gradient(inputs=['sub.x', 'sub.y'],
                                                outputs=['sub.z'])

        assert_rel_error(self, J[0,0], 10.0, .001)
        assert_rel_error(self, J[0,1], 10.0, .001)
        assert_rel_error(self, J[0,2], 20.0, .001)
    def test_invalid_input(self):

        model = Assembly()

        model.add("driver", DistributionCaseDriver())
        model.add("driven", SimpleComponent())
        model.driver.workflow.add("driven")
        model.driver.distribution_generator = FiniteDifferenceGenerator(model.driver)

        try:
            model.driver.add_parameter("driven.invalid", low=-10.0, high=10.0, fd_step=0.1)
        except AttributeError as err:
            self.assertEqual(str(err), "driver: Can't add parameter 'driven.invalid' because it doesn't exist.")
Пример #27
0
 def test_connections(self): 
     
     asm = Assembly()
     asm.add('dummy1',Dummy())
     asm.add('dummy2',Dummy())
     asm.add('bcast',Broadcaster(['x']))
     
     asm.connect('dummy1.x','bcast.x_in')
     asm.connect('bcast.x','dummy2.y')
     
     self.assertEqual(set(asm.list_connections()),set([('dummy1.x', 'bcast.x_in'), ('bcast.x', 'dummy2.y')]))
     asm.bcast.names = ['z']
     
     self.assertEqual(asm.list_connections(),[])    
Пример #28
0
    def test_scid(self):
        # Record tree of cases via SimpleCaseIterDriver.
        top = Assembly()
        top.recorders = [ListCaseRecorder()]

        top.add('driver2', SCIDriver(3, 'comp2'))
        top.add('comp2', CaseComponent())
        top.driver2.workflow.add('comp2')

        top.add('driver1', SCIDriver(2, 'comp1'))
        top.add('comp1', CaseComponent())
        top.driver1.workflow.add(['comp1', 'driver2'])

        top.driver.workflow.add('driver1')
        top.run()

        print
        print 'Forest:'
        roots = CaseTreeNode.sort(top.recorders[0].get_iterator())
        for root in roots:
            root.dump(1)

        print
        print 'Iternames:'
        for root in roots:
            for name in root.iternames():
                print '   ', name

        expected = [
            '1', '1-1.1', '1-1.1-2.1', '1-1.1-2.2', '1-1.1-2.3', '1-1.2',
            '1-1.2-2.1', '1-1.2-2.2', '1-1.2-2.3'
        ]
        for i, name in enumerate(roots[0].iternames()):
            self.assertEqual(name, expected[i])
    def test_invalid_input(self):

        model = Assembly()

        model.add('driver', DistributionCaseDriver())
        model.add('driven', SimpleComponent())
        model.driver.workflow.add('driven')
        model.driver.distribution_generator = FiniteDifferenceGenerator(model.driver)

        try:
            model.driver.add_parameter("driven.invalid", low=-10., high=10., fd_step = 0.1 )
        except AttributeError as err:
            self.assertEqual(str(err), 
                             "driver: Can't add parameter 'driven.invalid' because it doesn't exist.")
    def test_invalid_case_outputs(self):
        model = Assembly()

        model.add('driver', DistributionCaseDriver())
        model.add('driven', SimpleComponent())
        model.driver.workflow.add('driven')
        model.driver.distribution_generator = FiniteDifferenceGenerator(model.driver)
        try:
            model.driver.add_response('driven.invalid')
        except ValueError as err:
            self.assertEqual(str(err), "driver: Can't add response "
                             "'driven.invalid' because of invalid variables"
                             " 'driven.invalid'")
        else:
            self.fail('Expected ValueError')
Пример #31
0
    def test_comp_error(self):
        a = Assembly()
        a.add('m', MetaModel())
        a.m.surrogate = {'default': KrigingSurrogate()}
        a.m.model = DummyError()

        a.m.train_next = True

        a.driver.workflow.add('m')
        try:
            a.run()
        except RuntimeError as err:
            self.assertEqual("m.model: Test Error", str(err))
        else:
            self.fail("RuntimeError expected")
    def test_basic_delegation(self):
        top = Assembly()
        top.add('geo', GeomComponent())

        # Function not there before we slot
        self.assertTrue(not hasattr(top.geo, 'apply_deriv'))
        self.assertTrue(not hasattr(top.geo, 'apply_derivT'))
        self.assertTrue(not hasattr(top.geo, 'provideJ'))

        top.geo.add('parametric_geometry', GeoWithDerivatives())

        # Now they should be there.
        self.assertTrue(hasattr(top.geo, 'apply_deriv'))
        self.assertTrue(hasattr(top.geo, 'apply_derivT'))
        self.assertTrue(hasattr(top.geo, 'provideJ'))
 def test_comp_error(self): 
     a = Assembly()
     a.add('m',MetaModel()) 
     a.m.default_surrogate = KrigingSurrogate()
     a.m.model = DummyError()
     
     a.m.train_next = True
     
     a.driver.workflow.add('m')
     try: 
         a.run()
     except RuntimeError as err: 
         self.assertEqual("m.model: Test Error",str(err))
     else: 
         self.fail("RuntimeError expected")
Пример #34
0
    def test_vtree(self):
        top = Assembly()
        sub = top.add('sub', Assembly())
        sub.add('comp', LoadsComp())
        sub.driver.workflow.add('comp')
        sub.create_passthrough('comp.loads_in')
        sub.create_passthrough('comp.loads_out')
        top.driver.workflow.add('sub')

        sout = StringIO()
        top.recorders = [JSONCaseRecorder(sout)]

        loads = Loads()
        loads.Fx = [1, 2, 3]
        loads.Fy = [4, 5, 6]
        loads.Fz = [7, 8, 9]
        arr = LoadsArray()
        arr.loads = [loads]
        top.sub.loads_in = arr

        top.run()

        # with open('vtree.new', 'w') as out:
        #     out.write(sout.getvalue())
        self.verify(sout, 'vtree.json')
    def test_vtree(self):
        top = Assembly()
        sub = top.add('sub', Assembly())
        sub.add('comp', LoadsComp())
        sub.driver.workflow.add('comp')
        sub.create_passthrough('comp.loads_in')
        sub.create_passthrough('comp.loads_out')
        top.driver.workflow.add('sub')

        jsonfile = os.path.join(self.tempdir, 'test_vtree.json')
        old_json_file = os.path.join(os.path.dirname(__file__), 'vtree.json')
        top.recorders = [JSONCaseRecorder(jsonfile)]

        loads = Loads()
        loads.Fx = [1, 2, 3]
        loads.Fy = [4, 5, 6]
        loads.Fz = [7, 8, 9]
        arr = LoadsArray()
        arr.loads = [loads]
        top.sub.loads_in = arr

        top.run()

        cdsnew = CaseDataset(jsonfile, 'json')
        cdsold = CaseDataset(old_json_file, 'json')

        cdsold.data.vars('sub.comp.loads_out').fetch(
        )[0][0]['loads'][0]['Fx'] == cdsnew.data.vars(
            'sub.comp.loads_out').fetch()[0][0]['loads'][0]['Fx']
        cdsold.data.vars('sub.comp.loads_out').fetch(
        )[1][0]['loads'][0]['Fz'] == cdsnew.data.vars(
            'sub.comp.loads_out').fetch()[1][0]['loads'][0]['Fz']
    def test_invalid_form(self):
        model = Assembly()

        model.add('driver', DistributionCaseDriver())
        model.add('driven', SimpleComponent())
        model.driver.workflow.add('driven')
        model.driver.distribution_generator = FiniteDifferenceGenerator(model.driver)
        model.driver.add_response('driven.y')
        model.driver.add_parameter("driven.x", low=-10., high=10., fd_step=0.1)

        try:
            model.driver.distribution_generator.form = "INVALID_FORM"
        except ValueError, err:
            msg = ": Variable 'form' must be in ['CENTRAL', 'FORWARD', 'BACKWARD'], " \
                  "but a value of INVALID_FORM <type 'str'> was specified."
            self.assertEqual(str(err), msg)
    def test_vtree(self):
        top = Assembly()
        sub = top.add('sub', Assembly())
        sub.add('comp', LoadsComp())
        sub.driver.workflow.add('comp')
        sub.create_passthrough('comp.loads_in')
        sub.create_passthrough('comp.loads_out')
        top.driver.workflow.add('sub')

        sout = StringIO()
        top.recorders = [JSONCaseRecorder(sout)]

        loads = Loads()
        loads.Fx = [1, 2, 3]
        loads.Fy = [4, 5, 6]
        loads.Fz = [7, 8, 9]
        arr = LoadsArray()
        arr.loads = [loads]
        top.sub.loads_in = arr

        top.run()

        # with open('vtree.new', 'w') as out:
        #     out.write(sout.getvalue())
        self.verify(sout, 'vtree.json')
    def test_basic_delegation(self):

        top = Assembly()
        top.add('geo', GeomComponent())

        # Function not there before we slot
        self.assertTrue(not hasattr(top.geo, 'apply_deriv'))
        self.assertTrue(not hasattr(top.geo, 'apply_derivT'))
        self.assertTrue(not hasattr(top.geo, 'provideJ'))

        top.geo.add('parametric_geometry', GeoWithDerivatives())

        # Now they should be there.
        self.assertTrue(hasattr(top.geo, 'apply_deriv'))
        self.assertTrue(hasattr(top.geo, 'apply_derivT'))
        self.assertTrue(hasattr(top.geo, 'provideJ'))
    def test_vtree(self):
        top = Assembly()
        sub = top.add('sub', Assembly())
        sub.add('comp', LoadsComp())
        sub.driver.workflow.add('comp')
        sub.create_passthrough('comp.loads_in')
        sub.create_passthrough('comp.loads_out')
        top.driver.workflow.add('sub')


        jsonfile = os.path.join(self.tempdir, 'test_vtree.json')
        old_json_file = os.path.join(os.path.dirname(__file__), 'vtree.json')
        top.recorders = [JSONCaseRecorder(jsonfile)]

        loads = Loads()
        loads.Fx = [1, 2, 3]
        loads.Fy = [4, 5, 6]
        loads.Fz = [7, 8, 9]
        arr = LoadsArray()
        arr.loads = [loads]
        top.sub.loads_in = arr

        top.run()

        cdsnew = CaseDataset(jsonfile, 'json')
        cdsold = CaseDataset(old_json_file, 'json')


        cdsold.data.vars('sub.comp.loads_out').fetch()[0][0]['loads'][0]['Fx'] == cdsnew.data.vars('sub.comp.loads_out').fetch()[0][0]['loads'][0]['Fx']
        cdsold.data.vars('sub.comp.loads_out').fetch()[1][0]['loads'][0]['Fz'] == cdsnew.data.vars('sub.comp.loads_out').fetch()[1][0]['loads'][0]['Fz']
Пример #40
0
    def test_invalid_form(self):
        model = Assembly()

        model.add('driver', DistributionCaseDriver())
        model.add('driven', SimpleComponent())
        model.driver.workflow.add('driven')
        model.driver.distribution_generator = FiniteDifferenceGenerator(
            model.driver)
        model.driver.add_response('driven.y')
        model.driver.add_parameter("driven.x", low=-10., high=10., fd_step=0.1)

        try:
            model.driver.distribution_generator.form = "INVALID_FORM"
        except ValueError, err:
            msg = ": Variable 'form' must be in ['CENTRAL', 'FORWARD', 'BACKWARD'], " \
                  "but a value of INVALID_FORM <type 'str'> was specified."
            self.assertEqual(str(err), msg)
Пример #41
0
    def test_invalid_case_outputs(self):
        model = Assembly()

        model.add('driver', DistributionCaseDriver())
        model.add('driven', SimpleComponent())
        model.driver.workflow.add('driven')
        model.driver.distribution_generator = FiniteDifferenceGenerator(
            model.driver)
        try:
            model.driver.add_response('driven.invalid')
        except ValueError as err:
            self.assertEqual(
                str(err), "driver: Can't add response "
                "'driven.invalid' because of invalid variables"
                " 'driven.invalid'")
        else:
            self.fail('Expected ValueError')
Пример #42
0
    def test_workflow_itername(self):
        # top
        #     comp1
        #     driverA
        #         comp1
        #         comp2
        #     driverB
        #         comp2
        #         subassy
        #             comp3
        top = Assembly()
        top.add('comp1', Basic_Component())
        top.add('driverA', Run_N(4))
        top.add('comp2', Basic_Component())
        top.add('driverB', Run_N(3))

        sub = top.add('subassy', Assembly())
        sout_sub = StringIO.StringIO()
        sub.driver.recorders = [DumpCaseRecorder(sout_sub)]
        sub.add('comp3', Basic_Component())
        sub.driver.workflow.add('comp3')

        top.driver.workflow.add(('comp1', 'driverA', 'driverB'))
        sout = StringIO.StringIO()
        top.driver.recorders = [DumpCaseRecorder(sout)]
        
        top.driverA.workflow.add(('comp1', 'comp2'))
        soutA = StringIO.StringIO()
        top.driverA.recorders = [DumpCaseRecorder(soutA)]
        top.driverB.workflow.add(('comp2', 'subassy'))
        soutB = StringIO.StringIO()
        top.driverB.recorders = [DumpCaseRecorder(soutB)]

        top.run()

        lines = [l.strip() for l in sout.getvalue().split('\n') if 'itername' in l]
        linesA = [l.strip() for l in soutA.getvalue().split('\n') if 'itername' in l]
        linesB = [l.strip() for l in soutB.getvalue().split('\n') if 'itername' in l]
        lines_sub = [l.strip() for l in sout_sub.getvalue().split('\n') if 'itername' in l]
        
        self.assertEqual(lines, ['driver.workflow.itername: 1'])
        self.assertEqual(linesA, ['driverA.workflow.itername: 1-1.1',
                                  'driverA.workflow.itername: 1-1.2',
                                  'driverA.workflow.itername: 1-1.3',
                                  'driverA.workflow.itername: 1-1.4',
                                  'driverA.workflow.itername: 1-1.5'])
        self.assertEqual(linesB, ['driverB.workflow.itername: 1-2.1',
                                  'driverB.workflow.itername: 1-2.2',
                                  'driverB.workflow.itername: 1-2.3',
                                  'driverB.workflow.itername: 1-2.4'])
        self.assertEqual(lines_sub, ['driver.workflow.itername: 1-2.1-2.1'])
    def test_workflow_itername(self):
        # top
        #     comp1
        #     driverA
        #         comp1
        #         comp2
        #     driverB
        #         comp2
        #         subassy
        #             comp3
        top = Assembly()
        top.add('comp1', Basic_Component())
        top.add('driverA', Run_N(4))
        top.add('comp2', Basic_Component())
        top.add('driverB', Run_N(3))

        sub = top.add('subassy', Assembly())
        sub.add('comp3', Basic_Component())
        sub.driver.workflow.add('comp3')

        top.driver.workflow.add(('comp1', 'driverA', 'driverB'))
        sout = StringIO.StringIO()
        top.recorders = [DumpCaseRecorder(sout)]

        top.driverA.workflow.add(('comp1', 'comp2'))
        top.driverB.workflow.add(('comp2', 'subassy'))

        top.run()

        expected = [
            'driverA.workflow.itername: 1-driverA.1',
            'driverA.workflow.itername: 1-driverA.2',
            'driverA.workflow.itername: 1-driverA.3',
            'driverA.workflow.itername: 1-driverA.4',
            'driverA.workflow.itername: 1-driverA.5',
            'subassy.driver.workflow.itername: 1-driverB.1-subassy.1',
            'driverB.workflow.itername: 1-driverB.1',
            'subassy.driver.workflow.itername: 1-driverB.2-subassy.1',
            'driverB.workflow.itername: 1-driverB.2',
            'subassy.driver.workflow.itername: 1-driverB.3-subassy.1',
            'driverB.workflow.itername: 1-driverB.3',
            'subassy.driver.workflow.itername: 1-driverB.4-subassy.1',
            'driverB.workflow.itername: 1-driverB.4',
            'driver.workflow.itername: 1'
        ]
        lines = [
            l.strip() for l in sout.getvalue().split('\n')
            if 'workflow.itername' in l
        ]
        for i, line in enumerate(lines):
            self.assertEqual(line, expected[i])
    def test_tracing(self):
        # Check tracing of iteration coordinates.
        top = Assembly()
        comp = top.add('comp1', Dummy())
        top.add('driverA', Driver())
        comp = top.add('comp2', Dummy())
        top.add('driverB', Driver())

        sub = top.add('subassy', Assembly())
        comp = sub.add('comp3', Dummy())
        sub.driver.workflow.add('comp3')

        top.driver.workflow = SequentialWorkflow()
        top.driver.workflow.add(('comp1', 'driverA', 'driverB'))
        top.driverA.workflow.add(('comp1', 'comp2'))
        top.driverB.workflow.add(('comp2', 'subassy'))

        trace_out = cStringIO.StringIO()
        enable_trace(trace_out)
        top.run()
        expected = """\
1-comp1
1-driverA.1-comp1
1-driverA.1-comp2
1-driverB.1-comp2
1-driverB.1-subassy.1-comp3
"""
        self.assertEqual(trace_out.getvalue(), expected)

        disable_trace()
        top.run()
        self.assertEqual(trace_out.getvalue(), expected)
Пример #45
0
    def test_scid2(self):
        logging.debug('')
        logging.debug('test_simplecid')

        top = Assembly()
        top.add('generator', Generator())
        cid = top.add('cid', SimpleCaseIterDriver())
        top.add('driven', DrivenComponent())
        top.add('verifier', Verifier())

        top.driver.workflow.add(('generator', 'cid', 'verifier'))
        cid.workflow.add('driven')
        cid.add_parameter('driven.x')
        cid.add_parameter('driven.y')
        cid.add_response('driven.rosen_suzuki')
        cid.add_response('driven.sum_y')

        top.connect('generator.x', 'cid.case_inputs.driven.x')
        top.connect('generator.y', 'cid.case_inputs.driven.y')

        top.connect('generator.x', 'verifier.x')
        top.connect('generator.y', 'verifier.y')
        top.connect('cid.case_outputs.driven.rosen_suzuki',
                    'verifier.rosen_suzuki')
        top.connect('cid.case_outputs.driven.sum_y', 'verifier.sum_y')

        top.run()
Пример #46
0
    def test_casetree(self):
        # Record tree of cases via workflow.
        top = Assembly()
        top.recorders = [DumbRecorder()]

        top.add('driver2', CaseDriver(3))
        top.add('comp2', CaseComponent())
        top.driver2.workflow.add('comp2')
        top.driver2.add_parameter('comp2.x', low=0, high=10)
        top.driver2.add_objective('comp2.y')

        top.add('driver1', CaseDriver(2))
        top.add('comp1', CaseComponent())
        top.driver1.add_parameter('comp1.x', low=0, high=10)
        top.driver1.add_objective('comp1.y')
        top.driver1.workflow.add(['comp1', 'driver2'])

        top.driver.workflow.add('driver1')
        top.run()

        print
        print 'Forest:'
        roots = CaseTreeNode.sort(top.recorders[0].get_iterator())
        for root in roots:
            root.dump(1)

        print
        print 'Iternames:'
        for root in roots:
            for name in root.iternames():
                print '   ', name

        expected = [
            '1',
            '1-driver1.1',
            '1-driver1.1-driver2.1',
            '1-driver1.1-driver2.2',
            '1-driver1.1-driver2.3',
            '1-driver1.2',
            '1-driver1.2-driver2.1',
            '1-driver1.2-driver2.2',
            '1-driver1.2-driver2.3'
        ]
        for i, name in enumerate(roots[0].iternames()):
            self.assertEqual(name, expected[i])
    def test_scid2(self):
        logging.debug('')
        logging.debug('test_simplecid')

        top = Assembly()
        top.add('generator', Generator())
        cid = top.add('cid', SimpleCaseIterDriver())
        top.add('driven', DrivenComponent())
        top.add('verifier', Verifier())

        top.driver.workflow.add(('generator', 'cid', 'verifier'))
        cid.workflow.add('driven')
        cid.add_parameter('driven.x')
        cid.add_parameter('driven.y')
        cid.add_response('driven.rosen_suzuki')
        cid.add_response('driven.sum_y')

        top.connect('generator.x', 'cid.case_inputs.driven.x')
        top.connect('generator.y', 'cid.case_inputs.driven.y')

        top.connect('generator.x', 'verifier.x')
        top.connect('generator.y', 'verifier.y')
        top.connect('cid.case_outputs.driven.rosen_suzuki', 'verifier.rosen_suzuki')
        top.connect('cid.case_outputs.driven.sum_y', 'verifier.sum_y')

        top.run()
Пример #48
0
    def test_tracing(self):
        # Check tracing of iteration coordinates.
        top = Assembly()
        comp = top.add('comp1', Dummy())
        top.add('driverA', Driver())
        comp = top.add('comp2', Dummy())
        top.add('driverB', Driver())

        sub = top.add('subassy', Assembly())
        comp = sub.add('comp3', Dummy())
        sub.driver.workflow.add('comp3')

        top.driver.workflow = SequentialWorkflow()
        top.driver.workflow.add(('comp1', 'driverA', 'driverB'))
        top.driverA.workflow.add(('comp1', 'comp2'))
        top.driverB.workflow.add(('comp2', 'subassy'))

        trace_out = cStringIO.StringIO()
        enable_trace(trace_out)
        top.run()
        expected = """\
1-comp1
1-driverA.1-comp1
1-driverA.1-comp2
1-driverB.1-comp2
1-driverB.1-subassy.1-comp3
"""
        self.assertEqual(trace_out.getvalue(), expected)

        disable_trace()
        top.run()
        self.assertEqual(trace_out.getvalue(), expected)
Пример #49
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'])
    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'])
Пример #51
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"])
    def test_workflow_itername(self):
        # top
        #     comp1
        #     driverA
        #         comp1
        #         comp2
        #     driverB
        #         comp2
        #         subassy
        #             comp3
        top = Assembly()
        top.add('comp1', Basic_Component())
        top.add('driverA', Run_N(4))
        top.add('comp2', Basic_Component())
        top.add('driverB', Run_N(3))

        sub = top.add('subassy', Assembly())
        sub.add('comp3', Basic_Component())
        sub.driver.workflow.add('comp3')

        top.driver.workflow.add(('comp1', 'driverA', 'driverB'))
        sout = StringIO.StringIO()
        top.recorders = [DumpCaseRecorder(sout)]

        top.driverA.workflow.add(('comp1', 'comp2'))
        top.driverB.workflow.add(('comp2', 'subassy'))

        top.run()

        expected = [
         'driverA.workflow.itername: 1-driverA.1',
         'driverA.workflow.itername: 1-driverA.2',
         'driverA.workflow.itername: 1-driverA.3',
         'driverA.workflow.itername: 1-driverA.4',
         'driverA.workflow.itername: 1-driverA.5',
         'subassy.driver.workflow.itername: 1-driverB.1-subassy.1',
         'driverB.workflow.itername: 1-driverB.1',
         'subassy.driver.workflow.itername: 1-driverB.2-subassy.1',
         'driverB.workflow.itername: 1-driverB.2',
         'subassy.driver.workflow.itername: 1-driverB.3-subassy.1',
         'driverB.workflow.itername: 1-driverB.3',
         'subassy.driver.workflow.itername: 1-driverB.4-subassy.1',
         'driverB.workflow.itername: 1-driverB.4',
         'driver.workflow.itername: 1'
        ]
        lines = [l.strip() for l in sout.getvalue().split('\n')
                                 if 'workflow.itername' in l]
        for i, line in enumerate(lines):
            self.assertEqual(line, expected[i])
    def test_invalid_case_outputs(self):

        model = Assembly()

        model.add('driver', DistributionCaseDriver())
        model.add('driven', SimpleComponent())
        model.driver.workflow.add('driven')
        model.driver.distribution_generator = FiniteDifferenceGenerator(model.driver)
        model.driver.case_outputs = ['driven.invalid']
        model.driver.add_parameter("driven.x", low=-10., high=10., fd_step = 0.1 )
        model.driver.error_policy = 'RETRY'

        results = ListCaseRecorder()
        model.driver.recorders = [results]

        model.driver.distribution_generator.form = "FORWARD"
        model.driver.distribution_generator.order = 2
        model.run()

        self.assertEqual(results.cases[0].items()[1][1], _Missing )
Пример #54
0
    def test_casetree(self):
        # Record tree of cases via workflow.
        top = Assembly()
        top.recorders = [DumbRecorder()]

        top.add('driver2', CaseDriver(3))
        top.add('comp2', CaseComponent())
        top.driver2.workflow.add('comp2')
        top.driver2.add_parameter('comp2.x', low=0, high=10)
        top.driver2.add_objective('comp2.y')

        top.add('driver1', CaseDriver(2))
        top.add('comp1', CaseComponent())
        top.driver1.add_parameter('comp1.x', low=0, high=10)
        top.driver1.add_objective('comp1.y')
        top.driver1.workflow.add(['comp1', 'driver2'])

        top.driver.workflow.add('driver1')
        top.run()

        print
        print 'Forest:'
        roots = CaseTreeNode.sort(top.recorders[0].get_iterator())
        for root in roots:
            root.dump(1)

        print
        print 'Iternames:'
        for root in roots:
            for name in root.iternames():
                print '   ', name

        expected = [
            '1', '1-driver1.1', '1-driver1.1-driver2.1',
            '1-driver1.1-driver2.2', '1-driver1.1-driver2.3', '1-driver1.2',
            '1-driver1.2-driver2.1', '1-driver1.2-driver2.2',
            '1-driver1.2-driver2.3'
        ]
        for i, name in enumerate(roots[0].iternames()):
            self.assertEqual(name, expected[i])
    def test_circular_dependency(self):

        self.asm.connect('comp1.rout', 'comp2.r')

        # Cyclic graphs are permitted in declaration.
        self.asm.connect('comp2.rout', 'comp1.r')

        # Unconnected added twice shouldn't cause exception.
        asm = Assembly()
        asm.add('a', Simple())
        asm.add('b', Simple())
        dup1 = asm.add('dup1', Simple())
        dup2 = asm.add('dup2', Simple())
        self.assertEqual(dup1.exec_count, 0)
        self.assertEqual(dup2.exec_count, 0)
        sequence = ['dup1', 'a', 'dup2', 'dup1', 'b', 'dup1', 'dup2']
        asm.driver.workflow.add(sequence)
        self.assertEqual([comp.name for comp in asm.driver.workflow], sequence)
        asm.run()
        self.assertEqual(dup1.exec_count, 3)
        self.assertEqual(dup2.exec_count, 2)

        asm = Assembly()
        asm.add('a', Simple())
        asm.add('b', Simple())
        dup1 = asm.add('dup1', Simple())
        dup2 = asm.add('dup2', Simple())
        self.assertEqual(dup1.exec_count, 0)
        self.assertEqual(dup2.exec_count, 0)
        sequence = ['dup1', 'a', 'dup2', 'dup1', 'b', 'dup1', 'dup2']
        asm.driver.workflow.add(sequence)
        self.assertEqual([comp.name for comp in asm.driver.workflow], sequence)
        asm.run()
        self.assertEqual(dup1.exec_count, 3)
        self.assertEqual(dup2.exec_count, 2)
    def test_smart_low_high(self):

        top = Assembly()
        top.add('comp', MyComp())
        driver = top.add('driver', SimpleDriver())
        top.comp.add('x1', Float(1.0, iotype='in', low=-1.0, high=1.0))
        driver.add_objective('comp.y')
        driver.add_parameter('comp.x1', low=-1.0, high=1.0)
        driver.workflow.add('comp')

        top.driver.gradient_options.fd_form = 'central'
        top.driver.gradient_options.fd_step = 0.1

        top.comp.x1 = -0.95
        top.run()
        J = top.driver.workflow.calc_gradient()
        assert_rel_error(self, J[0, 0], -3.6, 0.001)

        top.comp.x1 = 0.95
        top.run()
        J = top.driver.workflow.calc_gradient()
        assert_rel_error(self, J[0, 0], 3.6, 0.001)
Пример #57
0
    def test_circular_dependency(self):

        self.asm.connect('comp1.rout', 'comp2.r')

        # Cyclic graphs are permitted in declaration.
        self.asm.connect('comp2.rout', 'comp1.r')

        # duplicate entries in workflow should cause exception.
        asm = Assembly()
        asm.add('a', Simple())
        asm.add('b', Simple())
        dup1 = asm.add('dup1', Simple())
        dup2 = asm.add('dup2', Simple())
        self.assertEqual(dup1.exec_count, 0)
        self.assertEqual(dup2.exec_count, 0)
        sequence = ['dup1', 'a', 'dup2', 'dup1', 'b', 'dup1', 'dup2']
        asm.driver.workflow.add(sequence)
        try:
            asm.run()
        except RuntimeError as err:
            self.assertEqual(str(err),
                "driver workflow has duplicate entries: ['dup1', 'dup2']")
Пример #58
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])