parameters: (octree, point_hierarchy, pyramid, exsum, origin, direction, level,
                         return_depth=True, with_exit=False)
docstring: r"""Apply ray tracing over an unbatched SPC structure.
  
      The SPC model will be always normalized between -1 and 1 for each axis.
  
      Args:
          octree (torch.ByteTensor): the octree structure,
                                     of shape :math:`(\text{num_bytes})`.
          point_hierarchy (torch.ShortTensor): the point hierarchy associated to the octree,
                                               of shape :math:`(\text{num_points}, 3)`.
          pyramid (torch.IntTensor): the pyramid associated to the octree,
                                     of shape :math:`(2, \text{max_level} + 2)`.
          exsum (torch.IntTensor): the prefix sum associated to the octree.
                                   of shape :math:`(\text{num_bytes} + \text{batch_size})`.
          origin (torch.FloatTensor): the origins of the rays,
                                      of shape :math:`(\text{num_rays}, 3)`.
          direction (torch.FloatTensor): the directions of the rays,
                                         of shape :math:`(\text{num_rays}, 3)`.
          level (int): level to use from the octree.
  
          return_depth (bool): return the depth of each voxel intersection. (Default: True)
  
          with_exit (bool): return also the exit intersection depth. (Default: False)
  
      Returns:
          (torch.IntTensor, torch.IntTensor, (optional) torch.FloatTensor):
  
              - Ray index of intersections sorted by depth of shape :math:`(\text{num_intersection})` 
              - Point hierarchy index of intersections sorted by depth of shape :math:`(\text{num_intersection})` 
                These indices will be `IntTensor`s, but they can be used for indexing with `torch.index_select`.
              - If return_depth is true:
                Float tensor of shape :math:`(\text{num_intersection}), 1` of entry
                depths to each AABB intersection. When `with_exit` is set, returns 
                shape :math:`(\text{num_intersection}), 2` of entry and exit depths.
docstring_summary: r"""Apply ray tracing over an unbatched SPC structure.
docstring_tokens: r Apply ray tracing over an unbatched SPC structure .
function: def unbatched_raytrace(octree, point_hierarchy, pyramid, exsum, origin, direction, level,
                         return_depth=True, with_exit=False):
      r"""Apply ray tracing over an unbatched SPC structure.
  
      The SPC model will be always normalized between -1 and 1 for each axis.
  
      Args:
          octree (torch.ByteTensor): the octree structure,
                                     of shape :math:`(\text{num_bytes})`.
          point_hierarchy (torch.ShortTensor): the point hierarchy associated to the octree,
                                               of shape :math:`(\text{num_points}, 3)`.
          pyramid (torch.IntTensor): the pyramid associated to the octree,
                                     of shape :math:`(2, \text{max_level} + 2)`.
          exsum (torch.IntTensor): the prefix sum associated to the octree.
                                   of shape :math:`(\text{num_bytes} + \text{batch_size})`.
          origin (torch.FloatTensor): the origins of the rays,
                                      of shape :math:`(\text{num_rays}, 3)`.
          direction (torch.FloatTensor): the directions of the rays,
                                         of shape :math:`(\text{num_rays}, 3)`.
          level (int): level to use from the octree.
  
          return_depth (bool): return the depth of each voxel intersection. (Default: True)
  
          with_exit (bool): return also the exit intersection depth. (Default: False)
  
      Returns:
          (torch.IntTensor, torch.IntTensor, (optional) torch.FloatTensor):
  
              - Ray index of intersections sorted by depth of shape :math:`(\text{num_intersection})` 
              - Point hierarchy index of intersections sorted by depth of shape :math:`(\text{num_intersection})` 
                These indices will be `IntTensor`s, but they can be used for indexing with `torch.index_select`.
              - If return_depth is true:
                Float tensor of shape :math:`(\text{num_intersection}), 1` of entry
                depths to each AABB intersection. When `with_exit` is set, returns 
                shape :math:`(\text{num_intersection}), 2` of entry and exit depths.
      """
      output = _C.render.spc.raytrace_cuda(
          octree.contiguous(),
          point_hierarchy.contiguous(),
          pyramid.contiguous(),
          exsum.contiguous(),
          origin.contiguous(),
          direction.contiguous(),
          level,
          return_depth,
          with_exit)
      nuggets = output[0]
      ray_index = nuggets[..., 0]
      point_index = nuggets[..., 1]
  
      if return_depth:
          return ray_index, point_index, output[1]
      else:
          return ray_index, point_index
function_tokens: def unbatched_raytrace ( octree , point_hierarchy , pyramid , exsum , origin , direction , level , return_depth = True , with_exit = False ) : output = _C . render . spc . raytrace_cuda ( octree . contiguous ( ) , point_hierarchy . contiguous ( ) , pyramid . contiguous ( ) , exsum . contiguous ( ) , origin . contiguous ( ) , direction . contiguous ( ) , level , return_depth , with_exit ) nuggets = output [ 0 ] ray_index = nuggets [ ... , 0 ] point_index = nuggets [ ... , 1 ] if return_depth : return ray_index , point_index , output [ 1 ] else : return ray_index , point_index