def test_from_repr(self):
        msg = Message('test', 'str_content')

        r = simple_repr(msg)
        msg2 = from_repr(r)

        self.assertEqual(msg, msg2)
예제 #2
0
    def test_from_repr(self):
        domain = VariableDomain('d', 'd', [1, 2, 3, 4])
        v = ExternalVariable('v', domain, value=1)

        r = simple_repr(v)
        v1 = from_repr(r)
        self.assertEqual(v, v1)
예제 #3
0
    def test_from_repr(self):
        msg = Message("test", "str_content")

        r = simple_repr(msg)
        msg2 = from_repr(r)

        self.assertEqual(msg, msg2)
예제 #4
0
    def do_POST(self):
        sender, dest = None, None
        type = MSG_ALGO
        if 'sender-agent' in self.headers:
            sender = self.headers['sender-agent']
        if 'dest-agent' in self.headers:
            dest = self.headers['dest-agent']
        src_comp, dest_comp = None, None
        if 'sender-comp' in self.headers:
            src_comp = self.headers['sender-comp']
        if 'dest-comp' in self.headers:
            dest_comp = self.headers['dest-comp']
        if 'type' in self.headers:
            type = self.headers['type']

        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)
        content = json.loads(str(post_data, "utf-8"))

        comp_msg = ComputationMessage(src_comp, dest_comp, from_repr(content),
                                      int(type))
        try:
            self.server.comm.on_post_message(self.path, sender, dest, comp_msg)

            # Always answer 200, as the actual message is not processed yet by
            # the target computation.
            self.send_response(200)
            self.send_header("Content-type", "text/plain")
            self.end_headers()

        except UnknownComputation as e:
            # if the requested computation is not hosted here
            self.send_response(404, str(e))
            self.send_header("Content-type", "text/plain")
            self.end_headers()
def test_message_factory_serialization():

    MyMessage = message_type('my_msg', ['foo', 'bar'])
    msg = MyMessage(42, 21)
    r = simple_repr(msg)
    print(r)
    obtained = from_repr(r)
    assert msg == obtained
    def test_from_repr_dist_attr(self):

        a = A('foo', {'a': 1, 'b': 2})
        r = a._simple_repr()

        b = from_repr(r)
        self.assertEqual(b._attr1, a._attr1)
        self.assertEqual(b._attr2, a._attr2)
    def test_from_repr_list_attr(self):

        a = A('foo', [1, 2, 3])
        r = a._simple_repr()

        b = from_repr(r)
        self.assertEqual(b._attr1, a._attr1)
        self.assertEqual(b._attr2, a._attr2)
def test_message_factory_serialization():

    MyMessage = message_type("my_msg", ["foo", "bar"])
    msg = MyMessage(42, 21)
    r = simple_repr(msg)
    print(r)
    obtained = from_repr(r)
    assert msg == obtained
    def test_from_repr_simple_attr_only(self):

        a = A('foo', 'bar')
        r = a._simple_repr()

        b = from_repr(r)
        self.assertTrue(isinstance(b, A))
        self.assertEqual(b._attr1, 'foo')
        self.assertEqual(b._attr2, 'bar')
예제 #10
0
 def _from_repr(cls, r):
     params = r['params']
     del r['params']
     args = {
         k: from_repr(v)
         for k, v in r.items() if k not in ['__qualname__', '__module__']
     }
     algo = cls(**args, params=params)
     return algo
예제 #11
0
    def test_from_repr(self):

        a = AlgoDef('maxsum', 'min', stability_coef=0.01)

        r = simple_repr(a)
        a2 = from_repr(r)

        self.assertEqual(a, a2)
        self.assertEqual(a2.param_value('stability_coef'), 0.01)
예제 #12
0
def test_from_repr():

    a = AlgorithmDef("maxsum", {"stability": 0.01}, "min")

    r = simple_repr(a)
    a2 = from_repr(r)

    assert a == a2
    assert a2.param_value("stability") == 0.01
예제 #13
0
 def _from_repr(cls, r):
     fixed_vars = r['fixed_vars']
     del r['fixed_vars']
     args = {
         k: from_repr(v)
         for k, v in r.items() if k not in ['__qualname__', '__module__']
     }
     exp_fct = cls(**args, **fixed_vars)
     return exp_fct
예제 #14
0
    def test_from_repr_with_expression_function(self):
        domain = VariableDomain('d', 'd', [1, 2, 3, 4])
        cost_func = ExpressionFunction('v / 2')
        v = VariableWithCostFunc('v', domain, cost_func=cost_func)

        r = simple_repr(v)
        v2 = from_repr(r)

        self.assertEqual(v2.cost_for_val(2), v.cost_for_val(2))
        self.assertEqual(v2, v)
예제 #15
0
def test_pathtable_unserialize():
    p1 = ("a2", "a3")
    p2 = ("a2", "a4")
    table = [(2, p1), (3, p2)]

    r = simple_repr(table)
    assert r

    obtained = from_repr(r)
    assert obtained == table
예제 #16
0
    def test_from_simple_repr(self):
        f = ExpressionFunction('a + b ')
        self.assertEqual(f.expression, 'a + b ')

        r = simple_repr(f)
        f2 = from_repr(r)

        self.assertEqual(f(a=2, b=3), f2(a=2, b=3))
        self.assertEqual(f2(a=2, b=3), 5)
        self.assertEqual(f, f2)
예제 #17
0
    def test_from_repr_on_partial(self):
        f = ExpressionFunction('a + b')
        fp = f.partial(a=2)

        r = simple_repr(fp)
        f1 = from_repr(r)
        print(r)

        self.assertEqual(f1(b=3), 5)
        self.assertEqual(f1(b=5), f(a=2, b=5))
    def test_from_repr_object_attr(self):

        a2 = A('foo2', 'bar2')
        a = A('foo', a2)
        r = a._simple_repr()

        b = from_repr(r)
        self.assertIsInstance(b, A)
        self.assertEqual(b._attr1, 'foo')
        self.assertEqual(b._attr2._attr1, 'foo2')
        self.assertEqual(b._attr2._attr2, 'bar2')
예제 #19
0
def test_var_node_simple_repr():
    d = Domain('d', 'test', [1, 2, 3])
    v1 = Variable('v1', d)
    c1 = constraint_from_str('c1', 'v1 * 0.5', [v1])

    cv1 = VariableComputationNode(v1, [c1])

    r = simple_repr(cv1)
    cv1_obtained = from_repr(r)

    assert cv1 == cv1_obtained
    def test_namedtuple(self):

        # Named = namedtuple('Named', ['foo', 'bar'])
        n = Named(1, 2)
        r = simple_repr(n)

        self.assertEqual(r['foo'], 1)
        self.assertEqual(r['bar'], 2)

        obtained = from_repr(r)

        self.assertEqual(obtained, n)
    def test_namedtuple_complex(self):

        # Named = namedtuple('Named', ['foo', 'bar'])
        n = Named({'a': 1, 'b': 2}, [1, 2, 3, 5])
        r = simple_repr(n)

        self.assertEqual(r['foo'], {'a': 1, 'b': 2})
        self.assertEqual(r['bar'], [1, 2, 3, 5])

        obtained = from_repr(r)

        self.assertEqual(obtained, n)
def test_node_simplerepr():
    n1 = ComputationNode('n1', neighbors=['n2', 'n3', 'n4'])

    r1 = simple_repr(n1)

    obtained = from_repr(r1)

    assert n1 == obtained
    assert 'n2' in n1.neighbors
    assert 'n3' in n1.neighbors
    assert 'n4' in n1.neighbors
    assert len(n1.links) == 3
    def test_from_repr_list_of_objects(self):

        a2 = A('foo2', 'bar2')
        a3 = A('foo3', 'bar3')
        a = A('foo', [a2, a3])
        r = a._simple_repr()

        b = from_repr(r)
        self.assertIsInstance(b, A)
        self.assertEqual(b._attr1, 'foo')
        self.assertTrue(isinstance(b._attr2, list))
        self.assertEqual(b._attr2[0]._attr1, 'foo2')
        self.assertEqual(b._attr2[1]._attr2, 'bar3')
def test_variablenode_simple_repr():
    d1 = Domain('d1', '', [1, 2, 3, 5])
    v1 = Variable('v1', d1)
    f1 = constraint_from_str('f1', 'v1 * 0.5', [v1])

    cv1 = VariableComputationNode(v1, ['f1'])
    cf1 = FactorComputationNode(f1, )

    r = simple_repr(cv1)
    obtained = from_repr(r)

    assert obtained == cv1
    assert cv1.variable == obtained.variable
예제 #25
0
    def test_from_repr_with_expression_function(self):
        domain = VariableDomain('d', 'd', [1, 2, 3, 4])
        cost_func = ExpressionFunction('v / 2')
        v = VariableNoisyCostFunc('v', domain, cost_func=cost_func)

        r = simple_repr(v)
        v2 = from_repr(r)

        # Due to the noise, the cost will de different
        c1 = v2.cost_for_val(2)
        c2 = v.cost_for_val(2)
        self.assertLessEqual(abs(c1 - c2), v.noise_level * 2)

        self.assertEquals(v2, v)
예제 #26
0
    def test_serialize_repr(self):
        # Make sure that even after serialization / deserialization,
        # from_repr and simple_repr still produce equal messages.
        # This has been causing problems with maxsum costs dict where key
        # were integers

        msg = MaxSumMessage({1: 10, 2: 20})
        r = simple_repr(msg)
        msg_json = json.dumps(r)

        r2 = json.loads(msg_json)
        msg2 = from_repr(r2)

        self.assertEqual(msg, msg2)
예제 #27
0
def test_link_simple_repr():
    d = Domain('d', 'test', [1, 2, 3])
    v1 = Variable('v1', d)
    v2 = Variable('v2', d)
    v3 = Variable('v3', d)
    c1 = constraint_from_str('c1', 'v1 * 0.5 + v2 - v3', [v1, v2, v3])

    cv1 = VariableComputationNode(v1, [c1])
    cv2 = VariableComputationNode(v2, [c1])
    cv3 = VariableComputationNode(v3, [c1])

    link = ConstraintLink(c1.name, ['c1', 'c2', 'c3'])

    r = simple_repr(link)
    link_obtained = from_repr(r)

    assert link == link_obtained
def test_unserialization_msg():
    p1 = ("1", "2", "2")
    table = [(3, p1)]

    msg = UCSReplicateMessage("msg_type", 0, 0, p1, table, ["1", "2"], None, 5,
                              2, [])

    r = simple_repr(msg)
    assert r
    # simply taking a simple_repr does not ensure that the json serialization is valid
    json_msg = json.dumps(r)
    loaded = json.loads(json_msg)

    obtained = from_repr(loaded)
    assert obtained

    assert obtained == msg
예제 #29
0
    def do_POST(self):
        sender, dest = None, None
        type = MSG_ALGO
        if "sender-agent" in self.headers:
            sender = self.headers["sender-agent"]
        if "dest-agent" in self.headers:
            dest = self.headers["dest-agent"]
        src_comp, dest_comp = None, None
        if "sender-comp" in self.headers:
            src_comp = self.headers["sender-comp"]
        if "dest-comp" in self.headers:
            dest_comp = self.headers["dest-comp"]
        if "type" in self.headers:
            type = self.headers["type"]

        content_length = int(self.headers["Content-Length"])
        post_data = self.rfile.read(content_length)
        try:
            content = json.loads(str(post_data, "utf-8"))
        except JSONDecodeError as jde:
            print(jde)
            print(post_data)
            raise jde

        comp_msg = ComputationMessage(src_comp, dest_comp, from_repr(content),
                                      int(type))
        try:
            self.server.comm.on_post_message(self.path, sender, dest, comp_msg)

            # Always answer 200, as the actual message is not processed yet by
            # the target computation.
            self.send_response(200)
            self.send_header("Content-type", "text/plain")
            self.end_headers()

        except UnknownComputation as e:
            # if the requested computation is not hosted here
            self.send_response(404, str(e))
            self.send_header("Content-type", "text/plain")
            self.end_headers()
예제 #30
0
def test_path_unserialize():
    given = ("a2", "a3", "__hosting__")
    r = simple_repr(given)

    obtained = from_repr(r)
    assert given == obtained