blob: 04ea34fac0005b87910914ba18c40940727d0424 [file] [log] [blame]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copyright (C) 2017-2020 The Project X-Ray Authors.
#
# Use of this source code is governed by a ISC-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/ISC
#
# SPDX-License-Identifier: ISC
""" Math models are used to represent abstract operations for the timing models.
This is useful for creating excel workbooks that can update dynamically, or
generating a model with symbolic constants to be backsolved.
"""
class ExcelMathModel(object):
""" Math model used for outputting to an dyanmic Excel sheet. """
def __init__(self):
pass
def sum(self, elems):
sum_val = '(' + ' + '.join(elems) + ')'
if sum_val == '()':
return '0'
else:
return sum_val
def product(self, elems):
sum_val = '(' + ' * '.join(elems) + ')'
if sum_val == '()':
return '1'
else:
return sum_val
def plus(self, a, b):
return self.sum((a, b))
def divide(self, a, b):
return '({}/{})'.format(a, b)
def multiply(self, a, b):
return '({}*{})'.format(a, b)
def eval(self, elem):
return '=' + elem
def PythonMathModel(object):
""" Math model used for outputting values equalated immediately. """
def __init__(self):
pass
def sum(self, elems):
return sum(elems)
def product(self, elems):
v = 1.0
for elem in elems:
v *= elem
return v
def divide(self, a, b):
return a / b
def plus(self, a, b):
return a + b
def multiply(self, a, b):
return a * b
def eval(self, elem):
return elem