class ParaxialCase(unittest.TestCase): def setUp(self): self.mat = mat = ModelMaterial(n=1.5) self.s0 = Spheroid(curvature=0., distance=0., material=mat) self.s = Spheroid(curvature=.1, distance=0, material=mat) self.sm0 = Spheroid(curvature=0, distance=0, material=mirror) self.sm = Spheroid(curvature=.1, distance=0, material=mirror) def test_offset(self): nptest.assert_allclose(self.s.direction, (0, 0, 1)) nptest.assert_allclose(self.s.distance, 0) nptest.assert_allclose(self.s.offset, 0) def test_rotation(self): nptest.assert_allclose(self.s.angles, (0, 0, 0.)) nptest.assert_allclose(self.s.from_axis([0, 0, 1]), (0, 0, 1)) nptest.assert_allclose(self.s.from_normal([0, 0, 1]), (0, 0, 1)) def test_snell_paraxial(self): y0, u0 = (1, 2), (.2, .1) yu, n = self.s0.propagate_paraxial(np.hstack((y0, u0)), 1., 1.) y, u = np.hsplit(yu, 2) mu = 1/self.s0.material.n nptest.assert_allclose(y, y0) nptest.assert_allclose(u, u0) def test_snell_paraxial_mirror(self): y0, u0 = (1, 2), (.2, .1) yu, n = self.sm0.propagate_paraxial(np.hstack((y0, u0)), 1., 1.) y, u = np.hsplit(yu, 2) nptest.assert_allclose(y, y0) nptest.assert_allclose(u, u0) def test_align(self): d = 0, -.1, 1 d /= np.linalg.norm(d) mu = 1/self.s0.material.n self.s0.align(d, mu) e = self.s0.from_normal(self.s0.excidence(mu)) nptest.assert_allclose(e, d) y0, u0 = (1, 2), (.2, .0) yu, n = self.s0.propagate_paraxial(np.hstack((y0, u0)), 1., 1.) y, u = np.hsplit(yu, 2) nptest.assert_allclose(y[0], y0[0]) nptest.assert_allclose(u[0], u0[0]) nptest.assert_allclose(u[1], d[0])
class ParaxialCase(unittest.TestCase): def setUp(self): self.mat = mat = ModelMaterial(n=1.5) self.s0 = Spheroid(curvature=0., distance=0., material=mat) self.s = Spheroid(curvature=.1, distance=0, material=mat) self.sm0 = Spheroid(curvature=0, distance=0, material=mirror) self.sm = Spheroid(curvature=.1, distance=0, material=mirror) def test_offset(self): nptest.assert_allclose(self.s.direction, (0, 0, 1)) nptest.assert_allclose(self.s.distance, 0) nptest.assert_allclose(self.s.offset, 0) def test_rotation(self): nptest.assert_allclose(self.s.angles, (0, 0, 0.)) nptest.assert_allclose(self.s.from_axis([0, 0, 1]), (0, 0, 1)) nptest.assert_allclose(self.s.from_normal([0, 0, 1]), (0, 0, 1)) def test_snell_paraxial(self): y0, u0 = (1, 2), (.2, .1) yu, n = self.s0.propagate_paraxial(np.hstack((y0, u0)), 1., 1.) y, u = np.hsplit(yu, 2) mu = 1 / self.s0.material.n nptest.assert_allclose(y, y0) nptest.assert_allclose(u, u0) def test_snell_paraxial_mirror(self): y0, u0 = (1, 2), (.2, .1) yu, n = self.sm0.propagate_paraxial(np.hstack((y0, u0)), 1., 1.) y, u = np.hsplit(yu, 2) nptest.assert_allclose(y, y0) nptest.assert_allclose(u, u0) def test_align(self): d = 0, -.1, 1 d /= np.linalg.norm(d) mu = 1 / self.s0.material.n self.s0.align(d, mu) e = self.s0.from_normal(self.s0.excidence(mu)) nptest.assert_allclose(e, d) y0, u0 = (1, 2), (.2, .0) yu, n = self.s0.propagate_paraxial(np.hstack((y0, u0)), 1., 1.) y, u = np.hsplit(yu, 2) nptest.assert_allclose(y[0], y0[0]) nptest.assert_allclose(u[0], u0[0]) nptest.assert_allclose(u[1], d[0])