def test_set_parameters(pheno_path): model = Model(pheno_path) params = { 'THETA(1)': 0.75, 'THETA(2)': 0.5, 'THETA(3)': 0.25, 'OMEGA(1,1)': 0.1, 'OMEGA(2,2)': 0.2, 'SIGMA(1,1)': 0.3, } model.parameters = params assert model.parameters['THETA(1)'] == Parameter('THETA(1)', 0.75, lower=0, upper=1000000) assert model.parameters['THETA(2)'] == Parameter('THETA(2)', 0.5, lower=0, upper=1000000) assert model.parameters['THETA(3)'] == Parameter('THETA(3)', 0.25, lower=-0.99, upper=1000000) assert model.parameters['OMEGA(1,1)'] == Parameter('OMEGA(1,1)', 0.1, lower=0, upper=sympy.oo) assert model.parameters['OMEGA(2,2)'] == Parameter('OMEGA(2,2)', 0.2, lower=0, upper=sympy.oo) assert model.parameters['SIGMA(1,1)'] == Parameter('SIGMA(1,1)', 0.3, lower=0, upper=sympy.oo) model.update_source() thetas = model.control_stream.get_records('THETA') assert str(thetas[0]) == '$THETA (0,0.75) ; PTVCL\n' assert str(thetas[1]) == '$THETA (0,0.5) ; PTVV\n' assert str(thetas[2]) == '$THETA (-.99,0.25)\n' omegas = model.control_stream.get_records('OMEGA') assert str(omegas[0]) == '$OMEGA DIAGONAL(2)\n 0.1 ; IVCL\n 0.2 ; IVV\n\n' sigmas = model.control_stream.get_records('SIGMA') assert str(sigmas[0]) == '$SIGMA 0.3\n' model = Model(pheno_path) params = model.parameters params['THETA(1)'].init = 18 model.parameters = params assert model.parameters['THETA(1)'] == Parameter('THETA(1)', 18, lower=0, upper=1000000) assert model.parameters['THETA(2)'] == Parameter('THETA(2)', 1.00916, lower=0, upper=1000000)
def test_add_random_variables_and_statements(pheno_path): model = Model(pheno_path) rvs = model.random_variables pset = model.parameters eta = RandomVariable.normal('ETA_NEW', 'iiv', 0, S('omega')) rvs.append(eta) pset.append(Parameter('omega', 0.1)) eps = RandomVariable.normal('EPS_NEW', 'ruv', 0, S('sigma')) rvs.append(eps) pset.append(Parameter('sigma', 0.1)) model.random_variables = rvs model.parameters = pset sset = model.get_pred_pk_record().statements statement_new = Assignment(S('X'), 1 + S(eps.name) + S(eta.name)) sset.append(statement_new) model.get_pred_pk_record().statements = sset model.update_source() assert str(model.get_pred_pk_record()).endswith('X = 1 + ETA(3) + EPS(2)\n\n')
def test_add_random_variables(pheno_path, rv_new, buf_new): model = Model(pheno_path) rvs = model.random_variables pset = model.parameters eta = RandomVariable.normal('eta_new', 'iiv', 0, S(rv_new.name)) rvs.append(eta) pset.append(rv_new) model.random_variables = rvs model.parameters = pset model.update_source() rec_ref = ( f'$OMEGA DIAGONAL(2)\n' f' 0.0309626 ; IVCL\n' f' 0.031128 ; IVV\n\n' f'{buf_new} ; omega\n' ) rec_mod = '' for rec in model.control_stream.get_records('OMEGA'): rec_mod += str(rec) assert rec_mod == rec_ref rv = model.random_variables['eta_new'] assert rv.sympy_rv.pspace.distribution.mean == 0 assert (rv.sympy_rv.pspace.distribution.std ** 2).name == 'omega'
def test_add_parameters_and_statements(pheno_path, param_new, statement_new, buf_new): model = Model(pheno_path) pset = model.parameters pset.append(param_new) model.parameters = pset sset = model.statements # Insert new statement before ODE system. new_sset = ModelStatements() for s in sset: if isinstance(s, ODESystem): new_sset.append(statement_new) new_sset.append(s) model.statements = new_sset model.update_source() rec = ( f'$PK\n' f'IF(AMT.GT.0) BTIME=TIME\n' f'TAD=TIME-BTIME\n' f'TVCL=THETA(1)*WGT\n' f'TVV=THETA(2)*WGT\n' f'IF(APGR.LT.5) TVV=TVV*(1+THETA(3))\n' f'CL=TVCL*EXP(ETA(1))\n' f'V=TVV*EXP(ETA(2))\n' f'S1=V\n' f'{buf_new}\n\n' ) assert str(model.get_pred_pk_record()) == rec
def test_add_parameters(pheno_path, param_new, init_expected, buf_new): model = Model(pheno_path) pset = model.parameters assert len(pset) == 6 pset.append(param_new) model.parameters = pset model.update_source() assert len(pset) == 7 assert model.parameters[param_new.name].init == init_expected parser = NMTranParser() stream = parser.parse(str(model)) assert str(model.control_stream) == str(stream) rec_ref = ( f'$THETA (0,0.00469307) ; PTVCL\n' f'$THETA (0,1.00916) ; PTVV\n' f'$THETA (-.99,.1)\n' f'{buf_new}\n' ) rec_mod = '' for rec in model.control_stream.get_records('THETA'): rec_mod += str(rec) assert rec_ref == rec_mod
def test_add_random_variables(pheno_path, rv_new, buf_new): model = Model(pheno_path) rvs = model.random_variables pset = model.parameters eta = sympy.stats.Normal('eta_new', 0, sympy.sqrt(S(rv_new.name))) eta.variability_level = VariabilityLevel.IIV rvs.add(eta) pset.add(rv_new) model.random_variables = rvs model.parameters = pset model.update_source() rec_ref = ( f'$OMEGA DIAGONAL(2)\n' f' 0.0309626 ; IVCL\n' f' 0.031128 ; IVV\n\n' f'{buf_new} ; omega\n' ) rec_mod = '' for rec in model.control_stream.get_records('OMEGA'): rec_mod += str(rec) assert rec_mod == rec_ref rv = model.random_variables['eta_new'] assert rv.pspace.distribution.mean == 0 assert rv.pspace.distribution.std ** 2 == rv_new.symbol
def test_add_two_parameters(pheno_path): model = Model(pheno_path) pset = model.parameters assert len(pset) == 6 param_1 = Parameter('COVEFF1', 0.2) param_2 = Parameter('COVEFF2', 0.1) pset.append(param_1) pset.append(param_2) model.parameters = pset model.update_source() assert len(pset) == 8 assert model.parameters[param_1.name].init == 0.2 assert model.parameters[param_2.name].init == 0.1