math-spec-mapping 0.3.1__tar.gz → 0.3.3__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. {math_spec_mapping-0.3.1/src/math_spec_mapping.egg-info → math_spec_mapping-0.3.3}/PKG-INFO +1 -1
  2. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/pyproject.toml +1 -1
  3. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/Block.py +2 -0
  4. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/State.py +3 -1
  5. math_spec_mapping-0.3.3/src/math_spec_mapping/Convenience/__init__.py +2 -0
  6. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Convenience/documentation.py +1 -1
  7. math_spec_mapping-0.3.3/src/math_spec_mapping/Convenience/starter.py +271 -0
  8. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/boundary_actions.py +3 -1
  9. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/entities.py +5 -1
  10. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/parameters.py +3 -1
  11. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/states.py +1 -1
  12. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/type.py +2 -1
  13. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Reports/markdown.py +13 -9
  14. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/__init__.py +1 -0
  15. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/schema.schema.json +2 -1
  16. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3/src/math_spec_mapping.egg-info}/PKG-INFO +1 -1
  17. math_spec_mapping-0.3.1/src/math_spec_mapping/Convenience/__init__.py +0 -1
  18. math_spec_mapping-0.3.1/src/math_spec_mapping/Convenience/starter.py +0 -0
  19. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/LICENSE +0 -0
  20. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/README.md +0 -0
  21. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/setup.cfg +0 -0
  22. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/ActionTransmissionChannel.py +0 -0
  23. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/BoundaryAction.py +0 -0
  24. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/ControlAction.py +0 -0
  25. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/Entity.py +0 -0
  26. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/MathSpec.py +0 -0
  27. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/Mechanism.py +0 -0
  28. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/Metric.py +0 -0
  29. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/Parameter.py +0 -0
  30. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/Policy.py +0 -0
  31. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/Space.py +0 -0
  32. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/StateUpdateTransmissionChannel.py +0 -0
  33. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/StatefulMetric.py +0 -0
  34. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/Type.py +0 -0
  35. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Classes/__init__.py +0 -0
  36. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/__init__.py +0 -0
  37. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/action_transmission_channel.py +0 -0
  38. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/control_actions.py +0 -0
  39. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/displays.py +0 -0
  40. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/general.py +0 -0
  41. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/implementations.py +0 -0
  42. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/load.py +0 -0
  43. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/mechanism.py +0 -0
  44. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/metrics.py +0 -0
  45. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/policy.py +0 -0
  46. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/spaces.py +0 -0
  47. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/state_update_transmission_channels.py +0 -0
  48. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/stateful_metrics.py +0 -0
  49. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Load/wiring.py +0 -0
  50. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Reports/__init__.py +0 -0
  51. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Reports/boundary_actions.py +0 -0
  52. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Reports/control_actions.py +0 -0
  53. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Reports/general.py +0 -0
  54. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Reports/html.py +0 -0
  55. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Reports/mechanisms.py +0 -0
  56. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Reports/node_map.py +0 -0
  57. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Reports/parameters.py +0 -0
  58. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Reports/policies.py +0 -0
  59. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Reports/spaces.py +0 -0
  60. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Reports/state.py +0 -0
  61. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Reports/tables.py +0 -0
  62. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/Reports/wiring.py +0 -0
  63. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping/schema.py +0 -0
  64. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping.egg-info/SOURCES.txt +0 -0
  65. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping.egg-info/dependency_links.txt +0 -0
  66. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping.egg-info/requires.txt +0 -0
  67. {math_spec_mapping-0.3.1 → math_spec_mapping-0.3.3}/src/math_spec_mapping.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: math-spec-mapping
3
- Version: 0.3.1
3
+ Version: 0.3.3
4
4
  Summary: A library for easy mapping of mathematical specifications.
5
5
  Author-email: Sean McOwen <Sean@Block.Science>
6
6
  Classifier: Programming Language :: Python :: 3
@@ -3,7 +3,7 @@ requires = ["setuptools>=61.0"]
3
3
  build-backend = "setuptools.build_meta"
4
4
  [project]
5
5
  name = "math-spec-mapping"
6
- version = "0.3.1"
6
+ version = "0.3.3"
7
7
  authors = [
8
8
  { name="Sean McOwen", email="Sean@Block.Science" },
9
9
  ]
@@ -83,6 +83,7 @@ class Block:
83
83
  updates = self.all_updates
84
84
  else:
85
85
  return "\n", {}
86
+ updates = sorted(updates, key=lambda x: x[0].name + "-" + x[1].name)
86
87
 
87
88
  out = "\n"
88
89
  out += 'subgraph SVS["State Variables"]\n'
@@ -90,6 +91,7 @@ class Block:
90
91
  # Render the entities
91
92
  entity_mapping = {}
92
93
  entities = set([x[0] for x in updates])
94
+ entities = sorted(entities, key=lambda x: x.name)
93
95
  for i, x in enumerate(entities):
94
96
  entity_mapping[x.name] = "EE{}".format(i)
95
97
  out += '{}[("{}")]'.format(entity_mapping[x.name], x.name)
@@ -31,7 +31,9 @@ class State:
31
31
  # Check variable name not repeated
32
32
  assert (
33
33
  var.name not in self.variable_map
34
- ), "Variable name {} is already present in variables!".format(key)
34
+ ), "Variable name {} is already present in variables for the state of {}!".format(
35
+ key, self.name
36
+ )
35
37
 
36
38
  self.variable_map[key] = var
37
39
 
@@ -0,0 +1,2 @@
1
+ # from .documentation import write_top_level_json_description
2
+ from .starter import remove_dummy_repo_components
@@ -1,4 +1,4 @@
1
- from src import schema
1
+ from src.math_spec_mapping import schema
2
2
 
3
3
 
4
4
  def write_json_description(schema, key, name):
@@ -0,0 +1,271 @@
1
+ import os
2
+
3
+
4
+ def remove_dummy_repo_components(path):
5
+
6
+ directory_folders = os.listdir(path)
7
+
8
+ if "StatefulMetrics" in directory_folders:
9
+ path2 = path + "/StatefulMetrics"
10
+ contents = os.listdir(path2)
11
+ if "Dummy.py" in contents:
12
+ os.remove(path2 + "/Dummy.py")
13
+ if "__init__.py" in contents:
14
+ with open(path2 + "/__init__.py", "r") as f:
15
+ contents = f.read()
16
+ contents = contents.replace(
17
+ "from .Dummy import dummy_stateful_metrics\n", ""
18
+ )
19
+ contents = contents.replace(
20
+ "stateful_metrics.extend(dummy_stateful_metrics)\n", ""
21
+ )
22
+ contents = contents.replace(
23
+ "stateful_metrics.extend(dummy_stateful_metrics)", ""
24
+ )
25
+ with open(path2 + "/__init__.py", "w") as f:
26
+ f.write(contents)
27
+
28
+ if "Metrics" in directory_folders:
29
+ path2 = path + "/Metrics"
30
+ contents = os.listdir(path2)
31
+ if "Dummy.py" in contents:
32
+ os.remove(path2 + "/Dummy.py")
33
+ if "__init__.py" in contents:
34
+ with open(path2 + "/__init__.py", "r") as f:
35
+ contents = f.read()
36
+ contents = contents.replace("from .Dummy import metrics_x\n", "")
37
+ contents = contents.replace("metrics.extend(metrics_x)\n", "")
38
+ contents = contents.replace("metrics.extend(metrics_x)", "")
39
+ with open(path2 + "/__init__.py", "w") as f:
40
+ f.write(contents)
41
+
42
+ """if "Displays" in directory_folders:
43
+ path2 = path + "/Displays"
44
+ contents = os.listdir(path2)
45
+ if "Dummy.py" in contents:
46
+ os.remove(path2 + "/Dummy.py")
47
+ if "__init__.py" in contents:
48
+ with open(path2 + "/__init__.py", "r") as f:
49
+ contents = f.read()
50
+ contents = contents.replace("from .Dummy import metrics_x\n", "")
51
+ contents = contents.replace("metrics.extend(metrics_x)\n", "")
52
+ contents = contents.replace("metrics.extend(metrics_x)", "")
53
+ with open(path2 + "/__init__.py", "w") as f:
54
+ f.write(contents)"""
55
+
56
+ if "Wiring" in directory_folders:
57
+ path2 = path + "/Wiring"
58
+ contents = os.listdir(path2)
59
+ if "Dummy.py" in contents:
60
+ os.remove(path2 + "/Dummy.py")
61
+ if "__init__.py" in contents:
62
+ with open(path2 + "/__init__.py", "r") as f:
63
+ contents = f.read()
64
+ contents = contents.replace("from .Dummy import dummy_wiring\n", "")
65
+ contents = contents.replace("wiring.extend(dummy_wiring)\n", "")
66
+ contents = contents.replace("wiring.extend(dummy_wiring)", "")
67
+ with open(path2 + "/__init__.py", "w") as f:
68
+ f.write(contents)
69
+
70
+ if "Mechanisms" in directory_folders:
71
+ path2 = path + "/Mechanisms"
72
+ contents = os.listdir(path2)
73
+ if "Dummy.py" in contents:
74
+ os.remove(path2 + "/Dummy.py")
75
+ if "__init__.py" in contents:
76
+ with open(path2 + "/__init__.py", "r") as f:
77
+ contents = f.read()
78
+ contents = contents.replace("from .Dummy import dummy_mechanisms\n", "")
79
+ contents = contents.replace("mechanism.extend(dummy_mechanisms)\n", "")
80
+ contents = contents.replace("mechanism.extend(dummy_mechanisms)", "")
81
+ with open(path2 + "/__init__.py", "w") as f:
82
+ f.write(contents)
83
+
84
+ if "Policies" in directory_folders:
85
+ path2 = path + "/Policies"
86
+ contents = os.listdir(path2)
87
+ if "Dummy.py" in contents:
88
+ os.remove(path2 + "/Dummy.py")
89
+ if "__init__.py" in contents:
90
+ with open(path2 + "/__init__.py", "r") as f:
91
+ contents = f.read()
92
+ contents = contents.replace("from .Dummy import dummy_policies\n", "")
93
+ contents = contents.replace("policies.extend(dummy_policies)\n", "")
94
+ contents = contents.replace("policies.extend(dummy_policies)", "")
95
+ with open(path2 + "/__init__.py", "w") as f:
96
+ f.write(contents)
97
+
98
+ if "BoundaryActions" in directory_folders:
99
+ path2 = path + "/BoundaryActions"
100
+ contents = os.listdir(path2)
101
+ if "Dummy.py" in contents:
102
+ os.remove(path2 + "/Dummy.py")
103
+ if "__init__.py" in contents:
104
+ with open(path2 + "/__init__.py", "r") as f:
105
+ contents = f.read()
106
+ contents = contents.replace(
107
+ "from .Dummy import dummy_boundary_action\n", ""
108
+ )
109
+ contents = contents.replace("dummy_boundary_action,\n", "")
110
+ contents = contents.replace("dummy_boundary_action,", "")
111
+ contents = contents.replace("dummy_boundary_action", "")
112
+ with open(path2 + "/__init__.py", "w") as f:
113
+ f.write(contents)
114
+
115
+ if "ControlActions" in directory_folders:
116
+ path2 = path + "/ControlActions"
117
+ contents = os.listdir(path2)
118
+ if "Dummy.py" in contents:
119
+ os.remove(path2 + "/Dummy.py")
120
+ if "__init__.py" in contents:
121
+ with open(path2 + "/__init__.py", "r") as f:
122
+ contents = f.read()
123
+ contents = contents.replace(
124
+ "from .Dummy import dummy_control_action\n", ""
125
+ )
126
+ contents = contents.replace("dummy_control_action,\n", "")
127
+ contents = contents.replace("dummy_control_action,", "")
128
+ contents = contents.replace("dummy_control_action", "")
129
+ with open(path2 + "/__init__.py", "w") as f:
130
+ f.write(contents)
131
+ if "Entities" in directory_folders:
132
+ path2 = path + "/Entities"
133
+ contents = os.listdir(path2)
134
+ if "Dummy.py" in contents:
135
+ os.remove(path2 + "/Dummy.py")
136
+ if "__init__.py" in contents:
137
+ with open(path2 + "/__init__.py", "r") as f:
138
+ contents = f.read()
139
+ contents = contents.replace("from .Dummy import dummy_entity\n", "")
140
+ contents = contents.replace("dummy_entity, ", "")
141
+ contents = contents.replace("dummy_entity,", "")
142
+ contents = contents.replace("dummy_entity", "")
143
+ with open(path2 + "/__init__.py", "w") as f:
144
+ f.write(contents)
145
+ if "State" in directory_folders:
146
+ path2 = path + "/State"
147
+ contents = os.listdir(path2)
148
+ if "Dummy.py" in contents:
149
+ os.remove(path2 + "/Dummy.py")
150
+ if "__init__.py" in contents:
151
+ with open(path2 + "/__init__.py", "r") as f:
152
+ contents = f.read()
153
+ contents = contents.replace("from .Dummy import dummy_state\n", "")
154
+ contents = contents.replace("dummy_state, ", "")
155
+ contents = contents.replace("dummy_state,", "")
156
+ contents = contents.replace("dummy_state", "")
157
+ with open(path2 + "/__init__.py", "w") as f:
158
+ f.write(contents)
159
+
160
+ if "Parameters" in directory_folders:
161
+ path2 = path + "/Parameters"
162
+ contents = os.listdir(path2)
163
+ if "Dummy.py" in contents:
164
+ os.remove(path2 + "/Dummy.py")
165
+ if "__init__.py" in contents:
166
+ with open(path2 + "/__init__.py", "r") as f:
167
+ contents = f.read()
168
+ contents = contents.replace(
169
+ "from .Dummy import dummy_parameter_sets", ""
170
+ )
171
+ contents = contents.replace(
172
+ "parameters.extend(dummy_parameter_sets)", ""
173
+ )
174
+
175
+ with open(path2 + "/__init__.py", "w") as f:
176
+ f.write(contents)
177
+
178
+ if "Spaces" in directory_folders:
179
+ path2 = path + "/Spaces"
180
+ contents = os.listdir(path2)
181
+ if "Dummy.py" in contents:
182
+ os.remove(path2 + "/Dummy.py")
183
+ if "__init__.py" in contents:
184
+ with open(path2 + "/__init__.py", "r") as f:
185
+ contents = f.read()
186
+ contents = contents.replace("from .Dummy import dummy_spaces\n", "")
187
+ contents = contents.replace("spaces.extend(dummy_spaces)", "")
188
+
189
+ with open(path2 + "/__init__.py", "w") as f:
190
+ f.write(contents)
191
+
192
+ if "Types" in directory_folders:
193
+ path2 = path + "/Types"
194
+ contents = os.listdir(path2)
195
+ if "Dummy.py" in contents:
196
+ os.remove(path2 + "/Dummy.py")
197
+ if "__init__.py" in contents:
198
+ with open(path2 + "/__init__.py", "r") as f:
199
+ contents = f.read()
200
+ contents = contents.replace(
201
+ "from .Dummy import DummyCompoundType, DummyType1, DummyType2\n", ""
202
+ )
203
+ contents = contents.replace(
204
+ """ DummyType1,
205
+ DummyType2,
206
+ DummyCompoundType,""",
207
+ "",
208
+ )
209
+ contents = contents.replace(
210
+ """ DummyType1,
211
+ DummyType2,
212
+ DummyCompoundType""",
213
+ "",
214
+ )
215
+
216
+ with open(path2 + "/__init__.py", "w") as f:
217
+ f.write(contents)
218
+
219
+ if "TypeMappings" in directory_folders:
220
+ path2 = path + "/TypeMappings"
221
+ contents = os.listdir(path2)
222
+
223
+ if "types.py" in contents:
224
+ with open(path2 + "/types.py", "r") as f:
225
+ contents = f.read()
226
+ contents = contents.replace(
227
+ """ "DummyType1": str,
228
+ "DummyType2": int,
229
+ "DummyCompoundType": {"A": "Dummy Type 1", "B": "Dummy Type 2"},""",
230
+ "",
231
+ )
232
+
233
+ with open(path2 + "/types.py", "w") as f:
234
+ f.write(contents)
235
+
236
+ if "TypeMappings" in directory_folders:
237
+ path2 = path + "/TypeMappings"
238
+ contents = os.listdir(path2)
239
+
240
+ if "types.py" in contents:
241
+ with open(path2 + "/types.jl", "r") as f:
242
+ contents = f.read()
243
+ contents = contents.replace(
244
+ """const DummyType1 = String
245
+ const DummyType2 = Integer
246
+ struct DummyCompoundType
247
+ A::DummyType1
248
+ B::DummyType2
249
+ end""",
250
+ "",
251
+ )
252
+
253
+ with open(path2 + "/types.jl", "w") as f:
254
+ f.write(contents)
255
+
256
+ if "TypeMappings" in directory_folders:
257
+ path2 = path + "/TypeMappings"
258
+ contents = os.listdir(path2)
259
+
260
+ if "types.py" in contents:
261
+ with open(path2 + "/types.ts", "r") as f:
262
+ contents = f.read()
263
+ contents = contents.replace(
264
+ """type DummyType1 = string
265
+ type DummyType2 = number
266
+ type DummyCompoundType = {"A": DummyType1, "B": DummyType2}""",
267
+ "",
268
+ )
269
+
270
+ with open(path2 + "/types.ts", "w") as f:
271
+ f.write(contents)
@@ -42,7 +42,9 @@ def convert_boundary_action(data: Dict, ms: Dict) -> BoundaryAction:
42
42
  for name in data["called_by"]:
43
43
  assert (
44
44
  name in ms["Entities"]
45
- ), "{} entity not in entities dictionary".format(name)
45
+ ), "{} entity not in entities dictionary which is referenced in called_by for {}".format(
46
+ name, data["name"]
47
+ )
46
48
  data["called_by"] = [ms["Entities"][x] for x in data["called_by"]]
47
49
 
48
50
  data["codomain"] = tuple(ms["Spaces"][x] for x in data["codomain"])
@@ -25,7 +25,11 @@ def convert_entity(data: Dict, ms: Dict) -> Entity:
25
25
  # Assert that the state is in the math spec and assign it here
26
26
  if data["state"]:
27
27
  name = data["state"]
28
- assert name in ms["State"], "{} state not in states dictionary".format(name)
28
+ assert (
29
+ name in ms["State"]
30
+ ), "{} state not in states dictionary for the entity of {}".format(
31
+ name, data["name"]
32
+ )
29
33
  data["state"] = ms["State"][name]
30
34
 
31
35
  # Build the state object
@@ -18,7 +18,9 @@ def convert_parameter_set(ms, data: Dict) -> ParameterSet:
18
18
  if "metadata" not in param:
19
19
  param["metadata"] = {}
20
20
  check_json_keys(param, "Parameter")
21
- assert param["variable_type"] in ms["Types"], "Type not in ms"
21
+ assert param["variable_type"] in ms["Types"], "Type of {} not in ms".format(
22
+ param["variable_type"]
23
+ )
22
24
  param["variable_type"] = ms["Types"][param["variable_type"]]
23
25
  new_parameters.append(Parameter(param))
24
26
  data["parameters"] = new_parameters
@@ -25,7 +25,7 @@ def convert_state(ms, data: Dict) -> State:
25
25
  new_variables = []
26
26
  for var in data["variables"]:
27
27
  check_json_keys(var, "State Variable")
28
- assert var["type"] in ms["Types"], "Type not in ms"
28
+ assert var["type"] in ms["Types"], "Type {} not in ms".format(var["name"])
29
29
  var["type"] = ms["Types"][var["type"]]
30
30
  if "metadata" not in var:
31
31
  var["metadata"] = {}
@@ -71,7 +71,8 @@ def load_typescript_type_key(path):
71
71
  type_definitions = [x for x in type_definitions if len(x) > 0]
72
72
  hold = type_definitions[:]
73
73
  type_definitions = []
74
- type_definitions.append(hold.pop(0))
74
+ if len(hold) > 0:
75
+ type_definitions.append(hold.pop(0))
75
76
  while len(hold) > 0:
76
77
  curr = hold.pop(0)
77
78
  if "type" in curr or "interface" in curr:
@@ -225,7 +225,7 @@ def write_policy_markdown_report(ms, path, policy, add_metadata=True):
225
225
  out += "\n"
226
226
 
227
227
  out += "## Parameters Used\n"
228
- for i, x in enumerate(policy.parameters_used):
228
+ for i, x in enumerate(sorted(policy.parameters_used, key=lambda x: x)):
229
229
  out += "{}. [[{}]]".format(i + 1, x)
230
230
  out += "\n"
231
231
 
@@ -427,7 +427,7 @@ def write_wiring_markdown_report(ms, path, wiring, add_metadata=True):
427
427
  out += "\n"
428
428
 
429
429
  out += "## All Blocks\n"
430
- for i, x in enumerate(wiring.components_full()):
430
+ for i, x in enumerate(sorted(wiring.components_full(), key=lambda x: x.name)):
431
431
  out += "{}. [[{}]]".format(i + 1, x.name)
432
432
  out += "\n"
433
433
 
@@ -452,13 +452,13 @@ def write_wiring_markdown_report(ms, path, wiring, add_metadata=True):
452
452
  out += "\n"
453
453
 
454
454
  out += "## All Spaces Used\n"
455
- for i, x in enumerate(wiring.all_spaces_used):
455
+ for i, x in enumerate(sorted(wiring.all_spaces_used, key=lambda x: x.name)):
456
456
  out += "{}. [[{}]]".format(i + 1, x.name)
457
457
  out += "\n"
458
458
  out += "\n"
459
459
 
460
460
  out += "## Parameters Used\n"
461
- for i, x in enumerate(wiring.parameters_used):
461
+ for i, x in enumerate(sorted(wiring.parameters_used, key=lambda x: x)):
462
462
  out += "{}. [[{}]]".format(i + 1, x)
463
463
  out += "\n"
464
464
  out += "\n"
@@ -477,7 +477,9 @@ def write_wiring_markdown_report(ms, path, wiring, add_metadata=True):
477
477
 
478
478
  out += "## All State Updates\n"
479
479
 
480
- for i, x in enumerate(wiring.all_updates):
480
+ for i, x in enumerate(
481
+ sorted(wiring.all_updates, key=lambda x: x[0].name + "-" + x[1].name)
482
+ ):
481
483
  out += "{}. [[{}]].[[{}|{}]]".format(
482
484
  i + 1,
483
485
  x[0].name,
@@ -536,7 +538,7 @@ def write_stateful_metrics_markdown_report(ms, path, metric, add_metadata=True):
536
538
  out += "Domain: {}\n\n".format(metric.domain)
537
539
 
538
540
  out += "## Parameters Used\n"
539
- for i, x in enumerate(metric.parameters_used):
541
+ for i, x in enumerate(sorted(metric.parameters_used, key=lambda x: x.name)):
540
542
  out += "{}. [[{}]]".format(i + 1, x)
541
543
  out += "\n"
542
544
  out += "\n"
@@ -575,7 +577,7 @@ def write_metrics_markdown_report(ms, path, metric, add_metadata=True):
575
577
  out += "\n\n"
576
578
 
577
579
  out += "## Parameters Used\n"
578
- for i, x in enumerate(metric.parameters_used):
580
+ for i, x in enumerate(sorted(metric.parameters_used, key=lambda x: x.name)):
579
581
  out += "{}. [[{}]]".format(i + 1, x)
580
582
  var = ms.parameters.parameter_map[x]
581
583
  if var.symbol:
@@ -585,7 +587,7 @@ def write_metrics_markdown_report(ms, path, metric, add_metadata=True):
585
587
 
586
588
  out += "## Variables Used\n"
587
589
  for i, x in enumerate(metric.variables_used):
588
- out += "{}. {}.{}".format(i + 1, x[0], x[1])
590
+ out += "{}. [[{}]].[[{}-{}|{}]]".format(i + 1, x[0], x[0], x[1], x[1])
589
591
  var = ms.state[x[0]].variable_map[x[1]]
590
592
  if var.symbol:
591
593
  out += " , symbol: {}".format(var.symbol)
@@ -683,6 +685,7 @@ def write_wiring_display_markdown_report(ms, path, wiring, add_metadata=True):
683
685
  out += "## Unique Components Used\n"
684
686
  components = [set(x.components_full()) for x in wirings]
685
687
  components = set().union(*components)
688
+ components = sorted(components, key=lambda x: x.name)
686
689
  for i, x in enumerate(components):
687
690
  out += "{}. [[{}]]".format(i + 1, x.name)
688
691
  out += "\n"
@@ -706,8 +709,9 @@ def write_wiring_display_markdown_report(ms, path, wiring, add_metadata=True):
706
709
 
707
710
  parameters = [set(x.parameters_used) for x in wirings]
708
711
  parameters = set().union(*parameters)
712
+ parameters = sorted(parameters, key=lambda x: x)
709
713
  out += "## Unique Parameters Used\n"
710
- for i, x in enumerate(parameters):
714
+ for i, x in enumerate(sorted(parameters, key=lambda x: x.name)):
711
715
  out += "{}. [[{}]]".format(i + 1, x)
712
716
  out += "\n"
713
717
  out += "\n"
@@ -26,5 +26,6 @@ from .Reports import (
26
26
  write_all_markdown_reports,
27
27
  )
28
28
  from .schema import schema
29
+ from .Convenience import remove_dummy_repo_components
29
30
 
30
31
  # from .Convenience import write_top_level_json_description
@@ -693,7 +693,8 @@
693
693
  "items": {
694
694
  "type": "integer"
695
695
  }
696
- }
696
+ },
697
+ "metadata": {"type": "object"}
697
698
  },
698
699
  "required": [
699
700
  "components",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: math-spec-mapping
3
- Version: 0.3.1
3
+ Version: 0.3.3
4
4
  Summary: A library for easy mapping of mathematical specifications.
5
5
  Author-email: Sean McOwen <Sean@Block.Science>
6
6
  Classifier: Programming Language :: Python :: 3
@@ -1 +0,0 @@
1
- from .documentation import write_top_level_json_description