class_docstr: affine full rank transformation of a multivariate distribution
  
  no dimension checking, assumes everything broadcasts correctly
  first version without bound support
  
  provides distribution of y given distribution of x
  y = const + tmat * x
class_docstr_tok: ["affine","full","rank","transformation","of","a","multivariate","distribution","no","dimension","checking",",","assumes","everything","broadcasts","correctly","first","version","without","bound","support","provides","distribution","of","y","given","distribution","of","x","y","=","const","+","tmat","*","x"]
code: def __init__(self, const, tmat, dist):
      self.const = const
      self.tmat = tmat
      self.dist = dist
      self.nrv = len(const)
      if not np.equal(self.nrv, tmat.shape).all():
          raise ValueError("dimension of const and tmat do not agree")
  
      # replace the following with a linalgarray class
      self.tmatinv = linalg.inv(tmat)
      self.absdet = np.abs(np.linalg.det(self.tmat))
      self.logabsdet = np.log(np.abs(np.linalg.det(self.tmat)))
      self.dist
  
imports: import math
  import numpy
  from scipy import linalg, stats, special
  from .linalg_decomp_1 import SvdArray
label_desc: Use image node_id 1 to create a new AffineTransform object  with example: obj = AffineTransform(const, tmat, dist)