Coverage for tests/test_types.py: 100%
90 statements
« prev ^ index » next coverage.py v7.15.1, created at 2026-07-15 09:33 +0000
« prev ^ index » next coverage.py v7.15.1, created at 2026-07-15 09:33 +0000
1import numpy as np
3from evutils.types import Event_dtype
6def test_event_size() -> None:
7 a = np.zeros(1, dtype=Event_dtype)
8 assert a.itemsize == 13
11def test_event_dtype() -> None:
12 a = np.zeros(1, dtype=Event_dtype)
13 a['t'] = 1
14 a['x'] = 2
15 a['y'] = 3
16 a['p'] = 4
19def test_soa_array_indexing() -> None:
20 from evutils.types import EventArray, TriggerArray
22 # EventArray
23 t = [10, 20, 30]
24 x = [1, 2, 3]
25 y = [4, 5, 6]
26 p = [0, 1, 0]
28 events = EventArray(t, x, y, p)
30 # Test column access
31 assert np.array_equal(events['t'], t)
32 assert np.array_equal(events.t, t)
34 # Test slice indexing
35 ev_slice = events[1:]
36 assert isinstance(ev_slice, EventArray)
37 assert len(ev_slice) == 2
38 assert ev_slice.t[0] == 20
40 # Test scalar indexing (should return a void record, just like AoS)
41 ev_single = events[1]
42 assert isinstance(ev_single, np.void)
43 assert ev_single['t'] == 20
44 assert ev_single['x'] == 2
46 # TriggerArray
47 trig_t = [100, 200]
48 trig_p = [1, 0]
49 trig_id = [5, 6]
51 triggers = TriggerArray(trig_t, trig_p, trig_id)
53 # Test slice indexing
54 trig_slice = triggers[:1]
55 assert isinstance(trig_slice, TriggerArray)
56 assert len(trig_slice) == 1
58 # Test scalar indexing
59 trig_single = triggers[0]
60 assert isinstance(trig_single, np.void)
61 assert trig_single['t'] == 100
62 assert trig_single['id'] == 5
65def test_event_array_empty() -> None:
66 from evutils.types import EventArray
67 empty_events = EventArray.empty()
68 assert len(empty_events) == 0
69 assert len(empty_events.t) == 0
70 assert empty_events.to_aos().shape == (0,)
71 assert repr(empty_events) == "EventArray(empty)"
74def test_soa_array_negative_indexing() -> None:
75 from evutils.types import EventArray
76 t = [10, 20, 30]
77 x = [1, 2, 3]
78 y = [4, 5, 6]
79 p = [0, 1, 0]
81 events = EventArray(t, x, y, p)
83 # Negative scalar index
84 ev_last = events[-1]
85 assert isinstance(ev_last, np.void)
86 assert ev_last['t'] == 30
87 assert ev_last['x'] == 3
89 # Negative slice
90 ev_slice = events[-2:]
91 assert isinstance(ev_slice, EventArray)
92 assert len(ev_slice) == 2
93 assert ev_slice.t[0] == 20
94 assert ev_slice.t[1] == 30
97def test_soa_array_bool_indexing() -> None:
98 from evutils.types import EventArray
99 t = [10, 20, 30]
100 x = [1, 2, 3]
101 y = [4, 5, 6]
102 p = [0, 1, 0]
104 events = EventArray(t, x, y, p)
106 # Bool index
107 mask = events.p == 1
108 ev_bool = events[mask]
109 assert isinstance(ev_bool, EventArray)
110 assert len(ev_bool) == 1
111 assert ev_bool.t[0] == 20
114def test_soa_array_repr_long() -> None:
115 from evutils.types import EventArray
116 t = np.arange(20)
117 x = np.arange(20)
118 y = np.arange(20)
119 p = np.zeros(20)
121 events = EventArray(t, x, y, p)
122 rep = repr(events)
123 assert "..." in rep
124 assert "EventArray(n=20)" in rep
127def test_trigger_array_empty() -> None:
128 from evutils.types import TriggerArray
129 empty_trig = TriggerArray.empty()
130 assert len(empty_trig) == 0
131 assert len(empty_trig.t) == 0
132 assert empty_trig.to_aos().shape == (0,)