6
6
from hypothesis .strategies import SearchStrategy , composite
7
7
8
8
import argus
9
- from argus import DType
9
+ from argus import AllowedDtype , dtype
10
10
11
- AllowedDtype = Union [bool , int , float ]
12
11
13
-
14
- def gen_element_fn (dtype : Union [Type [AllowedDtype ], DType ]) -> SearchStrategy [AllowedDtype ]:
15
- new_dtype = DType .convert (dtype )
16
- if new_dtype == DType .Bool :
12
+ def gen_element_fn (dtype_ : Union [Type [AllowedDtype ], dtype ]) -> SearchStrategy [AllowedDtype ]:
13
+ new_dtype = dtype .convert (dtype_ )
14
+ if new_dtype == dtype .bool_ :
17
15
return st .booleans ()
18
- elif new_dtype == DType . Int :
16
+ elif new_dtype == dtype . int64 :
19
17
size = 2 ** 64
20
18
return st .integers (min_value = (- size // 2 ), max_value = ((size - 1 ) // 2 ))
21
- elif new_dtype == DType . UnsignedInt :
19
+ elif new_dtype == dtype . uint64 :
22
20
size = 2 ** 64
23
21
return st .integers (min_value = 0 , max_value = (size - 1 ))
24
- elif new_dtype == DType . Float :
22
+ elif new_dtype == dtype . float64 :
25
23
return st .floats (
26
24
width = 64 ,
27
25
allow_nan = False ,
28
26
allow_infinity = False ,
29
27
allow_subnormal = False ,
30
28
)
31
29
else :
32
- raise ValueError (f"invalid dtype { dtype } " )
30
+ raise ValueError (f"invalid dtype { dtype_ } " )
33
31
34
32
35
33
@composite
36
34
def gen_samples (
37
- draw : st .DrawFn , * , min_size : int , max_size : int , dtype : Union [Type [AllowedDtype ], DType ]
35
+ draw : st .DrawFn , min_size : int , max_size : int , dtype_ : Union [Type [AllowedDtype ], dtype ]
38
36
) -> List [Tuple [float , AllowedDtype ]]:
39
37
"""
40
38
Generate arbitrary samples for a signal where the time stamps are strictly
41
39
monotonically increasing
42
40
"""
43
- elements = gen_element_fn (dtype )
41
+ elements = gen_element_fn (dtype_ )
44
42
values = draw (st .lists (elements , min_size = min_size , max_size = max_size ))
45
43
xs = draw (
46
44
st .lists (
@@ -55,28 +53,28 @@ def gen_samples(
55
53
return xs
56
54
57
55
58
- def empty_signal (* , dtype : Union [Type [AllowedDtype ], DType ]) -> SearchStrategy [argus .Signal ]:
59
- new_dtype : DType = DType .convert (dtype )
56
+ def empty_signal (* , dtype_ : Union [Type [AllowedDtype ], dtype ]) -> SearchStrategy [argus .Signal ]:
57
+ new_dtype : dtype = dtype .convert (dtype_ )
60
58
sig : argus .Signal
61
- if new_dtype == DType . Bool :
59
+ if new_dtype == dtype . bool_ :
62
60
sig = argus .BoolSignal ()
63
- assert sig .kind is bool
64
- elif new_dtype == DType . UnsignedInt :
61
+ assert sig .kind == dtype . bool_
62
+ elif new_dtype == dtype . uint64 :
65
63
sig = argus .UnsignedIntSignal ()
66
- assert sig .kind is int
67
- elif new_dtype == DType . Int :
64
+ assert sig .kind == dtype . uint64
65
+ elif new_dtype == dtype . int64 :
68
66
sig = argus .IntSignal ()
69
- assert sig .kind is int
70
- elif new_dtype == DType . Float :
67
+ assert sig .kind == dtype . int64
68
+ elif new_dtype == dtype . float64 :
71
69
sig = argus .FloatSignal ()
72
- assert sig .kind is float
70
+ assert sig .kind == dtype . float64
73
71
else :
74
72
raise ValueError ("unknown dtype" )
75
73
return st .just (sig )
76
74
77
75
78
- def constant_signal (dtype : Union [Type [AllowedDtype ], DType ]) -> SearchStrategy [argus .Signal ]:
79
- return gen_element_fn (dtype ).map (lambda val : argus .signal (dtype , data = val ))
76
+ def constant_signal (dtype_ : Union [Type [AllowedDtype ], dtype ]) -> SearchStrategy [argus .Signal ]:
77
+ return gen_element_fn (dtype_ ).map (lambda val : argus .signal (dtype_ , data = val ))
80
78
81
79
82
80
@composite
@@ -87,16 +85,16 @@ def draw_index(draw: st.DrawFn, vec: List) -> int:
87
85
return draw (st .just (0 ))
88
86
89
87
90
- def gen_dtype () -> SearchStrategy [Union [Type [AllowedDtype ], DType ]]:
88
+ def gen_dtype () -> SearchStrategy [Union [Type [AllowedDtype ], dtype ]]:
91
89
return st .one_of (
92
- list (map (st .just , [DType . Bool , DType . UnsignedInt , DType . Int , DType . Float , bool , int , float ])), # type: ignore[arg-type]
90
+ list (map (st .just , [dtype . bool_ , dtype . uint64 , dtype . int64 , dtype . float64 , bool , int , float ])), # type: ignore[arg-type]
93
91
)
94
92
95
93
96
94
@given (st .data ())
97
95
def test_correct_constant_signals (data : st .DataObject ) -> None :
98
- dtype = data .draw (gen_dtype ())
99
- signal = data .draw (constant_signal (dtype ))
96
+ dtype_ = data .draw (gen_dtype ())
97
+ signal = data .draw (constant_signal (dtype_ ))
100
98
101
99
assert not signal .is_empty ()
102
100
assert signal .start_time is None
@@ -105,11 +103,11 @@ def test_correct_constant_signals(data: st.DataObject) -> None:
105
103
106
104
@given (st .data ())
107
105
def test_correctly_create_signals (data : st .DataObject ) -> None :
108
- dtype = data .draw (gen_dtype ())
109
- xs = data .draw (gen_samples (min_size = 0 , max_size = 100 , dtype = dtype ))
106
+ dtype_ = data .draw (gen_dtype ())
107
+ xs = data .draw (gen_samples (min_size = 0 , max_size = 100 , dtype_ = dtype_ ))
110
108
111
109
note (f"Samples: { gen_samples } " )
112
- signal = argus .signal (dtype , data = xs )
110
+ signal = argus .signal (dtype_ , data = xs )
113
111
if len (xs ) > 0 :
114
112
expected_start_time = xs [0 ][0 ]
115
113
expected_end_time = xs [- 1 ][0 ]
@@ -132,7 +130,7 @@ def test_correctly_create_signals(data: st.DataObject) -> None:
132
130
133
131
# generate one more sample
134
132
new_time = actual_end_time + 1
135
- new_value = data .draw (gen_element_fn (dtype ))
133
+ new_value = data .draw (gen_element_fn (dtype_ ))
136
134
signal .push (new_time , new_value ) # type: ignore[arg-type]
137
135
138
136
get_val = signal .at (new_time )
@@ -148,8 +146,8 @@ def test_correctly_create_signals(data: st.DataObject) -> None:
148
146
149
147
@given (st .data ())
150
148
def test_signal_create_should_fail (data : st .DataObject ) -> None :
151
- dtype = data .draw (gen_dtype ())
152
- xs = data .draw (gen_samples (min_size = 10 , max_size = 100 , dtype = dtype ))
149
+ dtype_ = data .draw (gen_dtype ())
150
+ xs = data .draw (gen_samples (min_size = 10 , max_size = 100 , dtype_ = dtype_ ))
153
151
a = data .draw (draw_index (xs ))
154
152
b = data .draw (draw_index (xs ))
155
153
assume (a != b )
@@ -161,24 +159,24 @@ def test_signal_create_should_fail(data: st.DataObject) -> None:
161
159
xs [b ], xs [a ] = xs [a ], xs [b ]
162
160
163
161
with pytest .raises (RuntimeError , match = r"trying to create a non-monotonically signal.+" ):
164
- _ = argus .signal (dtype , data = xs )
162
+ _ = argus .signal (dtype_ , data = xs )
165
163
166
164
167
165
@given (st .data ())
168
166
def test_push_to_empty_signal (data : st .DataObject ) -> None :
169
- dtype = data .draw (gen_dtype ())
170
- sig = data .draw (empty_signal (dtype = dtype ))
167
+ dtype_ = data .draw (gen_dtype ())
168
+ sig = data .draw (empty_signal (dtype_ = dtype_ ))
171
169
assert sig .is_empty ()
172
- element = data .draw (gen_element_fn (dtype ))
170
+ element = data .draw (gen_element_fn (dtype_ ))
173
171
with pytest .raises (RuntimeError , match = "cannot push value to non-sampled signal" ):
174
172
sig .push (0.0 , element ) # type: ignore[attr-defined]
175
173
176
174
177
175
@given (st .data ())
178
176
def test_push_to_constant_signal (data : st .DataObject ) -> None :
179
- dtype = data .draw (gen_dtype ())
180
- sig = data .draw (constant_signal (dtype = dtype ))
177
+ dtype_ = data .draw (gen_dtype ())
178
+ sig = data .draw (constant_signal (dtype_ = dtype_ ))
181
179
assert not sig .is_empty ()
182
- sample = data .draw (gen_samples (min_size = 1 , max_size = 1 , dtype = dtype ))[0 ]
180
+ sample = data .draw (gen_samples (min_size = 1 , max_size = 1 , dtype_ = dtype_ ))[0 ]
183
181
with pytest .raises (RuntimeError , match = "cannot push value to non-sampled signal" ):
184
182
sig .push (* sample ) # type: ignore[attr-defined]
0 commit comments