Skip to content

Commit e0b8ea1

Browse files
Merge pull request aerospaceresearch#220 from aerospaceresearch/dev
Final PR for Google Summer of Code 2019
2 parents a3d6dfd + d7d3e32 commit e0b8ea1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+4875
-1362
lines changed

main.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ class VisMa_Prompt(Cmd):
3636
prompt = '>>> '
3737
intro = "Welcome! This is Visual Maths Interactive Shell...\n" + "type 'help' for a User Manual and Ctrl + D to Exit prompt\n"
3838

39-
@classmethod
4039
def do_exit(self, inp):
4140
'''Exits VisMa Prompt'''
4241
print("Exiting VisMa...")
@@ -51,14 +50,12 @@ def do_manual(self, inp):
5150
'''Displays a list of commands that can be used'''
5251
print(self.userManual)
5352

54-
@classmethod
5553
def do_gui(self, inp):
5654
'''Starts GUI of VisMa'''
5755
initGUI()
5856
print("Initiating GUI...")
5957
logger.info("Initiating GUI...")
6058

61-
@classmethod
6259
def default(self, inp):
6360
'''Directs to CommandExec and performs operations thereafter'''
6461
try:

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
setuptools.setup(
77
name="VISualMAth",
88
description="visma - VISual MAth : A math equation solver and visualizer",
9-
version="0.2.2",
9+
version="0.2.3",
1010
author="Siddharth Kothiyal, Shantanu Mishra",
1111
1212
long_description=long_description,

tests/test_calculus.py

Lines changed: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from visma.calculus.differentiation import differentiate
1+
from visma.calculus.differentiation import differentiate, differentiationProductRule
22
from visma.calculus.integration import integrate
33
from tests.tester import quickTest
44

@@ -9,29 +9,71 @@
99

1010
def test_differentiate():
1111

12-
assert quickTest("x^2 + x", differentiate, 'x') == "2.0x+1"
12+
assert quickTest("x^2 + x", differentiate, 'x') == "2.0x+1.0"
1313

14-
assert quickTest("x + 2y + 3z + 4", differentiate, 'x') == "1"
15-
# FIXME(tokensToString error): assert quickTest("x + 2y + 3z + 4", differentiate, 'y') == "2"
16-
# FIXME(tokensToString error): assert quickTest("x + 2y + 3z + 4", differentiate, 'z') == "3"
14+
assert quickTest("x + 2y + 3z + 4", differentiate, 'x') == "1.0"
15+
assert quickTest("x + 2y + 3z + 4", differentiate, 'y') == "2.0"
16+
assert quickTest("x + 2y + 3z + 4", differentiate, 'z') == "3.0"
1717

1818
assert quickTest("xy + xy^2 + xyz", differentiate, 'x') == "y+y^(2.0)+yz"
1919
assert quickTest("xy + xy^2 + xyz", differentiate, 'y') == "x+2.0xy+xz"
20-
assert quickTest("xy + xy^2 + xyz", differentiate, 'z') == "+xy" # FIXME: Remove unnecessary sign '+'
20+
assert quickTest("xy + xy^2 + xyz", differentiate, 'z') == "xy"
21+
22+
assert quickTest("xy + z", differentiate, 'z') == "1.0"
23+
assert quickTest("z + xy", differentiate, 'z') == "1.0"
24+
assert quickTest("z - xy", differentiate, 'z') == "1.0"
25+
assert quickTest("xy - z", differentiate, 'z') == "-1.0"
26+
27+
assert quickTest("sin(x)", differentiate, 'x') == "cos(x)*1.0"
28+
assert quickTest("sin(x)", differentiate, 'y') == "0.0"
29+
assert quickTest("sin(xxx)", differentiate, 'x') == "cos(x^(3.0))*3.0x^(2.0)"
30+
assert quickTest("sin(log(xx))", differentiate, 'x') == "cos(log(x^(2.0)))*x^(-1.0)*2.0x"
31+
32+
assert quickTest("cos(x)", differentiate, 'x') == "-1.0*sin(x)*1.0"
33+
assert quickTest("cos(x)", differentiate, 'y') == "0.0"
34+
assert quickTest("cos(xxx)", differentiate, 'x') == "-1.0*sin(x^(3.0))*3.0x^(2.0)"
35+
assert quickTest("cos(log(xx))", differentiate, 'x') == "-1.0*sin(log(x^(2.0)))*x^(-1.0)*2.0x"
36+
37+
assert quickTest("tan(x)", differentiate, 'x') == "sec(x)*1.0"
38+
# FIXME: Simplify module simplifies sec^2(x) as sec(x) and cosec^2(x) as cosec(x), however differentiation modules give correct output
39+
assert quickTest("tan(x)", differentiate, 'y') == "0.0"
40+
41+
assert quickTest("cot(x)", differentiate, 'x') == "-1.0*csc(x)*1.0"
42+
# FIXME: Simplify module simplifies sec^2(x) as sec(x) and cosec^2(x) as cosec(x), however differentiation modules give correct output
43+
assert quickTest("cot(x)", differentiate, 'y') == "0.0"
44+
45+
assert quickTest("csc(x)", differentiate, 'x') == "-1.0*csc(x)*cot(x)*1.0"
46+
assert quickTest("csc(x)", differentiate, 'y') == "0.0"
47+
48+
assert quickTest("sec(x)", differentiate, 'x') == "sec(x)*tan(x)*1.0"
49+
assert quickTest("sec(x)", differentiate, 'y') == "0.0"
50+
51+
assert quickTest("log(x)", differentiate, 'x') == "x^(-1.0)"
52+
assert quickTest("log(xx)", differentiate, 'x') == "2.0"
53+
54+
# Tests for Product Rule of Differentiation.
55+
assert quickTest("sin(x)*cos(x)", differentiationProductRule, 'x') == "(cos(x)*1.0)*cos(x)+sin(x)*(-1.0*sin(x)*1.0)"
56+
assert quickTest("sin(x)*x", differentiationProductRule, 'x') == "(cos(x)*1.0)*x+sin(x)*(1.0)"
57+
assert quickTest("sin(x)*y", differentiationProductRule, 'x') == "(cos(x)*1.0)*y+sin(x)*(0.0)"
58+
assert quickTest("sin(x)*cos(x)*sec(x)", differentiationProductRule, 'x') == "(cos(x)*1.0)*cos(x)*sec(x)+sin(x)*(-1.0*sin(x)*1.0)*sec(x)+sin(x)*cos(x)*(sec(x)*tan(x)*1.0)"
59+
2160

22-
assert quickTest("xy + z", differentiate, 'z') == "1"
23-
assert quickTest("z + xy", differentiate, 'z') == "1"
24-
assert quickTest("z - xy", differentiate, 'z') == "1"
25-
assert quickTest("xy - z", differentiate, 'z') == "-1"
2661
########################
2762
# calculus.integration #
2863
########################
2964

3065

3166
def test_integrate():
3267

33-
assert quickTest("x + 1", integrate, 'x') == "0.5x^(2)+x"
68+
assert quickTest("x + 1", integrate, 'x') == "0.5x^(2.0)+x"
69+
70+
assert quickTest("xyz + xy/z + x + 1 + 1/x", integrate, 'x') == "0.5x^(2.0)yz+0.5x^(2.0)yz^(-1.0)+0.5x^(2.0)+x+1.0*log(x)" # FIXME(integration.py): Ignore coeff if 1
71+
assert quickTest("xyz + xy/z + x + 1 + 1/x", integrate, 'y') == "0.5xy^(2.0)z+0.5xy^(2.0)z^(-1.0)+xy+y+x^(-1.0)y"
72+
assert quickTest("xyz + xy/z + x + 1 + 1/x", integrate, 'z') == "0.5xyz^(2.0)+xy*log(z)+xz+z+x^(-1.0)z"
3473

35-
assert quickTest("xyz + xy/z + x + 1 + 1/x", integrate, 'x') == "0.5x^(2)yz+0.5x^(2)yz^(-1)+0.5x^(2)+x+1.0*log(x)" # FIXME(integration.py): Ignore coeff if 1
36-
assert quickTest("xyz + xy/z + x + 1 + 1/x", integrate, 'y') == "0.5xy^(2)z+0.5xy^(2)z^(-1)+xy+y+x^(-1)y"
37-
assert quickTest("xyz + xy/z + x + 1 + 1/x", integrate, 'z') == "0.5xyz^(2)+xy*log(z)+xz+z+x^(-1)z"
74+
assert quickTest("sin(x)", integrate, 'x') == "-1.0*cos(x)"
75+
assert quickTest("cos(x)", integrate, 'x') == "sin(x)"
76+
assert quickTest("tan(x)", integrate, 'x') == "-1.0*ln(cos(x))"
77+
assert quickTest("csc(x)", integrate, 'x') == "-1.0*ln((csc(x)+cot(x)))"
78+
assert quickTest("sec(x)", integrate, 'x') == "ln((sec(x)+tan(x)))"
79+
assert quickTest("cot(x)", integrate, 'x') == "ln(sin(x))"

tests/test_discrete.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from tests.tester import quickTest
2+
from visma.discreteMaths.combinatorics import factorial, permutation, combination
3+
from visma.discreteMaths.statistics import ArithemeticMean, Mode, Median
4+
5+
6+
def test_factorial():
7+
8+
assert quickTest("5", factorial) == "120.0"
9+
assert quickTest("0", factorial) == "1"
10+
assert quickTest("11", factorial) == "39916800.0"
11+
assert quickTest("11 - 11", factorial) == "1"
12+
13+
14+
def test_permutation():
15+
16+
assert quickTest("5;2", permutation) == "20.0"
17+
assert quickTest("12;3", permutation) == "1320.0"
18+
assert quickTest("10 + 2;5 - 2", permutation) == "1320.0"
19+
assert quickTest("11;11", permutation) == "39916800.0"
20+
21+
22+
def test_combination():
23+
24+
assert quickTest("5;2", combination) == "10.0"
25+
assert quickTest("2;2", permutation) == "2.0"
26+
assert quickTest("11;0", permutation) == "1.0"
27+
assert quickTest("11;11 - 11", permutation) == "1.0"
28+
29+
30+
def test_statistics():
31+
32+
assert quickTest([12, 1, -12, -1, 0], ArithemeticMean) == "0.0"
33+
assert quickTest([11, 1, -2, -1, 0], ArithemeticMean) == "1.8"
34+
35+
assert quickTest([12, 12, 12, 12, 1, -12, -1, 0], Mode) == "Mode=12;ModeFrequency=4"
36+
assert quickTest([-1, -1, 2, 3, 4, 5, 6], Mode) == "Mode=-1;ModeFrequency=2"
37+
38+
assert quickTest([1, 2, 3, 4, 5], Median) == "3"
39+
assert quickTest([1, 2, 3, 4, 5, 12], Median) == "3.5"

0 commit comments

Comments
 (0)