math-spec-mapping 0.3.18__py3-none-any.whl → 0.3.20__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- math_spec_mapping/Classes/Block.py +3 -0
- math_spec_mapping/Classes/MathSpec.py +109 -7
- math_spec_mapping/Classes/Space.py +17 -2
- math_spec_mapping/Classes/Type.py +3 -0
- math_spec_mapping/Load/action_transmission_channel.py +8 -2
- math_spec_mapping/Load/boundary_actions.py +3 -1
- math_spec_mapping/Load/control_actions.py +3 -1
- math_spec_mapping/Load/general.py +9 -0
- math_spec_mapping/Load/mechanism.py +3 -1
- math_spec_mapping/Load/policy.py +2 -1
- math_spec_mapping/Load/spaces.py +3 -0
- math_spec_mapping/Load/spec_tree.py +28 -7
- math_spec_mapping/Load/stateful_metrics.py +6 -0
- math_spec_mapping/Reports/html.py +13 -0
- math_spec_mapping/Reports/markdown.py +19 -4
- math_spec_mapping/schema.schema.json +3 -0
- {math_spec_mapping-0.3.18.dist-info → math_spec_mapping-0.3.20.dist-info}/METADATA +1 -1
- {math_spec_mapping-0.3.18.dist-info → math_spec_mapping-0.3.20.dist-info}/RECORD +21 -21
- {math_spec_mapping-0.3.18.dist-info → math_spec_mapping-0.3.20.dist-info}/LICENSE +0 -0
- {math_spec_mapping-0.3.18.dist-info → math_spec_mapping-0.3.20.dist-info}/WHEEL +0 -0
- {math_spec_mapping-0.3.18.dist-info → math_spec_mapping-0.3.20.dist-info}/top_level.txt +0 -0
@@ -8,7 +8,7 @@ import os
|
|
8
8
|
from copy import deepcopy
|
9
9
|
import shutil
|
10
10
|
import pandas as pd
|
11
|
-
from inspect import signature, getsource, getfile
|
11
|
+
from inspect import signature, getsource, getfile, getsourcelines
|
12
12
|
from IPython.display import display, Markdown
|
13
13
|
|
14
14
|
|
@@ -439,7 +439,14 @@ class MathSpec:
|
|
439
439
|
|
440
440
|
self._used_spaces = list(set().union(*self._used_spaces))
|
441
441
|
us_names = [y.name for y in self._used_spaces]
|
442
|
-
self._unused_spaces = [
|
442
|
+
self._unused_spaces = [
|
443
|
+
self.spaces[x]
|
444
|
+
for x in self.spaces
|
445
|
+
if x not in us_names and x not in ["Terminating Space", "Empty Space"]
|
446
|
+
]
|
447
|
+
|
448
|
+
if len(self._unused_spaces) > 0:
|
449
|
+
print("The following spaces are not used: {}".format(self._unused_spaces))
|
443
450
|
|
444
451
|
def _add_spec_tree(self, tree):
|
445
452
|
self.tree = tree
|
@@ -535,8 +542,17 @@ class MathSpec:
|
|
535
542
|
component
|
536
543
|
]
|
537
544
|
elif folder == "Displays":
|
538
|
-
|
539
|
-
|
545
|
+
|
546
|
+
for component in self.displays["Wiring"]:
|
547
|
+
if component["name"] not in tree:
|
548
|
+
print(
|
549
|
+
"Can't find component code source in {} for {}".format(
|
550
|
+
folder, component["name"]
|
551
|
+
)
|
552
|
+
)
|
553
|
+
component["Source Code Location"] = None
|
554
|
+
else:
|
555
|
+
component["Source Code Location"] = tree[component["name"]]
|
540
556
|
elif folder == "Spaces":
|
541
557
|
for component in self.spaces:
|
542
558
|
if component in ["Terminating Space", "Empty Space"]:
|
@@ -955,23 +971,31 @@ using .Spaces: generate_space_type
|
|
955
971
|
with open(path, "w") as f:
|
956
972
|
f.write(out)
|
957
973
|
|
958
|
-
def build_implementation(self, params):
|
959
|
-
return MathSpecImplementation(
|
974
|
+
def build_implementation(self, params, domain_codomain_checking=False):
|
975
|
+
return MathSpecImplementation(
|
976
|
+
self, params, domain_codomain_checking=domain_codomain_checking
|
977
|
+
)
|
960
978
|
|
961
979
|
def _set_source_code(self):
|
962
980
|
if "python" not in self.implementations:
|
963
981
|
self.source_code = None
|
964
982
|
return
|
965
983
|
self.source_code = deepcopy(self.implementations["python"])
|
984
|
+
self.source_code_lines = {}
|
966
985
|
for x in self.source_code:
|
986
|
+
self.source_code_lines[x] = {}
|
967
987
|
for y in self.source_code[x]:
|
988
|
+
self.source_code_lines[x][y] = "#L{}".format(
|
989
|
+
getsourcelines(self.source_code[x][y])[1]
|
990
|
+
)
|
968
991
|
self.source_code[x][y] = getsource(self.source_code[x][y])
|
969
992
|
|
970
993
|
|
971
994
|
class MathSpecImplementation:
|
972
|
-
def __init__(self, ms: MathSpec, params):
|
995
|
+
def __init__(self, ms: MathSpec, params, domain_codomain_checking):
|
973
996
|
self.ms = deepcopy(ms)
|
974
997
|
self.params = params
|
998
|
+
self.domain_codomain_checking = domain_codomain_checking
|
975
999
|
self.control_actions = self.load_control_actions()
|
976
1000
|
self.boundary_actions = self.load_boundary_actions()
|
977
1001
|
self.policies = self.load_policies()
|
@@ -1010,6 +1034,14 @@ class MathSpecImplementation:
|
|
1010
1034
|
)
|
1011
1035
|
else:
|
1012
1036
|
control_actions[ca.name] = opt.implementations["python"]
|
1037
|
+
|
1038
|
+
for opt_i in [x for x in ca.control_action_options if x != opt]:
|
1039
|
+
if "python" not in opt_i.implementations:
|
1040
|
+
print(
|
1041
|
+
"No python implementation for {} / {}. To fix this, go to Implementations/Python/ControlActions and add {}".format(
|
1042
|
+
ca.name, opt_i.name, opt_i.name
|
1043
|
+
)
|
1044
|
+
)
|
1013
1045
|
return control_actions
|
1014
1046
|
|
1015
1047
|
def load_boundary_actions(self):
|
@@ -1041,6 +1073,14 @@ class MathSpecImplementation:
|
|
1041
1073
|
)
|
1042
1074
|
else:
|
1043
1075
|
boundary_actions[ba.name] = opt.implementations["python"]
|
1076
|
+
|
1077
|
+
for opt_i in [x for x in ba.boundary_action_options if x != opt]:
|
1078
|
+
if "python" not in opt_i.implementations:
|
1079
|
+
print(
|
1080
|
+
"No python implementation for {} / {}. To fix this, go to Implementations/Python/BoundaryActions and add {}".format(
|
1081
|
+
ba.name, opt_i.name, opt_i.name
|
1082
|
+
)
|
1083
|
+
)
|
1044
1084
|
return boundary_actions
|
1045
1085
|
|
1046
1086
|
def load_mechanisms(self):
|
@@ -1137,6 +1177,14 @@ class MathSpecImplementation:
|
|
1137
1177
|
)
|
1138
1178
|
else:
|
1139
1179
|
policies[p.name] = opt.implementations["python"]
|
1180
|
+
for opt_i in [x for x in p.policy_options if x != opt]:
|
1181
|
+
if "python" not in opt_i.implementations:
|
1182
|
+
print(
|
1183
|
+
"No python implementation for {} / {}. To fix this, go to Implementations/Python/Policies and add {}".format(
|
1184
|
+
p.name, opt_i.name, opt_i.name
|
1185
|
+
)
|
1186
|
+
)
|
1187
|
+
|
1140
1188
|
return policies
|
1141
1189
|
|
1142
1190
|
def load_stateful_metrics(self):
|
@@ -1283,6 +1331,60 @@ class MathSpecImplementation:
|
|
1283
1331
|
self.components.update(self.mechanisms)
|
1284
1332
|
self.components.update(self.wiring)
|
1285
1333
|
|
1334
|
+
self.components_enhanced = {}
|
1335
|
+
|
1336
|
+
def create_wrapper(component, domain_codomain_checking):
|
1337
|
+
def wrapper(
|
1338
|
+
state,
|
1339
|
+
params,
|
1340
|
+
spaces,
|
1341
|
+
domain_codomain_checking=self.domain_codomain_checking,
|
1342
|
+
):
|
1343
|
+
domain = spaces
|
1344
|
+
|
1345
|
+
# Domain Checking
|
1346
|
+
if domain_codomain_checking:
|
1347
|
+
prototype_spaces = self.ms.blocks[component].domain
|
1348
|
+
prototype_spaces = [
|
1349
|
+
x.schema for x in prototype_spaces if x.name != "Empty Space"
|
1350
|
+
]
|
1351
|
+
assert len(prototype_spaces) == len(
|
1352
|
+
domain
|
1353
|
+
), "Length of domain incorrect for {}".format(component)
|
1354
|
+
for space1, space2 in zip(domain, prototype_spaces):
|
1355
|
+
assert set(space1.keys()) == set(
|
1356
|
+
space2.keys()
|
1357
|
+
), "Keys for domain schema of {} is not matched by {} in {} component".format(
|
1358
|
+
set(space2.keys()), set(space1.keys()), component
|
1359
|
+
)
|
1360
|
+
|
1361
|
+
codomain = self.components[component](state, params, spaces)
|
1362
|
+
|
1363
|
+
# Codomain Checking
|
1364
|
+
if domain_codomain_checking and codomain:
|
1365
|
+
prototype_spaces = self.ms.blocks[component].codomain
|
1366
|
+
prototype_spaces = [
|
1367
|
+
x.schema for x in prototype_spaces if x.name != "Empty Space"
|
1368
|
+
]
|
1369
|
+
assert len(prototype_spaces) == len(
|
1370
|
+
codomain
|
1371
|
+
), "Length of codomain incorrect for {}".format(component)
|
1372
|
+
for space1, space2 in zip(codomain, prototype_spaces):
|
1373
|
+
assert set(space1.keys()) == set(
|
1374
|
+
space2.keys()
|
1375
|
+
), "Keys for codomain schema of {} is not matched by {} in {} component".format(
|
1376
|
+
set(space2.keys()), set(space1.keys()), component
|
1377
|
+
)
|
1378
|
+
return codomain
|
1379
|
+
|
1380
|
+
return wrapper
|
1381
|
+
|
1382
|
+
for component in self.components:
|
1383
|
+
|
1384
|
+
self.components_enhanced[component] = create_wrapper(
|
1385
|
+
component, self.domain_codomain_checking
|
1386
|
+
)
|
1387
|
+
|
1286
1388
|
def execute_blocks(self, state, params, blocks):
|
1287
1389
|
for block in blocks:
|
1288
1390
|
self.components[block](state, params, [])
|
@@ -6,6 +6,7 @@ class Space:
|
|
6
6
|
self.name = data["name"]
|
7
7
|
self.schema = data["schema"]
|
8
8
|
self.metadata = data["metadata"]
|
9
|
+
self.description = data["description"]
|
9
10
|
self.name_variable = self.name.replace(" ", "").replace("-", "_")
|
10
11
|
self.domain_blocks = []
|
11
12
|
self.codomain_blocks = []
|
@@ -14,5 +15,19 @@ class Space:
|
|
14
15
|
return self.name
|
15
16
|
|
16
17
|
|
17
|
-
TerminatingSpace = Space(
|
18
|
-
|
18
|
+
TerminatingSpace = Space(
|
19
|
+
{
|
20
|
+
"name": "Terminating Space",
|
21
|
+
"schema": {},
|
22
|
+
"metadata": {},
|
23
|
+
"description": "Built-in space for denoting termination of block",
|
24
|
+
}
|
25
|
+
)
|
26
|
+
EmptySpace = Space(
|
27
|
+
{
|
28
|
+
"name": "Empty Space",
|
29
|
+
"schema": {},
|
30
|
+
"metadata": {},
|
31
|
+
"description": "Built-in space for denoting returning no data",
|
32
|
+
}
|
33
|
+
)
|
@@ -50,8 +50,14 @@ def convert_action_transmission_channel(
|
|
50
50
|
data["target"] = ms["Mechanisms"][target]
|
51
51
|
|
52
52
|
# Add in called by and called here with origin and target
|
53
|
-
|
54
|
-
|
53
|
+
if (data["target"], data["optional"], data["space"]) not in data["origin"].calls:
|
54
|
+
data["origin"].calls.append((data["target"], data["optional"], data["space"]))
|
55
|
+
if (data["origin"], data["optional"], data["space"]) not in data[
|
56
|
+
"target"
|
57
|
+
].called_by:
|
58
|
+
data["target"].called_by.append(
|
59
|
+
(data["origin"], data["optional"], data["space"])
|
60
|
+
)
|
55
61
|
|
56
62
|
# Build the action transmission channel object
|
57
63
|
return ActionTransmissionChannel(data)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
from typing import Dict
|
2
2
|
from ..Classes import BoundaryAction, BoundaryActionOption
|
3
|
-
from .general import check_json_keys
|
3
|
+
from .general import check_json_keys, check_domain_codomain_spaces
|
4
4
|
|
5
5
|
|
6
6
|
def convert_boundary_action(data: Dict, ms: Dict) -> BoundaryAction:
|
@@ -24,6 +24,8 @@ def convert_boundary_action(data: Dict, ms: Dict) -> BoundaryAction:
|
|
24
24
|
data["name"]
|
25
25
|
)
|
26
26
|
|
27
|
+
check_domain_codomain_spaces(data, ms)
|
28
|
+
|
27
29
|
if len(data["codomain"]) == 0:
|
28
30
|
data["codomain"] = ("Empty Space",)
|
29
31
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
from typing import Dict
|
2
2
|
from ..Classes import ControlAction, ControlActionOption
|
3
|
-
from .general import check_json_keys
|
3
|
+
from .general import check_json_keys, check_domain_codomain_spaces
|
4
4
|
|
5
5
|
|
6
6
|
def convert_control_action(data: Dict, ms: Dict) -> ControlAction:
|
@@ -25,6 +25,8 @@ def convert_control_action(data: Dict, ms: Dict) -> ControlAction:
|
|
25
25
|
data["name"]
|
26
26
|
)
|
27
27
|
|
28
|
+
check_domain_codomain_spaces(data, ms)
|
29
|
+
|
28
30
|
if len(data["codomain"]) == 0:
|
29
31
|
data["codomain"] = ("Empty Space",)
|
30
32
|
|
@@ -159,3 +159,12 @@ def check_json_keys(json: Dict, check_set_key: str) -> None:
|
|
159
159
|
|
160
160
|
def validate_json_schema(json):
|
161
161
|
validate(json, schema)
|
162
|
+
|
163
|
+
|
164
|
+
def check_domain_codomain_spaces(json: Dict, ms) -> None:
|
165
|
+
if "domain" in json:
|
166
|
+
for key in json["domain"]:
|
167
|
+
assert key in ms["Spaces"], "{} not in spaces".format(key)
|
168
|
+
if "codomain" in json:
|
169
|
+
for key in json["codomain"]:
|
170
|
+
assert key in ms["Spaces"], "{} not in spaces".format(key)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
from typing import Dict
|
2
2
|
from ..Classes import Mechanism
|
3
|
-
from .general import check_json_keys
|
3
|
+
from .general import check_json_keys, check_domain_codomain_spaces
|
4
4
|
|
5
5
|
|
6
6
|
def convert_mechanism(data: Dict, ms: Dict) -> Mechanism:
|
@@ -26,6 +26,8 @@ def convert_mechanism(data: Dict, ms: Dict) -> Mechanism:
|
|
26
26
|
if len(data["domain"]) == 0:
|
27
27
|
data["domain"] = ("Empty Space",)
|
28
28
|
|
29
|
+
check_domain_codomain_spaces(data, ms)
|
30
|
+
|
29
31
|
# Copy
|
30
32
|
data = data.copy()
|
31
33
|
|
math_spec_mapping/Load/policy.py
CHANGED
@@ -2,7 +2,7 @@ from typing import Dict
|
|
2
2
|
from ..Classes import Policy, PolicyOption
|
3
3
|
|
4
4
|
|
5
|
-
from .general import check_json_keys
|
5
|
+
from .general import check_json_keys, check_domain_codomain_spaces
|
6
6
|
|
7
7
|
|
8
8
|
def convert_policy_options(data: Dict, ms) -> PolicyOption:
|
@@ -58,6 +58,7 @@ def convert_policy(data: Dict, ms: Dict) -> Policy:
|
|
58
58
|
assert type(data["domain"]) == tuple, "{} domain is not a tuple".format(
|
59
59
|
data["name"]
|
60
60
|
)
|
61
|
+
check_domain_codomain_spaces(data, ms)
|
61
62
|
|
62
63
|
if len(data["codomain"]) == 0:
|
63
64
|
data["codomain"] = ("Empty Space",)
|
math_spec_mapping/Load/spaces.py
CHANGED
@@ -2,6 +2,18 @@ import ast
|
|
2
2
|
import os
|
3
3
|
|
4
4
|
|
5
|
+
def index_to_line_and_column(lines, index):
|
6
|
+
cumulative_length = 0
|
7
|
+
for line_number, line in enumerate(lines):
|
8
|
+
line_length = len(line) + 1 # +1 for the newline character
|
9
|
+
if cumulative_length + line_length > index:
|
10
|
+
column = index - cumulative_length
|
11
|
+
return line_number, column
|
12
|
+
cumulative_length += line_length
|
13
|
+
|
14
|
+
raise ValueError("Index out of range")
|
15
|
+
|
16
|
+
|
5
17
|
def load_spec_tree(path, ms):
|
6
18
|
tree = {}
|
7
19
|
for folder in [
|
@@ -61,11 +73,20 @@ def load_spec_tree(path, ms):
|
|
61
73
|
assert False, "Not implemented for imports that are not import from"
|
62
74
|
elif isinstance(node, ast.ImportFrom):
|
63
75
|
if node.module:
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
76
|
+
file_path = "{}/{}/{}.py".format(path, folder, node.module)
|
77
|
+
|
78
|
+
with open(file_path, "r") as file2:
|
79
|
+
contents = file2.read()
|
80
|
+
split = contents.split("\n")
|
81
|
+
for key in keys:
|
82
|
+
if key in contents:
|
83
|
+
line_number = (
|
84
|
+
index_to_line_and_column(
|
85
|
+
split, contents.index(key)
|
86
|
+
)[0]
|
87
|
+
+ 1
|
88
|
+
)
|
89
|
+
tree[folder][key] = os.path.abspath(
|
90
|
+
file_path
|
91
|
+
) + "#L{}".format(line_number)
|
71
92
|
return tree
|
@@ -40,6 +40,12 @@ def convert_stateful_metric(ms, data: Dict) -> StatefulMetricSet:
|
|
40
40
|
x[1]
|
41
41
|
)
|
42
42
|
|
43
|
+
assert (
|
44
|
+
var["type"] in ms["Types"] or var["type"] in ms["Spaces"]
|
45
|
+
), "{} type/space referenced by {} is not present in math spec".format(
|
46
|
+
var["type"], var["name"]
|
47
|
+
)
|
48
|
+
|
43
49
|
var["implementations"] = {}
|
44
50
|
if "python" in ms["Implementations"]:
|
45
51
|
if "stateful_metrics" in ms["Implementations"]["python"]:
|
@@ -169,6 +169,13 @@ cssclasses:
|
|
169
169
|
else:
|
170
170
|
out += symbol3 + "{}".format(var.name) + "\n"
|
171
171
|
|
172
|
+
out += symbol1 + "**Metrics**\n"
|
173
|
+
for name in ms.metrics.keys():
|
174
|
+
if linking:
|
175
|
+
out += symbol2 + "[[{}]]".format(name) + "\n"
|
176
|
+
else:
|
177
|
+
out += symbol2 + "{}".format(name) + "\n"
|
178
|
+
|
172
179
|
out += symbol1 + "**Types**\n"
|
173
180
|
for name in ms.types.keys():
|
174
181
|
if linking:
|
@@ -221,6 +228,12 @@ cssclasses:
|
|
221
228
|
out += symbol2 + "[[{}]]".format(name) + "\n"
|
222
229
|
else:
|
223
230
|
out += symbol2 + name + "\n"
|
231
|
+
out += symbol1 + "**Wirings**\n"
|
232
|
+
for name in ms.wiring.keys():
|
233
|
+
if linking:
|
234
|
+
out += symbol2 + "[[{}]]".format(name) + "\n"
|
235
|
+
else:
|
236
|
+
out += symbol2 + name + "\n"
|
224
237
|
|
225
238
|
if add_tabbing:
|
226
239
|
out = out.split("\n")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import os
|
2
2
|
from .state import write_state_section
|
3
|
-
from inspect import signature, getsource, getfile
|
3
|
+
from inspect import signature, getsource, getfile, getsourcelines
|
4
4
|
|
5
5
|
|
6
6
|
def get_source_code(
|
@@ -16,7 +16,7 @@ def get_source_code(
|
|
16
16
|
{}```""".format(
|
17
17
|
getsource(code)
|
18
18
|
)
|
19
|
-
file_path = getfile(code)
|
19
|
+
file_path = getfile(code) + "#L{}".format(getsourcelines(code)[1])
|
20
20
|
return source_code, file_path
|
21
21
|
|
22
22
|
|
@@ -67,7 +67,10 @@ def write_entity_markdown_report(ms, path, entity, add_metadata=True):
|
|
67
67
|
|
68
68
|
|
69
69
|
def write_source_code_block(component, text, path):
|
70
|
-
|
70
|
+
if hasattr(component, "source_code_location"):
|
71
|
+
file_path = component.source_code_location
|
72
|
+
else:
|
73
|
+
file_path = component["Source Code Location"]
|
71
74
|
if file_path:
|
72
75
|
file_path = os.path.relpath(file_path, path)
|
73
76
|
text += "## Spec Source Code Location\n\n"
|
@@ -434,6 +437,13 @@ def write_space_markdown_report(ms, path, space, add_metadata=True):
|
|
434
437
|
"\n".join(["{}: {}".format(x, metadata[x]) for x in metadata])
|
435
438
|
)
|
436
439
|
|
440
|
+
if space.description:
|
441
|
+
out += "## Description"
|
442
|
+
out += "\n"
|
443
|
+
out += space.description
|
444
|
+
out += "\n"
|
445
|
+
out += "\n"
|
446
|
+
|
437
447
|
out += "## Schema"
|
438
448
|
out += "\n"
|
439
449
|
out += "\n"
|
@@ -855,6 +865,8 @@ def write_state_variables_markdown_reports(ms, path, state, add_metadata=True):
|
|
855
865
|
out += "Description: "
|
856
866
|
out += variable.description
|
857
867
|
out += "\n\n"
|
868
|
+
out += "Underlying state: [[{}]]".format(state.name)
|
869
|
+
out += "\n\n"
|
858
870
|
out += "Type: [["
|
859
871
|
out += variable.type.name
|
860
872
|
out += "]]\n\n"
|
@@ -939,7 +951,10 @@ def write_wiring_display_markdown_report(ms, path, wiring, add_metadata=True):
|
|
939
951
|
out += "\n"
|
940
952
|
out += "\n"
|
941
953
|
|
942
|
-
|
954
|
+
path = "{}/Displays/Wiring/{}.md".format(path, wiring["name"])
|
955
|
+
out = write_source_code_block(wiring, out, path)
|
956
|
+
|
957
|
+
with open(path, "w") as f:
|
943
958
|
f.write(out)
|
944
959
|
|
945
960
|
|
@@ -1,43 +1,43 @@
|
|
1
1
|
math_spec_mapping/__init__.py,sha256=7fGuxoSDYl61z0PZ_PzS6x5P8l174gOzobI9u0aoLVw,1260
|
2
2
|
math_spec_mapping/schema.py,sha256=6mrRqzEnTTSXjb19xJ63MBp0KjKH0s7i6TfT4MkAY9k,233
|
3
|
-
math_spec_mapping/schema.schema.json,sha256=
|
3
|
+
math_spec_mapping/schema.schema.json,sha256=NyzUy899YR_5Y956ID5HQtgnRBrNTAN6QjrqCyBasRA,31005
|
4
4
|
math_spec_mapping/Classes/ActionTransmissionChannel.py,sha256=zWMo5QsgPh5WGIWXl-xOrZNMXYJXmK6Vejw1dQvi0og,246
|
5
|
-
math_spec_mapping/Classes/Block.py,sha256=
|
5
|
+
math_spec_mapping/Classes/Block.py,sha256=KHdGILGW7G29nXXsrjeRkKsilqEqYl31ZV1u9gm4xio,20147
|
6
6
|
math_spec_mapping/Classes/BoundaryAction.py,sha256=_rFvEZ4LNxmlM59js4SuQ9n5CgVmITw4YWKs0-q0r-4,560
|
7
7
|
math_spec_mapping/Classes/ControlAction.py,sha256=4AzMSA8fbnUf-fGlvMJXHJFbz32G1h1QVWf2yzrXrLA,493
|
8
8
|
math_spec_mapping/Classes/Entity.py,sha256=fA0-b128_OHHxfCg4pzqyQV083EYev1HlVpy86S5igg,1226
|
9
|
-
math_spec_mapping/Classes/MathSpec.py,sha256=
|
9
|
+
math_spec_mapping/Classes/MathSpec.py,sha256=nQTesARmLrYagoW2T3G6gbidTsFM-NFC9yl3Li01ey8,55970
|
10
10
|
math_spec_mapping/Classes/Mechanism.py,sha256=2sLm3wYBIeTQaMBcsJ9btqIWsbS895Ra8NY6Y9_G_Dg,379
|
11
11
|
math_spec_mapping/Classes/Metric.py,sha256=iQhH4g8Z60QlM22nPX9ytGmidOsZSiSs0KjqwmsScwU,636
|
12
12
|
math_spec_mapping/Classes/Parameter.py,sha256=ZuJ_w0sChvRElJ4sOnXZ2EV4Ell2xXFulKLjVOpgz2E,1237
|
13
13
|
math_spec_mapping/Classes/Policy.py,sha256=Nso8QJMBDeyN66VkZ29nnZ1WjaMnReMn7SxKt_bRngU,481
|
14
|
-
math_spec_mapping/Classes/Space.py,sha256=
|
14
|
+
math_spec_mapping/Classes/Space.py,sha256=tdxah3TtixvT0wCqljC_pXFRvO92TY6lomGu2WS8Jtw,806
|
15
15
|
math_spec_mapping/Classes/State.py,sha256=U40DoF2qlx_k9gvqQiP1S3C9ZLk3cW_-jmJn71TiCxg,1599
|
16
16
|
math_spec_mapping/Classes/StateUpdateTransmissionChannel.py,sha256=3hBLvD1lE64PkwqksBXAfFWv7foOZzGQLAFQWy42tOA,257
|
17
17
|
math_spec_mapping/Classes/StatefulMetric.py,sha256=plMFMAFEk1y2t4DR5lA2SRC9UrYArsx_W33l3mZSdgE,804
|
18
|
-
math_spec_mapping/Classes/Type.py,sha256=
|
18
|
+
math_spec_mapping/Classes/Type.py,sha256=cA5-5nOfjX6aHzTHM8M6mP5lsS7foumckRu7WDX610M,339
|
19
19
|
math_spec_mapping/Classes/__init__.py,sha256=0zxgOqns_9JybD74HKMVh6aw8ij8WVbfQ4Q_1uWzof0,761
|
20
20
|
math_spec_mapping/Convenience/__init__.py,sha256=BEZr1rXohKAknOa3wjNVx3EvSVxDcfftJsvtSw5mvmQ,264
|
21
21
|
math_spec_mapping/Convenience/documentation.py,sha256=1ziWVJznbCUxeAAt03nAdEYtMlXNo5TeedHfgs0vSBU,1625
|
22
22
|
math_spec_mapping/Convenience/github.py,sha256=Wddr1FCxcIxaFeiKyvx3mvVDbzjcgTxs4rU8ulc4qXk,3539
|
23
23
|
math_spec_mapping/Convenience/starter.py,sha256=dD1R9wcVFZV-BCTflxNkR6Ay6NF1TlVBdIaWmbJwMGE,17379
|
24
24
|
math_spec_mapping/Load/__init__.py,sha256=QfHMLatZAKqj4up-LkDL_r42tO7Mo_-qdqPQYLYY5l0,49
|
25
|
-
math_spec_mapping/Load/action_transmission_channel.py,sha256=
|
26
|
-
math_spec_mapping/Load/boundary_actions.py,sha256=
|
27
|
-
math_spec_mapping/Load/control_actions.py,sha256=
|
25
|
+
math_spec_mapping/Load/action_transmission_channel.py,sha256=oTYCi7as4LWKZLxfRckuWpfLsAPZXjp-VBYmyLBN3yk,2781
|
26
|
+
math_spec_mapping/Load/boundary_actions.py,sha256=sR1JWzWD-9jegIQ8Api_NNUp11RgYM-6sAi1Pq-vkss,3007
|
27
|
+
math_spec_mapping/Load/control_actions.py,sha256=gL4HVn81e1UwBjUKEVtNEJop7E8KQGuq4F43oMaoyvA,2445
|
28
28
|
math_spec_mapping/Load/displays.py,sha256=uQvs0Jhp8-9SXGex8SG3ibxHJu7ahAV3xLeBFbT8QEE,480
|
29
29
|
math_spec_mapping/Load/entities.py,sha256=Ds7VQY_govWEn1vSHYVrLa8IadSNyOQzaCK18JPYPKk,1289
|
30
|
-
math_spec_mapping/Load/general.py,sha256=
|
30
|
+
math_spec_mapping/Load/general.py,sha256=Wjg0ESB80j9UwvoRB_-J8SBKq3KqCFZAKsuKNJFqkE4,4789
|
31
31
|
math_spec_mapping/Load/implementations.py,sha256=a8YvumnyQvrnCo-o52Rv4yU8D7nmkMrV1iIA15fr6Bw,490
|
32
32
|
math_spec_mapping/Load/load.py,sha256=Cm1IP_jIzWNGFVPcb1OOfQQYSNgyIfUdT--v1D1dkKE,2797
|
33
|
-
math_spec_mapping/Load/mechanism.py,sha256=
|
33
|
+
math_spec_mapping/Load/mechanism.py,sha256=6tgISsxc-SXCYS5yxuIqnl0nX__t1k0uj9z0O0E1uC4,2367
|
34
34
|
math_spec_mapping/Load/metrics.py,sha256=CcVM0_aN-aPnH5_AyEKzFCJGPbgMb0brw5nECsdNVeU,3936
|
35
35
|
math_spec_mapping/Load/parameters.py,sha256=W4utm7to3s2fo4z3XgLH0TM1agaIad1qfM2I-lLMua4,1393
|
36
|
-
math_spec_mapping/Load/policy.py,sha256=
|
37
|
-
math_spec_mapping/Load/spaces.py,sha256=
|
38
|
-
math_spec_mapping/Load/spec_tree.py,sha256=
|
36
|
+
math_spec_mapping/Load/policy.py,sha256=61F7sobAwaXrT1g_pXqBmQS0O-jekdQ1nB9C658LJyg,2770
|
37
|
+
math_spec_mapping/Load/spaces.py,sha256=PcAQ8QnsCZQarPaymUhESqbRMXH-uVRumXTh-E256A4,1256
|
38
|
+
math_spec_mapping/Load/spec_tree.py,sha256=cRSvb3vHPJIJ7pS6KKH3yJLJXPQXMMPt-ciX9NccQhM,3264
|
39
39
|
math_spec_mapping/Load/state_update_transmission_channels.py,sha256=FJWp5n4HdtHAfof5BUQ6BnRakljatL2h8dWCapaVSc0,2238
|
40
|
-
math_spec_mapping/Load/stateful_metrics.py,sha256=
|
40
|
+
math_spec_mapping/Load/stateful_metrics.py,sha256=eNXIsNmezVN75L3zMXUl8_JORShm_ovJuM7vkiODs7s,2599
|
41
41
|
math_spec_mapping/Load/states.py,sha256=3YurI7eTNkN6nrXRFVrc58wH0VfM22XOuWE07HVpR7Y,1365
|
42
42
|
math_spec_mapping/Load/type.py,sha256=FbViE3wV1o1JTx7mUYyUpAvgIxDKDQYc6Iw50FrZ4nY,4808
|
43
43
|
math_spec_mapping/Load/wiring.py,sha256=l1FhHNFRMKorn1oiRhsuMDsExcXnUmTjqQt5ElE-Bbk,3258
|
@@ -45,8 +45,8 @@ math_spec_mapping/Reports/__init__.py,sha256=P3IuE1wiM1EO_yCSD73D4O0O6j7aVWmiwpK
|
|
45
45
|
math_spec_mapping/Reports/boundary_actions.py,sha256=45BPp4QjWdD-3E9ZWwqgj_nI2-YdcI2ZZ19_Qv_K7Qk,1410
|
46
46
|
math_spec_mapping/Reports/control_actions.py,sha256=NksekZKIPFSIkubttFstKFthc5AU9B9PWRLSl9j1wWs,1216
|
47
47
|
math_spec_mapping/Reports/general.py,sha256=WOOn6Wlb8M4fsdN49FlKLwOka6vJPQ9aCUy88TL2ki0,1610
|
48
|
-
math_spec_mapping/Reports/html.py,sha256=
|
49
|
-
math_spec_mapping/Reports/markdown.py,sha256=
|
48
|
+
math_spec_mapping/Reports/html.py,sha256=MCVp_D1LuRoZrHtwzFOJGQviztGeahqsWf3Zue1Yz64,10134
|
49
|
+
math_spec_mapping/Reports/markdown.py,sha256=q4dCzH6dDE0TLJ3XS7olUpDfPk8323IEPbT9ki7GEgE,30595
|
50
50
|
math_spec_mapping/Reports/mechanisms.py,sha256=d2Rxt3JBYvqAOAYUynl0buYVoXEHrO8EGq7GK6hK8NA,1322
|
51
51
|
math_spec_mapping/Reports/node_map.py,sha256=FdSMDQG16NX6n9sZcH-T5xwsvgjrV9OqBHc9J_VlNK0,3129
|
52
52
|
math_spec_mapping/Reports/parameters.py,sha256=-ucL71lolqU0xvV7yb0sXl4pFMRl5tXNWdoBfUjLOaQ,1944
|
@@ -55,8 +55,8 @@ math_spec_mapping/Reports/spaces.py,sha256=-76hR5wQBv4lsG000ypBJ-OprjsNjI-rNRMYd
|
|
55
55
|
math_spec_mapping/Reports/state.py,sha256=QYeCvX5cHeZBrbvMeDsTqJcUDTuDFJSLvPbasjLspk8,3643
|
56
56
|
math_spec_mapping/Reports/tables.py,sha256=O0CNuqh3LMECq5uLjBOoxMUk5hUvkUK660FNnwWUxDY,1505
|
57
57
|
math_spec_mapping/Reports/wiring.py,sha256=u9SvKWy6T-WJUEgFI6-zgZanoOaTTs_2YwmEceDLsV8,1618
|
58
|
-
math_spec_mapping-0.3.
|
59
|
-
math_spec_mapping-0.3.
|
60
|
-
math_spec_mapping-0.3.
|
61
|
-
math_spec_mapping-0.3.
|
62
|
-
math_spec_mapping-0.3.
|
58
|
+
math_spec_mapping-0.3.20.dist-info/LICENSE,sha256=ObyEzSw8kgCaFbEfpu1zP4TrcAKLA0xhqHMZZfyh7N0,1069
|
59
|
+
math_spec_mapping-0.3.20.dist-info/METADATA,sha256=NXnBv92-ZzX5ESZFyq6bzbKWGa5Jq1y0cPddW7o4ndc,6498
|
60
|
+
math_spec_mapping-0.3.20.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
61
|
+
math_spec_mapping-0.3.20.dist-info/top_level.txt,sha256=AImhn9wgazkdV0a9vfiphtQR8uGe2nq-ZIOp-6yUk9o,18
|
62
|
+
math_spec_mapping-0.3.20.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|