Example #1
0
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
Example #2
0
def test_round_trip(pheno_path):
    parser = NMTranParser()

    with open(pheno_path, 'r') as fh:
        content = fh.read()
    model = parser.parse(content)
    assert str(model) == content
Example #3
0
def test_statements_setter(pheno_path, buf_new, len_expected):
    model = Model(pheno_path)

    parser = NMTranParser()
    statements_new = parser.parse(f'$PRED\n{buf_new}').records[0].statements

    assert len(model.statements) == 15
    assert len(statements_new) == len_expected

    model.statements = statements_new

    assert len(model.statements) == len_expected
    assert model.statements == statements_new
Example #4
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)
Example #5
0
def test_iiv_on_ruv(pheno_path, epsilons, same_eta, err_ref, omega_ref):
    model = Model(pheno_path)

    model_str = str(model)
    model_more_eps = re.sub('IPRED=F\nIRES=DV-IPRED',
                            'IPRED=F+EPS(2)\nIRES=DV-IPRED+EPS(3)', model_str)
    model_sigma = re.sub(r'\$SIGMA 0.013241',
                         '$SIGMA 0.013241\n$SIGMA 0.1\n$SIGMA 0.1',
                         model_more_eps)
    model.control_stream = NMTranParser().parse(model_sigma)

    iiv_on_ruv(model, epsilons, same_eta)
    model.update_source()

    err_rec = model.control_stream.get_records('ERROR')[0]

    assert str(
        err_rec) == f'$ERROR\n' f'W=F\n' f'{err_ref}' f'IWRES=IRES/W\n\n'

    omega_rec = ''.join(
        str(rec) for rec in model.control_stream.get_records('OMEGA'))

    assert omega_rec == (f'$OMEGA DIAGONAL(2)\n'
                         f' 0.0309626  ;       IVCL\n'
                         f' 0.031128  ;        IVV\n\n'
                         f'{omega_ref}\n')
Example #6
0
def test_simple_parse():
    parser = NMTranParser()

    model = parser.parse('$PROBLEM MYPROB\n')

    assert len(model.records) == 1
    assert type(model.records[0]).__name__ == 'ProblemRecord'
    assert str(model) == '$PROBLEM MYPROB\n'

    model2_str = ';Comment\n   $PROBLEM     TW2\n'
    model2 = parser.parse(model2_str)

    assert len(model2.records) == 2
    assert type(model2.records[0]).__name__ == 'RawRecord'
    assert type(model2.records[1]).__name__ == 'ProblemRecord'

    assert str(model2) == model2_str
Example #7
0
def test_add_statements(pheno_path, statement_new, buf_new):
    model = Model(pheno_path)
    sset = model.statements
    assert len(sset) == 15

    # 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()

    assert len(model.statements) == 16

    parser = NMTranParser()
    stream = parser.parse(str(model))

    assert str(model.control_stream) == str(stream)

    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'V=TVV*EXP(ETA(2))\n'
        f'S1=V\n'
        f'{buf_new}\n\n'
    )

    rec_mod = str(model.control_stream.get_records('PK')[0])

    assert rec_ref == rec_mod
Example #8
0
def test_parse_illegal_record_name():
    parser = NMTranParser()
    with pytest.raises(ModelSyntaxError):
        parser.parse('$PROBLEM MYPROB\n$1REC\n')