File: test_3210_to_raggedtensor_from_raggedtensor.py

package info (click to toggle)
python-awkward 2.8.9-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 24,932 kB
  • sloc: python: 178,875; cpp: 33,828; sh: 432; makefile: 21; javascript: 8
file content (127 lines) | stat: -rw-r--r-- 4,017 bytes parent folder | download
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# BSD 3-Clause License; see https://github.com/scikit-hep/awkward/blob/main/LICENSE

from __future__ import annotations

import numpy as np
import pytest

import awkward as ak

to_raggedtensor = ak.operations.to_raggedtensor
from_raggedtensor = ak.operations.from_raggedtensor

tf = pytest.importorskip("tensorflow")

content = ak.contents.NumpyArray(
    np.array([1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9])
)
starts1 = ak.index.Index64(np.array([0, 3, 3, 5, 6]))
stops1 = ak.index.Index64(np.array([3, 3, 5, 6, 9]))
starts2 = ak.index.Index64(np.array([0, 3]))
stops2 = ak.index.Index64(np.array([3, 5]))

array = np.arange(2 * 3 * 5).reshape(2, 3, 5)
content2 = ak.contents.NumpyArray(array.reshape(-1))
inneroffsets = ak.index.Index64(np.array([0, 5, 10, 15, 20, 25, 30]))
outeroffsets = ak.index.Index64(np.array([0, 3, 6]))


def test_convert_to_raggedtensor():
    # a test for ListArray -> RaggedTensor
    array1 = ak.contents.ListArray(starts1, stops1, content)
    assert to_raggedtensor(array1).to_list() == [
        [1.1, 2.2, 3.3],
        [],
        [4.4, 5.5],
        [6.6],
        [7.7, 8.8, 9.9],
    ]

    # a test for awkward.highlevel.Array -> RaggedTensor
    array2 = ak.Array(array1)
    assert to_raggedtensor(array2).to_list() == [
        [1.1, 2.2, 3.3],
        [],
        [4.4, 5.5],
        [6.6],
        [7.7, 8.8, 9.9],
    ]

    # a test for NumpyArray -> RaggedTensor
    array3 = content
    assert to_raggedtensor(array3).to_list() == [
        [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9]
    ]

    # a test for RegularArray -> RaggedTensor
    array4 = ak.contents.RegularArray(content, size=2)
    assert to_raggedtensor(array4).to_list() == [
        [1.1, 2.2],
        [3.3, 4.4],
        [5.5, 6.6],
        [7.7, 8.8],
    ]

    # try a single line awkward array
    array5 = ak.Array([3, 1, 4, 1, 9, 2, 6])
    assert to_raggedtensor(array5).to_list() == [[3, 1, 4, 1, 9, 2, 6]]

    # try a multiple ragged array
    array6 = ak.Array([[[1.1, 2.2], [3.3]], [], [[4.4, 5.5]]])
    assert to_raggedtensor(array6).to_list() == [[[1.1, 2.2], [3.3]], [], [[4.4, 5.5]]]

    # try a listoffset array inside a listoffset array
    array7 = ak.contents.ListOffsetArray(
        outeroffsets, ak.contents.ListOffsetArray(inneroffsets, content2)
    )
    assert to_raggedtensor(array7).to_list() == [
        [[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]],
    ]

    # try a list array inside a list array

    array8 = ak.contents.ListArray(
        starts2, stops2, ak.contents.ListArray(starts1, stops1, content)
    )
    assert to_raggedtensor(array8).to_list() == [
        [[1.1, 2.2, 3.3], [], [4.4, 5.5]],
        [[6.6], [7.7, 8.8, 9.9]],
    ]

    # try just a python list
    array9 = [3, 1, 4, 1, 9, 2, 6]
    assert to_raggedtensor(array9).to_list() == [[3, 1, 4, 1, 9, 2, 6]]


np_array1 = np.array([1.1, 2.2, 3.3, 4.4, 5.5], dtype=np.float32)

offsets1 = ak.index.Index64(np.array([0, 2, 3, 3, 5]))
content1 = ak.contents.NumpyArray(np_array1)


def test_convert_from_raggedtensor():
    tf_array1 = tf.RaggedTensor.from_row_splits(
        values=[1.1, 2.2, 3.3, 4.4, 5.5], row_splits=[0, 2, 3, 3, 5]
    )

    ak_array1 = ak.contents.ListOffsetArray(offsets1, content1)
    result1 = ak.to_layout(from_raggedtensor(tf_array1), allow_record=False)
    assert (
        result1.content.data == ak.to_backend(np_array1, result1.backend).layout.data
    ).all()
    assert (
        result1.offsets.data
        == ak.to_backend([0, 2, 3, 3, 5], result1.backend).layout.data
    ).all()
    assert from_raggedtensor(tf_array1).to_list() == ak_array1.to_list()

    tf_array2 = tf.RaggedTensor.from_nested_row_splits(
        flat_values=[3, 1, 4, 1, 5, 9, 2, 6],
        nested_row_splits=([0, 3, 3, 5], [0, 4, 4, 7, 8, 8]),
    )
    assert from_raggedtensor(tf_array2).to_list() == [
        [[3, 1, 4, 1], [], [5, 9, 2]],
        [],
        [[6], []],
    ]