Source code for trixi.util.gridsearch

import json
from trixi.util import ModuleMultiTypeDecoder


[docs]class GridSearch(dict):
[docs] def all_combinations(self): if len(self) == 0: return [] combinations = [] zero_key = sorted(self.keys())[0] inner_dict = self.copy() del inner_dict[zero_key] for val in self[zero_key]: if len(inner_dict) == 0: combinations.append({zero_key: val}) else: for combination in GridSearch(inner_dict): combination[zero_key] = val combinations.append(combination) return combinations
def __iter__(self): self._counter = 0 self._all_combinations = self.all_combinations() self._max = len(self._all_combinations) return self def __next__(self): if self._counter >= self._max: raise StopIteration self._counter += 1 return self._all_combinations[self._counter - 1]
[docs] def read(self, file_, raise_=True, decoder_cls_=ModuleMultiTypeDecoder, **kwargs): try: if hasattr(file_, "read"): new_dict = json.load(file_, cls=decoder_cls_, **kwargs) else: with open(file_, "r") as file_object: new_dict = json.load(file_object, cls=decoder_cls_, **kwargs) except Exception as e: if raise_: raise e self.update(new_dict) return self