Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
# M = dimension of space
# N = number of vectors
M, N = A.shape
if is_complex is None:
if A.dtype == 'complex':
is_complex = True
else:
is_complex = False
if is_complex:
N = N * 2
M = M * 2
if layout is None:
layout, blades = Cl(M)
e_ = layout.basis_vectors_lst[:M]
a = [0 ^ e_[0]] * N
if not is_complex:
for n in range(N):
for m in range(M):
a[n] = (a[n]) + ((A[m, n]) ^ e_[m])
else:
for n in range(N // 2):
n_ = 2 * n
for m in range(M // 2):
m_ = 2 * m
def test_apply_rotor(self):
mv = []
for i in range(100):
p = random_euc_mv()
mv.append(p)
test_array = ConformalMVArray(mv)
up_array = test_array.up()
# Test apply rotor
for i in range(100):
R = ConformalMVArray([self.layout.randomRotor()])
rotated_array = up_array.apply_rotor(R)
for i, v in enumerate(rotated_array):
np.testing.assert_almost_equal(v.value, apply_rotor(up_array[i], R[0]).value)
def test_from_value_array(self):
mv = []
for i in range(100):
p = random_euc_mv()
mv.append(p)
test_array = ConformalMVArray(mv)
up_array = test_array.up()
new_mv_array = ConformalMVArray.from_value_array(up_array.value)
np.testing.assert_almost_equal(new_mv_array.value, up_array.value)
def test_draw_points(self):
from clifford.tools.g3 import random_euc_mv
from clifford.g3 import layout
gs = GanjaScene()
gs.add_objects([random_euc_mv().value[0:8] for i in range(10)], static=False)
with open('test_file.html', 'w') as test_file:
test_file.write(generate_full_html(str(gs), sig=layout.sig, grid=True, scale=1.0, gl=True))
render_cef_script(str(gs), sig=layout.sig, grid=True, scale=1.0, gl=False)
def test_general_logarithm_translation(self):
# Check we can reverse translation
for i in range(50):
t = random_euc_mv()
biv = ninf * t /2
R = general_exp(biv).normal()
biv_2 = general_logarithm(R)
np.testing.assert_almost_equal(biv.value, biv_2.value)
def test_fit_plane(self):
try:
noise = 0.1
trueP = random_plane()
point_list = project_points_to_plane([random_conformal_point() for i in range(100)], trueP)
point_list = [up(down(P) + noise * random_euc_mv()) for P in point_list]
print(trueP)
plane = fit_plane(point_list)
print(plane)
#draw(point_list + [plane], static=False, scale=0.1)
except:
print('FAILED TO FIND PLANE')
def test_gp_op_ip(self):
layout = Cl(4, 1)[0]
e1 = layout.blades['e1']
e2 = layout.blades['e2']
e3 = layout.blades['e3']
e4 = layout.blades['e4']
e5 = layout.blades['e5']
e123 = layout.blades['e123']
np.testing.assert_almost_equal(e123.value, (e1 ^ e2 ^ e3).value)
np.testing.assert_almost_equal(e123.value, (e1 * e2 * e3).value)
e12345 = layout.blades['e12345']
np.testing.assert_almost_equal(e12345.value, (e1 ^ e2 ^ e3 ^ e4 ^ e5).value)
np.testing.assert_almost_equal(e12345.value, (e1 * e2 * e3 * e4 * e5).value)
e12 = layout.blades['e12']
np.testing.assert_almost_equal(-e12.value, (e2 ^ e1).value)
def test_factorise(self):
layout_a = Cl(3)[0]
layout,blades,stuff = conformalize(layout_a)
e1 = layout.blades['e1']
e2 = layout.blades['e2']
e3 = layout.blades['e3']
e4 = layout.blades['e4']
e5 = layout.blades['e5']
up = stuff['up']
blade = up(e1 + 3*e2 + 4*e3)^up(5*e1 + 3.3*e2 + 10*e3)^up(-13.1*e1)
basis, scale = blade.factorise()
new_blade = (reduce(lambda a, b: a^b, basis)*scale)
print(new_blade)
print(blade)
np.testing.assert_almost_equal(new_blade.value, blade.value, 5)
def test_metric(self):
layout = Cl(4, 1)[0]
e1 = layout.blades['e1']
e2 = layout.blades['e2']
e3 = layout.blades['e3']
e4 = layout.blades['e4']
e5 = layout.blades['e5']
self.assertAlmostEqual((e1 * e1)[0], 1)
self.assertAlmostEqual((e2 * e2)[0], 1)
self.assertAlmostEqual((e3 * e3)[0], 1)
self.assertAlmostEqual((e4 * e4)[0], 1)
self.assertAlmostEqual((e5 * e5)[0], -1)
def test_gp_op_ip(self):
layout = Cl(3)[0]
e1 = layout.blades['e1']
e2 = layout.blades['e2']
e3 = layout.blades['e3']
print('outer product')
e123 = layout.blades['e123']
np.testing.assert_almost_equal(e123.value, (e1 ^ e2 ^ e3).value)
np.testing.assert_almost_equal(e123.value, (e1 * e2 * e3).value)
print('outer product ordering')
e12 = layout.blades['e12']
np.testing.assert_almost_equal(-e12.value, (e2 ^ e1).value)
print('outer product zeros')
np.testing.assert_almost_equal(0, (e1 ^ e1).value)
np.testing.assert_almost_equal(0, (e2 ^ e2).value)