示例#1
0
    def zip(self, pt):
        """Zip skeleton for distributed tree

        Precondition
        -------------
        The distributions of self and pt should be the same

        Parameters
        ----------
        pt : :obj:`PTree`
            The PTree to zip with the current instance
        """
        logger.debug(
            '[START] PID[' + str(PID) + '] zip skeleton')
        assert self.__distribution == pt.__distribution
        content = SList([None] * self.__content.length())
        for i in range(len(self.__global_index[self.__start_index: self.__start_index + self.__nb_segs])):
            (start, offset) = self.__global_index[self.__start_index: self.__start_index + self.__nb_segs][i]
            logger.debug('[START] PID[' + str(PID) + '] zip_local from ' + str(start) + ' to ' + str(start + offset))
            content[start:start + offset] = Segment(self.__content[start:start+offset]).\
                zip(Segment(pt.__content[start:start+offset]))
            logger.debug('[END] PID[' + str(PID) + '] zip_local from ' + str(start) + ' to ' + str(start + offset))
        res = PTree.init(self, content)
        logger.debug(
            '[END] PID[' + str(PID) + '] zip skeleton')
        return res
示例#2
0
def test_serialization_2_5():
    # btree5
    bt = Node(
        13, Node(3, Leaf(1), Leaf(1)),
        Node(9, Node(7, Node(3, Leaf(1), Leaf(1)), Node(3, Leaf(1), Leaf(1))),
             Leaf(1)))
    m = 5
    res = LTree.init_from_bt(bt, m)
    seg1 = Segment([TaggedValue(13, "C")])
    seg2 = Segment(
        [TaggedValue(3, "N"),
         TaggedValue(1, "L"),
         TaggedValue(1, "L")])
    seg3 = Segment(
        [TaggedValue(9, "N"),
         TaggedValue(7, "C"),
         TaggedValue(1, "L")])
    seg4 = Segment(
        [TaggedValue(3, "N"),
         TaggedValue(1, "L"),
         TaggedValue(1, "L")])
    seg5 = Segment(
        [TaggedValue(3, "N"),
         TaggedValue(1, "L"),
         TaggedValue(1, "L")])
    exp = LTree([seg1, seg2, seg3, seg4, seg5])
    assert res == exp
示例#3
0
def test_has_critical_no():
    val1 = TaggedValue(1, "N")
    val2 = TaggedValue(2, "L")
    seg = Segment([val1, val2])
    exp = False
    res = seg.has_critical()
    assert exp == res
示例#4
0
def test_uacc_global_has_critical():
    seg = Segment(
        [TaggedValue(1, "N"),
         TaggedValue(2, "C"),
         TaggedValue(2, "L")])
    with pytest.raises(AssertionError):
        seg.uacc_global(fun.add)
示例#5
0
def test_deserialization_2_3():
    # btree5
    exp = Node(
        13, Node(3, Leaf(1), Leaf(1)),
        Node(9, Node(7, Node(3, Leaf(1), Leaf(1)), Node(3, Leaf(1), Leaf(1))),
             Leaf(1)))
    seg1 = Segment([TaggedValue(13, "C")])
    seg2 = Segment(
        [TaggedValue(3, "N"),
         TaggedValue(1, "L"),
         TaggedValue(1, "L")])
    seg3 = Segment(
        [TaggedValue(9, "N"),
         TaggedValue(7, "C"),
         TaggedValue(1, "L")])
    seg4 = Segment(
        [TaggedValue(3, "N"),
         TaggedValue(1, "L"),
         TaggedValue(1, "L")])
    seg5 = Segment(
        [TaggedValue(3, "N"),
         TaggedValue(1, "L"),
         TaggedValue(1, "L")])
    lt = LTree([seg1, seg2, seg3, seg4, seg5])
    res = lt.deserialization()
    assert res == exp
示例#6
0
文件: ptree.py 项目: Iguane45/PySke
    def map2(self, f, pt):
        """Map2 skeleton for distributed tree

        Precondition
        -------------
        The distributions of self and pt should be the same

        Parameters
        ----------
        pt : :obj:`LTree`
            The LTree to zip with the current instance
        f : callable
            A function to zip values
        """
        logger.debug('[START] PID[%s] map2 skeleton', PID)
        assert self.__distribution == pt.distribution
        content = SList([None] * self.__content.length())
        for i in range(
                len(self.__global_index[self.__start_index:self.__start_index +
                                        self.__nb_segs])):
            (start, offset
             ) = self.__global_index[self.__start_index:self.__start_index +
                                     self.__nb_segs][i]
            logger.debug('[START] PID[%s] map2_local from %s to %s', PID,
                         start, start + offset)
            content[start:start + offset] = Segment(self.__content[start:start + offset]). \
                map2(f, Segment(pt.content[start:start + offset]))
            logger.debug('[END] PID[%s] map2_local from %s to %s', PID, start,
                         start + offset)
        res = PTree.init(self, content)
        logger.debug('[END] PID[%s] map2 skeleton', PID)
        return res
示例#7
0
def test_reduce_local_leaf():
    seg = Segment(
        [TaggedValue(1, "N"),
         TaggedValue(2, "L"),
         TaggedValue(3, "L")])
    res = seg.reduce_local(fun.add, fun.idt, fun.add, fun.add)
    exp = TaggedValue(6, "L")
    assert res == exp
示例#8
0
def test_get_right_has_critical():
    gt = Segment(
        [TaggedValue(2, "N"),
         TaggedValue(1, "C"),
         TaggedValue(2, "L")])
    i = 0
    with pytest.raises(AssertionError):
        gt.get_right(i)
示例#9
0
def test_dacc_global_has_critical():
    seg = Segment(
        [TaggedValue(1, "N"),
         TaggedValue(1, "C"),
         TaggedValue(1, "L")])
    c = 2
    with pytest.raises(AssertionError):
        seg.dacc_global(operator.add, c)
示例#10
0
def test_zip_not_equal_size_error():
    seg1 = Segment(
        [TaggedValue(2, "N"),
         TaggedValue(1, "L"),
         TaggedValue(2, "L")])
    seg2 = Segment([TaggedValue(2, "L")])
    with pytest.raises(AssertionError):
        seg1.zip(seg2)
示例#11
0
def test_get_right_is_leaf():
    gt = Segment(
        [TaggedValue(2, "N"),
         TaggedValue(1, "L"),
         TaggedValue(2, "L")])
    i = 1
    with pytest.raises(AssertionError):
        gt.get_right(i)
示例#12
0
def test_has_critical_yes():
    val1 = TaggedValue(1, "N")
    val2 = TaggedValue(2, "L")
    val3 = TaggedValue(3, "C")
    seg = Segment([val1, val2, val3])
    exp = True
    res = seg.has_critical()
    assert exp == res
示例#13
0
def test_zipwith_not_equal_size_error():
    seg1 = Segment(
        [TaggedValue(2, "N"),
         TaggedValue(1, "L"),
         TaggedValue(2, "L")])
    seg2 = Segment([TaggedValue(2, "L")])
    with pytest.raises(AssertionError):
        seg1.map2(operator.add, seg2)
示例#14
0
def test_from_str():
    s = "[(11^N); (2^L); (3^C)]"
    res = Segment.from_str(s)
    exp = Segment(
        [TaggedValue(11, "N"),
         TaggedValue(2, "L"),
         TaggedValue(3, "C")])
    assert res == exp
示例#15
0
def test_reduce_global_node():
    seg = Segment(
        [TaggedValue(2, "N"),
         TaggedValue(2, "L"),
         TaggedValue(2, "L")])
    res = seg.reduce_global(fun.add)
    exp = 6
    assert res == exp
示例#16
0
def test_uacc_update_empty():
    seg = Segment()
    gt = Segment()
    lc = 1
    rc = 2
    res = seg.uacc_update(gt, fun.add, lc, rc)
    exp = Segment()
    assert res == exp
示例#17
0
def test_uacc_illformed():
    seg1 = Segment([TaggedValue(13, "C")])
    seg3 = Segment(
        [TaggedValue(72, "N"),
         TaggedValue(92, "L"),
         TaggedValue(42, "L")])
    lt = LTree([seg1, seg3])
    with pytest.raises(IllFormedError):
        lt.uacc(fun.add, fun.idt, fun.add, fun.add, fun.add)
示例#18
0
def test_get_right_direct():
    gt = Segment(
        [TaggedValue(2, "N"),
         TaggedValue(1, "L"),
         TaggedValue(2, "L")])
    i = 0
    res = gt.get_right(i)
    exp = TaggedValue(2, "L")
    assert res == exp
示例#19
0
def test_uacc_local_prefix_1():
    seg = Segment(
        [TaggedValue(1, "N"),
         TaggedValue(2, "C"),
         TaggedValue((0, 1), "L")])
    res = seg.uacc_local(k, phi, psi_l, psi_r)
    exp = (TaggedValue((0, 1, 1, 4),
                       "N"), Segment([None, None,
                                      TaggedValue((0, 1), "L")]))
    assert res == exp
示例#20
0
def test_map2():
    seg11 = Segment([TaggedValue(1, "C")])
    seg21 = Segment(
        [TaggedValue(1, "N"),
         TaggedValue(1, "L"),
         TaggedValue(1, "L")])
    seg31 = Segment(
        [TaggedValue(1, "N"),
         TaggedValue(1, "L"),
         TaggedValue(1, "L")])
    lt1 = LTree([seg11, seg21, seg31])
    seg12 = Segment([TaggedValue(2, "C")])
    seg22 = Segment(
        [TaggedValue(2, "N"),
         TaggedValue(2, "L"),
         TaggedValue(2, "L")])
    seg32 = Segment(
        [TaggedValue(2, "N"),
         TaggedValue(2, "L"),
         TaggedValue(2, "L")])
    lt2 = LTree([seg12, seg22, seg32])
    res = lt1.map2(operator.add, lt2)
    seg1_exp = Segment([TaggedValue(3, "C")])
    seg2_exp = Segment(
        [TaggedValue(3, "N"),
         TaggedValue(3, "L"),
         TaggedValue(3, "L")])
    seg3_exp = Segment(
        [TaggedValue(3, "N"),
         TaggedValue(3, "L"),
         TaggedValue(3, "L")])
    exp = LTree([seg1_exp, seg2_exp, seg3_exp])
    assert res == exp
示例#21
0
def test_zip():
    seg11 = Segment([TaggedValue(1, "C")])
    seg21 = Segment(
        [TaggedValue(1, "N"),
         TaggedValue(1, "L"),
         TaggedValue(1, "L")])
    seg31 = Segment(
        [TaggedValue(1, "N"),
         TaggedValue(1, "L"),
         TaggedValue(1, "L")])
    lt1 = LTree([seg11, seg21, seg31])
    seg12 = Segment([TaggedValue(2, "C")])
    seg22 = Segment(
        [TaggedValue(2, "N"),
         TaggedValue(2, "L"),
         TaggedValue(2, "L")])
    seg32 = Segment(
        [TaggedValue(2, "N"),
         TaggedValue(2, "L"),
         TaggedValue(2, "L")])
    lt2 = LTree([seg12, seg22, seg32])
    res = lt1.zip(lt2)
    seg1_exp = Segment([TaggedValue((1, 2), "C")])
    seg2_exp = Segment([
        TaggedValue((1, 2), "N"),
        TaggedValue((1, 2), "L"),
        TaggedValue((1, 2), "L")
    ])
    seg3_exp = Segment([
        TaggedValue((1, 2), "N"),
        TaggedValue((1, 2), "L"),
        TaggedValue((1, 2), "L")
    ])
    exp = LTree([seg1_exp, seg2_exp, seg3_exp])
    assert res == exp
示例#22
0
def test_map_local():
    seg = Segment(
        [TaggedValue(1, "N"),
         TaggedValue(2, "L"),
         TaggedValue(3, "C")])
    res = seg.map_local(lambda x: x + 1, lambda x: x - 1)
    exp = Segment(
        [TaggedValue(0, "N"),
         TaggedValue(3, "L"),
         TaggedValue(2, "C")])
    assert exp == res
示例#23
0
def test_zipwith_not_same_tag_error():
    seg1 = Segment(
        [TaggedValue(2, "N"),
         TaggedValue(1, "L"),
         TaggedValue(2, "L")])
    seg2 = Segment(
        [TaggedValue(2, "N"),
         TaggedValue(1, "C"),
         TaggedValue(2, "L")])
    with pytest.raises(NotSameTagError):
        seg1.map2(operator.add, seg2)
示例#24
0
def test_zip_not_same_tag_error():
    seg1 = Segment(
        [TaggedValue(2, "N"),
         TaggedValue(1, "L"),
         TaggedValue(2, "L")])
    seg2 = Segment(
        [TaggedValue(2, "N"),
         TaggedValue(1, "C"),
         TaggedValue(2, "L")])
    with pytest.raises(NotSameTagError):
        seg1.zip(seg2)
示例#25
0
def test_dacc_path_gt_node():
    seg = Segment([
        TaggedValue(1, "N"),
        TaggedValue(2, "L"),
        TaggedValue(1, "N"),
        TaggedValue(2, "L"),
        TaggedValue(3, "C")
    ])
    res = seg.dacc_path(fun.idt, fun.idt, operator.add)
    exp = TaggedValue((5, 5), "N")
    assert res == exp
示例#26
0
def test_uacc_global_prefix():
    gt = Segment([
        TaggedValue((0, 1, 1, 4), "N"),
        TaggedValue((1, 3), "L"),
        TaggedValue((1, 3), "L")
    ])
    res = gt.uacc_global(psi_n)
    exp = Segment([
        TaggedValue((8, 11), "N"),
        TaggedValue((1, 3), "L"),
        TaggedValue((1, 3), "L")
    ])
    assert res == exp
示例#27
0
def test_uacc_update_not_same_size():
    seg = Segment([
        TaggedValue(1, "N"),
        TaggedValue(2, "L"),
        TaggedValue(1, "N"),
        TaggedValue(2, "L"),
        TaggedValue(3, "L")
    ])
    gt = Segment()
    lc = 1
    rc = 2
    with pytest.raises(AssertionError):
        seg.uacc_update(gt, fun.add, lc, rc)
示例#28
0
def test_uacc_update_illformed_critical():
    seg = Segment(
        [TaggedValue(1, "N"),
         TaggedValue(2, "C"),
         TaggedValue(1, "N")])
    gt = Segment(
        [TaggedValue(1, "N"),
         TaggedValue(2, "L"),
         TaggedValue(1, "L")])
    lc = 1
    rc = 2
    with pytest.raises(IllFormedError):
        seg.uacc_update(gt, fun.add, lc, rc)
示例#29
0
def test_reduce():
    seg1 = Segment([TaggedValue(13, "C")])
    seg2 = Segment(
        [TaggedValue(31, "N"),
         TaggedValue(47, "L"),
         TaggedValue(32, "L")])
    seg3 = Segment(
        [TaggedValue(72, "N"),
         TaggedValue(92, "L"),
         TaggedValue(42, "L")])
    lt = LTree([seg1, seg2, seg3])
    res = lt.reduce(fun.add, fun.idt, fun.add, fun.add, fun.add)
    exp = 13 + 31 + 47 + 32 + 72 + 92 + 42
    assert res == exp
示例#30
0
def test_uacc_local_prefix_3():
    seg = Segment([
        TaggedValue(5, "N"),
        TaggedValue((0, 1), "L"),
        TaggedValue((0, 1), "L")
    ])
    res = seg.uacc_local(k, phi, psi_l, psi_r)
    exp = (TaggedValue((1, 3), "L"),
           Segment([
               TaggedValue((1, 3), "N"),
               TaggedValue((0, 1), "L"),
               TaggedValue((0, 1), "L")
           ]))
    assert res == exp