1"""Helpers for use with type annotation.
2
3Use the empty classes in this module when annotating the types of Pyrsistent
4objects, instead of using the actual collection class.
5
6For example,
7
8    from pyrsistent import pvector
9    from pyrsistent.typing import PVector
10
11    myvector: PVector[str] = pvector(['a', 'b', 'c'])
12
13"""
14from __future__ import absolute_import
15
16try:
17    from typing import Container
18    from typing import Hashable
19    from typing import Generic
20    from typing import Iterable
21    from typing import Mapping
22    from typing import Sequence
23    from typing import Sized
24    from typing import TypeVar
25
26    __all__ = [
27        'CheckedPMap',
28        'CheckedPSet',
29        'CheckedPVector',
30        'PBag',
31        'PDeque',
32        'PList',
33        'PMap',
34        'PSet',
35        'PVector',
36    ]
37
38    T = TypeVar('T')
39    KT = TypeVar('KT')
40    VT = TypeVar('VT')
41
42    class CheckedPMap(Mapping[KT, VT], Hashable):
43        pass
44
45    # PSet.add and PSet.discard have different type signatures than that of Set.
46    class CheckedPSet(Generic[T], Hashable):
47        pass
48
49    class CheckedPVector(Sequence[T], Hashable):
50        pass
51
52    class PBag(Container[T], Iterable[T], Sized, Hashable):
53        pass
54
55    class PDeque(Sequence[T], Hashable):
56        pass
57
58    class PList(Sequence[T], Hashable):
59        pass
60
61    class PMap(Mapping[KT, VT], Hashable):
62        pass
63
64    # PSet.add and PSet.discard have different type signatures than that of Set.
65    class PSet(Generic[T], Hashable):
66        pass
67
68    class PVector(Sequence[T], Hashable):
69        pass
70
71    class PVectorEvolver(Generic[T]):
72        pass
73
74    class PMapEvolver(Generic[KT, VT]):
75        pass
76
77    class PSetEvolver(Generic[T]):
78        pass
79except ImportError:
80    pass
81