예제 #1
0
 def test_remove(self):
     fit_items = basico.get_fit_parameters()
     self.assertIsNotNone(fit_items)
     basico.remove_fit_parameters()
     fit_items_2 = basico.get_fit_parameters()
     self.assertIsNone(fit_items_2)
     basico.set_fit_parameters(fit_items)
예제 #2
0
 def test_change_bounds(self):
     basico.set_fit_parameters([{
         'name': '(R1).k2',
         'lower': 1,
         'upper': 0.01
     }])
     with self.assertLogs(level='ERROR') as cm:
         sol = basico.as_dict(basico.run_parameter_estimation())
     self.assertTrue(np.isnan(sol['sol']))
예제 #3
0
 def test_set_fit_items(self):
     old_fit_items = basico.get_fit_parameters().reset_index()
     basico.set_fit_parameters(old_fit_items)
     fit_items = basico.get_fit_parameters().reset_index()
     old_first = old_fit_items.iloc[0].to_dict()
     new_first = fit_items.iloc[0].to_dict()
     self.assertEqual(old_first['name'], new_first['name'])
     self.assertEqual(old_first['lower'], new_first['lower'])
     self.assertEqual(old_first['upper'], new_first['upper'])
예제 #4
0
    def test_expressions(self):
        basico.new_model(name='Model 4', volume_unit='ml', quantity_unit='mmol')

        basico.add_species('PGME', initial_concentration=20)
        basico.add_species('7-ADCA', initial_concentration=10)
        basico.add_species('CEX', initial_concentration=0)
        basico.add_species('PG', initial_concentration=2)

        params = ['K_s', 'k2',  'K_n', 'k3',  'k4',  'k5',  'k6',   'K_si', 'K_p', 'k_4b',  'e0', 'kd', 'K_p2i']
        values = [14,25920,290,25020,4416000,29460,99600,20,39,547560,0.000198000000000000,0.0385800000000000,12]
        for k, v in zip(params, values):
            basico.add_parameter(k, initial_value=v)

        basico.add_equation('A = k4 * [7-ADCA] / K_n + k5 * [7-ADCA] / K_n + k6 * [PGME] / K_si + k3')
        basico.add_equation('e = e0 /(1 + [PGME]^2/ (K_s * K_si) + [7-ADCA] / K_n + ( k2 * [PGME] /(K_s * A))*( 1 + [7-ADCA]/K_n + [PGME]/K_si)+[CEX]/K_p+[PG]/K_p2i)*exp(-kd*t)')
        basico.add_equation('B = (k2 * e * [PGME]/K_s)*(1/A) + (k_4b * e * [CEX]/K_p)*(1/A)')

        dxdt_1 = '-k2 * e * [PGME]/K_s - k6 * B * [PGME]/K_si'
        dxdt_4 = 'B * (k3 + k5*[7-ADCA]/K_n + k6* [PGME]/K_si)'
        dxdt_3 = '-({0}) - ({1})'.format(dxdt_1, dxdt_4)
        dxdt_2 = '-({0})'.format(dxdt_3)
        basico.add_equation('d[PGME]/dt=' + dxdt_1)
        basico.add_equation('d[PG]/dt=' + dxdt_4)
        basico.add_equation('d[CEX]/dt=' + dxdt_3)
        basico.add_equation('d[7-ADCA]/dt=' + dxdt_2)

        template = basico.get_fit_item_template(include_global=True, default_lb=1e-2, default_ub=1e6)
        to_remove = None
        for d in template:
            # set lower bound for the equilibrium constants
            if 'Values[K_si' in d['name']:
                d['upper'] = 50
                continue
            if 'Values[K' in d['name']:
                d['upper'] = 1000
                continue
            if 'Values[k_d' in d['name']:
                d['upper'] = 0.5
                d['lower'] = 0.3

        basico.set_fit_parameters(template)

        self.assertTrue(True)
예제 #5
0
    def test_get_data(self):
        data = basico.get_experiment_data_from_model()
        self.assertEqual(len(data), 5)
        set_1 = data[0]
        self.assertEqual(set_1.shape, (100, 3))

        names = basico.get_experiment_names()
        self.assertIn('Experiment', names)

        files = basico.get_experiment_filenames()
        self.assertEqual(len(files), len(names))

        set_2 = basico.get_data_from_experiment('Experiment')
        self.assertEqual(set_2.shape, (100, 3))

        sol_before = basico.run_parameter_estimation(
            method=basico.PE.CURRENT_SOLUTION)

        # remove data
        basico.remove_experiments()

        # add data back
        for exp, name in zip(data, names):
            basico.add_experiment(name, exp)

        # since we have affected experiments, reset them
        basico.set_fit_parameters(basico.get_fit_parameters())

        # save to temp file
        main_file = tempfile.mktemp()
        basico.save_model_and_data(main_file, delete_data_on_exit=True)

        # ensure it still works
        sol_after = basico.run_parameter_estimation(
            method=basico.PE.CURRENT_SOLUTION)
        self.assertListEqual(basico.as_dict(sol_before[['sol']]),
                             basico.as_dict(sol_after[['sol']]))