Пример #1
0
	def __setattr__(self, name: str, val: Any) -> None:
		if name.startswith("!"):
			super(GlobalAttributeManager, self).__setattr__(name[1:], val)
		elif "/" in name:
			raise KeyError("Attribute name cannot contain slash (/)")
		else:
			if self.f is not None:
				if loompy.compare_loom_spec_version(self.f, "3.0.0") < 0 and "attrs" not in self.f["/"]:
					normalized = loompy.normalize_attr_values(val, False)
					self.f.attrs[name] = normalized
					self.f.flush()
					val = self.f.attrs[name]
					# Read it back in to ensure it's synced and normalized
					normalized = loompy.materialize_attr_values(val)
					self.__dict__["storage"][name] = normalized
				else:
					normalized = loompy.normalize_attr_values(val, True)
					if name in self.f["attrs"]:
						del self.f["attrs"][name]
					if not np.isscalar(normalized) and normalized.dtype == np.object_:
						self.ds._file.create_dataset("attrs/" + name, data=normalized, dtype=h5py.special_dtype(vlen=str))
					else:
						self.f["attrs"][name] = normalized
					self.f.flush()
					val = self.f["attrs"][name][()]
					# Read it back in to ensure it's synced and normalized
					normalized = loompy.materialize_attr_values(val)
					self.__dict__["storage"][name] = normalized
Пример #2
0
	def __delattr__(self, name: str) -> None:
		if name.startswith("!"):
			super(GlobalAttributeManager, self).__delattr__(name[1:])
		else:
			if self.f is not None:
				if loompy.compare_loom_spec_version(self.f, "3.0.0") < 0:
					if name in self.f.attrs:
						del self.f.attrs[name]
				else:
					if name in self.f["attrs"]:
						del self.f["attrs"][name]
			del self.__dict__["storage"][name]
Пример #3
0
	def __getattr__(self, name: str) -> np.ndarray:
		try:
			return self.__dict__["storage"][name]
		except KeyError:
			if self.f is not None:
				if loompy.compare_loom_spec_version(self.f, "3.0.0") < 0:
					if name in self.f.attrs:
						val = self.f.attrs[name]
					else:
						raise AttributeError(f"File has no global attribute '{name}'")
				else:
					if name in self.f["attrs"]:
						val = self.f["attrs"][name]
					else:
						raise AttributeError(f"File has no global attribute '{name}'")
				materialized = loompy.materialize_attr_values(val)
				self.__dict__["storage"][name] = materialized
				return materialized