code: def prune_points(self, mask):
      valid_points_mask = ~mask
      optimizable_tensors = self._prune_optimizer(valid_points_mask)
  
      self._xyz = optimizable_tensors["xyz"]
      self._features_dc = optimizable_tensors["f_dc"]
      self._features_rest = optimizable_tensors["f_rest"]
      self._opacity = optimizable_tensors["opacity"]
      self._scaling = optimizable_tensors["scaling"]
      self._rotation = optimizable_tensors["rotation"]
  
      self.xyz_gradient_accum = self.xyz_gradient_accum[
          valid_points_mask
      ]
  
      self.denom = self.denom[valid_points_mask]
      self.max_radii2D = self.max_radii2D[valid_points_mask]
  
imports: import torch
  import numpy
  from utils.general_utils import inverse_sigmoid, get_expon_lr_func, build_rotation
  from torch import nn
  import os
  from utils.system_utils import mkdir_p
  from plyfile import PlyData, PlyElement
  from utils.sh_utils import RGB2SH
  from simple_knn._C import distCUDA2
  from utils.graphics_utils import BasicPointCloud
  from utils.general_utils import strip_symmetric, build_scaling_rotation
label_desc: Use image node_id 21 for calling the GaussianModel obj's underlying member method code with example usage: obj.prune_points(mask) without return types