docstr: Forward pass for SMPL model but also return transformation of each vertex
  
  Parameters
  ----------
  betas: torch.tensor, optional, shape Bx10
          If given, ignore the member variable `betas` and use it
          instead. For example, it can used if shape parameters
          `betas` are predicted from some external model.
          (default=None)
  body_pose: torch.tensor, optional, shape Bx(J*3)
      If given, ignore the member variable `body_pose` and use it
      instead. For example, it can used if someone predicts the
      pose of the body joints are predicted from some external model.
      It should be a tensor that contains joint rotations in
      axis-angle format. (default=None)
  transl: torch.tensor, optional, shape Bx3
      If given, ignore the member variable `transl` and use it
      instead. For example, it can used if the translation
      `transl` is predicted from some external model.
      (default=None)
  return_tensor: bool, optional
      Return in torch.tensor. (default=True)
  concat_joints: bool, optional
      Concat joints info at the end. (default=False)
docstr_tok: ["Forward","pass","for","SMPL","model","but","also","return","transformation","of","each","vertex","Parameters","--","--","--","--","--","betas",":","torch.tensor",",","optional",",","shape","Bx10","If","given",",","ignore","the","member","variable","`","betas","`","and","use","it","instead",".","For","example",",","it","can","used","if","shape","parameters","`","betas","`","are","predicted","from","some","external","model",".","(","default=None",")","body_pose",":","torch.tensor",",","optional",",","shape","Bx","(","J","*","3",")","If","given",",","ignore","the","member","variable","`","body_pose","`","and","use","it","instead",".","For","example",",","it","can","used","if","someone","predicts","the","pose","of","the","body","joints","are","predicted","from","some","external","model",".","It","should","be","a","tensor","that","contains","joint","rotations","in","axis-angle","format",".","(","default=None",")","transl",":","torch.tensor",",","optional",",","shape","Bx3","If","given",",","ignore","the","member","variable","`","transl","`","and","use","it","instead",".","For","example",",","it","can","used","if","the","translation","`","transl","`","is","predicted","from","some","external","model",".","(","default=None",")","return_tensor",":","bool",",","optional","Return","in","torch.tensor",".","(","default=True",")","concat_joints",":","bool",",","optional","Concat","joints","info","at","the","end",".","(","default=False",")"]
code: def verts_transformations(
      self,
      poses,
      betas,
      transl=None,
      return_tensor=True,
      concat_joints=False,
  ):
      """Forward pass for SMPL model but also return transformation of each vertex
  
      Parameters
      ----------
      betas: torch.tensor, optional, shape Bx10
              If given, ignore the member variable `betas` and use it
              instead. For example, it can used if shape parameters
              `betas` are predicted from some external model.
              (default=None)
      body_pose: torch.tensor, optional, shape Bx(J*3)
          If given, ignore the member variable `body_pose` and use it
          instead. For example, it can used if someone predicts the
          pose of the body joints are predicted from some external model.
          It should be a tensor that contains joint rotations in
          axis-angle format. (default=None)
      transl: torch.tensor, optional, shape Bx3
          If given, ignore the member variable `transl` and use it
          instead. For example, it can used if the translation
          `transl` is predicted from some external model.
          (default=None)
      return_tensor: bool, optional
          Return in torch.tensor. (default=True)
      concat_joints: bool, optional
          Concat joints info at the end. (default=False)
      """
      bn = poses.shape[0]
      assert bn == 1
      if isinstance(poses, np.ndarray):
          poses = to_tensor(poses, self.dtype, self.device)
      if isinstance(betas, np.ndarray):
          betas = to_tensor(betas, self.dtype, self.device)
      if isinstance(transl, np.ndarray):
          transl = to_tensor(transl, self.dtype, self.device)
      L, vertices = lbs(
          betas,
          poses,
          self.v_template,
          self.shapedirs,
          self.posedirs,
          self.J_regressor,
          self.parents,
          self.lbs_weights,
          dtype=self.dtype,
          return_T=True,
          concat_joints=concat_joints,
      )
      if transl is not None:
          transl_4x4 = torch.eye(
              4, dtype=self.dtype, device=self.device
          )[None]
          transl_4x4[0, :3, 3] = transl.unsqueeze(1)
          T = torch.matmul(transl_4x4, L)
      else:
          T = L
      if not return_tensor:
          vertices = vertices.detach().cpu().numpy()[0]
          T = T.detach().cpu().numpy()[0]
      return vertices, T
  
imports: from __future__ import absolute_import
  from __future__ import print_function
  from __future__ import division
  import os.path
  import pickle
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
label_desc: Use image node_id 2 for calling the SMPL obj's underlying member method code with example usage: obj.verts_transformations(poses, betas, transl, return_tensor, concat_joints) and returns: vertices,  T