Example #1
0
def test_tostring():
    content = awkward1.layout.NumpyArray(
        numpy.arange(2 * 3 * 5 * 7).reshape(-1, 7))
    offsetsA = numpy.arange(0, 2 * 3 * 5 + 5, 5)
    offsetsB = numpy.arange(0, 2 * 3 + 3, 3)
    startsA, stopsA = offsetsA[:-1], offsetsA[1:]
    startsB, stopsB = offsetsB[:-1], offsetsB[1:]

    listoffsetarrayA32 = awkward1.layout.ListOffsetArray32(
        awkward1.layout.Index32(offsetsA), content)
    listarrayA32 = awkward1.layout.ListArray32(
        awkward1.layout.Index32(startsA), awkward1.layout.Index32(stopsA),
        content)
    modelA = numpy.arange(2 * 3 * 5 * 7).reshape(2 * 3, 5, 7)

    listoffsetarrayB32 = awkward1.layout.ListOffsetArray32(
        awkward1.layout.Index32(offsetsB), listoffsetarrayA32)
    listarrayB32 = awkward1.layout.ListArray32(
        awkward1.layout.Index32(startsB), awkward1.layout.Index32(stopsB),
        listarrayA32)
    modelB = numpy.arange(2 * 3 * 5 * 7).reshape(2, 3, 5, 7)

    assert content.tojson() == json.dumps(awkward1.to_list(content),
                                          separators=(",", ":"))
    assert listoffsetarrayA32.tojson() == json.dumps(modelA.tolist(),
                                                     separators=(",", ":"))
    assert listoffsetarrayB32.tojson() == json.dumps(modelB.tolist(),
                                                     separators=(",", ":"))
    awkward1.to_json(awkward1.from_json(
        "[[1.1,2.2,3],[],[4,5.5]]")) == "[[1.1,2.2,3],[],[4,5.5]]"
def test_basic():
    content1 = awkward1.layout.NumpyArray(numpy.array([1, 2, 3, 4, 5]))
    content2 = awkward1.layout.NumpyArray(
        numpy.array([1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9]))
    offsets = awkward1.layout.Index64(numpy.array([0, 3, 3, 5, 6, 9]))
    listoffsetarray = awkward1.layout.ListOffsetArray64(offsets, content2)
    recordarray = awkward1.layout.RecordArray(
        [content1, listoffsetarray, content2, content1],
        keys=["one", "two", "2", "wonky"])
    assert awkward1.to_list(recordarray.field(0)) == [1, 2, 3, 4, 5]
    assert awkward1.to_list(recordarray.field("two")) == [[1.1, 2.2, 3.3], [],
                                                          [4.4, 5.5], [6.6],
                                                          [7.7, 8.8, 9.9]]
    assert awkward1.to_list(recordarray.field("wonky")) == [1, 2, 3, 4, 5]

    str(recordarray)
    assert awkward1.to_json(
        recordarray
    ) == '[{"one":1,"two":[1.1,2.2,3.3],"2":1.1,"wonky":1},{"one":2,"two":[],"2":2.2,"wonky":2},{"one":3,"two":[4.4,5.5],"2":3.3,"wonky":3},{"one":4,"two":[6.6],"2":4.4,"wonky":4},{"one":5,"two":[7.7,8.8,9.9],"2":5.5,"wonky":5}]'

    assert len(recordarray) == 5
    assert recordarray.key(0) == "one"
    assert recordarray.key(1) == "two"
    assert recordarray.key(2) == "2"
    assert recordarray.key(3) == "wonky"
    assert recordarray.fieldindex("wonky") == 3
    assert recordarray.fieldindex("one") == 0
    assert recordarray.fieldindex("0") == 0
    assert recordarray.fieldindex("two") == 1
    assert recordarray.fieldindex("1") == 1
    assert recordarray.fieldindex("2") == 2
    assert recordarray.haskey("wonky")
    assert recordarray.haskey("one")
    assert recordarray.haskey("0")
    assert recordarray.haskey("two")
    assert recordarray.haskey("1")
    assert recordarray.haskey("2")

    assert recordarray.keys() == ["one", "two", "2", "wonky"]
    assert [awkward1.to_list(x) for x in recordarray.fields()
            ] == [[1, 2, 3, 4, 5],
                  [[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],
                  [1, 2, 3, 4, 5]]
    pairs = recordarray.fielditems()
    assert pairs[0][0] == "one"
    assert pairs[1][0] == "two"
    assert pairs[2][0] == "2"
    assert pairs[3][0] == "wonky"
    assert awkward1.to_list(pairs[0][1]) == [1, 2, 3, 4, 5]
    assert awkward1.to_list(pairs[1][1]) == [[1.1, 2.2, 3.3], [], [4.4, 5.5],
                                             [6.6], [7.7, 8.8, 9.9]]
    assert awkward1.to_list(
        pairs[2][1]) == [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9]
    assert awkward1.to_list(pairs[3][1]) == [1, 2, 3, 4, 5]

    assert awkward1.to_json(
        recordarray.astuple
    ) == '[{"0":1,"1":[1.1,2.2,3.3],"2":1.1,"3":1},{"0":2,"1":[],"2":2.2,"3":2},{"0":3,"1":[4.4,5.5],"2":3.3,"3":3},{"0":4,"1":[6.6],"2":4.4,"3":4},{"0":5,"1":[7.7,8.8,9.9],"2":5.5,"3":5}]'
def test_numpy():
    a = awkward1.layout.NumpyArray(numpy.arange(2*3*5).reshape(2, 3, 5))
    assert awkward1.to_list(a) == [[[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]]]
    assert awkward1.to_json(a) == "[[[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]]]"

    b = awkward1.layout.NumpyArray(numpy.array([[[1.1, 2.2, 3.3], [4.4, 5.5, 6.6]], [[10.1, 20.2, 30.3], [40.4, 50.5, 60.6]]]))
    assert awkward1.to_json(b) == "[[[1.1,2.2,3.3],[4.4,5.5,6.6]],[[10.1,20.2,30.3],[40.4,50.5,60.6]]]"

    c = awkward1.layout.NumpyArray(numpy.array([[True, False, True], [False, False, True]]))
    assert awkward1.to_json(c) == "[[true,false,true],[false,false,true]]"
def test_scalar_record():
    content1 = awkward1.layout.NumpyArray(numpy.array([1, 2, 3, 4, 5]))
    content2 = awkward1.layout.NumpyArray(
        numpy.array([1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9]))
    offsets = awkward1.layout.Index64(numpy.array([0, 3, 3, 5, 6, 9]))
    listoffsetarray = awkward1.layout.ListOffsetArray64(offsets, content2)
    recordarray = awkward1.layout.RecordArray([content1, listoffsetarray],
                                              keys=["one", "two"])

    str(recordarray)
    str(recordarray[2])
    assert awkward1.to_json(recordarray[2]) == '{"one":3,"two":[4.4,5.5]}'

    assert recordarray[2].keys() == ["one", "two"]
    assert [awkward1.to_list(x)
            for x in recordarray[2].fields()] == [3, [4.4, 5.5]]
    pairs = recordarray[2].fielditems()
    assert pairs[0][0] == "one"
    assert pairs[1][0] == "two"
    assert pairs[0][1] == 3
    assert awkward1.to_list(pairs[1][1]) == [4.4, 5.5]
    assert awkward1.to_list(recordarray[2]) == {"one": 3, "two": [4.4, 5.5]}

    assert awkward1.to_list(awkward1.layout.Record(recordarray, 2)) == {
        "one": 3,
        "two": [4.4, 5.5]
    }
def test_BitMaskedArray():
    content = awkward1.layout.NumpyArray(numpy.arange(13))
    mask = awkward1.layout.IndexU8(numpy.array([58, 59], dtype=numpy.uint8))
    array = awkward1.layout.BitMaskedArray(mask,
                                           content,
                                           valid_when=False,
                                           length=13,
                                           lsb_order=False)
    assert numpy.asarray(
        array.bytemask()).tolist() == [0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1]
    assert numpy.asarray(array.toByteMaskedArray().mask).tolist() == [
        0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1
    ]
    assert numpy.asarray(array.toIndexedOptionArray64().index).tolist() == [
        0, 1, -1, -1, -1, 5, -1, 7, 8, 9, -1, -1, -1
    ]
    assert awkward1.to_list(array) == [
        0, 1, None, None, None, 5, None, 7, 8, 9, None, None, None
    ]
    assert awkward1.to_json(
        array) == "[0,1,null,null,null,5,null,7,8,9,null,null,null]"
    assert awkward1.to_list(
        array[1:-1]) == [1, None, None, None, 5, None, 7, 8, 9, None, None]
    assert awkward1.to_list(array[8:]) == [8, 9, None, None, None]

    array = awkward1.layout.BitMaskedArray(mask,
                                           content,
                                           valid_when=False,
                                           length=13,
                                           lsb_order=True)
    assert numpy.asarray(
        array.bytemask()).tolist() == [0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1]
    assert numpy.asarray(array.toByteMaskedArray().mask).tolist() == [
        0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1
    ]
    assert numpy.asarray(array.toIndexedOptionArray64().index).tolist() == [
        0, -1, 2, -1, -1, -1, 6, 7, -1, -1, 10, -1, -1
    ]
    assert awkward1.to_list(array) == [
        0, None, 2, None, None, None, 6, 7, None, None, 10, None, None
    ]
    assert awkward1.to_json(
        array) == "[0,null,2,null,null,null,6,7,null,null,10,null,null]"
    assert awkward1.to_list(array[1:-1]) == [
        None, 2, None, None, None, 6, 7, None, None, 10, None
    ]
    assert awkward1.to_list(array[8:]) == [None, None, 10, None, None]
def test_json():
    dataset = [
        '[{"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}]',
    ]
    for datum in dataset:
        assert awkward1.to_json(awkward1.from_json(datum)) == datum
def test_fromiter():
    builder = awkward1.layout.ArrayBuilder()

    builder.integer(0)
    builder.integer(1)
    builder.integer(2)
    builder.beginlist()
    builder.endlist()
    builder.beginlist()
    builder.real(1.1)
    builder.endlist()
    builder.beginlist()
    builder.real(1.1)
    builder.real(2.2)
    builder.endlist()
    builder.beginlist()
    builder.real(1.1)
    builder.real(2.2)
    builder.real(3.3)
    builder.endlist()

    assert awkward1.to_list(builder.snapshot()) == [
        0, 1, 2, [], [1.1], [1.1, 2.2], [1.1, 2.2, 3.3]
    ]

    assert awkward1.to_list(
        awkward1.from_iter(
            [0, 1, 2, [], [1.1], [1.1, 2.2],
             [1.1, 2.2,
              3.3]])) == [0, 1, 2, [], [1.1], [1.1, 2.2], [1.1, 2.2, 3.3]]
    assert awkward1.to_list(
        awkward1.from_iter([
            0, 1, 2, [], "zero", [1.1], "one", [1.1, 2.2], "two",
            [1.1, 2.2, 3.3], "three"
        ])) == [
            0, 1, 2, [], "zero", [1.1], "one", [1.1, 2.2], "two",
            [1.1, 2.2, 3.3], "three"
        ]
    assert awkward1.to_list(
        awkward1.from_json(
            '[0, 1, 2, [], "zero", [1.1], "one", [1.1, 2.2], "two", [1.1, 2.2, 3.3], "three"]'
        )) == [
            0, 1, 2, [], "zero", [1.1], "one", [1.1, 2.2], "two",
            [1.1, 2.2, 3.3], "three"
        ]
    assert awkward1.to_json(
        awkward1.from_json(
            '[0,1,2,[],"zero",[1.1],"one",[1.1,2.2],"two",[1.1,2.2,3.3],"three"]'
        )
    ) == '[0,1,2,[],"zero",[1.1],"one",[1.1,2.2],"two",[1.1,2.2,3.3],"three"]'
def test_builder_string():
    builder = awkward1.ArrayBuilder()

    builder.bytestring(b"one")
    builder.bytestring(b"two")
    builder.bytestring(b"three")

    a = builder.snapshot()
    if py27:
        assert str(a) == "['one', 'two', 'three']"
    else:
        assert str(a) == "[b'one', b'two', b'three']"
    assert awkward1.to_list(a) == [b'one', b'two', b'three']
    assert awkward1.to_json(a) == '["one","two","three"]'
    if py27:
        assert repr(a) == "<Array ['one', 'two', 'three'] type='3 * bytes'>"
    else:
        assert repr(a) == "<Array [b'one', b'two', b'three'] type='3 * bytes'>"
    assert repr(a.type) == "3 * bytes"

    builder = awkward1.ArrayBuilder()

    builder.string("one")
    builder.string("two")
    builder.string("three")

    a = builder.snapshot()
    if py27:
        assert str(a) == "[u'one', u'two', u'three']"
    else:
        assert str(a) == "['one', 'two', 'three']"
    assert awkward1.to_list(a) == ['one', 'two', 'three']
    assert awkward1.to_json(a) == '["one","two","three"]'
    if py27:
        assert repr(
            a) == "<Array [u'one', u'two', u'three'] type='3 * string'>"
    else:
        assert repr(a) == "<Array ['one', 'two', 'three'] type='3 * string'>"
    assert repr(a.type) == "3 * string"

    builder = awkward1.ArrayBuilder()

    builder.begin_list()
    builder.string("one")
    builder.string("two")
    builder.string("three")
    builder.end_list()

    builder.begin_list()
    builder.end_list()

    builder.begin_list()
    builder.string("four")
    builder.string("five")
    builder.end_list()

    a = builder.snapshot()
    if py27:
        assert str(a) == "[[u'one', u'two', u'three'], [], [u'four', u'five']]"
    else:
        assert str(a) == "[['one', 'two', 'three'], [], ['four', 'five']]"
    assert awkward1.to_list(a) == [['one', 'two', 'three'], [],
                                   ['four', 'five']]
    assert awkward1.to_json(a) == '[["one","two","three"],[],["four","five"]]'
    assert repr(a.type) == "3 * var * string"
Example #9
0
def test_tofile(tmp_path):
    awkward1.to_json(awkward1.from_json("[[1.1,2.2,3],[],[4,5.5]]"),
                     os.path.join(str(tmp_path), "tmp1.json"))

    with open(os.path.join(str(tmp_path), "tmp1.json"), "r") as f:
        f.read() == "[[1.1,2.2,3],[],[4,5.5]]"
Example #10
0
def test_tojson():
    assert awkward1.to_json(
        regulararray
    ) == "[[[0.0,1.1,2.2],[]],[[3.3,4.4],[5.5]],[[6.6,7.7,8.8,9.9],[]]]"