Exemple #1
0
    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)
Exemple #2
0
    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])
Exemple #3
0
    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)