def test_addInvariantsErrorsRaising(self, test_input, errmsg): n1 = makeEmptyNode('123456789017') n2 = makeEmptyNode('123456789013') n1.invar, n2.invar = test_input with pytest.raises(IncompatibleAddendsError) as err: GeounitNode.addInvariants(n1, n2) assert errmsg in str(err.value)
def test_addInvariants(self, invs1, invs2): n1 = makeEmptyNode('123456789017') n2 = makeEmptyNode('123456789013') n1.invar = invs1 n2.invar = invs2 sum_inv = GeounitNode.addInvariants(n1, n2) assert set(sum_inv.keys()) == set(invs1.keys()) assert set(sum_inv.keys()) == set(invs2.keys()) for invname in sum_inv.keys(): assert np.array_equal(invs1[invname] + invs2[invname], sum_inv[invname])
def test_addGeounitNodes(self, addsyn, ic, dpq_make, add_dpqueries, add_querydict): geocode_dict = { 16: 'Block', 12: 'Block_Group', 11: 'Tract', 5: 'County', 2: 'State', 1: 'US' } node1 = makeNode(d1, '12', geocode_dict=geocode_dict, addsyn=addsyn, dpq_make=dpq_make, querydict=add_querydict) node2 = makeNode(d2, '12', geocode_dict=geocode_dict, addsyn=addsyn, dpq_make=dpq_make, querydict=add_querydict) node_sum = node1.addInReduce(node2, inv_con=ic, add_dpqueries=add_dpqueries) assert node_sum.raw == node1.raw + node2.raw if addsyn: assert np.array_equal(node_sum.syn, node1.syn + node2.syn) else: assert node_sum.syn is None if ic: # Check if constraints are summed for cons_name in set(consn): assert node_sum.cons[cons_name] == (node1.cons + node2.cons)[cons_name] # Check more in depth for cons_name in set(consn): sign = node_sum.cons[cons_name].sign assert sign == node1.cons[cons_name].sign assert sign == node2.cons[cons_name].sign query = node_sum.cons[cons_name].query assert query == node1.cons[cons_name].query assert query == node2.cons[cons_name].query # # Removed checking constraints rhs, that is done in constraint creator testing # for cons_name in set(consn) - {'nurse_nva_0', }: # assert np.array_equal(node_sum.cons[cons_name].rhs, data1[cons_name] + data2[cons_name]) assert np.array_equal(node_sum.cons['nurse_nva_0'].rhs, np.array([0])) # Check if invariants are summed for inv_name in set(invn): assert np.all( node_sum.invar[inv_name] == GeounitNode.addInvariants( node1, node2)[inv_name]) else: assert not node_sum.cons and not node_sum.invar if add_dpqueries and dpq_make: assert node_sum.dp.Var == node1.dp.Var + node2.dp.Var assert np.array_equal(node_sum.unzipNoisy().dp.DPanswer, node1.dp.DPanswer + node2.dp.DPanswer) else: assert node_sum.dp is None if add_dpqueries and add_querydict: for name, query in node_sum.dp_queries.items(): assert query.Var == node1.dp_queries[ name].Var + node2.dp_queries[name].Var assert np.array_equal( query.unzipDPanswer().DPanswer, node1.dp_queries[name].DPanswer + node2.dp_queries[name].DPanswer)