Skip to content

Commit a8dbadf

Browse files
committed
docs: adapted .py file to my-language.mal
1 parent 258ac27 commit a8dbadf

File tree

3 files changed

+30
-68
lines changed

3 files changed

+30
-68
lines changed

tutorials/language-model-tutorial/my-language.mal

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ category System {
2020
}
2121

2222
associations {
23-
Computer [computer1] * <-- ComputerConnectionRule --> * [computer2] Computer
24-
Computer [computer] * <-- ComputerFolderConnectionRule --> * [folder] Folder
23+
Computer [computer1] * <-- ComputerConnection --> * [computer2] Computer
24+
Computer [computer] * <-- ComputerFolderConnection --> * [folder] Folder
2525
}

tutorials/language-model-tutorial/my-model.py

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,8 @@
11
import os
2-
from maltoolbox.model import Model, ModelAsset
2+
from maltoolbox.model import Model
33
from maltoolbox.language import LanguageGraph
44

55

6-
def connect_computer_to_computer(model: Model, comp1: ModelAsset, comp2: ModelAsset):
7-
"""
8-
Create a connection rule between comp1 and comp2 and return it.
9-
"""
10-
cr_asset_name = f"ConnectionRule {comp1.name} {comp2.name}"
11-
cr_asset = model.add_asset("ComputerConnectionRule", cr_asset_name)
12-
comp1.add_associated_assets("computer1", [cr_asset])
13-
comp2.add_associated_assets("computer2", [cr_asset])
14-
return cr_asset
15-
16-
17-
def connect_computer_to_folder(model: Model, comp: ModelAsset, folder: ModelAsset):
18-
"""
19-
Create a connection rule between comp and folder and return it.
20-
"""
21-
cr_asset_name = f"ConnectionRule {comp.name} {folder.name}"
22-
cr_asset = model.add_asset("ComputerFolderConnectionRule", cr_asset_name)
23-
comp.add_associated_assets("computer", [cr_asset])
24-
folder.add_associated_assets("folder", [cr_asset])
25-
return cr_asset
26-
27-
286
def create_model(lang_graph: LanguageGraph) -> Model:
297
"""Create a model with 2 computers"""
308
model = Model("my-model", lang_graph)
@@ -34,13 +12,15 @@ def create_model(lang_graph: LanguageGraph) -> Model:
3412
comp_b = model.add_asset("Computer", "ComputerB")
3513

3614
# Connection between computers
37-
connect_computer_to_computer(model, comp_a, comp_b)
15+
comp_a.add_associated_assets("computer2", [comp_b])
16+
17+
# Two folders
18+
folder1 = model.add_asset("Folder", "FolderA")
19+
folder2 = model.add_asset("Folder", "FolderB")
3820

39-
# two folders with connection to the computers
40-
folder1 = model.add_asset("Folder", "ComputerA")
41-
connect_computer_to_folder(model, comp_a, folder1)
42-
folder2 = model.add_asset("Folder", "ComputerB")
43-
connect_computer_to_folder(model, comp_b, folder2)
21+
# Connect the folders to the computers
22+
comp_b.add_associated_assets("folder", [folder2])
23+
comp_a.add_associated_assets("folder", [folder1])
4424

4525
return model
4626

tutorials/language-model-tutorial/tutorial2.md

Lines changed: 19 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ category System {
4343
}
4444
4545
associations {
46-
Computer [computer1] * <-- ComputerConnectionRule --> * [computer2] Computer
47-
Computer [computer] * <-- ComputerFolderConnectionRule --> * [folder] Folder
46+
Computer [computer1] * <-- ComputerConnection --> * [computer2] Computer
47+
Computer [computer] * <-- ComputerFolderConnection --> * [folder] Folder
4848
}
4949
```
5050

@@ -65,36 +65,10 @@ Copy this code into `my-model.py`:
6565

6666
```python
6767
import os
68-
from maltoolbox.model import Model, ModelAsset
68+
from maltoolbox.model import Model
6969
from maltoolbox.language import LanguageGraph
7070

7171

72-
def connect_computer_to_computer(model: Model, comp1: ModelAsset, comp2: ModelAsset):
73-
"""
74-
Create a connection rule between comp1 and comp2 and return it.
75-
"""
76-
cr_asset_name = f"ConnectionRule {comp1.name} {comp2.name}"
77-
cr_asset = model.add_asset("ComputerConnectionRule", cr_asset_name)
78-
comp1.add_associated_assets("computer1", [cr_asset])
79-
comp2.add_associated_assets("computer2", [cr_asset])
80-
return cr_asset
81-
82-
83-
def connect_computer_to_folder(model: Model, comp: ModelAsset, folder: ModelAsset):
84-
"""
85-
Create a connection rule between comp and folder and return it.
86-
"""
87-
cr_asset_name = f"ConnectionRule {comp.name} {folder.name}"
88-
cr_asset = model.add_asset("ComputerFolderConnectionRule", cr_asset_name)
89-
comp.add_associated_assets("computer", [cr_asset])
90-
folder.add_associated_assets("folder", [cr_asset])
91-
return cr_asset
92-
```
93-
These helper functions are made to work with the our `my-language.mal` language. Here we defined how the assets will connect with each other. Each function creates assets in a model and connects the assets to other assets using associations.
94-
95-
Now we can create a model and use the helper methods. Add this to the end of the file:
96-
97-
```python
9872
def create_model(lang_graph: LanguageGraph) -> Model:
9973
"""Create a model with 2 computers"""
10074
model = Model("my-model", lang_graph)
@@ -104,17 +78,26 @@ def create_model(lang_graph: LanguageGraph) -> Model:
10478
comp_b = model.add_asset("Computer", "ComputerB")
10579

10680
# Connection between computers
107-
connect_computer_to_computer(model, comp_a, comp_b)
81+
comp_a.add_associated_assets("computer2", [comp_b])
10882

109-
# two folders with connection to the computers
110-
folder1 = model.add_asset("Folder", "ComputerA")
111-
connect_computer_to_folder(model, comp_a, folder1)
112-
folder2 = model.add_asset("Folder", "ComputerB")
113-
connect_computer_to_folder(model, comp_b, folder2)
83+
# Two folders
84+
folder1 = model.add_asset("Folder", "FolderA")
85+
folder2 = model.add_asset("Folder", "FolderB")
86+
87+
# Connect the folders to the computers
88+
comp_b.add_associated_assets("folder", [folder2])
89+
comp_a.add_associated_assets("folder", [folder1])
11490

11591
return model
92+
```
93+
In this simple function, we create:
94+
- Two instances of our `Computer` asset (`ComputerA` and `ComputerB`) and our `Folder` asset (`FolderA` and `FolderB`).
95+
- A connection between `ComputerA` and `ComputerB`. The string `"computer2"` comes from the `ComputerConnection` association in the MAL language we created.
96+
- Two connections between the computer and folder instances. The strings `"folder"` come from the `ComputerFolderConnection` association.
11697

98+
Now we can instantiate the model and compile. Add this to the end of the file:
11799

100+
```python
118101
def main():
119102
lang_file = "my-language.mal"
120103
current_dir = os.path.dirname(os.path.abspath(__file__))
@@ -128,5 +111,4 @@ def main():
128111
if __name__ == "__main__":
129112
main()
130113
```
131-
132-
To compile this, run the script with `python my-model.py`.
114+
Change `lang_file` accordingly. Here we create the model using our own language. To compile it, run the script with `python my-model.py`.

0 commit comments

Comments
 (0)