1# -*- coding: utf-8 -*- 2 3from collections import OrderedDict 4from .pyutil import defaultnamedtuple 5 6dimension_codes = OrderedDict( 7 zip( 8 "length mass time current temperature amount".split(), # not considering luminous_intensity 9 "L M T I Θ N".split(), 10 ) 11) 12 13 14class DimensionalitySI( 15 defaultnamedtuple( 16 "DimensionalitySIBase", dimension_codes.keys(), (0,) * len(dimension_codes) 17 ) 18): 19 def __mul__(self, other): 20 return self.__class__(*(x + y for x, y in zip(self, other))) 21 22 def __truediv__(self, other): 23 return self.__class__(*(x - y for x, y in zip(self, other))) 24 25 def __pow__(self, exp): 26 return self.__class__(*(x * exp for x in self)) 27 28 29base_registry = {name: DimensionalitySI(**{name: 1}) for name in dimension_codes} 30