67 lines
1.8 KiB
Python
Executable file
67 lines
1.8 KiB
Python
Executable file
# Dictionary containing numbers
|
|
#
|
|
# These objects are meant to be used like arrays with generalized
|
|
# indices. Non-existent elements default to zero. Global operations
|
|
# are addition, subtraction, and multiplication/division by a scalar.
|
|
#
|
|
# Written by Konrad Hinsen <hinsen@cnrs-orleans.fr>
|
|
# last revision: 2006-10-16
|
|
#
|
|
|
|
"""
|
|
Dictionary storing numerical values
|
|
"""
|
|
|
|
class NumberDict(dict):
|
|
|
|
"""
|
|
Dictionary storing numerical values
|
|
|
|
Constructor: NumberDict()
|
|
|
|
An instance of this class acts like an array of number with
|
|
generalized (non-integer) indices. A value of zero is assumed
|
|
for undefined entries. NumberDict instances support addition,
|
|
and subtraction with other NumberDict instances, and multiplication
|
|
and division by scalars.
|
|
"""
|
|
|
|
def __getitem__(self, item):
|
|
try:
|
|
return dict.__getitem__(self, item)
|
|
except KeyError:
|
|
return 0
|
|
|
|
def __coerce__(self, other):
|
|
if type(other) == type({}):
|
|
other = NumberDict(other)
|
|
return self, other
|
|
|
|
def __add__(self, other):
|
|
sum_dict = NumberDict()
|
|
for key in self.keys():
|
|
sum_dict[key] = self[key]
|
|
for key in other.keys():
|
|
sum_dict[key] = sum_dict[key] + other[key]
|
|
return sum_dict
|
|
|
|
def __sub__(self, other):
|
|
sum_dict = NumberDict()
|
|
for key in self.keys():
|
|
sum_dict[key] = self[key]
|
|
for key in other.keys():
|
|
sum_dict[key] = sum_dict[key] - other[key]
|
|
return sum_dict
|
|
|
|
def __mul__(self, other):
|
|
new = NumberDict()
|
|
for key in self.keys():
|
|
new[key] = other*self[key]
|
|
return new
|
|
__rmul__ = __mul__
|
|
|
|
def __div__(self, other):
|
|
new = NumberDict()
|
|
for key in self.keys():
|
|
new[key] = self[key]/other
|
|
return new
|