11from __future__ import annotations
22
33from collections .abc import Callable
4+ from collections .abc import Iterable
5+ from collections .abc import Iterator
46from collections .abc import Set as AbstractSet
57from typing import TypeAlias
68
@@ -13,73 +15,69 @@ def _set_one_sided_diff(
1315 set1 : AbstractSet [object ],
1416 set2 : AbstractSet [object ],
1517 highlighter : _HighlightFunc ,
16- ) -> list [str ]:
17- explanation = []
18+ ) -> Iterator [str ]:
1819 diff = set1 - set2
1920 if diff :
20- explanation . append ( f"Extra items in the { posn } set:" )
21+ yield f"Extra items in the { posn } set:"
2122 for item in diff :
22- explanation .append (highlighter (saferepr (item )))
23- return explanation
23+ yield highlighter (saferepr (item ))
2424
2525
2626def _compare_eq_set (
2727 left : AbstractSet [object ],
2828 right : AbstractSet [object ],
2929 highlighter : _HighlightFunc ,
3030 verbose : int = 0 ,
31- ) -> list [str ]:
32- explanation = []
33- explanation .extend (_set_one_sided_diff ("left" , left , right , highlighter ))
34- explanation .extend (_set_one_sided_diff ("right" , right , left , highlighter ))
35- return explanation
31+ ) -> Iterator [str ]:
32+ yield from _set_one_sided_diff ("left" , left , right , highlighter )
33+ yield from _set_one_sided_diff ("right" , right , left , highlighter )
3634
3735
38- def _compare_gt_set (
36+ def _compare_gte_set (
3937 left : AbstractSet [object ],
4038 right : AbstractSet [object ],
4139 highlighter : _HighlightFunc ,
4240 verbose : int = 0 ,
43- ) -> list [str ]:
44- explanation = _compare_gte_set (left , right , highlighter )
45- if not explanation :
46- return ["Both sets are equal" ]
47- return explanation
41+ ) -> Iterator [str ]:
42+ yield from _set_one_sided_diff ("right" , right , left , highlighter )
4843
4944
50- def _compare_lt_set (
45+ def _compare_lte_set (
5146 left : AbstractSet [object ],
5247 right : AbstractSet [object ],
5348 highlighter : _HighlightFunc ,
5449 verbose : int = 0 ,
55- ) -> list [str ]:
56- explanation = _compare_lte_set (left , right , highlighter )
57- if not explanation :
58- return ["Both sets are equal" ]
59- return explanation
50+ ) -> Iterator [str ]:
51+ yield from _set_one_sided_diff ("left" , left , right , highlighter )
6052
6153
62- def _compare_gte_set (
54+ def _compare_gt_set (
6355 left : AbstractSet [object ],
6456 right : AbstractSet [object ],
6557 highlighter : _HighlightFunc ,
6658 verbose : int = 0 ,
67- ) -> list [str ]:
68- return _set_one_sided_diff ("right" , right , left , highlighter )
59+ ) -> Iterator [str ]:
60+ if left == right :
61+ yield "Both sets are equal"
62+ else :
63+ yield from _set_one_sided_diff ("right" , right , left , highlighter )
6964
7065
71- def _compare_lte_set (
66+ def _compare_lt_set (
7267 left : AbstractSet [object ],
7368 right : AbstractSet [object ],
7469 highlighter : _HighlightFunc ,
7570 verbose : int = 0 ,
76- ) -> list [str ]:
77- return _set_one_sided_diff ("left" , left , right , highlighter )
71+ ) -> Iterator [str ]:
72+ if left == right :
73+ yield "Both sets are equal"
74+ else :
75+ yield from _set_one_sided_diff ("left" , left , right , highlighter )
7876
7977
8078SetComparisonFunction : TypeAlias = Callable [
8179 [AbstractSet [object ], AbstractSet [object ], _HighlightFunc , int ],
82- list [str ],
80+ Iterable [str ],
8381]
8482
8583SET_COMPARISON_FUNCTIONS : dict [str , SetComparisonFunction ] = {
0 commit comments