powertrain-build 1.13.1__py3-none-any.whl → 1.13.3.dev3__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.
Files changed (132) hide show
  1. powertrain_build/__init__.py +40 -40
  2. powertrain_build/__main__.py +6 -6
  3. powertrain_build/a2l.py +582 -582
  4. powertrain_build/a2l_merge.py +650 -650
  5. powertrain_build/a2l_templates.py +717 -717
  6. powertrain_build/build.py +985 -985
  7. powertrain_build/build_defs.py +309 -309
  8. powertrain_build/build_proj_config.py +690 -690
  9. powertrain_build/check_interface.py +575 -575
  10. powertrain_build/cli.py +141 -141
  11. powertrain_build/config.py +542 -542
  12. powertrain_build/core.py +395 -395
  13. powertrain_build/core_dummy.py +343 -343
  14. powertrain_build/create_conversion_table.py +73 -73
  15. powertrain_build/dids.py +916 -916
  16. powertrain_build/dummy.py +157 -157
  17. powertrain_build/dummy_spm.py +252 -252
  18. powertrain_build/environmentcheck.py +52 -52
  19. powertrain_build/ext_dbg.py +255 -255
  20. powertrain_build/ext_var.py +327 -327
  21. powertrain_build/feature_configs.py +301 -301
  22. powertrain_build/gen_allsysteminfo.py +227 -227
  23. powertrain_build/gen_label_split.py +449 -449
  24. powertrain_build/handcode_replacer.py +124 -124
  25. powertrain_build/html_report.py +133 -133
  26. powertrain_build/interface/__init__.py +4 -4
  27. powertrain_build/interface/application.py +511 -511
  28. powertrain_build/interface/base.py +500 -500
  29. powertrain_build/interface/csp_api.py +490 -490
  30. powertrain_build/interface/device_proxy.py +677 -677
  31. powertrain_build/interface/ems.py +67 -67
  32. powertrain_build/interface/export_global_vars.py +121 -121
  33. powertrain_build/interface/generate_adapters.py +132 -132
  34. powertrain_build/interface/generate_hi_interface.py +87 -87
  35. powertrain_build/interface/generate_service.py +69 -69
  36. powertrain_build/interface/generate_wrappers.py +147 -147
  37. powertrain_build/interface/generation_utils.py +142 -142
  38. powertrain_build/interface/hal.py +194 -194
  39. powertrain_build/interface/model_yaml_verification.py +348 -348
  40. powertrain_build/interface/service.py +296 -296
  41. powertrain_build/interface/simulink.py +249 -249
  42. powertrain_build/interface/update_call_sources.py +180 -180
  43. powertrain_build/interface/update_model_yaml.py +186 -186
  44. powertrain_build/interface/zone_controller.py +362 -362
  45. powertrain_build/lib/__init__.py +4 -4
  46. powertrain_build/lib/helper_functions.py +127 -127
  47. powertrain_build/lib/logger.py +55 -55
  48. powertrain_build/matlab_scripts/CodeGen/BuildAutomationPyBuild.m +78 -78
  49. powertrain_build/matlab_scripts/CodeGen/Generate_A2L.m +154 -154
  50. powertrain_build/matlab_scripts/CodeGen/generateTLUnit.m +239 -239
  51. powertrain_build/matlab_scripts/CodeGen/getAsilClassification.m +28 -28
  52. powertrain_build/matlab_scripts/CodeGen/modelConfiguredForTL.m +28 -28
  53. powertrain_build/matlab_scripts/CodeGen/moveDefOutports.m +88 -88
  54. powertrain_build/matlab_scripts/CodeGen/parseCalMeasData.m +410 -410
  55. powertrain_build/matlab_scripts/CodeGen/parseCoreIdentifiers.m +139 -139
  56. powertrain_build/matlab_scripts/CodeGen/parseDIDs.m +141 -141
  57. powertrain_build/matlab_scripts/CodeGen/parseInPorts.m +106 -106
  58. powertrain_build/matlab_scripts/CodeGen/parseIncludeConfigs.m +25 -25
  59. powertrain_build/matlab_scripts/CodeGen/parseModelInfo.m +38 -38
  60. powertrain_build/matlab_scripts/CodeGen/parseNVM.m +81 -81
  61. powertrain_build/matlab_scripts/CodeGen/parseOutPorts.m +120 -120
  62. powertrain_build/matlab_scripts/CodeGen/parsePreProcBlks.m +23 -23
  63. powertrain_build/matlab_scripts/CodeGen/struct2JSON.m +128 -128
  64. powertrain_build/matlab_scripts/CodeGen/updateCodeSwConfig.m +31 -31
  65. powertrain_build/matlab_scripts/Init_PyBuild.m +91 -91
  66. powertrain_build/matlab_scripts/__init__.py +2 -2
  67. powertrain_build/matlab_scripts/helperFunctions/Get_Full_Name.m +46 -46
  68. powertrain_build/matlab_scripts/helperFunctions/Get_SrcLines.m +12 -12
  69. powertrain_build/matlab_scripts/helperFunctions/Init_Models.m +78 -78
  70. powertrain_build/matlab_scripts/helperFunctions/Init_Projects.m +67 -67
  71. powertrain_build/matlab_scripts/helperFunctions/Read_Units.m +34 -34
  72. powertrain_build/matlab_scripts/helperFunctions/SetProjectTimeSamples.m +26 -26
  73. powertrain_build/matlab_scripts/helperFunctions/Strip_Suffix.m +16 -16
  74. powertrain_build/matlab_scripts/helperFunctions/followLink.m +118 -118
  75. powertrain_build/matlab_scripts/helperFunctions/getCodeSwitches.m +50 -50
  76. powertrain_build/matlab_scripts/helperFunctions/getConsumerBlocks.m +30 -30
  77. powertrain_build/matlab_scripts/helperFunctions/getDefBlock.m +39 -39
  78. powertrain_build/matlab_scripts/helperFunctions/getDefOutport.m +58 -58
  79. powertrain_build/matlab_scripts/helperFunctions/getDstBlocks.m +19 -19
  80. powertrain_build/matlab_scripts/helperFunctions/getDstLines.m +13 -13
  81. powertrain_build/matlab_scripts/helperFunctions/getInterfaceSignals.m +37 -37
  82. powertrain_build/matlab_scripts/helperFunctions/getName.m +37 -37
  83. powertrain_build/matlab_scripts/helperFunctions/getPath.m +6 -6
  84. powertrain_build/matlab_scripts/helperFunctions/getProperValue.m +21 -21
  85. powertrain_build/matlab_scripts/helperFunctions/getSrcBlocks.m +19 -19
  86. powertrain_build/matlab_scripts/helperFunctions/getSrcLines.m +13 -13
  87. powertrain_build/matlab_scripts/helperFunctions/loadLibraries.m +10 -10
  88. powertrain_build/matlab_scripts/helperFunctions/loadjson.m +6 -6
  89. powertrain_build/matlab_scripts/helperFunctions/modifyEnumStructField.m +21 -21
  90. powertrain_build/matlab_scripts/helperFunctions/removeConfigDuplicates.m +31 -31
  91. powertrain_build/matlab_scripts/helperFunctions/sortSystemByClass.m +26 -26
  92. powertrain_build/matlab_scripts/helperFunctions/tl_getfast.m +89 -89
  93. powertrain_build/matlab_scripts/helperFunctions/topLevelSystem.m +20 -20
  94. powertrain_build/matlab_scripts/helperFunctions/updateModels.m +131 -131
  95. powertrain_build/memory_section.py +224 -224
  96. powertrain_build/nvm_def.py +729 -729
  97. powertrain_build/problem_logger.py +86 -86
  98. powertrain_build/pt_matlab.py +430 -430
  99. powertrain_build/pt_win32.py +144 -144
  100. powertrain_build/replace_compu_tab_ref.py +105 -105
  101. powertrain_build/rte_dummy.py +254 -254
  102. powertrain_build/sched_funcs.py +209 -207
  103. powertrain_build/signal.py +7 -7
  104. powertrain_build/signal_if_html_rep.py +221 -221
  105. powertrain_build/signal_if_html_rep_all.py +302 -302
  106. powertrain_build/signal_incons_html_rep.py +180 -180
  107. powertrain_build/signal_incons_html_rep_all.py +366 -366
  108. powertrain_build/signal_incons_html_rep_base.py +168 -168
  109. powertrain_build/signal_inconsistency_check.py +641 -641
  110. powertrain_build/signal_interfaces.py +864 -864
  111. powertrain_build/templates/Index_SigCheck_All.html +22 -22
  112. powertrain_build/templates/Index_SigIf_All.html +19 -19
  113. powertrain_build/types.py +218 -218
  114. powertrain_build/unit_configs.py +419 -419
  115. powertrain_build/user_defined_types.py +660 -660
  116. powertrain_build/versioncheck.py +66 -66
  117. powertrain_build/wrapper.py +512 -512
  118. powertrain_build/xlrd_csv.py +87 -87
  119. powertrain_build/zone_controller/__init__.py +4 -4
  120. powertrain_build/zone_controller/calibration.py +176 -176
  121. powertrain_build/zone_controller/composition_yaml.py +880 -878
  122. {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/METADATA +100 -100
  123. powertrain_build-1.13.3.dev3.dist-info/RECORD +130 -0
  124. {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/WHEEL +1 -1
  125. {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/licenses/LICENSE +202 -202
  126. powertrain_build-1.13.3.dev3.dist-info/pbr.json +1 -0
  127. powertrain_build-1.13.1.dist-info/RECORD +0 -130
  128. powertrain_build-1.13.1.dist-info/pbr.json +0 -1
  129. {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/entry_points.txt +0 -0
  130. {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/licenses/AUTHORS +0 -0
  131. {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/licenses/NOTICE +0 -0
  132. {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/top_level.txt +0 -0
@@ -1,186 +1,186 @@
1
- # Copyright 2024 Volvo Car Corporation
2
- # Licensed under Apache 2.0.
3
-
4
- """Module for handling the update of model yaml files."""
5
-
6
-
7
- import argparse
8
- import sys
9
- from pathlib import Path
10
- from typing import List, Optional
11
-
12
- from ruamel.yaml import YAML
13
- from powertrain_build.interface.application import Application
14
- from powertrain_build.interface.base import BaseApplication
15
-
16
- PARSER_HELP = "Update model yaml files."
17
-
18
-
19
- class BadYamlFormat(Exception):
20
- """Exception to raise when signal is not in/out signal."""
21
- def __init__(self, signal):
22
- self.message = f"{signal} is not in-signal or out-signal."
23
-
24
-
25
- class UpdateYmlFormat(BaseApplication):
26
- """Class to handle the update of model yaml files."""
27
-
28
- def __init__(self, base_application):
29
- self.base_application = base_application
30
- self.raw = {}
31
- self.app_insignals = self.get_insignals_name()
32
- self.app_outsignals = self.get_outsignals_name()
33
-
34
- def read_translation(self, translation_file):
35
- """Read specification of the yaml file.
36
-
37
- Args:
38
- translation_file (Path): file with specs.
39
- """
40
- if not translation_file.is_file():
41
- return {}
42
- with open(translation_file, encoding="utf-8") as translation:
43
- yaml = YAML(typ='safe', pure=True)
44
- self.raw = yaml.load(translation)
45
-
46
- def parse_groups(self, signal_groups):
47
- """Parse signal groups.
48
-
49
- Args:
50
- signal_groups (dict): Hal/dp signal group in yaml file.
51
- """
52
- for interface_type, group_definitions in signal_groups.items():
53
- for group in group_definitions:
54
- for signals in group.values():
55
- self.check_signals({interface_type: signals})
56
-
57
- def parse_hal_definitions(self, hal):
58
- """Parse hal.
59
-
60
- Args:
61
- hal (dict): hal in yaml file.
62
- """
63
- self.parse_groups(hal)
64
-
65
- def parse_service_definitions(self, service):
66
- """Parse service.
67
-
68
- Args:
69
- service (dict): service in yaml file.
70
- """
71
- for interface, definition in service.items():
72
- for apis in definition['properties']:
73
- for signals in apis.values():
74
- self.check_signals({interface: signals})
75
-
76
- def check_signals(self, signals_definition):
77
- """check signal direction(in-signal or out-signal).
78
-
79
- Args:
80
- signals_definition (dict): parsed yaml file.
81
- """
82
- for specifications in signals_definition.values():
83
- for specification in specifications:
84
- in_out_signal = [key for key in specification.keys() if 'signal' in key]
85
- if in_out_signal == []:
86
- raise ValueError(f"signal is not defined for property: {specification['property']} !")
87
- if "in" in in_out_signal[0]:
88
- if specification[in_out_signal[0]] not in self.app_insignals:
89
- if specification[in_out_signal[0]] in self.app_outsignals:
90
- specification["outsignal"] = specification[in_out_signal[0]]
91
- else:
92
- raise BadYamlFormat(specification[in_out_signal[0]])
93
- if "out" in in_out_signal[0]:
94
- if specification[in_out_signal[0]] not in self.app_outsignals:
95
- if specification[in_out_signal[0]] in self.app_insignals:
96
- specification["insignal"] = specification[in_out_signal[0]]
97
- else:
98
- raise BadYamlFormat(specification[in_out_signal[0]])
99
- if in_out_signal[0] == "signal":
100
- if specification["signal"] in self.app_insignals:
101
- specification["insignal"] = specification["signal"]
102
- del specification["signal"]
103
- elif specification["signal"] in self.app_outsignals:
104
- specification["outsignal"] = specification["signal"]
105
- del specification["signal"]
106
- else:
107
- raise BadYamlFormat(specification[in_out_signal[0]])
108
-
109
- def get_insignals_name(self):
110
- """Base application in-signals.
111
- """
112
- app_insignals = []
113
- for signal in self.base_application.insignals:
114
- app_insignals.append(signal.name)
115
- return app_insignals
116
-
117
- def get_outsignals_name(self):
118
- """Base application out-signals.
119
- """
120
- app_outsignals = []
121
- for signal in self.base_application.outsignals:
122
- app_outsignals.append(signal.name)
123
- return app_outsignals
124
-
125
- def parse_definition(self, definition):
126
- """Parses all definition files
127
-
128
- Args:
129
- definition (list(Path)): Definition files
130
- """
131
- for translation in definition:
132
- self.read_translation(translation)
133
- self.check_signals(self.raw.get("signals", {}))
134
- self.parse_groups(self.raw.get("signal_groups", {}))
135
- self.parse_hal_definitions(self.raw.get("hal", {}))
136
- self.parse_service_definitions(self.raw.get("service", {}))
137
- self.write_to_file(translation)
138
-
139
- def write_to_file(self, translation):
140
- """Write in/out signals to file
141
- Args:
142
- spec (dict): Specification
143
- output (Path): File to write
144
- """
145
- with open(translation, "w", encoding="utf-8") as new_file:
146
- yaml = YAML()
147
- yaml.dump(self.raw, new_file)
148
-
149
-
150
- def get_app(config):
151
- """ Get an app specification for the current project
152
-
153
- Args:
154
- config (pathlib.Path): Path to the ProjectCfg.json.
155
- Returns:
156
- app (Application): powertrain_build project.
157
- """
158
- app = Application()
159
- app.parse_definition(config)
160
- return app
161
-
162
-
163
- def update_model_yaml_cli(args: argparse.Namespace):
164
- """CLI for update model yaml."""
165
- app = get_app(args.config)
166
- translation_files = app.get_translation_files()
167
- uymlf = UpdateYmlFormat(app)
168
- uymlf.parse_definition(translation_files)
169
-
170
-
171
- def configure_parser(parser: argparse.ArgumentParser):
172
- """Configure parser for update model yaml."""
173
- parser.add_argument("config", help="The SPA2 project config file", type=Path)
174
- parser.set_defaults(func=update_model_yaml_cli)
175
-
176
-
177
- def main(argv: Optional[List[str]] = None):
178
- """Main function for update model yaml."""
179
- parser = argparse.ArgumentParser(description=PARSER_HELP)
180
- configure_parser(parser)
181
- args = parser.parse_args(argv)
182
- return args.func(args)
183
-
184
-
185
- if __name__ == "__main__":
186
- main(sys.argv[1:])
1
+ # Copyright 2024 Volvo Car Corporation
2
+ # Licensed under Apache 2.0.
3
+
4
+ """Module for handling the update of model yaml files."""
5
+
6
+
7
+ import argparse
8
+ import sys
9
+ from pathlib import Path
10
+ from typing import List, Optional
11
+
12
+ from ruamel.yaml import YAML
13
+ from powertrain_build.interface.application import Application
14
+ from powertrain_build.interface.base import BaseApplication
15
+
16
+ PARSER_HELP = "Update model yaml files."
17
+
18
+
19
+ class BadYamlFormat(Exception):
20
+ """Exception to raise when signal is not in/out signal."""
21
+ def __init__(self, signal):
22
+ self.message = f"{signal} is not in-signal or out-signal."
23
+
24
+
25
+ class UpdateYmlFormat(BaseApplication):
26
+ """Class to handle the update of model yaml files."""
27
+
28
+ def __init__(self, base_application):
29
+ self.base_application = base_application
30
+ self.raw = {}
31
+ self.app_insignals = self.get_insignals_name()
32
+ self.app_outsignals = self.get_outsignals_name()
33
+
34
+ def read_translation(self, translation_file):
35
+ """Read specification of the yaml file.
36
+
37
+ Args:
38
+ translation_file (Path): file with specs.
39
+ """
40
+ if not translation_file.is_file():
41
+ return {}
42
+ with open(translation_file, encoding="utf-8") as translation:
43
+ yaml = YAML(typ='safe', pure=True)
44
+ self.raw = yaml.load(translation)
45
+
46
+ def parse_groups(self, signal_groups):
47
+ """Parse signal groups.
48
+
49
+ Args:
50
+ signal_groups (dict): Hal/dp signal group in yaml file.
51
+ """
52
+ for interface_type, group_definitions in signal_groups.items():
53
+ for group in group_definitions:
54
+ for signals in group.values():
55
+ self.check_signals({interface_type: signals})
56
+
57
+ def parse_hal_definitions(self, hal):
58
+ """Parse hal.
59
+
60
+ Args:
61
+ hal (dict): hal in yaml file.
62
+ """
63
+ self.parse_groups(hal)
64
+
65
+ def parse_service_definitions(self, service):
66
+ """Parse service.
67
+
68
+ Args:
69
+ service (dict): service in yaml file.
70
+ """
71
+ for interface, definition in service.items():
72
+ for apis in definition['properties']:
73
+ for signals in apis.values():
74
+ self.check_signals({interface: signals})
75
+
76
+ def check_signals(self, signals_definition):
77
+ """check signal direction(in-signal or out-signal).
78
+
79
+ Args:
80
+ signals_definition (dict): parsed yaml file.
81
+ """
82
+ for specifications in signals_definition.values():
83
+ for specification in specifications:
84
+ in_out_signal = [key for key in specification.keys() if 'signal' in key]
85
+ if in_out_signal == []:
86
+ raise ValueError(f"signal is not defined for property: {specification['property']} !")
87
+ if "in" in in_out_signal[0]:
88
+ if specification[in_out_signal[0]] not in self.app_insignals:
89
+ if specification[in_out_signal[0]] in self.app_outsignals:
90
+ specification["outsignal"] = specification[in_out_signal[0]]
91
+ else:
92
+ raise BadYamlFormat(specification[in_out_signal[0]])
93
+ if "out" in in_out_signal[0]:
94
+ if specification[in_out_signal[0]] not in self.app_outsignals:
95
+ if specification[in_out_signal[0]] in self.app_insignals:
96
+ specification["insignal"] = specification[in_out_signal[0]]
97
+ else:
98
+ raise BadYamlFormat(specification[in_out_signal[0]])
99
+ if in_out_signal[0] == "signal":
100
+ if specification["signal"] in self.app_insignals:
101
+ specification["insignal"] = specification["signal"]
102
+ del specification["signal"]
103
+ elif specification["signal"] in self.app_outsignals:
104
+ specification["outsignal"] = specification["signal"]
105
+ del specification["signal"]
106
+ else:
107
+ raise BadYamlFormat(specification[in_out_signal[0]])
108
+
109
+ def get_insignals_name(self):
110
+ """Base application in-signals.
111
+ """
112
+ app_insignals = []
113
+ for signal in self.base_application.insignals:
114
+ app_insignals.append(signal.name)
115
+ return app_insignals
116
+
117
+ def get_outsignals_name(self):
118
+ """Base application out-signals.
119
+ """
120
+ app_outsignals = []
121
+ for signal in self.base_application.outsignals:
122
+ app_outsignals.append(signal.name)
123
+ return app_outsignals
124
+
125
+ def parse_definition(self, definition):
126
+ """Parses all definition files
127
+
128
+ Args:
129
+ definition (list(Path)): Definition files
130
+ """
131
+ for translation in definition:
132
+ self.read_translation(translation)
133
+ self.check_signals(self.raw.get("signals", {}))
134
+ self.parse_groups(self.raw.get("signal_groups", {}))
135
+ self.parse_hal_definitions(self.raw.get("hal", {}))
136
+ self.parse_service_definitions(self.raw.get("service", {}))
137
+ self.write_to_file(translation)
138
+
139
+ def write_to_file(self, translation):
140
+ """Write in/out signals to file
141
+ Args:
142
+ spec (dict): Specification
143
+ output (Path): File to write
144
+ """
145
+ with open(translation, "w", encoding="utf-8") as new_file:
146
+ yaml = YAML()
147
+ yaml.dump(self.raw, new_file)
148
+
149
+
150
+ def get_app(config):
151
+ """ Get an app specification for the current project
152
+
153
+ Args:
154
+ config (pathlib.Path): Path to the ProjectCfg.json.
155
+ Returns:
156
+ app (Application): powertrain_build project.
157
+ """
158
+ app = Application()
159
+ app.parse_definition(config)
160
+ return app
161
+
162
+
163
+ def update_model_yaml_cli(args: argparse.Namespace):
164
+ """CLI for update model yaml."""
165
+ app = get_app(args.config)
166
+ translation_files = app.get_translation_files()
167
+ uymlf = UpdateYmlFormat(app)
168
+ uymlf.parse_definition(translation_files)
169
+
170
+
171
+ def configure_parser(parser: argparse.ArgumentParser):
172
+ """Configure parser for update model yaml."""
173
+ parser.add_argument("config", help="The SPA2 project config file", type=Path)
174
+ parser.set_defaults(func=update_model_yaml_cli)
175
+
176
+
177
+ def main(argv: Optional[List[str]] = None):
178
+ """Main function for update model yaml."""
179
+ parser = argparse.ArgumentParser(description=PARSER_HELP)
180
+ configure_parser(parser)
181
+ args = parser.parse_args(argv)
182
+ return args.func(args)
183
+
184
+
185
+ if __name__ == "__main__":
186
+ main(sys.argv[1:])