docstr: composite rays' rgbs, according to the ray marching formula. (for inference)
  Args:
      n_alive: int, number of alive rays
      n_step: int, how many steps we march
      rays_alive: int, [n_alive], the alive rays' IDs in N (N >= n_alive)
      rays_t: float, [N], the alive rays' time
      sigmas: float, [n_alive * n_step,]
      rgbs: float, [n_alive * n_step, 3]
      ts: float, [n_alive * n_step, 2]
  In-place Outputs:
      weights_sum: float, [N,], the alpha channel
      depth: float, [N,], the depth value
      image: float, [N, 3], the RGB channel (after multiplying alpha!)
docstr_tok: ["composite","rays","'","rgbs",",","according","to","the","ray","marching","formula",".","(","for","inference",")","Args",":","n_alive",":","int",",","number","of","alive","rays","n_step",":","int",",","how","many","steps","we","march","rays_alive",":","int",",","[","n_alive","]",",","the","alive","rays","'","IDs","in","N","(","N",">","=","n_alive",")","rays_t",":","float",",","[","N","]",",","the","alive","rays","'","time","sigmas",":","float",",","[","n_alive","*","n_step",",","]","rgbs",":","float",",","[","n_alive","*","n_step",",","3","]","ts",":","float",",","[","n_alive","*","n_step",",","2","]","In-place","Outputs",":","weights_sum",":","float",",","[","N",",","]",",","the","alpha","channel","depth",":","float",",","[","N",",","]",",","the","depth","value","image",":","float",",","[","N",",","3","]",",","the","RGB","channel","(","after","multiplying","alpha","!",")"]
code: def forward(
      ctx,
      n_alive,
      n_step,
      rays_alive,
      rays_t,
      sigmas,
      rgbs,
      ts,
      weights_sum,
      depth,
      image,
      T_thresh=1e-2,
      binarize=False,
  ):
      """composite rays' rgbs, according to the ray marching formula. (for inference)
      Args:
          n_alive: int, number of alive rays
          n_step: int, how many steps we march
          rays_alive: int, [n_alive], the alive rays' IDs in N (N >= n_alive)
          rays_t: float, [N], the alive rays' time
          sigmas: float, [n_alive * n_step,]
          rgbs: float, [n_alive * n_step, 3]
          ts: float, [n_alive * n_step, 2]
      In-place Outputs:
          weights_sum: float, [N,], the alpha channel
          depth: float, [N,], the depth value
          image: float, [N, 3], the RGB channel (after multiplying alpha!)
      """
      sigmas = sigmas.float().contiguous()
      rgbs = rgbs.float().contiguous()
      get_backend().composite_rays(
          n_alive,
          n_step,
          T_thresh,
          binarize,
          rays_alive,
          rays_t,
          sigmas,
          rgbs,
          ts,
          weights_sum,
          depth,
          image,
      )
      return tuple()
  
imports: import torch
  from torch.autograd import Function
  from torch.cuda.amp import custom_bwd, custom_fwd
label_desc: Use image node_id 1 for calling the _composite_rays obj's underlying member method code with example usage: obj.forward(ctx, n_alive, n_step, rays_alive, rays_t, sigmas, rgbs, ts, weights_sum, depth, image, T_thresh, binarize) and returns: tuple