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)
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']))
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'])
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)
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']]))