math-spec-mapping 0.2.7__py3-none-any.whl → 0.2.8__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/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
|