code: def rotate_point_cloud_by_angle(batch_data, rotation_angle):
      """Rotate the point cloud along up direction with certain angle.
      Input:
        BxNx3 array, original batch of point clouds
      Return:
        BxNx3 array, rotated batch of point clouds
      """
      rotated_data = np.zeros(batch_data.shape, dtype=np.float32)
      for k in range(batch_data.shape[0]):
          # rotation_angle = np.random.uniform() * 2 * np.pi
          cosval = np.cos(rotation_angle)
          sinval = np.sin(rotation_angle)
          rotation_matrix = np.array(
              [[cosval, 0, sinval], [0, 1, 0], [-sinval, 0, cosval]]
          )
          shape_pc = batch_data[k, :, 0:3]
          rotated_data[k, :, 0:3] = np.dot(
              shape_pc.reshape((-1, 3)), rotation_matrix
          )
      return rotated_data
  
file_path: dgl/examples/pytorch/pointcloud/pointnet/provider.py
imports: import numpy
label_desc: Use image node_id 8 for calling a global function with example usage: rotate_point_cloud_by_angle(batch_data, rotation_angle) and returns: rotated_data