-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
87 lines (71 loc) · 3.32 KB
/
main.py
File metadata and controls
87 lines (71 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import os
import sys
from pathlib import Path
import typer
from bigraph_viz import plot_bigraph # type: ignore[import-untyped]
from process_bigraph import Composite, ProcessTypes # type: ignore[import-untyped]
from process_bigraph_lang.dsl.model import Model
from typing_extensions import Annotated
import simple_process_bigraph_runtime.registry.spatio_flux_library as spatioflux
import simple_process_bigraph_runtime.registry.toy_library as toy
from simple_process_bigraph_runtime import dsl_adapter
from simple_process_bigraph_runtime.environment.process_bigraph_env import ProcessBigraphEnv
from simple_process_bigraph_runtime.generation.composite_generator import process_composite
from simple_process_bigraph_runtime.generation.process_generator import register_process_defs
from simple_process_bigraph_runtime.generation.type_generator import register_types
from simple_process_bigraph_runtime.generation.unit_generator import register_units
plot_settings: dict[str, str | bool] = {
'remove_process_place_edges': True
}
save_images = True
if save_images:
plot_settings.update({
'out_dir': '/Users/logandrescher/Documents/pb_output_dir',
'dpi': '70'
})
app = typer.Typer()
@app.command()
def validate(pblang_path: Annotated[str, typer.Argument(help="Path to the pblang file to validate")]):
ast_model: Model = generatePythonModel(Path(pblang_path))
_, pb_doc, pb_core = performConversion(ast_model)
plot_bigraph(state=pb_doc['state'], schema=pb_doc['composition'],
core=pb_core,
show_values=True,
out_dir=os.path.expanduser("~/Documents/pb_output_dir"),
filename='final_diagram',
dpi='140')
@app.command()
def execute(duration: float, pblang_path: Annotated[str, typer.Argument(help="Path to the pblang file to validate")]):
ast_model: Model = generatePythonModel(Path(pblang_path))
pb_composite, _0, _1 = performConversion(ast_model)
pb_composite.run(duration)
print("Execution complete")
@app.command()
def playground():
pass
def generatePythonModel(pblang_path: os.PathLike[str]) -> Model:
return dsl_adapter.generateModelAst(pblang_path)
def validate_pb_absolute_path(absolute_path: str) -> str:
if not os.path.exists(absolute_path):
sys.stderr.write(f"Error finding pblang file ({absolute_path}):: no file with that name exists.\n")
exit(1)
if os.path.isdir(absolute_path):
sys.stderr.write(f"Error finding pblang file ({absolute_path}):: file is a directory, not a script.\n")
exit(1)
if not absolute_path.endswith(".pblang"):
sys.stderr.write(f"Error finding pblang file ({absolute_path}):: file is labeled with an unexpected extension.\n")
exit(1)
return absolute_path
def performConversion(ast_model: Model) -> tuple[Composite, dict, ProcessTypes]:
assembler = ProcessBigraphEnv()
# register the libraries
spatioflux.register(assembler)
toy.register(assembler)
# register the types, units, and process definitions from the model
register_types(assembler, ast_model.types)
register_units(assembler, ast_model.units)
register_process_defs(assembler, ast_model.processDefs)
process_composite(ast_model, assembler)
return assembler.composite, assembler.make_document(), assembler.core
if __name__ == "__main__":
app()