class TestObjectBuilding1(unittest.TestCase): """Tests an object composed of sphere surfaces""" def setUp(self): self.assembly = Assembly() surface1 = Surface(HemisphereGM(3.), optics_callables.perfect_mirror, location=N.array([0,0,-1.]), rotation=general_axis_rotation(N.r_[1,0,0], N.pi)) surface2 = Surface(HemisphereGM(3.), optics_callables.perfect_mirror, location=N.array([0,0,1.])) self.object = AssembledObject() self.object.add_surface(surface1) self.object.add_surface(surface2) self.assembly.add_object(self.object) dir = N.c_[[0,0,1.],[0,0,1.]] position = N.c_[[0,0,-3.],[0,0,-1.]] self._bund = RayBundle(position, dir, energy=N.ones(2)) def test_object(self): """Tests that the assembly heirarchy works at a basic level""" self.engine = TracerEngine(self.assembly) inters = self.engine.ray_tracer(self._bund,1,.05)[0] correct_inters = N.c_[[0,0,2],[0,0,-2]] N.testing.assert_array_almost_equal(inters, correct_inters) def test_translation(self): """Tests an assembly that has been translated""" trans = N.array([[1,0,0,0],[0,1,0,0],[0,0,1,1],[0,0,0,1]]) self.assembly.transform_children(trans) self.engine = TracerEngine(self.assembly) params = self.engine.ray_tracer(self._bund,1,.05)[0] correct_params = N.c_[[0,0,3],[0,0,-1]] N.testing.assert_array_almost_equal(params, correct_params) def test_rotation_and_translation(self): """Tests an assembly that has been translated and rotated""" self._bund = RayBundle() self._bund.set_vertices(N.c_[[0,-5,1],[0,5,1]]) self._bund.set_directions(N.c_[[0,1,0],[0,1,0]]) self._bund.set_energy(N.r_[[1,1]]) self._bund.set_ref_index(N.r_[[1,1]]) trans = generate_transform(N.r_[[1,0,0]], N.pi/2, N.c_[[0,0,1]]) self.assembly.transform_children(trans) self.engine = TracerEngine(self.assembly) params = self.engine.ray_tracer(self._bund,1,.05)[0] correct_params = N.c_[[0,-2,1]] N.testing.assert_array_almost_equal(params, correct_params)
class TestNestedAssemblies(unittest.TestCase): """ Create an assembly within an assembly, with an object, and check that all transformation activities are handled correctly. """ flat_only = True def setUp(self): self.eighth_circle_trans = generate_transform(N.r_[1., 0, 0], N.pi/4, N.c_[[0., 1, 0]]) self.surf = Surface(flat_surface.FlatGeometryManager(), \ optics_callables.perfect_mirror) self.obj = AssembledObject(surfs=[self.surf]) self.sub_assembly = Assembly() self.sub_assembly.add_object(self.obj, self.eighth_circle_trans) self.assembly = Assembly() self.assembly.add_assembly(self.sub_assembly, self.eighth_circle_trans) def test_initial_transforms(self): """Initial consrtruction yielded correct permanent and temporary transforms""" quarter_circle_trans = N.dot(self.eighth_circle_trans, self.eighth_circle_trans) # Surface transforms: N.testing.assert_array_almost_equal(self.surf._transform, N.eye(4)) N.testing.assert_array_almost_equal(self.surf._temp_frame, quarter_circle_trans) # Object transform: N.testing.assert_array_almost_equal(self.obj.get_transform(), self.eighth_circle_trans) # Subassembly transform: N.testing.assert_array_almost_equal(self.sub_assembly.get_transform(), self.eighth_circle_trans) def test_retransform_object(self): """Changing an object's transform yield's correct resaults after retransform""" self.obj.set_transform(N.eye(4)) self.assembly.transform_children() # Surface transforms: N.testing.assert_array_almost_equal(self.surf._transform, N.eye(4)) N.testing.assert_array_almost_equal(self.surf._temp_frame, self.eighth_circle_trans) # Object transform: N.testing.assert_array_almost_equal(self.obj.get_transform(), N.eye(4)) # Subassembly transform: N.testing.assert_array_almost_equal(self.sub_assembly.get_transform(), self.eighth_circle_trans) def test_retransform_subassembly(self): """Changing an assembly's transform yield's correct resaults after retransform""" self.sub_assembly.set_transform(N.eye(4)) self.assembly.transform_children() # Surface transforms: N.testing.assert_array_almost_equal(self.surf._transform, N.eye(4)) N.testing.assert_array_almost_equal(self.surf._temp_frame, self.eighth_circle_trans) # Object transform: N.testing.assert_array_almost_equal(self.obj.get_transform(), self.eighth_circle_trans) # Subassembly transform: N.testing.assert_array_almost_equal(self.sub_assembly.get_transform(), N.eye(4)) def test_interface(self): """Can call getters on an assembly etc.""" subs = self.assembly.get_assemblies() self.assertEqual(len(subs), 1) self.assertTrue(subs[0] is self.sub_assembly)
class TestNestedAssemblies(unittest.TestCase): """ Create an assembly within an assembly, with an object, and check that all transformation activities are handled correctly. """ flat_only = True def setUp(self): self.eighth_circle_trans = generate_transform(N.r_[1., 0, 0], N.pi / 4, N.c_[[0., 1, 0]]) self.surf = Surface(flat_surface.FlatGeometryManager(), \ optics_callables.perfect_mirror) self.obj = AssembledObject(surfs=[self.surf]) self.sub_assembly = Assembly() self.sub_assembly.add_object(self.obj, self.eighth_circle_trans) self.assembly = Assembly() self.assembly.add_assembly(self.sub_assembly, self.eighth_circle_trans) def test_initial_transforms(self): """Initial consrtruction yielded correct permanent and temporary transforms""" quarter_circle_trans = N.dot(self.eighth_circle_trans, self.eighth_circle_trans) # Surface transforms: N.testing.assert_array_almost_equal(self.surf._transform, N.eye(4)) N.testing.assert_array_almost_equal(self.surf._temp_frame, quarter_circle_trans) # Object transform: N.testing.assert_array_almost_equal(self.obj.get_transform(), self.eighth_circle_trans) # Subassembly transform: N.testing.assert_array_almost_equal(self.sub_assembly.get_transform(), self.eighth_circle_trans) def test_retransform_object(self): """Changing an object's transform yield's correct resaults after retransform""" self.obj.set_transform(N.eye(4)) self.assembly.transform_children() # Surface transforms: N.testing.assert_array_almost_equal(self.surf._transform, N.eye(4)) N.testing.assert_array_almost_equal(self.surf._temp_frame, self.eighth_circle_trans) # Object transform: N.testing.assert_array_almost_equal(self.obj.get_transform(), N.eye(4)) # Subassembly transform: N.testing.assert_array_almost_equal(self.sub_assembly.get_transform(), self.eighth_circle_trans) def test_retransform_subassembly(self): """Changing an assembly's transform yield's correct resaults after retransform""" self.sub_assembly.set_transform(N.eye(4)) self.assembly.transform_children() # Surface transforms: N.testing.assert_array_almost_equal(self.surf._transform, N.eye(4)) N.testing.assert_array_almost_equal(self.surf._temp_frame, self.eighth_circle_trans) # Object transform: N.testing.assert_array_almost_equal(self.obj.get_transform(), self.eighth_circle_trans) # Subassembly transform: N.testing.assert_array_almost_equal(self.sub_assembly.get_transform(), N.eye(4)) def test_interface(self): """Can call getters on an assembly etc.""" subs = self.assembly.get_assemblies() self.assertEqual(len(subs), 1) self.assertTrue(subs[0] is self.sub_assembly)
class TestObjectBuilding1(unittest.TestCase): """Tests an object composed of sphere surfaces""" def setUp(self): self.assembly = Assembly() surface1 = Surface(HemisphereGM(3.), optics_callables.perfect_mirror, location=N.array([0, 0, -1.]), rotation=general_axis_rotation(N.r_[1, 0, 0], N.pi)) surface2 = Surface(HemisphereGM(3.), optics_callables.perfect_mirror, location=N.array([0, 0, 1.])) self.object = AssembledObject() self.object.add_surface(surface1) self.object.add_surface(surface2) self.assembly.add_object(self.object) dir = N.c_[[0, 0, 1.], [0, 0, 1.]] position = N.c_[[0, 0, -3.], [0, 0, -1.]] self._bund = RayBundle(position, dir, energy=N.ones(2)) def test_object(self): """Tests that the assembly heirarchy works at a basic level""" self.engine = TracerEngine(self.assembly) inters = self.engine.ray_tracer(self._bund, 1, .05)[0] correct_inters = N.c_[[0, 0, 2], [0, 0, -2]] N.testing.assert_array_almost_equal(inters, correct_inters) def test_translation(self): """Tests an assembly that has been translated""" trans = N.array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 1]]) self.assembly.transform_children(trans) self.engine = TracerEngine(self.assembly) params = self.engine.ray_tracer(self._bund, 1, .05)[0] correct_params = N.c_[[0, 0, 3], [0, 0, -1]] N.testing.assert_array_almost_equal(params, correct_params) def test_rotation_and_translation(self): """Tests an assembly that has been translated and rotated""" self._bund = RayBundle() self._bund.set_vertices(N.c_[[0, -5, 1], [0, 5, 1]]) self._bund.set_directions(N.c_[[0, 1, 0], [0, 1, 0]]) self._bund.set_energy(N.r_[[1, 1]]) self._bund.set_ref_index(N.r_[[1, 1]]) trans = generate_transform(N.r_[[1, 0, 0]], N.pi / 2, N.c_[[0, 0, 1]]) self.assembly.transform_children(trans) self.engine = TracerEngine(self.assembly) params = self.engine.ray_tracer(self._bund, 1, .05)[0] correct_params = N.c_[[0, -2, 1]] N.testing.assert_array_almost_equal(params, correct_params)