def rotation_points_single_angle(points, angle, axis=0):
    rot_sin = np.sin(angle)
    rot_cos = np.cos(angle)
    if (axis == 1):
        rot_mat_T = np.array([[rot_cos, 0, (- rot_sin)], [0, 1, 0], [rot_sin, 0, rot_cos]], dtype=points.dtype)
    elif ((axis == 2) or (axis == (- 1))):
        rot_mat_T = np.array([[rot_cos, (- rot_sin), 0], [rot_sin, rot_cos, 0], [0, 0, 1]], dtype=points.dtype)
    elif (axis == 0):
        rot_mat_T = np.array([[1, 0, 0], [0, rot_cos, (- rot_sin)], [0, rot_sin, rot_cos]], dtype=points.dtype)
    else:
        raise ValueError('axis should in range')
    return (points @ rot_mat_T)
def rotation_points_single_angle(points, angle, axis=0):
    rot_sin = np.sin(angle)
    rot_cos = np.cos(angle)
    if (axis == 1):
        rot_mat_T = np.array([[rot_cos, 0, (- rot_sin)], [0, 1, 0], [rot_sin, 0, rot_cos]], dtype=points.dtype)
    elif ((axis == 2) or (axis == (- 1))):
        rot_mat_T = np.array([[rot_cos, (- rot_sin), 0], [rot_sin, rot_cos, 0], [0, 0, 1]], dtype=points.dtype)
    elif (axis == 0):
        rot_mat_T = np.array([[1, 0, 0], [0, rot_cos, (- rot_sin)], [0, rot_sin, rot_cos]], dtype=points.dtype)
    else:
        raise ValueError('axis should in range')
    return (points @ rot_mat_T)