Пример #1
0
def test_model_update_insert_component_on_conduit() -> None:
    macro = Component('macro', 'my.macro')
    micro = Component('micro', 'my.micro')
    components = [macro, micro]
    conduit1 = Conduit('macro.intermediate_state', 'micro.initial_state')
    conduit2 = Conduit('micro.final_state', 'macro.state_update')
    conduits = [conduit1, conduit2]
    base = Model('test_update', components, conduits)

    tee = Component('tee', 'muscle3.tee')
    conduit3 = Conduit('macro.intermediate_state', 'tee.input')
    conduit4 = Conduit('tee.output', 'micro.initial_state')
    overlay = Model('test_update_tee', [tee], [conduit3, conduit4])

    base.update(overlay)

    assert len(base.components) == 3
    assert macro in base.components
    assert micro in base.components
    assert tee in base.components

    assert len(base.conduits) == 3
    assert conduit2 in base.conduits
    assert conduit3 in base.conduits
    assert conduit4 in base.conduits
Пример #2
0
def test_config5() -> Configuration:
    model = Model(
            'test_model',
            [
                Component('ic', 'isr2d.initial_conditions'),
                Component('smc', 'isr2d.smc'),
                Component('bf', 'isr2d.blood_flow'),
                Component('smc2bf', 'isr2d.smc2bf'),
                Component('bf2smc', 'isr2d.bf2smc')],
            [
                Conduit('ic.out', 'smc.initial_state'),
                Conduit('smc.cell_positions', 'smc2bf.in'),
                Conduit('smc2bf.out', 'bf.initial_domain'),
                Conduit('bf.wss_out', 'bf2smc.in'),
                Conduit('bf2smc.out', 'smc.wss_in')])
    implementations = [
            Implementation(
                Reference('isr2d.initial_conditions'), 'isr2d/bin/ic'),
            Implementation(
                Reference('isr2d.smc'), 'isr2d/bin/smc'),
            Implementation(
                Reference('isr2d.blood_flow'), 'isr2d/bin/bf'),
            Implementation(
                Reference('isr2d.smc2bf'), 'isr2d/bin/smc2bf.py'),
            Implementation(
                Reference('isr2d.bf2smc'), 'isr2d/bin/bf2smc.py')]
    resources = [
            Resources(Reference('isr2d.initial_conditions'), 4),
            Resources(Reference('isr2d.smc'), 4),
            Resources(Reference('isr2d.blood_flow'), 4),
            Resources(Reference('isr2d.smc2bf'), 1),
            Resources(Reference('isr2d.bf2smc'), 1)]

    return Configuration(model, None, implementations, resources)
Пример #3
0
def macro_micro() -> Model:
    macro = Component('macro', 'my.macro')
    micro = Component('micro', 'my.micro')
    components = [macro, micro]
    conduit1 = Conduit('macro.intermediate_state', 'micro.initial_state')
    conduit2 = Conduit('micro.final_state', 'macro.state_update')
    conduits = [conduit1, conduit2]
    return Model('macro_micro', components, conduits)
Пример #4
0
def test_model_update_set_implementation() -> None:
    abstract_reaction = Component('reaction')
    base = Model('test_set_impl', [abstract_reaction])
    assert base.components[0].name == 'reaction'
    assert base.components[0].implementation is None

    reaction_python = Component('reaction', 'reaction_python')
    overlay = Model('test_set_impl', [reaction_python])

    base.update(overlay)

    assert len(base.components) == 1
    assert base.components[0].name == 'reaction'
    assert base.components[0].implementation == 'reaction_python'
Пример #5
0
def test_dump_model(dump_model: Callable) -> None:
    ce1 = Component('ce1', 'test.impl1')
    ce2 = Component('ce2', 'test.impl2')
    cd1 = Conduit('ce1.state_out', 'ce2.init_in')
    cd2 = Conduit('ce2.fini_out', 'ce1.boundary_in')
    model = Model('test_model', [ce1, ce2], [cd1, cd2])

    text = dump_model(model)
    assert text == ('name: test_model\n'
                    'components:\n'
                    '  ce1: test.impl1\n'
                    '  ce2: test.impl2\n'
                    'conduits:\n'
                    '  ce1.state_out: ce2.init_in\n'
                    '  ce2.fini_out: ce1.boundary_in\n')
Пример #6
0
def test_config2() -> PartialConfiguration:
    model = Model(
            'test_model',
            [
                Component('ic', 'isr2d.initial_conditions'),
                Component('smc', 'isr2d.smc'),
                Component('bf', 'isr2d.blood_flow'),
                Component('smc2bf', 'isr2d.smc2bf'),
                Component('bf2smc', 'isr2d.bf2smc')],
            [
                Conduit('ic.out', 'smc.initial_state'),
                Conduit('smc.cell_positions', 'smc2bf.in'),
                Conduit('smc2bf.out', 'bf.initial_domain'),
                Conduit('bf.wss_out', 'bf2smc.in'),
                Conduit('bf2smc.out', 'smc.wss_in')])
    return PartialConfiguration(model)
Пример #7
0
def test_configuration_update_model4() -> None:
    component1 = Component('macro', 'my.macro')
    model1 = Model('model1', [component1])
    base = Configuration(model1)

    component2 = Component('micro', 'my.micro')
    model2 = Model('model2', [component2])
    overlay = Configuration(model2)

    base.update(overlay)

    assert isinstance(base.model, Model)
    assert base.model == model1
    assert base.model.name == 'model2'
    assert component1 in base.model.components
    assert component2 in base.model.components
Пример #8
0
def test_model_update_add_component() -> None:
    macro = Component('macro', 'my.macro')
    base = Model('test_update', [macro])

    micro = Component('micro', 'my.micro')
    conduit1 = Conduit('macro.intermediate_state', 'micro.initial_state')
    conduit2 = Conduit('micro.final_state', 'macro.state_update')
    conduits = [conduit1, conduit2]
    overlay = Model('test_update_add', [micro], conduits)

    base.update(overlay)

    assert len(base.components) == 2
    assert macro in base.components
    assert micro in base.components
    assert conduit1 in base.conduits
    assert conduit2 in base.conduits
Пример #9
0
def test_configuration_update_model2() -> None:
    model_ref1 = ModelReference('model1')
    base = PartialConfiguration(model_ref1)

    component1 = Component('macro', 'my.macro')
    model2 = Model('model2', [component1])
    overlay = PartialConfiguration(model2)

    base.update(overlay)

    assert base.model == model2
Пример #10
0
def test_model_update_replace_component() -> None:
    macro = Component('macro', 'my.macro')
    micro = Component('micro', 'my.micro')
    components = [macro, micro]
    conduit1 = Conduit('macro.intermediate_state', 'micro.initial_state')
    conduit2 = Conduit('micro.final_state', 'macro.state_update')
    conduits = [conduit1, conduit2]
    base = Model('test_update', components, conduits)

    surrogate = Component('micro', 'my.surrogate')
    overlay = Model('test_update_surrogate', [surrogate])

    base.update(overlay)

    assert len(base.components) == 2
    assert macro in base.components
    assert surrogate in base.components

    assert len(base.conduits) == 2
    assert conduit1 in base.conduits
    assert conduit2 in base.conduits
Пример #11
0
def test_configuration_update_model3() -> None:
    component1 = Component('macro', 'my.macro')
    model1 = Model('model1', [component1])
    base = Configuration(model1)

    model_ref2 = ModelReference('model2')
    overlay = PartialConfiguration(model_ref2)

    base.update(overlay)

    assert base.model == model1
    assert model1.name == 'model2'
    assert model1.components == [component1]
Пример #12
0
def test_component_declaration() -> None:
    test_decl = Component('test', 'ns.model')
    assert str(test_decl.name) == 'test'
    assert str(test_decl.implementation) == 'ns.model'
    assert test_decl.multiplicity == []
    assert str(test_decl) == 'test'

    test_decl = Component('test', 'ns.model', 10)
    assert isinstance(test_decl.name, Reference)
    assert str(test_decl.name) == 'test'
    assert test_decl.multiplicity == [10]
    assert str(test_decl) == 'test[10]'

    test_decl = Component('test', 'ns2.model2', [1, 2])
    assert isinstance(test_decl.name, Reference)
    assert str(test_decl.name) == 'test'
    assert str(test_decl.implementation) == 'ns2.model2'
    assert test_decl.multiplicity == [1, 2]
    assert str(test_decl) == 'test[1][2]'

    with pytest.raises(ValueError):
        test_decl = Component('test', 'ns2.model2[1]')
Пример #13
0
def test_model_no_impl(load_model: Callable) -> None:
    # Test making a component with no implementation
    Component('macro')

    # Test loading from YAML
    text = ('name: macro_micro\n' 'components:\n' '  macro:\n' '  micro:\n')
    model = load_model(text)
    assert model.name == 'macro_micro'
    assert len(model.components) == 2
    assert model.components[0].name in ('macro', 'micro')
    assert model.components[0].implementation is None
    assert model.components[1].name in ('macro', 'micro')
    assert model.components[0].implementation is None
Пример #14
0
def test_dump_no_conduits(dump_model: Callable) -> None:
    ce1 = Component('ce1', 'test.impl1')
    model = Model('test_model', [ce1])

    text = dump_model(model)
    assert text == ('name: test_model\n' 'components:\n' '  ce1: test.impl1\n')