diff --git a/MooreScripts/python/MooreScripts/testbench/architecture.py b/MooreScripts/python/MooreScripts/testbench/architecture.py index 6e9adc735630ee6de96c0bf71ab270a4150903cb..22a725e4f73caa89ed47d1e07e43093104fb1652 100644 --- a/MooreScripts/python/MooreScripts/testbench/architecture.py +++ b/MooreScripts/python/MooreScripts/testbench/architecture.py @@ -12,6 +12,7 @@ import os import platform import xml.etree.ElementTree as ET from string import Template +from typing import Any def node_name(): @@ -92,3 +93,27 @@ def instance_args(tasks, replacements): "INSTANCE": instance, })) return result + + +def overwrite_dict_value(data: Any, mapping: dict) -> Any: + """Recursively loop through data and overwrite item's value with corresponding mapping's value. + + Args: + data (Any): Iterable input datra + mapping (dict): Key value pairs to overwrite. + + Returns: + Any: Overwritten data. + """ + if isinstance(data, dict): + return { + k: mapping[k] if k in mapping.keys() else overwrite_dict_value( + v, mapping) + for k, v in data.items() + } + elif isinstance(data, list): + return [overwrite_dict_value(item, mapping) for item in data] + elif isinstance(data, tuple): + return (overwrite_dict_value(item, mapping) for item in data) + else: + return data diff --git a/MooreScripts/scripts/testbench.py b/MooreScripts/scripts/testbench.py index 550d6c4e1af74988c14064e828aecf4d4fde6056..f16ee43c9373dbe5988a8475d344f43bcfe25653 100755 --- a/MooreScripts/scripts/testbench.py +++ b/MooreScripts/scripts/testbench.py @@ -117,6 +117,12 @@ parser.add_argument( type=int, help="Number of files to download from the TestFileDB entry", ) +parser.add_argument( + "--write-encoding-keys", + action="store_true", + help= + "Enables writing of the encoding keys by setting env WRITE_ENCODING_KEYS=1.", +) args, unknown_argv = parser.parse_known_args() args.data_dir = args.working_dir / args.data_dir @@ -151,6 +157,9 @@ replacements = { } arch = architecture.read_xml(args.architecture) +if args.write_encoding_keys: + arch = architecture.overwrite_dict_value(arch, + {"WRITE_ENCODING_KEYS": "1"}) task_instance_args = architecture.instance_args(arch, replacements) emulator.check_for_orphans([a["args"][0] for a in task_instance_args])