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)
Exemple #2
0
 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,
            ),
        )