def convert_substance(substance, to_units, from_units=molecule): if not isinstance(substance, Quantity): if not isinstance(from_units, Quantity): from_units = substance_units[from_units] # assumes from_units is a mappable string substance = Quantity(substance, from_units) if not isinstance(to_units, Quantity): to_units = substance_units[to_units] # assumes to_units is a mappable string return substance.rescale(to_units)
def set_uncertainty(self, uncertainty): if not isinstance(uncertainty, Quantity): uncertainty = Quantity( uncertainty, self._dimensionality, copy=False) try: assert self.shape == uncertainty.shape except AssertionError: raise ValueError('data and uncertainty must have identical shape') if uncertainty._dimensionality != self._dimensionality: uncertainty = uncertainty.rescale(self._dimensionality) self._uncertainty = uncertainty
class Converter(HasTraits): data = Array _data_quantity = Instance(Quantity) display_quantity = Instance(Quantity) def _data_units_default(self): raise NotImplementedError def _display_units_default(self): raise NotImplementedError units_editor = Instance(EnumEditor) @on_trait_change('data, data_units') def update_data_quantity(self): self._data_quantity = Quantity(self.data, self.data_units_) @on_trait_change('_data_quantity, display_units') def update_display_quantity(self): self.display_quantity = self._data_quantity.rescale(self.display_units_) # @on_trait_change('display_quantity') # def print_display_quantity(self): # print self.display_quantity def traits_view(self): return View( Item('data_units', editor=self.units_editor, ), Item('display_units', editor=self.units_editor, ), )