Esempio n. 1
0
 def __mul__(self, unit):
     """
     SiPrefix * BaseUnit yields new BaseUnit
     SiPrefix * ScaledUnit yields new ScaledUnit
     SiPrefix * Unit with exactly one BaseUnit or ScaledUnit yields new Unit
     """
     if isinstance(unit, BaseUnit):
         # BaseUnit version
         symbol = self.symbol + unit.symbol
         name = self.prefix + unit.name
         factor = self.factor
         # TODO - check for existing BaseUnit with same name, symbol, and factor
         new_base_unit = BaseUnit(unit.dimension, name, symbol)
         new_base_unit.define_conversion_factor_to(unit, factor)
         return new_base_unit
     elif isinstance(unit, ScaledUnit):
         # ScaledUnit version
         symbol = self.symbol + unit.symbol
         name = self.prefix + unit.name
         factor = self.factor * unit.factor
         # TODO - check for existing BaseUnit with same name, symbol, and factor
         return ScaledUnit(factor, unit.master, name, symbol)
     elif isinstance(unit, Unit):
         base_units = list(unit.iter_base_or_scaled_units())
         if 1 != len(base_units):
             raise TypeError('Unit prefix "%s" can only be with simple Units containing one component.' % self.prefix)
         if 1 != base_units[0][1]:
             raise TypeError('Unit prefix "%s" can only be with simple Units with an exponent of 1.' % self.prefix)
         base_unit = base_units[0][0]
         # Delegate to Base or Scaled Unit multiply
         new_base_unit = self * base_unit
         new_unit = Unit({new_base_unit: 1.0})
         return new_unit
     else:
         raise TypeError('Unit prefix "%s" can only be applied to a Unit, BaseUnit, or ScaledUnit.' % self.prefix)
Esempio n. 2
0
 def __mul__(self, unit):
     """
     SiPrefix * BaseUnit yields new BaseUnit
     SiPrefix * ScaledUnit yields new ScaledUnit
     SiPrefix * Unit with exactly one BaseUnit or ScaledUnit yields new Unit
     """
     if isinstance(unit, BaseUnit):
         # BaseUnit version
         symbol = self.symbol + unit.symbol
         name = self.prefix + unit.name
         factor = self.factor
         # TODO - check for existing BaseUnit with same name, symbol, and factor
         new_base_unit = BaseUnit(unit.dimension, name, symbol)
         new_base_unit.define_conversion_factor_to(unit, factor)
         return new_base_unit
     elif isinstance(unit, ScaledUnit):
         # ScaledUnit version
         symbol = self.symbol + unit.symbol
         name = self.prefix + unit.name
         factor = self.factor * unit.factor
         # TODO - check for existing BaseUnit with same name, symbol, and factor
         return ScaledUnit(factor, unit.master, name, symbol)
     elif isinstance(unit, Unit):
         base_units = list(unit.iter_base_or_scaled_units())
         if 1 != len(base_units):
             raise TypeError('Unit prefix "%s" can only be with simple Units containing one component.' % self.prefix)
         if 1 != base_units[0][1]:
             raise TypeError('Unit prefix "%s" can only be with simple Units with an exponent of 1.' % self.prefix)
         base_unit = base_units[0][0]
         # Delegate to Base or Scaled Unit multiply
         new_base_unit = self * base_unit
         new_unit = Unit({new_base_unit: 1.0})
         return new_unit
     else:
         raise TypeError('Unit prefix "%s" can only be applied to a Unit, BaseUnit, or ScaledUnit.' % self.prefix)
Esempio n. 3
0
 def create_unit(self, scale, name, symbol):
     """
     Convenience method for creating a new simple unit from another simple unit.
     Both units must consist of a single BaseUnit.
     """
     # TODO - also handle non-simple units, i.e. units with multiple BaseUnits/ScaledUnits
     assert len(self._top_base_units) == 1
     assert len(self._scaled_units) == 0
     dimension = self._top_base_units.iterkeys().next()
     base_unit_dict = self._top_base_units[dimension]
     assert len(base_unit_dict) == 1
     parent_base_unit = base_unit_dict.iterkeys().next()
     parent_exponent = base_unit_dict[parent_base_unit]
     new_base_unit = BaseUnit(parent_base_unit.dimension, name, symbol)
     # BaseUnit scale might be different depending on exponent
     true_scale = scale
     if parent_exponent != 1.0:
         true_scale = math.pow(scale, 1.0/parent_exponent)
     new_base_unit.define_conversion_factor_to(parent_base_unit, true_scale)
     new_unit = Unit({new_base_unit: 1.0})
     return new_unit
Esempio n. 4
0
#####################
### DIMENSIONLESS ###
#####################

# dimensionless = Unit({}); # defined in unit.py

##############
### LENGTH ###
##############

meter_base_unit = BaseUnit(length_dimension, "meter", "m")
meters = meter = Unit({meter_base_unit: 1.0})
define_prefixed_units(meter_base_unit, module=sys.modules[__name__])

angstrom_base_unit = BaseUnit(length_dimension, "angstrom", "A")
angstrom_base_unit.define_conversion_factor_to(meter_base_unit, 1e-10)
angstroms = angstrom = Unit({angstrom_base_unit: 1.0})

planck_length_base_unit = BaseUnit(length_dimension, "Planck length", "l_P")
planck_length_base_unit.define_conversion_factor_to(meter_base_unit,
                                                    1.61625281e-35)

inch_base_unit = BaseUnit(length_dimension, "inch", "in")
inch_base_unit.define_conversion_factor_to(centimeter_base_unit, 2.5400)
inch = inches = Unit({inch_base_unit: 1.0})

foot_base_unit = BaseUnit(length_dimension, "foot", "ft")
foot_base_unit.define_conversion_factor_to(inch_base_unit, 12.0)
foot = feet = Unit({foot_base_unit: 1.0})

yard_base_unit = BaseUnit(length_dimension, "yard", "yd")
Esempio n. 5
0
#####################
### DIMENSIONLESS ###
#####################

# dimensionless = Unit({}); # defined in unit.py

##############
### LENGTH ###
##############

meter_base_unit = BaseUnit(length_dimension, "meter", "m")
meters = meter = Unit({meter_base_unit: 1.0})
define_prefixed_units(meter_base_unit, module = sys.modules[__name__])

angstrom_base_unit = BaseUnit(length_dimension, "angstrom", "A")
angstrom_base_unit.define_conversion_factor_to(meter_base_unit, 1e-10)
angstroms = angstrom = Unit({angstrom_base_unit: 1.0})

planck_length_base_unit = BaseUnit(length_dimension, "Planck length", "l_P")
planck_length_base_unit.define_conversion_factor_to(meter_base_unit, 1.61625281e-35)

inch_base_unit = BaseUnit(length_dimension, "inch", "in")
inch_base_unit.define_conversion_factor_to(centimeter_base_unit, 2.5400)
inch = inches = Unit({inch_base_unit: 1.0})

foot_base_unit = BaseUnit(length_dimension, "foot", "ft")
foot_base_unit.define_conversion_factor_to(inch_base_unit, 12.0)
foot = feet = Unit({foot_base_unit: 1.0})

yard_base_unit = BaseUnit(length_dimension, "yard", "yd")
yard_base_unit.define_conversion_factor_to(foot_base_unit, 3.0)