def test_flow_det(flow_spec): z0 = tt.arange(0, 20).astype('float32') flow = flow_spec(dim=20, z0=z0.dimshuffle('x', 0)) with change_flags(compute_test_value='off'): z1 = flow.forward.flatten() J = tt.jacobian(z1, z0) logJdet = tt.log(tt.abs_(tt.nlinalg.det(J))) det = flow.logdet[0] np.testing.assert_allclose(logJdet.eval(), det.eval(), atol=0.0001)
def test_flow_det_local(flow_spec): z0 = tt.arange(0, 12).astype('float32') spec = flow_spec.cls.get_param_spec_for(d=12) params = dict() for k, shp in spec.items(): params[k] = np.random.randn(1, *shp).astype('float32') flow = flow_spec(dim=12, z0=z0.reshape((1, 1, 12)), **params) assert flow.batched with change_flags(compute_test_value='off'): z1 = flow.forward.flatten() J = tt.jacobian(z1, z0) logJdet = tt.log(tt.abs_(tt.nlinalg.det(J))) det = flow.logdet[0] np.testing.assert_allclose(logJdet.eval(), det.eval(), atol=0.0001)