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,227 +1,227 @@
1
- # Copyright 2024 Volvo Car Corporation
2
- # Licensed under Apache 2.0.
3
-
4
- """Module to generate AllSystemInfo.mat for compatibility purposes with DocGen."""
5
-
6
- import os
7
- from copy import deepcopy
8
- from numpy import array
9
- from scipy.io import savemat
10
- from powertrain_build.signal_interfaces import SignalInterfaces
11
- from powertrain_build.unit_configs import UnitConfigs
12
- from powertrain_build.lib.helper_functions import merge_dicts
13
- from powertrain_build.problem_logger import ProblemLogger
14
-
15
-
16
- def _get_signals_by_type(signal_conf, signal_type):
17
- """Get signals by type ('missing', 'unused', 'inconsistent_defs' or 'multiple_defs').
18
-
19
- Args:
20
- signal_conf (dict): Configuration from SignalInterfaces with the following format
21
- {
22
- "missing": {"signal_name" : ["VED4_GENIII", "VEP4_GENIII"]}
23
- "unused": {}
24
- "multiple_defs": {}
25
- "inconsistent_defs": {}
26
- }
27
-
28
- Returns:
29
- dict: with the following format
30
- {
31
- "signal_name" : {'VarStatus' : 'Not Used', 'SignalType' : "signal_type"}
32
- }
33
-
34
- """
35
- result = {}
36
- for signal_name in signal_conf[signal_type].keys():
37
- signal = {signal_name: {'VarStatus': 'Not Used', 'SignalType': signal_type}}
38
- result.update(signal)
39
- return result
40
-
41
-
42
- class GenAllSystemInfo(ProblemLogger):
43
- """Class to generate AllSystemInfo.mat for compatibility purposes with DocGen."""
44
-
45
- _signal_types = ['missing', 'unused']
46
-
47
- def __init__(self, signal_if, unit_cfg):
48
- """Class to generate a matlab struct AllSystemInfo for compatibility with the old document generation.
49
-
50
- Args:
51
- signal_if: an initialized SignalInterfaces object to access signal configurations
52
- """
53
- if not isinstance(signal_if, SignalInterfaces):
54
- raise TypeError
55
- if not isinstance(unit_cfg, UnitConfigs):
56
- raise TypeError
57
- self.signal_if = signal_if
58
- self.unit_cfg = unit_cfg
59
- self._signals_without_source = {}
60
- self._core_ids = {}
61
- self._file_info = {}
62
- self._dids = {}
63
-
64
- def __repr__(self):
65
- """Get string representation of object."""
66
- return f'if: {self.signal_if}\n uc: {self.unit_cfg}'
67
-
68
- def build(self):
69
- """Build AllSystemInfo.mat for docgen compatibility."""
70
- self.info('******************************************************')
71
- self.info('%s - Getting signals without source', __name__)
72
- signals_tmp = self.get_signals_without_source()
73
- for signal_name, signal_data in signals_tmp.items():
74
- if '.' in signal_name:
75
- struct_name = signal_name.split('.')[0]
76
- if struct_name not in self._signals_without_source:
77
- self.info(
78
- f'{__name__} - Found struct signal: {signal_name}, adding struct name only ({struct_name}). '
79
- 'Remaining members will be ignored.'
80
- )
81
- self._signals_without_source[struct_name] = signal_data
82
- else:
83
- self._signals_without_source[signal_name] = signal_data
84
-
85
- self.info('%s - Getting CoreIDs', __name__)
86
- self._core_ids = self.get_core_ids()
87
-
88
- self.info('%s - Generating FileInfo', __name__)
89
- self._file_info = self._gen_dummy_file_info()
90
-
91
- self.info('%s - Getting DIDs', __name__)
92
- self._dids = self.get_dids()
93
-
94
- output_path = os.path.abspath(os.path.join('Models', 'CodeGenTmp'))
95
- self.info('%s - Creating CodeGenTmp directory', __name__)
96
- self.create_codegen_tmp_dir(output_path)
97
-
98
- self.info('%s - Building AllSystemInfo', __name__)
99
- self._build_all_system_info(output_path)
100
-
101
- def create_codegen_tmp_dir(self, path):
102
- """Create CodeGenTmp directory if it does not exist.
103
-
104
- Args:
105
- path (str): directory to create.
106
- """
107
- if not os.path.isdir(path):
108
- os.mkdir(path)
109
- else:
110
- self.info('%s - Directory already exist at %s', __name__, path)
111
-
112
- def _build_all_system_info(self, path):
113
- """Build AllSystemInfo.mat for DocGen compatibility.
114
-
115
- Args:
116
- path (str): directory path to place the output file.
117
- """
118
- absolute_path = os.path.abspath(os.path.join(path, 'AllSystemInfo.mat'))
119
- all_system_info = {
120
- 'SystemData': self._signals_without_source,
121
- 'CoreIDs': self._core_ids,
122
- 'FileInfo': self._file_info,
123
- 'DIDs': self._dids
124
- }
125
-
126
- all_system_info_scipy = {'AllSystemInfo': all_system_info}
127
- savemat(absolute_path, all_system_info_scipy, long_field_names=True, do_compression=True)
128
- self.info('%s - AllSystemInfo placed at %s', __name__, absolute_path)
129
-
130
- def get_core_ids(self):
131
- """Get core IDs for specified project.
132
-
133
- Returns:
134
- dict: DID as a dict with the following format
135
- {
136
- "unit name" : {}
137
- }
138
-
139
- """
140
- result = {}
141
- unit_configs = self.unit_cfg.get_per_unit_cfg()
142
- for unit, configs in unit_configs.items():
143
- result[unit] = deepcopy(configs['core'])
144
- for unit, configs in result.items():
145
- for core_id, core_id_dict in configs.items():
146
- for identifier, data_dict in core_id_dict.items():
147
- for tl_field, tl_data in data_dict.items():
148
- # Turn lists into numpy.array, required to get matlab cell arrays instead of char arrays.
149
- # char arrays make DocGen crash.
150
- if isinstance(tl_data, list):
151
- configs[core_id][identifier][tl_field] = array(tl_data, dtype=object)
152
- else:
153
- configs[core_id][identifier][tl_field] = tl_data
154
- return result
155
-
156
- def get_dids(self):
157
- """Get DIDs for specified project.
158
-
159
- Returns:
160
- dict: DID as a dict with the following format
161
- {
162
- "unit name" : {}
163
- }
164
-
165
- """
166
- result = {}
167
- unit_configs = self.unit_cfg.get_per_unit_cfg()
168
- for unit, configs in unit_configs.items():
169
- dids_list = []
170
- for signal_values in configs['dids'].values():
171
- signal_values_allsysteminfo_keys = {
172
- 'sig_name': signal_values['name'],
173
- 'sig_desc': signal_values['description'],
174
- 'blk_name': signal_values['handle'],
175
- 'data_type': signal_values['type'],
176
- 'unit': signal_values['unit'],
177
- 'lsb': signal_values['lsb'],
178
- 'offset': signal_values['offset']
179
- }
180
- dids_list.append(signal_values_allsysteminfo_keys)
181
- result.update({unit: dids_list})
182
-
183
- return result
184
-
185
- def _gen_dummy_file_info(self):
186
- """Generate dummy FileInfo struct for compatibility purposes."""
187
- result = {}
188
- for key in self._core_ids:
189
- result.update({key: ''})
190
- return result
191
-
192
- def get_signals_without_source(self):
193
- """Get missing and unused signals from project configuration.
194
-
195
- Returns:
196
- dict: result with the following format
197
- {
198
- "signal_name" : "signal_type"
199
- }
200
-
201
- """
202
- prj_conf = self.signal_if.check_config()
203
- result = self._get_external_signals(prj_conf)
204
- temp_signals = self._get_internal_signals(prj_conf)
205
- result = merge_dicts(result, temp_signals, merge_recursively=True)
206
- return result
207
-
208
- def _get_external_signals(self, prj_conf):
209
- signals_conf = prj_conf['sigs']['ext']
210
- return self._get_signals_by_types(signals_conf)
211
-
212
- def _get_internal_signals(self, prj_conf):
213
- result = {}
214
- signals_conf = prj_conf['sigs']['int']
215
- for sig_conf in signals_conf.values():
216
- temp_signals = self._get_signals_by_types(sig_conf)
217
- result = merge_dicts(result, temp_signals, merge_recursively=True)
218
- return result
219
-
220
- def _get_signals_by_types(self, signal_conf):
221
- """Get signals by multiple types and merge them into one dictionary, see _get_signals_by_type() for docs."""
222
- result = {}
223
- for signal_type in self._signal_types:
224
- temp_signals = _get_signals_by_type(signal_conf, signal_type)
225
- if temp_signals:
226
- result = merge_dicts(result, temp_signals, merge_recursively=True)
227
- return result
1
+ # Copyright 2024 Volvo Car Corporation
2
+ # Licensed under Apache 2.0.
3
+
4
+ """Module to generate AllSystemInfo.mat for compatibility purposes with DocGen."""
5
+
6
+ import os
7
+ from copy import deepcopy
8
+ from numpy import array
9
+ from scipy.io import savemat
10
+ from powertrain_build.signal_interfaces import SignalInterfaces
11
+ from powertrain_build.unit_configs import UnitConfigs
12
+ from powertrain_build.lib.helper_functions import merge_dicts
13
+ from powertrain_build.problem_logger import ProblemLogger
14
+
15
+
16
+ def _get_signals_by_type(signal_conf, signal_type):
17
+ """Get signals by type ('missing', 'unused', 'inconsistent_defs' or 'multiple_defs').
18
+
19
+ Args:
20
+ signal_conf (dict): Configuration from SignalInterfaces with the following format
21
+ {
22
+ "missing": {"signal_name" : ["VED4_GENIII", "VEP4_GENIII"]}
23
+ "unused": {}
24
+ "multiple_defs": {}
25
+ "inconsistent_defs": {}
26
+ }
27
+
28
+ Returns:
29
+ dict: with the following format
30
+ {
31
+ "signal_name" : {'VarStatus' : 'Not Used', 'SignalType' : "signal_type"}
32
+ }
33
+
34
+ """
35
+ result = {}
36
+ for signal_name in signal_conf[signal_type].keys():
37
+ signal = {signal_name: {'VarStatus': 'Not Used', 'SignalType': signal_type}}
38
+ result.update(signal)
39
+ return result
40
+
41
+
42
+ class GenAllSystemInfo(ProblemLogger):
43
+ """Class to generate AllSystemInfo.mat for compatibility purposes with DocGen."""
44
+
45
+ _signal_types = ['missing', 'unused']
46
+
47
+ def __init__(self, signal_if, unit_cfg):
48
+ """Class to generate a matlab struct AllSystemInfo for compatibility with the old document generation.
49
+
50
+ Args:
51
+ signal_if: an initialized SignalInterfaces object to access signal configurations
52
+ """
53
+ if not isinstance(signal_if, SignalInterfaces):
54
+ raise TypeError
55
+ if not isinstance(unit_cfg, UnitConfigs):
56
+ raise TypeError
57
+ self.signal_if = signal_if
58
+ self.unit_cfg = unit_cfg
59
+ self._signals_without_source = {}
60
+ self._core_ids = {}
61
+ self._file_info = {}
62
+ self._dids = {}
63
+
64
+ def __repr__(self):
65
+ """Get string representation of object."""
66
+ return f'if: {self.signal_if}\n uc: {self.unit_cfg}'
67
+
68
+ def build(self):
69
+ """Build AllSystemInfo.mat for docgen compatibility."""
70
+ self.info('******************************************************')
71
+ self.info('%s - Getting signals without source', __name__)
72
+ signals_tmp = self.get_signals_without_source()
73
+ for signal_name, signal_data in signals_tmp.items():
74
+ if '.' in signal_name:
75
+ struct_name = signal_name.split('.')[0]
76
+ if struct_name not in self._signals_without_source:
77
+ self.info(
78
+ f'{__name__} - Found struct signal: {signal_name}, adding struct name only ({struct_name}). '
79
+ 'Remaining members will be ignored.'
80
+ )
81
+ self._signals_without_source[struct_name] = signal_data
82
+ else:
83
+ self._signals_without_source[signal_name] = signal_data
84
+
85
+ self.info('%s - Getting CoreIDs', __name__)
86
+ self._core_ids = self.get_core_ids()
87
+
88
+ self.info('%s - Generating FileInfo', __name__)
89
+ self._file_info = self._gen_dummy_file_info()
90
+
91
+ self.info('%s - Getting DIDs', __name__)
92
+ self._dids = self.get_dids()
93
+
94
+ output_path = os.path.abspath(os.path.join('Models', 'CodeGenTmp'))
95
+ self.info('%s - Creating CodeGenTmp directory', __name__)
96
+ self.create_codegen_tmp_dir(output_path)
97
+
98
+ self.info('%s - Building AllSystemInfo', __name__)
99
+ self._build_all_system_info(output_path)
100
+
101
+ def create_codegen_tmp_dir(self, path):
102
+ """Create CodeGenTmp directory if it does not exist.
103
+
104
+ Args:
105
+ path (str): directory to create.
106
+ """
107
+ if not os.path.isdir(path):
108
+ os.mkdir(path)
109
+ else:
110
+ self.info('%s - Directory already exist at %s', __name__, path)
111
+
112
+ def _build_all_system_info(self, path):
113
+ """Build AllSystemInfo.mat for DocGen compatibility.
114
+
115
+ Args:
116
+ path (str): directory path to place the output file.
117
+ """
118
+ absolute_path = os.path.abspath(os.path.join(path, 'AllSystemInfo.mat'))
119
+ all_system_info = {
120
+ 'SystemData': self._signals_without_source,
121
+ 'CoreIDs': self._core_ids,
122
+ 'FileInfo': self._file_info,
123
+ 'DIDs': self._dids
124
+ }
125
+
126
+ all_system_info_scipy = {'AllSystemInfo': all_system_info}
127
+ savemat(absolute_path, all_system_info_scipy, long_field_names=True, do_compression=True)
128
+ self.info('%s - AllSystemInfo placed at %s', __name__, absolute_path)
129
+
130
+ def get_core_ids(self):
131
+ """Get core IDs for specified project.
132
+
133
+ Returns:
134
+ dict: DID as a dict with the following format
135
+ {
136
+ "unit name" : {}
137
+ }
138
+
139
+ """
140
+ result = {}
141
+ unit_configs = self.unit_cfg.get_per_unit_cfg()
142
+ for unit, configs in unit_configs.items():
143
+ result[unit] = deepcopy(configs['core'])
144
+ for unit, configs in result.items():
145
+ for core_id, core_id_dict in configs.items():
146
+ for identifier, data_dict in core_id_dict.items():
147
+ for tl_field, tl_data in data_dict.items():
148
+ # Turn lists into numpy.array, required to get matlab cell arrays instead of char arrays.
149
+ # char arrays make DocGen crash.
150
+ if isinstance(tl_data, list):
151
+ configs[core_id][identifier][tl_field] = array(tl_data, dtype=object)
152
+ else:
153
+ configs[core_id][identifier][tl_field] = tl_data
154
+ return result
155
+
156
+ def get_dids(self):
157
+ """Get DIDs for specified project.
158
+
159
+ Returns:
160
+ dict: DID as a dict with the following format
161
+ {
162
+ "unit name" : {}
163
+ }
164
+
165
+ """
166
+ result = {}
167
+ unit_configs = self.unit_cfg.get_per_unit_cfg()
168
+ for unit, configs in unit_configs.items():
169
+ dids_list = []
170
+ for signal_values in configs['dids'].values():
171
+ signal_values_allsysteminfo_keys = {
172
+ 'sig_name': signal_values['name'],
173
+ 'sig_desc': signal_values['description'],
174
+ 'blk_name': signal_values['handle'],
175
+ 'data_type': signal_values['type'],
176
+ 'unit': signal_values['unit'],
177
+ 'lsb': signal_values['lsb'],
178
+ 'offset': signal_values['offset']
179
+ }
180
+ dids_list.append(signal_values_allsysteminfo_keys)
181
+ result.update({unit: dids_list})
182
+
183
+ return result
184
+
185
+ def _gen_dummy_file_info(self):
186
+ """Generate dummy FileInfo struct for compatibility purposes."""
187
+ result = {}
188
+ for key in self._core_ids:
189
+ result.update({key: ''})
190
+ return result
191
+
192
+ def get_signals_without_source(self):
193
+ """Get missing and unused signals from project configuration.
194
+
195
+ Returns:
196
+ dict: result with the following format
197
+ {
198
+ "signal_name" : "signal_type"
199
+ }
200
+
201
+ """
202
+ prj_conf = self.signal_if.check_config()
203
+ result = self._get_external_signals(prj_conf)
204
+ temp_signals = self._get_internal_signals(prj_conf)
205
+ result = merge_dicts(result, temp_signals, merge_recursively=True)
206
+ return result
207
+
208
+ def _get_external_signals(self, prj_conf):
209
+ signals_conf = prj_conf['sigs']['ext']
210
+ return self._get_signals_by_types(signals_conf)
211
+
212
+ def _get_internal_signals(self, prj_conf):
213
+ result = {}
214
+ signals_conf = prj_conf['sigs']['int']
215
+ for sig_conf in signals_conf.values():
216
+ temp_signals = self._get_signals_by_types(sig_conf)
217
+ result = merge_dicts(result, temp_signals, merge_recursively=True)
218
+ return result
219
+
220
+ def _get_signals_by_types(self, signal_conf):
221
+ """Get signals by multiple types and merge them into one dictionary, see _get_signals_by_type() for docs."""
222
+ result = {}
223
+ for signal_type in self._signal_types:
224
+ temp_signals = _get_signals_by_type(signal_conf, signal_type)
225
+ if temp_signals:
226
+ result = merge_dicts(result, temp_signals, merge_recursively=True)
227
+ return result