class_docstr: Composite features within a z-buffer using alpha compositing. Given a z-buffer
  with corresponding features and weights, these values are accumulated according
  to their weights such that features nearer in depth contribute more to the final
  feature than ones further away.
  
  Concretely this means:
      weighted_fs[b,c,i,j] = sum_k cum_alpha_k * features[c,pointsidx[b,k,i,j]]
      cum_alpha_k = alphas[b,k,i,j] * prod_l=0..k-1 (1 - alphas[b,l,i,j])
  
  Args:
      features: Packed Tensor of shape (C, P) giving the features of each point.
      alphas: float32 Tensor of shape (N, points_per_pixel, image_size,
          image_size) giving the weight of each point in the z-buffer.
          Values should be in the interval [0, 1].
      pointsidx: int32 Tensor of shape (N, points_per_pixel, image_size, image_size)
          giving the indices of the nearest points at each pixel, sorted in z-order.
          Concretely pointsidx[n, k, y, x] = p means that features[:, p] is the
          feature of the kth closest point (along the z-direction) to pixel (y, x) in
          batch element n. This is weighted by alphas[n, k, y, x].
  
  Returns:
      weighted_fs: Tensor of shape (N, C, image_size, image_size)
          giving the accumulated features at each point.
class_docstr_tok: ["Composite","features","within","a","z-buffer","using","alpha","compositing",".","Given","a","z-buffer","with","corresponding","features","and","weights",",","these","values","are","accumulated","according","to","their","weights","such","that","features","nearer","in","depth","contribute","more","to","the","final","feature","than","ones","further","away",".","Concretely","this","means",":","weighted_fs","[","b",",","c",",","i",",","j","]","=","sum_k","cum_alpha_k","*","features","[","c",",","pointsidx","[","b",",","k",",","i",",","j","]","]","cum_alpha_k","=","alphas","[","b",",","k",",","i",",","j","]","*","prod_l=0","..","k-1","(","1","-","alphas","[","b",",","l",",","i",",","j","]",")","Args",":","features",":","Packed","Tensor","of","shape","(","C",",","P",")","giving","the","features","of","each","point",".","alphas",":","float32","Tensor","of","shape","(","N",",","points_per_pixel",",","image_size",",","image_size",")","giving","the","weight","of","each","point","in","the","z-buffer",".","Values","should","be","in","the","interval","[","0",",","1","]",".","pointsidx",":","int32","Tensor","of","shape","(","N",",","points_per_pixel",",","image_size",",","image_size",")","giving","the","indices","of","the","nearest","points","at","each","pixel",",","sorted","in","z-order",".","Concretely","pointsidx","[","n",",","k",",","y",",","x","]","=","p","means","that","features","[",":",",","p","]","is","the","feature","of","the","kth","closest","point","(","along","the","z-direction",")","to","pixel","(","y",",","x",")","in","batch","element","n.","This","is","weighted","by","alphas","[","n",",","k",",","y",",","x","]",".","Returns",":","weighted_fs",":","Tensor","of","shape","(","N",",","C",",","image_size",",","image_size",")","giving","the","accumulated","features","at","each","point","."]
code: def forward(ctx, features, alphas, points_idx):
      pt_cld = _C.accum_alphacomposite(features, alphas, points_idx)
  
      ctx.save_for_backward(
          features.clone(), alphas.clone(), points_idx.clone()
      )
      return pt_cld
  
file_path: pytorch3d/pytorch3d/renderer/compositing.py
imports: import torch
  from pytorch3d import _C
label_desc: Use image node_id 1 for calling the _CompositeAlphaPoints obj's underlying member method code with example usage: obj.forward(ctx, features, alphas, points_idx) and returns: pt_cld