def test_categorical_forest_manual_inputs_errors(): state = State( T, cctypes=CCTYPES, distargs=DISTARGS, rng=gu.gen_rng(1)) state.transition(N=1, progress=False) cat_id = CCTYPES.index('categorical') # Put 1201 into the first view. view_idx = min(state.views) state.incorporate_dim( T[:,CCTYPES.index('categorical')], outputs=[1201], cctype='categorical', distargs=DISTARGS[cat_id], v=view_idx) # Updating cctype with completely invalid input should raise. with pytest.raises(Exception): distargs = DISTARGS[cat_id].copy() distargs['inputs'] = [10000] state.update_cctype(1201, 'random_forest', distargs=distargs) # Updating cctype with input dimensions outside the view should raise. cols_in_view = state.views[view_idx].dims.keys() cols_out_view = [c for c in state.outputs if c not in cols_in_view] assert len(cols_in_view) > 0 and len(cols_out_view) > 0 with pytest.raises(Exception): distargs = DISTARGS[cat_id].copy() distargs['inputs'] = cols_out_view state.update_cctype(1201, 'random_forest', distargs=distargs) # Updating cctype with no input dimensions should raise. with pytest.raises(Exception): distargs = DISTARGS[cat_id].copy() distargs['inputs'] = [] state.update_cctype(1201, 'random_forest', distargs=distargs)
def test_categorical_forest(): state = State( T, cctypes=CCTYPES, distargs=DISTARGS, rng=gu.gen_rng(1)) state.transition(N=1, progress=False) cat_id = CCTYPES.index('categorical') # If cat_id is singleton migrate first. if len(state.view_for(cat_id).dims) == 1: distargs = DISTARGS[cat_id].copy() state.unincorporate_dim(cat_id) state.incorporate_dim( T[:,cat_id], outputs=[cat_id], cctype='categorical', distargs=distargs, v=0) state.update_cctype(cat_id, 'random_forest', distargs=distargs) bernoulli_id = CCTYPES.index('bernoulli') state.incorporate_dim( T[:,bernoulli_id], outputs=[191], cctype='bernoulli', v=state.Zv(cat_id)) state.update_cctype(191, 'random_forest', distargs={'k':2}) # Run valid transitions. state.transition( N=2, kernels=['rows','column_params','column_hypers'], views=[state.Zv(cat_id)], progress=False) # Running column transition should raise. with pytest.raises(ValueError): state.transition(N=1, kernels=['columns'], progress=False) # Updating cctype in singleton View should raise. distargs = DISTARGS[cat_id].copy() state.incorporate_dim( T[:,CCTYPES.index('categorical')], outputs=[98], cctype='categorical', distargs=distargs, v=max(state.views)+1) with pytest.raises(Exception): state.update_cctype(98, 'random_forest', distargs=distargs)
def test_incorporate_state(): state = State( T[:,:2], cctypes=CCTYPES[:2], distargs=DISTARGS[:2], rng=gu.gen_rng(0)) state.transition(N=5) target = state.views.keys()[0] # Incorporate a new dim into view[0]. state.incorporate_dim( T[:,2], outputs=[2], cctype=CCTYPES[2], distargs=DISTARGS[2], v=target) assert state.Zv(2) == target state.transition(N=1) # Incorporate a new dim into view[0] with a non-contiguous output. state.incorporate_dim( T[:,2], outputs=[10], cctype=CCTYPES[2], distargs=DISTARGS[2], v=target) assert state.Zv(10) == target state.transition(N=1) # Some crash testing queries. state.logpdf(-1, {10:1}, constraints={0:2, 1:1}) state.simulate(-1, [10], constraints={0:2}) # Incorporating with a duplicated output should raise. with pytest.raises(ValueError): state.incorporate_dim( T[:,2], outputs=[10], cctype=CCTYPES[2], distargs=DISTARGS[2], v=target) # Multivariate incorporate should raise. with pytest.raises(ValueError): state.incorporate_dim( T[:,2], outputs=[10, 2], cctype=CCTYPES[2], distargs=DISTARGS[2], v=target) # Missing output should raise. with pytest.raises(ValueError): state.incorporate_dim( T[:,2], outputs=[], cctype=CCTYPES[2], distargs=DISTARGS[2], v=target) # Wrong number of rows should raise. with pytest.raises(ValueError): state.incorporate_dim( T[:,2][:-1], outputs=[11], cctype=CCTYPES[2], distargs=DISTARGS[2], v=target) # Inputs should raise. with pytest.raises(ValueError): state.incorporate_dim( T[:,2], outputs=[11], inputs=[2], cctype=CCTYPES[2], distargs=DISTARGS[2], v=target) # Incorporate dim into a newly created singleton view. target = max(state.views)+1 state.incorporate_dim( T[:,3], outputs=[3], cctype=CCTYPES[3], distargs=DISTARGS[3], v=target) assert state.Zv(3) == target state.transition(N=1) # Incorporate dim without specifying a view. state.incorporate_dim(T[:,4], outputs=[4], cctype=CCTYPES[4], distargs=DISTARGS[4]) state.transition(N=1) # Unincorporate first dim. previous = state.n_cols() state.unincorporate_dim(0) assert state.n_cols() == previous-1 state.transition(N=1) # Reincorporate dim without specifying a view. state.incorporate_dim( T[:,0], outputs=[0], cctype=CCTYPES[0], distargs=DISTARGS[0]) state.transition(N=1) # Incorporate dim into singleton view, remove it, assert destroyed. target = max(state.views)+1 state.incorporate_dim( T[:,5], outputs=[5], cctype=CCTYPES[5], distargs=DISTARGS[5], v=target) previous = len(state.views) state.unincorporate_dim(5) assert len(state.views) == previous-1 state.transition(N=1) # Reincorporate dim into a singleton view. target = max(state.views)+1 state.incorporate_dim(T[:,5], outputs=[5], cctype=CCTYPES[5], distargs=DISTARGS[5], v=target) state.transition(N=1) # Incorporate the rest of the dims in the default way. for i in xrange(6, len(CCTYPES)): state.incorporate_dim( T[:,i], outputs=[max(state.outputs)+1], cctype=CCTYPES[i], distargs=DISTARGS[i]) state.transition(N=1) # Unincorporating non-existent dim should raise. with pytest.raises(ValueError): state.unincorporate_dim(9999) # Unincorporate all the dims, except the last one. for o in state.outputs[:-1]: state.unincorporate_dim(o) assert state.n_cols() == 1 state.transition(N=1) # Unincorporating last dim should raise. with pytest.raises(ValueError): state.unincorporate_dim(state.outputs[0])