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_remove_iov(testdata): model = Model(testdata / 'nonmem/pheno_block.mod') model_str = str(model) model_with_iov = re.sub( r'\$OMEGA 0.031128 ; IVV\n\$OMEGA 0.1', r'$OMEGA BLOCK(1)\n0.1\n$OMEGA BLOCK(1) SAME\n', model_str, ) model.control_stream = NMTranParser().parse(model_with_iov) remove_iov(model) model.update_source() assert (str(model.get_pred_pk_record()) == '$PK\n' 'CL=THETA(1)*EXP(ETA(1))\n' 'V = THETA(2)\n' 'S1 = ETA(2) + ETA(3) + V\n\n') rec_omega = ''.join( str(rec) for rec in model.control_stream.get_records('OMEGA')) assert (rec_omega == '$OMEGA 0.0309626 ; IVCL\n' '$OMEGA BLOCK(2)\n' '0.0309626\n' '0.0005 0.031128\n') model = Model(testdata / 'nonmem/pheno_block.mod') with pytest.warns(UserWarning): remove_iov(model)
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_remove_iiv(testdata, etas, pk_ref, omega_ref): model = Model(testdata / 'nonmem/pheno_block.mod') remove_iiv(model, etas) model.update_source() assert str(model.get_pred_pk_record()) == pk_ref rec_omega = ''.join( str(rec) for rec in model.control_stream.get_records('OMEGA')) assert rec_omega == omega_ref
def test_block_rvs(testdata, etas, pk_ref, omega_ref): with ConfigurationContext(conf, parameter_names='comment'): model = Model(testdata / 'nonmem/pheno_block.mod') create_rv_block(model, etas) model.update_source() assert str(model.get_pred_pk_record()) == pk_ref rec_omega = ''.join( str(rec) for rec in model.control_stream.get_records('OMEGA')) assert rec_omega == omega_ref
def test_john_draper(pheno_path, etas, etad, buf_new): model = Model(pheno_path) john_draper(model, etas) model.update_source() rec_ref = (f'$PK\n' f'{etad}\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'{buf_new}\n' f'S1=V\n\n') assert str(model.get_pred_pk_record()) == rec_ref
def test_boxcox(pheno_path, etas, etab, buf_new): model = Model(pheno_path) boxcox(model, etas) model.update_source() rec_ref = (f'$PK\n' f'{etab}\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'{buf_new}\n' f'S1=V\n\n') assert str(model.get_pred_pk_record()) == rec_ref assert model.parameters['lambda1'].init == 0.01
def test_add_covariate_effect(pheno_path, effect, covariate, operation, buf_new): model = Model(pheno_path) add_covariate_effect(model, 'CL', covariate, effect, operation) model.update_source() rec_ref = (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'{buf_new}\n' f'V=TVV*EXP(ETA(2))\n' f'S1=V\n\n') assert str(model.get_pred_pk_record()) == rec_ref
def test_add_etas(pheno_path, parameter, expression, operation, buf_new): model = Model(pheno_path) add_etas(model, parameter, expression, operation) model.update_source() rec_ref = (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'{buf_new}\n\n') assert str(model.get_pred_pk_record()) == rec_ref last_rec = model.control_stream.get_records('OMEGA')[-1] assert str(last_rec) == f'$OMEGA 0.09 ; IIV_{parameter}\n'
def test_tdist(pheno_path): model = Model(pheno_path) tdist(model, ['ETA(1)']) model.update_source() symbol = 'ETAT1' eta = 'ETA(1)' theta = 'THETA(4)' num_1 = f'{eta}**2 + 1' denom_1 = f'4*{theta}' num_2 = f'5*{eta}**4 + 16*{eta}**2 + 3' denom_2 = f'96*{theta}**2' num_3 = f'3*{eta}**6 + 19*{eta}**4 + 17*{eta}**2 - 15' denom_3 = f'384*{theta}**3' expression = (f'(1 + ({num_1})/({denom_1}) + ({num_2})/({denom_2}) + ' f'({num_3})/({denom_3}))*ETA(1)') rec_ref = (f'$PK\n' f'{symbol} = {expression}\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(ETAT1)\n' f'V=TVV*EXP(ETA(2))\n' f'S1=V\n\n') assert str(model.get_pred_pk_record()) == rec_ref assert model.parameters['df1'].init == 80