Skip to content

Commit 1ea8eea

Browse files
eric-wieserutensil
authored andcommitted
Eliminate special cases from update_and_substitute (#138)
The tables now contain scalars, so this should work for all cases Note that as a result of this, some multiplications now end up slightly more expanded
1 parent 786af26 commit 1ea8eea

File tree

3 files changed

+5
-14
lines changed

3 files changed

+5
-14
lines changed

examples/ipython/Terminal.ipynb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,11 @@
131131
"[(\u001b[0;34mX\u001b[0m.\u001b[0;34me\u001b[0m), (\u001b[0;34mY\u001b[0m.\u001b[0;34me\u001b[0m), 1]])\n",
132132
"(X^Y)**2 = (\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)**2\n",
133133
"B = \u001b[0;34mX\u001b[0m^\u001b[0;34mY\u001b[0m - (\u001b[0;34mY\u001b[0m.\u001b[0;34me\u001b[0m)*\u001b[0;34mX\u001b[0m^\u001b[0;34me\u001b[0m + (\u001b[0;34mX\u001b[0m.\u001b[0;34me\u001b[0m)*\u001b[0;34mY\u001b[0m^\u001b[0;34me\u001b[0m\n",
134-
"B**2 = 3*(\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)**2 - 2*(\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)*(\u001b[0;34mX\u001b[0m.\u001b[0;34me\u001b[0m)*(\u001b[0;34mY\u001b[0m.\u001b[0;34me\u001b[0m) + 2*(\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)*(\u001b[0;34mX\u001b[0m.\u001b[0;34me\u001b[0m)*\u001b[0;34mY\u001b[0m^\u001b[0;34me\u001b[0m - 2*(\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)*(\u001b[0;34mX\u001b[0m.\u001b[0;34me\u001b[0m)*((\u001b[0;34mY\u001b[0m.\u001b[0;34me\u001b[0m) + \u001b[0;34mY\u001b[0m^\u001b[0;34me\u001b[0m) - 2*(\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)*(\u001b[0;34mY\u001b[0m.\u001b[0;34me\u001b[0m)*\u001b[0;34mX\u001b[0m^\u001b[0;34me\u001b[0m + 2*(\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)*(\u001b[0;34mY\u001b[0m.\u001b[0;34me\u001b[0m)*((\u001b[0;34mX\u001b[0m.\u001b[0;34me\u001b[0m) + \u001b[0;34mX\u001b[0m^\u001b[0;34me\u001b[0m) + 2*(\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)*\u001b[0;34mX\u001b[0m^\u001b[0;34mY\u001b[0m - 2*(\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)*((\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m) + \u001b[0;34mX\u001b[0m^\u001b[0;34mY\u001b[0m)\n",
134+
"B**2 = (\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)**2 - 2*(\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)*(\u001b[0;34mX\u001b[0m.\u001b[0;34me\u001b[0m)*(\u001b[0;34mY\u001b[0m.\u001b[0;34me\u001b[0m)\n",
135135
"#L = X^Y^e is a non-euclidian line\n",
136136
"B = L*e = \u001b[0;34mX\u001b[0m^\u001b[0;34mY\u001b[0m - (\u001b[0;34mY\u001b[0m.\u001b[0;34me\u001b[0m)*\u001b[0;34mX\u001b[0m^\u001b[0;34me\u001b[0m + (\u001b[0;34mX\u001b[0m.\u001b[0;34me\u001b[0m)*\u001b[0;34mY\u001b[0m^\u001b[0;34me\u001b[0m\n",
137137
"B*e*B.rev() = (\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)*(-(\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m) + 2*(\u001b[0;34mX\u001b[0m.\u001b[0;34me\u001b[0m)*(\u001b[0;34mY\u001b[0m.\u001b[0;34me\u001b[0m))*\u001b[0;34me\u001b[0m\n",
138-
"B**2 = (\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)*((\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m) - 2*(\u001b[0;34mX\u001b[0m.\u001b[0;34me\u001b[0m)*(\u001b[0;34mY\u001b[0m.\u001b[0;34me\u001b[0m))\n",
138+
"B**2 = (\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)**2 - 2*(\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)*(\u001b[0;34mX\u001b[0m.\u001b[0;34me\u001b[0m)*(\u001b[0;34mY\u001b[0m.\u001b[0;34me\u001b[0m)\n",
139139
"L**2 = (\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)**2 - 2*(\u001b[0;34mX\u001b[0m.\u001b[0;34mY\u001b[0m)*(\u001b[0;34mX\u001b[0m.\u001b[0;34me\u001b[0m)*(\u001b[0;34mY\u001b[0m.\u001b[0;34me\u001b[0m)\n",
140140
"s = sinh(alpha/2) and c = cosh(alpha/2)\n",
141141
"exp(alpha*B/(2*|B|)) = c\n",

galgebra/ga.py

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -101,16 +101,7 @@ def update_and_substitute(expr1, expr2, mul_dict):
101101
expr = S(0)
102102
for (coef1, base1) in zip(coefs1, bases1):
103103
for (coef2, base2) in zip(coefs2, bases2):
104-
#Special cases where base1 and/or base2 is scalar
105-
if base1 == 1 and base2 == 1:
106-
expr += coef1 * coef2
107-
elif base1 == 1:
108-
expr += coef1 * coef2 * base2
109-
elif base2 == 1:
110-
expr += coef1 * coef2 * base1
111-
else:
112-
key = (base1, base2)
113-
expr += coef1 * coef2 * mul_dict[key]
104+
expr += coef1 * coef2 * mul_dict[base1, base2]
114105
return expr
115106

116107

test/test_test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,13 +198,13 @@ def test_noneuclidian_distance_calculation(self):
198198
B = (L*e).expand().blade_rep() # D&L 10.152
199199
assert str(B) == 'X^Y - (Y.e)*X^e + (X.e)*Y^e'
200200
Bsq = B*B
201-
assert str(Bsq) == '(X.Y)*((X.Y) - 2*(X.e)*(Y.e))'
201+
assert str(Bsq) == '(X.Y)**2 - 2*(X.Y)*(X.e)*(Y.e)'
202202
Bsq = Bsq.scalar()
203203
assert str(B) == 'X^Y - (Y.e)*X^e + (X.e)*Y^e'
204204

205205
BeBr = B*e*B.rev()
206206
assert str(BeBr) == '(X.Y)*(-(X.Y) + 2*(X.e)*(Y.e))*e'
207-
assert str(B*B) == '(X.Y)*((X.Y) - 2*(X.e)*(Y.e))'
207+
assert str(B*B) == '(X.Y)**2 - 2*(X.Y)*(X.e)*(Y.e)'
208208
assert str(L*L) == '(X.Y)**2 - 2*(X.Y)*(X.e)*(Y.e)' # D&L 10.153
209209

210210
(s,c,Binv,M,S,C,alpha) = symbols('s c (1/B) M S C alpha')

0 commit comments

Comments
 (0)