def gen_InvertibleLinearTransform(shape): assert len(shape) == 1 dim = shape[0] invertible = False while not invertible: mat = randn(dim, dim) invertible = (logDet(mat) > float('-inf')) return xf.LinearTransform(mat).withTag(randTag())
def test_logDet(self, numPoints=200): for pointIndex in range(numPoints): n = randint(0, 20) if randint(0, 10) == 0: A = np.zeros([n, n]) else: A = randn(n, n) trueDet = la.det(A) if n > 0 else 1.0 assert_allclose(np.exp(mathhelp.logDet(A)), abs(trueDet))
def computeLogJac(transform, x): shapeOut = np.shape(x) deriv = transform.deriv(x) if len(shapeOut) == 0: return math.log(abs(deriv)) elif len(shapeOut) == 1: return logDet(deriv) else: raise RuntimeError('log-Jacobian computation not implemented for output of rank >= 2')
def test_logDet(self, numPoints = 200): for pointIndex in range(numPoints): n = randint(0, 20) if randint(0, 10) == 0: A = np.zeros([n, n]) else: A = randn(n, n) trueDet = la.det(A) if n > 0 else 1.0 assert_allclose(np.exp(mathhelp.logDet(A)), abs(trueDet))
def computeLogJac(transform, x): shapeOut = np.shape(x) deriv = transform.deriv(x) if len(shapeOut) == 0: return math.log(abs(deriv)) elif len(shapeOut) == 1: return logDet(deriv) else: raise RuntimeError( 'log-Jacobian computation not implemented for output of rank >= 2')
def logDetMat(self): return logDet(self.mat)