docstr: Apply full transformation to points `pts`
  
  If there are N points, then `pts` will be N by 3
  
  Parameters
  ----------
  pts : array-like
      array of points
  
  Returns
  -------
  transformed_pts : array
      N by 3 array of transformed points
docstr_tok: ["Apply","full","transformation","to","points","`","pts","`","If","there","are","N","points",",","then","`","pts","`","will","be","N","by","3","Parameters","--","--","--","--","--","pts",":","array-like","array","of","points","Returns","--","--","--","-","transformed_pts",":","array","N","by","3","array","of","transformed","points"]
code: def apply(self, pts):
      """Apply full transformation to points `pts`
  
      If there are N points, then `pts` will be N by 3
  
      Parameters
      ----------
      pts : array-like
          array of points
  
      Returns
      -------
      transformed_pts : array
          N by 3 array of transformed points
      """
      composed = self.post.compose(self.optimizable.compose(self.pre))
      return composed.apply(pts)
  
imports: from .affine import Affine
label_desc: Use image node_id 2 for calling the ChainTransform obj's underlying member method code with example usage: obj.apply(pts) and returns: composed