Source code for ada.utils.config_file_generation
import json
import itertools
import copy
import collections
[docs]class Iter:
def __init__(self, *params):
if len(params) == 1:
self.iterable = params[0]
else:
self.iterable = params
[docs]class ConfigVariants:
def __init__(self):
self._variant_by_names = dict()
self._num_duplicated_by_base_names = collections.Counter()
[docs] def add(self, name, **params):
keys, values = zip(
*sorted(
(k, v.iterable if isinstance(v, Iter) else [v])
for k, v in params.items()
)
)
all_values = list(itertools.product(*values))
if len(all_values) == 0:
raise ValueError("Encountered an empty range")
for values in all_values:
variant_params = dict(zip(keys, values))
variant_name = name.format(**variant_params)
num = self._num_duplicated_by_base_names[variant_name]
self._num_duplicated_by_base_names[variant_name] += 1
if num > 0:
if num == 1:
self._variant_by_names[
f"{variant_name}#0"
] = self._variant_by_names[variant_name]
del self._variant_by_names[variant_name]
variant_name += f"#{num}"
self._variant_by_names[variant_name] = variant_params
return self
[docs] def to_dict(self):
return copy.deepcopy(self._variant_by_names)
[docs] def save(self, filename):
with open(filename, "w") as f_out:
json.dump(self._variant_by_names, f_out, indent=4, sort_keys=True)