def add_alias_field(self, alias, field, units=None, force_add=True): r""" Add a field as an alias to another field. Parameters ---------- alias : string Alias name. field : string The field to be aliased. units : optional, string Units in which the field will be returned. force_add : optional, bool If True, add field even if it already exists and warn the user and raise an exception if dependencies do not exist. If False, silently do nothing in both instances. Default: True. Examples -------- >>> import ytree >>> a = ytree.load("tree_0_0_0.dat") >>> # "Mvir" exists on disk >>> a.add_alias_field("mass", "Mvir", units="Msun") >>> print (a["mass"]) """ if alias in self.field_info: if force_add: ftype = self.field_info[alias].get("type", "on-disk") if ftype in ["alias", "derived"]: fl = self.derived_field_list else: fl = self.field_list mylog.warn( ("Overriding field \"%s\" that already " + "exists as %s field.") % (alias, ftype)) fl.pop(fl.index(alias)) else: return if field not in self.field_info: if force_add: raise ArborFieldDependencyNotFound( field, alias, arbor=self) else: return if units is None: units = self.field_info[field].get("units") self.derived_field_list.append(alias) self.field_info[alias] = \ {"type": "alias", "units": units, "dependencies": [field]} if "aliases" not in self.field_info[field]: self.field_info[field]["aliases"] = [] self.field_info[field]["aliases"].append(alias)
def add_alias_field(self, alias, field, units=None, force_add=True): """ Add an alias field. """ if alias in self: if force_add: ftype = self[alias].get("type", "on-disk") if ftype in ["alias", "derived"]: fl = self.arbor.derived_field_list else: fl = self.arbor.field_list mylog.warning(f"Overriding field \"{alias}\" that already " f"exists as {ftype} field.") fl.pop(fl.index(alias)) else: return if field not in self: if force_add: raise ArborFieldDependencyNotFound(field, alias, arbor=self) else: return if units is None: units = self[field].get("units") self.arbor.derived_field_list.append(alias) self[alias] = \ {"type": "alias", "units": units, "dependencies": [field]} if "aliases" not in self[field]: self[field]["aliases"] = [] self[field]["aliases"].append(alias)
def __missing__(self, key): if key not in self.arbor.field_info: raise ArborFieldDependencyNotFound(self.name, key, self.arbor) fi = self.arbor.field_info[key] units = fi.get("units", "") if fi.get("vector_field", False): data = np.ones((1, 3)) else: data = np.ones(1) self[key] = self.arbor.arr(data, units) return self[key]
def __missing__(self, key): if key not in self.arbor.field_info: raise ArborFieldDependencyNotFound(self.name, key, self.arbor) units = self.arbor.field_info[key].get("units", "") self[key] = self.arbor.arr(np.ones(1), units) return self[key]
def _validate_key(self, key): if key not in self.arbor.field_info: raise ArborFieldDependencyNotFound(self.name, key, self.arbor)