11from collections import defaultdict as _defaultdict
2- from collections .abc import Mapping
2+ from collections .abc import Callable , ItemsView , Iterator , KeysView , Mapping , ValuesView
33from humpy_toolz .dicttoolz import (
44 assoc , assoc_in , dissoc , itemfilter , itemmap , keyfilter , keymap , merge , merge_with , update_in , valfilter , valmap )
55from humpy_toolz .functoolz import identity
66from humpy_toolz .utils import raises
7+ from typing import Any , ClassVar
78import os
89
9- def inc (x ) :
10+ def inc (x : int ) -> int :
1011 return x + 1
1112
12- def iseven (i ) :
13+ def iseven (i : int ) -> bool :
1314 return i % 2 == 0
1415
1516class TestDict :
@@ -19,18 +20,18 @@ class TestDict:
1920 D: callable that inputs a dict and creates or returns a MutableMapping
2021 kw: kwargs dict to specify "factory" keyword (if applicable)
2122 """
22- D = dict
23- kw = {}
23+ D : ClassVar [ Callable [..., Any ]] = dict
24+ kw : ClassVar [ dict [ str , Any ]] = {}
2425
25- def test_merge (self ):
26+ def test_merge (self ) -> None :
2627 D , kw = (self .D , self .kw )
2728 assert merge (D ({1 : 1 , 2 : 2 }), D ({3 : 4 }), ** kw ) == D ({1 : 1 , 2 : 2 , 3 : 4 })
2829
29- def test_merge_iterable_arg (self ):
30+ def test_merge_iterable_arg (self ) -> None :
3031 D , kw = (self .D , self .kw )
3132 assert merge ([D ({1 : 1 , 2 : 2 }), D ({3 : 4 })], ** kw ) == D ({1 : 1 , 2 : 2 , 3 : 4 })
3233
33- def test_merge_with (self ):
34+ def test_merge_with (self ) -> None :
3435 D , kw = (self .D , self .kw )
3536 dicts = (D ({1 : 1 , 2 : 2 }), D ({1 : 10 , 2 : 20 }))
3637 assert merge_with (sum , * dicts , ** kw ) == D ({1 : 11 , 2 : 22 })
@@ -40,39 +41,39 @@ def test_merge_with(self):
4041 assert merge_with (tuple , * dicts , ** kw ) == D ({1 : (1 , 10 ), 2 : (2 , 20 ), 3 : (3 ,)})
4142 assert not merge_with (sum )
4243
43- def test_merge_with_iterable_arg (self ):
44+ def test_merge_with_iterable_arg (self ) -> None :
4445 D , kw = (self .D , self .kw )
4546 dicts = (D ({1 : 1 , 2 : 2 }), D ({1 : 10 , 2 : 20 }))
4647 assert merge_with (sum , * dicts , ** kw ) == D ({1 : 11 , 2 : 22 })
4748 assert merge_with (sum , dicts , ** kw ) == D ({1 : 11 , 2 : 22 })
4849 assert merge_with (sum , iter (dicts ), ** kw ) == D ({1 : 11 , 2 : 22 })
4950
50- def test_valmap (self ):
51+ def test_valmap (self ) -> None :
5152 D , kw = (self .D , self .kw )
5253 assert valmap (inc , D ({1 : 1 , 2 : 2 }), ** kw ) == D ({1 : 2 , 2 : 3 })
5354
54- def test_keymap (self ):
55+ def test_keymap (self ) -> None :
5556 D , kw = (self .D , self .kw )
5657 assert keymap (inc , D ({1 : 1 , 2 : 2 }), ** kw ) == D ({2 : 1 , 3 : 2 })
5758
58- def test_itemmap (self ):
59+ def test_itemmap (self ) -> None :
5960 D , kw = (self .D , self .kw )
6061 assert itemmap (reversed , D ({1 : 2 , 2 : 4 }), ** kw ) == D ({2 : 1 , 4 : 2 })
6162
62- def test_valfilter (self ):
63+ def test_valfilter (self ) -> None :
6364 D , kw = (self .D , self .kw )
6465 assert valfilter (iseven , D ({1 : 2 , 2 : 3 }), ** kw ) == D ({1 : 2 })
6566
66- def test_keyfilter (self ):
67+ def test_keyfilter (self ) -> None :
6768 D , kw = (self .D , self .kw )
6869 assert keyfilter (iseven , D ({1 : 2 , 2 : 3 }), ** kw ) == D ({2 : 3 })
6970
70- def test_itemfilter (self ):
71+ def test_itemfilter (self ) -> None :
7172 D , kw = (self .D , self .kw )
7273 assert itemfilter (lambda item : iseven (item [0 ]), D ({1 : 2 , 2 : 3 }), ** kw ) == D ({2 : 3 })
7374 assert itemfilter (lambda item : iseven (item [1 ]), D ({1 : 2 , 2 : 3 }), ** kw ) == D ({1 : 2 })
7475
75- def test_assoc (self ):
76+ def test_assoc (self ) -> None :
7677 D , kw = (self .D , self .kw )
7778 assert assoc (D ({}), 'a' , 1 , ** kw ) == D ({'a' : 1 })
7879 assert assoc (D ({'a' : 1 }), 'a' , 3 , ** kw ) == D ({'a' : 3 })
@@ -82,7 +83,7 @@ def test_assoc(self):
8283 assoc (d , 'x' , 2 , ** kw )
8384 assert d is oldd
8485
85- def test_dissoc (self ):
86+ def test_dissoc (self ) -> None :
8687 D , kw = (self .D , self .kw )
8788 assert dissoc (D ({'a' : 1 }), 'a' , ** kw ) == D ({})
8889 assert dissoc (D ({'a' : 1 , 'b' : 2 }), 'a' , ** kw ) == D ({'b' : 2 })
@@ -95,7 +96,7 @@ def test_dissoc(self):
9596 assert d is oldd
9697 assert d2 is not oldd
9798
98- def test_assoc_in (self ):
99+ def test_assoc_in (self ) -> None :
99100 D , kw = (self .D , self .kw )
100101 assert assoc_in (D ({'a' : 1 }), ['a' ], 2 , ** kw ) == D ({'a' : 2 })
101102 assert assoc_in (D ({'a' : D ({'b' : 1 })}), ['a' , 'b' ], 2 , ** kw ) == D ({'a' : D ({'b' : 2 })})
@@ -106,7 +107,7 @@ def test_assoc_in(self):
106107 assert d is oldd
107108 assert d2 is not oldd
108109
109- def test_update_in (self ):
110+ def test_update_in (self ) -> None :
110111 D , kw = (self .D , self .kw )
111112 assert update_in (D ({'a' : 0 }), ['a' ], inc , ** kw ) == D ({'a' : 1 })
112113 assert update_in (D ({'a' : 0 , 'b' : 1 }), ['b' ], str , ** kw ) == D ({'a' : 0 , 'b' : '1' })
@@ -122,7 +123,7 @@ def test_update_in(self):
122123 update_in (d , ['x' ], inc , ** kw )
123124 assert d is oldd
124125
125- def test_factory (self ):
126+ def test_factory (self ) -> None :
126127 D , kw = (self .D , self .kw )
127128 assert merge (defaultdict (int , D ({1 : 2 })), D ({2 : 3 })) == {1 : 2 , 2 : 3 }
128129 assert merge (defaultdict (int , D ({1 : 2 })), D ({2 : 3 }), factory = lambda : defaultdict (int )) == defaultdict (int , D ({1 : 2 , 2 : 3 }))
@@ -131,7 +132,7 @@ def test_factory(self):
131132
132133class defaultdict (_defaultdict ):
133134
134- def __eq__ (self , other ) :
135+ def __eq__ (self , other : object ) -> bool :
135136 return super ().__eq__ (other ) and isinstance (other , _defaultdict ) and (self .default_factory == other .default_factory )
136137
137138class TestDefaultDict (TestDict ):
@@ -143,50 +144,50 @@ class TestDefaultDict(TestDict):
143144 """
144145
145146 @staticmethod
146- def D (dict_ ) :
147+ def D (dict_ : dict [ Any , Any ]) -> defaultdict :
147148 return defaultdict (int , dict_ )
148149 kw = {'factory' : lambda : defaultdict (int )}
149150
150151class CustomMapping :
151152 """Define methods of the MutableMapping protocol required by dicttoolz"""
152153
153- def __init__ (self , * args , ** kwargs ) :
154+ def __init__ (self , * args : Any , ** kwargs : Any ) -> None :
154155 self ._d = dict (* args , ** kwargs )
155156
156- def __getitem__ (self , key ) :
157+ def __getitem__ (self , key : Any ) -> Any :
157158 return self ._d [key ]
158159
159- def __setitem__ (self , key , val ) :
160+ def __setitem__ (self , key : Any , val : Any ) -> None :
160161 self ._d [key ] = val
161162
162- def __delitem__ (self , key ) :
163+ def __delitem__ (self , key : Any ) -> None :
163164 del self ._d [key ]
164165
165- def __iter__ (self ):
166+ def __iter__ (self ) -> Iterator [ Any ] :
166167 return iter (self ._d )
167168
168- def __len__ (self ):
169+ def __len__ (self ) -> int :
169170 return len (self ._d )
170171
171- def __contains__ (self , key ) :
172+ def __contains__ (self , key : object ) -> bool :
172173 return key in self ._d
173174
174- def __eq__ (self , other ) :
175+ def __eq__ (self , other : object ) -> bool :
175176 return isinstance (other , CustomMapping ) and self ._d == other ._d
176177
177- def __ne__ (self , other ) :
178+ def __ne__ (self , other : object ) -> bool :
178179 return not isinstance (other , CustomMapping ) or self ._d != other ._d
179180
180- def keys (self ):
181+ def keys (self ) -> KeysView [ Any ] :
181182 return self ._d .keys ()
182183
183- def values (self ):
184+ def values (self ) -> ValuesView [ Any ] :
184185 return self ._d .values ()
185186
186- def items (self ):
187+ def items (self ) -> ItemsView [ Any , Any ] :
187188 return self ._d .items ()
188189
189- def update (self , * args , ** kwargs ) :
190+ def update (self , * args : Any , ** kwargs : Any ) -> None :
190191 self ._d .update (* args , ** kwargs )
191192
192193class TestCustomMapping (TestDict ):
@@ -199,25 +200,25 @@ class TestCustomMapping(TestDict):
199200 D = CustomMapping
200201 kw = {'factory' : lambda : CustomMapping ()}
201202
202- def test_environ ():
203+ def test_environ () -> None :
203204 assert keymap (identity , os .environ ) == os .environ
204205 assert valmap (identity , os .environ ) == os .environ
205206 assert itemmap (identity , os .environ ) == os .environ
206207
207- def test_merge_with_non_dict_mappings ():
208+ def test_merge_with_non_dict_mappings () -> None :
208209
209210 class Foo (Mapping ):
210211
211- def __init__ (self , d ) :
212+ def __init__ (self , d : dict [ Any , Any ]) -> None :
212213 self .d = d
213214
214- def __iter__ (self ):
215+ def __iter__ (self ) -> Iterator [ Any ] :
215216 return iter (self .d )
216217
217- def __getitem__ (self , key ) :
218+ def __getitem__ (self , key : Any ) -> Any :
218219 return self .d [key ]
219220
220- def __len__ (self ):
221+ def __len__ (self ) -> int :
221222 return len (self .d )
222223 d = Foo ({1 : 1 })
223224 assert merge (d ) is d or merge (d ) == {1 : 1 }
0 commit comments