def test_reduce_angle_constant_positive(self): angle = 0.1 self.assertEqual(reduce_angle(angle, keep_sign=True), angle) self.assertEqual(reduce_angle(angle, keep_sign=False), angle) angle = 1 self.assertEqual(reduce_angle(angle, keep_sign=True), angle) self.assertEqual(reduce_angle(angle, keep_sign=False), angle)
def test_reduce_angle_constant_2pi(self): angle = -2 * np.pi self.assertEqual(reduce_angle(angle, keep_sign=True), angle) self.assertEqual(reduce_angle(angle, keep_sign=False), angle + 2 * np.pi) angle = 2 * np.pi self.assertEqual(reduce_angle(angle, keep_sign=True), angle) self.assertEqual(reduce_angle(angle, keep_sign=False), angle)
def test_reduce_angle_constant_negative(self): angle = -0.1 self.assertEqual(reduce_angle(angle, keep_sign=True), angle) self.assertEqual(reduce_angle(angle, keep_sign=False), angle + 2 * np.pi) angle = -1 self.assertEqual(reduce_angle(angle, keep_sign=True), angle) self.assertEqual(reduce_angle(angle, keep_sign=False), angle + 2 * np.pi)
def __init__(self, name='Spherical wedge', coordinate_system=None, r_inner=0, r_outer=1.0, phi=np.pi/2, theta=np.array([0, np.pi/2])): max_theta = reduce_angle(max(theta)) if max_theta > np.pi: max_theta = 2*np.pi - max_theta min_theta = reduce_angle(min(theta)) if min_theta > np.pi: min_theta = 2*np.pi - min_theta theta_range = [min_theta, max_theta] self.theta = np.array(theta_range, dtype=np.float) super(SphericalWedge, self).__init__(name, coordinate_system=coordinate_system, r_inner=r_inner, r_outer=r_outer, phi=phi)
def __init__(self, name='Cylindrical wedge', coordinate_system=None, r_inner=0.0, r_outer=1.0, phi=np.pi/2, z=np.array([0.0, 1.0])): self.r_inner = r_inner self.r_outer = r_outer self.phi = reduce_angle(float(phi)) self.z = np.array(z, dtype=float) super(CylindricalWedge, self).__init__(name, coordinate_system=coordinate_system)
def __init__(self, name='Toric wedge', coordinate_system=None, phi=np.pi/2, theta=np.array([0.0, np.pi/2]), r_torus=1.0, r_tube=np.array([0, 0.25])): self.r_torus = abs(float(r_torus)) self.r_tube = abs(np.array(r_tube, dtype=np.float)) self.r_tube = self.r_tube.reshape(self.r_tube.size,) # Torus is not allowed to be thicker then its radius self.r_tube[np.where(self.r_tube > self.r_torus)] = self.r_torus reduced_theta = reduce_angle(theta, keep_sign=True) theta_min = min(reduced_theta) theta_max = max(reduced_theta) if theta_max - theta_min >= 2*np.pi: theta_min = 0.0 theta_max = 2 * np.pi self.theta = np.array([theta_min, theta_max]) self.phi = reduce_angle(phi) super(ToricWedge, self).__init__(name, coordinate_system=coordinate_system)
def __init__(self, name='Conical wedge', coordinate_system=None, phi=np.pi/2, theta=np.pi/6, z=np.array([0.0, 1.0]), z_offset=0.0, r_min=0.0): reduced_angle = reduce_angle(float(theta)) if reduced_angle > np.pi/2: raise ValueError('Cone half angle should be between 0 and 2*pi radians') self.theta = reduced_angle self.phi = reduce_angle(float(phi)) self.r_min = abs(float(r_min)) z_min = self.r_min / np.tan(self.theta) self.z_offset = abs(float(z_offset)) z_points = np.array(z, dtype=float) if np.sign(min(z_points) * max(z_points)) <= 0: z_points = np.union1d(z_points, np.array([0.0])) if z_offset - z_min > 0: if max(z_points) > self.z_offset - z_min > min(z_points): z_points = np.union1d(z_points, np.array([self.z_offset - z_min])) if min(z_points) < -self.z_offset + z_min < max(z_points): z_points = np.union1d(z_points, np.array([-self.z_offset + z_min])) self.z = z_points super(ConicalWedge, self).__init__(name, coordinate_system=coordinate_system)
def test_reduce_angle_array(self): angle = np.array([0.1, ]) np.testing.assert_allclose(reduce_angle(angle, keep_sign=True), angle) np.testing.assert_allclose(reduce_angle(angle, keep_sign=False), angle) angle = np.array([1, ]) np.testing.assert_allclose(reduce_angle(angle, keep_sign=True), angle) np.testing.assert_allclose(reduce_angle(angle, keep_sign=False), angle) angle = np.array([0.1, -0.2]) np.testing.assert_allclose(reduce_angle(angle, keep_sign=True), angle) angle = np.array([0.1, 0.2]) np.testing.assert_allclose(reduce_angle(angle, keep_sign=True), angle) np.testing.assert_allclose(reduce_angle(angle, keep_sign=False), angle)
def test_reduce_angle_random_array_positive(self): size = 1000 angle = np.random.random(size) * 2 * np.pi full_turns = np.random.random_integers(0, 100, size=size) * 2 * np.pi * 1 np.testing.assert_allclose(reduce_angle(angle + full_turns, keep_sign=False), reduce_angle(angle, keep_sign=False)) np.testing.assert_allclose(reduce_angle(angle + full_turns, keep_sign=True), reduce_angle(angle, keep_sign=True)) np.testing.assert_allclose(reduce_angle(angle + full_turns, keep_sign=True), angle) np.testing.assert_allclose(reduce_angle(angle + full_turns, keep_sign=False), angle)
def test_reduce_angle_random_array(self): size = 1000 angle = (np.random.random(size) - 0.5) * 4 * np.pi np.testing.assert_allclose(reduce_angle(angle, keep_sign=True), angle)
def test_reduce_angle_random_array_loops(self): size = 1000 angle = (np.random.random(size) - 0.5) * 4 * np.pi full_turns = np.random.random_integers(-100, 100, size=size) * 2 * np.pi * 1 np.testing.assert_allclose(reduce_angle(angle + full_turns, keep_sign=False), reduce_angle(angle, keep_sign=False))
def test_reduce_angle_tuple(self): angle = (0.1, 0.2) np.testing.assert_allclose(reduce_angle(angle, keep_sign=True), angle) np.testing.assert_allclose(reduce_angle(angle, keep_sign=False), angle)
def test_reduce_angle_list(self): angle = [0.1, 0.2] np.testing.assert_allclose(reduce_angle(angle, keep_sign=True), angle) np.testing.assert_allclose(reduce_angle(angle, keep_sign=False), angle)
def test_reduce_angle_constant_zero(self): angle = 0.0 self.assertEqual(reduce_angle(angle, keep_sign=True), angle) self.assertEqual(reduce_angle(angle, keep_sign=False), angle)
def __init__(self, name='Spherical shape', coordinate_system=None, r_inner=0, r_outer=1.0, phi=np.pi/2): self.r_inner = max(min(r_inner, r_outer), 0.0) self.r_outer = max(max(r_inner, r_outer), 0.0) self.phi = reduce_angle(float(phi)) super(SphericalShape, self).__init__(name, coordinate_system=coordinate_system)