UNPKG

3.65 kBtext/coffeescriptView Raw
1test_inner = ->
2 run_test [
3
4 # since we don't know anything about
5 # a and b, we have to leave this unevaluated
6 # turning this into a normal multiplication (which is
7 # commutative) would not be OK
8 "inner(a,b)",
9 "inner(a,b)",
10
11 # this shouldn't ever go wrong
12 # but one never knows
13 "inner(b,a)",
14 "inner(b,a)",
15
16 "inner(2,a)",
17 "2*a",
18
19 "inner(a,2)",
20 "2*a",
21
22 "inner(a,[b1,b2])",
23 "inner(a,[b1,b2])",
24
25 "inner([a1,a2],b)",
26 "inner([a1,a2],b)",
27
28 "inner(2,[b1,b2])",
29 "[2*b1,2*b2]",
30
31 "inner([b1,b2],2)",
32 "[2*b1,2*b2]",
33
34 "inner([[a11,a12],[a21,a22]],[x1,x2])",
35 "[a11*x1+a12*x2,a21*x1+a22*x2]",
36
37 "inner([1,2],[3,4])",
38 "11",
39
40 # non-invertible matrix
41 "inner([[2,2],[2,2]],[[0],[1]])",
42 "[[2],[2]]",
43
44 "inner(inner([1,2],[[3,4],[5,6]]),[7,8])",
45 "219",
46
47 "inner([1,2],inner([[3,4],[5,6]],[7,8]))",
48 "219",
49
50 "inner([1,2],[[3,4],[5,6]],[7,8])",
51 "219",
52
53 "inner(c,a1+b1)",
54 "inner(c,a1)+inner(c,b1)",
55
56 "inner(b1+c1,a)",
57 "inner(b1,a)+inner(c1,a)",
58
59 "inner(inner(a,b),c)",
60 "inner(a,inner(b,c))",
61
62 "inner(inner(a,b),c) - inner(a,inner(b,c))",
63 "0",
64
65 "inner(inner(a,b),c,d) - inner(a,b,inner(c,d))",
66 "0",
67
68 # trying some associativity and distributivity together
69 "inner(inner(a,b),c,d+f) - ( (inner(a,inner(b,c),d)) + inner(inner(a,b),c,f) )",
70 "0",
71
72 # bring it to a canonical form
73 # using associativity
74 "inner(a,b,c)",
75 "inner(a,inner(b,c))",
76
77 "inner(a,b+c,d)",
78 "inner(a,inner(b,d))+inner(a,inner(c,d))",
79
80 "inner(inner(a,b),inner(c,d))",
81 "inner(a,inner(b,inner(c,d)))",
82
83 # scalar product of vectors:
84 "inner([a, b, c], [x, y, z])",
85 "a*x+b*y+c*z",
86
87 # products of matrices and vectors:
88 "inner([[a, b], [c,d]], [x, y])",
89 "[a*x+b*y,c*x+d*y]",
90
91 "inner([x, y], [[a, b], [c,d]])",
92 "[a*x+c*y,b*x+d*y]",
93
94 "inner([x, y], [[a, b], [c,d]], [r, s])",
95 "a*r*x+b*s*x+c*r*y+d*s*y",
96
97 # matrix product:
98
99 "inner([[a,b],[c,d]],[[r,s],[t,u]])",
100 "[[a*r+b*t,a*s+b*u],[c*r+d*t,c*s+d*u]]",
101
102 # ---------------------------------------
103 # using the dot
104 # ---------------------------------------
105
106 "a·b",
107 "inner(a,b)",
108
109 "a·b·c",
110 "inner(a,inner(b,c))",
111
112 "a·b*c",
113 "c*inner(a,b)",
114
115 # note how we use associativity to bring it all
116 # to a canonical form
117 "((a·b)·c)·d",
118 "inner(a,inner(b,inner(c,d)))",
119
120 "a*b·c",
121 "a*inner(b,c)",
122
123 "2*a·b",
124 "2*inner(a,b)",
125
126 "inv(a)·a",
127 "I",
128
129 "a·inv(a)",
130 "I",
131
132 "b·a·inv(a)·c",
133 "inner(b,c)",
134
135 "b·aᵀ·inv(aᵀ)·c",
136 "inner(b,c)",
137
138 "b·inv(aᵀ)·aᵀ·c",
139 "inner(b,c)",
140
141 "b·inv((a+b)ᵀ)·(b+a)ᵀ·c",
142 "inner(b,c)",
143
144 "(-a)·(-b)",
145 "inner(a,b)",
146
147 "I·I",
148 "I",
149
150 "I·Iᵀ",
151 "I",
152
153 "(-I)·(-I)",
154 "I",
155
156 "(-Iᵀ)·(-I)",
157 "I",
158
159 "c·(b+a)ᵀ·inv((a+b)ᵀ)·d",
160 "inner(c,d)",
161
162 "c·inv((b+a)ᵀ)·(a+b)ᵀ·d",
163 "inner(c,d)",
164
165 "c·(b+a)ᵀ·inv((a+b)ᵀ)·inv(c)",
166 "I",
167
168 "c·inv((b+a)ᵀ)·(a+b)ᵀ·inv(c)",
169 "I",
170
171 "inv(c)·(b+a)ᵀ·inv((a+b)ᵀ)·c",
172 "I",
173
174 "inv(c)·inv((b+a)ᵀ)·(a+b)ᵀ·c",
175 "I",
176
177
178 "c·d·(b+a)ᵀ·inv((a+b)ᵀ)",
179 "inner(c,d)",
180
181 "d·(b+a)ᵀ·inv((a+b)ᵀ)",
182 "d",
183
184 "(b+a)ᵀ·inv((a+b)ᵀ)",
185 "I",
186
187 "c·d·(b+a)ᵀ·inv((a+b)ᵀ)·inv(d)",
188 "c",
189
190 "c·d·(b+a)ᵀ·inv((a+b)ᵀ)·inv(d)·inv(c)",
191 "I",
192
193 "c·d·(b+a)ᵀ·inv((a+b)ᵀ)·inv(c·d)",
194 "I",
195
196 "c·d·(a+b)ᵀ·inv(c·d·(b+a)ᵀ)",
197 "I",
198
199 "inv(c)·c",
200 "I",
201
202 "inv(c·a)·c·a",
203 "I",
204
205 "inv(c·b·a)·c·b·a",
206 "I",
207
208 "inv(c)·d·(a+b)ᵀ·inv(inv(c)·d·(b+a)ᵀ)",
209 "I",
210
211 "inv(c+f)·d·(a+b)ᵀ·inv(inv(f+c)·d·(b+a)ᵀ)",
212 "I",
213
214 "c·d·inv(a)·inv(c·d·inv(a))",
215 "I",
216
217 ]