def _name2abs_name(self, name): """ Map the given promoted or relative name to the absolute name. This is only valid when the name is unique; otherwise, a KeyError is thrown. Parameters ---------- name : str Promoted or relative variable name in the owning system's namespace. Returns ------- str or None Absolute variable name if unique abs_name found or None otherwise. """ system = self._system() # try relative name first abs_name = '.'.join( (system.pathname, name)) if system.pathname else name if abs_name in self._names: return abs_name abs_name = prom_name2abs_name(system, name, self._typ) if abs_name in self._names: return abs_name
def __call__(self, design_vars, model=None): """ Generate case. Parameters ---------- design_vars : OrderedDict Dictionary of design variables for which to generate values. model : Group The model containing the design variables. Yields ------ list list of name, value tuples for the design variables. """ for case in self._data: if not isinstance(case, list): msg = "Invalid DOE case found, expecting a list of name/value pairs:\n%s" raise RuntimeError(msg % str(case)) name_map = {} for tup in case: if type(tup) not in (tuple, list) or len(tup) != 2: msg = "Invalid DOE case found, expecting a list of name/value pairs:\n%s" raise RuntimeError(msg % str(case)) name = tup[0] if name in design_vars: name_map[name] = name elif model: abs_name = prom_name2abs_name(model, name, 'output') if abs_name in design_vars: name_map[name] = abs_name # any names not found in name_map are invalid design vars invalid_desvars = [ name for name, _ in case if name not in name_map ] if invalid_desvars: if len(invalid_desvars) > 1: msg = "Invalid DOE case found, %s are not valid design variables:\n%s" raise RuntimeError(msg % (str(invalid_desvars), str(case))) else: msg = "Invalid DOE case found, '%s' is not a valid design variable:\n%s" raise RuntimeError(msg % (str(invalid_desvars[0]), str(case))) yield [(name_map[name], val) for name, val in case]
def __call__(self, design_vars, model=None): """ Generate case. Parameters ---------- design_vars : dict Dictionary of design variables for which to generate values. model : Group The model containing the design variables. Yields ------ list list of name, value tuples for the design variables. """ name_map = {} with open(self._filename, 'r') as f: # map header names to absolute names if necessary names = re.sub(' ', '', f.readline()).strip().split(',') for name in names: if name in design_vars: name_map[name] = name elif model: abs_name = prom_name2abs_name(model, name, 'output') if abs_name in design_vars: name_map[name] = abs_name # any names not found in name_map are invalid design vars invalid_desvars = [ name for name in names if name_map.get(name) is None ] if invalid_desvars: if len(invalid_desvars) > 1: msg = "Invalid DOE case file, %s are not valid design variables." raise RuntimeError(msg % str(invalid_desvars)) else: msg = "Invalid DOE case file, '%s' is not a valid design variable." raise RuntimeError(msg % str(invalid_desvars[0])) # read cases from file, parse values into numpy arrays with open(self._filename, 'r') as f: reader = csv.DictReader(f) for row in reader: case = [(name_map[name.strip()], np.fromstring(re.sub(r'[\[\]]', '', row[name]), sep=' ')) for name in reader.fieldnames] yield case
def __call__(self, design_vars, model=None): """ Generate case. Parameters ---------- design_vars : dict Dictionary of design variables for which to generate values. model : Group The model containing the design variables. Yields ------ list list of name, value tuples for the design variables. """ for case in self._data: if not isinstance(case, list): msg = "Invalid DOE case found, expecting a list of name/value pairs:\n%s" raise RuntimeError(msg % str(case)) name_map = {} for tup in case: if type(tup) not in (tuple, list, set) or len(tup) != 2: msg = "Invalid DOE case found, expecting a list of name/value pairs:\n%s" raise RuntimeError(msg % str(case)) name = tup[0] if name in design_vars: name_map[name] = name elif model: abs_name = prom_name2abs_name(model, name, 'output') if abs_name in design_vars: name_map[name] = abs_name # any names not found in name_map are invalid design vars invalid_desvars = [name for name, val in case if name_map.get(name) is None] if invalid_desvars: if len(invalid_desvars) > 1: msg = "Invalid DOE case found, %s are not valid design variables:\n%s" raise RuntimeError(msg % (str(invalid_desvars), str(case))) else: msg = "Invalid DOE case found, '%s' is not a valid design variable:\n%s" raise RuntimeError(msg % (str(invalid_desvars[0]), str(case))) yield [(name_map[name], val) for name, val in case]
def __call__(self, design_vars, model=None): """ Generate case. Parameters ---------- design_vars : dict Dictionary of design variables for which to generate values. model : Group The model containing the design variables. Yields ------ list list of name, value tuples for the design variables. """ name_map = {} with open(self._filename, 'r') as f: # map header names to absolute names if necessary names = re.sub(' ', '', f.readline()).strip().split(',') for name in names: if name in design_vars: name_map[name] = name elif model: abs_name = prom_name2abs_name(model, name, 'output') if abs_name in design_vars: name_map[name] = abs_name # any names not found in name_map are invalid design vars invalid_desvars = [name for name in names if name_map.get(name) is None] if invalid_desvars: if len(invalid_desvars) > 1: msg = "Invalid DOE case file, %s are not valid design variables." raise RuntimeError(msg % str(invalid_desvars)) else: msg = "Invalid DOE case file, '%s' is not a valid design variable." raise RuntimeError(msg % str(invalid_desvars[0])) # read cases from file, parse values into numpy arrays with open(self._filename, 'r') as f: reader = csv.DictReader(f) for row in reader: case = [(name_map[name.strip()], np.fromstring(re.sub('[\[\]]', '', row[name]), sep=' ')) for name in reader.fieldnames] yield case