Пример #1
0
 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)
Пример #2
0
 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)
Пример #3
0
 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)
Пример #4
0
 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)
Пример #5
0
 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)
Пример #6
0
    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)
Пример #7
0
    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)
Пример #8
0
 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)
Пример #9
0
 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)
Пример #10
0
 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)
Пример #11
0
 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))
Пример #12
0
 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)
Пример #13
0
 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)
Пример #14
0
 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)
Пример #15
0
 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)