Ejemplo n.º 1
0
class Test_JMI_DAE:
    """
    This class tests pyjmi.simulation.assimulo.JMIDAE
    """
    @classmethod
    def setUpClass(cls):
        """
        Compile the test model.
        """
        #DAE test model
        fpath_DAE = os.path.join(get_files_path(), 'Modelica',
                                 'Pendulum_pack_no_opt.mo')
        cpath_DAE = 'Pendulum_pack.Pendulum'

        fname_DISC = compile_jmu(cpath_DAE, fpath_DAE)

        fpath_DISC = os.path.join(get_files_path(), 'Modelica',
                                  'IfExpExamples.mo')
        cpath_DISC = 'IfExpExamples.IfExpExample2'

        fname_DISC = compile_jmu(cpath_DISC, fpath_DISC)

        fpath = os.path.join(get_files_path(), 'Modelica', 'DoubleInput.mo')
        cpath = 'DoubleInput_Nominal'
        fname = compile_jmu(cpath,
                            fpath,
                            compiler_options={"enable_variable_scaling": True})

    def setUp(self):
        """Load the test model."""
        package_DAE = 'Pendulum_pack_Pendulum.jmu'
        package_DISC = 'IfExpExamples_IfExpExample2.jmu'
        package_INPUT = 'DoubleInput_Nominal.jmu'

        # Load the dynamic library and XML data
        self.m_DAE = JMUModel(package_DAE)
        self.m_DISC = JMUModel(package_DISC)
        self.m_INPUT = JMUModel(package_INPUT)

        # Creates the solvers
        self.DAE = JMIDAE(self.m_DAE)
        self.DISC = JMIDAE(self.m_DISC)

    @testattr(stddist=True)
    def test_result_name_file(self):
        """
        Tests user naming of result file (JMIDAE).
        """
        res = self.m_DAE.simulate()

        #Default name
        assert res.result_file == "Pendulum_pack_Pendulum_result.txt"
        assert os.path.exists(res.result_file)

        res = self.m_DAE.simulate(
            options={
                "result_file_name": "Pendulum_pack_Pendulum_result_test.txt"
            })

        #User defined name
        assert res.result_file == "Pendulum_pack_Pendulum_result_test.txt"
        assert os.path.exists(res.result_file)

    @testattr(stddist=True)
    def test_eps(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.get/set_eps
        """
        nose.tools.assert_raises(JMIModel_Exception, self.DAE._set_eps, 'Test')
        nose.tools.assert_raises(JMIModel_Exception, self.DAE._set_eps, -1)
        nose.tools.assert_raises(JMIModel_Exception, self.DAE._set_eps, 1)
        nose.tools.assert_raises(JMIModel_Exception, self.DAE._set_eps, -1.0)

        self.DAE.eps = 1.0
        assert self.DAE.eps == 1.0
        self.DAE.eps = 10.0
        assert self.DAE.eps == 10.0

    @testattr(stddist=True)
    def test_max_eIteration(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.get/set_max_eIteration
        """
        nose.tools.assert_raises(JMIModel_Exception,
                                 self.DAE._set_max_eIteration, 'Test')
        nose.tools.assert_raises(JMIModel_Exception,
                                 self.DAE._set_max_eIteration, -1)
        nose.tools.assert_raises(JMIModel_Exception,
                                 self.DAE._set_max_eIteration, 1.0)
        nose.tools.assert_raises(JMIModel_Exception,
                                 self.DAE._set_max_eIteration, -1.0)

        self.DAE.max_eIter = 1
        assert self.DAE.max_eIter == 1
        self.DAE.max_eIter = 10
        assert self.DAE.max_eIter == 10

    @testattr(stddist=True)
    def test_check_eIter(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.check_eIter
        """
        self.DAE.eps = 1e-4

        b_mode = [1, -1, 0]
        a_mode = [-1, 1, 1]

        [eIter, iter] = self.DAE.check_eIter(b_mode, a_mode)

        assert iter == True
        assert eIter[0] == -1
        assert eIter[1] == 1
        assert eIter[2] == 1

        b_mode = [2, 5, 1]
        a_mode = [0, 2, 2]

        [eIter, iter] = self.DAE.check_eIter(b_mode, a_mode)

        assert iter == False
        assert eIter[0] == 0
        assert eIter[1] == 0
        assert eIter[2] == 0

    @testattr(stddist=True)
    def test_scaled_input(self):
        """
        Tests that simulation of scaled input works.
        """
        t = N.linspace(0., 10., 100)
        u1 = N.cos(t)
        u2 = N.sin(t)
        u_traj = N.transpose(N.vstack((t, u1, u2)))

        res = self.m_INPUT.simulate(final_time=10,
                                    input=(['u1', 'u2'], u_traj))

        nose.tools.assert_almost_equal(res.initial('u1'), 1.000000000, 3)
        nose.tools.assert_almost_equal(res.initial('u2'), 0.000000000, 3)
        nose.tools.assert_almost_equal(res.final('u1'), -0.839071529, 3)
        nose.tools.assert_almost_equal(res.final('u2'), -0.544021110, 3)

    @testattr(stddist=True)
    def test_event_switch(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.event_switch
        """
        solver = lambda x: 1
        solver.verbosity = 1
        solver.LOUD = 2
        solver.sw = [False, False, True]
        event_info = [1, 0, -1]

        self.DAE.event_switch(solver, event_info)

        assert solver.sw[0] == True
        assert solver.sw[1] == False
        assert solver.sw[2] == False

    @testattr(stddist=True)
    def test_f(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.f
        """
        test_x = N.array([1., 1., 1., 1.])
        test_dx = N.array([2., 2., 2., 2.])
        test_t = 2

        temp_f = self.DAE.res(test_t, test_x, test_dx)

        assert temp_f[0] == -1.0
        assert temp_f[2] == -1.0
        assert temp_f[3] == -2.0
        nose.tools.assert_almost_equal(temp_f[1], -1.158529, 5)

    @testattr(stddist=True)
    def test_g(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.g
        """
        pass  #DEPRECATED

        #temp_g = self.DISC.g(2.,[1.,2.],[2.,0],[0,0])
        #nose.tools.assert_almost_equal(temp_g[0], -0.429203, 5)
        #nose.tools.assert_almost_equal(temp_g[1], 1.141592, 5)

    @testattr(stddist=True)
    def test_g_adjust(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.g
        """
        pass  #DEPRECATED
        """
        self.DISC.eps = 2.0

        temp_g_adjust = self.DISC.g_adjust(2.,[1.,2.],[2.,0],[0,0])

        nose.tools.assert_almost_equal(temp_g_adjust[0], -2.429203, 5)
        nose.tools.assert_almost_equal(temp_g_adjust[1], -0.858407, 5)
        
        temp_g_adjust = self.DISC.g_adjust(2.,[1.,2.],[2.,0],[0,1])
        
        nose.tools.assert_almost_equal(temp_g_adjust[0], -2.429203, 5)
        nose.tools.assert_almost_equal(temp_g_adjust[1], 3.141592, 5)
        """

    @testattr(stddist=True)
    def test_init(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.__init__
        """
        assert self.m_DAE == self.DAE._model
        assert self.DAE.max_eIter == 50
        assert self.DAE.eps == 1e-9
        assert self.DAE.jac == self.DAE.j

        temp_y0 = N.append(self.m_DAE.real_x.copy(), self.m_DAE.real_w.copy())
        temp_yd0 = N.append(self.m_DAE.real_dx.copy(),
                            [0] * len(self.m_DAE.real_w))
        temp_algvar = [1.0] * len(self.m_DAE.real_x) + [0.0] * len(
            self.m_DAE.real_w)

        for i in range(len(temp_y0)):
            assert temp_y0[i] == self.DAE.y0[i]
            assert temp_yd0[i] == self.DAE.yd0[i]
            assert temp_algvar[i] == self.DAE.algvar[i]

        #Test discontiniuous system
        assert self.DISC._g_nbr == 2
        assert self.DISC.state_events == self.DISC.g_adjust

    @testattr(stddist=True)
    def test_reset(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.reset
        """
        self.DAE.t0 = 10.0
        self.DAE._model.real_x = N.array([2., 2., 2., 2.])
        self.DAE._model.real_dx = N.array([2., 2., 2., 2.])

        self.DAE.reset()

        assert self.DAE._model.t == 10.0
        assert self.DAE._model.real_x[0] != 2.0
        assert self.DAE._model.real_x[1] != 2.0
        assert self.DAE._model.real_x[2] != 2.0
        assert self.DAE._model.real_dx[0] != 2.0
        assert self.DAE._model.real_dx[1] != 2.0
        assert self.DAE._model.real_dx[2] != 2.0

        assert self.DAE.y0[0] == 0.1

    @testattr(stddist=True)
    def test_event_iteration(self):
        """
        This tests JMUs with event iteration (JModelica.org).
        """
        #DEPRECATED!
        pass
        """
        jmu_name = compile_jmu('EventIter.EventMiddleIter', os.path.join(path_to_mos,'EventIter.mo'))

        model = JMUModel(jmu_name)

        sim_res = model.simulate(final_time=10)

        x = sim_res['x']
        y = sim_res['y']
        z = sim_res['z']
        
        nose.tools.assert_almost_equal(x[0], 2.00000, 4)
        nose.tools.assert_almost_equal(x[-1], 10.000000, 4)
        nose.tools.assert_almost_equal(y[-1], 3.0000000, 4)
        nose.tools.assert_almost_equal(z[-1], 2.0000000, 4)
        
        jmu_name = compile_jmu('EventIter.EventStartIter', os.path.join(path_to_mos,'EventIter.mo'))
        
        model = JMUModel(jmu_name)

        sim_res = model.simulate(final_time=10)

        x = sim_res['x']
        y = sim_res['y']
        z = sim_res['z']
        
        nose.tools.assert_almost_equal(x[0], 1.00000, 4)
        nose.tools.assert_almost_equal(y[0], -1.00000, 4)
        nose.tools.assert_almost_equal(z[0], 1.00000, 4)
        nose.tools.assert_almost_equal(x[-1], -2.000000, 4)
        nose.tools.assert_almost_equal(y[-1], -1.0000000, 4)
        nose.tools.assert_almost_equal(z[-1], 4.0000000, 4)
        """

    @testattr(stddist=True)
    def test_j(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.j
        """

        test_x = N.array([1., 1., 1., 1.])
        test_dx = N.array([2., 2., 2., 2.])
        test_t = 2

        temp_j = self.DAE.j(0.1, test_t, test_x, test_dx)
        #print temp_j
        assert temp_j[0, 0] == -0.1
        assert temp_j[0, 1] == 1.0
        assert temp_j[1, 1] == -0.1
        nose.tools.assert_almost_equal(temp_j[1, 0], 0.5403023, 5)

    @testattr(stddist=True)
    def test_handle_event(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.handle_event
        """
        solver = lambda x: 1
        solver.verbosity = 1
        solver.NORMAL = solver.LOUD = 2
        solver.t_sol = [[1.0]]
        solver.y_sol = [[1., 1.]]
        solver.yd_sol = [[1., 1.]]
        solver.t = N.array(1.0)
        solver.y = N.array([1., 1.])
        solver.yd = N.array([1., 1.])
        solver.sw = [False, True]
        self.DISC.event_switch = lambda x, y: 1
        self.DISC.init_mode = lambda x: 1
        self.DISC.check_eIter = lambda x, y: [True, False]

        self.DISC.handle_event(solver, [1, 1])

        self.DISC.check_eIter = lambda x, y: [True, True]

        self.DISC.handle_event(solver, [1, 1])

    @testattr(stddist=True)
    def test_init_mode(self):
        """
        Tests pyjmi.simulation.assimulo.init_mode
        """
        solver = lambda x: 1
        solver.sw = [True, True]
        solver.make_consistent = lambda x: 1

        self.DISC.init_mode(solver)

        assert self.DISC._model.sw[0] == 1
        assert self.DISC._model.sw[1] == 1

    @testattr(stddist=True)
    def test_initiate(self):
        """
        Tests pyjmi.simulation.assimulo.initiate
        """
        #self.DAE.init_mode = lambda x:1
        #self.DAE.initiate('Test')

        #self.DISC.handle_event = lambda x,y:1
        #solver = lambda x:1
        #solver.switches = [False, False]

        #self.DISC.initiate(solver)

        #assert solver.switches[0] == True
        #assert solver.switches[1] == True
        pass

    """
    @testattr(stddist = True)
    def test_scaled_input(self):
        #This tests simulation with scaled input.
        fpath = os.path.join(get_files_path(), 'Modelica', 'VDP.mop')
        cpath = 'VDP_pack.VDP_scaled_input'
        
        # compile VDP
        jmu_name = compile_jmu(cpath, fpath, 
                    compiler_options={'enable_variable_scaling':True})

        # Load the dynamic library and XML data
        vdp = JMUModel(jmu_name)
        
        t = N.linspace(0.,10.,100) 
        u1 = N.cos(t)/10.0
        u_traj = N.transpose(N.vstack((t,u1)))
        
        res_scaled = vdp.simulate(final_time=10, input=(['u'],u_traj))
        
        # compile VDP
        jmu_name = compile_jmu(cpath, fpath, 
                    compiler_options={'enable_variable_scaling':False})

        # Load the dynamic library and XML data
        vdp = JMUModel(jmu_name)
        
        t = N.linspace(0.,10.,100) 
        u1 = N.cos(t)
        u_traj = N.transpose(N.vstack((t,u1)))
        
        res = vdp.simulate(final_time=10, input=(['u'],u_traj))
        
        nose.tools.assert_almost_equal(res["u"][0], res_scaled["u"][0], 3)
        nose.tools.assert_almost_equal(res["u"][-1], res_scaled["u"][-1], 3)
    """

    @testattr(stddist=True)
    def test_order_input(self):
        """
        This tests that the inputs are sorted in an correct value reference order
        when being written to file.
        """
        fpath = os.path.join(get_files_path(), 'Modelica', 'OrderInputs.mop')
        cpath = 'OptimInputs'

        unames = ['u1', 'u_e2', 'u_h3', 'u_c4', 'u_p5']
        n = len(unames)

        uvalues = [1., 2., 3., 4., 5.]

        data = N.array([[0., 1., 2., 3., 4., 5.], [1., 1., 2., 3., 4., 5.],
                        [2., 1., 2., 3., 4., 5.]])
        inputtuple = (unames, data)
        jmu_name = compile_jmu(cpath, fpath)

        model = JMUModel(jmu_name)
        res = model.simulate(0, 2, input=inputtuple)

        nose.tools.assert_almost_equal(res["u1"][-1], 1.000000000, 3)
        nose.tools.assert_almost_equal(res["u_e2"][-1], 2.00000, 3)
        nose.tools.assert_almost_equal(res["u_h3"][-1], 3.00000, 3)
        nose.tools.assert_almost_equal(res["u_c4"][-1], 4.000000, 3)
        nose.tools.assert_almost_equal(res["u_p5"][-1], 5.000000, 3)

        nose.tools.assert_almost_equal(res["T.u1"][-1], 1.000000000, 3)
        nose.tools.assert_almost_equal(res["T.u_e2"][-1], 2.00000, 3)
        nose.tools.assert_almost_equal(res["T.u_h3"][-1], 3.00000, 3)
        nose.tools.assert_almost_equal(res["T.u_c4"][-1], 4.000000, 3)
        nose.tools.assert_almost_equal(res["T.u_p5"][-1], 5.000000, 3)

    @testattr(stddist=True)
    def test_double_input(self):
        """
        This tests double input.
        """
        fpath = os.path.join(get_files_path(), 'Modelica', 'DoubleInput.mo')
        cpath = 'DoubleInput'

        # compile VDP
        fname = compile_jmu(
            cpath, fpath, compiler_options={'state_start_values_fixed': True})

        # Load the dynamic library and XML data
        dInput = JMUModel(fname)

        t = N.linspace(0., 10., 100)
        u1 = N.cos(t)
        u2 = N.sin(t)
        u_traj = N.transpose(N.vstack((t, u1, u2)))

        res = dInput.simulate(final_time=10, input=(['u1', 'u2'], u_traj))

        nose.tools.assert_almost_equal(res.initial('u1'), 1.000000000, 3)
        nose.tools.assert_almost_equal(res.initial('u2'), 0.000000000, 3)
        nose.tools.assert_almost_equal(res.final('u1'), -0.839071529, 3)
        nose.tools.assert_almost_equal(res.final('u2'), -0.544021110, 3)

        #TEST REVERSE ORDER OF INPUT

        # Load the dynamic library and XML data
        dInput = JMUModel(fname)

        t = N.linspace(0., 10., 100)
        u1 = N.cos(t)
        u2 = N.sin(t)
        u_traj = N.transpose(N.vstack((t, u2, u1)))

        res = dInput.simulate(final_time=10, input=(['u2', 'u1'], u_traj))

        nose.tools.assert_almost_equal(res.initial('u1'), 1.000000000, 3)
        nose.tools.assert_almost_equal(res.initial('u2'), 0.000000000, 3)
        nose.tools.assert_almost_equal(res.final('u1'), -0.839071529, 3)
        nose.tools.assert_almost_equal(res.final('u2'), -0.544021110, 3)

    @testattr(stddist=True)
    def test_double_input_with_function(self):
        """
        This tests double input with function.
        """
        fpath = os.path.join(get_files_path(), 'Modelica', 'DoubleInput.mo')
        cpath = 'DoubleInput'

        # compile VDP
        fname = compile_jmu(
            cpath, fpath, compiler_options={'state_start_values_fixed': True})

        # Load the dynamic library and XML data
        dInput = JMUModel(fname)

        def func(t):
            return N.array([N.cos(t), N.sin(t)])

        res = dInput.simulate(final_time=10, input=(['u1', 'u2'], func))

        nose.tools.assert_almost_equal(res.initial('u1'), 1.000000000, 3)
        nose.tools.assert_almost_equal(res.initial('u2'), 0.000000000, 3)
        nose.tools.assert_almost_equal(res.final('u1'), -0.839071529, 3)
        nose.tools.assert_almost_equal(res.final('u2'), -0.544021110, 3)

        #TEST REVERSE ORDER OF INPUT

        # Load the dynamic library and XML data
        dInput = JMUModel(fname)

        def func(t):
            return [N.sin(t), N.cos(t)]

        res = dInput.simulate(final_time=10, input=(['u2', 'u1'], func))

        nose.tools.assert_almost_equal(res.initial('u1'), 1.000000000, 3)
        nose.tools.assert_almost_equal(res.initial('u2'), 0.000000000, 3)
        nose.tools.assert_almost_equal(res.final('u1'), -0.839071529, 3)
        nose.tools.assert_almost_equal(res.final('u2'), -0.544021110, 3)
class Test_JMI_DAE:
    """
    This class tests pyjmi.simulation.assimulo.JMIDAE
    """
    @classmethod
    def setUpClass(cls):
        """
        Compile the test model.
        """
        #DAE test model
        fpath_DAE = os.path.join(get_files_path(), 'Modelica', 
            'Pendulum_pack_no_opt.mo')
        cpath_DAE = 'Pendulum_pack.Pendulum'

        fname_DISC = compile_jmu(cpath_DAE, fpath_DAE)
        
        fpath_DISC = os.path.join(get_files_path(), 'Modelica', 
            'IfExpExamples.mo')
        cpath_DISC = 'IfExpExamples.IfExpExample2'
        
        fname_DISC = compile_jmu(cpath_DISC, fpath_DISC)
        
        fpath = os.path.join(get_files_path(), 'Modelica', 'DoubleInput.mo')
        cpath = 'DoubleInput_Nominal'
        fname = compile_jmu(cpath, fpath, 
                    compiler_options={"enable_variable_scaling":True})
        
    def setUp(self):
        """Load the test model."""
        package_DAE = 'Pendulum_pack_Pendulum.jmu'
        package_DISC = 'IfExpExamples_IfExpExample2.jmu'
        package_INPUT = 'DoubleInput_Nominal.jmu'

        # Load the dynamic library and XML data
        self.m_DAE = JMUModel(package_DAE)
        self.m_DISC = JMUModel(package_DISC)
        self.m_INPUT = JMUModel(package_INPUT)
        
        # Creates the solvers
        self.DAE = JMIDAE(self.m_DAE)
        self.DISC = JMIDAE(self.m_DISC)
        
    @testattr(stddist = True)
    def test_result_name_file(self):
        """
        Tests user naming of result file (JMIDAE).
        """
        res = self.m_DAE.simulate()
        
        #Default name
        assert res.result_file == "Pendulum_pack_Pendulum_result.txt"
        assert os.path.exists(res.result_file)
        
        res = self.m_DAE.simulate(options={"result_file_name":
                                    "Pendulum_pack_Pendulum_result_test.txt"})
                                    
        #User defined name
        assert res.result_file == "Pendulum_pack_Pendulum_result_test.txt"
        assert os.path.exists(res.result_file)
        
    
    @testattr(stddist = True) 
    def test_eps(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.get/set_eps
        """
        nose.tools.assert_raises(JMIModel_Exception, self.DAE._set_eps, 'Test')
        nose.tools.assert_raises(JMIModel_Exception, self.DAE._set_eps, -1)
        nose.tools.assert_raises(JMIModel_Exception, self.DAE._set_eps, 1)
        nose.tools.assert_raises(JMIModel_Exception, self.DAE._set_eps, -1.0)
        
        self.DAE.eps = 1.0
        assert self.DAE.eps == 1.0
        self.DAE.eps = 10.0
        assert self.DAE.eps == 10.0
    
    @testattr(stddist = True) 
    def test_max_eIteration(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.get/set_max_eIteration
        """
        nose.tools.assert_raises(JMIModel_Exception, self.DAE._set_max_eIteration, 'Test')
        nose.tools.assert_raises(JMIModel_Exception, self.DAE._set_max_eIteration, -1)
        nose.tools.assert_raises(JMIModel_Exception, self.DAE._set_max_eIteration, 1.0)
        nose.tools.assert_raises(JMIModel_Exception, self.DAE._set_max_eIteration, -1.0)
        
        self.DAE.max_eIter = 1
        assert self.DAE.max_eIter == 1
        self.DAE.max_eIter = 10
        assert self.DAE.max_eIter == 10
    
    @testattr(stddist = True) 
    def test_check_eIter(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.check_eIter
        """
        self.DAE.eps = 1e-4
        
        b_mode = [1, -1, 0]
        a_mode = [-1, 1, 1]
        
        [eIter, iter] = self.DAE.check_eIter(b_mode, a_mode)
        
        assert iter == True
        assert eIter[0] == -1
        assert eIter[1] == 1
        assert eIter[2] == 1
        
        b_mode = [2, 5, 1]
        a_mode = [0, 2, 2]
        
        [eIter, iter] = self.DAE.check_eIter(b_mode, a_mode)
        
        assert iter == False
        assert eIter[0] == 0
        assert eIter[1] == 0
        assert eIter[2] == 0
    
    @testattr(stddist = True)
    def test_scaled_input(self):
        """
        Tests that simulation of scaled input works.
        """
        t = N.linspace(0.,10.,100) 
        u1 = N.cos(t)
        u2 = N.sin(t)
        u_traj = N.transpose(N.vstack((t,u1,u2)))
        
        res = self.m_INPUT.simulate(final_time=10, input=(['u1','u2'],u_traj))
        
        nose.tools.assert_almost_equal(res.initial('u1'), 1.000000000, 3)
        nose.tools.assert_almost_equal(res.initial('u2'), 0.000000000, 3)
        nose.tools.assert_almost_equal(res.final('u1'), -0.839071529, 3)
        nose.tools.assert_almost_equal(res.final('u2'), -0.544021110, 3)
        
    
    @testattr(stddist = True) 
    def test_event_switch(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.event_switch
        """
        solver = lambda x:1
        solver.verbosity = 1
        solver.LOUD = 2
        solver.sw = [False, False, True]
        event_info = [1, 0, -1]
        
        self.DAE.event_switch(solver,event_info)
        
        assert solver.sw[0] == True
        assert solver.sw[1] == False
        assert solver.sw[2] == False
    
    @testattr(stddist = True) 
    def test_f(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.f
        """
        test_x = N.array([1.,1.,1.,1.])
        test_dx = N.array([2.,2.,2.,2.])
        test_t = 2
        
        temp_f = self.DAE.res(test_t,test_x,test_dx)
        
        assert temp_f[0] == -1.0
        assert temp_f[2] == -1.0
        assert temp_f[3] == -2.0
        nose.tools.assert_almost_equal(temp_f[1], -1.158529, 5)
    
    @testattr(stddist = True) 
    def test_g(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.g
        """
        pass #DEPRECATED
        
        #temp_g = self.DISC.g(2.,[1.,2.],[2.,0],[0,0])
        #nose.tools.assert_almost_equal(temp_g[0], -0.429203, 5)
        #nose.tools.assert_almost_equal(temp_g[1], 1.141592, 5)
    
    @testattr(stddist = True) 
    def test_g_adjust(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.g
        """
        pass #DEPRECATED
        """
        self.DISC.eps = 2.0

        temp_g_adjust = self.DISC.g_adjust(2.,[1.,2.],[2.,0],[0,0])

        nose.tools.assert_almost_equal(temp_g_adjust[0], -2.429203, 5)
        nose.tools.assert_almost_equal(temp_g_adjust[1], -0.858407, 5)
        
        temp_g_adjust = self.DISC.g_adjust(2.,[1.,2.],[2.,0],[0,1])
        
        nose.tools.assert_almost_equal(temp_g_adjust[0], -2.429203, 5)
        nose.tools.assert_almost_equal(temp_g_adjust[1], 3.141592, 5)
        """
        
    @testattr(stddist = True) 
    def test_init(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.__init__
        """
        assert self.m_DAE == self.DAE._model
        assert self.DAE.max_eIter == 50
        assert self.DAE.eps == 1e-9
        assert self.DAE.jac == self.DAE.j
        
        temp_y0 = N.append(self.m_DAE.real_x.copy(), self.m_DAE.real_w.copy())
        temp_yd0 = N.append(self.m_DAE.real_dx.copy(),[0]*len(self.m_DAE.real_w))
        temp_algvar = [1.0]*len(self.m_DAE.real_x) + [0.0]*len(self.m_DAE.real_w)
        
        for i in range(len(temp_y0)):
            assert temp_y0[i] == self.DAE.y0[i]
            assert temp_yd0[i] == self.DAE.yd0[i]
            assert temp_algvar[i] == self.DAE.algvar[i]
            
        #Test discontiniuous system
        assert self.DISC._g_nbr == 2
        assert self.DISC.state_events == self.DISC.g_adjust
    
    @testattr(stddist = True) 
    def test_reset(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.reset
        """   
        self.DAE.t0 = 10.0
        self.DAE._model.real_x = N.array([2.,2.,2.,2.])
        self.DAE._model.real_dx = N.array([2.,2.,2.,2.])

        self.DAE.reset()
        
        assert self.DAE._model.t == 10.0
        assert self.DAE._model.real_x[0] != 2.0
        assert self.DAE._model.real_x[1] != 2.0
        assert self.DAE._model.real_x[2] != 2.0
        assert self.DAE._model.real_dx[0] != 2.0
        assert self.DAE._model.real_dx[1] != 2.0
        assert self.DAE._model.real_dx[2] != 2.0        
       
        assert self.DAE.y0[0] == 0.1

    @testattr(stddist = True)
    def test_event_iteration(self):
        """
        This tests JMUs with event iteration (JModelica.org).
        """
        #DEPRECATED!
        pass
        """
        jmu_name = compile_jmu('EventIter.EventMiddleIter', os.path.join(path_to_mos,'EventIter.mo'))

        model = JMUModel(jmu_name)

        sim_res = model.simulate(final_time=10)

        x = sim_res['x']
        y = sim_res['y']
        z = sim_res['z']
        
        nose.tools.assert_almost_equal(x[0], 2.00000, 4)
        nose.tools.assert_almost_equal(x[-1], 10.000000, 4)
        nose.tools.assert_almost_equal(y[-1], 3.0000000, 4)
        nose.tools.assert_almost_equal(z[-1], 2.0000000, 4)
        
        jmu_name = compile_jmu('EventIter.EventStartIter', os.path.join(path_to_mos,'EventIter.mo'))
        
        model = JMUModel(jmu_name)

        sim_res = model.simulate(final_time=10)

        x = sim_res['x']
        y = sim_res['y']
        z = sim_res['z']
        
        nose.tools.assert_almost_equal(x[0], 1.00000, 4)
        nose.tools.assert_almost_equal(y[0], -1.00000, 4)
        nose.tools.assert_almost_equal(z[0], 1.00000, 4)
        nose.tools.assert_almost_equal(x[-1], -2.000000, 4)
        nose.tools.assert_almost_equal(y[-1], -1.0000000, 4)
        nose.tools.assert_almost_equal(z[-1], 4.0000000, 4)
        """

    @testattr(stddist = True) 
    def test_j(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.j
        """
        
        test_x = N.array([1.,1.,1.,1.])
        test_dx = N.array([2.,2.,2.,2.])
        test_t = 2
        
        temp_j = self.DAE.j(0.1,test_t,test_x,test_dx)
        #print temp_j
        assert temp_j[0,0] == -0.1
        assert temp_j[0,1] == 1.0
        assert temp_j[1,1] == -0.1
        nose.tools.assert_almost_equal(temp_j[1,0], 0.5403023, 5)
    
    @testattr(stddist = True) 
    def test_handle_event(self):
        """
        Tests pyjmi.simulation.assimulo.JMIDAE.handle_event
        """
        solver = lambda x:1
        solver.verbosity = 1
        solver.NORMAL = solver.LOUD = 2
        solver.t_sol = [[1.0]]
        solver.y_sol = [[1.,1.]]
        solver.yd_sol = [[1.,1.]]
        solver.t = N.array(1.0)
        solver.y = N.array([1.,1.])
        solver.yd = N.array([1.,1.])
        solver.sw = [False,True]
        self.DISC.event_switch = lambda x,y:1
        self.DISC.init_mode = lambda x:1
        self.DISC.check_eIter = lambda x,y: [True,False]
        
        self.DISC.handle_event(solver, [1,1])
        
        self.DISC.check_eIter = lambda x,y: [True,True]
        
        self.DISC.handle_event(solver, [1,1])

    @testattr(stddist = True) 
    def test_init_mode(self):
        """
        Tests pyjmi.simulation.assimulo.init_mode
        """
        solver = lambda x:1
        solver.sw = [True, True]
        solver.make_consistent = lambda x:1
        
        self.DISC.init_mode(solver)
        
        assert self.DISC._model.sw[0] == 1
        assert self.DISC._model.sw[1] == 1
    
    @testattr(stddist = True) 
    def test_initiate(self):
        """
        Tests pyjmi.simulation.assimulo.initiate
        """
        #self.DAE.init_mode = lambda x:1
        #self.DAE.initiate('Test')
        
        #self.DISC.handle_event = lambda x,y:1
        #solver = lambda x:1
        #solver.switches = [False, False]
        
        #self.DISC.initiate(solver)

        #assert solver.switches[0] == True
        #assert solver.switches[1] == True
        pass
    """
    @testattr(stddist = True)
    def test_scaled_input(self):
        #This tests simulation with scaled input.
        fpath = os.path.join(get_files_path(), 'Modelica', 'VDP.mop')
        cpath = 'VDP_pack.VDP_scaled_input'
        
        # compile VDP
        jmu_name = compile_jmu(cpath, fpath, 
                    compiler_options={'enable_variable_scaling':True})

        # Load the dynamic library and XML data
        vdp = JMUModel(jmu_name)
        
        t = N.linspace(0.,10.,100) 
        u1 = N.cos(t)/10.0
        u_traj = N.transpose(N.vstack((t,u1)))
        
        res_scaled = vdp.simulate(final_time=10, input=(['u'],u_traj))
        
        # compile VDP
        jmu_name = compile_jmu(cpath, fpath, 
                    compiler_options={'enable_variable_scaling':False})

        # Load the dynamic library and XML data
        vdp = JMUModel(jmu_name)
        
        t = N.linspace(0.,10.,100) 
        u1 = N.cos(t)
        u_traj = N.transpose(N.vstack((t,u1)))
        
        res = vdp.simulate(final_time=10, input=(['u'],u_traj))
        
        nose.tools.assert_almost_equal(res["u"][0], res_scaled["u"][0], 3)
        nose.tools.assert_almost_equal(res["u"][-1], res_scaled["u"][-1], 3)
    """
    @testattr(stddist = True)
    def test_order_input(self):
        """
        This tests that the inputs are sorted in an correct value reference order
        when being written to file.
        """
        fpath = os.path.join(get_files_path(), 'Modelica', 'OrderInputs.mop')
        cpath = 'OptimInputs'
        
        unames = ['u1', 'u_e2', 'u_h3', 'u_c4', 'u_p5']
        n = len(unames)

        uvalues = [1.,2.,3.,4.,5.]

        data = N.array([[0.,1.,2.,3.,4.,5.],
                 [1.,1.,2.,3.,4.,5.],
                 [2.,1.,2.,3.,4.,5.]])
        inputtuple = (unames,data)
        jmu_name = compile_jmu(cpath,fpath)
        
        model = JMUModel(jmu_name)
        res = model.simulate(0,2,input=inputtuple)
        
        nose.tools.assert_almost_equal(res["u1"][-1], 1.000000000, 3)
        nose.tools.assert_almost_equal(res["u_e2"][-1], 2.00000, 3)
        nose.tools.assert_almost_equal(res["u_h3"][-1], 3.00000, 3)
        nose.tools.assert_almost_equal(res["u_c4"][-1], 4.000000, 3)
        nose.tools.assert_almost_equal(res["u_p5"][-1], 5.000000, 3)
        
        nose.tools.assert_almost_equal(res["T.u1"][-1], 1.000000000, 3)
        nose.tools.assert_almost_equal(res["T.u_e2"][-1], 2.00000, 3)
        nose.tools.assert_almost_equal(res["T.u_h3"][-1], 3.00000, 3)
        nose.tools.assert_almost_equal(res["T.u_c4"][-1], 4.000000, 3)
        nose.tools.assert_almost_equal(res["T.u_p5"][-1], 5.000000, 3)

    @testattr(stddist = True)
    def test_double_input(self):
        """
        This tests double input.
        """
        fpath = os.path.join(get_files_path(), 'Modelica', 'DoubleInput.mo')
        cpath = 'DoubleInput'

        # compile VDP
        fname = compile_jmu(cpath, fpath, 
                    compiler_options={'state_start_values_fixed':True})

        # Load the dynamic library and XML data
        dInput = JMUModel(fname)
        
        t = N.linspace(0.,10.,100) 
        u1 = N.cos(t)
        u2 = N.sin(t)
        u_traj = N.transpose(N.vstack((t,u1,u2)))
        
        res = dInput.simulate(final_time=10, input=(['u1','u2'],u_traj))
        
        nose.tools.assert_almost_equal(res.initial('u1'), 1.000000000, 3)
        nose.tools.assert_almost_equal(res.initial('u2'), 0.000000000, 3)
        nose.tools.assert_almost_equal(res.final('u1'), -0.839071529, 3)
        nose.tools.assert_almost_equal(res.final('u2'), -0.544021110, 3)
        
        #TEST REVERSE ORDER OF INPUT
        
        # Load the dynamic library and XML data
        dInput = JMUModel(fname)
        
        t = N.linspace(0.,10.,100) 
        u1 = N.cos(t)
        u2 = N.sin(t)
        u_traj = N.transpose(N.vstack((t,u2,u1)))
        
        res = dInput.simulate(final_time=10, input=(['u2','u1'],u_traj))
        
        nose.tools.assert_almost_equal(res.initial('u1'), 1.000000000, 3)
        nose.tools.assert_almost_equal(res.initial('u2'), 0.000000000, 3)
        nose.tools.assert_almost_equal(res.final('u1'), -0.839071529, 3)
        nose.tools.assert_almost_equal(res.final('u2'), -0.544021110, 3)

    @testattr(stddist = True)
    def test_double_input_with_function(self):
        """
        This tests double input with function.
        """
        fpath = os.path.join(get_files_path(), 'Modelica', 'DoubleInput.mo')
        cpath = 'DoubleInput'

        # compile VDP
        fname = compile_jmu(cpath, fpath, 
                    compiler_options={'state_start_values_fixed':True})

        # Load the dynamic library and XML data
        dInput = JMUModel(fname)

        def func(t):
            return N.array([N.cos(t),N.sin(t)])
        
        res = dInput.simulate(final_time=10, input=(['u1','u2'],func))

        nose.tools.assert_almost_equal(res.initial('u1'), 1.000000000, 3)
        nose.tools.assert_almost_equal(res.initial('u2'), 0.000000000, 3)
        nose.tools.assert_almost_equal(res.final('u1'), -0.839071529, 3)
        nose.tools.assert_almost_equal(res.final('u2'), -0.544021110, 3)
        
        #TEST REVERSE ORDER OF INPUT
        
        # Load the dynamic library and XML data
        dInput = JMUModel(fname)

        def func(t):
            return [N.sin(t),N.cos(t)]
        
        res = dInput.simulate(final_time=10, input=(['u2','u1'],func))

        nose.tools.assert_almost_equal(res.initial('u1'), 1.000000000, 3)
        nose.tools.assert_almost_equal(res.initial('u2'), 0.000000000, 3)
        nose.tools.assert_almost_equal(res.final('u1'), -0.839071529, 3)
        nose.tools.assert_almost_equal(res.final('u2'), -0.544021110, 3)