2222
2323class Visitor (ABC , Generic [T , V ]):
2424 """
25- ABC for Visitors visiting Terms
26- The visitor is responsible to visit child terms
25+ ABC for Visitors visiting Terms.
26+
27+ The visitor is responsible for visiting child terms.
28+
29+ Type Variables:
30+
31+ T: represents the type of the result produced by visiting terms
32+ V: represents the type of variables used in terms
2733 """
2834
2935 __slots__ = ()
3036
3137 @final
3238 def visit (self , term : terms .Term [V ]) -> T :
33- """visit a term"""
39+ """
40+ Visit a term
41+
42+ :param term: term to visit
43+ :return: Result of calling :meth:`.terms.Term.accept` with self as argument
44+ """
3445 return term .accept (self )
3546
3647 @abstractmethod
3748 def visit_variable (self , variable : terms .Variable [V ]) -> T :
38- """visit a Variable term"""
49+ """
50+ Visit a Variable term.
51+
52+ :param variable: variable term to visit
53+ :return: value as required by its type variable
54+ """
3955 raise NotImplementedError ()
4056
4157 @abstractmethod
4258 def visit_abstraction (self , abstraction : terms .Abstraction [V ]) -> T :
43- """visit an Abstraction term"""
59+ """
60+ Visit an Abstraction term
61+
62+ The body is not automatically visited.
63+
64+ :param abstraction: abstraction term to visit
65+ :return: value as required by its type variable
66+ """
4467 raise NotImplementedError ()
4568
4669 @abstractmethod
4770 def visit_application (self , application : terms .Application [V ]) -> T :
48- """visit an Application term"""
71+ """
72+ Visit an Application term
73+
74+ The abstraction and argument are not automatically visited.
75+
76+ :param appliation: application term to visit
77+ :return: value as required by its type variable
78+ """
4979 raise NotImplementedError ()
5080
5181
5282class BottomUpVisitor (Visitor [T , V ]):
53- """ABC for visitors which visit child terms first"""
83+ """
84+ ABC for visitors which visit child terms first
85+
86+ Child terms are automatically visited.
87+ """
5488
5589 __slots__ = ()
5690
5791 @final
5892 def visit_abstraction (self , abstraction : terms .Abstraction [V ]) -> T :
59- """visit an Abstraction term"""
93+ """
94+ Visit an Abstraction term
95+
96+ The body is visited before calling :meth:`ascend_abstraction`.
97+
98+ :param abstraction: abstraction term to visit
99+ :return: value returned by :meth:`ascend_abstraction`
100+ """
60101 return self .ascend_abstraction (
61102 abstraction ,
62103 abstraction .body .accept (self )
63104 )
64105
65106 @final
66107 def visit_application (self , application : terms .Application [V ]) -> T :
67- """visit an Application term"""
108+ """
109+ Visit an Application term
110+
111+ The abstraction and argument are visited
112+ before calling :meth:`ascend_application`.
113+
114+ :param application: application term to visit
115+ :return: value returned by :meth:`ascend_application`
116+ """
68117 return self .ascend_application (
69118 application ,
70119 application .abstraction .accept (self ),
@@ -73,26 +122,53 @@ def visit_application(self, application: terms.Application[V]) -> T:
73122
74123 @abstractmethod
75124 def ascend_abstraction (self , abstraction : terms .Abstraction [V ], body : T ) -> T :
76- """visit an Abstraction term after visiting its body"""
125+ """
126+ Visit an Abstraction term after visiting its body.
127+
128+ :param abstraction: abstraction term to visit
129+ :param body: value produced by visiting its body
130+ :return: value as required by its type variable
131+ """
77132 raise NotImplementedError ()
78133
79134 @abstractmethod
80135 def ascend_application (self , application : terms .Application [V ], abstraction : T , argument : T ) -> T :
81- """visit an Application term after visiting its abstraction and argument"""
136+ """
137+ Visit an Application term after visiting its abstraction and argument.
138+
139+ :param application: application term to visit
140+ :param abstraction: value produced by visiting its abstraction
141+ :param argument: value produced by visiting its argument
142+ :return: value as required by its type variable
143+ """
82144 raise NotImplementedError ()
83145
84146
85147class DeferrableVisitor (Visitor [T , V ]):
86- """ABC for visitors which can visit terms top down lazyly"""
148+ """
149+ ABC for visitors which can visit terms top down lazyly.
150+ """
87151
88152 __slots__ = ()
89153
90154 @abstractmethod
91155 def defer_abstraction (self , abstraction : terms .Abstraction [V ]) -> tuple [T , DeferrableVisitor [T , V ] | None ]:
92- """visit an Abstraction term and return the visitor used to visit its body"""
156+ """
157+ Visit an Abstraction term.
158+
159+ :param abstraction: abstraction term to visit
160+ :return: tuple containing a value as required by its type variable
161+ and a visitor to be used for visiting its body
162+ """
93163 raise NotImplementedError ()
94164
95165 @abstractmethod
96166 def defer_application (self , application : terms .Application [V ]) -> tuple [T , DeferrableVisitor [T , V ] | None , DeferrableVisitor [T , V ] | None ]:
97- """visit an Application term and return the visitors used to visit its abstraction and argument"""
167+ """
168+ Visit an Application term.
169+
170+ :param abstraction: application term to visit
171+ :return: tuple containing a value as required by its type variable
172+ and visitors to be used for visiting its abstraction and argument
173+ """
98174 raise NotImplementedError ()
0 commit comments