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