示例#1
0
def test_record():
    array1 = awkward1.from_iter([{
        "x": 1,
        "y": 1.1
    }, {
        "x": 2,
        "y": 2.2
    }, {
        "x": 3,
        "y": 3.3
    }],
                                highlevel=False)
    assert awkward1.to_list(array1) == [{
        "x": 1,
        "y": 1.1
    }, {
        "x": 2,
        "y": 2.2
    }, {
        "x": 3,
        "y": 3.3
    }]

    array2 = array1.setitem_field(
        "z", awkward1.from_iter([[], [1], [2, 2]], highlevel=False))
    assert awkward1.to_list(array2) == [{
        "x": 1,
        "y": 1.1,
        "z": []
    }, {
        "x": 2,
        "y": 2.2,
        "z": [1]
    }, {
        "x": 3,
        "y": 3.3,
        "z": [2, 2]
    }]

    array3 = array1.setitem_field(
        None, awkward1.from_iter([[], [1], [2, 2]], highlevel=False))
    assert awkward1.to_list(array3) == [{
        "x": 1,
        "y": 1.1,
        "2": []
    }, {
        "x": 2,
        "y": 2.2,
        "2": [1]
    }, {
        "x": 3,
        "y": 3.3,
        "2": [2, 2]
    }]

    array3 = array1.setitem_field(
        0, awkward1.from_iter([[], [1], [2, 2]], highlevel=False))
    assert awkward1.to_list(array3) == [{
        "x": 1,
        "y": 1.1,
        "0": []
    }, {
        "x": 2,
        "y": 2.2,
        "0": [1]
    }, {
        "x": 3,
        "y": 3.3,
        "0": [2, 2]
    }]

    array1 = awkward1.from_iter([(1, 1.1), (2, 2.2), (3, 3.3)],
                                highlevel=False)
    assert awkward1.to_list(array1) == [(1, 1.1), (2, 2.2), (3, 3.3)]

    array2 = array1.setitem_field(
        "z", awkward1.from_iter([[], [1], [2, 2]], highlevel=False))
    assert awkward1.to_list(array2) == [{
        "0": 1,
        "1": 1.1,
        "z": []
    }, {
        "0": 2,
        "1": 2.2,
        "z": [1]
    }, {
        "0": 3,
        "1": 3.3,
        "z": [2, 2]
    }]

    array3 = array1.setitem_field(
        None, awkward1.from_iter([[], [1], [2, 2]], highlevel=False))
    assert awkward1.to_list(array3) == [(1, 1.1, []), (2, 2.2, [1]),
                                        (3, 3.3, [2, 2])]

    array3 = array1.setitem_field(
        0, awkward1.from_iter([[], [1], [2, 2]], highlevel=False))
    assert awkward1.to_list(array3) == [([], 1, 1.1), ([1], 2, 2.2),
                                        ([2, 2], 3, 3.3)]

    array3 = array1.setitem_field(
        1, awkward1.from_iter([[], [1], [2, 2]], highlevel=False))
    assert awkward1.to_list(array3) == [(1, [], 1.1), (2, [1], 2.2),
                                        (3, [2, 2], 3.3)]

    array3 = array1.setitem_field(
        100, awkward1.from_iter([[], [1], [2, 2]], highlevel=False))
    assert awkward1.to_list(array3) == [(1, 1.1, []), (2, 2.2, [1]),
                                        (3, 3.3, [2, 2])]
def test_fromiter():
    assert awkward1.to_list(awkward1.from_iter([True, True, False, False, True])) == [True, True, False, False, True]
    assert awkward1.to_list(awkward1.from_iter([5, 4, 3, 2, 1])) == [5, 4, 3, 2, 1]
    assert awkward1.to_list(awkward1.from_iter([5, 4, 3.14, 2.22, 1.23])) == [5.0, 4.0, 3.14, 2.22, 1.23]
    assert awkward1.to_list(awkward1.from_iter([[1.1, 2.2, 3.3], [], [4.4, 5.5]])) == [[1.1, 2.2, 3.3], [], [4.4, 5.5]]
    assert awkward1.to_list(awkward1.from_iter([[[1.1, 2.2, 3.3], []], [[4.4, 5.5]], [], [[6.6], [7.7, 8.8, 9.9]]])) == [[[1.1, 2.2, 3.3], []], [[4.4, 5.5]], [], [[6.6], [7.7, 8.8, 9.9]]]
def test_fromiter():
    dataset = [
        [(1, 1.1), (2, 2.2), (3, 3.3)],
        [(1, [1.1, 2.2, 3.3]), (2, []), (3, [4.4, 5.5])],
        [[(1, 1.1), (2, 2.2), (3, 3.3)], [], [(4, 4.4), (5, 5.5)]],
        [((1, 1), 1.1), ((2, 2), 2.2), ((3, 3), 3.3)],
        [({
            "x": 1,
            "y": 1
        }, 1.1), ({
            "x": 2,
            "y": 2
        }, 2.2), ({
            "x": 3,
            "y": 3
        }, 3.3)],
        [{
            "one": 1,
            "two": 1.1
        }, {
            "one": 2,
            "two": 2.2
        }, {
            "one": 3,
            "two": 3.3
        }],
        [{
            "one": 1,
            "two": [1.1, 2.2, 3.3]
        }, {
            "one": 2,
            "two": []
        }, {
            "one": 3,
            "two": [4.4, 5.5]
        }],
        [[{
            "one": 1,
            "two": 1.1
        }, {
            "one": 2,
            "two": 2.2
        }, {
            "one": 3,
            "two": 3.3
        }], [], [{
            "one": 4,
            "two": 4.4
        }, {
            "one": 5,
            "two": 5.5
        }]],
        [{
            "one": {
                "x": 1,
                "y": 1
            },
            "two": 1.1
        }, {
            "one": {
                "x": 2,
                "y": 2
            },
            "two": 2.2
        }, {
            "one": {
                "x": 3,
                "y": 3
            },
            "two": 3.3
        }],
        [{
            "one": (1, 1),
            "two": 1.1
        }, {
            "one": (2, 2),
            "two": 2.2
        }, {
            "one": (3, 3),
            "two": 3.3
        }],
    ]
    for datum in dataset:
        assert awkward1.to_list(awkward1.from_iter(datum)) == datum
def test_merge_parameters():
    one = awkward1.from_iter([[121, 117, 99, 107, 121], [115, 116, 117, 102, 102]], highlevel=False)
    two = awkward1.from_iter(["good", "stuff"], highlevel=False)

    assert awkward1.to_list(one.merge(two)) == [[121, 117, 99, 107, 121], [115, 116, 117, 102, 102], "good", "stuff"]
    assert awkward1.to_list(two.merge(one)) == ["good", "stuff", [121, 117, 99, 107, 121], [115, 116, 117, 102, 102]]
示例#5
0
def test_flatten_IndexedArray():
    array = awkward1.Array([[1.1, 2.2, None, 3.3], None, [], None, [4.4, 5.5],
                            None])
    assert awkward1.to_list(
        awkward1.flatten(array)) == [1.1, 2.2, None, 3.3, 4.4, 5.5]
    assert awkward1.to_list(awkward1.flatten(array[1:])) == [4.4, 5.5]

    array = awkward1.Array([[[0.0, 1.1, 2.2], None, None, [3.3, 4.4]], [],
                            [[5.5]], [[], [6.6, 7.7, 8.8, 9.9]]])
    assert awkward1.to_list(awkward1.flatten(
        array, axis=2)) == [[0.0, 1.1, 2.2, 3.3, 4.4], [], [5.5],
                            [6.6, 7.7, 8.8, 9.9]]
    assert awkward1.to_list(awkward1.flatten(array[1:],
                                             axis=2)) == [[], [5.5],
                                                          [6.6, 7.7, 8.8, 9.9]]
    assert awkward1.to_list(awkward1.flatten(array[:, 1:],
                                             axis=2)) == [[3.3, 4.4], [], [],
                                                          [6.6, 7.7, 8.8, 9.9]]

    array = awkward1.Array([[[0.0, 1.1, 2.2], [3.3, 4.4]], [], [[5.5]], None,
                            None, [[], [6.6, 7.7, 8.8, 9.9]]])
    assert awkward1.to_list(awkward1.flatten(
        array, axis=2)) == [[0.0, 1.1, 2.2, 3.3, 4.4], [], [5.5], None, None,
                            [6.6, 7.7, 8.8, 9.9]]
    assert awkward1.to_list(awkward1.flatten(array[1:],
                                             axis=2)) == [[], [5.5], None,
                                                          None,
                                                          [6.6, 7.7, 8.8, 9.9]]
    assert awkward1.to_list(awkward1.flatten(array[:, 1:],
                                             axis=2)) == [[3.3, 4.4], [], [],
                                                          None, None,
                                                          [6.6, 7.7, 8.8, 9.9]]

    array = awkward1.Array([[[0.0, 1.1, None, 2.2], None, [], None,
                             [3.3, 4.4]], None, [], [[5.5]], None,
                            [[], [6.6, None, 7.7, 8.8, 9.9], None]])
    assert awkward1.to_list(
        awkward1.flatten(array)) == [[0.0, 1.1, None, 2.2], None, [], None,
                                     [3.3, 4.4], [5.5], [],
                                     [6.6, None, 7.7, 8.8, 9.9], None]
    assert awkward1.to_list(awkward1.flatten(
        array, axis=2)) == [[0.0, 1.1, None, 2.2, 3.3, 4.4], None, [], [5.5],
                            None, [6.6, None, 7.7, 8.8, 9.9]]
    assert awkward1.to_list(awkward1.flatten(array[1:], axis=2)) == [
        None, [], [5.5], None, [6.6, None, 7.7, 8.8, 9.9]
    ]
    assert awkward1.to_list(awkward1.flatten(
        array[:, 1:], axis=2)) == [[3.3, 4.4], None, [], [], None,
                                   [6.6, None, 7.7, 8.8, 9.9]]

    content = awkward1.from_iter(
        [[0.0, 1.1, 2.2], [], [3.3, 4.4], [5.5], [6.6, 7.7, 8.8, 9.9]],
        highlevel=False)
    index = awkward1.layout.Index64(
        numpy.array([2, 1, 0, 3, 3, 4], dtype=numpy.int64))
    array = awkward1.Array(awkward1.layout.IndexedArray64(index, content))
    assert awkward1.to_list(array) == [[3.3, 4.4], [], [0.0, 1.1, 2.2], [5.5],
                                       [5.5], [6.6, 7.7, 8.8, 9.9]]
    assert awkward1.to_list(awkward1.flatten(array)) == [
        3.3, 4.4, 0.0, 1.1, 2.2, 5.5, 5.5, 6.6, 7.7, 8.8, 9.9
    ]

    content = awkward1.from_iter([[[0.0, 1.1, 2.2], [], [3.3, 4.4]], [],
                                  [[5.5]], [[], [6.6, 7.7, 8.8, 9.9]]],
                                 highlevel=False)
    index = awkward1.layout.Index64(
        numpy.array([2, 2, 1, 0, 3], dtype=numpy.int64))
    array = awkward1.Array(awkward1.layout.IndexedArray64(index, content))
    assert awkward1.to_list(array) == [[[5.5]], [[5.5]], [],
                                       [[0.0, 1.1, 2.2], [], [3.3, 4.4]],
                                       [[], [6.6, 7.7, 8.8, 9.9]]]
    assert awkward1.to_list(awkward1.flatten(
        array, axis=2)) == [[5.5], [5.5], [], [0.0, 1.1, 2.2, 3.3, 4.4],
                            [6.6, 7.7, 8.8, 9.9]]
def test_bitmaskedarray2b():
    array = awkward1.from_iter([[0.0, 1.1, 2.2], [3.3, 4.4], [5.5], [6.6, 7.7, 8.8, 9.9]], highlevel=False)
    mask = awkward1.layout.IndexU8(numpy.array([66], dtype=numpy.uint8))
    maskedarray = awkward1.layout.BitMaskedArray(mask, array, valid_when=False, length=4, lsb_order=True)  # lsb_order is irrelevant in this example
    assert awkward1.to_list(maskedarray) == [[0.0, 1.1, 2.2], None, [5.5], [6.6, 7.7, 8.8, 9.9]]
    assert awkward1.to_list(maskedarray[awkward1.Array([[1, 1], None, [0], [0, -1]])]) == [[1.1, 1.1], None, [5.5], [6.6, 9.9]]
def test_getitem_basic():
    one = awkward1.from_iter([[1.1, 2.2, 3.3], [], [4.4, 5.5]],
                             highlevel=False)
    two = awkward1.from_iter([[6.6], [], [], [], [7.7, 8.8, 9.9]],
                             highlevel=False)
    array = awkward1.partition.IrregularlyPartitionedArray([one, two])

    assert awkward1.to_list(array[0]) == [1.1, 2.2, 3.3]
    assert awkward1.to_list(array[1]) == []
    assert awkward1.to_list(array[2]) == [4.4, 5.5]
    assert awkward1.to_list(array[3]) == [6.6]
    assert awkward1.to_list(array[4]) == []
    assert awkward1.to_list(array[5]) == []
    assert awkward1.to_list(array[6]) == []
    assert awkward1.to_list(array[7]) == [7.7, 8.8, 9.9]
    assert awkward1.to_list(array[-1]) == [7.7, 8.8, 9.9]
    assert awkward1.to_list(array[-2]) == []
    assert awkward1.to_list(array[-3]) == []
    assert awkward1.to_list(array[-4]) == []
    assert awkward1.to_list(array[-5]) == [6.6]
    assert awkward1.to_list(array[-6]) == [4.4, 5.5]
    assert awkward1.to_list(array[-7]) == []
    assert awkward1.to_list(array[-8]) == [1.1, 2.2, 3.3]

    assert array[:].tojson(
    ) == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[],[],[],[7.7,8.8,9.9]]"
    assert array[2:6].tojson() == "[[4.4,5.5],[6.6],[],[]]"

    assert array[1:].tojson() == "[[],[4.4,5.5],[6.6],[],[],[],[7.7,8.8,9.9]]"
    assert array[2:].tojson() == "[[4.4,5.5],[6.6],[],[],[],[7.7,8.8,9.9]]"
    assert array[3:].tojson() == "[[6.6],[],[],[],[7.7,8.8,9.9]]"
    assert array[4:].tojson() == "[[],[],[],[7.7,8.8,9.9]]"
    assert array[5:].tojson() == "[[],[],[7.7,8.8,9.9]]"
    assert array[6:].tojson() == "[[],[7.7,8.8,9.9]]"
    assert array[7:].tojson() == "[[7.7,8.8,9.9]]"
    assert array[8:].tojson() == "[]"
    assert array[-1:].tojson() == "[[7.7,8.8,9.9]]"
    assert array[-2:].tojson() == "[[],[7.7,8.8,9.9]]"
    assert array[-3:].tojson() == "[[],[],[7.7,8.8,9.9]]"
    assert array[-4:].tojson() == "[[],[],[],[7.7,8.8,9.9]]"
    assert array[-5:].tojson() == "[[6.6],[],[],[],[7.7,8.8,9.9]]"
    assert array[-6:].tojson() == "[[4.4,5.5],[6.6],[],[],[],[7.7,8.8,9.9]]"
    assert array[-7:].tojson() == "[[],[4.4,5.5],[6.6],[],[],[],[7.7,8.8,9.9]]"
    assert array[-8:].tojson(
    ) == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[],[],[],[7.7,8.8,9.9]]"

    assert array[:-1].tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[],[],[]]"
    assert array[:-2].tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[],[]]"
    assert array[:-3].tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[]]"
    assert array[:-4].tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6]]"
    assert array[:-5].tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5]]"
    assert array[:-6].tojson() == "[[1.1,2.2,3.3],[]]"
    assert array[:-7].tojson() == "[[1.1,2.2,3.3]]"
    assert array[:-8].tojson() == "[]"
    assert array[:0].tojson() == "[]"
    assert array[:1].tojson() == "[[1.1,2.2,3.3]]"
    assert array[:2].tojson() == "[[1.1,2.2,3.3],[]]"
    assert array[:3].tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5]]"
    assert array[:4].tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6]]"
    assert array[:5].tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[]]"
    assert array[:6].tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[],[]]"
    assert array[:7].tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[],[],[]]"
    assert array[:8].tojson(
    ) == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[],[],[],[7.7,8.8,9.9]]"

    one = awkward1.from_iter([{
        "x": 0.0,
        "y": []
    }, {
        "x": 1.1,
        "y": [1]
    }, {
        "x": 2.2,
        "y": [2, 2]
    }],
                             highlevel=False)
    two = awkward1.from_iter([{
        "x": 3.3,
        "y": [3, 3, 3]
    }, {
        "x": 4.4,
        "y": [4, 4, 4, 4]
    }],
                             highlevel=False)
    array = awkward1.partition.IrregularlyPartitionedArray([one, two])

    if not awkward1._util.py27 and not awkward1._util.py35:
        assert array.tojson(
        ) == '[{"x":0.0,"y":[]},{"x":1.1,"y":[1]},{"x":2.2,"y":[2,2]},{"x":3.3,"y":[3,3,3]},{"x":4.4,"y":[4,4,4,4]}]'
        assert array["x"].tojson() == "[0.0,1.1,2.2,3.3,4.4]"
        assert array["y"].tojson() == "[[],[1],[2,2],[3,3,3],[4,4,4,4]]"
        assert array[[
            "x"
        ]].tojson() == '[{"x":0.0},{"x":1.1},{"x":2.2},{"x":3.3},{"x":4.4}]'
def test_indexedoptionarray():
    layout = awkward1.from_iter([[1.1, 2.2, 3.3], None, [], [4.4, 5.5], None, None, [6.6], [7.7, 8.8, 9.9]], highlevel=False)

    numbatype = awkward1._connect._numba.arrayview.tonumbatype(layout.form)
    assert awkward1_connect_numba_layout.typeof(layout).name == numbatype.name

    lookup1 = awkward1_connect_numba_arrayview.Lookup(layout)
    lookup2 = awkward1_connect_numba_arrayview.Lookup(layout.form)
    numbatype.form_fill(0, layout, lookup2)

    assert numpy.array_equal(lookup1.arrayptrs, lookup2.arrayptrs)
    assert numpy.array_equal(lookup1.sharedptrs == -1, lookup2.sharedptrs == -1)

    counter = [0]
    def materialize():
        counter[0] += 1
        return layout

    generator = awkward1.layout.ArrayGenerator(materialize, form=layout.form, length=len(layout))
    virtualarray = awkward1.layout.VirtualArray(generator)

    lookup3 = awkward1_connect_numba_arrayview.Lookup(virtualarray)
    assert len(lookup1.arrayptrs) + 3 == len(lookup3.arrayptrs)

    array = awkward1.Array(virtualarray)
    array.numba_type
    assert counter[0] == 0

    @numba.njit
    def f3(x):
        return x

    assert isinstance(f3(array).layout, awkward1.layout.VirtualArray)
    assert counter[0] == 0

    @numba.njit
    def f1(x):
        return x[3][1]

    assert f1(array) == 5.5
    assert counter[0] == 1

    assert f1(array) == 5.5
    assert counter[0] == 1

    @numba.njit
    def f2(x, i):
        return x[i]

    assert awkward1.to_list(f2(array, 3)) == [4.4, 5.5]
    assert counter[0] == 1

    assert awkward1.to_list(f2(array, 4)) == None
    assert counter[0] == 1

    assert awkward1.to_list(f2(array, 3)) == [4.4, 5.5]
    assert counter[0] == 1

    assert awkward1.to_list(f2(array, 4)) == None
    assert counter[0] == 1

    assert awkward1.to_list(f3(array)) == [[1.1, 2.2, 3.3], None, [], [4.4, 5.5], None, None, [6.6], [7.7, 8.8, 9.9]]
def test_bitmaskedarray():
    layout = awkward1.from_iter([[1.1, 2.2, 3.3], [999], [], [4.4, 5.5], [123, 321], [], [6.6], [7.7, 8.8, 9.9], [3, 2, 1]], highlevel=False)
    layout = awkward1.layout.BitMaskedArray(awkward1.layout.IndexU8(numpy.packbits(numpy.array([False, True, False, False, True, True, False, False, False, True, True, True, True, True, True, True], dtype=numpy.bool))), layout, valid_when=False, length=9, lsb_order=False)

    numbatype = awkward1._connect._numba.arrayview.tonumbatype(layout.form)
    assert awkward1_connect_numba_layout.typeof(layout).name == numbatype.name

    lookup1 = awkward1_connect_numba_arrayview.Lookup(layout)
    lookup2 = awkward1_connect_numba_arrayview.Lookup(layout.form)
    numbatype.form_fill(0, layout, lookup2)

    assert numpy.array_equal(lookup1.arrayptrs, lookup2.arrayptrs)
    assert numpy.array_equal(lookup1.sharedptrs == -1, lookup2.sharedptrs == -1)

    counter = [0]
    def materialize():
        counter[0] += 1
        return layout

    generator = awkward1.layout.ArrayGenerator(materialize, form=layout.form, length=len(layout))
    virtualarray = awkward1.layout.VirtualArray(generator)

    lookup3 = awkward1_connect_numba_arrayview.Lookup(virtualarray)
    assert len(lookup1.arrayptrs) + 3 == len(lookup3.arrayptrs)

    array = awkward1.Array(virtualarray)
    array.numba_type
    assert counter[0] == 0

    @numba.njit
    def f3(x):
        return x

    assert isinstance(f3(array).layout, awkward1.layout.VirtualArray)
    assert counter[0] == 0

    @numba.njit
    def f1(x):
        return x[3][1]

    assert f1(array) == 5.5
    assert counter[0] == 1

    assert f1(array) == 5.5
    assert counter[0] == 1

    @numba.njit
    def f2(x, i):
        return x[i]

    assert awkward1.to_list(f2(array, 3)) == [4.4, 5.5]
    assert counter[0] == 1

    assert awkward1.to_list(f2(array, 4)) == None
    assert counter[0] == 1

    assert awkward1.to_list(f2(array, 3)) == [4.4, 5.5]
    assert counter[0] == 1

    assert awkward1.to_list(f2(array, 4)) == None
    assert counter[0] == 1

    assert awkward1.to_list(f3(array)) == [[1.1, 2.2, 3.3], None, [], [4.4, 5.5], None, None, [6.6], [7.7, 8.8, 9.9], [3.0, 2.0, 1.0]]
def test_0166_ByteMaskedArray():
    content = awkward1.from_iter(
        [[2, 3, 5], [999], [], [7, 11], [], [13], [123, 999], [17, 19]],
        highlevel=False)
    mask = awkward1.layout.Index8(
        numpy.array([0, 1, 0, 0, 1, 0, 1, 0], dtype=numpy.int8))
    array = awkward1.Array(
        awkward1.layout.ByteMaskedArray(mask, content, valid_when=False))
    assert awkward1.to_list(array) == [[2, 3, 5], None, [], [7, 11], None,
                                       [13], None, [17, 19]]
    assert awkward1.to_list(awkward1.prod(
        array, axis=-1)) == [30, None, 1, 77, None, 13, None, 323]

    content = awkward1.from_iter([[[2, 3], [5]], [[999]], [], [[7], [11]], [],
                                  [[13]], [[123], [999]], [[17, 19]]],
                                 highlevel=False)
    mask = awkward1.layout.Index8(
        numpy.array([0, 1, 0, 0, 1, 0, 1, 0], dtype=numpy.int8))
    array = awkward1.Array(
        awkward1.layout.ByteMaskedArray(mask, content, valid_when=False))
    assert awkward1.to_list(array) == [[[2, 3], [5]], None, [], [[7], [11]],
                                       None, [[13]], None, [[17, 19]]]
    assert awkward1.to_list(awkward1.prod(array, axis=-1)) == [[6,
                                                                5], None, [],
                                                               [7, 11], None,
                                                               [13], None,
                                                               [323]]

    content = awkward1.from_iter(
        [[2, 3], [999], [5], [7], [11], [13], [], [17], [19]], highlevel=False)
    mask = awkward1.layout.Index8(
        numpy.array([0, 1, 0, 0, 0, 0, 1, 0, 0], dtype=numpy.int8))
    bytemasked = awkward1.layout.ByteMaskedArray(mask,
                                                 content,
                                                 valid_when=False)
    offsets = awkward1.layout.Index64(
        numpy.array([0, 3, 3, 5, 6, 9], dtype=numpy.int64))
    array = awkward1.Array(
        awkward1.layout.ListOffsetArray64(offsets, bytemasked))
    array = awkward1.Array([[[2, 3], None, [5]], [], [[7], [11]], [[13]],
                            [None, [17], [19]]])
    assert awkward1.to_list(awkward1.prod(array, axis=-1)) == [[6,
                                                                None, 5], [],
                                                               [7, 11], [13],
                                                               [None, 17, 19]]

    content = awkward1.from_iter([6, None, 5, 7, 11, 13, None, 17, 19],
                                 highlevel=False)
    mask = awkward1.layout.Index8(
        numpy.array([0, 1, 0, 0, 0, 0, 1, 0, 0], dtype=numpy.int8))
    bytemasked = awkward1.layout.ByteMaskedArray(mask,
                                                 content,
                                                 valid_when=False)
    offsets = awkward1.layout.Index64(
        numpy.array([0, 3, 3, 5, 6, 9], dtype=numpy.int64))
    array = awkward1.Array(
        awkward1.layout.ListOffsetArray64(offsets, bytemasked))
    assert awkward1.to_list(array) == [[6, None, 5], [], [7, 11], [13],
                                       [None, 17, 19]]
    assert awkward1.to_list(awkward1.prod(array,
                                          axis=-1)) == [30, 1, 77, 13, 323]
示例#11
0
                            [1, 2, 3])
    with pytest.raises(NotImplementedError, match="cannot determine binning"):
        plot._get_binning({})


@mock.patch("simplify.helpers.plotting.data_MC")
@mock.patch("simplify.plot._get_binning", return_value=np.asarray([1, 2]))
@mock.patch(
    "simplify.configuration.get_region_dict",
    return_value={
        "Name": "region",
        "Variable": "x"
    },
)
@mock.patch("simplify.model_tools.calculate_stdev",
            return_value=ak.from_iter([[0.3]]))
@mock.patch(
    "simplify.model_tools.get_prefit_uncertainties",
    return_value=(ak.from_iter([0.04956657, 0.0])),
)
@mock.patch(
    "simplify.model_tools.get_asimov_parameters",
    return_value=([1.0, 1.0]),
)
def test_data_MC(mock_asimov, mock_unc, mock_stdev, mock_dict, mock_bins,
                 mock_draw, example_spec):
    config = {}
    figure_folder = "tmp"
    model_spec = pyhf.Workspace(example_spec).model().spec

    plot.data_MC(config, example_spec, figure_folder=figure_folder)
def test_missing():
    array = awkward1.from_iter([[[2.2, 1.1, 3.3]], [[]], [None, None, None], [[-4.4, -5.5, -6.6]]], highlevel=False)
    assert awkward1.to_list(array.argmin(axis=2)) == [[1], [None], [None, None, None], [2]]
示例#13
0
def test_ByteMaskedArray_pad_none():
    content = awkward1.from_iter(
        [[[0.0, 1.1, 2.2], [], [3.3, 4.4]], [], [[5.5]],
         [[6.6, 7.7, 8.8, 9.9]], [[], [10.0, 11.1, 12.2]]],
        highlevel=False)
    mask = awkward1.layout.Index8(
        numpy.array([0, 0, 1, 1, 0], dtype=numpy.int8))
    array = awkward1.Array(
        awkward1.layout.ByteMaskedArray(mask, content, valid_when=False))
    assert awkward1.to_list(array) == [[[0.0, 1.1, 2.2], [], [3.3, 4.4]], [],
                                       None, None, [[], [10.0, 11.1, 12.2]]]
    assert awkward1.to_list(awkward1.pad_none(array, 7,
                                              axis=0)) == [[[0.0, 1.1,
                                                             2.2], [],
                                                            [3.3, 4.4]], [],
                                                           None, None,
                                                           [[],
                                                            [10.0, 11.1,
                                                             12.2]], None,
                                                           None]
    assert awkward1.to_list(
        awkward1.pad_none(array, 7, axis=-3)) == [[[0.0, 1.1, 2.2], [],
                                                   [3.3, 4.4]], [], None, None,
                                                  [[], [10.0, 11.1, 12.2]],
                                                  None, None]
    assert awkward1.to_list(awkward1.pad_none(array, 3,
                                              axis=1)) == [[[0.0, 1.1, 2.2],
                                                            [], [3.3, 4.4]],
                                                           [None, None, None],
                                                           None, None,
                                                           [[],
                                                            [10.0, 11.1, 12.2],
                                                            None]]
    assert awkward1.to_list(awkward1.pad_none(
        array, 3, axis=-2)) == [[[0.0, 1.1, 2.2], [], [3.3, 4.4]],
                                [None, None, None], None, None,
                                [[], [10.0, 11.1, 12.2], None]]
    assert awkward1.to_list(awkward1.pad_none(array, 3,
                                              axis=2)) == [[[0.0, 1.1, 2.2],
                                                            [None, None, None],
                                                            [3.3, 4.4, None]],
                                                           [], None, None,
                                                           [[None, None, None],
                                                            [10.0, 11.1,
                                                             12.2]]]
    assert awkward1.to_list(awkward1.pad_none(
        array, 3, axis=-1)) == [[[0.0, 1.1, 2.2], [None, None, None],
                                 [3.3, 4.4, None]], [], None, None,
                                [[None, None, None], [10.0, 11.1, 12.2]]]
    assert awkward1.to_list(awkward1.pad_none(array, 3, axis=0,
                                              clip=True)) == [[[0.0, 1.1, 2.2],
                                                               [], [3.3, 4.4]],
                                                              [], None]
    assert awkward1.to_list(awkward1.pad_none(array, 3, axis=-3,
                                              clip=True)) == [[[0.0, 1.1, 2.2],
                                                               [], [3.3, 4.4]],
                                                              [], None]
    assert awkward1.to_list(awkward1.pad_none(
        array, 2, axis=1, clip=True)) == [[[0.0, 1.1, 2.2], []], [None, None],
                                          None, None, [[], [10.0, 11.1, 12.2]]]
    assert awkward1.to_list(awkward1.pad_none(
        array, 2, axis=-2, clip=True)) == [[[0.0, 1.1, 2.2], []],
                                           [None, None], None, None,
                                           [[], [10.0, 11.1, 12.2]]]
    assert awkward1.to_list(awkward1.pad_none(array, 2, axis=2,
                                              clip=True)) == [[[0.0, 1.1],
                                                               [None, None],
                                                               [3.3, 4.4]], [],
                                                              None, None,
                                                              [[None, None],
                                                               [10.0, 11.1]]]
    assert awkward1.to_list(awkward1.pad_none(array, 2, axis=-1,
                                              clip=True)) == [[[0.0, 1.1],
                                                               [None, None],
                                                               [3.3, 4.4]], [],
                                                              None, None,
                                                              [[None, None],
                                                               [10.0, 11.1]]]
def test_array_slice():
    array = awkward1.Array([0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9],
                           check_valid=True)
    assert awkward1.to_list(array[[5, 2, 2, 3, 9, 0,
                                   1]]) == [5.5, 2.2, 2.2, 3.3, 9.9, 0.0, 1.1]
    assert awkward1.to_list(array[numpy.array(
        [5, 2, 2, 3, 9, 0, 1])]) == [5.5, 2.2, 2.2, 3.3, 9.9, 0.0, 1.1]
    assert awkward1.to_list(array[awkward1.layout.NumpyArray(
        numpy.array([5, 2, 2, 3, 9, 0, 1], dtype=numpy.int32))]) == [
            5.5, 2.2, 2.2, 3.3, 9.9, 0.0, 1.1
        ]
    assert awkward1.to_list(array[awkward1.Array(
        numpy.array([5, 2, 2, 3, 9, 0, 1], dtype=numpy.int32),
        check_valid=True)]) == [5.5, 2.2, 2.2, 3.3, 9.9, 0.0, 1.1]
    assert awkward1.to_list(array[awkward1.Array(
        [5, 2, 2, 3, 9, 0, 1],
        check_valid=True)]) == [5.5, 2.2, 2.2, 3.3, 9.9, 0.0, 1.1]

    assert awkward1.to_list(array[awkward1.layout.NumpyArray(
        numpy.array([
            False, False, False, False, False, True, False, True, False, True
        ]))]) == [5.5, 7.7, 9.9]

    content = awkward1.layout.NumpyArray(
        numpy.array([1, 0, 9, 3, 2, 2, 5], dtype=numpy.int64))
    index = awkward1.layout.Index64(
        numpy.array([6, 5, 4, 3, 2, 1, 0], dtype=numpy.int64))
    indexedarray = awkward1.layout.IndexedArray64(index, content)
    assert awkward1.to_list(
        array[indexedarray]) == [5.5, 2.2, 2.2, 3.3, 9.9, 0.0, 1.1]
    assert awkward1.to_list(array[awkward1.Array(
        indexedarray,
        check_valid=True)]) == [5.5, 2.2, 2.2, 3.3, 9.9, 0.0, 1.1]

    assert awkward1.to_list(array[awkward1.layout.EmptyArray()]) == []

    content0 = awkward1.layout.NumpyArray(numpy.array([5, 2, 2]))
    content1 = awkward1.layout.NumpyArray(numpy.array([3, 9, 0, 1]))
    tags = awkward1.layout.Index8(
        numpy.array([0, 0, 0, 1, 1, 1, 1], dtype=numpy.int8))
    index2 = awkward1.layout.Index64(
        numpy.array([0, 1, 2, 0, 1, 2, 3], dtype=numpy.int64))
    unionarray = awkward1.layout.UnionArray8_64(tags, index2,
                                                [content0, content1])
    assert awkward1.to_list(
        array[unionarray]) == [5.5, 2.2, 2.2, 3.3, 9.9, 0.0, 1.1]
    assert awkward1.to_list(array[awkward1.Array(
        unionarray, check_valid=True)]) == [5.5, 2.2, 2.2, 3.3, 9.9, 0.0, 1.1]

    array = awkward1.Array(numpy.array([[0.0, 1.1, 2.2, 3.3, 4.4],
                                        [5.5, 6.6, 7.7, 8.8, 9.9]]),
                           check_valid=True)
    assert awkward1.to_list(
        array[awkward1.layout.NumpyArray(numpy.array([[0, 1], [1, 0]])),
              awkward1.layout.NumpyArray(numpy.array([[2, 4], [3, 3]]))]) == [[
                  2.2, 9.9
              ], [8.8, 3.3]]
    assert awkward1.to_list(array[awkward1.layout.NumpyArray(
        numpy.array([[0, 1], [1, 0]]))]) == [[[0.0, 1.1, 2.2, 3.3, 4.4],
                                              [5.5, 6.6, 7.7, 8.8, 9.9]],
                                             [[5.5, 6.6, 7.7, 8.8, 9.9],
                                              [0.0, 1.1, 2.2, 3.3, 4.4]]]

    array = awkward1.Array([{
        "x": 1,
        "y": 1.1,
        "z": [1]
    }, {
        "x": 2,
        "y": 2.2,
        "z": [2, 2]
    }, {
        "x": 3,
        "y": 3.3,
        "z": [3, 3, 3]
    }, {
        "x": 4,
        "y": 4.4,
        "z": [4, 4, 4, 4]
    }, {
        "x": 5,
        "y": 5.5,
        "z": [5, 5, 5, 5, 5]
    }],
                           check_valid=True)
    awkward1.to_list(array[awkward1.from_iter(["y", "x"],
                                              highlevel=False)]) == [{
                                                  "y": 1.1,
                                                  "x": 1
                                              }, {
                                                  "y": 2.2,
                                                  "x": 2
                                              }, {
                                                  "y": 3.3,
                                                  "x": 3
                                              }, {
                                                  "y": 4.4,
                                                  "x": 4
                                              }, {
                                                  "y": 5.5,
                                                  "x": 5
                                              }]
def test_indexedarray2b():
    array = awkward1.from_iter([[0.0, 1.1, 2.2], [3.3, 4.4], [5.5], [6.6, 7.7, 8.8, 9.9]], highlevel=False)
    index = awkward1.layout.Index64(numpy.array([0, -1, 2, 3], dtype=numpy.int64))
    indexedarray = awkward1.layout.IndexedOptionArray64(index, array)
    assert awkward1.to_list(indexedarray) == [[0.0, 1.1, 2.2], None, [5.5], [6.6, 7.7, 8.8, 9.9]]
    assert awkward1.to_list(indexedarray[awkward1.Array([[1, 1], None, [0], [0, -1]])]) == [[1.1, 1.1], None, [5.5], [6.6, 9.9]]
def test_recordarray():
    layout = awkward1.from_iter([{"x": 0.0, "y": []}, {"x": 1.1, "y": [1]}, {"x": 2.2, "y": [2, 2]}, {"x": 3.3, "y": [3, 3, 3]}, {"x": 4.4, "y": [4, 4, 4, 4]}], highlevel=False)

    numbatype = awkward1._connect._numba.arrayview.tonumbatype(layout.form)
    assert awkward1_connect_numba_layout.typeof(layout).name == numbatype.name

    lookup1 = awkward1_connect_numba_arrayview.Lookup(layout)
    lookup2 = awkward1_connect_numba_arrayview.Lookup(layout.form)
    numbatype.form_fill(0, layout, lookup2)

    assert numpy.array_equal(lookup1.arrayptrs, lookup2.arrayptrs)
    assert numpy.array_equal(lookup1.sharedptrs == -1, lookup2.sharedptrs == -1)

    counter = [0]
    def materialize():
        counter[0] += 1
        return layout

    generator = awkward1.layout.ArrayGenerator(materialize, form=layout.form, length=len(layout))
    virtualarray = awkward1.layout.VirtualArray(generator)

    lookup3 = awkward1_connect_numba_arrayview.Lookup(virtualarray)
    assert len(lookup1.arrayptrs) + 3 == len(lookup3.arrayptrs)

    array = awkward1.Array(virtualarray)
    array.numba_type
    assert counter[0] == 0

    @numba.njit
    def f3(x):
        return x

    assert isinstance(f3(array).layout, awkward1.layout.VirtualArray)
    assert counter[0] == 0

    @numba.njit
    def f1a(x):
        return x["x"][2]

    assert f1a(array) == 2.2
    assert counter[0] == 1

    assert f1a(array) == 2.2
    assert counter[0] == 1

    @numba.njit
    def f1b(x):
        return x[2]["x"]

    assert f1b(array) == 2.2
    assert counter[0] == 1

    assert f1b(array) == 2.2
    assert counter[0] == 1

    @numba.njit
    def f1c(x):
        return x.x[2]

    assert f1c(array) == 2.2
    assert counter[0] == 1

    assert f1c(array) == 2.2
    assert counter[0] == 1

    @numba.njit
    def f1d(x):
        return x[2].x

    assert f1d(array) == 2.2
    assert counter[0] == 1

    assert f1d(array) == 2.2
    assert counter[0] == 1

    @numba.njit
    def f2a(x):
        return x["y"][2]

    assert awkward1.to_list(f2a(array)) == [2, 2]
    assert counter[0] == 1

    assert awkward1.to_list(f2a(array)) == [2, 2]
    assert counter[0] == 1

    @numba.njit
    def f2b(x):
        return x[2]["y"]

    assert awkward1.to_list(f2b(array)) == [2, 2]
    assert counter[0] == 1

    assert awkward1.to_list(f2b(array)) == [2, 2]
    assert counter[0] == 1

    @numba.njit
    def f2c(x):
        return x.y[2]

    assert awkward1.to_list(f2a(array)) == [2, 2]
    assert counter[0] == 1

    assert awkward1.to_list(f2a(array)) == [2, 2]
    assert counter[0] == 1

    @numba.njit
    def f2d(x):
        return x[2].y

    assert awkward1.to_list(f2b(array)) == [2, 2]
    assert counter[0] == 1

    assert awkward1.to_list(f2b(array)) == [2, 2]
    assert counter[0] == 1

    assert awkward1.to_list(f3(array)) == [{"x": 0.0, "y": []}, {"x": 1.1, "y": [1]}, {"x": 2.2, "y": [2, 2]}, {"x": 3.3, "y": [3, 3, 3]}, {"x": 4.4, "y": [4, 4, 4, 4]}]
def test_bytemaskedarray2b():
    array = awkward1.from_iter([[0.0, 1.1, 2.2], [3.3, 4.4], [5.5], [6.6, 7.7, 8.8, 9.9]], highlevel=False)
    mask = awkward1.layout.Index8(numpy.array([0, 1, 0, 0], dtype=numpy.int8))
    maskedarray = awkward1.layout.ByteMaskedArray(mask, array, valid_when=False)
    assert awkward1.to_list(maskedarray) == [[0.0, 1.1, 2.2], None, [5.5], [6.6, 7.7, 8.8, 9.9]]
    assert awkward1.to_list(maskedarray[awkward1.Array([[1, 1], None, [0], [0, -1]])]) == [[1.1, 1.1], None, [5.5], [6.6, 9.9]]
def test_tuplearray():
    layout = awkward1.from_iter([(0.0, []), (1.1, [1]), (2.2, [2, 2]), (3.3, [3, 3, 3]), (4.4, [4, 4, 4, 4])], highlevel=False)

    numbatype = awkward1._connect._numba.arrayview.tonumbatype(layout.form)
    assert awkward1_connect_numba_layout.typeof(layout).name == numbatype.name

    lookup1 = awkward1_connect_numba_arrayview.Lookup(layout)
    lookup2 = awkward1_connect_numba_arrayview.Lookup(layout.form)
    numbatype.form_fill(0, layout, lookup2)

    assert numpy.array_equal(lookup1.arrayptrs, lookup2.arrayptrs)
    assert numpy.array_equal(lookup1.sharedptrs == -1, lookup2.sharedptrs == -1)

    counter = [0]
    def materialize():
        counter[0] += 1
        return layout

    generator = awkward1.layout.ArrayGenerator(materialize, form=layout.form, length=len(layout))
    virtualarray = awkward1.layout.VirtualArray(generator)

    lookup3 = awkward1_connect_numba_arrayview.Lookup(virtualarray)
    assert len(lookup1.arrayptrs) + 3 == len(lookup3.arrayptrs)

    array = awkward1.Array(virtualarray)
    array.numba_type
    assert counter[0] == 0

    @numba.njit
    def f3(x):
        return x

    assert isinstance(f3(array).layout, awkward1.layout.VirtualArray)
    assert counter[0] == 0

    @numba.njit
    def f1a(x):
        return x["0"][2]

    assert f1a(array) == 2.2
    assert counter[0] == 1

    assert f1a(array) == 2.2
    assert counter[0] == 1

    @numba.njit
    def f1b(x):
        return x[2]["0"]

    assert f1b(array) == 2.2
    assert counter[0] == 1

    assert f1b(array) == 2.2
    assert counter[0] == 1

    @numba.njit
    def f2a(x):
        return x["1"][2]

    assert awkward1.to_list(f2a(array)) == [2, 2]
    assert counter[0] == 1

    assert awkward1.to_list(f2a(array)) == [2, 2]
    assert counter[0] == 1

    @numba.njit
    def f2b(x):
        return x[2]["1"]

    assert awkward1.to_list(f2b(array)) == [2, 2]
    assert counter[0] == 1

    assert awkward1.to_list(f2b(array)) == [2, 2]
    assert counter[0] == 1

    assert awkward1.to_list(f3(array)) == [(0.0, []), (1.1, [1]), (2.2, [2, 2]), (3.3, [3, 3, 3]), (4.4, [4, 4, 4, 4])]
def test_basic():
    one = awkward1.from_iter([[1.1, 2.2, 3.3], [], [4.4, 5.5]],
                             highlevel=False)
    two = awkward1.from_iter([[6.6], [], [], [], [7.7, 8.8, 9.9]],
                             highlevel=False)
    array = awkward1.partition.IrregularlyPartitionedArray([one, two])

    assert len(array) == 8
    assert [awkward1.to_list(x)
            for x in array.partitions] == [[[1.1, 2.2, 3.3], [], [4.4, 5.5]],
                                           [[6.6], [], [], [], [7.7, 8.8,
                                                                9.9]]]
    assert awkward1.to_list(array.partition(0)) == [[1.1, 2.2, 3.3], [],
                                                    [4.4, 5.5]]
    assert awkward1.to_list(array.partition(1)) == [[6.6], [], [], [],
                                                    [7.7, 8.8, 9.9]]
    assert array.start(0) == 0
    assert array.start(1) == 3
    assert array.stop(0) == 3
    assert array.stop(1) == 8
    assert array.partitionid_index_at(0) == (0, 0)
    assert array.partitionid_index_at(1) == (0, 1)
    assert array.partitionid_index_at(2) == (0, 2)
    assert array.partitionid_index_at(3) == (1, 0)
    assert array.partitionid_index_at(4) == (1, 1)
    assert array.partitionid_index_at(5) == (1, 2)
    assert array.partitionid_index_at(6) == (1, 3)
    assert array.partitionid_index_at(7) == (1, 4)

    assert array.tojson(
    ) == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[],[],[],[7.7,8.8,9.9]]"

    assert awkward1.to_list(array._ext.getitem_at(0)) == [1.1, 2.2, 3.3]
    assert awkward1.to_list(array._ext.getitem_at(1)) == []
    assert awkward1.to_list(array._ext.getitem_at(2)) == [4.4, 5.5]
    assert awkward1.to_list(array._ext.getitem_at(3)) == [6.6]
    assert awkward1.to_list(array._ext.getitem_at(4)) == []
    assert awkward1.to_list(array._ext.getitem_at(5)) == []
    assert awkward1.to_list(array._ext.getitem_at(6)) == []
    assert awkward1.to_list(array._ext.getitem_at(7)) == [7.7, 8.8, 9.9]
    assert awkward1.to_list(array._ext.getitem_at(-1)) == [7.7, 8.8, 9.9]
    assert awkward1.to_list(array._ext.getitem_at(-2)) == []
    assert awkward1.to_list(array._ext.getitem_at(-3)) == []
    assert awkward1.to_list(array._ext.getitem_at(-4)) == []
    assert awkward1.to_list(array._ext.getitem_at(-5)) == [6.6]
    assert awkward1.to_list(array._ext.getitem_at(-6)) == [4.4, 5.5]
    assert awkward1.to_list(array._ext.getitem_at(-7)) == []
    assert awkward1.to_list(array._ext.getitem_at(-8)) == [1.1, 2.2, 3.3]

    assert array._ext.getitem_range(0, 8, 1).tojson(
    ) == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[],[],[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(
        1, 8, 1).tojson() == "[[],[4.4,5.5],[6.6],[],[],[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(
        2, 8, 1).tojson() == "[[4.4,5.5],[6.6],[],[],[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(
        3, 8, 1).tojson() == "[[6.6],[],[],[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(4, 8,
                                    1).tojson() == "[[],[],[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(5, 8,
                                    1).tojson() == "[[],[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(6, 8, 1).tojson() == "[[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(7, 8, 1).tojson() == "[[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(8, 8, 1).tojson() == "[]"
    assert array._ext.getitem_range(-1, 8, 1).tojson() == "[[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(-2, 8, 1).tojson() == "[[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(-3, 8,
                                    1).tojson() == "[[],[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(-4, 8,
                                    1).tojson() == "[[],[],[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(
        -5, 8, 1).tojson() == "[[6.6],[],[],[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(
        -6, 8, 1).tojson() == "[[4.4,5.5],[6.6],[],[],[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(
        -7, 8, 1).tojson() == "[[],[4.4,5.5],[6.6],[],[],[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(-8, 8, 1).tojson(
    ) == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[],[],[],[7.7,8.8,9.9]]"

    assert array._ext.getitem_range(0, 8, 1).tojson(
    ) == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[],[],[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(
        0, 7, 1).tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[],[],[]]"
    assert array._ext.getitem_range(
        0, 6, 1).tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[],[]]"
    assert array._ext.getitem_range(
        0, 5, 1).tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[]]"
    assert array._ext.getitem_range(
        0, 4, 1).tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6]]"
    assert array._ext.getitem_range(
        0, 3, 1).tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5]]"
    assert array._ext.getitem_range(0, 2, 1).tojson() == "[[1.1,2.2,3.3],[]]"
    assert array._ext.getitem_range(0, 1, 1).tojson() == "[[1.1,2.2,3.3]]"
    assert array._ext.getitem_range(0, 0, 1).tojson() == "[]"
    assert array._ext.getitem_range(0, -8, 1).tojson() == "[]"
    assert array._ext.getitem_range(0, -7, 1).tojson() == "[[1.1,2.2,3.3]]"
    assert array._ext.getitem_range(0, -6, 1).tojson() == "[[1.1,2.2,3.3],[]]"
    assert array._ext.getitem_range(
        0, -5, 1).tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5]]"
    assert array._ext.getitem_range(
        0, -4, 1).tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6]]"
    assert array._ext.getitem_range(
        0, -3, 1).tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[]]"
    assert array._ext.getitem_range(
        0, -2, 1).tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[],[]]"
    assert array._ext.getitem_range(
        0, -1, 1).tojson() == "[[1.1,2.2,3.3],[],[4.4,5.5],[6.6],[],[],[]]"

    assert array._ext.getitem_range(
        0, 8, 2).tojson() == "[[1.1,2.2,3.3],[4.4,5.5],[],[]]"
    assert array._ext.getitem_range(
        1, 8, 2).tojson() == "[[],[6.6],[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(1, 7, 2).tojson() == "[[],[6.6],[]]"
    assert array._ext.getitem_range(2, 8, 2).tojson() == "[[4.4,5.5],[],[]]"
    assert array._ext.getitem_range(3, 8,
                                    2).tojson() == "[[6.6],[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(0, 8,
                                    3).tojson() == "[[1.1,2.2,3.3],[6.6],[]]"
    assert array._ext.getitem_range(1, 8,
                                    3).tojson() == "[[],[],[7.7,8.8,9.9]]"
    assert array._ext.getitem_range(1, 7, 3).tojson() == "[[],[]]"
    assert array._ext.getitem_range(2, 8, 3).tojson() == "[[4.4,5.5],[]]"
    assert array._ext.getitem_range(3, 8, 3).tojson() == "[[6.6],[]]"

    assert array._ext.getitem_range(2, 0, -1).tojson() == "[[4.4,5.5],[]]"
    assert array._ext.getitem_range(
        2, None, -1).tojson() == "[[4.4,5.5],[],[1.1,2.2,3.3]]"
    assert array._ext.getitem_range(1, None,
                                    -1).tojson() == "[[],[1.1,2.2,3.3]]"
    assert array._ext.getitem_range(
        3, None, -1).tojson() == "[[6.6],[4.4,5.5],[],[1.1,2.2,3.3]]"
    assert array._ext.getitem_range(None, None, -1).tojson(
    ) == "[[7.7,8.8,9.9],[],[],[],[6.6],[4.4,5.5],[],[1.1,2.2,3.3]]"
    assert array._ext.getitem_range(-1, None, -1).tojson(
    ) == "[[7.7,8.8,9.9],[],[],[],[6.6],[4.4,5.5],[],[1.1,2.2,3.3]]"
    assert array._ext.getitem_range(
        -2, None, -1).tojson() == "[[],[],[],[6.6],[4.4,5.5],[],[1.1,2.2,3.3]]"
    assert array._ext.getitem_range(
        -2, 0, -1).tojson() == "[[],[],[],[6.6],[4.4,5.5],[]]"
    assert array._ext.getitem_range(
        -2, 1, -1).tojson() == "[[],[],[],[6.6],[4.4,5.5]]"
    assert array._ext.getitem_range(-2, 2, -1).tojson() == "[[],[],[],[6.6]]"
    assert array._ext.getitem_range(-1, 3,
                                    -1).tojson() == "[[7.7,8.8,9.9],[],[],[]]"
    assert array._ext.getitem_range(
        -1, None, -2).tojson() == "[[7.7,8.8,9.9],[],[6.6],[]]"
    assert array._ext.getitem_range(
        -2, None, -2).tojson() == "[[],[],[4.4,5.5],[1.1,2.2,3.3]]"
    assert array._ext.getitem_range(-1, None,
                                    -3).tojson() == "[[7.7,8.8,9.9],[],[]]"
    assert array._ext.getitem_range(-2, None,
                                    -3).tojson() == "[[],[6.6],[1.1,2.2,3.3]]"
    assert array._ext.getitem_range(-3, None, -3).tojson() == "[[],[4.4,5.5]]"
    assert array._ext.getitem_range(-4, None, -3).tojson() == "[[],[]]"
    assert array._ext.getitem_range(-5, None,
                                    -3).tojson() == "[[6.6],[1.1,2.2,3.3]]"
    assert array._ext.getitem_range(-2, 0, -2).tojson() == "[[],[],[4.4,5.5]]"

    assert [awkward1.to_list(x) for x in array] == [[1.1, 2.2, 3.3], [],
                                                    [4.4, 5.5], [6.6], [], [],
                                                    [], [7.7, 8.8, 9.9]]

    assert awkward1.to_list(array.toContent()) == [[1.1, 2.2, 3.3], [],
                                                   [4.4, 5.5], [6.6], [], [],
                                                   [], [7.7, 8.8, 9.9]]
def test_deep_virtualarrays():
    one = awkward1.from_iter([0.0, 1.1, 2.2, 3.3, 4.4], highlevel=False)
    two = awkward1.from_iter([[], [1], [2, 2], [3, 3, 3], [4, 4, 4, 4]], highlevel=False)

    counter = [0, 0]
    def materialize1():
        counter[0] += 1
        return one

    generator1 = awkward1.layout.ArrayGenerator(materialize1, form=one.form, length=len(one))
    vone = awkward1.layout.VirtualArray(generator1)

    def materialize2():
        counter[1] += 1
        return two

    generator2 = awkward1.layout.ArrayGenerator(materialize2, form=two.form, length=len(two))
    vtwo = awkward1.layout.VirtualArray(generator2)

    recordarray = awkward1.layout.RecordArray([vone, vtwo], ["x", "y"])
    array = awkward1.Array(recordarray)
    array.numba_type
    assert counter == [0, 0]

    @numba.njit
    def f3(x):
        return x

    tmp1 = f3(array).layout
    assert isinstance(tmp1, awkward1.layout.RecordArray)
    assert isinstance(tmp1.field(0), awkward1.layout.VirtualArray)
    assert isinstance(tmp1.field(1), awkward1.layout.VirtualArray)
    assert counter == [0, 0]

    @numba.njit
    def f1a(x):
        return x["x"]

    tmp2a = f1a(array).layout
    assert isinstance(tmp2a, awkward1.layout.VirtualArray)
    assert counter == [0, 0]

    @numba.njit
    def f1b(x):
        return x["x"][2]

    tmp2b = f1b(array)
    assert tmp2b == 2.2
    assert counter == [1, 0]

    @numba.njit
    def f2a(x):
        return x["y"]

    tmp3a = f2a(array).layout
    assert isinstance(tmp3a, awkward1.layout.VirtualArray)
    assert counter == [1, 0]

    @numba.njit
    def f2b(x):
        return x["y"][2]

    tmp3b = f2b(array).layout
    assert isinstance(tmp3b, awkward1.layout.NumpyArray)
    assert awkward1.to_list(tmp3b) == [2, 2]
    assert counter == [1, 1]
def test_recordarray_merge():
    emptyarray = awkward1.layout.EmptyArray()

    arrayr1 = awkward1.from_iter([{"x": 0, "y": []}, {"x": 1, "y": [1, 1]}, {"x": 2, "y": [2, 2]}], highlevel=False)
    arrayr2 = awkward1.from_iter([{"x": 2.2, "y": [2.2, 2.2]}, {"x": 1.1, "y": [1.1, 1.1]}, {"x": 0.0, "y": [0.0, 0.0]}], highlevel=False)
    arrayr3 = awkward1.from_iter([{"x": 0, "y": 0.0}, {"x": 1, "y": 1.1}, {"x": 2, "y": 2.2}], highlevel=False)
    arrayr4 = awkward1.from_iter([{"y": [], "x": 0}, {"y": [1, 1], "x": 1}, {"y": [2, 2], "x": 2}], highlevel=False)
    arrayr5 = awkward1.from_iter([{"x": 0, "y": [], "z": 0}, {"x": 1, "y": [1, 1], "z": 1}, {"x": 2, "y": [2, 2], "z": 2}], highlevel=False)
    arrayr6 = awkward1.from_iter([{"z": 0, "x": 0, "y": []}, {"z": 1, "x": 1, "y": [1, 1]}, {"z": 2, "x": 2, "y": [2, 2]}], highlevel=False)
    arrayr7 = awkward1.from_iter([{"x": 0}, {"x": 1}, {"x": 2}], highlevel=False)

    arrayt1 = awkward1.from_iter([(0, []), (1, [1.1]), (2, [2, 2])], highlevel=False)
    arrayt2 = awkward1.from_iter([(2.2, [2.2, 2.2]), (1.1, [1.1, 1.1]), (0.0, [0.0, 0.0])], highlevel=False)
    arrayt3 = awkward1.from_iter([(0, 0.0), (1, 1.1), (2, 2.2)], highlevel=False)
    arrayt4 = awkward1.from_iter([([], 0), ([1.1], 1), ([2.2, 2.2], 2)], highlevel=False)
    arrayt5 = awkward1.from_iter([(0, [], 0), (1, [1], 1), (2, [2, 2], 2)], highlevel=False)
    arrayt6 = awkward1.from_iter([(0, 0, []), (1, 1, [1]), (2, 2, [2, 2])], highlevel=False)
    arrayt7 = awkward1.from_iter([(0,), (1,), (2,)], highlevel=False)

    assert arrayr1.mergeable(arrayr2)
    assert arrayr2.mergeable(arrayr1)
    assert not arrayr1.mergeable(arrayr3)
    assert arrayr1.mergeable(arrayr4)
    assert arrayr4.mergeable(arrayr1)
    assert not arrayr1.mergeable(arrayr5)
    assert not arrayr1.mergeable(arrayr6)
    assert arrayr5.mergeable(arrayr6)
    assert arrayr6.mergeable(arrayr5)
    assert not arrayr1.mergeable(arrayr7)

    assert arrayt1.mergeable(arrayt2)
    assert arrayt2.mergeable(arrayt1)
    assert not arrayt1.mergeable(arrayt3)
    assert not arrayt1.mergeable(arrayt4)
    assert not arrayt1.mergeable(arrayt5)
    assert not arrayt1.mergeable(arrayt6)
    assert not arrayt5.mergeable(arrayt6)
    assert not arrayt1.mergeable(arrayt7)

    assert awkward1.to_list(arrayr1.merge(arrayr2)) == [{"x": 0.0, "y": []}, {"x": 1.0, "y": [1.0, 1.0]}, {"x": 2.0, "y": [2.0, 2.0]}, {"x": 2.2, "y": [2.2, 2.2]}, {"x": 1.1, "y": [1.1, 1.1]}, {"x": 0.0, "y": [0.0, 0.0]}]
    assert awkward1.to_list(arrayr2.merge(arrayr1)) == [{"x": 2.2, "y": [2.2, 2.2]}, {"x": 1.1, "y": [1.1, 1.1]}, {"x": 0.0, "y": [0.0, 0.0]}, {"x": 0.0, "y": []}, {"x": 1.0, "y": [1.0, 1.0]}, {"x": 2.0, "y": [2.0, 2.0]}]

    assert awkward1.to_list(arrayr1.merge(arrayr4)) == [{"x": 0, "y": []}, {"x": 1, "y": [1, 1]}, {"x": 2, "y": [2, 2]}, {"x": 0, "y": []}, {"x": 1, "y": [1, 1]}, {"x": 2, "y": [2, 2]}]
    assert awkward1.to_list(arrayr4.merge(arrayr1)) == [{"x": 0, "y": []}, {"x": 1, "y": [1, 1]}, {"x": 2, "y": [2, 2]}, {"x": 0, "y": []}, {"x": 1, "y": [1, 1]}, {"x": 2, "y": [2, 2]}]

    assert awkward1.to_list(arrayr5.merge(arrayr6)) == [{"x": 0, "y": [], "z": 0}, {"x": 1, "y": [1, 1], "z": 1}, {"x": 2, "y": [2, 2], "z": 2}, {"x": 0, "y": [], "z": 0}, {"x": 1, "y": [1, 1], "z": 1}, {"x": 2, "y": [2, 2], "z": 2}]
    assert awkward1.to_list(arrayr6.merge(arrayr5)) == [{"x": 0, "y": [], "z": 0}, {"x": 1, "y": [1, 1], "z": 1}, {"x": 2, "y": [2, 2], "z": 2}, {"x": 0, "y": [], "z": 0}, {"x": 1, "y": [1, 1], "z": 1}, {"x": 2, "y": [2, 2], "z": 2}]

    assert awkward1.to_list(arrayt1.merge(arrayt2)) == [(0.0, []), (1.0, [1.1]), (2.0, [2.0, 2.0]), (2.2, [2.2, 2.2]), (1.1, [1.1, 1.1]), (0.0, [0.0, 0.0])]
    assert awkward1.to_list(arrayt2.merge(arrayt1)) == [(2.2, [2.2, 2.2]), (1.1, [1.1, 1.1]), (0.0, [0.0, 0.0]), (0.0, []), (1.0, [1.1]), (2.0, [2.0, 2.0])]

    assert awkward1.to_list(arrayr1.merge(emptyarray)) == awkward1.to_list(arrayr1)
    assert awkward1.to_list(arrayr2.merge(emptyarray)) == awkward1.to_list(arrayr2)
    assert awkward1.to_list(arrayr3.merge(emptyarray)) == awkward1.to_list(arrayr3)
    assert awkward1.to_list(arrayr4.merge(emptyarray)) == awkward1.to_list(arrayr4)
    assert awkward1.to_list(arrayr5.merge(emptyarray)) == awkward1.to_list(arrayr5)
    assert awkward1.to_list(arrayr6.merge(emptyarray)) == awkward1.to_list(arrayr6)
    assert awkward1.to_list(arrayr7.merge(emptyarray)) == awkward1.to_list(arrayr7)

    assert awkward1.to_list(emptyarray.merge(arrayr1)) == awkward1.to_list(arrayr1)
    assert awkward1.to_list(emptyarray.merge(arrayr2)) == awkward1.to_list(arrayr2)
    assert awkward1.to_list(emptyarray.merge(arrayr3)) == awkward1.to_list(arrayr3)
    assert awkward1.to_list(emptyarray.merge(arrayr4)) == awkward1.to_list(arrayr4)
    assert awkward1.to_list(emptyarray.merge(arrayr5)) == awkward1.to_list(arrayr5)
    assert awkward1.to_list(emptyarray.merge(arrayr6)) == awkward1.to_list(arrayr6)
    assert awkward1.to_list(emptyarray.merge(arrayr7)) == awkward1.to_list(arrayr7)

    assert awkward1.to_list(arrayt1.merge(emptyarray)) == awkward1.to_list(arrayt1)
    assert awkward1.to_list(arrayt2.merge(emptyarray)) == awkward1.to_list(arrayt2)
    assert awkward1.to_list(arrayt3.merge(emptyarray)) == awkward1.to_list(arrayt3)
    assert awkward1.to_list(arrayt4.merge(emptyarray)) == awkward1.to_list(arrayt4)
    assert awkward1.to_list(arrayt5.merge(emptyarray)) == awkward1.to_list(arrayt5)
    assert awkward1.to_list(arrayt6.merge(emptyarray)) == awkward1.to_list(arrayt6)
    assert awkward1.to_list(arrayt7.merge(emptyarray)) == awkward1.to_list(arrayt7)

    assert awkward1.to_list(emptyarray.merge(arrayt1)) == awkward1.to_list(arrayt1)
    assert awkward1.to_list(emptyarray.merge(arrayt2)) == awkward1.to_list(arrayt2)
    assert awkward1.to_list(emptyarray.merge(arrayt3)) == awkward1.to_list(arrayt3)
    assert awkward1.to_list(emptyarray.merge(arrayt4)) == awkward1.to_list(arrayt4)
    assert awkward1.to_list(emptyarray.merge(arrayt5)) == awkward1.to_list(arrayt5)
    assert awkward1.to_list(emptyarray.merge(arrayt6)) == awkward1.to_list(arrayt6)
    assert awkward1.to_list(emptyarray.merge(arrayt7)) == awkward1.to_list(arrayt7)
def test_getitem():
    content0 = awkward1.from_iter([[1.1, 2.2, 3.3], [], [4.4, 5.5]],
                                  highlevel=False)
    content1 = awkward1.from_iter(["one", "two", "three", "four", "five"],
                                  highlevel=False)
    tags = awkward1.layout.Index8(
        numpy.array([1, 1, 0, 0, 1, 0, 1, 1], dtype=numpy.int8))

    assert numpy.asarray(
        awkward1.layout.UnionArray8_32.regular_index(tags)).tolist() == [
            0, 1, 0, 1, 2, 2, 3, 4
        ]
    assert numpy.asarray(awkward1.layout.UnionArray8_32.regular_index(
        tags)).dtype == numpy.dtype(numpy.int32)
    assert numpy.asarray(
        awkward1.layout.UnionArray8_U32.regular_index(tags)).tolist() == [
            0, 1, 0, 1, 2, 2, 3, 4
        ]
    assert numpy.asarray(awkward1.layout.UnionArray8_U32.regular_index(
        tags)).dtype == numpy.dtype(numpy.uint32)
    assert numpy.asarray(
        awkward1.layout.UnionArray8_64.regular_index(tags)).tolist() == [
            0, 1, 0, 1, 2, 2, 3, 4
        ]
    assert numpy.asarray(awkward1.layout.UnionArray8_64.regular_index(
        tags)).dtype == numpy.dtype(numpy.int64)

    index = awkward1.layout.Index32(
        numpy.array([0, 1, 0, 1, 2, 2, 4, 3], dtype=numpy.int32))
    array = awkward1.layout.UnionArray8_32(tags, index, [content0, content1])
    assert numpy.asarray(array.tags).tolist() == [1, 1, 0, 0, 1, 0, 1, 1]
    assert numpy.asarray(array.tags).dtype == numpy.dtype(numpy.int8)
    assert numpy.asarray(array.index).tolist() == [0, 1, 0, 1, 2, 2, 4, 3]
    assert numpy.asarray(array.index).dtype == numpy.dtype(numpy.int32)
    assert type(array.contents) is list
    assert [awkward1.to_list(x) for x in array.contents
            ] == [[[1.1, 2.2, 3.3], [], [4.4, 5.5]],
                  ["one", "two", "three", "four", "five"]]
    assert array.numcontents == 2
    assert awkward1.to_list(array.content(0)) == [[1.1, 2.2, 3.3], [],
                                                  [4.4, 5.5]]
    assert awkward1.to_list(
        array.content(1)) == ["one", "two", "three", "four", "five"]
    assert awkward1.to_list(array.project(0)) == [[1.1, 2.2, 3.3], [],
                                                  [4.4, 5.5]]
    assert awkward1.to_list(
        array.project(1)) == ["one", "two", "three", "five", "four"]
    repr(array)

    assert awkward1.to_list(array[0]) == "one"
    assert awkward1.to_list(array[1]) == "two"
    assert awkward1.to_list(array[2]) == [1.1, 2.2, 3.3]
    assert awkward1.to_list(array[3]) == []
    assert awkward1.to_list(array[4]) == "three"
    assert awkward1.to_list(array[5]) == [4.4, 5.5]
    assert awkward1.to_list(array[6]) == "five"
    assert awkward1.to_list(array[7]) == "four"

    assert awkward1.to_list(array) == [
        "one", "two", [1.1, 2.2, 3.3], [], "three", [4.4, 5.5], "five", "four"
    ]
    assert awkward1.to_list(array[1:-1]) == [
        "two", [1.1, 2.2, 3.3], [], "three", [4.4, 5.5], "five"
    ]
    assert awkward1.to_list(array[2:-2]) == [[1.1, 2.2, 3.3], [], "three",
                                             [4.4, 5.5]]
    assert awkward1.to_list(
        array[::2]) == ["one", [1.1, 2.2, 3.3], "three", "five"]
    assert awkward1.to_list(array[::2,
                                  1:]) == ["ne", [2.2, 3.3], "hree", "ive"]
    assert awkward1.to_list(array[:, :-1]) == [
        "on", "tw", [1.1, 2.2], [], "thre", [4.4], "fiv", "fou"
    ]

    content2 = awkward1.from_iter([{
        "x": 0,
        "y": []
    }, {
        "x": 1,
        "y": [1.1]
    }, {
        "x": 2,
        "y": [1.1, 2.2]
    }],
                                  highlevel=False)
    content3 = awkward1.from_iter([{
        "x": 0.0,
        "y": "zero",
        "z": False
    }, {
        "x": 1.1,
        "y": "one",
        "z": True
    }, {
        "x": 2.2,
        "y": "two",
        "z": False
    }, {
        "x": 3.3,
        "y": "three",
        "z": True
    }, {
        "x": 4.4,
        "y": "four",
        "z": False
    }],
                                  highlevel=False)
    array2 = awkward1.layout.UnionArray8_32(tags, index, [content2, content3])
    assert awkward1.to_list(array2) == [{
        "x": 0.0,
        "y": "zero",
        "z": False
    }, {
        "x": 1.1,
        "y": "one",
        "z": True
    }, {
        "x": 0,
        "y": []
    }, {
        "x": 1,
        "y": [1.1]
    }, {
        "x": 2.2,
        "y": "two",
        "z": False
    }, {
        "x": 2,
        "y": [1.1, 2.2]
    }, {
        "x": 4.4,
        "y": "four",
        "z": False
    }, {
        "x": 3.3,
        "y": "three",
        "z": True
    }]
    assert awkward1.to_list(array2["x"]) == [0.0, 1.1, 0, 1, 2.2, 2, 4.4, 3.3]
    assert awkward1.to_list(array2["y"]) == [
        "zero", "one", [], [1.1], "two", [1.1, 2.2], "four", "three"
    ]
    assert awkward1.to_list(
        array2[:, "y",
               1:]) == ["ero", "ne", [], [], "wo", [2.2], "our", "hree"]
    assert awkward1.to_list(
        array2["y", :,
               1:]) == ["ero", "ne", [], [], "wo", [2.2], "our", "hree"]
    with pytest.raises(ValueError) as err:
        array2[:, 1:, "y"]
    assert str(err.value) == "in NumpyArray, too many dimensions in slice"
    with pytest.raises(ValueError) as err:
        array2["z"]
    assert str(err.value) == "key \"z\" does not exist (not in record)"

    array3 = awkward1.layout.UnionArray8_32(tags, index, [content3, content2])
    array4 = awkward1.layout.UnionArray8_32(
        tags, index, [content0, content1, content2, content3])
    assert set(content2.keys()) == set(["x", "y"])
    assert set(content3.keys()) == set(["x", "y", "z"])
    assert set(array2.keys()) == set(["x", "y"])
    assert set(array3.keys()) == set(["x", "y"])
    assert array4.keys() == []
示例#23
0
def test_flatten_ListOffsetArray():
    array = awkward1.Array([[1.1, 2.2, 3.3], [], [4.4, 5.5]])
    assert awkward1.to_list(
        awkward1.flatten(array)) == [1.1, 2.2, 3.3, 4.4, 5.5]
    assert awkward1.to_list(awkward1.flatten(array[1:])) == [4.4, 5.5]

    array = awkward1.Array([[[0.0, 1.1, 2.2], [], [3.3, 4.4]], [], [[5.5]],
                            [[], [6.6, 7.7, 8.8, 9.9]]])
    assert awkward1.to_list(awkward1.flatten(array)) == [[0.0, 1.1, 2.2], [],
                                                         [3.3, 4.4], [5.5], [],
                                                         [6.6, 7.7, 8.8, 9.9]]
    assert awkward1.to_list(awkward1.flatten(
        array[1:])) == [[5.5], [], [6.6, 7.7, 8.8, 9.9]]
    assert awkward1.to_list(awkward1.flatten(
        array[:, 1:])) == [[], [3.3, 4.4], [6.6, 7.7, 8.8, 9.9]]
    assert awkward1.to_list(awkward1.flatten(
        array, axis=2)) == [[0.0, 1.1, 2.2, 3.3, 4.4], [], [5.5],
                            [6.6, 7.7, 8.8, 9.9]]
    assert awkward1.to_list(awkward1.flatten(array[1:],
                                             axis=2)) == [[], [5.5],
                                                          [6.6, 7.7, 8.8, 9.9]]
    assert awkward1.to_list(awkward1.flatten(array[:, 1:],
                                             axis=2)) == [[3.3, 4.4], [], [],
                                                          [6.6, 7.7, 8.8, 9.9]]

    array = awkward1.Array(
        numpy.arange(2 * 3 * 5 * 7).reshape(2, 3, 5, 7).tolist())
    assert awkward1.to_list(awkward1.flatten(array, axis=1)) == numpy.arange(
        2 * 3 * 5 * 7).reshape(2 * 3, 5, 7).tolist()
    assert awkward1.to_list(awkward1.flatten(array, axis=2)) == numpy.arange(
        2 * 3 * 5 * 7).reshape(2, 3 * 5, 7).tolist()
    assert awkward1.to_list(awkward1.flatten(array, axis=3)) == numpy.arange(
        2 * 3 * 5 * 7).reshape(2, 3, 5 * 7).tolist()

    def toListArray(x):
        if isinstance(x, awkward1.layout.ListOffsetArray64):
            starts = awkward1.layout.Index64(numpy.asarray(x.offsets)[:-1])
            stops = awkward1.layout.Index64(numpy.asarray(x.offsets)[1:])
            return awkward1.layout.ListArray64(starts, stops,
                                               toListArray(x.content))
        elif isinstance(x, awkward1.layout.ListOffsetArray32):
            starts = awkward1.layout.Index64(numpy.asarray(x.offsets)[:-1])
            stops = awkward1.layout.Index64(numpy.asarray(x.offsets)[1:])
            return awkward1.layout.ListArray32(starts, stops,
                                               toListArray(x.content))
        elif isinstance(x, awkward1.layout.ListOffsetArrayU32):
            starts = awkward1.layout.Index64(numpy.asarray(x.offsets)[:-1])
            stops = awkward1.layout.Index64(numpy.asarray(x.offsets)[1:])
            return awkward1.layout.ListArrayU32(starts, stops,
                                                toListArray(x.content))
        else:
            return x

    array = awkward1.Array(
        toListArray(
            awkward1.from_iter(numpy.arange(2 * 3 * 5 * 7).reshape(2, 3, 5,
                                                                   7).tolist(),
                               highlevel=False)))
    assert awkward1.to_list(awkward1.flatten(array, axis=1)) == numpy.arange(
        2 * 3 * 5 * 7).reshape(2 * 3, 5, 7).tolist()
    assert awkward1.to_list(awkward1.flatten(array, axis=2)) == numpy.arange(
        2 * 3 * 5 * 7).reshape(2, 3 * 5, 7).tolist()
    assert awkward1.to_list(awkward1.flatten(array, axis=3)) == numpy.arange(
        2 * 3 * 5 * 7).reshape(2, 3, 5 * 7).tolist()

    array = awkward1.Array(numpy.arange(2 * 3 * 5 * 7).reshape(2, 3, 5, 7))
    assert awkward1.to_list(awkward1.flatten(array, axis=1)) == numpy.arange(
        2 * 3 * 5 * 7).reshape(2 * 3, 5, 7).tolist()
    assert awkward1.to_list(awkward1.flatten(array, axis=2)) == numpy.arange(
        2 * 3 * 5 * 7).reshape(2, 3 * 5, 7).tolist()
    assert awkward1.to_list(awkward1.flatten(array, axis=3)) == numpy.arange(
        2 * 3 * 5 * 7).reshape(2, 3, 5 * 7).tolist()
def test_identities():
    a = awkward1.from_iter([{
        "outer": [{
            "x": 0,
            "y": []
        }, {
            "x": 1,
            "y": [1]
        }, {
            "x": 2,
            "y": [1, 2]
        }]
    }, {
        "outer": []
    }, {
        "outer": [{
            "x": 3,
            "y": [1, 2, 3]
        }, {
            "x": 4,
            "y": [1, 2, 3, 4]
        }]
    }],
                           highlevel=False)
    a.setidentities()

    b = awkward1.from_iter([{
        "outer": {
            "x": 0,
            "y": []
        }
    }, {
        "outer": {
            "x": 1,
            "y": [1]
        }
    }, {
        "outer": {
            "x": 2,
            "y": [1, 2]
        }
    }, {
        "outer": {
            "x": 3,
            "y": [1, 2, 3]
        }
    }, {
        "outer": {
            "x": 4,
            "y": [1, 2, 3, 4]
        }
    }],
                           highlevel=False)
    b.setidentities()

    assert awkward1.to_list(a) == [{
        u'outer': [{
            u'x': 0,
            u'y': []
        }, {
            u'x': 1,
            u'y': [1]
        }, {
            u'x': 2,
            u'y': [1, 2]
        }]
    }, {
        u'outer': []
    }, {
        u'outer': [{
            u'x': 3,
            u'y': [1, 2, 3]
        }, {
            u'x': 4,
            u'y': [1, 2, 3, 4]
        }]
    }]
    assert a.identity == ()
    assert a[2].identity == (2, )
    assert a[2, "outer"].identity == (2, 'outer')
    assert a[2, "outer", 0].identity == (2, 'outer', 0)
    assert a[2, "outer", 0, "y"].identity == (2, u'outer', 0, u'y')

    assert awkward1.to_list(b) == [{
        u'outer': {
            u'x': 0,
            u'y': []
        }
    }, {
        u'outer': {
            u'x': 1,
            u'y': [1]
        }
    }, {
        u'outer': {
            u'x': 2,
            u'y': [1, 2]
        }
    }, {
        u'outer': {
            u'x': 3,
            u'y': [1, 2, 3]
        }
    }, {
        u'outer': {
            u'x': 4,
            u'y': [1, 2, 3, 4]
        }
    }]
    assert b.identity == ()
    assert b[2].identity == (2, )
    assert b[2, "outer"].identity == (2, u'outer')
    with pytest.raises(ValueError) as err:
        b[2, "outer", 0].identity
    assert str(err.value) == "in NumpyArray, too many dimensions in slice"
    with pytest.raises(ValueError) as err:
        b[2, "outer", 0, "y"].identity
    assert str(err.value) == "in NumpyArray, too many dimensions in slice"
示例#25
0
def test_recordarray():
    array = awkward1.from_iter([{
        "x": 0.0,
        "y": []
    }, {
        "x": 1.1,
        "y": [1]
    }, {
        "x": 2.2,
        "y": [2, 2]
    }, {
        "x": 3.3,
        "y": [3, 3, 3]
    }],
                               highlevel=False)
    assert awkward1.to_list(array.num(0)) == {"x": 4, "y": 4}

    array = awkward1.from_iter([{
        "x": [3.3, 3.3, 3.3],
        "y": []
    }, {
        "x": [2.2, 2.2],
        "y": [1]
    }, {
        "x": [1.1],
        "y": [2, 2]
    }, {
        "x": [],
        "y": [3, 3, 3]
    }],
                               highlevel=False)
    assert awkward1.to_list(array.num(0)) == {"x": 4, "y": 4}
    assert awkward1.to_list(array.num(1)) == [{
        "x": 3,
        "y": 0
    }, {
        "x": 2,
        "y": 1
    }, {
        "x": 1,
        "y": 2
    }, {
        "x": 0,
        "y": 3
    }]
    assert awkward1.to_list(array.num(1)[2]) == {"x": 1, "y": 2}

    array = awkward1.from_iter([{
        "x": [[3.3, 3.3, 3.3]],
        "y": []
    }, {
        "x": [[2.2, 2.2]],
        "y": [1]
    }, {
        "x": [[1.1]],
        "y": [2, 2]
    }, {
        "x": [[]],
        "y": [3, 3, 3]
    }],
                               highlevel=False)
    assert awkward1.to_list(array.num(0)) == {"x": 4, "y": 4}
    assert awkward1.to_list(array.num(1)) == [{
        "x": 1,
        "y": 0
    }, {
        "x": 1,
        "y": 1
    }, {
        "x": 1,
        "y": 2
    }, {
        "x": 1,
        "y": 3
    }]
    assert awkward1.to_list(array.num(1)[2]) == {"x": 1, "y": 2}
示例#26
0
def test_toawkward0():
    array = awkward1.from_iter([1.1, 2.2, 3.3, 4.4], highlevel=False)
    assert isinstance(awkward1.to_awkward0(array), numpy.ndarray)
    assert awkward1.to_awkward0(array).tolist() == [1.1, 2.2, 3.3, 4.4]

    array = awkward1.from_numpy(numpy.arange(2 * 3 * 5).reshape(2, 3, 5),
                                highlevel=False).toRegularArray()
    assert isinstance(awkward1.to_awkward0(array), awkward0.JaggedArray)
    assert awkward1.to_awkward0(array).tolist() == [[[0, 1, 2, 3, 4],
                                                     [5, 6, 7, 8, 9],
                                                     [10, 11, 12, 13, 14]],
                                                    [[15, 16, 17, 18, 19],
                                                     [20, 21, 22, 23, 24],
                                                     [25, 26, 27, 28, 29]]]

    array = awkward1.from_iter([[1.1, 2.2, 3.3], [], [4.4, 5.5]],
                               highlevel=False)
    assert isinstance(awkward1.to_awkward0(array), awkward0.JaggedArray)
    assert awkward1.to_awkward0(array).tolist() == [[1.1, 2.2, 3.3], [],
                                                    [4.4, 5.5]]

    array = awkward1.layout.ListArray64(
        awkward1.layout.Index64(numpy.array([4, 999, 1], dtype=numpy.int64)),
        awkward1.layout.Index64(numpy.array([7, 999, 3], dtype=numpy.int64)),
        awkward1.layout.NumpyArray(
            numpy.array([3.14, 4.4, 5.5, 123, 1.1, 2.2, 3.3, 321])))
    assert isinstance(awkward1.to_awkward0(array), awkward0.JaggedArray)
    assert awkward1.to_awkward0(array).tolist() == [[1.1, 2.2, 3.3], [],
                                                    [4.4, 5.5]]

    array = awkward1.from_iter([{
        "x": 0,
        "y": []
    }, {
        "x": 1.1,
        "y": [1]
    }, {
        "x": 2.2,
        "y": [2, 2]
    }, {
        "x": 3.3,
        "y": [3, 3, 3]
    }],
                               highlevel=False)
    assert isinstance(awkward1.to_awkward0(array[2]), dict)
    assert awkward1.to_awkward0(array[2])["x"] == 2.2
    assert isinstance(awkward1.to_awkward0(array[2])["y"], numpy.ndarray)
    assert awkward1.to_awkward0(array[2])["y"].tolist() == [2, 2]

    assert isinstance(awkward1.to_awkward0(array), awkward0.Table)
    assert awkward1.to_awkward0(array).tolist() == [{
        "x": 0,
        "y": []
    }, {
        "x": 1.1,
        "y": [1]
    }, {
        "x": 2.2,
        "y": [2, 2]
    }, {
        "x": 3.3,
        "y": [3, 3, 3]
    }]

    array = awkward1.from_iter([(0, []), (1.1, [1]), (2.2, [2, 2]),
                                (3.3, [3, 3, 3])],
                               highlevel=False)
    assert isinstance(awkward1.to_awkward0(array), awkward0.Table)
    assert awkward1.to_awkward0(array).tolist() == [(0, []), (1.1, [1]),
                                                    (2.2, [2, 2]),
                                                    (3.3, [3, 3, 3])]
    assert isinstance(awkward1.to_awkward0(array[2]), tuple)
    assert awkward1.to_awkward0(array[2])[0] == 2.2
    assert awkward1.to_awkward0(array[2])[1].tolist() == [2, 2]

    array = awkward1.from_iter(
        [0.0, [], 1.1, [1], 2.2, [2, 2], 3.3, [3, 3, 3]], highlevel=False)
    assert isinstance(awkward1.to_awkward0(array), awkward0.UnionArray)
    assert awkward1.to_awkward0(array).tolist() == [
        0.0, [], 1.1, [1], 2.2, [2, 2], 3.3, [3, 3, 3]
    ]

    array = awkward1.from_iter([1.1, 2.2, None, None, 3.3, None, 4.4],
                               highlevel=False)
    assert isinstance(awkward1.to_awkward0(array), awkward0.IndexedMaskedArray)
    assert awkward1.to_awkward0(array).tolist() == [
        1.1, 2.2, None, None, 3.3, None, 4.4
    ]

    content = awkward1.layout.NumpyArray(
        numpy.array([0.0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9]))
    index = awkward1.layout.Index64(
        numpy.array([3, 2, 2, 5, 0], dtype=numpy.int64))
    array = awkward1.layout.IndexedArray64(index, content)
    assert isinstance(awkward1.to_awkward0(array), awkward0.IndexedArray)
    assert awkward1.to_awkward0(array).tolist() == [3.3, 2.2, 2.2, 5.5, 0.0]