1- from typing import Iterable , Callable , Self
1+ from typing import Iterable , Callable
22from itertools import product , chain
33from functools import reduce
44from dataclasses import dataclass , replace
@@ -61,7 +61,7 @@ def entry_to_ingredients(cls, entry: Entry) -> tuple[FrozenMultiset[cardid], Fro
6161 def entries (self ) -> Iterable [Entry ]:
6262 return self .sets
6363
64- def filter (self , entry : Entry ) -> Self :
64+ def filter (self , entry : Entry ):
6565 return self .__class__ (parameters = replace (self .parameters , filter = entry ), _internal = self .sets .subtree (entry ))
6666
6767 def __str__ (self ) -> str :
@@ -70,11 +70,11 @@ def __str__(self) -> str:
7070 def __len__ (self ) -> int :
7171 return len (self .sets )
7272
73- def __or__ (self , other : Self ) -> Self :
73+ def __or__ (self , other : 'VariantSet' ): # TODO: replace with Self from typing with pypy 3.11
7474 assert self .parameters == other .parameters , "Cannot union VariantSets with different parameters"
7575 return self .__class__ (parameters = self .parameters , _internal = self .sets | other .sets )
7676
77- def __and__ (self , other : Self ):
77+ def __and__ (self , other : 'VariantSet' ): # TODO: replace with Self from typing with pypy 3.11
7878 assert self .parameters == other .parameters , "Cannot intersect VariantSets with different parameters"
7979 result = MinimalSetOfMultisets [int ]()
8080 for left_entry , right_entry in product (self .entries (), other .entries ()):
@@ -84,7 +84,7 @@ def __and__(self, other: Self):
8484 result .add (entry )
8585 return self .__class__ (parameters = self .parameters , _internal = result )
8686
87- def __add__ (self , other : Self ):
87+ def __add__ (self , other : 'VariantSet' ): # TODO: replace with Self from typing with pypy 3.11
8888 assert self .parameters == other .parameters , "Cannot sum VariantSets with different parameters"
8989 result = MinimalSetOfMultisets [int ]()
9090 for left_key , right_key in product (self .entries (), other .entries ()):
@@ -98,25 +98,25 @@ def variants(self) -> list[tuple[FrozenMultiset[cardid], FrozenMultiset[template
9898 return [self .entry_to_ingredients (e ) for e in self .entries ()]
9999
100100 @classmethod
101- def or_sets (cls , sets : list [Self ], parameters : VariantSetParameters | None = None ) -> Self :
101+ def or_sets (cls , sets : list ['VariantSet' ], parameters : VariantSetParameters | None = None ): # TODO: replace with Self from typing with pypy 3.11
102102 return cls .aggregate_sets (sets , strategy = lambda x , y : x | y , parameters = parameters )
103103
104104 @classmethod
105- def and_sets (cls , sets : list [Self ], parameters : VariantSetParameters | None = None ) -> Self :
105+ def and_sets (cls , sets : list ['VariantSet' ], parameters : VariantSetParameters | None = None ): # TODO: replace with Self from typing with pypy 3.11
106106 return cls .aggregate_sets (sets , strategy = lambda x , y : x & y , parameters = parameters )
107107
108108 @classmethod
109- def sum_sets (cls , sets : list [Self ], parameters : VariantSetParameters | None = None ) -> Self :
109+ def sum_sets (cls , sets : list ['VariantSet' ], parameters : VariantSetParameters | None = None ): # TODO: replace with Self from typing with pypy 3.11
110110 return cls .aggregate_sets (sets , strategy = lambda x , y : x + y , parameters = parameters )
111111
112112 @classmethod
113- def aggregate_sets (cls , sets : list [Self ], strategy : Callable [[Self , Self ], Self ], parameters : VariantSetParameters | None = None ) -> Self :
113+ def aggregate_sets (cls , sets : list ['VariantSet' ], strategy : Callable [['VariantSet' , 'VariantSet' ], 'VariantSet' ], parameters : VariantSetParameters | None = None ): # TODO: replace with Self from typing with pypy 3.11
114114 match len (sets ):
115115 case 0 : return cls (parameters = parameters )
116116 case _: return reduce (strategy , sets )
117117
118118 @classmethod
119- def product_sets (cls , sets : list [Self ], parameters : VariantSetParameters | None = None ) -> Self :
119+ def product_sets (cls , sets : list ['VariantSet' ], parameters : VariantSetParameters | None = None ): # TODO: replace with Self from typing with pypy 3.11
120120 parameters = parameters if parameters is not None else VariantSetParameters ()
121121 if parameters .allow_multiple_copies :
122122 return cls .sum_sets (sets , parameters = parameters )
0 commit comments