def register(self, obj, label, group=None): """ Register label with object (possibly disamgiguating) :param obj: The object to label :param label: The desired label :param group: (optional) use the registry for group (default=type(obj)) :rtype: str *Returns* The disambiguated label """ group = group or type(obj) reg = self._registry[group] has_obj = obj in reg has_label = label in reg.values() label_is_obj = has_label and has_obj and reg[obj] == label if has_label and (not label_is_obj): values = set(reg.values()) if has_obj: values.remove(reg[obj]) if not self._disable: label = disambiguate(label, values) reg[obj] = label return label
def merge(self, *data, **kwargs): """ Merge two or more datasets into a single dataset. This has the following effects: All components from all datasets are added to the first argument All datasets except the first argument are removed from the collection Any component name conflicts are disambiguated The pixel and world components apart from the first argument are discarded :note: All arguments must have the same shape :param data: One or more :class:`~glue.core.data.Data` instances. :returns: self """ if len(data) < 2: raise ValueError("merge requires 2 or more arguments") shp = data[0].shape for d in data: if d.shape != shp: raise ValueError("All arguments must have the same shape") label = kwargs.get('label', data[0].label) master = Data(label=label) self.append(master) master.coords = data[0].coords for d in data: skip = d.pixel_component_ids + d.world_component_ids for c in d.components: if c in skip: continue if c in master.components: # already present (via a link) continue taken = [_.label for _ in master.components] lbl = c.label # Special-case 'PRIMARY', rename to data label if lbl == 'PRIMARY': lbl = d.label # First-pass disambiguation, try component_data if lbl in taken: lbl = '%s_%s' % (lbl, d.label) lbl = disambiguate(lbl, taken) c._label = lbl master.add_component(d.get_component(c), c) self.remove(d) return self
def merge(self, *data, **kwargs): """ Merge two or more datasets into a single dataset. This has the following effects: All components from all datasets are added to the first argument All datasets except the first argument are removed from the collection Any component name conflicts are disambiguated The pixel and world components apart from the first argument are discarded :note: All arguments must have the same shape :param data: One or more :class:`~glue.core.data.Data` instances. :returns: self """ if len(data) < 2: raise ValueError("merge requires 2 or more arguments") shp = data[0].shape for d in data: if d.shape != shp: raise ValueError("All arguments must have the same shape") label = kwargs.get('label', data[0].label) master = Data(label=label) self.append(master) for d in data: skip = d.pixel_component_ids + d.world_component_ids for c in d.components: if c in skip: continue if c in master.components: # already present (via a link) continue taken = [_.label for _ in master.components] lbl = c.label # Special-case 'PRIMARY', rename to data label if lbl == 'PRIMARY': lbl = d.label # First-pass disambiguation, try component_data if lbl in taken: lbl = '%s_%s' % (lbl, d.label) lbl = disambiguate(lbl, taken) c._label = lbl master.add_component(d.get_component(c), c) self.remove(d) return self