powertrain-build 1.1.2.dev6__tar.gz → 1.1.3.dev2__tar.gz
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.
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/ChangeLog +14 -7
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/PKG-INFO +2 -2
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/README.md +1 -1
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/build.py +2 -3
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/build_proj_config.py +19 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/zone_controller.py +0 -1
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/user_defined_types.py +81 -40
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/zone_controller/composition_yaml.py +10 -2
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build.egg-info/PKG-INFO +2 -2
- powertrain_build-1.1.3.dev2/powertrain_build.egg-info/pbr.json +1 -0
- powertrain_build-1.1.2.dev6/powertrain_build.egg-info/pbr.json +0 -1
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/AUTHORS +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/LICENSE +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/MANIFEST.in +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/NOTICE +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/__init__.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/__main__.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/a2l.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/a2l_merge.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/a2l_templates.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/build_defs.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/check_interface.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/cli.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/config.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/core.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/core_dummy.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/create_conversion_table.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/dids.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/dummy.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/dummy_spm.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/environmentcheck.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/ext_dbg.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/ext_var.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/feature_configs.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/gen_allsysteminfo.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/gen_label_split.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/handcode_replacer.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/html_report.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/__init__.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/application.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/base.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/csp_api.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/device_proxy.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/ems.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/export_global_vars.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/generate_adapters.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/generate_hi_interface.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/generate_service.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/generate_wrappers.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/generation_utils.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/hal.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/model_yaml_verification.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/service.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/simulink.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/update_call_sources.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/update_model_yaml.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/lib/__init__.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/lib/helper_functions.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/lib/logger.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/BuildAutomationPyBuild.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/Generate_A2L.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/generateTLUnit.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/getAsilClassification.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/modelConfiguredForTL.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/moveDefOutports.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/parseCalMeasData.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/parseCoreIdentifiers.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/parseDIDs.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/parseInPorts.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/parseIncludeConfigs.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/parseModelInfo.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/parseNVM.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/parseOutPorts.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/parsePreProcBlks.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/struct2JSON.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/CodeGen/updateCodeSwConfig.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/Init_PyBuild.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/__init__.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/Get_Full_Name.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/Get_SrcLines.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/Init_Models.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/Init_Projects.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/Read_Units.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/SetProjectTimeSamples.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/Strip_Suffix.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/followLink.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/getCodeSwitches.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/getConsumerBlocks.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/getDefBlock.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/getDefOutport.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/getDstBlocks.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/getDstLines.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/getInterfaceSignals.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/getName.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/getPath.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/getProperValue.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/getSrcBlocks.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/getSrcLines.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/loadLibraries.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/loadjson.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/modifyEnumStructField.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/removeConfigDuplicates.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/sortSystemByClass.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/tl_getfast.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/topLevelSystem.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/matlab_scripts/helperFunctions/updateModels.m +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/memory_section.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/nvm_def.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/problem_logger.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/pt_matlab.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/pt_win32.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/replace_compu_tab_ref.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/sched_funcs.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/signal.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/signal_if_html_rep.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/signal_if_html_rep_all.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/signal_incons_html_rep.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/signal_incons_html_rep_all.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/signal_incons_html_rep_base.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/signal_inconsistency_check.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/signal_interfaces.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/templates/Index_SigCheck_All.html +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/templates/Index_SigIf_All.html +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/types.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/unit_configs.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/versioncheck.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/wrapper.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/xlrd_csv.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/zone_controller/__init__.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/zone_controller/calibration.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build.egg-info/SOURCES.txt +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build.egg-info/dependency_links.txt +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build.egg-info/entry_points.txt +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build.egg-info/not-zip-safe +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build.egg-info/requires.txt +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build.egg-info/top_level.txt +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/requirements.txt +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/setup.cfg +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/setup.py +0 -0
- {powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/test-requirements.txt +0 -0
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
CHANGES
|
|
2
2
|
=======
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*
|
|
8
|
-
* Dummy 1
|
|
4
|
+
1.1.3.dev2
|
|
5
|
+
----------
|
|
6
|
+
|
|
7
|
+
* Enable enums in interface for zone controller
|
|
9
8
|
* Fixes in interface/zone\_controller.py
|
|
10
9
|
|
|
11
10
|
1.1.1
|
|
@@ -47,15 +46,19 @@ CHANGES
|
|
|
47
46
|
-----
|
|
48
47
|
|
|
49
48
|
* Missed to update use of get function
|
|
49
|
+
* Measure code coverage in tox tests
|
|
50
|
+
* Add option for supplying custom step function name
|
|
50
51
|
|
|
51
52
|
1.0.3
|
|
52
53
|
-----
|
|
53
54
|
|
|
54
|
-
* Measure code coverage in tox tests
|
|
55
|
-
* Add option for supplying custom step function name
|
|
56
55
|
* Aggregate project settings for ARXML specifications in ProjectCfg
|
|
57
56
|
* CRLF -> LF
|
|
58
57
|
* Update NOTICE file
|
|
58
|
+
|
|
59
|
+
1.0.2.dev99
|
|
60
|
+
-----------
|
|
61
|
+
|
|
59
62
|
* Improve TargetLink documentation
|
|
60
63
|
* Add option for supplying custom init function name
|
|
61
64
|
* Add docs about TargetLink
|
|
@@ -78,6 +81,10 @@ CHANGES
|
|
|
78
81
|
|
|
79
82
|
* Make composition\_yaml read diagnostics key instead
|
|
80
83
|
* Devs asked for missing ZC dids to be erroneous
|
|
84
|
+
|
|
85
|
+
0.1.1
|
|
86
|
+
-----
|
|
87
|
+
|
|
81
88
|
* Refactor usage of ecu\_supplier
|
|
82
89
|
* Make powertrain-build not overlap with pybuild in site-packages
|
|
83
90
|
* Bug fix - always set zc\_dids in compisition\_yaml
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: powertrain-build
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.3.dev2
|
|
4
4
|
Summary: A Continuous Integration (CI) build system testing all configurations where a Simulink model is used.
|
|
5
5
|
Home-page: https://opendev.org/volvocars/powertrain-build
|
|
6
6
|
Download-URL: https://pypi.org/project/powertrain-build/
|
|
@@ -39,7 +39,7 @@ Requires-Dist: scipy==1.14.1; python_version >= "3.11"
|
|
|
39
39
|
Requires-Dist: importlib-resources==5.4.0; python_version < "3.9"
|
|
40
40
|
Requires-Dist: pywin32==305; python_version == "3.6" and sys_platform == "win32"
|
|
41
41
|
|
|
42
|
-
#
|
|
42
|
+
# powertrain-build
|
|
43
43
|
|
|
44
44
|
A Continuous Integration (CI) build system, testing all configurations where a TargetLink model is used.
|
|
45
45
|
|
|
@@ -903,9 +903,8 @@ def build(
|
|
|
903
903
|
project_nvm_defintions = unit_cfg.get_per_cfg_unit_cfg().get("nvm", {})
|
|
904
904
|
zc_nvm = ZCNVMDef(build_cfg, unit_cfg, project_nvm_defintions)
|
|
905
905
|
axis_data = merged_a2l.get_characteristic_axis_data()
|
|
906
|
-
composition_yaml = CompositionYaml(
|
|
907
|
-
|
|
908
|
-
)
|
|
906
|
+
composition_yaml = CompositionYaml(build_cfg, signal_if.composition_spec, unit_cfg, zc_core,
|
|
907
|
+
zc_dids, zc_nvm, axis_data, udt.get_enumerations())
|
|
909
908
|
LOG.info("******************************************************")
|
|
910
909
|
composition_yaml.generate_yaml()
|
|
911
910
|
LOG.info("******************************************************")
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/build_proj_config.py
RENAMED
|
@@ -677,6 +677,25 @@ class BuildProjConfig:
|
|
|
677
677
|
)
|
|
678
678
|
return None
|
|
679
679
|
|
|
680
|
+
def include_all_enums(self):
|
|
681
|
+
"""Return True if all enums encountered in the enum definition files should be included in the generated code,
|
|
682
|
+
even if they are not used in any models. Requires the ProjectInfo.enumDefDir key to be present in the project config.
|
|
683
|
+
|
|
684
|
+
Returns:
|
|
685
|
+
bool: True if all enumerations should be generated by source code, False otherwise.
|
|
686
|
+
"""
|
|
687
|
+
if not self.get_enum_def_dir():
|
|
688
|
+
return False
|
|
689
|
+
return self._prj_cfg['ProjectInfo'].get('includeAllEnums', False)
|
|
690
|
+
|
|
691
|
+
def map_to_rte_enums(self):
|
|
692
|
+
"""Return True/False whether external RTE headers should be included in ext vars. Default is false.
|
|
693
|
+
|
|
694
|
+
Returns:
|
|
695
|
+
(bool): True/False whether external RTE headers should be included in ext vars
|
|
696
|
+
"""
|
|
697
|
+
return self._prj_cfg['CodeGenerationConfig'].get('mapEnumsToRteCounterpart', False)
|
|
698
|
+
|
|
680
699
|
|
|
681
700
|
if __name__ == '__main__':
|
|
682
701
|
# Function for testing the module
|
|
@@ -189,7 +189,6 @@ class ZCAL(BaseApplication):
|
|
|
189
189
|
raise BadYamlFormat(f"in/out signal for element in { element_name } is missing.")
|
|
190
190
|
if direction != temp_dir:
|
|
191
191
|
raise BadYamlFormat(f"Signal { element_name } has both in and out elements.")
|
|
192
|
-
direction = temp_dir
|
|
193
192
|
if element.get("updateBit", False):
|
|
194
193
|
update_elements.add(element_name)
|
|
195
194
|
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/user_defined_types.py
RENAMED
|
@@ -52,6 +52,7 @@ class UserDefinedTypes(ProblemLogger):
|
|
|
52
52
|
self._build_prj_cfg = build_prj_config
|
|
53
53
|
self._unit_configs = unit_configs
|
|
54
54
|
self.enums_per_unit = {}
|
|
55
|
+
self.common_enums = self._read_enums_from_definitions()
|
|
55
56
|
self.structs_per_unit = {}
|
|
56
57
|
self._parse_all_user_defined_types()
|
|
57
58
|
self.common_header_files = []
|
|
@@ -304,14 +305,19 @@ class UserDefinedTypes(ProblemLogger):
|
|
|
304
305
|
enum_members_tmp = re.findall(r'\s*(\w+) = ([-+]?\d+)', enum_content, flags=re.M)
|
|
305
306
|
enum_members = [(k, int(v)) for k, v in enum_members_tmp]
|
|
306
307
|
underlying_data_type = self._calculate_underlying_data_type(unit, enum_name, enum_members)
|
|
308
|
+
default = self.get_default_enum_value(unit, enum_name)
|
|
307
309
|
enum_dict = {
|
|
308
310
|
'underlying_data_type': underlying_data_type,
|
|
309
311
|
'members': {},
|
|
310
312
|
'default_value': self.get_default_enum_value(unit, enum_name)
|
|
311
313
|
}
|
|
314
|
+
|
|
312
315
|
for key, value in enum_members:
|
|
313
316
|
enum_dict['members'][key] = value
|
|
314
317
|
|
|
318
|
+
if default is None:
|
|
319
|
+
print(enum_dict)
|
|
320
|
+
|
|
315
321
|
if enum_name in self.enums_per_unit[unit]:
|
|
316
322
|
is_consistent_enums = self._compare_enum_definitions(
|
|
317
323
|
[unit],
|
|
@@ -369,47 +375,58 @@ class UserDefinedTypes(ProblemLogger):
|
|
|
369
375
|
|
|
370
376
|
return underlying_data_type
|
|
371
377
|
|
|
372
|
-
def
|
|
373
|
-
"""
|
|
374
|
-
|
|
375
|
-
Requires "enumDefDir" in the ProjectCfg.json file.
|
|
378
|
+
def _read_enums_from_definitions(self):
|
|
379
|
+
""" Reads all enums from .m files where they are defined. Requires projectInfo.enumDefDir in
|
|
380
|
+
ProjectCfg.json file.
|
|
376
381
|
Files defining simulink class enumerations are expected to follow a template.
|
|
377
382
|
|
|
378
|
-
TODO: Remove this function when there is a default enum value in every config_*.json file.
|
|
379
|
-
|
|
380
|
-
Args:
|
|
381
|
-
enum_name (str): Name of an enumeration.
|
|
382
|
-
Returns:
|
|
383
|
-
default_value_str (str): Default value (string) for the given enumeration name.
|
|
384
|
-
None if value could not be extracted.
|
|
385
383
|
"""
|
|
384
|
+
common_enums = {}
|
|
386
385
|
if self._build_prj_cfg.get_enum_def_dir() is None:
|
|
387
386
|
self.warning(
|
|
388
387
|
'Cannot extract default enumeration value for %s. Missing "enumDefDir" in ProjectCfg.json.',
|
|
389
|
-
enum_name
|
|
390
388
|
)
|
|
391
389
|
return None
|
|
392
390
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
391
|
+
enum_files = Path(self._build_prj_cfg.get_enum_def_dir()).rglob('*.m')
|
|
392
|
+
for enum_file in enum_files:
|
|
393
|
+
with enum_file.open(mode='r', encoding='ISO-8859-1') as fh:
|
|
394
|
+
enum_file_content = fh.read()
|
|
395
|
+
|
|
396
|
+
enum_name = enum_file.stem
|
|
397
|
+
members_part = re.search(
|
|
398
|
+
r'\s+enumeration\n'
|
|
399
|
+
r'(\s*\w+\(\d+\)\n)+'
|
|
400
|
+
r'\s+end',
|
|
401
|
+
enum_file_content,
|
|
402
|
+
flags=re.MULTILINE
|
|
403
|
+
)
|
|
404
|
+
if not members_part:
|
|
405
|
+
self.warning('Cannot extract enumeration members from %s', str(enum_file))
|
|
406
|
+
continue
|
|
407
|
+
members = re.findall(r'(\w+)\((\d+)\)', members_part.group(0))
|
|
408
|
+
member_dict = {enum_name + '_' + member[0]: int(member[1]) for member in members}
|
|
409
|
+
get_default_value = re.search(
|
|
410
|
+
r'function ([A-Za-z0-9]+) = getDefaultValue\(\)[\s\n]*'
|
|
411
|
+
r'\1 = [A-Za-z0-9]+\.([A-Za-z0-9]+);[\s\n]*'
|
|
412
|
+
r'end',
|
|
413
|
+
enum_file_content,
|
|
414
|
+
flags=re.MULTILINE
|
|
415
|
+
)
|
|
416
|
+
if get_default_value is None:
|
|
417
|
+
self.warning('Cannot extract default enumeration values in: %s', str(enum_file))
|
|
418
|
+
return None
|
|
419
|
+
_unused, default_value = get_default_value.groups()
|
|
420
|
+
default_member = f'{enum_name.upper()}_{default_value.upper()}'
|
|
421
|
+
enum_members = [(member_name, member_value) for member_name, member_value in member_dict.items()]
|
|
422
|
+
underlying_data_type = self._calculate_underlying_data_type('target_link', enum_name, enum_members)
|
|
423
|
+
common_enums[enum_name] = {
|
|
424
|
+
"underlying_data_type": underlying_data_type,
|
|
425
|
+
"default": default_member,
|
|
426
|
+
"members": member_dict
|
|
427
|
+
}
|
|
428
|
+
return common_enums
|
|
410
429
|
|
|
411
|
-
_unused, default_value = get_default_value.groups()
|
|
412
|
-
return f'{enum_name.upper()}_{default_value.upper()}'
|
|
413
430
|
|
|
414
431
|
def get_default_enum_value(self, unit, enum_name):
|
|
415
432
|
"""Get default value of given enumeration name by searching in the unit configuration.
|
|
@@ -446,7 +463,7 @@ class UserDefinedTypes(ProblemLogger):
|
|
|
446
463
|
enum_name,
|
|
447
464
|
unit
|
|
448
465
|
)
|
|
449
|
-
return self.
|
|
466
|
+
return self.common_enums.get(enum_name, {}).get('default', None)
|
|
450
467
|
|
|
451
468
|
def get_enumerations(self):
|
|
452
469
|
"""Get all enumeration defined in the project, together with unit usage.
|
|
@@ -464,6 +481,12 @@ class UserDefinedTypes(ProblemLogger):
|
|
|
464
481
|
else:
|
|
465
482
|
enumerations[enum_name] = deepcopy(enum_data)
|
|
466
483
|
enumerations[enum_name]['units'] = [unit]
|
|
484
|
+
if self._build_prj_cfg.include_all_enums():
|
|
485
|
+
for enum_name, enum_data in self.common_enums.items():
|
|
486
|
+
if enum_name not in enumerations:
|
|
487
|
+
self.warning("Enumeration %s is not used in any unit. Generated anyway since 'includeAllEnums' is True", enum_name)
|
|
488
|
+
enumerations[enum_name] = deepcopy(enum_data)
|
|
489
|
+
enumerations[enum_name]['units'] = []
|
|
467
490
|
return enumerations
|
|
468
491
|
|
|
469
492
|
def get_interface_data_types(self):
|
|
@@ -529,18 +552,36 @@ class UserDefinedTypes(ProblemLogger):
|
|
|
529
552
|
file_path (Path): Path to file to generate.
|
|
530
553
|
"""
|
|
531
554
|
enumerations = self.get_enumerations()
|
|
555
|
+
rte_interface_enums = self._build_prj_cfg.map_to_rte_enums()
|
|
532
556
|
guard = f"{file_path.stem.upper()}_H"
|
|
533
557
|
with file_path.open('w') as fh:
|
|
534
558
|
fh.write(self._get_header_file_header(guard))
|
|
535
|
-
|
|
559
|
+
if rte_interface_enums:
|
|
560
|
+
composition_name = self._build_prj_cfg.get_composition_config("softwareComponentName")
|
|
561
|
+
fh.write(f'#include "Rte_{ composition_name }_Type.h"\n')
|
|
562
|
+
fh.write('/* VCC Enumerations */\n\n')
|
|
536
563
|
for enum_name, enum_data in enumerations.items():
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
564
|
+
members = enum_data['members']
|
|
565
|
+
member_strs = ',\n'.join([f" {member.upper()} = {value}" for member, value in members.items()])
|
|
566
|
+
enum_definition = (
|
|
567
|
+
f'typedef enum {enum_name}_tag {{\n'
|
|
568
|
+
f'{member_strs}'
|
|
569
|
+
'\n'
|
|
570
|
+
f'}} {enum_name};\n'
|
|
571
|
+
)
|
|
572
|
+
if rte_interface_enums:
|
|
573
|
+
enum = self.common_enums[enum_name]
|
|
574
|
+
enum_member_0 = [member for member, value in enum["members"].items() if value == 0][0]
|
|
575
|
+
rte_translation = '\n'.join(f"#define {member.upper()} {member}" for member in enum["members"].keys())
|
|
576
|
+
compile_time_guard = f""
|
|
577
|
+
enum_definition = (
|
|
578
|
+
f'#ifndef {enum_member_0}\n'
|
|
579
|
+
f'{enum_definition}\n'
|
|
580
|
+
f'#else\n'
|
|
581
|
+
f'{rte_translation}\n'
|
|
582
|
+
f'#endif /* {enum_member_0} */\n'
|
|
583
|
+
)
|
|
584
|
+
fh.write(enum_definition + '\n')
|
|
544
585
|
fh.write(f'#endif /* {guard} */\n')
|
|
545
586
|
|
|
546
587
|
def generate_common_header_files(self):
|
|
@@ -15,7 +15,7 @@ from powertrain_build.zone_controller.calibration import ZoneControllerCalibrati
|
|
|
15
15
|
class CompositionYaml(ProblemLogger):
|
|
16
16
|
"""Class for handling ZoneController composition yaml generation."""
|
|
17
17
|
|
|
18
|
-
def __init__(self, build_cfg, composition_spec, unit_cfg, zc_core, zc_dids, zc_nvm, a2l_axis_data):
|
|
18
|
+
def __init__(self, build_cfg, composition_spec, unit_cfg, zc_core, zc_dids, zc_nvm, a2l_axis_data, enums):
|
|
19
19
|
"""Init.
|
|
20
20
|
|
|
21
21
|
Args:
|
|
@@ -44,6 +44,7 @@ class CompositionYaml(ProblemLogger):
|
|
|
44
44
|
self.zc_core = zc_core
|
|
45
45
|
self.zc_dids = zc_dids
|
|
46
46
|
self.zc_nvm = zc_nvm
|
|
47
|
+
self.enums = enums
|
|
47
48
|
self.a2l_axis_data = a2l_axis_data
|
|
48
49
|
base_data_types = self.get_base_data_types() # Might not be necessary in the long run
|
|
49
50
|
self.data_types = {
|
|
@@ -188,6 +189,10 @@ class CompositionYaml(ProblemLogger):
|
|
|
188
189
|
re.compile(r"^\s*CVC_CAL[A-Z_]*\s+\w+\s+(?P<name>\w+)\[(?P<rows>[\d]+)\]\[(?P<cols>[\d]+)\]\s*=\s*"),
|
|
189
190
|
self._get_matrix_init_values,
|
|
190
191
|
),
|
|
192
|
+
(
|
|
193
|
+
re.compile(r"^\s*CVC_CAL[A-Z_]*\s+\w+\s+(?P<name>\w+)\s*=\s*(?P<enum>[a-zA-Z_$][\w_]*?)*;"),
|
|
194
|
+
lambda regex_match, _: regex_match.group("enum"),
|
|
195
|
+
),
|
|
191
196
|
]
|
|
192
197
|
|
|
193
198
|
init_values = {}
|
|
@@ -591,10 +596,13 @@ class CompositionYaml(ProblemLogger):
|
|
|
591
596
|
data_types (dict): Dictionary with data types.
|
|
592
597
|
signal_name (string): Name of signal to process.
|
|
593
598
|
info (dict): signal data.
|
|
594
|
-
Returns
|
|
599
|
+
Returns::wq
|
|
600
|
+
|
|
595
601
|
class_info (dict): Updated dictionary with variables.
|
|
596
602
|
data_types (dict): Updated dictionary with data types.
|
|
597
603
|
"""
|
|
604
|
+
if info["type"] in self.enums:
|
|
605
|
+
return class_info, data_types
|
|
598
606
|
if "Bool" in info["type"]:
|
|
599
607
|
upper = 1
|
|
600
608
|
lower = 0
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: powertrain-build
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.3.dev2
|
|
4
4
|
Summary: A Continuous Integration (CI) build system testing all configurations where a Simulink model is used.
|
|
5
5
|
Home-page: https://opendev.org/volvocars/powertrain-build
|
|
6
6
|
Download-URL: https://pypi.org/project/powertrain-build/
|
|
@@ -39,7 +39,7 @@ Requires-Dist: scipy==1.14.1; python_version >= "3.11"
|
|
|
39
39
|
Requires-Dist: importlib-resources==5.4.0; python_version < "3.9"
|
|
40
40
|
Requires-Dist: pywin32==305; python_version == "3.6" and sys_platform == "win32"
|
|
41
41
|
|
|
42
|
-
#
|
|
42
|
+
# powertrain-build
|
|
43
43
|
|
|
44
44
|
A Continuous Integration (CI) build system, testing all configurations where a TargetLink model is used.
|
|
45
45
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"git_version": "afdb37d", "is_release": true}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"git_version": "e46c51e", "is_release": false}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/a2l_templates.py
RENAMED
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/check_interface.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/environmentcheck.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/feature_configs.py
RENAMED
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/gen_allsysteminfo.py
RENAMED
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/gen_label_split.py
RENAMED
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/handcode_replacer.py
RENAMED
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/base.py
RENAMED
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/csp_api.py
RENAMED
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/ems.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/hal.py
RENAMED
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/service.py
RENAMED
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/interface/simulink.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/lib/__init__.py
RENAMED
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/lib/helper_functions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/memory_section.py
RENAMED
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/problem_logger.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/signal_if_html_rep.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/signal_interfaces.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/unit_configs.py
RENAMED
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build/versioncheck.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build.egg-info/not-zip-safe
RENAMED
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build.egg-info/requires.txt
RENAMED
|
File without changes
|
{powertrain_build-1.1.2.dev6 → powertrain_build-1.1.3.dev2}/powertrain_build.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|