def _add_output(self, name): """Adds the specified output variable and its associated surrogate Slot.""" if "." not in name: # non vartree variable self.surrogates[name] = None if self.default_surrogate is not None: surrogate = deepcopy(self.default_surrogate) self._default_surrogate_copies[name] = surrogate self._add_var_for_surrogate(surrogate, name) else: self.add_trait(name, self._clone_trait(name)) else: self.surrogates[name] = None vartreename = name.split(".")[0] subvarname = name.split(".")[1] if not hasattr(self, vartreename): self.add_trait(vartreename, _clone_trait(self.model.trait(vartreename))) setattr(self, vartreename, copy(getattr(self.model, vartreename))) if self.default_surrogate is not None: surrogate = deepcopy(self.default_surrogate) self._default_surrogate_copies[name] = surrogate self._add_var_for_surrogate(surrogate, name) else: metamodel_vartree_node = self.get(vartreename) model_vartree_node = self.model.get(vartreename) metamodel_vartree_node.add_trait(subvarname, _clone_trait(model_vartree_node.trait(subvarname))) self._training_data[name] = []
def _add_input(self, name): """Adds the specified input variable.""" if "." not in name: # non vartree variable self.add_trait(name, self._clone_trait(name)) setattr(self, name, getattr(self.model, name)) else: vartreename, subvarname = name.split(".") if not hasattr(self, vartreename): self.add_trait(vartreename, _clone_trait(self.model.trait(vartreename))) setattr(self, vartreename, copy(getattr(self.model, vartreename))) metamodel_vartree_node = self.get(vartreename) model_vartree_node = self.model.get(vartreename) metamodel_vartree_node.add_trait(subvarname, _clone_trait(model_vartree_node.trait(subvarname))) metamodel_vartree_node.set(subvarname, model_vartree_node.get(subvarname))
def _clone_trait(self, name): """ Return valid new trait for model trait `name`. """ trait = self.model.trait(name) if hasattr(trait, "get"): # Property trait -- don't use normal clone. val = getattr(self.model, name) metadata = {} for attr in ("iotype", "desc", "low", "high", "exclude_low", "exclude_high", "units"): try: metadata[attr] = getattr(trait, attr) except AttributeError: pass if metadata["iotype"] == "in": metadata["default_value"] = val if isinstance(val, float): trait = Float(**metadata) else: trait = Int(**metadata) else: trait = _clone_trait(trait) return trait
def _clone_trait(self, name): """ Return valid new trait for model trait `name`. """ trait = self.model.trait(name) if hasattr(trait, 'get'): # Property trait -- don't use normal clone. val = getattr(self.model, name) metadata = {} for attr in ('iotype', 'desc', 'low', 'high', 'exclude_low', 'exclude_high', 'units'): try: metadata[attr] = getattr(trait, attr) except AttributeError: pass if metadata['iotype'] == 'in': metadata['default_value'] = val if isinstance(val, float): trait = Float(**metadata) else: trait = Int(**metadata) else: trait = _clone_trait(trait) return trait