|
17 | 17 | from enum import Enum
|
18 | 18 | from random import Random, getrandbits
|
19 | 19 | from typing import (
|
| 20 | + Any, |
20 | 21 | Callable,
|
21 | 22 | Dict,
|
22 | 23 | Final,
|
|
27 | 28 | NoReturn,
|
28 | 29 | Optional,
|
29 | 30 | Set,
|
| 31 | + Tuple, |
30 | 32 | Union,
|
31 | 33 | overload,
|
32 | 34 | )
|
@@ -217,9 +219,7 @@ def __init__(
|
217 | 219 | self.stats_per_test_case: List[CallStats] = []
|
218 | 220 |
|
219 | 221 | # At runtime, the keys are only ever type `InterestingOrigin`, but can be `None` during tests.
|
220 |
| - self.interesting_examples: Dict[ |
221 |
| - Optional[InterestingOrigin], ConjectureResult |
222 |
| - ] = {} |
| 222 | + self.interesting_examples: Dict[InterestingOrigin, ConjectureResult] = {} |
223 | 223 | # We use call_count because there may be few possible valid_examples.
|
224 | 224 | self.first_bug_found_at: Optional[int] = None
|
225 | 225 | self.last_bug_found_at: Optional[int] = None
|
@@ -317,15 +317,18 @@ def _cache_key_ir(
|
317 | 317 | *,
|
318 | 318 | nodes: Optional[List[IRNode]] = None,
|
319 | 319 | data: Union[ConjectureData, ConjectureResult, None] = None,
|
320 |
| - ): |
| 320 | + ) -> Tuple[Tuple[Any, ...], ...]: |
321 | 321 | assert (nodes is not None) ^ (data is not None)
|
322 | 322 | extension = []
|
323 | 323 | if data is not None:
|
324 | 324 | nodes = data.examples.ir_tree_nodes
|
325 | 325 | if data.invalid_at is not None:
|
326 | 326 | # if we're invalid then we should have at least one node left (the invalid one).
|
| 327 | + assert isinstance(data, ConjectureData) |
| 328 | + assert data.ir_tree_nodes is not None |
327 | 329 | assert data._node_index < len(data.ir_tree_nodes)
|
328 | 330 | extension = [data.ir_tree_nodes[data._node_index]]
|
| 331 | + assert nodes is not None |
329 | 332 |
|
330 | 333 | # intentionally drop was_forced from equality here, because the was_forced
|
331 | 334 | # of node prefixes on ConjectureData has no impact on that data's result
|
@@ -356,7 +359,9 @@ def _cache(self, data: Union[ConjectureData, ConjectureResult]) -> None:
|
356 | 359 | key = self._cache_key_ir(data=data)
|
357 | 360 | self.__data_cache_ir[key] = result
|
358 | 361 |
|
359 |
| - def cached_test_function_ir(self, nodes: List[IRNode]) -> ConjectureResult: |
| 362 | + def cached_test_function_ir( |
| 363 | + self, nodes: List[IRNode] |
| 364 | + ) -> Union[ConjectureResult, _Overrun]: |
360 | 365 | key = self._cache_key_ir(nodes=nodes)
|
361 | 366 | try:
|
362 | 367 | return self.__data_cache_ir[key]
|
@@ -427,7 +432,6 @@ def test_function(self, data: ConjectureData) -> None:
|
427 | 432 |
|
428 | 433 | if data.status >= Status.VALID:
|
429 | 434 | for k, v in data.target_observations.items():
|
430 |
| - assert k is not None |
431 | 435 | self.best_observed_targets[k] = max(self.best_observed_targets[k], v)
|
432 | 436 |
|
433 | 437 | if k not in self.best_examples_of_observed_targets:
|
@@ -471,7 +475,7 @@ def test_function(self, data: ConjectureData) -> None:
|
471 | 475 | key = data.interesting_origin
|
472 | 476 | changed = False
|
473 | 477 | try:
|
474 |
| - existing = self.interesting_examples[key] |
| 478 | + existing = self.interesting_examples[key] # type: ignore |
475 | 479 | except KeyError:
|
476 | 480 | changed = True
|
477 | 481 | self.last_bug_found_at = self.call_count
|
@@ -1153,7 +1157,7 @@ def new_conjecture_data_ir(
|
1153 | 1157 | ir_tree_prefix: List[IRNode],
|
1154 | 1158 | *,
|
1155 | 1159 | observer: Optional[DataObserver] = None,
|
1156 |
| - ): |
| 1160 | + ) -> ConjectureData: |
1157 | 1161 | provider = (
|
1158 | 1162 | HypothesisProvider if self._switch_to_hypothesis_provider else self.provider
|
1159 | 1163 | )
|
|
0 commit comments