diff --git a/Equation/equation_base.py b/Equation/equation_base.py index 3d38da5..2a45e81 100644 --- a/Equation/equation_base.py +++ b/Equation/equation_base.py @@ -72,6 +72,9 @@ def sumargs(*args): addUnaryOp('-',"-{0:s}","-{0:s}",op.neg) addFn('abs',"abs({0:s})","\\left|{0:s}\\right|",1,op.abs) addFn('sum',"sum({0:s})","\\sum\\left({0:s}\\right)",'+',sumargs) + def last_of_list(args): + return args[-1] + addFn('last',"min({0:s})","\\text{last}\\left({0:s}\\right)",'+',last_of_list) addFn('prod',"prod({0:s})","\\prod\\left({0:s}\\right)",'+',product) if has_numpy: addFn('floor',"floor({0:s})","\\lfloor {0:s} \\rfloor",1,np.floor) @@ -83,6 +86,7 @@ def sumargs(*args): addFn('re',"re({0:s})","\\Re\\left({0:s}\\right)",1,np.real) addFn('im',"re({0:s})","\\Im\\left({0:s}\\right)",1,np.imag) addFn('sqrt',"sqrt({0:s})","\\sqrt{{{0:s}}}",1,np.sqrt) + addFn('mean',"mean({0:s})","\\text{mean}\\left({0:s}\\right)",'+',np.mean) addConst("pi",np.pi) addConst("e",np.e) addConst("Inf",np.Inf) @@ -97,6 +101,9 @@ def sumargs(*args): addFn('re',"re({0:s})","\\Re\\left({0:s}\\right)",1,complex.real) addFn('im',"re({0:s})","\\Im\\left({0:s}\\right)",1,complex.imag) addFn('sqrt',"sqrt({0:s})","\\sqrt{{{0:s}}}",1,math.sqrt) + def mean(args): + return float(sum(args)) / len(args) + addFn('mean',"mean({0:s})","\\text{mean}\\left({0:s}\\right)",'+',mean) addConst("pi",math.pi) addConst("e",math.e) addConst("Inf",float("Inf")) diff --git a/tests/test_Equation.py b/tests/test_Equation.py index bbc1bff..186fed9 100755 --- a/tests/test_Equation.py +++ b/tests/test_Equation.py @@ -457,6 +457,23 @@ def testCall(self): def tearDown(self): pass +class TestLastEquation(unittest.TestCase): + def setUp(self): + self.fn = Expression("last(x)") + + def testCall(self): + self.assertEqual(self.fn([1]), 1) + self.assertEqual(self.fn([1,2,8,4,5]),5) + +class TestMeanEquation(unittest.TestCase): + def setUp(self): + self.fn = Expression("mean(x)") + + def testCall(self): + self.assertEqual(self.fn([42]), 42) + self.assertEqual(self.fn(42), 42) + self.assertEqual(self.fn([1,2,3,4,5]),3) + class TestEqualsEquation(unittest.TestCase): def setUp(self): self.fn = Expression("x == y")