math-spec-mapping 0.2.7__py3-none-any.whl → 0.2.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- math_spec_mapping/Classes/MathSpec.py +153 -0
- math_spec_mapping/Classes/__init__.py +1 -1
- math_spec_mapping/Reports/markdown.py +0 -1
- math_spec_mapping/schema.schema.json +48 -24
- {math_spec_mapping-0.2.7.dist-info → math_spec_mapping-0.2.8.dist-info}/METADATA +1 -1
- {math_spec_mapping-0.2.7.dist-info → math_spec_mapping-0.2.8.dist-info}/RECORD +9 -9
- {math_spec_mapping-0.2.7.dist-info → math_spec_mapping-0.2.8.dist-info}/LICENSE +0 -0
- {math_spec_mapping-0.2.7.dist-info → math_spec_mapping-0.2.8.dist-info}/WHEEL +0 -0
- {math_spec_mapping-0.2.7.dist-info → math_spec_mapping-0.2.8.dist-info}/top_level.txt +0 -0
@@ -5,6 +5,7 @@ from .Mechanism import Mechanism
|
|
5
5
|
from .ControlAction import ControlAction
|
6
6
|
from .BoundaryAction import BoundaryAction
|
7
7
|
import os
|
8
|
+
from copy import deepcopy
|
8
9
|
|
9
10
|
|
10
11
|
class MathSpec:
|
@@ -41,6 +42,8 @@ class MathSpec:
|
|
41
42
|
self._crawl_parameters()
|
42
43
|
self._crawl_parameters_exploded()
|
43
44
|
self._check_dictionary_names()
|
45
|
+
self._build_functional_parameters()
|
46
|
+
self._build_parameter_types()
|
44
47
|
|
45
48
|
def _check_dictionary_names(self):
|
46
49
|
for key in self.boundary_actions:
|
@@ -352,6 +355,49 @@ class MathSpec:
|
|
352
355
|
sm.extend([x.name for x in metrics.metrics])
|
353
356
|
return sm
|
354
357
|
|
358
|
+
def _build_functional_parameters(self):
|
359
|
+
opts = [x for x in self.policies.values() if len(x.policy_options) > 1]
|
360
|
+
opts.extend(
|
361
|
+
[
|
362
|
+
x
|
363
|
+
for x in self.boundary_actions.values()
|
364
|
+
if len(x.boundary_action_options) > 1
|
365
|
+
]
|
366
|
+
)
|
367
|
+
opts.extend(
|
368
|
+
[
|
369
|
+
x
|
370
|
+
for x in self.control_actions.values()
|
371
|
+
if len(x.control_action_options) > 1
|
372
|
+
]
|
373
|
+
)
|
374
|
+
self.functional_parameters = {}
|
375
|
+
for x in opts:
|
376
|
+
self.functional_parameters["FP {}".format(x.name)] = x
|
377
|
+
|
378
|
+
def _build_parameter_types(self):
|
379
|
+
system_parameters_types = {}
|
380
|
+
behavioral_parameters_types = {}
|
381
|
+
functional_parameters_types = {}
|
382
|
+
|
383
|
+
for x in self.parameters.all_parameters:
|
384
|
+
pt = self.parameters.parameter_map[x].variable_type.original_type_name
|
385
|
+
pc = self.parameters.parameter_map[x].parameter_class
|
386
|
+
if pc == "Functional":
|
387
|
+
functional_parameters_types[x] = pt
|
388
|
+
elif pc == "System":
|
389
|
+
system_parameters_types[x] = pt
|
390
|
+
elif pc == "Behavioral":
|
391
|
+
behavioral_parameters_types[x] = pt
|
392
|
+
else:
|
393
|
+
assert False
|
394
|
+
for x in self.functional_parameters:
|
395
|
+
functional_parameters_types[x] = "str"
|
396
|
+
|
397
|
+
self.system_parameters_types = system_parameters_types
|
398
|
+
self.behavioral_parameters_types = behavioral_parameters_types
|
399
|
+
self.functional_parameters_types = functional_parameters_types
|
400
|
+
|
355
401
|
def metaprogramming_python_types(self, model_directory, overwrite=False):
|
356
402
|
path = model_directory + "/types.py"
|
357
403
|
if not overwrite:
|
@@ -447,3 +493,110 @@ class MathSpec:
|
|
447
493
|
|
448
494
|
with open(path, "w") as f:
|
449
495
|
f.write(out)
|
496
|
+
|
497
|
+
def metaprogramming_python_parameters(
|
498
|
+
self, model_directory, overwrite=False, default_values=None
|
499
|
+
):
|
500
|
+
path = model_directory + "/parameters.py"
|
501
|
+
if not overwrite:
|
502
|
+
assert "parameters.py" not in os.listdir(
|
503
|
+
model_directory
|
504
|
+
), "The parameters file is already written, either delete it or switch to overwrite mode"
|
505
|
+
out = ""
|
506
|
+
|
507
|
+
unique_types = (
|
508
|
+
set(self.system_parameters_types.values())
|
509
|
+
.union(set(self.functional_parameters_types.values()))
|
510
|
+
.union(set(self.behavioral_parameters_types.values()))
|
511
|
+
)
|
512
|
+
unique_types = [x for x in unique_types if x != "str"]
|
513
|
+
|
514
|
+
out = ""
|
515
|
+
out += "from .types import {}".format(", ".join(unique_types))
|
516
|
+
out += "\n"
|
517
|
+
out += "from typing import TypedDict"
|
518
|
+
out += "\n"
|
519
|
+
out += "\n"
|
520
|
+
|
521
|
+
d = self.system_parameters_types
|
522
|
+
d = [(x, d[x]) for x in d]
|
523
|
+
d = ["'{}': {}".format(x[0], x[1]) for x in d]
|
524
|
+
d = ", ".join(d)
|
525
|
+
d = "{" + d + "}"
|
526
|
+
|
527
|
+
out += "SystemParameters = TypedDict('SystemParameters', {})".format(d)
|
528
|
+
out += "\n\n"
|
529
|
+
|
530
|
+
d = self.behavioral_parameters_types
|
531
|
+
d = [(x, d[x]) for x in d]
|
532
|
+
d = ["'{}': {}".format(x[0], x[1]) for x in d]
|
533
|
+
d = ", ".join(d)
|
534
|
+
d = "{" + d + "}"
|
535
|
+
|
536
|
+
out += "BehavioralParameters = TypedDict('BehavioralParameters', {})".format(d)
|
537
|
+
out += "\n\n"
|
538
|
+
|
539
|
+
d = self.functional_parameters_types
|
540
|
+
d = [(x, d[x]) for x in d]
|
541
|
+
d = ["'{}': {}".format(x[0], x[1]) for x in d]
|
542
|
+
d = ", ".join(d)
|
543
|
+
d = "{" + d + "}"
|
544
|
+
|
545
|
+
out += "FunctionalParameters = TypedDict('FunctionalParameters', {})".format(d)
|
546
|
+
out += "\n\n"
|
547
|
+
out += """Parameters = TypedDict("Parameters",{**BehavioralParameters.__annotations__,
|
548
|
+
**FunctionalParameters.__annotations__,
|
549
|
+
**SystemParameters.__annotations__})"""
|
550
|
+
out += "\n\n"
|
551
|
+
|
552
|
+
out += "functional_parameters: FunctionalParameters = "
|
553
|
+
out += "{"
|
554
|
+
for key in self.functional_parameters_types:
|
555
|
+
out += '"{}"'.format(key)
|
556
|
+
out += ": "
|
557
|
+
val = "None"
|
558
|
+
if default_values:
|
559
|
+
if key in default_values:
|
560
|
+
val = str(default_values[key])
|
561
|
+
out += val
|
562
|
+
out += ",\n"
|
563
|
+
out += "}"
|
564
|
+
out += "\n\n"
|
565
|
+
|
566
|
+
out += "behavioral_parameters: BehavioralParameters = "
|
567
|
+
out += "{"
|
568
|
+
for key in self.behavioral_parameters_types:
|
569
|
+
out += '"{}"'.format(key)
|
570
|
+
out += ": "
|
571
|
+
val = "None"
|
572
|
+
if default_values:
|
573
|
+
if key in default_values:
|
574
|
+
val = str(default_values[key])
|
575
|
+
out += val
|
576
|
+
out += ",\n"
|
577
|
+
out += "}"
|
578
|
+
out += "\n\n"
|
579
|
+
|
580
|
+
out += "system_parameters: SystemParameters = "
|
581
|
+
out += "{"
|
582
|
+
for key in self.system_parameters_types:
|
583
|
+
out += '"{}"'.format(key)
|
584
|
+
out += ": "
|
585
|
+
val = "None"
|
586
|
+
if default_values:
|
587
|
+
if key in default_values:
|
588
|
+
val = str(default_values[key])
|
589
|
+
out += val
|
590
|
+
out += ",\n"
|
591
|
+
out += "}"
|
592
|
+
out += "\n\n"
|
593
|
+
|
594
|
+
out += "parameters: Parameters = {**behavioral_parameters, **functional_parameters, **system_parameters}"
|
595
|
+
|
596
|
+
with open(path, "w") as f:
|
597
|
+
f.write(out)
|
598
|
+
|
599
|
+
|
600
|
+
class MathSpecImplementation:
|
601
|
+
def __init__(self, ms: MathSpec, params):
|
602
|
+
self.ms = deepcopy(ms)
|
@@ -116,28 +116,34 @@
|
|
116
116
|
"additionalProperties": false,
|
117
117
|
"properties": {
|
118
118
|
"name": {
|
119
|
-
"type": "string"
|
119
|
+
"type": "string",
|
120
|
+
"description": "The name of the control action"
|
120
121
|
},
|
121
122
|
"description": {
|
122
|
-
"type": "string"
|
123
|
+
"type": "string",
|
124
|
+
"description": "The description of the control action"
|
123
125
|
},
|
124
126
|
"constraints": {
|
125
127
|
"type": "array",
|
126
|
-
"
|
128
|
+
"description": "Any constraints which the control action must respect",
|
129
|
+
"items": {"type": "string"}
|
127
130
|
},
|
128
131
|
"control_action_options": {
|
129
132
|
"type": "array",
|
130
|
-
"items": {}
|
133
|
+
"items": {},
|
134
|
+
"description": "Possible implementations of the control action"
|
131
135
|
},
|
132
136
|
"codomain": {
|
133
137
|
"type": "array",
|
134
138
|
"items": {
|
135
139
|
"type": "string"
|
136
|
-
}
|
140
|
+
},
|
141
|
+
"description": "The output spaces of the control action"
|
137
142
|
},
|
138
143
|
"parameters_used": {
|
139
144
|
"type": "array",
|
140
|
-
"items": {"type": "string"}
|
145
|
+
"items": {"type": "string"},
|
146
|
+
"description": "The parameters which the control action uses in its implenetations"
|
141
147
|
}
|
142
148
|
},
|
143
149
|
"required": [
|
@@ -308,44 +314,52 @@
|
|
308
314
|
"additionalProperties": false,
|
309
315
|
"properties": {
|
310
316
|
"name": {
|
311
|
-
"type": "string"
|
317
|
+
"type": "string",
|
318
|
+
"description": "The name of the policy"
|
312
319
|
},
|
313
320
|
"description": {
|
314
|
-
"type": "string"
|
321
|
+
"type": "string",
|
322
|
+
"description": "Description of the policy"
|
315
323
|
},
|
316
324
|
"constraints": {
|
317
325
|
"type": "array",
|
318
|
-
"
|
326
|
+
"description": "Any constraints which the policy must respect",
|
327
|
+
"items": {"type": "string"}
|
319
328
|
},
|
320
329
|
"policy_options": {
|
321
330
|
"type": "array",
|
322
331
|
"items": {
|
323
332
|
"$ref": "./schema.schema.json/#/definitions/PolicyOption"
|
324
|
-
}
|
333
|
+
},
|
334
|
+
"description": "Possible implementations of the policy"
|
325
335
|
},
|
326
336
|
"domain": {
|
327
337
|
"type": "array",
|
328
338
|
"items": {
|
329
339
|
"type": "string"
|
330
|
-
}
|
340
|
+
},
|
341
|
+
"description": "The spaces which are passed in as inputs to the policy"
|
331
342
|
},
|
332
343
|
"codomain": {
|
333
344
|
"type": "array",
|
334
345
|
"items": {
|
335
346
|
"type": "string"
|
336
|
-
}
|
347
|
+
},
|
348
|
+
"description": "The spaces which are returned as results of the policy"
|
337
349
|
},
|
338
350
|
"parameters_used": {
|
339
351
|
"type": "array",
|
340
352
|
"items": {
|
341
353
|
"type": "string"
|
342
|
-
}
|
354
|
+
},
|
355
|
+
"description": "All parameters used in the implementations of policies"
|
343
356
|
},
|
344
357
|
"metrics_used": {
|
345
358
|
"type": "array",
|
346
359
|
"items": {
|
347
360
|
"type": "string"
|
348
|
-
}
|
361
|
+
},
|
362
|
+
"description": "All metrics used in implementation of policies"
|
349
363
|
}
|
350
364
|
},
|
351
365
|
"required": [
|
@@ -366,13 +380,16 @@
|
|
366
380
|
"additionalProperties": false,
|
367
381
|
"properties": {
|
368
382
|
"name": {
|
369
|
-
"type": "string"
|
383
|
+
"type": "string",
|
384
|
+
"description": "The name of the policy option"
|
370
385
|
},
|
371
386
|
"description": {
|
372
|
-
"type": "string"
|
387
|
+
"type": "string",
|
388
|
+
"description": "A description of the implementation"
|
373
389
|
},
|
374
390
|
"logic": {
|
375
|
-
"type": "string"
|
391
|
+
"type": "string",
|
392
|
+
"description": "Any logic associated with the implementation"
|
376
393
|
}
|
377
394
|
},
|
378
395
|
"required": [
|
@@ -434,38 +451,45 @@
|
|
434
451
|
"additionalProperties": true,
|
435
452
|
"properties": {
|
436
453
|
"name": {
|
437
|
-
"type": "string"
|
454
|
+
"type": "string",
|
455
|
+
"description": "Name of the boundary action"
|
438
456
|
},
|
439
457
|
"description": {
|
440
|
-
"type": "string"
|
458
|
+
"type": "string",
|
459
|
+
"description": "Quick description of the boundary action"
|
441
460
|
},
|
442
461
|
"constraints": {
|
443
462
|
"type": "array",
|
444
463
|
"items": {
|
445
464
|
"type": "string"
|
446
|
-
}
|
465
|
+
},
|
466
|
+
"description": "Any constraints which the boundary action must respect"
|
447
467
|
},
|
448
468
|
"boundary_action_options": {
|
449
469
|
"type": "array",
|
450
|
-
"items": {}
|
470
|
+
"items": {},
|
471
|
+
"description": "The options for implementation of the boundary action"
|
451
472
|
},
|
452
473
|
"called_by": {
|
453
474
|
"type": "array",
|
454
475
|
"items": {
|
455
476
|
"type": "string"
|
456
|
-
}
|
477
|
+
},
|
478
|
+
"description": "The entities which are allowed to call this boundary action"
|
457
479
|
},
|
458
480
|
"codomain": {
|
459
481
|
"type": "array",
|
460
482
|
"items": {
|
461
483
|
"type": "string"
|
462
|
-
}
|
484
|
+
},
|
485
|
+
"description": "List of outputs that come out of this block"
|
463
486
|
},
|
464
487
|
"parameters_used": {
|
465
488
|
"type": "array",
|
466
489
|
"items": {
|
467
490
|
"type": "string"
|
468
|
-
}
|
491
|
+
},
|
492
|
+
"description": "The string keys of parameters which have an effect on the boundary action"
|
469
493
|
}
|
470
494
|
},
|
471
495
|
"required": [
|
@@ -1,12 +1,12 @@
|
|
1
1
|
math_spec_mapping/__init__.py,sha256=k5KVhqX1_iIkGjTBHAHezWUeh0b3ilWpJaSIVSbKMcg,907
|
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=DTrPuYbA-n27jatLt2h76WgMm7pWVgkFwC3zGDnlptQ,29208
|
4
4
|
math_spec_mapping/Classes/ActionTransmissionChannel.py,sha256=zWMo5QsgPh5WGIWXl-xOrZNMXYJXmK6Vejw1dQvi0og,246
|
5
5
|
math_spec_mapping/Classes/Block.py,sha256=hXQO221IP-TqZm_TwFKfURpEEjZm7L1TPZDCYlaOdho,17302
|
6
6
|
math_spec_mapping/Classes/BoundaryAction.py,sha256=AOENCqCEfpjotnHhzUj_F2SOP0SGpkN1tNPr8Mtl6Tc,476
|
7
7
|
math_spec_mapping/Classes/ControlAction.py,sha256=ysqpgANwdizVdwqtgZmnxXMpCqrzmVEF_6YT0M3l4Ho,526
|
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=gzTi7QSsFEWPTfHaz8YU0R7X5g4rVDFFBlKdBj4B0Pk,22244
|
10
10
|
math_spec_mapping/Classes/Mechanism.py,sha256=2sLm3wYBIeTQaMBcsJ9btqIWsbS895Ra8NY6Y9_G_Dg,379
|
11
11
|
math_spec_mapping/Classes/Metric.py,sha256=AhPgYppOP6q49xvR8S9STxQsXUKJlTWx7wI1LfZEtww,581
|
12
12
|
math_spec_mapping/Classes/Parameter.py,sha256=ZuJ_w0sChvRElJ4sOnXZ2EV4Ell2xXFulKLjVOpgz2E,1237
|
@@ -16,7 +16,7 @@ math_spec_mapping/Classes/State.py,sha256=0gJHHTNjTrz1fL2K-yPu-dJlaCsU_NMxClw6ne
|
|
16
16
|
math_spec_mapping/Classes/StateUpdateTransmissionChannel.py,sha256=3hBLvD1lE64PkwqksBXAfFWv7foOZzGQLAFQWy42tOA,257
|
17
17
|
math_spec_mapping/Classes/StatefulMetric.py,sha256=UCis1BJ7fsajHHxFF05ZiyDean2D4s4a95uYYW1Mjq4,749
|
18
18
|
math_spec_mapping/Classes/Type.py,sha256=2KFY8d3cv1PzJJ7SSMHJf1zcfQ3ZbqxotK2KgTaLZdM,289
|
19
|
-
math_spec_mapping/Classes/__init__.py,sha256=
|
19
|
+
math_spec_mapping/Classes/__init__.py,sha256=0zxgOqns_9JybD74HKMVh6aw8ij8WVbfQ4Q_1uWzof0,761
|
20
20
|
math_spec_mapping/Convenience/__init__.py,sha256=-hNZVoaNSgTmZTiyZoMfWyg14xonC3ppz-diQk1VlUY,60
|
21
21
|
math_spec_mapping/Convenience/documentation.py,sha256=Jf7-JJIk_vZkNBIGV4bs5LM3B0RVaCCtuwJ164thGfY,1607
|
22
22
|
math_spec_mapping/Convenience/starter.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -44,7 +44,7 @@ math_spec_mapping/Reports/boundary_actions.py,sha256=45BPp4QjWdD-3E9ZWwqgj_nI2-Y
|
|
44
44
|
math_spec_mapping/Reports/control_actions.py,sha256=NksekZKIPFSIkubttFstKFthc5AU9B9PWRLSl9j1wWs,1216
|
45
45
|
math_spec_mapping/Reports/general.py,sha256=WOOn6Wlb8M4fsdN49FlKLwOka6vJPQ9aCUy88TL2ki0,1610
|
46
46
|
math_spec_mapping/Reports/html.py,sha256=xf5jk3DHWg4CfZHZuF2JK5iZ515ecjDShJJsahiqb4g,8882
|
47
|
-
math_spec_mapping/Reports/markdown.py,sha256=
|
47
|
+
math_spec_mapping/Reports/markdown.py,sha256=eJidreiLmfUznoq_-C4IsFTZ__Bka-PWLKjKYn6bhmw,21113
|
48
48
|
math_spec_mapping/Reports/mechanisms.py,sha256=d2Rxt3JBYvqAOAYUynl0buYVoXEHrO8EGq7GK6hK8NA,1322
|
49
49
|
math_spec_mapping/Reports/node_map.py,sha256=FdSMDQG16NX6n9sZcH-T5xwsvgjrV9OqBHc9J_VlNK0,3129
|
50
50
|
math_spec_mapping/Reports/parameters.py,sha256=yizNG4lNGrgrlzYYcHMGfXKDFlPw4PMDYshDqZ3YARs,535
|
@@ -53,8 +53,8 @@ math_spec_mapping/Reports/spaces.py,sha256=-76hR5wQBv4lsG000ypBJ-OprjsNjI-rNRMYd
|
|
53
53
|
math_spec_mapping/Reports/state.py,sha256=RSHDjzSiUj4ZjReWbkBW7k2njs3Ovp-q0rCC7GBfD-A,2203
|
54
54
|
math_spec_mapping/Reports/tables.py,sha256=O0CNuqh3LMECq5uLjBOoxMUk5hUvkUK660FNnwWUxDY,1505
|
55
55
|
math_spec_mapping/Reports/wiring.py,sha256=u9SvKWy6T-WJUEgFI6-zgZanoOaTTs_2YwmEceDLsV8,1618
|
56
|
-
math_spec_mapping-0.2.
|
57
|
-
math_spec_mapping-0.2.
|
58
|
-
math_spec_mapping-0.2.
|
59
|
-
math_spec_mapping-0.2.
|
60
|
-
math_spec_mapping-0.2.
|
56
|
+
math_spec_mapping-0.2.8.dist-info/LICENSE,sha256=ObyEzSw8kgCaFbEfpu1zP4TrcAKLA0xhqHMZZfyh7N0,1069
|
57
|
+
math_spec_mapping-0.2.8.dist-info/METADATA,sha256=hXBDv_nbuvouVAYXB0jpyKlzNmPFI9xyMjCHn8RvtiE,6012
|
58
|
+
math_spec_mapping-0.2.8.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
59
|
+
math_spec_mapping-0.2.8.dist-info/top_level.txt,sha256=AImhn9wgazkdV0a9vfiphtQR8uGe2nq-ZIOp-6yUk9o,18
|
60
|
+
math_spec_mapping-0.2.8.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|