Esempio n. 1
0
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')
Esempio n. 2
0
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)
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
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
Esempio n. 6
0
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
Esempio n. 7
0
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
Esempio n. 8
0
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
Esempio n. 9
0
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'
Esempio n. 10
0
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