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
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)
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)
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'
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')
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)
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
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
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
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
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]
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]')
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
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')