Skip to content

Commit e0f0988

Browse files
ariostasianna
andauthored
chore: update pyodide in CI and add more tests (#1365)
* Update Pyodide and Awkward versions * Added AwkwardForth test for wasm * Fixed test * Updated Pyodide version * Fixed test * Linter fixes --------- Co-authored-by: Ianna Osborne <[email protected]>
1 parent d08a989 commit e0f0988

File tree

3 files changed

+169
-20
lines changed

3 files changed

+169
-20
lines changed

.github/workflows/build-test.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,9 @@ jobs:
127127
runs-on: ubuntu-latest
128128
timeout-minutes: 30
129129
env:
130-
PYODIDE_VERSION: 0.26.2
131-
PYODIDE_BUILD_VERSION: 0.28.0
132-
AWKWARD_VERSION: v2.6.4
130+
PYODIDE_VERSION: 0.27.3
131+
PYODIDE_BUILD_VERSION: 0.29.3
132+
AWKWARD_VERSION: v2.7.4
133133

134134
steps:
135135
- name: Checkout

tests-wasm/test_1272_basic_functionality.py

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -70,33 +70,33 @@ def test_write_ttree(selenium):
7070

7171

7272
# Taken from test_1191_rntuple_fixes.py
73-
@pytest.mark.skip(reason="Skipping until test files are available with RNTuple v1.0")
74-
@run_test_in_pyodide(test_file="test_ntuple_extension_columns.root")
73+
@run_test_in_pyodide(test_file="test_extension_columns_rntuple_v1-0-0-0.root")
7574
def test_read_rntuple(selenium):
7675
import uproot
7776

78-
with uproot.open("test_ntuple_extension_columns.root") as f:
79-
obj = f["EventData"]
77+
with uproot.open("test_extension_columns_rntuple_v1-0-0-0.root") as f:
78+
obj = f["ntuple"]
79+
80+
assert len(obj.page_link_list[0]) < len(obj.page_link_list[1])
8081

8182
assert len(obj.column_records) > len(obj.header.column_records)
82-
assert len(obj.column_records) == 936
83-
assert obj.column_records[903].first_element_index == 36
83+
assert len(obj.column_records) == 4
84+
assert obj.column_records[1].first_element_index == 200
85+
assert obj.column_records[2].first_element_index == 400
8486

8587
arrays = obj.arrays()
8688

87-
pbs = arrays[
88-
"HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_TLAAux::fastDIPS20211215_pb"
89-
]
90-
assert len(pbs) == 40
91-
assert all(len(a) == 0 for a in pbs[:36])
92-
assert next(i for i, a in enumerate(pbs) if len(a) != 0) == 36
89+
assert len(arrays.float_field) == 600
90+
assert len(arrays.intvec_field) == 600
91+
92+
assert all(arrays.float_field[:200] == 0)
93+
assert all(len(a) == 0 for a in arrays.intvec_field[:400])
9394

94-
jets = arrays["HLT_AntiKt4EMPFlowJets_subresjesgscIS_ftf_TLAAux:"]
95-
assert len(jets.pt) == len(pbs)
95+
assert next(i for i, a in enumerate(arrays.float_field) if a != 0) == 200
96+
assert next(i for i, a in enumerate(arrays.intvec_field) if len(a) != 0) == 400
9697

9798

9899
# Taken from test_0034_generic_objects_in_ttrees.py
99-
@pytest.mark.skip(reason="Skipping until test files are available with RNTuple v1.0")
100100
@pytest.mark.network
101101
@run_test_in_pyodide(packages=["requests"])
102102
def test_read_ttree_http(selenium):
@@ -118,14 +118,13 @@ def test_read_ttree_http(selenium):
118118

119119

120120
# Taken from test_1191_rntuple_fixes.py
121-
@pytest.mark.skip(reason="Skipping until test files are available with RNTuple v1.0")
122121
@pytest.mark.network
123122
@run_test_in_pyodide(packages=["requests"])
124123
def test_read_rntuple_http(selenium):
125124
import uproot
126125

127126
with uproot.open(
128-
"https://github.com/scikit-hep/scikit-hep-testdata/raw/main/src/skhep_testdata/data/Run2012BC_DoubleMuParked_Muons_rntuple_1000evts.root",
127+
"https://github.com/scikit-hep/scikit-hep-testdata/raw/main/src/skhep_testdata/data/Run2012BC_DoubleMuParked_Muons_1000evts_rntuple_v1-0-0-0.root",
129128
handler=uproot.source.http.HTTPSource,
130129
) as f:
131130
obj = f["Events"]
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
# BSD 3-Clause License; see https://github.com/scikit-hep/uproot5/blob/main/LICENSE
2+
from __future__ import annotations
3+
4+
from utils import run_test_in_pyodide
5+
6+
7+
# Taken from test_1347_rntuple_floats_suppressed_cols.py
8+
@run_test_in_pyodide(test_file="test_float_types_rntuple_v1-0-0-0.root")
9+
def test_rntuple_with_awkwardforth(selenium):
10+
import numpy as np
11+
12+
import uproot
13+
14+
def truncate_float(value, bits):
15+
a = np.float32(value).view(np.uint32)
16+
a &= np.uint32(0xFFFFFFFF) << (32 - bits)
17+
return a.astype(np.uint32).view(np.float32)
18+
19+
def quantize_float(value, bits, min, max):
20+
min = np.float32(min)
21+
max = np.float32(max)
22+
if value < min or value > max:
23+
raise ValueError(f"Value {value} is out of range [{min}, {max}]")
24+
scaled_value = (value - min) * (2**bits - 1) / (max - min)
25+
int_value = np.round(scaled_value)
26+
quantized_float = min + int_value * (max - min) / ((1 << bits) - 1)
27+
return quantized_float.astype(np.float32)
28+
29+
with uproot.open("test_float_types_rntuple_v1-0-0-0.root") as f:
30+
obj = f["ntuple"]
31+
32+
arrays = obj.arrays()
33+
34+
min_value = -2.0
35+
max_value = 3.0
36+
37+
entry = arrays[0]
38+
true_value = 1.23456789
39+
assert entry.trunc10 == truncate_float(true_value, 10)
40+
assert entry.trunc16 == truncate_float(true_value, 16)
41+
assert entry.trunc24 == truncate_float(true_value, 24)
42+
assert entry.trunc31 == truncate_float(true_value, 31)
43+
assert np.isclose(
44+
entry.quant1, quantize_float(true_value, 1, min_value, max_value)
45+
)
46+
assert np.isclose(
47+
entry.quant8, quantize_float(true_value, 8, min_value, max_value)
48+
)
49+
assert np.isclose(
50+
entry.quant16, quantize_float(true_value, 16, min_value, max_value)
51+
)
52+
assert np.isclose(
53+
entry.quant20, quantize_float(true_value, 20, min_value, max_value)
54+
)
55+
assert np.isclose(
56+
entry.quant24, quantize_float(true_value, 24, min_value, max_value)
57+
)
58+
assert np.isclose(
59+
entry.quant25, quantize_float(true_value, 25, min_value, max_value)
60+
)
61+
assert np.isclose(
62+
entry.quant32, quantize_float(true_value, 32, min_value, max_value)
63+
)
64+
65+
entry = arrays[1]
66+
true_value = 1.4660155e13
67+
assert entry.trunc10 == truncate_float(true_value, 10)
68+
assert entry.trunc16 == truncate_float(true_value, 16)
69+
assert entry.trunc24 == truncate_float(true_value, 24)
70+
assert entry.trunc31 == truncate_float(true_value, 31)
71+
true_value = 1.6666666
72+
assert np.isclose(
73+
entry.quant1, quantize_float(true_value, 1, min_value, max_value)
74+
)
75+
assert np.isclose(
76+
entry.quant8, quantize_float(true_value, 8, min_value, max_value)
77+
)
78+
assert np.isclose(
79+
entry.quant16, quantize_float(true_value, 16, min_value, max_value)
80+
)
81+
assert np.isclose(
82+
entry.quant20, quantize_float(true_value, 20, min_value, max_value)
83+
)
84+
assert np.isclose(
85+
entry.quant24, quantize_float(true_value, 24, min_value, max_value)
86+
)
87+
assert np.isclose(
88+
entry.quant25, quantize_float(true_value, 25, min_value, max_value)
89+
)
90+
assert np.isclose(
91+
entry.quant32, quantize_float(true_value, 32, min_value, max_value)
92+
)
93+
94+
entry = arrays[2]
95+
true_value = -6.2875986e-22
96+
assert entry.trunc10 == truncate_float(true_value, 10)
97+
assert entry.trunc16 == truncate_float(true_value, 16)
98+
assert entry.trunc24 == truncate_float(true_value, 24)
99+
assert entry.trunc31 == truncate_float(true_value, 31)
100+
assert np.isclose(
101+
entry.quant1, quantize_float(true_value, 1, min_value, max_value)
102+
)
103+
assert np.isclose(
104+
entry.quant8, quantize_float(true_value, 8, min_value, max_value)
105+
)
106+
assert np.isclose(
107+
entry.quant16, quantize_float(true_value, 16, min_value, max_value)
108+
)
109+
assert np.isclose(
110+
entry.quant20, quantize_float(true_value, 20, min_value, max_value)
111+
)
112+
assert np.isclose(
113+
entry.quant24, quantize_float(true_value, 24, min_value, max_value)
114+
)
115+
assert np.isclose(
116+
entry.quant25,
117+
quantize_float(true_value, 25, min_value, max_value),
118+
atol=2e-07,
119+
)
120+
assert np.isclose(
121+
entry.quant32, quantize_float(true_value, 32, min_value, max_value)
122+
)
123+
124+
entry = arrays[3]
125+
true_value = -1.9060668
126+
assert entry.trunc10 == truncate_float(true_value, 10)
127+
assert entry.trunc16 == truncate_float(true_value, 16)
128+
assert entry.trunc24 == truncate_float(true_value, 24)
129+
assert entry.trunc31 == truncate_float(true_value, 31)
130+
assert np.isclose(
131+
entry.quant1, quantize_float(true_value, 1, min_value, max_value)
132+
)
133+
assert np.isclose(
134+
entry.quant8, quantize_float(true_value, 8, min_value, max_value)
135+
)
136+
assert np.isclose(
137+
entry.quant16, quantize_float(true_value, 16, min_value, max_value)
138+
)
139+
assert np.isclose(
140+
entry.quant20, quantize_float(true_value, 20, min_value, max_value)
141+
)
142+
assert np.isclose(
143+
entry.quant24, quantize_float(true_value, 24, min_value, max_value)
144+
)
145+
assert np.isclose(
146+
entry.quant25, quantize_float(true_value, 25, min_value, max_value)
147+
)
148+
assert np.isclose(
149+
entry.quant32, quantize_float(true_value, 32, min_value, max_value)
150+
)

0 commit comments

Comments
 (0)