docstr: Create chain transform instance
  
  Parameters
  ----------
  optimizable : array or Transform
      Transform that we are optimizing.  If this is an array, then assume
      it's an affine matrix.
  pre : None or array or Transform, optional
      If not None, a transform that should be applied to points before
      applying the `optimizable` transform.  If an array, then assume it's
      an affine matrix.
  post : None or Transform, optional
      If not None, a transform that should be applied to points after
      applying any `pre` transform, and then the `optimizable`
      transform.  If an array, assume it's an affine matrix
docstr_tok: ["Create","chain","transform","instance","Parameters","--","--","--","--","--","optimizable",":","array","or","Transform","Transform","that","we","are","optimizing",".","If","this","is","an","array",",","then","assume","it","'s","an","affine","matrix",".","pre",":","None","or","array","or","Transform",",","optional","If","not","None",",","a","transform","that","should","be","applied","to","points","before","applying","the","`","optimizable","`","transform",".","If","an","array",",","then","assume","it's","an","affine","matrix",".","post",":","None","or","Transform",",","optional","If","not","None",",","a","transform","that","should","be","applied","to","points","after","applying","any","`","pre","`","transform",",","and","then","the","`","optimizable","`","transform",".","If","an","array",",","assume","it","'s","an","affine","matrix"]
code: def __init__(self, optimizable, pre=None, post=None):
      """Create chain transform instance
  
      Parameters
      ----------
      optimizable : array or Transform
          Transform that we are optimizing.  If this is an array, then assume
          it's an affine matrix.
      pre : None or array or Transform, optional
          If not None, a transform that should be applied to points before
          applying the `optimizable` transform.  If an array, then assume it's
          an affine matrix.
      post : None or Transform, optional
          If not None, a transform that should be applied to points after
          applying any `pre` transform, and then the `optimizable`
          transform.  If an array, assume it's an affine matrix
      """
      if not hasattr(optimizable, "param"):
          raise ValueError("Input transform should be optimizable")
      if not hasattr(optimizable, "apply"):
          optimizable = Affine(optimizable)
      if not hasattr(pre, "apply"):
          pre = Affine(pre)
      if not hasattr(post, "apply"):
          post = Affine(post)
      self.optimizable = optimizable
      self.pre = pre
      self.post = post
  
imports: from .affine import Affine
label_desc: Use image node_id 1 to create a new ChainTransform object  with example: obj = ChainTransform(optimizable, pre, post)