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_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 = 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