Source code for tests.test_transforms_geometry

import numpy as np
import pdb

from autopilot.transform.geometry import Spheroid, _ellipsoid_func

n_samples = 100

[docs]def test_spheroid_init(): # test that the dang thing initializes as expected with no params sphere_1 = Spheroid() assert sphere_1._scale is None assert sphere_1._offset_source is None assert sphere_1._offset_target is None # test that when given explicit source that arrays are generated correctly sphere_2 = Spheroid(target=(1,2,3,0,1,2), source=(2,4,6,1,3,5)) assert np.array_equal(sphere_2._scale, np.array((0.5,0.5,0.5))) assert np.array_equal(sphere_2._offset_source, np.array((1, 3, 5))) assert np.array_equal(sphere_2._offset_target, np.array((0,1,2)))
[docs]def test_spheroid_generate_fit(): for i in range(n_samples): # parameterize a target spheroid target = ((np.random.rand()+5)*5, (np.random.rand()+5)*5, (np.random.rand()+5)*5, (np.random.rand()-0.5)*20, (np.random.rand()-0.5)*20, (np.random.rand()-0.5)*20) # make a spheroid to generate points sphere_generator = Spheroid(target=target) # test that the generation is good noise = np.random.rand() max_distance = np.sqrt((noise**2)*3) pts = sphere_generator.generate(1000, which="target",noise=noise) ellipsoid_fn_out = _ellipsoid_func(pts, *target) assert np.all(ellipsoid_fn_out-1 < max_distance) # test that fit recovers the target sphere_generator.fit(pts, bounds=((0,0,0,-50,-50,-50),(50,50,50,50,50,50))) for t_param, fit_param in zip(target, sphere_generator.source): assert np.abs(t_param - fit_param) < max_distance
[docs]def test_spheroid_process(): for i in range(n_samples): # test that for a known target and source, the target is correctly # recovered from points on the source spheroid target = ((np.random.rand() + 1) * 10, (np.random.rand() + 1) * 10, (np.random.rand() + 1) * 10, (np.random.rand() - 0.5) * 20, (np.random.rand() - 0.5) * 20, (np.random.rand() - 0.5) * 20) source = ((np.random.rand() + 1) * 10, (np.random.rand() + 1) * 10, (np.random.rand() + 1) * 10, (np.random.rand() - 0.5) * 20, (np.random.rand() - 0.5) * 20, (np.random.rand() - 0.5) * 20) sphere = Spheroid(target=target, source=source) pts = sphere.generate(1000, which="source", noise=0) pts_tfm = sphere.process(pts) pts_test = _ellipsoid_func(pts, *source) pts_tfm_test = _ellipsoid_func(pts_tfm, *target) assert np.allclose(pts_test, np.ones(1000)) assert np.allclose(pts_tfm_test, np.ones(1000))