xref: /aosp_15_r20/prebuilts/build-tools/common/py3-stdlib/pydoc_data/topics.py (revision cda5da8d549138a6648c5ee6d7a49cf8f4a657be)
1*cda5da8dSAndroid Build Coastguard Worker# -*- coding: utf-8 -*-
2*cda5da8dSAndroid Build Coastguard Worker# Autogenerated by Sphinx on Tue Jun  6 23:00:07 2023
3*cda5da8dSAndroid Build Coastguard Workertopics = {'assert': 'The "assert" statement\n'
4*cda5da8dSAndroid Build Coastguard Worker           '**********************\n'
5*cda5da8dSAndroid Build Coastguard Worker           '\n'
6*cda5da8dSAndroid Build Coastguard Worker           'Assert statements are a convenient way to insert debugging '
7*cda5da8dSAndroid Build Coastguard Worker           'assertions\n'
8*cda5da8dSAndroid Build Coastguard Worker           'into a program:\n'
9*cda5da8dSAndroid Build Coastguard Worker           '\n'
10*cda5da8dSAndroid Build Coastguard Worker           '   assert_stmt ::= "assert" expression ["," expression]\n'
11*cda5da8dSAndroid Build Coastguard Worker           '\n'
12*cda5da8dSAndroid Build Coastguard Worker           'The simple form, "assert expression", is equivalent to\n'
13*cda5da8dSAndroid Build Coastguard Worker           '\n'
14*cda5da8dSAndroid Build Coastguard Worker           '   if __debug__:\n'
15*cda5da8dSAndroid Build Coastguard Worker           '       if not expression: raise AssertionError\n'
16*cda5da8dSAndroid Build Coastguard Worker           '\n'
17*cda5da8dSAndroid Build Coastguard Worker           'The extended form, "assert expression1, expression2", is '
18*cda5da8dSAndroid Build Coastguard Worker           'equivalent to\n'
19*cda5da8dSAndroid Build Coastguard Worker           '\n'
20*cda5da8dSAndroid Build Coastguard Worker           '   if __debug__:\n'
21*cda5da8dSAndroid Build Coastguard Worker           '       if not expression1: raise AssertionError(expression2)\n'
22*cda5da8dSAndroid Build Coastguard Worker           '\n'
23*cda5da8dSAndroid Build Coastguard Worker           'These equivalences assume that "__debug__" and "AssertionError" '
24*cda5da8dSAndroid Build Coastguard Worker           'refer\n'
25*cda5da8dSAndroid Build Coastguard Worker           'to the built-in variables with those names.  In the current\n'
26*cda5da8dSAndroid Build Coastguard Worker           'implementation, the built-in variable "__debug__" is "True" under\n'
27*cda5da8dSAndroid Build Coastguard Worker           'normal circumstances, "False" when optimization is requested '
28*cda5da8dSAndroid Build Coastguard Worker           '(command\n'
29*cda5da8dSAndroid Build Coastguard Worker           'line option "-O").  The current code generator emits no code for '
30*cda5da8dSAndroid Build Coastguard Worker           'an\n'
31*cda5da8dSAndroid Build Coastguard Worker           'assert statement when optimization is requested at compile time.  '
32*cda5da8dSAndroid Build Coastguard Worker           'Note\n'
33*cda5da8dSAndroid Build Coastguard Worker           'that it is unnecessary to include the source code for the '
34*cda5da8dSAndroid Build Coastguard Worker           'expression\n'
35*cda5da8dSAndroid Build Coastguard Worker           'that failed in the error message; it will be displayed as part of '
36*cda5da8dSAndroid Build Coastguard Worker           'the\n'
37*cda5da8dSAndroid Build Coastguard Worker           'stack trace.\n'
38*cda5da8dSAndroid Build Coastguard Worker           '\n'
39*cda5da8dSAndroid Build Coastguard Worker           'Assignments to "__debug__" are illegal.  The value for the '
40*cda5da8dSAndroid Build Coastguard Worker           'built-in\n'
41*cda5da8dSAndroid Build Coastguard Worker           'variable is determined when the interpreter starts.\n',
42*cda5da8dSAndroid Build Coastguard Worker 'assignment': 'Assignment statements\n'
43*cda5da8dSAndroid Build Coastguard Worker               '*********************\n'
44*cda5da8dSAndroid Build Coastguard Worker               '\n'
45*cda5da8dSAndroid Build Coastguard Worker               'Assignment statements are used to (re)bind names to values and '
46*cda5da8dSAndroid Build Coastguard Worker               'to\n'
47*cda5da8dSAndroid Build Coastguard Worker               'modify attributes or items of mutable objects:\n'
48*cda5da8dSAndroid Build Coastguard Worker               '\n'
49*cda5da8dSAndroid Build Coastguard Worker               '   assignment_stmt ::= (target_list "=")+ (starred_expression '
50*cda5da8dSAndroid Build Coastguard Worker               '| yield_expression)\n'
51*cda5da8dSAndroid Build Coastguard Worker               '   target_list     ::= target ("," target)* [","]\n'
52*cda5da8dSAndroid Build Coastguard Worker               '   target          ::= identifier\n'
53*cda5da8dSAndroid Build Coastguard Worker               '              | "(" [target_list] ")"\n'
54*cda5da8dSAndroid Build Coastguard Worker               '              | "[" [target_list] "]"\n'
55*cda5da8dSAndroid Build Coastguard Worker               '              | attributeref\n'
56*cda5da8dSAndroid Build Coastguard Worker               '              | subscription\n'
57*cda5da8dSAndroid Build Coastguard Worker               '              | slicing\n'
58*cda5da8dSAndroid Build Coastguard Worker               '              | "*" target\n'
59*cda5da8dSAndroid Build Coastguard Worker               '\n'
60*cda5da8dSAndroid Build Coastguard Worker               '(See section Primaries for the syntax definitions for '
61*cda5da8dSAndroid Build Coastguard Worker               '*attributeref*,\n'
62*cda5da8dSAndroid Build Coastguard Worker               '*subscription*, and *slicing*.)\n'
63*cda5da8dSAndroid Build Coastguard Worker               '\n'
64*cda5da8dSAndroid Build Coastguard Worker               'An assignment statement evaluates the expression list '
65*cda5da8dSAndroid Build Coastguard Worker               '(remember that\n'
66*cda5da8dSAndroid Build Coastguard Worker               'this can be a single expression or a comma-separated list, the '
67*cda5da8dSAndroid Build Coastguard Worker               'latter\n'
68*cda5da8dSAndroid Build Coastguard Worker               'yielding a tuple) and assigns the single resulting object to '
69*cda5da8dSAndroid Build Coastguard Worker               'each of\n'
70*cda5da8dSAndroid Build Coastguard Worker               'the target lists, from left to right.\n'
71*cda5da8dSAndroid Build Coastguard Worker               '\n'
72*cda5da8dSAndroid Build Coastguard Worker               'Assignment is defined recursively depending on the form of the '
73*cda5da8dSAndroid Build Coastguard Worker               'target\n'
74*cda5da8dSAndroid Build Coastguard Worker               '(list). When a target is part of a mutable object (an '
75*cda5da8dSAndroid Build Coastguard Worker               'attribute\n'
76*cda5da8dSAndroid Build Coastguard Worker               'reference, subscription or slicing), the mutable object must\n'
77*cda5da8dSAndroid Build Coastguard Worker               'ultimately perform the assignment and decide about its '
78*cda5da8dSAndroid Build Coastguard Worker               'validity, and\n'
79*cda5da8dSAndroid Build Coastguard Worker               'may raise an exception if the assignment is unacceptable.  The '
80*cda5da8dSAndroid Build Coastguard Worker               'rules\n'
81*cda5da8dSAndroid Build Coastguard Worker               'observed by various types and the exceptions raised are given '
82*cda5da8dSAndroid Build Coastguard Worker               'with the\n'
83*cda5da8dSAndroid Build Coastguard Worker               'definition of the object types (see section The standard type\n'
84*cda5da8dSAndroid Build Coastguard Worker               'hierarchy).\n'
85*cda5da8dSAndroid Build Coastguard Worker               '\n'
86*cda5da8dSAndroid Build Coastguard Worker               'Assignment of an object to a target list, optionally enclosed '
87*cda5da8dSAndroid Build Coastguard Worker               'in\n'
88*cda5da8dSAndroid Build Coastguard Worker               'parentheses or square brackets, is recursively defined as '
89*cda5da8dSAndroid Build Coastguard Worker               'follows.\n'
90*cda5da8dSAndroid Build Coastguard Worker               '\n'
91*cda5da8dSAndroid Build Coastguard Worker               '* If the target list is a single target with no trailing '
92*cda5da8dSAndroid Build Coastguard Worker               'comma,\n'
93*cda5da8dSAndroid Build Coastguard Worker               '  optionally in parentheses, the object is assigned to that '
94*cda5da8dSAndroid Build Coastguard Worker               'target.\n'
95*cda5da8dSAndroid Build Coastguard Worker               '\n'
96*cda5da8dSAndroid Build Coastguard Worker               '* Else:\n'
97*cda5da8dSAndroid Build Coastguard Worker               '\n'
98*cda5da8dSAndroid Build Coastguard Worker               '  * If the target list contains one target prefixed with an '
99*cda5da8dSAndroid Build Coastguard Worker               'asterisk,\n'
100*cda5da8dSAndroid Build Coastguard Worker               '    called a “starred” target: The object must be an iterable '
101*cda5da8dSAndroid Build Coastguard Worker               'with at\n'
102*cda5da8dSAndroid Build Coastguard Worker               '    least as many items as there are targets in the target '
103*cda5da8dSAndroid Build Coastguard Worker               'list, minus\n'
104*cda5da8dSAndroid Build Coastguard Worker               '    one.  The first items of the iterable are assigned, from '
105*cda5da8dSAndroid Build Coastguard Worker               'left to\n'
106*cda5da8dSAndroid Build Coastguard Worker               '    right, to the targets before the starred target.  The '
107*cda5da8dSAndroid Build Coastguard Worker               'final items\n'
108*cda5da8dSAndroid Build Coastguard Worker               '    of the iterable are assigned to the targets after the '
109*cda5da8dSAndroid Build Coastguard Worker               'starred\n'
110*cda5da8dSAndroid Build Coastguard Worker               '    target.  A list of the remaining items in the iterable is '
111*cda5da8dSAndroid Build Coastguard Worker               'then\n'
112*cda5da8dSAndroid Build Coastguard Worker               '    assigned to the starred target (the list can be empty).\n'
113*cda5da8dSAndroid Build Coastguard Worker               '\n'
114*cda5da8dSAndroid Build Coastguard Worker               '  * Else: The object must be an iterable with the same number '
115*cda5da8dSAndroid Build Coastguard Worker               'of items\n'
116*cda5da8dSAndroid Build Coastguard Worker               '    as there are targets in the target list, and the items '
117*cda5da8dSAndroid Build Coastguard Worker               'are\n'
118*cda5da8dSAndroid Build Coastguard Worker               '    assigned, from left to right, to the corresponding '
119*cda5da8dSAndroid Build Coastguard Worker               'targets.\n'
120*cda5da8dSAndroid Build Coastguard Worker               '\n'
121*cda5da8dSAndroid Build Coastguard Worker               'Assignment of an object to a single target is recursively '
122*cda5da8dSAndroid Build Coastguard Worker               'defined as\n'
123*cda5da8dSAndroid Build Coastguard Worker               'follows.\n'
124*cda5da8dSAndroid Build Coastguard Worker               '\n'
125*cda5da8dSAndroid Build Coastguard Worker               '* If the target is an identifier (name):\n'
126*cda5da8dSAndroid Build Coastguard Worker               '\n'
127*cda5da8dSAndroid Build Coastguard Worker               '  * If the name does not occur in a "global" or "nonlocal" '
128*cda5da8dSAndroid Build Coastguard Worker               'statement\n'
129*cda5da8dSAndroid Build Coastguard Worker               '    in the current code block: the name is bound to the object '
130*cda5da8dSAndroid Build Coastguard Worker               'in the\n'
131*cda5da8dSAndroid Build Coastguard Worker               '    current local namespace.\n'
132*cda5da8dSAndroid Build Coastguard Worker               '\n'
133*cda5da8dSAndroid Build Coastguard Worker               '  * Otherwise: the name is bound to the object in the global '
134*cda5da8dSAndroid Build Coastguard Worker               'namespace\n'
135*cda5da8dSAndroid Build Coastguard Worker               '    or the outer namespace determined by "nonlocal", '
136*cda5da8dSAndroid Build Coastguard Worker               'respectively.\n'
137*cda5da8dSAndroid Build Coastguard Worker               '\n'
138*cda5da8dSAndroid Build Coastguard Worker               '  The name is rebound if it was already bound.  This may cause '
139*cda5da8dSAndroid Build Coastguard Worker               'the\n'
140*cda5da8dSAndroid Build Coastguard Worker               '  reference count for the object previously bound to the name '
141*cda5da8dSAndroid Build Coastguard Worker               'to reach\n'
142*cda5da8dSAndroid Build Coastguard Worker               '  zero, causing the object to be deallocated and its '
143*cda5da8dSAndroid Build Coastguard Worker               'destructor (if it\n'
144*cda5da8dSAndroid Build Coastguard Worker               '  has one) to be called.\n'
145*cda5da8dSAndroid Build Coastguard Worker               '\n'
146*cda5da8dSAndroid Build Coastguard Worker               '* If the target is an attribute reference: The primary '
147*cda5da8dSAndroid Build Coastguard Worker               'expression in\n'
148*cda5da8dSAndroid Build Coastguard Worker               '  the reference is evaluated.  It should yield an object with\n'
149*cda5da8dSAndroid Build Coastguard Worker               '  assignable attributes; if this is not the case, "TypeError" '
150*cda5da8dSAndroid Build Coastguard Worker               'is\n'
151*cda5da8dSAndroid Build Coastguard Worker               '  raised.  That object is then asked to assign the assigned '
152*cda5da8dSAndroid Build Coastguard Worker               'object to\n'
153*cda5da8dSAndroid Build Coastguard Worker               '  the given attribute; if it cannot perform the assignment, it '
154*cda5da8dSAndroid Build Coastguard Worker               'raises\n'
155*cda5da8dSAndroid Build Coastguard Worker               '  an exception (usually but not necessarily '
156*cda5da8dSAndroid Build Coastguard Worker               '"AttributeError").\n'
157*cda5da8dSAndroid Build Coastguard Worker               '\n'
158*cda5da8dSAndroid Build Coastguard Worker               '  Note: If the object is a class instance and the attribute '
159*cda5da8dSAndroid Build Coastguard Worker               'reference\n'
160*cda5da8dSAndroid Build Coastguard Worker               '  occurs on both sides of the assignment operator, the '
161*cda5da8dSAndroid Build Coastguard Worker               'right-hand side\n'
162*cda5da8dSAndroid Build Coastguard Worker               '  expression, "a.x" can access either an instance attribute or '
163*cda5da8dSAndroid Build Coastguard Worker               '(if no\n'
164*cda5da8dSAndroid Build Coastguard Worker               '  instance attribute exists) a class attribute.  The left-hand '
165*cda5da8dSAndroid Build Coastguard Worker               'side\n'
166*cda5da8dSAndroid Build Coastguard Worker               '  target "a.x" is always set as an instance attribute, '
167*cda5da8dSAndroid Build Coastguard Worker               'creating it if\n'
168*cda5da8dSAndroid Build Coastguard Worker               '  necessary.  Thus, the two occurrences of "a.x" do not '
169*cda5da8dSAndroid Build Coastguard Worker               'necessarily\n'
170*cda5da8dSAndroid Build Coastguard Worker               '  refer to the same attribute: if the right-hand side '
171*cda5da8dSAndroid Build Coastguard Worker               'expression\n'
172*cda5da8dSAndroid Build Coastguard Worker               '  refers to a class attribute, the left-hand side creates a '
173*cda5da8dSAndroid Build Coastguard Worker               'new\n'
174*cda5da8dSAndroid Build Coastguard Worker               '  instance attribute as the target of the assignment:\n'
175*cda5da8dSAndroid Build Coastguard Worker               '\n'
176*cda5da8dSAndroid Build Coastguard Worker               '     class Cls:\n'
177*cda5da8dSAndroid Build Coastguard Worker               '         x = 3             # class variable\n'
178*cda5da8dSAndroid Build Coastguard Worker               '     inst = Cls()\n'
179*cda5da8dSAndroid Build Coastguard Worker               '     inst.x = inst.x + 1   # writes inst.x as 4 leaving Cls.x '
180*cda5da8dSAndroid Build Coastguard Worker               'as 3\n'
181*cda5da8dSAndroid Build Coastguard Worker               '\n'
182*cda5da8dSAndroid Build Coastguard Worker               '  This description does not necessarily apply to descriptor\n'
183*cda5da8dSAndroid Build Coastguard Worker               '  attributes, such as properties created with "property()".\n'
184*cda5da8dSAndroid Build Coastguard Worker               '\n'
185*cda5da8dSAndroid Build Coastguard Worker               '* If the target is a subscription: The primary expression in '
186*cda5da8dSAndroid Build Coastguard Worker               'the\n'
187*cda5da8dSAndroid Build Coastguard Worker               '  reference is evaluated.  It should yield either a mutable '
188*cda5da8dSAndroid Build Coastguard Worker               'sequence\n'
189*cda5da8dSAndroid Build Coastguard Worker               '  object (such as a list) or a mapping object (such as a '
190*cda5da8dSAndroid Build Coastguard Worker               'dictionary).\n'
191*cda5da8dSAndroid Build Coastguard Worker               '  Next, the subscript expression is evaluated.\n'
192*cda5da8dSAndroid Build Coastguard Worker               '\n'
193*cda5da8dSAndroid Build Coastguard Worker               '  If the primary is a mutable sequence object (such as a '
194*cda5da8dSAndroid Build Coastguard Worker               'list), the\n'
195*cda5da8dSAndroid Build Coastguard Worker               '  subscript must yield an integer.  If it is negative, the '
196*cda5da8dSAndroid Build Coastguard Worker               'sequence’s\n'
197*cda5da8dSAndroid Build Coastguard Worker               '  length is added to it.  The resulting value must be a '
198*cda5da8dSAndroid Build Coastguard Worker               'nonnegative\n'
199*cda5da8dSAndroid Build Coastguard Worker               '  integer less than the sequence’s length, and the sequence is '
200*cda5da8dSAndroid Build Coastguard Worker               'asked\n'
201*cda5da8dSAndroid Build Coastguard Worker               '  to assign the assigned object to its item with that index.  '
202*cda5da8dSAndroid Build Coastguard Worker               'If the\n'
203*cda5da8dSAndroid Build Coastguard Worker               '  index is out of range, "IndexError" is raised (assignment to '
204*cda5da8dSAndroid Build Coastguard Worker               'a\n'
205*cda5da8dSAndroid Build Coastguard Worker               '  subscripted sequence cannot add new items to a list).\n'
206*cda5da8dSAndroid Build Coastguard Worker               '\n'
207*cda5da8dSAndroid Build Coastguard Worker               '  If the primary is a mapping object (such as a dictionary), '
208*cda5da8dSAndroid Build Coastguard Worker               'the\n'
209*cda5da8dSAndroid Build Coastguard Worker               '  subscript must have a type compatible with the mapping’s key '
210*cda5da8dSAndroid Build Coastguard Worker               'type,\n'
211*cda5da8dSAndroid Build Coastguard Worker               '  and the mapping is then asked to create a key/datum pair '
212*cda5da8dSAndroid Build Coastguard Worker               'which maps\n'
213*cda5da8dSAndroid Build Coastguard Worker               '  the subscript to the assigned object.  This can either '
214*cda5da8dSAndroid Build Coastguard Worker               'replace an\n'
215*cda5da8dSAndroid Build Coastguard Worker               '  existing key/value pair with the same key value, or insert a '
216*cda5da8dSAndroid Build Coastguard Worker               'new\n'
217*cda5da8dSAndroid Build Coastguard Worker               '  key/value pair (if no key with the same value existed).\n'
218*cda5da8dSAndroid Build Coastguard Worker               '\n'
219*cda5da8dSAndroid Build Coastguard Worker               '  For user-defined objects, the "__setitem__()" method is '
220*cda5da8dSAndroid Build Coastguard Worker               'called with\n'
221*cda5da8dSAndroid Build Coastguard Worker               '  appropriate arguments.\n'
222*cda5da8dSAndroid Build Coastguard Worker               '\n'
223*cda5da8dSAndroid Build Coastguard Worker               '* If the target is a slicing: The primary expression in the '
224*cda5da8dSAndroid Build Coastguard Worker               'reference\n'
225*cda5da8dSAndroid Build Coastguard Worker               '  is evaluated.  It should yield a mutable sequence object '
226*cda5da8dSAndroid Build Coastguard Worker               '(such as a\n'
227*cda5da8dSAndroid Build Coastguard Worker               '  list).  The assigned object should be a sequence object of '
228*cda5da8dSAndroid Build Coastguard Worker               'the same\n'
229*cda5da8dSAndroid Build Coastguard Worker               '  type.  Next, the lower and upper bound expressions are '
230*cda5da8dSAndroid Build Coastguard Worker               'evaluated,\n'
231*cda5da8dSAndroid Build Coastguard Worker               '  insofar they are present; defaults are zero and the '
232*cda5da8dSAndroid Build Coastguard Worker               'sequence’s\n'
233*cda5da8dSAndroid Build Coastguard Worker               '  length.  The bounds should evaluate to integers. If either '
234*cda5da8dSAndroid Build Coastguard Worker               'bound is\n'
235*cda5da8dSAndroid Build Coastguard Worker               '  negative, the sequence’s length is added to it.  The '
236*cda5da8dSAndroid Build Coastguard Worker               'resulting\n'
237*cda5da8dSAndroid Build Coastguard Worker               '  bounds are clipped to lie between zero and the sequence’s '
238*cda5da8dSAndroid Build Coastguard Worker               'length,\n'
239*cda5da8dSAndroid Build Coastguard Worker               '  inclusive.  Finally, the sequence object is asked to replace '
240*cda5da8dSAndroid Build Coastguard Worker               'the\n'
241*cda5da8dSAndroid Build Coastguard Worker               '  slice with the items of the assigned sequence.  The length '
242*cda5da8dSAndroid Build Coastguard Worker               'of the\n'
243*cda5da8dSAndroid Build Coastguard Worker               '  slice may be different from the length of the assigned '
244*cda5da8dSAndroid Build Coastguard Worker               'sequence,\n'
245*cda5da8dSAndroid Build Coastguard Worker               '  thus changing the length of the target sequence, if the '
246*cda5da8dSAndroid Build Coastguard Worker               'target\n'
247*cda5da8dSAndroid Build Coastguard Worker               '  sequence allows it.\n'
248*cda5da8dSAndroid Build Coastguard Worker               '\n'
249*cda5da8dSAndroid Build Coastguard Worker               '**CPython implementation detail:** In the current '
250*cda5da8dSAndroid Build Coastguard Worker               'implementation, the\n'
251*cda5da8dSAndroid Build Coastguard Worker               'syntax for targets is taken to be the same as for expressions, '
252*cda5da8dSAndroid Build Coastguard Worker               'and\n'
253*cda5da8dSAndroid Build Coastguard Worker               'invalid syntax is rejected during the code generation phase, '
254*cda5da8dSAndroid Build Coastguard Worker               'causing\n'
255*cda5da8dSAndroid Build Coastguard Worker               'less detailed error messages.\n'
256*cda5da8dSAndroid Build Coastguard Worker               '\n'
257*cda5da8dSAndroid Build Coastguard Worker               'Although the definition of assignment implies that overlaps '
258*cda5da8dSAndroid Build Coastguard Worker               'between\n'
259*cda5da8dSAndroid Build Coastguard Worker               'the left-hand side and the right-hand side are ‘simultaneous’ '
260*cda5da8dSAndroid Build Coastguard Worker               '(for\n'
261*cda5da8dSAndroid Build Coastguard Worker               'example "a, b = b, a" swaps two variables), overlaps *within* '
262*cda5da8dSAndroid Build Coastguard Worker               'the\n'
263*cda5da8dSAndroid Build Coastguard Worker               'collection of assigned-to variables occur left-to-right, '
264*cda5da8dSAndroid Build Coastguard Worker               'sometimes\n'
265*cda5da8dSAndroid Build Coastguard Worker               'resulting in confusion.  For instance, the following program '
266*cda5da8dSAndroid Build Coastguard Worker               'prints\n'
267*cda5da8dSAndroid Build Coastguard Worker               '"[0, 2]":\n'
268*cda5da8dSAndroid Build Coastguard Worker               '\n'
269*cda5da8dSAndroid Build Coastguard Worker               '   x = [0, 1]\n'
270*cda5da8dSAndroid Build Coastguard Worker               '   i = 0\n'
271*cda5da8dSAndroid Build Coastguard Worker               '   i, x[i] = 1, 2         # i is updated, then x[i] is '
272*cda5da8dSAndroid Build Coastguard Worker               'updated\n'
273*cda5da8dSAndroid Build Coastguard Worker               '   print(x)\n'
274*cda5da8dSAndroid Build Coastguard Worker               '\n'
275*cda5da8dSAndroid Build Coastguard Worker               'See also:\n'
276*cda5da8dSAndroid Build Coastguard Worker               '\n'
277*cda5da8dSAndroid Build Coastguard Worker               '  **PEP 3132** - Extended Iterable Unpacking\n'
278*cda5da8dSAndroid Build Coastguard Worker               '     The specification for the "*target" feature.\n'
279*cda5da8dSAndroid Build Coastguard Worker               '\n'
280*cda5da8dSAndroid Build Coastguard Worker               '\n'
281*cda5da8dSAndroid Build Coastguard Worker               'Augmented assignment statements\n'
282*cda5da8dSAndroid Build Coastguard Worker               '===============================\n'
283*cda5da8dSAndroid Build Coastguard Worker               '\n'
284*cda5da8dSAndroid Build Coastguard Worker               'Augmented assignment is the combination, in a single '
285*cda5da8dSAndroid Build Coastguard Worker               'statement, of a\n'
286*cda5da8dSAndroid Build Coastguard Worker               'binary operation and an assignment statement:\n'
287*cda5da8dSAndroid Build Coastguard Worker               '\n'
288*cda5da8dSAndroid Build Coastguard Worker               '   augmented_assignment_stmt ::= augtarget augop '
289*cda5da8dSAndroid Build Coastguard Worker               '(expression_list | yield_expression)\n'
290*cda5da8dSAndroid Build Coastguard Worker               '   augtarget                 ::= identifier | attributeref | '
291*cda5da8dSAndroid Build Coastguard Worker               'subscription | slicing\n'
292*cda5da8dSAndroid Build Coastguard Worker               '   augop                     ::= "+=" | "-=" | "*=" | "@=" | '
293*cda5da8dSAndroid Build Coastguard Worker               '"/=" | "//=" | "%=" | "**="\n'
294*cda5da8dSAndroid Build Coastguard Worker               '             | ">>=" | "<<=" | "&=" | "^=" | "|="\n'
295*cda5da8dSAndroid Build Coastguard Worker               '\n'
296*cda5da8dSAndroid Build Coastguard Worker               '(See section Primaries for the syntax definitions of the last '
297*cda5da8dSAndroid Build Coastguard Worker               'three\n'
298*cda5da8dSAndroid Build Coastguard Worker               'symbols.)\n'
299*cda5da8dSAndroid Build Coastguard Worker               '\n'
300*cda5da8dSAndroid Build Coastguard Worker               'An augmented assignment evaluates the target (which, unlike '
301*cda5da8dSAndroid Build Coastguard Worker               'normal\n'
302*cda5da8dSAndroid Build Coastguard Worker               'assignment statements, cannot be an unpacking) and the '
303*cda5da8dSAndroid Build Coastguard Worker               'expression\n'
304*cda5da8dSAndroid Build Coastguard Worker               'list, performs the binary operation specific to the type of '
305*cda5da8dSAndroid Build Coastguard Worker               'assignment\n'
306*cda5da8dSAndroid Build Coastguard Worker               'on the two operands, and assigns the result to the original '
307*cda5da8dSAndroid Build Coastguard Worker               'target.\n'
308*cda5da8dSAndroid Build Coastguard Worker               'The target is only evaluated once.\n'
309*cda5da8dSAndroid Build Coastguard Worker               '\n'
310*cda5da8dSAndroid Build Coastguard Worker               'An augmented assignment expression like "x += 1" can be '
311*cda5da8dSAndroid Build Coastguard Worker               'rewritten as\n'
312*cda5da8dSAndroid Build Coastguard Worker               '"x = x + 1" to achieve a similar, but not exactly equal '
313*cda5da8dSAndroid Build Coastguard Worker               'effect. In the\n'
314*cda5da8dSAndroid Build Coastguard Worker               'augmented version, "x" is only evaluated once. Also, when '
315*cda5da8dSAndroid Build Coastguard Worker               'possible,\n'
316*cda5da8dSAndroid Build Coastguard Worker               'the actual operation is performed *in-place*, meaning that '
317*cda5da8dSAndroid Build Coastguard Worker               'rather than\n'
318*cda5da8dSAndroid Build Coastguard Worker               'creating a new object and assigning that to the target, the '
319*cda5da8dSAndroid Build Coastguard Worker               'old object\n'
320*cda5da8dSAndroid Build Coastguard Worker               'is modified instead.\n'
321*cda5da8dSAndroid Build Coastguard Worker               '\n'
322*cda5da8dSAndroid Build Coastguard Worker               'Unlike normal assignments, augmented assignments evaluate the '
323*cda5da8dSAndroid Build Coastguard Worker               'left-\n'
324*cda5da8dSAndroid Build Coastguard Worker               'hand side *before* evaluating the right-hand side.  For '
325*cda5da8dSAndroid Build Coastguard Worker               'example, "a[i]\n'
326*cda5da8dSAndroid Build Coastguard Worker               '+= f(x)" first looks-up "a[i]", then it evaluates "f(x)" and '
327*cda5da8dSAndroid Build Coastguard Worker               'performs\n'
328*cda5da8dSAndroid Build Coastguard Worker               'the addition, and lastly, it writes the result back to '
329*cda5da8dSAndroid Build Coastguard Worker               '"a[i]".\n'
330*cda5da8dSAndroid Build Coastguard Worker               '\n'
331*cda5da8dSAndroid Build Coastguard Worker               'With the exception of assigning to tuples and multiple targets '
332*cda5da8dSAndroid Build Coastguard Worker               'in a\n'
333*cda5da8dSAndroid Build Coastguard Worker               'single statement, the assignment done by augmented assignment\n'
334*cda5da8dSAndroid Build Coastguard Worker               'statements is handled the same way as normal assignments. '
335*cda5da8dSAndroid Build Coastguard Worker               'Similarly,\n'
336*cda5da8dSAndroid Build Coastguard Worker               'with the exception of the possible *in-place* behavior, the '
337*cda5da8dSAndroid Build Coastguard Worker               'binary\n'
338*cda5da8dSAndroid Build Coastguard Worker               'operation performed by augmented assignment is the same as the '
339*cda5da8dSAndroid Build Coastguard Worker               'normal\n'
340*cda5da8dSAndroid Build Coastguard Worker               'binary operations.\n'
341*cda5da8dSAndroid Build Coastguard Worker               '\n'
342*cda5da8dSAndroid Build Coastguard Worker               'For targets which are attribute references, the same caveat '
343*cda5da8dSAndroid Build Coastguard Worker               'about\n'
344*cda5da8dSAndroid Build Coastguard Worker               'class and instance attributes applies as for regular '
345*cda5da8dSAndroid Build Coastguard Worker               'assignments.\n'
346*cda5da8dSAndroid Build Coastguard Worker               '\n'
347*cda5da8dSAndroid Build Coastguard Worker               '\n'
348*cda5da8dSAndroid Build Coastguard Worker               'Annotated assignment statements\n'
349*cda5da8dSAndroid Build Coastguard Worker               '===============================\n'
350*cda5da8dSAndroid Build Coastguard Worker               '\n'
351*cda5da8dSAndroid Build Coastguard Worker               '*Annotation* assignment is the combination, in a single '
352*cda5da8dSAndroid Build Coastguard Worker               'statement, of\n'
353*cda5da8dSAndroid Build Coastguard Worker               'a variable or attribute annotation and an optional assignment\n'
354*cda5da8dSAndroid Build Coastguard Worker               'statement:\n'
355*cda5da8dSAndroid Build Coastguard Worker               '\n'
356*cda5da8dSAndroid Build Coastguard Worker               '   annotated_assignment_stmt ::= augtarget ":" expression\n'
357*cda5da8dSAndroid Build Coastguard Worker               '                                 ["=" (starred_expression | '
358*cda5da8dSAndroid Build Coastguard Worker               'yield_expression)]\n'
359*cda5da8dSAndroid Build Coastguard Worker               '\n'
360*cda5da8dSAndroid Build Coastguard Worker               'The difference from normal Assignment statements is that only '
361*cda5da8dSAndroid Build Coastguard Worker               'a single\n'
362*cda5da8dSAndroid Build Coastguard Worker               'target is allowed.\n'
363*cda5da8dSAndroid Build Coastguard Worker               '\n'
364*cda5da8dSAndroid Build Coastguard Worker               'For simple names as assignment targets, if in class or module '
365*cda5da8dSAndroid Build Coastguard Worker               'scope,\n'
366*cda5da8dSAndroid Build Coastguard Worker               'the annotations are evaluated and stored in a special class or '
367*cda5da8dSAndroid Build Coastguard Worker               'module\n'
368*cda5da8dSAndroid Build Coastguard Worker               'attribute "__annotations__" that is a dictionary mapping from '
369*cda5da8dSAndroid Build Coastguard Worker               'variable\n'
370*cda5da8dSAndroid Build Coastguard Worker               'names (mangled if private) to evaluated annotations. This '
371*cda5da8dSAndroid Build Coastguard Worker               'attribute is\n'
372*cda5da8dSAndroid Build Coastguard Worker               'writable and is automatically created at the start of class or '
373*cda5da8dSAndroid Build Coastguard Worker               'module\n'
374*cda5da8dSAndroid Build Coastguard Worker               'body execution, if annotations are found statically.\n'
375*cda5da8dSAndroid Build Coastguard Worker               '\n'
376*cda5da8dSAndroid Build Coastguard Worker               'For expressions as assignment targets, the annotations are '
377*cda5da8dSAndroid Build Coastguard Worker               'evaluated\n'
378*cda5da8dSAndroid Build Coastguard Worker               'if in class or module scope, but not stored.\n'
379*cda5da8dSAndroid Build Coastguard Worker               '\n'
380*cda5da8dSAndroid Build Coastguard Worker               'If a name is annotated in a function scope, then this name is '
381*cda5da8dSAndroid Build Coastguard Worker               'local\n'
382*cda5da8dSAndroid Build Coastguard Worker               'for that scope. Annotations are never evaluated and stored in '
383*cda5da8dSAndroid Build Coastguard Worker               'function\n'
384*cda5da8dSAndroid Build Coastguard Worker               'scopes.\n'
385*cda5da8dSAndroid Build Coastguard Worker               '\n'
386*cda5da8dSAndroid Build Coastguard Worker               'If the right hand side is present, an annotated assignment '
387*cda5da8dSAndroid Build Coastguard Worker               'performs\n'
388*cda5da8dSAndroid Build Coastguard Worker               'the actual assignment before evaluating annotations (where\n'
389*cda5da8dSAndroid Build Coastguard Worker               'applicable). If the right hand side is not present for an '
390*cda5da8dSAndroid Build Coastguard Worker               'expression\n'
391*cda5da8dSAndroid Build Coastguard Worker               'target, then the interpreter evaluates the target except for '
392*cda5da8dSAndroid Build Coastguard Worker               'the last\n'
393*cda5da8dSAndroid Build Coastguard Worker               '"__setitem__()" or "__setattr__()" call.\n'
394*cda5da8dSAndroid Build Coastguard Worker               '\n'
395*cda5da8dSAndroid Build Coastguard Worker               'See also:\n'
396*cda5da8dSAndroid Build Coastguard Worker               '\n'
397*cda5da8dSAndroid Build Coastguard Worker               '  **PEP 526** - Syntax for Variable Annotations\n'
398*cda5da8dSAndroid Build Coastguard Worker               '     The proposal that added syntax for annotating the types '
399*cda5da8dSAndroid Build Coastguard Worker               'of\n'
400*cda5da8dSAndroid Build Coastguard Worker               '     variables (including class variables and instance '
401*cda5da8dSAndroid Build Coastguard Worker               'variables),\n'
402*cda5da8dSAndroid Build Coastguard Worker               '     instead of expressing them through comments.\n'
403*cda5da8dSAndroid Build Coastguard Worker               '\n'
404*cda5da8dSAndroid Build Coastguard Worker               '  **PEP 484** - Type hints\n'
405*cda5da8dSAndroid Build Coastguard Worker               '     The proposal that added the "typing" module to provide a '
406*cda5da8dSAndroid Build Coastguard Worker               'standard\n'
407*cda5da8dSAndroid Build Coastguard Worker               '     syntax for type annotations that can be used in static '
408*cda5da8dSAndroid Build Coastguard Worker               'analysis\n'
409*cda5da8dSAndroid Build Coastguard Worker               '     tools and IDEs.\n'
410*cda5da8dSAndroid Build Coastguard Worker               '\n'
411*cda5da8dSAndroid Build Coastguard Worker               'Changed in version 3.8: Now annotated assignments allow the '
412*cda5da8dSAndroid Build Coastguard Worker               'same\n'
413*cda5da8dSAndroid Build Coastguard Worker               'expressions in the right hand side as regular assignments. '
414*cda5da8dSAndroid Build Coastguard Worker               'Previously,\n'
415*cda5da8dSAndroid Build Coastguard Worker               'some expressions (like un-parenthesized tuple expressions) '
416*cda5da8dSAndroid Build Coastguard Worker               'caused a\n'
417*cda5da8dSAndroid Build Coastguard Worker               'syntax error.\n',
418*cda5da8dSAndroid Build Coastguard Worker 'async': 'Coroutines\n'
419*cda5da8dSAndroid Build Coastguard Worker          '**********\n'
420*cda5da8dSAndroid Build Coastguard Worker          '\n'
421*cda5da8dSAndroid Build Coastguard Worker          'New in version 3.5.\n'
422*cda5da8dSAndroid Build Coastguard Worker          '\n'
423*cda5da8dSAndroid Build Coastguard Worker          '\n'
424*cda5da8dSAndroid Build Coastguard Worker          'Coroutine function definition\n'
425*cda5da8dSAndroid Build Coastguard Worker          '=============================\n'
426*cda5da8dSAndroid Build Coastguard Worker          '\n'
427*cda5da8dSAndroid Build Coastguard Worker          '   async_funcdef ::= [decorators] "async" "def" funcname "(" '
428*cda5da8dSAndroid Build Coastguard Worker          '[parameter_list] ")"\n'
429*cda5da8dSAndroid Build Coastguard Worker          '                     ["->" expression] ":" suite\n'
430*cda5da8dSAndroid Build Coastguard Worker          '\n'
431*cda5da8dSAndroid Build Coastguard Worker          'Execution of Python coroutines can be suspended and resumed at '
432*cda5da8dSAndroid Build Coastguard Worker          'many\n'
433*cda5da8dSAndroid Build Coastguard Worker          'points (see *coroutine*). "await" expressions, "async for" and '
434*cda5da8dSAndroid Build Coastguard Worker          '"async\n'
435*cda5da8dSAndroid Build Coastguard Worker          'with" can only be used in the body of a coroutine function.\n'
436*cda5da8dSAndroid Build Coastguard Worker          '\n'
437*cda5da8dSAndroid Build Coastguard Worker          'Functions defined with "async def" syntax are always coroutine\n'
438*cda5da8dSAndroid Build Coastguard Worker          'functions, even if they do not contain "await" or "async" '
439*cda5da8dSAndroid Build Coastguard Worker          'keywords.\n'
440*cda5da8dSAndroid Build Coastguard Worker          '\n'
441*cda5da8dSAndroid Build Coastguard Worker          'It is a "SyntaxError" to use a "yield from" expression inside the '
442*cda5da8dSAndroid Build Coastguard Worker          'body\n'
443*cda5da8dSAndroid Build Coastguard Worker          'of a coroutine function.\n'
444*cda5da8dSAndroid Build Coastguard Worker          '\n'
445*cda5da8dSAndroid Build Coastguard Worker          'An example of a coroutine function:\n'
446*cda5da8dSAndroid Build Coastguard Worker          '\n'
447*cda5da8dSAndroid Build Coastguard Worker          '   async def func(param1, param2):\n'
448*cda5da8dSAndroid Build Coastguard Worker          '       do_stuff()\n'
449*cda5da8dSAndroid Build Coastguard Worker          '       await some_coroutine()\n'
450*cda5da8dSAndroid Build Coastguard Worker          '\n'
451*cda5da8dSAndroid Build Coastguard Worker          'Changed in version 3.7: "await" and "async" are now keywords;\n'
452*cda5da8dSAndroid Build Coastguard Worker          'previously they were only treated as such inside the body of a\n'
453*cda5da8dSAndroid Build Coastguard Worker          'coroutine function.\n'
454*cda5da8dSAndroid Build Coastguard Worker          '\n'
455*cda5da8dSAndroid Build Coastguard Worker          '\n'
456*cda5da8dSAndroid Build Coastguard Worker          'The "async for" statement\n'
457*cda5da8dSAndroid Build Coastguard Worker          '=========================\n'
458*cda5da8dSAndroid Build Coastguard Worker          '\n'
459*cda5da8dSAndroid Build Coastguard Worker          '   async_for_stmt ::= "async" for_stmt\n'
460*cda5da8dSAndroid Build Coastguard Worker          '\n'
461*cda5da8dSAndroid Build Coastguard Worker          'An *asynchronous iterable* provides an "__aiter__" method that\n'
462*cda5da8dSAndroid Build Coastguard Worker          'directly returns an *asynchronous iterator*, which can call\n'
463*cda5da8dSAndroid Build Coastguard Worker          'asynchronous code in its "__anext__" method.\n'
464*cda5da8dSAndroid Build Coastguard Worker          '\n'
465*cda5da8dSAndroid Build Coastguard Worker          'The "async for" statement allows convenient iteration over\n'
466*cda5da8dSAndroid Build Coastguard Worker          'asynchronous iterables.\n'
467*cda5da8dSAndroid Build Coastguard Worker          '\n'
468*cda5da8dSAndroid Build Coastguard Worker          'The following code:\n'
469*cda5da8dSAndroid Build Coastguard Worker          '\n'
470*cda5da8dSAndroid Build Coastguard Worker          '   async for TARGET in ITER:\n'
471*cda5da8dSAndroid Build Coastguard Worker          '       SUITE\n'
472*cda5da8dSAndroid Build Coastguard Worker          '   else:\n'
473*cda5da8dSAndroid Build Coastguard Worker          '       SUITE2\n'
474*cda5da8dSAndroid Build Coastguard Worker          '\n'
475*cda5da8dSAndroid Build Coastguard Worker          'Is semantically equivalent to:\n'
476*cda5da8dSAndroid Build Coastguard Worker          '\n'
477*cda5da8dSAndroid Build Coastguard Worker          '   iter = (ITER)\n'
478*cda5da8dSAndroid Build Coastguard Worker          '   iter = type(iter).__aiter__(iter)\n'
479*cda5da8dSAndroid Build Coastguard Worker          '   running = True\n'
480*cda5da8dSAndroid Build Coastguard Worker          '\n'
481*cda5da8dSAndroid Build Coastguard Worker          '   while running:\n'
482*cda5da8dSAndroid Build Coastguard Worker          '       try:\n'
483*cda5da8dSAndroid Build Coastguard Worker          '           TARGET = await type(iter).__anext__(iter)\n'
484*cda5da8dSAndroid Build Coastguard Worker          '       except StopAsyncIteration:\n'
485*cda5da8dSAndroid Build Coastguard Worker          '           running = False\n'
486*cda5da8dSAndroid Build Coastguard Worker          '       else:\n'
487*cda5da8dSAndroid Build Coastguard Worker          '           SUITE\n'
488*cda5da8dSAndroid Build Coastguard Worker          '   else:\n'
489*cda5da8dSAndroid Build Coastguard Worker          '       SUITE2\n'
490*cda5da8dSAndroid Build Coastguard Worker          '\n'
491*cda5da8dSAndroid Build Coastguard Worker          'See also "__aiter__()" and "__anext__()" for details.\n'
492*cda5da8dSAndroid Build Coastguard Worker          '\n'
493*cda5da8dSAndroid Build Coastguard Worker          'It is a "SyntaxError" to use an "async for" statement outside the '
494*cda5da8dSAndroid Build Coastguard Worker          'body\n'
495*cda5da8dSAndroid Build Coastguard Worker          'of a coroutine function.\n'
496*cda5da8dSAndroid Build Coastguard Worker          '\n'
497*cda5da8dSAndroid Build Coastguard Worker          '\n'
498*cda5da8dSAndroid Build Coastguard Worker          'The "async with" statement\n'
499*cda5da8dSAndroid Build Coastguard Worker          '==========================\n'
500*cda5da8dSAndroid Build Coastguard Worker          '\n'
501*cda5da8dSAndroid Build Coastguard Worker          '   async_with_stmt ::= "async" with_stmt\n'
502*cda5da8dSAndroid Build Coastguard Worker          '\n'
503*cda5da8dSAndroid Build Coastguard Worker          'An *asynchronous context manager* is a *context manager* that is '
504*cda5da8dSAndroid Build Coastguard Worker          'able\n'
505*cda5da8dSAndroid Build Coastguard Worker          'to suspend execution in its *enter* and *exit* methods.\n'
506*cda5da8dSAndroid Build Coastguard Worker          '\n'
507*cda5da8dSAndroid Build Coastguard Worker          'The following code:\n'
508*cda5da8dSAndroid Build Coastguard Worker          '\n'
509*cda5da8dSAndroid Build Coastguard Worker          '   async with EXPRESSION as TARGET:\n'
510*cda5da8dSAndroid Build Coastguard Worker          '       SUITE\n'
511*cda5da8dSAndroid Build Coastguard Worker          '\n'
512*cda5da8dSAndroid Build Coastguard Worker          'is semantically equivalent to:\n'
513*cda5da8dSAndroid Build Coastguard Worker          '\n'
514*cda5da8dSAndroid Build Coastguard Worker          '   manager = (EXPRESSION)\n'
515*cda5da8dSAndroid Build Coastguard Worker          '   aenter = type(manager).__aenter__\n'
516*cda5da8dSAndroid Build Coastguard Worker          '   aexit = type(manager).__aexit__\n'
517*cda5da8dSAndroid Build Coastguard Worker          '   value = await aenter(manager)\n'
518*cda5da8dSAndroid Build Coastguard Worker          '   hit_except = False\n'
519*cda5da8dSAndroid Build Coastguard Worker          '\n'
520*cda5da8dSAndroid Build Coastguard Worker          '   try:\n'
521*cda5da8dSAndroid Build Coastguard Worker          '       TARGET = value\n'
522*cda5da8dSAndroid Build Coastguard Worker          '       SUITE\n'
523*cda5da8dSAndroid Build Coastguard Worker          '   except:\n'
524*cda5da8dSAndroid Build Coastguard Worker          '       hit_except = True\n'
525*cda5da8dSAndroid Build Coastguard Worker          '       if not await aexit(manager, *sys.exc_info()):\n'
526*cda5da8dSAndroid Build Coastguard Worker          '           raise\n'
527*cda5da8dSAndroid Build Coastguard Worker          '   finally:\n'
528*cda5da8dSAndroid Build Coastguard Worker          '       if not hit_except:\n'
529*cda5da8dSAndroid Build Coastguard Worker          '           await aexit(manager, None, None, None)\n'
530*cda5da8dSAndroid Build Coastguard Worker          '\n'
531*cda5da8dSAndroid Build Coastguard Worker          'See also "__aenter__()" and "__aexit__()" for details.\n'
532*cda5da8dSAndroid Build Coastguard Worker          '\n'
533*cda5da8dSAndroid Build Coastguard Worker          'It is a "SyntaxError" to use an "async with" statement outside the\n'
534*cda5da8dSAndroid Build Coastguard Worker          'body of a coroutine function.\n'
535*cda5da8dSAndroid Build Coastguard Worker          '\n'
536*cda5da8dSAndroid Build Coastguard Worker          'See also:\n'
537*cda5da8dSAndroid Build Coastguard Worker          '\n'
538*cda5da8dSAndroid Build Coastguard Worker          '  **PEP 492** - Coroutines with async and await syntax\n'
539*cda5da8dSAndroid Build Coastguard Worker          '     The proposal that made coroutines a proper standalone concept '
540*cda5da8dSAndroid Build Coastguard Worker          'in\n'
541*cda5da8dSAndroid Build Coastguard Worker          '     Python, and added supporting syntax.\n'
542*cda5da8dSAndroid Build Coastguard Worker          '\n'
543*cda5da8dSAndroid Build Coastguard Worker          '-[ Footnotes ]-\n'
544*cda5da8dSAndroid Build Coastguard Worker          '\n'
545*cda5da8dSAndroid Build Coastguard Worker          '[1] The exception is propagated to the invocation stack unless '
546*cda5da8dSAndroid Build Coastguard Worker          'there\n'
547*cda5da8dSAndroid Build Coastguard Worker          '    is a "finally" clause which happens to raise another '
548*cda5da8dSAndroid Build Coastguard Worker          'exception.\n'
549*cda5da8dSAndroid Build Coastguard Worker          '    That new exception causes the old one to be lost.\n'
550*cda5da8dSAndroid Build Coastguard Worker          '\n'
551*cda5da8dSAndroid Build Coastguard Worker          '[2] In pattern matching, a sequence is defined as one of the\n'
552*cda5da8dSAndroid Build Coastguard Worker          '    following:\n'
553*cda5da8dSAndroid Build Coastguard Worker          '\n'
554*cda5da8dSAndroid Build Coastguard Worker          '       * a class that inherits from "collections.abc.Sequence"\n'
555*cda5da8dSAndroid Build Coastguard Worker          '\n'
556*cda5da8dSAndroid Build Coastguard Worker          '       * a Python class that has been registered as\n'
557*cda5da8dSAndroid Build Coastguard Worker          '         "collections.abc.Sequence"\n'
558*cda5da8dSAndroid Build Coastguard Worker          '\n'
559*cda5da8dSAndroid Build Coastguard Worker          '       * a builtin class that has its (CPython) '
560*cda5da8dSAndroid Build Coastguard Worker          '"Py_TPFLAGS_SEQUENCE"\n'
561*cda5da8dSAndroid Build Coastguard Worker          '         bit set\n'
562*cda5da8dSAndroid Build Coastguard Worker          '\n'
563*cda5da8dSAndroid Build Coastguard Worker          '       * a class that inherits from any of the above\n'
564*cda5da8dSAndroid Build Coastguard Worker          '\n'
565*cda5da8dSAndroid Build Coastguard Worker          '    The following standard library classes are sequences:\n'
566*cda5da8dSAndroid Build Coastguard Worker          '\n'
567*cda5da8dSAndroid Build Coastguard Worker          '       * "array.array"\n'
568*cda5da8dSAndroid Build Coastguard Worker          '\n'
569*cda5da8dSAndroid Build Coastguard Worker          '       * "collections.deque"\n'
570*cda5da8dSAndroid Build Coastguard Worker          '\n'
571*cda5da8dSAndroid Build Coastguard Worker          '       * "list"\n'
572*cda5da8dSAndroid Build Coastguard Worker          '\n'
573*cda5da8dSAndroid Build Coastguard Worker          '       * "memoryview"\n'
574*cda5da8dSAndroid Build Coastguard Worker          '\n'
575*cda5da8dSAndroid Build Coastguard Worker          '       * "range"\n'
576*cda5da8dSAndroid Build Coastguard Worker          '\n'
577*cda5da8dSAndroid Build Coastguard Worker          '       * "tuple"\n'
578*cda5da8dSAndroid Build Coastguard Worker          '\n'
579*cda5da8dSAndroid Build Coastguard Worker          '    Note:\n'
580*cda5da8dSAndroid Build Coastguard Worker          '\n'
581*cda5da8dSAndroid Build Coastguard Worker          '      Subject values of type "str", "bytes", and "bytearray" do '
582*cda5da8dSAndroid Build Coastguard Worker          'not\n'
583*cda5da8dSAndroid Build Coastguard Worker          '      match sequence patterns.\n'
584*cda5da8dSAndroid Build Coastguard Worker          '\n'
585*cda5da8dSAndroid Build Coastguard Worker          '[3] In pattern matching, a mapping is defined as one of the '
586*cda5da8dSAndroid Build Coastguard Worker          'following:\n'
587*cda5da8dSAndroid Build Coastguard Worker          '\n'
588*cda5da8dSAndroid Build Coastguard Worker          '       * a class that inherits from "collections.abc.Mapping"\n'
589*cda5da8dSAndroid Build Coastguard Worker          '\n'
590*cda5da8dSAndroid Build Coastguard Worker          '       * a Python class that has been registered as\n'
591*cda5da8dSAndroid Build Coastguard Worker          '         "collections.abc.Mapping"\n'
592*cda5da8dSAndroid Build Coastguard Worker          '\n'
593*cda5da8dSAndroid Build Coastguard Worker          '       * a builtin class that has its (CPython) '
594*cda5da8dSAndroid Build Coastguard Worker          '"Py_TPFLAGS_MAPPING"\n'
595*cda5da8dSAndroid Build Coastguard Worker          '         bit set\n'
596*cda5da8dSAndroid Build Coastguard Worker          '\n'
597*cda5da8dSAndroid Build Coastguard Worker          '       * a class that inherits from any of the above\n'
598*cda5da8dSAndroid Build Coastguard Worker          '\n'
599*cda5da8dSAndroid Build Coastguard Worker          '    The standard library classes "dict" and '
600*cda5da8dSAndroid Build Coastguard Worker          '"types.MappingProxyType"\n'
601*cda5da8dSAndroid Build Coastguard Worker          '    are mappings.\n'
602*cda5da8dSAndroid Build Coastguard Worker          '\n'
603*cda5da8dSAndroid Build Coastguard Worker          '[4] A string literal appearing as the first statement in the '
604*cda5da8dSAndroid Build Coastguard Worker          'function\n'
605*cda5da8dSAndroid Build Coastguard Worker          '    body is transformed into the function’s "__doc__" attribute '
606*cda5da8dSAndroid Build Coastguard Worker          'and\n'
607*cda5da8dSAndroid Build Coastguard Worker          '    therefore the function’s *docstring*.\n'
608*cda5da8dSAndroid Build Coastguard Worker          '\n'
609*cda5da8dSAndroid Build Coastguard Worker          '[5] A string literal appearing as the first statement in the class\n'
610*cda5da8dSAndroid Build Coastguard Worker          '    body is transformed into the namespace’s "__doc__" item and\n'
611*cda5da8dSAndroid Build Coastguard Worker          '    therefore the class’s *docstring*.\n',
612*cda5da8dSAndroid Build Coastguard Worker 'atom-identifiers': 'Identifiers (Names)\n'
613*cda5da8dSAndroid Build Coastguard Worker                     '*******************\n'
614*cda5da8dSAndroid Build Coastguard Worker                     '\n'
615*cda5da8dSAndroid Build Coastguard Worker                     'An identifier occurring as an atom is a name.  See '
616*cda5da8dSAndroid Build Coastguard Worker                     'section Identifiers\n'
617*cda5da8dSAndroid Build Coastguard Worker                     'and keywords for lexical definition and section Naming '
618*cda5da8dSAndroid Build Coastguard Worker                     'and binding for\n'
619*cda5da8dSAndroid Build Coastguard Worker                     'documentation of naming and binding.\n'
620*cda5da8dSAndroid Build Coastguard Worker                     '\n'
621*cda5da8dSAndroid Build Coastguard Worker                     'When the name is bound to an object, evaluation of the '
622*cda5da8dSAndroid Build Coastguard Worker                     'atom yields\n'
623*cda5da8dSAndroid Build Coastguard Worker                     'that object. When a name is not bound, an attempt to '
624*cda5da8dSAndroid Build Coastguard Worker                     'evaluate it\n'
625*cda5da8dSAndroid Build Coastguard Worker                     'raises a "NameError" exception.\n'
626*cda5da8dSAndroid Build Coastguard Worker                     '\n'
627*cda5da8dSAndroid Build Coastguard Worker                     '**Private name mangling:** When an identifier that '
628*cda5da8dSAndroid Build Coastguard Worker                     'textually occurs in\n'
629*cda5da8dSAndroid Build Coastguard Worker                     'a class definition begins with two or more underscore '
630*cda5da8dSAndroid Build Coastguard Worker                     'characters and\n'
631*cda5da8dSAndroid Build Coastguard Worker                     'does not end in two or more underscores, it is '
632*cda5da8dSAndroid Build Coastguard Worker                     'considered a *private\n'
633*cda5da8dSAndroid Build Coastguard Worker                     'name* of that class. Private names are transformed to a '
634*cda5da8dSAndroid Build Coastguard Worker                     'longer form\n'
635*cda5da8dSAndroid Build Coastguard Worker                     'before code is generated for them.  The transformation '
636*cda5da8dSAndroid Build Coastguard Worker                     'inserts the\n'
637*cda5da8dSAndroid Build Coastguard Worker                     'class name, with leading underscores removed and a '
638*cda5da8dSAndroid Build Coastguard Worker                     'single underscore\n'
639*cda5da8dSAndroid Build Coastguard Worker                     'inserted, in front of the name.  For example, the '
640*cda5da8dSAndroid Build Coastguard Worker                     'identifier "__spam"\n'
641*cda5da8dSAndroid Build Coastguard Worker                     'occurring in a class named "Ham" will be transformed to '
642*cda5da8dSAndroid Build Coastguard Worker                     '"_Ham__spam".\n'
643*cda5da8dSAndroid Build Coastguard Worker                     'This transformation is independent of the syntactical '
644*cda5da8dSAndroid Build Coastguard Worker                     'context in which\n'
645*cda5da8dSAndroid Build Coastguard Worker                     'the identifier is used.  If the transformed name is '
646*cda5da8dSAndroid Build Coastguard Worker                     'extremely long\n'
647*cda5da8dSAndroid Build Coastguard Worker                     '(longer than 255 characters), implementation defined '
648*cda5da8dSAndroid Build Coastguard Worker                     'truncation may\n'
649*cda5da8dSAndroid Build Coastguard Worker                     'happen. If the class name consists only of underscores, '
650*cda5da8dSAndroid Build Coastguard Worker                     'no\n'
651*cda5da8dSAndroid Build Coastguard Worker                     'transformation is done.\n',
652*cda5da8dSAndroid Build Coastguard Worker 'atom-literals': 'Literals\n'
653*cda5da8dSAndroid Build Coastguard Worker                  '********\n'
654*cda5da8dSAndroid Build Coastguard Worker                  '\n'
655*cda5da8dSAndroid Build Coastguard Worker                  'Python supports string and bytes literals and various '
656*cda5da8dSAndroid Build Coastguard Worker                  'numeric\n'
657*cda5da8dSAndroid Build Coastguard Worker                  'literals:\n'
658*cda5da8dSAndroid Build Coastguard Worker                  '\n'
659*cda5da8dSAndroid Build Coastguard Worker                  '   literal ::= stringliteral | bytesliteral\n'
660*cda5da8dSAndroid Build Coastguard Worker                  '               | integer | floatnumber | imagnumber\n'
661*cda5da8dSAndroid Build Coastguard Worker                  '\n'
662*cda5da8dSAndroid Build Coastguard Worker                  'Evaluation of a literal yields an object of the given type '
663*cda5da8dSAndroid Build Coastguard Worker                  '(string,\n'
664*cda5da8dSAndroid Build Coastguard Worker                  'bytes, integer, floating point number, complex number) with '
665*cda5da8dSAndroid Build Coastguard Worker                  'the given\n'
666*cda5da8dSAndroid Build Coastguard Worker                  'value.  The value may be approximated in the case of '
667*cda5da8dSAndroid Build Coastguard Worker                  'floating point\n'
668*cda5da8dSAndroid Build Coastguard Worker                  'and imaginary (complex) literals.  See section Literals for '
669*cda5da8dSAndroid Build Coastguard Worker                  'details.\n'
670*cda5da8dSAndroid Build Coastguard Worker                  '\n'
671*cda5da8dSAndroid Build Coastguard Worker                  'All literals correspond to immutable data types, and hence '
672*cda5da8dSAndroid Build Coastguard Worker                  'the\n'
673*cda5da8dSAndroid Build Coastguard Worker                  'object’s identity is less important than its value.  '
674*cda5da8dSAndroid Build Coastguard Worker                  'Multiple\n'
675*cda5da8dSAndroid Build Coastguard Worker                  'evaluations of literals with the same value (either the '
676*cda5da8dSAndroid Build Coastguard Worker                  'same\n'
677*cda5da8dSAndroid Build Coastguard Worker                  'occurrence in the program text or a different occurrence) '
678*cda5da8dSAndroid Build Coastguard Worker                  'may obtain\n'
679*cda5da8dSAndroid Build Coastguard Worker                  'the same object or a different object with the same '
680*cda5da8dSAndroid Build Coastguard Worker                  'value.\n',
681*cda5da8dSAndroid Build Coastguard Worker 'attribute-access': 'Customizing attribute access\n'
682*cda5da8dSAndroid Build Coastguard Worker                     '****************************\n'
683*cda5da8dSAndroid Build Coastguard Worker                     '\n'
684*cda5da8dSAndroid Build Coastguard Worker                     'The following methods can be defined to customize the '
685*cda5da8dSAndroid Build Coastguard Worker                     'meaning of\n'
686*cda5da8dSAndroid Build Coastguard Worker                     'attribute access (use of, assignment to, or deletion of '
687*cda5da8dSAndroid Build Coastguard Worker                     '"x.name") for\n'
688*cda5da8dSAndroid Build Coastguard Worker                     'class instances.\n'
689*cda5da8dSAndroid Build Coastguard Worker                     '\n'
690*cda5da8dSAndroid Build Coastguard Worker                     'object.__getattr__(self, name)\n'
691*cda5da8dSAndroid Build Coastguard Worker                     '\n'
692*cda5da8dSAndroid Build Coastguard Worker                     '   Called when the default attribute access fails with '
693*cda5da8dSAndroid Build Coastguard Worker                     'an\n'
694*cda5da8dSAndroid Build Coastguard Worker                     '   "AttributeError" (either "__getattribute__()" raises '
695*cda5da8dSAndroid Build Coastguard Worker                     'an\n'
696*cda5da8dSAndroid Build Coastguard Worker                     '   "AttributeError" because *name* is not an instance '
697*cda5da8dSAndroid Build Coastguard Worker                     'attribute or an\n'
698*cda5da8dSAndroid Build Coastguard Worker                     '   attribute in the class tree for "self"; or '
699*cda5da8dSAndroid Build Coastguard Worker                     '"__get__()" of a *name*\n'
700*cda5da8dSAndroid Build Coastguard Worker                     '   property raises "AttributeError").  This method '
701*cda5da8dSAndroid Build Coastguard Worker                     'should either\n'
702*cda5da8dSAndroid Build Coastguard Worker                     '   return the (computed) attribute value or raise an '
703*cda5da8dSAndroid Build Coastguard Worker                     '"AttributeError"\n'
704*cda5da8dSAndroid Build Coastguard Worker                     '   exception.\n'
705*cda5da8dSAndroid Build Coastguard Worker                     '\n'
706*cda5da8dSAndroid Build Coastguard Worker                     '   Note that if the attribute is found through the '
707*cda5da8dSAndroid Build Coastguard Worker                     'normal mechanism,\n'
708*cda5da8dSAndroid Build Coastguard Worker                     '   "__getattr__()" is not called.  (This is an '
709*cda5da8dSAndroid Build Coastguard Worker                     'intentional asymmetry\n'
710*cda5da8dSAndroid Build Coastguard Worker                     '   between "__getattr__()" and "__setattr__()".) This is '
711*cda5da8dSAndroid Build Coastguard Worker                     'done both for\n'
712*cda5da8dSAndroid Build Coastguard Worker                     '   efficiency reasons and because otherwise '
713*cda5da8dSAndroid Build Coastguard Worker                     '"__getattr__()" would have\n'
714*cda5da8dSAndroid Build Coastguard Worker                     '   no way to access other attributes of the instance.  '
715*cda5da8dSAndroid Build Coastguard Worker                     'Note that at\n'
716*cda5da8dSAndroid Build Coastguard Worker                     '   least for instance variables, you can fake total '
717*cda5da8dSAndroid Build Coastguard Worker                     'control by not\n'
718*cda5da8dSAndroid Build Coastguard Worker                     '   inserting any values in the instance attribute '
719*cda5da8dSAndroid Build Coastguard Worker                     'dictionary (but\n'
720*cda5da8dSAndroid Build Coastguard Worker                     '   instead inserting them in another object).  See the\n'
721*cda5da8dSAndroid Build Coastguard Worker                     '   "__getattribute__()" method below for a way to '
722*cda5da8dSAndroid Build Coastguard Worker                     'actually get total\n'
723*cda5da8dSAndroid Build Coastguard Worker                     '   control over attribute access.\n'
724*cda5da8dSAndroid Build Coastguard Worker                     '\n'
725*cda5da8dSAndroid Build Coastguard Worker                     'object.__getattribute__(self, name)\n'
726*cda5da8dSAndroid Build Coastguard Worker                     '\n'
727*cda5da8dSAndroid Build Coastguard Worker                     '   Called unconditionally to implement attribute '
728*cda5da8dSAndroid Build Coastguard Worker                     'accesses for\n'
729*cda5da8dSAndroid Build Coastguard Worker                     '   instances of the class. If the class also defines '
730*cda5da8dSAndroid Build Coastguard Worker                     '"__getattr__()",\n'
731*cda5da8dSAndroid Build Coastguard Worker                     '   the latter will not be called unless '
732*cda5da8dSAndroid Build Coastguard Worker                     '"__getattribute__()" either\n'
733*cda5da8dSAndroid Build Coastguard Worker                     '   calls it explicitly or raises an "AttributeError". '
734*cda5da8dSAndroid Build Coastguard Worker                     'This method\n'
735*cda5da8dSAndroid Build Coastguard Worker                     '   should return the (computed) attribute value or raise '
736*cda5da8dSAndroid Build Coastguard Worker                     'an\n'
737*cda5da8dSAndroid Build Coastguard Worker                     '   "AttributeError" exception. In order to avoid '
738*cda5da8dSAndroid Build Coastguard Worker                     'infinite recursion in\n'
739*cda5da8dSAndroid Build Coastguard Worker                     '   this method, its implementation should always call '
740*cda5da8dSAndroid Build Coastguard Worker                     'the base class\n'
741*cda5da8dSAndroid Build Coastguard Worker                     '   method with the same name to access any attributes it '
742*cda5da8dSAndroid Build Coastguard Worker                     'needs, for\n'
743*cda5da8dSAndroid Build Coastguard Worker                     '   example, "object.__getattribute__(self, name)".\n'
744*cda5da8dSAndroid Build Coastguard Worker                     '\n'
745*cda5da8dSAndroid Build Coastguard Worker                     '   Note:\n'
746*cda5da8dSAndroid Build Coastguard Worker                     '\n'
747*cda5da8dSAndroid Build Coastguard Worker                     '     This method may still be bypassed when looking up '
748*cda5da8dSAndroid Build Coastguard Worker                     'special methods\n'
749*cda5da8dSAndroid Build Coastguard Worker                     '     as the result of implicit invocation via language '
750*cda5da8dSAndroid Build Coastguard Worker                     'syntax or\n'
751*cda5da8dSAndroid Build Coastguard Worker                     '     built-in functions. See Special method lookup.\n'
752*cda5da8dSAndroid Build Coastguard Worker                     '\n'
753*cda5da8dSAndroid Build Coastguard Worker                     '   For certain sensitive attribute accesses, raises an '
754*cda5da8dSAndroid Build Coastguard Worker                     'auditing event\n'
755*cda5da8dSAndroid Build Coastguard Worker                     '   "object.__getattr__" with arguments "obj" and '
756*cda5da8dSAndroid Build Coastguard Worker                     '"name".\n'
757*cda5da8dSAndroid Build Coastguard Worker                     '\n'
758*cda5da8dSAndroid Build Coastguard Worker                     'object.__setattr__(self, name, value)\n'
759*cda5da8dSAndroid Build Coastguard Worker                     '\n'
760*cda5da8dSAndroid Build Coastguard Worker                     '   Called when an attribute assignment is attempted.  '
761*cda5da8dSAndroid Build Coastguard Worker                     'This is called\n'
762*cda5da8dSAndroid Build Coastguard Worker                     '   instead of the normal mechanism (i.e. store the value '
763*cda5da8dSAndroid Build Coastguard Worker                     'in the\n'
764*cda5da8dSAndroid Build Coastguard Worker                     '   instance dictionary). *name* is the attribute name, '
765*cda5da8dSAndroid Build Coastguard Worker                     '*value* is the\n'
766*cda5da8dSAndroid Build Coastguard Worker                     '   value to be assigned to it.\n'
767*cda5da8dSAndroid Build Coastguard Worker                     '\n'
768*cda5da8dSAndroid Build Coastguard Worker                     '   If "__setattr__()" wants to assign to an instance '
769*cda5da8dSAndroid Build Coastguard Worker                     'attribute, it\n'
770*cda5da8dSAndroid Build Coastguard Worker                     '   should call the base class method with the same name, '
771*cda5da8dSAndroid Build Coastguard Worker                     'for example,\n'
772*cda5da8dSAndroid Build Coastguard Worker                     '   "object.__setattr__(self, name, value)".\n'
773*cda5da8dSAndroid Build Coastguard Worker                     '\n'
774*cda5da8dSAndroid Build Coastguard Worker                     '   For certain sensitive attribute assignments, raises '
775*cda5da8dSAndroid Build Coastguard Worker                     'an auditing\n'
776*cda5da8dSAndroid Build Coastguard Worker                     '   event "object.__setattr__" with arguments "obj", '
777*cda5da8dSAndroid Build Coastguard Worker                     '"name", "value".\n'
778*cda5da8dSAndroid Build Coastguard Worker                     '\n'
779*cda5da8dSAndroid Build Coastguard Worker                     'object.__delattr__(self, name)\n'
780*cda5da8dSAndroid Build Coastguard Worker                     '\n'
781*cda5da8dSAndroid Build Coastguard Worker                     '   Like "__setattr__()" but for attribute deletion '
782*cda5da8dSAndroid Build Coastguard Worker                     'instead of\n'
783*cda5da8dSAndroid Build Coastguard Worker                     '   assignment.  This should only be implemented if "del '
784*cda5da8dSAndroid Build Coastguard Worker                     'obj.name" is\n'
785*cda5da8dSAndroid Build Coastguard Worker                     '   meaningful for the object.\n'
786*cda5da8dSAndroid Build Coastguard Worker                     '\n'
787*cda5da8dSAndroid Build Coastguard Worker                     '   For certain sensitive attribute deletions, raises an '
788*cda5da8dSAndroid Build Coastguard Worker                     'auditing event\n'
789*cda5da8dSAndroid Build Coastguard Worker                     '   "object.__delattr__" with arguments "obj" and '
790*cda5da8dSAndroid Build Coastguard Worker                     '"name".\n'
791*cda5da8dSAndroid Build Coastguard Worker                     '\n'
792*cda5da8dSAndroid Build Coastguard Worker                     'object.__dir__(self)\n'
793*cda5da8dSAndroid Build Coastguard Worker                     '\n'
794*cda5da8dSAndroid Build Coastguard Worker                     '   Called when "dir()" is called on the object. A '
795*cda5da8dSAndroid Build Coastguard Worker                     'sequence must be\n'
796*cda5da8dSAndroid Build Coastguard Worker                     '   returned. "dir()" converts the returned sequence to a '
797*cda5da8dSAndroid Build Coastguard Worker                     'list and\n'
798*cda5da8dSAndroid Build Coastguard Worker                     '   sorts it.\n'
799*cda5da8dSAndroid Build Coastguard Worker                     '\n'
800*cda5da8dSAndroid Build Coastguard Worker                     '\n'
801*cda5da8dSAndroid Build Coastguard Worker                     'Customizing module attribute access\n'
802*cda5da8dSAndroid Build Coastguard Worker                     '===================================\n'
803*cda5da8dSAndroid Build Coastguard Worker                     '\n'
804*cda5da8dSAndroid Build Coastguard Worker                     'Special names "__getattr__" and "__dir__" can be also '
805*cda5da8dSAndroid Build Coastguard Worker                     'used to\n'
806*cda5da8dSAndroid Build Coastguard Worker                     'customize access to module attributes. The "__getattr__" '
807*cda5da8dSAndroid Build Coastguard Worker                     'function at\n'
808*cda5da8dSAndroid Build Coastguard Worker                     'the module level should accept one argument which is the '
809*cda5da8dSAndroid Build Coastguard Worker                     'name of an\n'
810*cda5da8dSAndroid Build Coastguard Worker                     'attribute and return the computed value or raise an '
811*cda5da8dSAndroid Build Coastguard Worker                     '"AttributeError".\n'
812*cda5da8dSAndroid Build Coastguard Worker                     'If an attribute is not found on a module object through '
813*cda5da8dSAndroid Build Coastguard Worker                     'the normal\n'
814*cda5da8dSAndroid Build Coastguard Worker                     'lookup, i.e. "object.__getattribute__()", then '
815*cda5da8dSAndroid Build Coastguard Worker                     '"__getattr__" is\n'
816*cda5da8dSAndroid Build Coastguard Worker                     'searched in the module "__dict__" before raising an '
817*cda5da8dSAndroid Build Coastguard Worker                     '"AttributeError".\n'
818*cda5da8dSAndroid Build Coastguard Worker                     'If found, it is called with the attribute name and the '
819*cda5da8dSAndroid Build Coastguard Worker                     'result is\n'
820*cda5da8dSAndroid Build Coastguard Worker                     'returned.\n'
821*cda5da8dSAndroid Build Coastguard Worker                     '\n'
822*cda5da8dSAndroid Build Coastguard Worker                     'The "__dir__" function should accept no arguments, and '
823*cda5da8dSAndroid Build Coastguard Worker                     'return a\n'
824*cda5da8dSAndroid Build Coastguard Worker                     'sequence of strings that represents the names accessible '
825*cda5da8dSAndroid Build Coastguard Worker                     'on module. If\n'
826*cda5da8dSAndroid Build Coastguard Worker                     'present, this function overrides the standard "dir()" '
827*cda5da8dSAndroid Build Coastguard Worker                     'search on a\n'
828*cda5da8dSAndroid Build Coastguard Worker                     'module.\n'
829*cda5da8dSAndroid Build Coastguard Worker                     '\n'
830*cda5da8dSAndroid Build Coastguard Worker                     'For a more fine grained customization of the module '
831*cda5da8dSAndroid Build Coastguard Worker                     'behavior (setting\n'
832*cda5da8dSAndroid Build Coastguard Worker                     'attributes, properties, etc.), one can set the '
833*cda5da8dSAndroid Build Coastguard Worker                     '"__class__" attribute\n'
834*cda5da8dSAndroid Build Coastguard Worker                     'of a module object to a subclass of "types.ModuleType". '
835*cda5da8dSAndroid Build Coastguard Worker                     'For example:\n'
836*cda5da8dSAndroid Build Coastguard Worker                     '\n'
837*cda5da8dSAndroid Build Coastguard Worker                     '   import sys\n'
838*cda5da8dSAndroid Build Coastguard Worker                     '   from types import ModuleType\n'
839*cda5da8dSAndroid Build Coastguard Worker                     '\n'
840*cda5da8dSAndroid Build Coastguard Worker                     '   class VerboseModule(ModuleType):\n'
841*cda5da8dSAndroid Build Coastguard Worker                     '       def __repr__(self):\n'
842*cda5da8dSAndroid Build Coastguard Worker                     "           return f'Verbose {self.__name__}'\n"
843*cda5da8dSAndroid Build Coastguard Worker                     '\n'
844*cda5da8dSAndroid Build Coastguard Worker                     '       def __setattr__(self, attr, value):\n'
845*cda5da8dSAndroid Build Coastguard Worker                     "           print(f'Setting {attr}...')\n"
846*cda5da8dSAndroid Build Coastguard Worker                     '           super().__setattr__(attr, value)\n'
847*cda5da8dSAndroid Build Coastguard Worker                     '\n'
848*cda5da8dSAndroid Build Coastguard Worker                     '   sys.modules[__name__].__class__ = VerboseModule\n'
849*cda5da8dSAndroid Build Coastguard Worker                     '\n'
850*cda5da8dSAndroid Build Coastguard Worker                     'Note:\n'
851*cda5da8dSAndroid Build Coastguard Worker                     '\n'
852*cda5da8dSAndroid Build Coastguard Worker                     '  Defining module "__getattr__" and setting module '
853*cda5da8dSAndroid Build Coastguard Worker                     '"__class__" only\n'
854*cda5da8dSAndroid Build Coastguard Worker                     '  affect lookups made using the attribute access syntax '
855*cda5da8dSAndroid Build Coastguard Worker                     '– directly\n'
856*cda5da8dSAndroid Build Coastguard Worker                     '  accessing the module globals (whether by code within '
857*cda5da8dSAndroid Build Coastguard Worker                     'the module, or\n'
858*cda5da8dSAndroid Build Coastguard Worker                     '  via a reference to the module’s globals dictionary) is '
859*cda5da8dSAndroid Build Coastguard Worker                     'unaffected.\n'
860*cda5da8dSAndroid Build Coastguard Worker                     '\n'
861*cda5da8dSAndroid Build Coastguard Worker                     'Changed in version 3.5: "__class__" module attribute is '
862*cda5da8dSAndroid Build Coastguard Worker                     'now writable.\n'
863*cda5da8dSAndroid Build Coastguard Worker                     '\n'
864*cda5da8dSAndroid Build Coastguard Worker                     'New in version 3.7: "__getattr__" and "__dir__" module '
865*cda5da8dSAndroid Build Coastguard Worker                     'attributes.\n'
866*cda5da8dSAndroid Build Coastguard Worker                     '\n'
867*cda5da8dSAndroid Build Coastguard Worker                     'See also:\n'
868*cda5da8dSAndroid Build Coastguard Worker                     '\n'
869*cda5da8dSAndroid Build Coastguard Worker                     '  **PEP 562** - Module __getattr__ and __dir__\n'
870*cda5da8dSAndroid Build Coastguard Worker                     '     Describes the "__getattr__" and "__dir__" functions '
871*cda5da8dSAndroid Build Coastguard Worker                     'on modules.\n'
872*cda5da8dSAndroid Build Coastguard Worker                     '\n'
873*cda5da8dSAndroid Build Coastguard Worker                     '\n'
874*cda5da8dSAndroid Build Coastguard Worker                     'Implementing Descriptors\n'
875*cda5da8dSAndroid Build Coastguard Worker                     '========================\n'
876*cda5da8dSAndroid Build Coastguard Worker                     '\n'
877*cda5da8dSAndroid Build Coastguard Worker                     'The following methods only apply when an instance of the '
878*cda5da8dSAndroid Build Coastguard Worker                     'class\n'
879*cda5da8dSAndroid Build Coastguard Worker                     'containing the method (a so-called *descriptor* class) '
880*cda5da8dSAndroid Build Coastguard Worker                     'appears in an\n'
881*cda5da8dSAndroid Build Coastguard Worker                     '*owner* class (the descriptor must be in either the '
882*cda5da8dSAndroid Build Coastguard Worker                     'owner’s class\n'
883*cda5da8dSAndroid Build Coastguard Worker                     'dictionary or in the class dictionary for one of its '
884*cda5da8dSAndroid Build Coastguard Worker                     'parents).  In the\n'
885*cda5da8dSAndroid Build Coastguard Worker                     'examples below, “the attribute” refers to the attribute '
886*cda5da8dSAndroid Build Coastguard Worker                     'whose name is\n'
887*cda5da8dSAndroid Build Coastguard Worker                     'the key of the property in the owner class’ "__dict__".\n'
888*cda5da8dSAndroid Build Coastguard Worker                     '\n'
889*cda5da8dSAndroid Build Coastguard Worker                     'object.__get__(self, instance, owner=None)\n'
890*cda5da8dSAndroid Build Coastguard Worker                     '\n'
891*cda5da8dSAndroid Build Coastguard Worker                     '   Called to get the attribute of the owner class (class '
892*cda5da8dSAndroid Build Coastguard Worker                     'attribute\n'
893*cda5da8dSAndroid Build Coastguard Worker                     '   access) or of an instance of that class (instance '
894*cda5da8dSAndroid Build Coastguard Worker                     'attribute\n'
895*cda5da8dSAndroid Build Coastguard Worker                     '   access). The optional *owner* argument is the owner '
896*cda5da8dSAndroid Build Coastguard Worker                     'class, while\n'
897*cda5da8dSAndroid Build Coastguard Worker                     '   *instance* is the instance that the attribute was '
898*cda5da8dSAndroid Build Coastguard Worker                     'accessed through,\n'
899*cda5da8dSAndroid Build Coastguard Worker                     '   or "None" when the attribute is accessed through the '
900*cda5da8dSAndroid Build Coastguard Worker                     '*owner*.\n'
901*cda5da8dSAndroid Build Coastguard Worker                     '\n'
902*cda5da8dSAndroid Build Coastguard Worker                     '   This method should return the computed attribute '
903*cda5da8dSAndroid Build Coastguard Worker                     'value or raise an\n'
904*cda5da8dSAndroid Build Coastguard Worker                     '   "AttributeError" exception.\n'
905*cda5da8dSAndroid Build Coastguard Worker                     '\n'
906*cda5da8dSAndroid Build Coastguard Worker                     '   **PEP 252** specifies that "__get__()" is callable '
907*cda5da8dSAndroid Build Coastguard Worker                     'with one or two\n'
908*cda5da8dSAndroid Build Coastguard Worker                     '   arguments.  Python’s own built-in descriptors support '
909*cda5da8dSAndroid Build Coastguard Worker                     'this\n'
910*cda5da8dSAndroid Build Coastguard Worker                     '   specification; however, it is likely that some '
911*cda5da8dSAndroid Build Coastguard Worker                     'third-party tools\n'
912*cda5da8dSAndroid Build Coastguard Worker                     '   have descriptors that require both arguments.  '
913*cda5da8dSAndroid Build Coastguard Worker                     'Python’s own\n'
914*cda5da8dSAndroid Build Coastguard Worker                     '   "__getattribute__()" implementation always passes in '
915*cda5da8dSAndroid Build Coastguard Worker                     'both arguments\n'
916*cda5da8dSAndroid Build Coastguard Worker                     '   whether they are required or not.\n'
917*cda5da8dSAndroid Build Coastguard Worker                     '\n'
918*cda5da8dSAndroid Build Coastguard Worker                     'object.__set__(self, instance, value)\n'
919*cda5da8dSAndroid Build Coastguard Worker                     '\n'
920*cda5da8dSAndroid Build Coastguard Worker                     '   Called to set the attribute on an instance *instance* '
921*cda5da8dSAndroid Build Coastguard Worker                     'of the owner\n'
922*cda5da8dSAndroid Build Coastguard Worker                     '   class to a new value, *value*.\n'
923*cda5da8dSAndroid Build Coastguard Worker                     '\n'
924*cda5da8dSAndroid Build Coastguard Worker                     '   Note, adding "__set__()" or "__delete__()" changes '
925*cda5da8dSAndroid Build Coastguard Worker                     'the kind of\n'
926*cda5da8dSAndroid Build Coastguard Worker                     '   descriptor to a “data descriptor”.  See Invoking '
927*cda5da8dSAndroid Build Coastguard Worker                     'Descriptors for\n'
928*cda5da8dSAndroid Build Coastguard Worker                     '   more details.\n'
929*cda5da8dSAndroid Build Coastguard Worker                     '\n'
930*cda5da8dSAndroid Build Coastguard Worker                     'object.__delete__(self, instance)\n'
931*cda5da8dSAndroid Build Coastguard Worker                     '\n'
932*cda5da8dSAndroid Build Coastguard Worker                     '   Called to delete the attribute on an instance '
933*cda5da8dSAndroid Build Coastguard Worker                     '*instance* of the\n'
934*cda5da8dSAndroid Build Coastguard Worker                     '   owner class.\n'
935*cda5da8dSAndroid Build Coastguard Worker                     '\n'
936*cda5da8dSAndroid Build Coastguard Worker                     'The attribute "__objclass__" is interpreted by the '
937*cda5da8dSAndroid Build Coastguard Worker                     '"inspect" module as\n'
938*cda5da8dSAndroid Build Coastguard Worker                     'specifying the class where this object was defined '
939*cda5da8dSAndroid Build Coastguard Worker                     '(setting this\n'
940*cda5da8dSAndroid Build Coastguard Worker                     'appropriately can assist in runtime introspection of '
941*cda5da8dSAndroid Build Coastguard Worker                     'dynamic class\n'
942*cda5da8dSAndroid Build Coastguard Worker                     'attributes). For callables, it may indicate that an '
943*cda5da8dSAndroid Build Coastguard Worker                     'instance of the\n'
944*cda5da8dSAndroid Build Coastguard Worker                     'given type (or a subclass) is expected or required as '
945*cda5da8dSAndroid Build Coastguard Worker                     'the first\n'
946*cda5da8dSAndroid Build Coastguard Worker                     'positional argument (for example, CPython sets this '
947*cda5da8dSAndroid Build Coastguard Worker                     'attribute for\n'
948*cda5da8dSAndroid Build Coastguard Worker                     'unbound methods that are implemented in C).\n'
949*cda5da8dSAndroid Build Coastguard Worker                     '\n'
950*cda5da8dSAndroid Build Coastguard Worker                     '\n'
951*cda5da8dSAndroid Build Coastguard Worker                     'Invoking Descriptors\n'
952*cda5da8dSAndroid Build Coastguard Worker                     '====================\n'
953*cda5da8dSAndroid Build Coastguard Worker                     '\n'
954*cda5da8dSAndroid Build Coastguard Worker                     'In general, a descriptor is an object attribute with '
955*cda5da8dSAndroid Build Coastguard Worker                     '“binding\n'
956*cda5da8dSAndroid Build Coastguard Worker                     'behavior”, one whose attribute access has been '
957*cda5da8dSAndroid Build Coastguard Worker                     'overridden by methods\n'
958*cda5da8dSAndroid Build Coastguard Worker                     'in the descriptor protocol:  "__get__()", "__set__()", '
959*cda5da8dSAndroid Build Coastguard Worker                     'and\n'
960*cda5da8dSAndroid Build Coastguard Worker                     '"__delete__()". If any of those methods are defined for '
961*cda5da8dSAndroid Build Coastguard Worker                     'an object, it\n'
962*cda5da8dSAndroid Build Coastguard Worker                     'is said to be a descriptor.\n'
963*cda5da8dSAndroid Build Coastguard Worker                     '\n'
964*cda5da8dSAndroid Build Coastguard Worker                     'The default behavior for attribute access is to get, '
965*cda5da8dSAndroid Build Coastguard Worker                     'set, or delete\n'
966*cda5da8dSAndroid Build Coastguard Worker                     'the attribute from an object’s dictionary. For instance, '
967*cda5da8dSAndroid Build Coastguard Worker                     '"a.x" has a\n'
968*cda5da8dSAndroid Build Coastguard Worker                     'lookup chain starting with "a.__dict__[\'x\']", then\n'
969*cda5da8dSAndroid Build Coastguard Worker                     '"type(a).__dict__[\'x\']", and continuing through the '
970*cda5da8dSAndroid Build Coastguard Worker                     'base classes of\n'
971*cda5da8dSAndroid Build Coastguard Worker                     '"type(a)" excluding metaclasses.\n'
972*cda5da8dSAndroid Build Coastguard Worker                     '\n'
973*cda5da8dSAndroid Build Coastguard Worker                     'However, if the looked-up value is an object defining '
974*cda5da8dSAndroid Build Coastguard Worker                     'one of the\n'
975*cda5da8dSAndroid Build Coastguard Worker                     'descriptor methods, then Python may override the default '
976*cda5da8dSAndroid Build Coastguard Worker                     'behavior and\n'
977*cda5da8dSAndroid Build Coastguard Worker                     'invoke the descriptor method instead.  Where this occurs '
978*cda5da8dSAndroid Build Coastguard Worker                     'in the\n'
979*cda5da8dSAndroid Build Coastguard Worker                     'precedence chain depends on which descriptor methods '
980*cda5da8dSAndroid Build Coastguard Worker                     'were defined and\n'
981*cda5da8dSAndroid Build Coastguard Worker                     'how they were called.\n'
982*cda5da8dSAndroid Build Coastguard Worker                     '\n'
983*cda5da8dSAndroid Build Coastguard Worker                     'The starting point for descriptor invocation is a '
984*cda5da8dSAndroid Build Coastguard Worker                     'binding, "a.x". How\n'
985*cda5da8dSAndroid Build Coastguard Worker                     'the arguments are assembled depends on "a":\n'
986*cda5da8dSAndroid Build Coastguard Worker                     '\n'
987*cda5da8dSAndroid Build Coastguard Worker                     'Direct Call\n'
988*cda5da8dSAndroid Build Coastguard Worker                     '   The simplest and least common call is when user code '
989*cda5da8dSAndroid Build Coastguard Worker                     'directly\n'
990*cda5da8dSAndroid Build Coastguard Worker                     '   invokes a descriptor method:    "x.__get__(a)".\n'
991*cda5da8dSAndroid Build Coastguard Worker                     '\n'
992*cda5da8dSAndroid Build Coastguard Worker                     'Instance Binding\n'
993*cda5da8dSAndroid Build Coastguard Worker                     '   If binding to an object instance, "a.x" is '
994*cda5da8dSAndroid Build Coastguard Worker                     'transformed into the\n'
995*cda5da8dSAndroid Build Coastguard Worker                     '   call: "type(a).__dict__[\'x\'].__get__(a, type(a))".\n'
996*cda5da8dSAndroid Build Coastguard Worker                     '\n'
997*cda5da8dSAndroid Build Coastguard Worker                     'Class Binding\n'
998*cda5da8dSAndroid Build Coastguard Worker                     '   If binding to a class, "A.x" is transformed into the '
999*cda5da8dSAndroid Build Coastguard Worker                     'call:\n'
1000*cda5da8dSAndroid Build Coastguard Worker                     '   "A.__dict__[\'x\'].__get__(None, A)".\n'
1001*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1002*cda5da8dSAndroid Build Coastguard Worker                     'Super Binding\n'
1003*cda5da8dSAndroid Build Coastguard Worker                     '   A dotted lookup such as "super(A, a).x" searches\n'
1004*cda5da8dSAndroid Build Coastguard Worker                     '   "a.__class__.__mro__" for a base class "B" following '
1005*cda5da8dSAndroid Build Coastguard Worker                     '"A" and then\n'
1006*cda5da8dSAndroid Build Coastguard Worker                     '   returns "B.__dict__[\'x\'].__get__(a, A)".  If not a '
1007*cda5da8dSAndroid Build Coastguard Worker                     'descriptor, "x"\n'
1008*cda5da8dSAndroid Build Coastguard Worker                     '   is returned unchanged.\n'
1009*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1010*cda5da8dSAndroid Build Coastguard Worker                     'For instance bindings, the precedence of descriptor '
1011*cda5da8dSAndroid Build Coastguard Worker                     'invocation depends\n'
1012*cda5da8dSAndroid Build Coastguard Worker                     'on which descriptor methods are defined.  A descriptor '
1013*cda5da8dSAndroid Build Coastguard Worker                     'can define any\n'
1014*cda5da8dSAndroid Build Coastguard Worker                     'combination of "__get__()", "__set__()" and '
1015*cda5da8dSAndroid Build Coastguard Worker                     '"__delete__()".  If it\n'
1016*cda5da8dSAndroid Build Coastguard Worker                     'does not define "__get__()", then accessing the '
1017*cda5da8dSAndroid Build Coastguard Worker                     'attribute will return\n'
1018*cda5da8dSAndroid Build Coastguard Worker                     'the descriptor object itself unless there is a value in '
1019*cda5da8dSAndroid Build Coastguard Worker                     'the object’s\n'
1020*cda5da8dSAndroid Build Coastguard Worker                     'instance dictionary.  If the descriptor defines '
1021*cda5da8dSAndroid Build Coastguard Worker                     '"__set__()" and/or\n'
1022*cda5da8dSAndroid Build Coastguard Worker                     '"__delete__()", it is a data descriptor; if it defines '
1023*cda5da8dSAndroid Build Coastguard Worker                     'neither, it is\n'
1024*cda5da8dSAndroid Build Coastguard Worker                     'a non-data descriptor.  Normally, data descriptors '
1025*cda5da8dSAndroid Build Coastguard Worker                     'define both\n'
1026*cda5da8dSAndroid Build Coastguard Worker                     '"__get__()" and "__set__()", while non-data descriptors '
1027*cda5da8dSAndroid Build Coastguard Worker                     'have just the\n'
1028*cda5da8dSAndroid Build Coastguard Worker                     '"__get__()" method.  Data descriptors with "__get__()" '
1029*cda5da8dSAndroid Build Coastguard Worker                     'and "__set__()"\n'
1030*cda5da8dSAndroid Build Coastguard Worker                     '(and/or "__delete__()") defined always override a '
1031*cda5da8dSAndroid Build Coastguard Worker                     'redefinition in an\n'
1032*cda5da8dSAndroid Build Coastguard Worker                     'instance dictionary.  In contrast, non-data descriptors '
1033*cda5da8dSAndroid Build Coastguard Worker                     'can be\n'
1034*cda5da8dSAndroid Build Coastguard Worker                     'overridden by instances.\n'
1035*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1036*cda5da8dSAndroid Build Coastguard Worker                     'Python methods (including those decorated with '
1037*cda5da8dSAndroid Build Coastguard Worker                     '"@staticmethod" and\n'
1038*cda5da8dSAndroid Build Coastguard Worker                     '"@classmethod") are implemented as non-data '
1039*cda5da8dSAndroid Build Coastguard Worker                     'descriptors.  Accordingly,\n'
1040*cda5da8dSAndroid Build Coastguard Worker                     'instances can redefine and override methods.  This '
1041*cda5da8dSAndroid Build Coastguard Worker                     'allows individual\n'
1042*cda5da8dSAndroid Build Coastguard Worker                     'instances to acquire behaviors that differ from other '
1043*cda5da8dSAndroid Build Coastguard Worker                     'instances of the\n'
1044*cda5da8dSAndroid Build Coastguard Worker                     'same class.\n'
1045*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1046*cda5da8dSAndroid Build Coastguard Worker                     'The "property()" function is implemented as a data '
1047*cda5da8dSAndroid Build Coastguard Worker                     'descriptor.\n'
1048*cda5da8dSAndroid Build Coastguard Worker                     'Accordingly, instances cannot override the behavior of a '
1049*cda5da8dSAndroid Build Coastguard Worker                     'property.\n'
1050*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1051*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1052*cda5da8dSAndroid Build Coastguard Worker                     '__slots__\n'
1053*cda5da8dSAndroid Build Coastguard Worker                     '=========\n'
1054*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1055*cda5da8dSAndroid Build Coastguard Worker                     '*__slots__* allow us to explicitly declare data members '
1056*cda5da8dSAndroid Build Coastguard Worker                     '(like\n'
1057*cda5da8dSAndroid Build Coastguard Worker                     'properties) and deny the creation of "__dict__" and '
1058*cda5da8dSAndroid Build Coastguard Worker                     '*__weakref__*\n'
1059*cda5da8dSAndroid Build Coastguard Worker                     '(unless explicitly declared in *__slots__* or available '
1060*cda5da8dSAndroid Build Coastguard Worker                     'in a parent.)\n'
1061*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1062*cda5da8dSAndroid Build Coastguard Worker                     'The space saved over using "__dict__" can be '
1063*cda5da8dSAndroid Build Coastguard Worker                     'significant. Attribute\n'
1064*cda5da8dSAndroid Build Coastguard Worker                     'lookup speed can be significantly improved as well.\n'
1065*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1066*cda5da8dSAndroid Build Coastguard Worker                     'object.__slots__\n'
1067*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1068*cda5da8dSAndroid Build Coastguard Worker                     '   This class variable can be assigned a string, '
1069*cda5da8dSAndroid Build Coastguard Worker                     'iterable, or sequence\n'
1070*cda5da8dSAndroid Build Coastguard Worker                     '   of strings with variable names used by instances.  '
1071*cda5da8dSAndroid Build Coastguard Worker                     '*__slots__*\n'
1072*cda5da8dSAndroid Build Coastguard Worker                     '   reserves space for the declared variables and '
1073*cda5da8dSAndroid Build Coastguard Worker                     'prevents the\n'
1074*cda5da8dSAndroid Build Coastguard Worker                     '   automatic creation of "__dict__" and *__weakref__* '
1075*cda5da8dSAndroid Build Coastguard Worker                     'for each\n'
1076*cda5da8dSAndroid Build Coastguard Worker                     '   instance.\n'
1077*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1078*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1079*cda5da8dSAndroid Build Coastguard Worker                     'Notes on using *__slots__*\n'
1080*cda5da8dSAndroid Build Coastguard Worker                     '--------------------------\n'
1081*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1082*cda5da8dSAndroid Build Coastguard Worker                     '* When inheriting from a class without *__slots__*, the '
1083*cda5da8dSAndroid Build Coastguard Worker                     '"__dict__" and\n'
1084*cda5da8dSAndroid Build Coastguard Worker                     '  *__weakref__* attribute of the instances will always '
1085*cda5da8dSAndroid Build Coastguard Worker                     'be accessible.\n'
1086*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1087*cda5da8dSAndroid Build Coastguard Worker                     '* Without a "__dict__" variable, instances cannot be '
1088*cda5da8dSAndroid Build Coastguard Worker                     'assigned new\n'
1089*cda5da8dSAndroid Build Coastguard Worker                     '  variables not listed in the *__slots__* definition.  '
1090*cda5da8dSAndroid Build Coastguard Worker                     'Attempts to\n'
1091*cda5da8dSAndroid Build Coastguard Worker                     '  assign to an unlisted variable name raises '
1092*cda5da8dSAndroid Build Coastguard Worker                     '"AttributeError". If\n'
1093*cda5da8dSAndroid Build Coastguard Worker                     '  dynamic assignment of new variables is desired, then '
1094*cda5da8dSAndroid Build Coastguard Worker                     'add\n'
1095*cda5da8dSAndroid Build Coastguard Worker                     '  "\'__dict__\'" to the sequence of strings in the '
1096*cda5da8dSAndroid Build Coastguard Worker                     '*__slots__*\n'
1097*cda5da8dSAndroid Build Coastguard Worker                     '  declaration.\n'
1098*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1099*cda5da8dSAndroid Build Coastguard Worker                     '* Without a *__weakref__* variable for each instance, '
1100*cda5da8dSAndroid Build Coastguard Worker                     'classes defining\n'
1101*cda5da8dSAndroid Build Coastguard Worker                     '  *__slots__* do not support "weak references" to its '
1102*cda5da8dSAndroid Build Coastguard Worker                     'instances. If\n'
1103*cda5da8dSAndroid Build Coastguard Worker                     '  weak reference support is needed, then add '
1104*cda5da8dSAndroid Build Coastguard Worker                     '"\'__weakref__\'" to the\n'
1105*cda5da8dSAndroid Build Coastguard Worker                     '  sequence of strings in the *__slots__* declaration.\n'
1106*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1107*cda5da8dSAndroid Build Coastguard Worker                     '* *__slots__* are implemented at the class level by '
1108*cda5da8dSAndroid Build Coastguard Worker                     'creating\n'
1109*cda5da8dSAndroid Build Coastguard Worker                     '  descriptors for each variable name.  As a result, '
1110*cda5da8dSAndroid Build Coastguard Worker                     'class attributes\n'
1111*cda5da8dSAndroid Build Coastguard Worker                     '  cannot be used to set default values for instance '
1112*cda5da8dSAndroid Build Coastguard Worker                     'variables defined\n'
1113*cda5da8dSAndroid Build Coastguard Worker                     '  by *__slots__*; otherwise, the class attribute would '
1114*cda5da8dSAndroid Build Coastguard Worker                     'overwrite the\n'
1115*cda5da8dSAndroid Build Coastguard Worker                     '  descriptor assignment.\n'
1116*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1117*cda5da8dSAndroid Build Coastguard Worker                     '* The action of a *__slots__* declaration is not limited '
1118*cda5da8dSAndroid Build Coastguard Worker                     'to the class\n'
1119*cda5da8dSAndroid Build Coastguard Worker                     '  where it is defined.  *__slots__* declared in parents '
1120*cda5da8dSAndroid Build Coastguard Worker                     'are available\n'
1121*cda5da8dSAndroid Build Coastguard Worker                     '  in child classes. However, child subclasses will get a '
1122*cda5da8dSAndroid Build Coastguard Worker                     '"__dict__"\n'
1123*cda5da8dSAndroid Build Coastguard Worker                     '  and *__weakref__* unless they also define *__slots__* '
1124*cda5da8dSAndroid Build Coastguard Worker                     '(which should\n'
1125*cda5da8dSAndroid Build Coastguard Worker                     '  only contain names of any *additional* slots).\n'
1126*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1127*cda5da8dSAndroid Build Coastguard Worker                     '* If a class defines a slot also defined in a base '
1128*cda5da8dSAndroid Build Coastguard Worker                     'class, the instance\n'
1129*cda5da8dSAndroid Build Coastguard Worker                     '  variable defined by the base class slot is '
1130*cda5da8dSAndroid Build Coastguard Worker                     'inaccessible (except by\n'
1131*cda5da8dSAndroid Build Coastguard Worker                     '  retrieving its descriptor directly from the base '
1132*cda5da8dSAndroid Build Coastguard Worker                     'class). This\n'
1133*cda5da8dSAndroid Build Coastguard Worker                     '  renders the meaning of the program undefined.  In the '
1134*cda5da8dSAndroid Build Coastguard Worker                     'future, a\n'
1135*cda5da8dSAndroid Build Coastguard Worker                     '  check may be added to prevent this.\n'
1136*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1137*cda5da8dSAndroid Build Coastguard Worker                     '* "TypeError" will be raised if nonempty *__slots__* are '
1138*cda5da8dSAndroid Build Coastguard Worker                     'defined for a\n'
1139*cda5da8dSAndroid Build Coastguard Worker                     '  class derived from a ""variable-length" built-in type" '
1140*cda5da8dSAndroid Build Coastguard Worker                     'such as\n'
1141*cda5da8dSAndroid Build Coastguard Worker                     '  "int", "bytes", and "tuple".\n'
1142*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1143*cda5da8dSAndroid Build Coastguard Worker                     '* Any non-string *iterable* may be assigned to '
1144*cda5da8dSAndroid Build Coastguard Worker                     '*__slots__*.\n'
1145*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1146*cda5da8dSAndroid Build Coastguard Worker                     '* If a "dictionary" is used to assign *__slots__*, the '
1147*cda5da8dSAndroid Build Coastguard Worker                     'dictionary keys\n'
1148*cda5da8dSAndroid Build Coastguard Worker                     '  will be used as the slot names. The values of the '
1149*cda5da8dSAndroid Build Coastguard Worker                     'dictionary can be\n'
1150*cda5da8dSAndroid Build Coastguard Worker                     '  used to provide per-attribute docstrings that will be '
1151*cda5da8dSAndroid Build Coastguard Worker                     'recognised by\n'
1152*cda5da8dSAndroid Build Coastguard Worker                     '  "inspect.getdoc()" and displayed in the output of '
1153*cda5da8dSAndroid Build Coastguard Worker                     '"help()".\n'
1154*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1155*cda5da8dSAndroid Build Coastguard Worker                     '* "__class__" assignment works only if both classes have '
1156*cda5da8dSAndroid Build Coastguard Worker                     'the same\n'
1157*cda5da8dSAndroid Build Coastguard Worker                     '  *__slots__*.\n'
1158*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1159*cda5da8dSAndroid Build Coastguard Worker                     '* Multiple inheritance with multiple slotted parent '
1160*cda5da8dSAndroid Build Coastguard Worker                     'classes can be\n'
1161*cda5da8dSAndroid Build Coastguard Worker                     '  used, but only one parent is allowed to have '
1162*cda5da8dSAndroid Build Coastguard Worker                     'attributes created by\n'
1163*cda5da8dSAndroid Build Coastguard Worker                     '  slots (the other bases must have empty slot layouts) - '
1164*cda5da8dSAndroid Build Coastguard Worker                     'violations\n'
1165*cda5da8dSAndroid Build Coastguard Worker                     '  raise "TypeError".\n'
1166*cda5da8dSAndroid Build Coastguard Worker                     '\n'
1167*cda5da8dSAndroid Build Coastguard Worker                     '* If an *iterator* is used for *__slots__* then a '
1168*cda5da8dSAndroid Build Coastguard Worker                     '*descriptor* is\n'
1169*cda5da8dSAndroid Build Coastguard Worker                     '  created for each of the iterator’s values. However, '
1170*cda5da8dSAndroid Build Coastguard Worker                     'the *__slots__*\n'
1171*cda5da8dSAndroid Build Coastguard Worker                     '  attribute will be an empty iterator.\n',
1172*cda5da8dSAndroid Build Coastguard Worker 'attribute-references': 'Attribute references\n'
1173*cda5da8dSAndroid Build Coastguard Worker                         '********************\n'
1174*cda5da8dSAndroid Build Coastguard Worker                         '\n'
1175*cda5da8dSAndroid Build Coastguard Worker                         'An attribute reference is a primary followed by a '
1176*cda5da8dSAndroid Build Coastguard Worker                         'period and a name:\n'
1177*cda5da8dSAndroid Build Coastguard Worker                         '\n'
1178*cda5da8dSAndroid Build Coastguard Worker                         '   attributeref ::= primary "." identifier\n'
1179*cda5da8dSAndroid Build Coastguard Worker                         '\n'
1180*cda5da8dSAndroid Build Coastguard Worker                         'The primary must evaluate to an object of a type '
1181*cda5da8dSAndroid Build Coastguard Worker                         'that supports\n'
1182*cda5da8dSAndroid Build Coastguard Worker                         'attribute references, which most objects do.  This '
1183*cda5da8dSAndroid Build Coastguard Worker                         'object is then\n'
1184*cda5da8dSAndroid Build Coastguard Worker                         'asked to produce the attribute whose name is the '
1185*cda5da8dSAndroid Build Coastguard Worker                         'identifier.  This\n'
1186*cda5da8dSAndroid Build Coastguard Worker                         'production can be customized by overriding the '
1187*cda5da8dSAndroid Build Coastguard Worker                         '"__getattr__()" method.\n'
1188*cda5da8dSAndroid Build Coastguard Worker                         'If this attribute is not available, the exception '
1189*cda5da8dSAndroid Build Coastguard Worker                         '"AttributeError" is\n'
1190*cda5da8dSAndroid Build Coastguard Worker                         'raised.  Otherwise, the type and value of the object '
1191*cda5da8dSAndroid Build Coastguard Worker                         'produced is\n'
1192*cda5da8dSAndroid Build Coastguard Worker                         'determined by the object.  Multiple evaluations of '
1193*cda5da8dSAndroid Build Coastguard Worker                         'the same attribute\n'
1194*cda5da8dSAndroid Build Coastguard Worker                         'reference may yield different objects.\n',
1195*cda5da8dSAndroid Build Coastguard Worker 'augassign': 'Augmented assignment statements\n'
1196*cda5da8dSAndroid Build Coastguard Worker              '*******************************\n'
1197*cda5da8dSAndroid Build Coastguard Worker              '\n'
1198*cda5da8dSAndroid Build Coastguard Worker              'Augmented assignment is the combination, in a single statement, '
1199*cda5da8dSAndroid Build Coastguard Worker              'of a\n'
1200*cda5da8dSAndroid Build Coastguard Worker              'binary operation and an assignment statement:\n'
1201*cda5da8dSAndroid Build Coastguard Worker              '\n'
1202*cda5da8dSAndroid Build Coastguard Worker              '   augmented_assignment_stmt ::= augtarget augop '
1203*cda5da8dSAndroid Build Coastguard Worker              '(expression_list | yield_expression)\n'
1204*cda5da8dSAndroid Build Coastguard Worker              '   augtarget                 ::= identifier | attributeref | '
1205*cda5da8dSAndroid Build Coastguard Worker              'subscription | slicing\n'
1206*cda5da8dSAndroid Build Coastguard Worker              '   augop                     ::= "+=" | "-=" | "*=" | "@=" | '
1207*cda5da8dSAndroid Build Coastguard Worker              '"/=" | "//=" | "%=" | "**="\n'
1208*cda5da8dSAndroid Build Coastguard Worker              '             | ">>=" | "<<=" | "&=" | "^=" | "|="\n'
1209*cda5da8dSAndroid Build Coastguard Worker              '\n'
1210*cda5da8dSAndroid Build Coastguard Worker              '(See section Primaries for the syntax definitions of the last '
1211*cda5da8dSAndroid Build Coastguard Worker              'three\n'
1212*cda5da8dSAndroid Build Coastguard Worker              'symbols.)\n'
1213*cda5da8dSAndroid Build Coastguard Worker              '\n'
1214*cda5da8dSAndroid Build Coastguard Worker              'An augmented assignment evaluates the target (which, unlike '
1215*cda5da8dSAndroid Build Coastguard Worker              'normal\n'
1216*cda5da8dSAndroid Build Coastguard Worker              'assignment statements, cannot be an unpacking) and the '
1217*cda5da8dSAndroid Build Coastguard Worker              'expression\n'
1218*cda5da8dSAndroid Build Coastguard Worker              'list, performs the binary operation specific to the type of '
1219*cda5da8dSAndroid Build Coastguard Worker              'assignment\n'
1220*cda5da8dSAndroid Build Coastguard Worker              'on the two operands, and assigns the result to the original '
1221*cda5da8dSAndroid Build Coastguard Worker              'target.\n'
1222*cda5da8dSAndroid Build Coastguard Worker              'The target is only evaluated once.\n'
1223*cda5da8dSAndroid Build Coastguard Worker              '\n'
1224*cda5da8dSAndroid Build Coastguard Worker              'An augmented assignment expression like "x += 1" can be '
1225*cda5da8dSAndroid Build Coastguard Worker              'rewritten as\n'
1226*cda5da8dSAndroid Build Coastguard Worker              '"x = x + 1" to achieve a similar, but not exactly equal effect. '
1227*cda5da8dSAndroid Build Coastguard Worker              'In the\n'
1228*cda5da8dSAndroid Build Coastguard Worker              'augmented version, "x" is only evaluated once. Also, when '
1229*cda5da8dSAndroid Build Coastguard Worker              'possible,\n'
1230*cda5da8dSAndroid Build Coastguard Worker              'the actual operation is performed *in-place*, meaning that '
1231*cda5da8dSAndroid Build Coastguard Worker              'rather than\n'
1232*cda5da8dSAndroid Build Coastguard Worker              'creating a new object and assigning that to the target, the old '
1233*cda5da8dSAndroid Build Coastguard Worker              'object\n'
1234*cda5da8dSAndroid Build Coastguard Worker              'is modified instead.\n'
1235*cda5da8dSAndroid Build Coastguard Worker              '\n'
1236*cda5da8dSAndroid Build Coastguard Worker              'Unlike normal assignments, augmented assignments evaluate the '
1237*cda5da8dSAndroid Build Coastguard Worker              'left-\n'
1238*cda5da8dSAndroid Build Coastguard Worker              'hand side *before* evaluating the right-hand side.  For '
1239*cda5da8dSAndroid Build Coastguard Worker              'example, "a[i]\n'
1240*cda5da8dSAndroid Build Coastguard Worker              '+= f(x)" first looks-up "a[i]", then it evaluates "f(x)" and '
1241*cda5da8dSAndroid Build Coastguard Worker              'performs\n'
1242*cda5da8dSAndroid Build Coastguard Worker              'the addition, and lastly, it writes the result back to "a[i]".\n'
1243*cda5da8dSAndroid Build Coastguard Worker              '\n'
1244*cda5da8dSAndroid Build Coastguard Worker              'With the exception of assigning to tuples and multiple targets '
1245*cda5da8dSAndroid Build Coastguard Worker              'in a\n'
1246*cda5da8dSAndroid Build Coastguard Worker              'single statement, the assignment done by augmented assignment\n'
1247*cda5da8dSAndroid Build Coastguard Worker              'statements is handled the same way as normal assignments. '
1248*cda5da8dSAndroid Build Coastguard Worker              'Similarly,\n'
1249*cda5da8dSAndroid Build Coastguard Worker              'with the exception of the possible *in-place* behavior, the '
1250*cda5da8dSAndroid Build Coastguard Worker              'binary\n'
1251*cda5da8dSAndroid Build Coastguard Worker              'operation performed by augmented assignment is the same as the '
1252*cda5da8dSAndroid Build Coastguard Worker              'normal\n'
1253*cda5da8dSAndroid Build Coastguard Worker              'binary operations.\n'
1254*cda5da8dSAndroid Build Coastguard Worker              '\n'
1255*cda5da8dSAndroid Build Coastguard Worker              'For targets which are attribute references, the same caveat '
1256*cda5da8dSAndroid Build Coastguard Worker              'about\n'
1257*cda5da8dSAndroid Build Coastguard Worker              'class and instance attributes applies as for regular '
1258*cda5da8dSAndroid Build Coastguard Worker              'assignments.\n',
1259*cda5da8dSAndroid Build Coastguard Worker 'await': 'Await expression\n'
1260*cda5da8dSAndroid Build Coastguard Worker          '****************\n'
1261*cda5da8dSAndroid Build Coastguard Worker          '\n'
1262*cda5da8dSAndroid Build Coastguard Worker          'Suspend the execution of *coroutine* on an *awaitable* object. Can\n'
1263*cda5da8dSAndroid Build Coastguard Worker          'only be used inside a *coroutine function*.\n'
1264*cda5da8dSAndroid Build Coastguard Worker          '\n'
1265*cda5da8dSAndroid Build Coastguard Worker          '   await_expr ::= "await" primary\n'
1266*cda5da8dSAndroid Build Coastguard Worker          '\n'
1267*cda5da8dSAndroid Build Coastguard Worker          'New in version 3.5.\n',
1268*cda5da8dSAndroid Build Coastguard Worker 'binary': 'Binary arithmetic operations\n'
1269*cda5da8dSAndroid Build Coastguard Worker           '****************************\n'
1270*cda5da8dSAndroid Build Coastguard Worker           '\n'
1271*cda5da8dSAndroid Build Coastguard Worker           'The binary arithmetic operations have the conventional priority\n'
1272*cda5da8dSAndroid Build Coastguard Worker           'levels.  Note that some of these operations also apply to certain '
1273*cda5da8dSAndroid Build Coastguard Worker           'non-\n'
1274*cda5da8dSAndroid Build Coastguard Worker           'numeric types.  Apart from the power operator, there are only two\n'
1275*cda5da8dSAndroid Build Coastguard Worker           'levels, one for multiplicative operators and one for additive\n'
1276*cda5da8dSAndroid Build Coastguard Worker           'operators:\n'
1277*cda5da8dSAndroid Build Coastguard Worker           '\n'
1278*cda5da8dSAndroid Build Coastguard Worker           '   m_expr ::= u_expr | m_expr "*" u_expr | m_expr "@" m_expr |\n'
1279*cda5da8dSAndroid Build Coastguard Worker           '              m_expr "//" u_expr | m_expr "/" u_expr |\n'
1280*cda5da8dSAndroid Build Coastguard Worker           '              m_expr "%" u_expr\n'
1281*cda5da8dSAndroid Build Coastguard Worker           '   a_expr ::= m_expr | a_expr "+" m_expr | a_expr "-" m_expr\n'
1282*cda5da8dSAndroid Build Coastguard Worker           '\n'
1283*cda5da8dSAndroid Build Coastguard Worker           'The "*" (multiplication) operator yields the product of its '
1284*cda5da8dSAndroid Build Coastguard Worker           'arguments.\n'
1285*cda5da8dSAndroid Build Coastguard Worker           'The arguments must either both be numbers, or one argument must be '
1286*cda5da8dSAndroid Build Coastguard Worker           'an\n'
1287*cda5da8dSAndroid Build Coastguard Worker           'integer and the other must be a sequence. In the former case, the\n'
1288*cda5da8dSAndroid Build Coastguard Worker           'numbers are converted to a common type and then multiplied '
1289*cda5da8dSAndroid Build Coastguard Worker           'together.\n'
1290*cda5da8dSAndroid Build Coastguard Worker           'In the latter case, sequence repetition is performed; a negative\n'
1291*cda5da8dSAndroid Build Coastguard Worker           'repetition factor yields an empty sequence.\n'
1292*cda5da8dSAndroid Build Coastguard Worker           '\n'
1293*cda5da8dSAndroid Build Coastguard Worker           'This operation can be customized using the special "__mul__()" '
1294*cda5da8dSAndroid Build Coastguard Worker           'and\n'
1295*cda5da8dSAndroid Build Coastguard Worker           '"__rmul__()" methods.\n'
1296*cda5da8dSAndroid Build Coastguard Worker           '\n'
1297*cda5da8dSAndroid Build Coastguard Worker           'The "@" (at) operator is intended to be used for matrix\n'
1298*cda5da8dSAndroid Build Coastguard Worker           'multiplication.  No builtin Python types implement this operator.\n'
1299*cda5da8dSAndroid Build Coastguard Worker           '\n'
1300*cda5da8dSAndroid Build Coastguard Worker           'New in version 3.5.\n'
1301*cda5da8dSAndroid Build Coastguard Worker           '\n'
1302*cda5da8dSAndroid Build Coastguard Worker           'The "/" (division) and "//" (floor division) operators yield the\n'
1303*cda5da8dSAndroid Build Coastguard Worker           'quotient of their arguments.  The numeric arguments are first\n'
1304*cda5da8dSAndroid Build Coastguard Worker           'converted to a common type. Division of integers yields a float, '
1305*cda5da8dSAndroid Build Coastguard Worker           'while\n'
1306*cda5da8dSAndroid Build Coastguard Worker           'floor division of integers results in an integer; the result is '
1307*cda5da8dSAndroid Build Coastguard Worker           'that\n'
1308*cda5da8dSAndroid Build Coastguard Worker           'of mathematical division with the ‘floor’ function applied to the\n'
1309*cda5da8dSAndroid Build Coastguard Worker           'result.  Division by zero raises the "ZeroDivisionError" '
1310*cda5da8dSAndroid Build Coastguard Worker           'exception.\n'
1311*cda5da8dSAndroid Build Coastguard Worker           '\n'
1312*cda5da8dSAndroid Build Coastguard Worker           'This operation can be customized using the special "__truediv__()" '
1313*cda5da8dSAndroid Build Coastguard Worker           'and\n'
1314*cda5da8dSAndroid Build Coastguard Worker           '"__floordiv__()" methods.\n'
1315*cda5da8dSAndroid Build Coastguard Worker           '\n'
1316*cda5da8dSAndroid Build Coastguard Worker           'The "%" (modulo) operator yields the remainder from the division '
1317*cda5da8dSAndroid Build Coastguard Worker           'of\n'
1318*cda5da8dSAndroid Build Coastguard Worker           'the first argument by the second.  The numeric arguments are '
1319*cda5da8dSAndroid Build Coastguard Worker           'first\n'
1320*cda5da8dSAndroid Build Coastguard Worker           'converted to a common type.  A zero right argument raises the\n'
1321*cda5da8dSAndroid Build Coastguard Worker           '"ZeroDivisionError" exception.  The arguments may be floating '
1322*cda5da8dSAndroid Build Coastguard Worker           'point\n'
1323*cda5da8dSAndroid Build Coastguard Worker           'numbers, e.g., "3.14%0.7" equals "0.34" (since "3.14" equals '
1324*cda5da8dSAndroid Build Coastguard Worker           '"4*0.7 +\n'
1325*cda5da8dSAndroid Build Coastguard Worker           '0.34".)  The modulo operator always yields a result with the same '
1326*cda5da8dSAndroid Build Coastguard Worker           'sign\n'
1327*cda5da8dSAndroid Build Coastguard Worker           'as its second operand (or zero); the absolute value of the result '
1328*cda5da8dSAndroid Build Coastguard Worker           'is\n'
1329*cda5da8dSAndroid Build Coastguard Worker           'strictly smaller than the absolute value of the second operand '
1330*cda5da8dSAndroid Build Coastguard Worker           '[1].\n'
1331*cda5da8dSAndroid Build Coastguard Worker           '\n'
1332*cda5da8dSAndroid Build Coastguard Worker           'The floor division and modulo operators are connected by the '
1333*cda5da8dSAndroid Build Coastguard Worker           'following\n'
1334*cda5da8dSAndroid Build Coastguard Worker           'identity: "x == (x//y)*y + (x%y)".  Floor division and modulo are '
1335*cda5da8dSAndroid Build Coastguard Worker           'also\n'
1336*cda5da8dSAndroid Build Coastguard Worker           'connected with the built-in function "divmod()": "divmod(x, y) ==\n'
1337*cda5da8dSAndroid Build Coastguard Worker           '(x//y, x%y)". [2].\n'
1338*cda5da8dSAndroid Build Coastguard Worker           '\n'
1339*cda5da8dSAndroid Build Coastguard Worker           'In addition to performing the modulo operation on numbers, the '
1340*cda5da8dSAndroid Build Coastguard Worker           '"%"\n'
1341*cda5da8dSAndroid Build Coastguard Worker           'operator is also overloaded by string objects to perform '
1342*cda5da8dSAndroid Build Coastguard Worker           'old-style\n'
1343*cda5da8dSAndroid Build Coastguard Worker           'string formatting (also known as interpolation).  The syntax for\n'
1344*cda5da8dSAndroid Build Coastguard Worker           'string formatting is described in the Python Library Reference,\n'
1345*cda5da8dSAndroid Build Coastguard Worker           'section printf-style String Formatting.\n'
1346*cda5da8dSAndroid Build Coastguard Worker           '\n'
1347*cda5da8dSAndroid Build Coastguard Worker           'The *modulo* operation can be customized using the special '
1348*cda5da8dSAndroid Build Coastguard Worker           '"__mod__()"\n'
1349*cda5da8dSAndroid Build Coastguard Worker           'method.\n'
1350*cda5da8dSAndroid Build Coastguard Worker           '\n'
1351*cda5da8dSAndroid Build Coastguard Worker           'The floor division operator, the modulo operator, and the '
1352*cda5da8dSAndroid Build Coastguard Worker           '"divmod()"\n'
1353*cda5da8dSAndroid Build Coastguard Worker           'function are not defined for complex numbers.  Instead, convert to '
1354*cda5da8dSAndroid Build Coastguard Worker           'a\n'
1355*cda5da8dSAndroid Build Coastguard Worker           'floating point number using the "abs()" function if appropriate.\n'
1356*cda5da8dSAndroid Build Coastguard Worker           '\n'
1357*cda5da8dSAndroid Build Coastguard Worker           'The "+" (addition) operator yields the sum of its arguments.  The\n'
1358*cda5da8dSAndroid Build Coastguard Worker           'arguments must either both be numbers or both be sequences of the '
1359*cda5da8dSAndroid Build Coastguard Worker           'same\n'
1360*cda5da8dSAndroid Build Coastguard Worker           'type.  In the former case, the numbers are converted to a common '
1361*cda5da8dSAndroid Build Coastguard Worker           'type\n'
1362*cda5da8dSAndroid Build Coastguard Worker           'and then added together. In the latter case, the sequences are\n'
1363*cda5da8dSAndroid Build Coastguard Worker           'concatenated.\n'
1364*cda5da8dSAndroid Build Coastguard Worker           '\n'
1365*cda5da8dSAndroid Build Coastguard Worker           'This operation can be customized using the special "__add__()" '
1366*cda5da8dSAndroid Build Coastguard Worker           'and\n'
1367*cda5da8dSAndroid Build Coastguard Worker           '"__radd__()" methods.\n'
1368*cda5da8dSAndroid Build Coastguard Worker           '\n'
1369*cda5da8dSAndroid Build Coastguard Worker           'The "-" (subtraction) operator yields the difference of its '
1370*cda5da8dSAndroid Build Coastguard Worker           'arguments.\n'
1371*cda5da8dSAndroid Build Coastguard Worker           'The numeric arguments are first converted to a common type.\n'
1372*cda5da8dSAndroid Build Coastguard Worker           '\n'
1373*cda5da8dSAndroid Build Coastguard Worker           'This operation can be customized using the special "__sub__()" '
1374*cda5da8dSAndroid Build Coastguard Worker           'method.\n',
1375*cda5da8dSAndroid Build Coastguard Worker 'bitwise': 'Binary bitwise operations\n'
1376*cda5da8dSAndroid Build Coastguard Worker            '*************************\n'
1377*cda5da8dSAndroid Build Coastguard Worker            '\n'
1378*cda5da8dSAndroid Build Coastguard Worker            'Each of the three bitwise operations has a different priority '
1379*cda5da8dSAndroid Build Coastguard Worker            'level:\n'
1380*cda5da8dSAndroid Build Coastguard Worker            '\n'
1381*cda5da8dSAndroid Build Coastguard Worker            '   and_expr ::= shift_expr | and_expr "&" shift_expr\n'
1382*cda5da8dSAndroid Build Coastguard Worker            '   xor_expr ::= and_expr | xor_expr "^" and_expr\n'
1383*cda5da8dSAndroid Build Coastguard Worker            '   or_expr  ::= xor_expr | or_expr "|" xor_expr\n'
1384*cda5da8dSAndroid Build Coastguard Worker            '\n'
1385*cda5da8dSAndroid Build Coastguard Worker            'The "&" operator yields the bitwise AND of its arguments, which '
1386*cda5da8dSAndroid Build Coastguard Worker            'must\n'
1387*cda5da8dSAndroid Build Coastguard Worker            'be integers or one of them must be a custom object overriding\n'
1388*cda5da8dSAndroid Build Coastguard Worker            '"__and__()" or "__rand__()" special methods.\n'
1389*cda5da8dSAndroid Build Coastguard Worker            '\n'
1390*cda5da8dSAndroid Build Coastguard Worker            'The "^" operator yields the bitwise XOR (exclusive OR) of its\n'
1391*cda5da8dSAndroid Build Coastguard Worker            'arguments, which must be integers or one of them must be a '
1392*cda5da8dSAndroid Build Coastguard Worker            'custom\n'
1393*cda5da8dSAndroid Build Coastguard Worker            'object overriding "__xor__()" or "__rxor__()" special methods.\n'
1394*cda5da8dSAndroid Build Coastguard Worker            '\n'
1395*cda5da8dSAndroid Build Coastguard Worker            'The "|" operator yields the bitwise (inclusive) OR of its '
1396*cda5da8dSAndroid Build Coastguard Worker            'arguments,\n'
1397*cda5da8dSAndroid Build Coastguard Worker            'which must be integers or one of them must be a custom object\n'
1398*cda5da8dSAndroid Build Coastguard Worker            'overriding "__or__()" or "__ror__()" special methods.\n',
1399*cda5da8dSAndroid Build Coastguard Worker 'bltin-code-objects': 'Code Objects\n'
1400*cda5da8dSAndroid Build Coastguard Worker                       '************\n'
1401*cda5da8dSAndroid Build Coastguard Worker                       '\n'
1402*cda5da8dSAndroid Build Coastguard Worker                       'Code objects are used by the implementation to '
1403*cda5da8dSAndroid Build Coastguard Worker                       'represent “pseudo-\n'
1404*cda5da8dSAndroid Build Coastguard Worker                       'compiled” executable Python code such as a function '
1405*cda5da8dSAndroid Build Coastguard Worker                       'body. They differ\n'
1406*cda5da8dSAndroid Build Coastguard Worker                       'from function objects because they don’t contain a '
1407*cda5da8dSAndroid Build Coastguard Worker                       'reference to their\n'
1408*cda5da8dSAndroid Build Coastguard Worker                       'global execution environment.  Code objects are '
1409*cda5da8dSAndroid Build Coastguard Worker                       'returned by the built-\n'
1410*cda5da8dSAndroid Build Coastguard Worker                       'in "compile()" function and can be extracted from '
1411*cda5da8dSAndroid Build Coastguard Worker                       'function objects\n'
1412*cda5da8dSAndroid Build Coastguard Worker                       'through their "__code__" attribute. See also the '
1413*cda5da8dSAndroid Build Coastguard Worker                       '"code" module.\n'
1414*cda5da8dSAndroid Build Coastguard Worker                       '\n'
1415*cda5da8dSAndroid Build Coastguard Worker                       'Accessing "__code__" raises an auditing event '
1416*cda5da8dSAndroid Build Coastguard Worker                       '"object.__getattr__"\n'
1417*cda5da8dSAndroid Build Coastguard Worker                       'with arguments "obj" and ""__code__"".\n'
1418*cda5da8dSAndroid Build Coastguard Worker                       '\n'
1419*cda5da8dSAndroid Build Coastguard Worker                       'A code object can be executed or evaluated by passing '
1420*cda5da8dSAndroid Build Coastguard Worker                       'it (instead of a\n'
1421*cda5da8dSAndroid Build Coastguard Worker                       'source string) to the "exec()" or "eval()"  built-in '
1422*cda5da8dSAndroid Build Coastguard Worker                       'functions.\n'
1423*cda5da8dSAndroid Build Coastguard Worker                       '\n'
1424*cda5da8dSAndroid Build Coastguard Worker                       'See The standard type hierarchy for more '
1425*cda5da8dSAndroid Build Coastguard Worker                       'information.\n',
1426*cda5da8dSAndroid Build Coastguard Worker 'bltin-ellipsis-object': 'The Ellipsis Object\n'
1427*cda5da8dSAndroid Build Coastguard Worker                          '*******************\n'
1428*cda5da8dSAndroid Build Coastguard Worker                          '\n'
1429*cda5da8dSAndroid Build Coastguard Worker                          'This object is commonly used by slicing (see '
1430*cda5da8dSAndroid Build Coastguard Worker                          'Slicings).  It supports\n'
1431*cda5da8dSAndroid Build Coastguard Worker                          'no special operations.  There is exactly one '
1432*cda5da8dSAndroid Build Coastguard Worker                          'ellipsis object, named\n'
1433*cda5da8dSAndroid Build Coastguard Worker                          '"Ellipsis" (a built-in name).  "type(Ellipsis)()" '
1434*cda5da8dSAndroid Build Coastguard Worker                          'produces the\n'
1435*cda5da8dSAndroid Build Coastguard Worker                          '"Ellipsis" singleton.\n'
1436*cda5da8dSAndroid Build Coastguard Worker                          '\n'
1437*cda5da8dSAndroid Build Coastguard Worker                          'It is written as "Ellipsis" or "...".\n',
1438*cda5da8dSAndroid Build Coastguard Worker 'bltin-null-object': 'The Null Object\n'
1439*cda5da8dSAndroid Build Coastguard Worker                      '***************\n'
1440*cda5da8dSAndroid Build Coastguard Worker                      '\n'
1441*cda5da8dSAndroid Build Coastguard Worker                      'This object is returned by functions that don’t '
1442*cda5da8dSAndroid Build Coastguard Worker                      'explicitly return a\n'
1443*cda5da8dSAndroid Build Coastguard Worker                      'value.  It supports no special operations.  There is '
1444*cda5da8dSAndroid Build Coastguard Worker                      'exactly one null\n'
1445*cda5da8dSAndroid Build Coastguard Worker                      'object, named "None" (a built-in name).  "type(None)()" '
1446*cda5da8dSAndroid Build Coastguard Worker                      'produces the\n'
1447*cda5da8dSAndroid Build Coastguard Worker                      'same singleton.\n'
1448*cda5da8dSAndroid Build Coastguard Worker                      '\n'
1449*cda5da8dSAndroid Build Coastguard Worker                      'It is written as "None".\n',
1450*cda5da8dSAndroid Build Coastguard Worker 'bltin-type-objects': 'Type Objects\n'
1451*cda5da8dSAndroid Build Coastguard Worker                       '************\n'
1452*cda5da8dSAndroid Build Coastguard Worker                       '\n'
1453*cda5da8dSAndroid Build Coastguard Worker                       'Type objects represent the various object types.  An '
1454*cda5da8dSAndroid Build Coastguard Worker                       'object’s type is\n'
1455*cda5da8dSAndroid Build Coastguard Worker                       'accessed by the built-in function "type()".  There are '
1456*cda5da8dSAndroid Build Coastguard Worker                       'no special\n'
1457*cda5da8dSAndroid Build Coastguard Worker                       'operations on types.  The standard module "types" '
1458*cda5da8dSAndroid Build Coastguard Worker                       'defines names for\n'
1459*cda5da8dSAndroid Build Coastguard Worker                       'all standard built-in types.\n'
1460*cda5da8dSAndroid Build Coastguard Worker                       '\n'
1461*cda5da8dSAndroid Build Coastguard Worker                       'Types are written like this: "<class \'int\'>".\n',
1462*cda5da8dSAndroid Build Coastguard Worker 'booleans': 'Boolean operations\n'
1463*cda5da8dSAndroid Build Coastguard Worker             '******************\n'
1464*cda5da8dSAndroid Build Coastguard Worker             '\n'
1465*cda5da8dSAndroid Build Coastguard Worker             '   or_test  ::= and_test | or_test "or" and_test\n'
1466*cda5da8dSAndroid Build Coastguard Worker             '   and_test ::= not_test | and_test "and" not_test\n'
1467*cda5da8dSAndroid Build Coastguard Worker             '   not_test ::= comparison | "not" not_test\n'
1468*cda5da8dSAndroid Build Coastguard Worker             '\n'
1469*cda5da8dSAndroid Build Coastguard Worker             'In the context of Boolean operations, and also when expressions '
1470*cda5da8dSAndroid Build Coastguard Worker             'are\n'
1471*cda5da8dSAndroid Build Coastguard Worker             'used by control flow statements, the following values are '
1472*cda5da8dSAndroid Build Coastguard Worker             'interpreted\n'
1473*cda5da8dSAndroid Build Coastguard Worker             'as false: "False", "None", numeric zero of all types, and empty\n'
1474*cda5da8dSAndroid Build Coastguard Worker             'strings and containers (including strings, tuples, lists,\n'
1475*cda5da8dSAndroid Build Coastguard Worker             'dictionaries, sets and frozensets).  All other values are '
1476*cda5da8dSAndroid Build Coastguard Worker             'interpreted\n'
1477*cda5da8dSAndroid Build Coastguard Worker             'as true.  User-defined objects can customize their truth value '
1478*cda5da8dSAndroid Build Coastguard Worker             'by\n'
1479*cda5da8dSAndroid Build Coastguard Worker             'providing a "__bool__()" method.\n'
1480*cda5da8dSAndroid Build Coastguard Worker             '\n'
1481*cda5da8dSAndroid Build Coastguard Worker             'The operator "not" yields "True" if its argument is false, '
1482*cda5da8dSAndroid Build Coastguard Worker             '"False"\n'
1483*cda5da8dSAndroid Build Coastguard Worker             'otherwise.\n'
1484*cda5da8dSAndroid Build Coastguard Worker             '\n'
1485*cda5da8dSAndroid Build Coastguard Worker             'The expression "x and y" first evaluates *x*; if *x* is false, '
1486*cda5da8dSAndroid Build Coastguard Worker             'its\n'
1487*cda5da8dSAndroid Build Coastguard Worker             'value is returned; otherwise, *y* is evaluated and the resulting '
1488*cda5da8dSAndroid Build Coastguard Worker             'value\n'
1489*cda5da8dSAndroid Build Coastguard Worker             'is returned.\n'
1490*cda5da8dSAndroid Build Coastguard Worker             '\n'
1491*cda5da8dSAndroid Build Coastguard Worker             'The expression "x or y" first evaluates *x*; if *x* is true, its '
1492*cda5da8dSAndroid Build Coastguard Worker             'value\n'
1493*cda5da8dSAndroid Build Coastguard Worker             'is returned; otherwise, *y* is evaluated and the resulting value '
1494*cda5da8dSAndroid Build Coastguard Worker             'is\n'
1495*cda5da8dSAndroid Build Coastguard Worker             'returned.\n'
1496*cda5da8dSAndroid Build Coastguard Worker             '\n'
1497*cda5da8dSAndroid Build Coastguard Worker             'Note that neither "and" nor "or" restrict the value and type '
1498*cda5da8dSAndroid Build Coastguard Worker             'they\n'
1499*cda5da8dSAndroid Build Coastguard Worker             'return to "False" and "True", but rather return the last '
1500*cda5da8dSAndroid Build Coastguard Worker             'evaluated\n'
1501*cda5da8dSAndroid Build Coastguard Worker             'argument.  This is sometimes useful, e.g., if "s" is a string '
1502*cda5da8dSAndroid Build Coastguard Worker             'that\n'
1503*cda5da8dSAndroid Build Coastguard Worker             'should be replaced by a default value if it is empty, the '
1504*cda5da8dSAndroid Build Coastguard Worker             'expression\n'
1505*cda5da8dSAndroid Build Coastguard Worker             '"s or \'foo\'" yields the desired value.  Because "not" has to '
1506*cda5da8dSAndroid Build Coastguard Worker             'create a\n'
1507*cda5da8dSAndroid Build Coastguard Worker             'new value, it returns a boolean value regardless of the type of '
1508*cda5da8dSAndroid Build Coastguard Worker             'its\n'
1509*cda5da8dSAndroid Build Coastguard Worker             'argument (for example, "not \'foo\'" produces "False" rather '
1510*cda5da8dSAndroid Build Coastguard Worker             'than "\'\'".)\n',
1511*cda5da8dSAndroid Build Coastguard Worker 'break': 'The "break" statement\n'
1512*cda5da8dSAndroid Build Coastguard Worker          '*********************\n'
1513*cda5da8dSAndroid Build Coastguard Worker          '\n'
1514*cda5da8dSAndroid Build Coastguard Worker          '   break_stmt ::= "break"\n'
1515*cda5da8dSAndroid Build Coastguard Worker          '\n'
1516*cda5da8dSAndroid Build Coastguard Worker          '"break" may only occur syntactically nested in a "for" or "while"\n'
1517*cda5da8dSAndroid Build Coastguard Worker          'loop, but not nested in a function or class definition within that\n'
1518*cda5da8dSAndroid Build Coastguard Worker          'loop.\n'
1519*cda5da8dSAndroid Build Coastguard Worker          '\n'
1520*cda5da8dSAndroid Build Coastguard Worker          'It terminates the nearest enclosing loop, skipping the optional '
1521*cda5da8dSAndroid Build Coastguard Worker          '"else"\n'
1522*cda5da8dSAndroid Build Coastguard Worker          'clause if the loop has one.\n'
1523*cda5da8dSAndroid Build Coastguard Worker          '\n'
1524*cda5da8dSAndroid Build Coastguard Worker          'If a "for" loop is terminated by "break", the loop control target\n'
1525*cda5da8dSAndroid Build Coastguard Worker          'keeps its current value.\n'
1526*cda5da8dSAndroid Build Coastguard Worker          '\n'
1527*cda5da8dSAndroid Build Coastguard Worker          'When "break" passes control out of a "try" statement with a '
1528*cda5da8dSAndroid Build Coastguard Worker          '"finally"\n'
1529*cda5da8dSAndroid Build Coastguard Worker          'clause, that "finally" clause is executed before really leaving '
1530*cda5da8dSAndroid Build Coastguard Worker          'the\n'
1531*cda5da8dSAndroid Build Coastguard Worker          'loop.\n',
1532*cda5da8dSAndroid Build Coastguard Worker 'callable-types': 'Emulating callable objects\n'
1533*cda5da8dSAndroid Build Coastguard Worker                   '**************************\n'
1534*cda5da8dSAndroid Build Coastguard Worker                   '\n'
1535*cda5da8dSAndroid Build Coastguard Worker                   'object.__call__(self[, args...])\n'
1536*cda5da8dSAndroid Build Coastguard Worker                   '\n'
1537*cda5da8dSAndroid Build Coastguard Worker                   '   Called when the instance is “called” as a function; if '
1538*cda5da8dSAndroid Build Coastguard Worker                   'this method\n'
1539*cda5da8dSAndroid Build Coastguard Worker                   '   is defined, "x(arg1, arg2, ...)" roughly translates to\n'
1540*cda5da8dSAndroid Build Coastguard Worker                   '   "type(x).__call__(x, arg1, ...)".\n',
1541*cda5da8dSAndroid Build Coastguard Worker 'calls': 'Calls\n'
1542*cda5da8dSAndroid Build Coastguard Worker          '*****\n'
1543*cda5da8dSAndroid Build Coastguard Worker          '\n'
1544*cda5da8dSAndroid Build Coastguard Worker          'A call calls a callable object (e.g., a *function*) with a '
1545*cda5da8dSAndroid Build Coastguard Worker          'possibly\n'
1546*cda5da8dSAndroid Build Coastguard Worker          'empty series of *arguments*:\n'
1547*cda5da8dSAndroid Build Coastguard Worker          '\n'
1548*cda5da8dSAndroid Build Coastguard Worker          '   call                 ::= primary "(" [argument_list [","] | '
1549*cda5da8dSAndroid Build Coastguard Worker          'comprehension] ")"\n'
1550*cda5da8dSAndroid Build Coastguard Worker          '   argument_list        ::= positional_arguments ["," '
1551*cda5da8dSAndroid Build Coastguard Worker          'starred_and_keywords]\n'
1552*cda5da8dSAndroid Build Coastguard Worker          '                       ["," keywords_arguments]\n'
1553*cda5da8dSAndroid Build Coastguard Worker          '                     | starred_and_keywords ["," '
1554*cda5da8dSAndroid Build Coastguard Worker          'keywords_arguments]\n'
1555*cda5da8dSAndroid Build Coastguard Worker          '                     | keywords_arguments\n'
1556*cda5da8dSAndroid Build Coastguard Worker          '   positional_arguments ::= positional_item ("," positional_item)*\n'
1557*cda5da8dSAndroid Build Coastguard Worker          '   positional_item      ::= assignment_expression | "*" expression\n'
1558*cda5da8dSAndroid Build Coastguard Worker          '   starred_and_keywords ::= ("*" expression | keyword_item)\n'
1559*cda5da8dSAndroid Build Coastguard Worker          '                            ("," "*" expression | "," '
1560*cda5da8dSAndroid Build Coastguard Worker          'keyword_item)*\n'
1561*cda5da8dSAndroid Build Coastguard Worker          '   keywords_arguments   ::= (keyword_item | "**" expression)\n'
1562*cda5da8dSAndroid Build Coastguard Worker          '                          ("," keyword_item | "," "**" '
1563*cda5da8dSAndroid Build Coastguard Worker          'expression)*\n'
1564*cda5da8dSAndroid Build Coastguard Worker          '   keyword_item         ::= identifier "=" expression\n'
1565*cda5da8dSAndroid Build Coastguard Worker          '\n'
1566*cda5da8dSAndroid Build Coastguard Worker          'An optional trailing comma may be present after the positional and\n'
1567*cda5da8dSAndroid Build Coastguard Worker          'keyword arguments but does not affect the semantics.\n'
1568*cda5da8dSAndroid Build Coastguard Worker          '\n'
1569*cda5da8dSAndroid Build Coastguard Worker          'The primary must evaluate to a callable object (user-defined\n'
1570*cda5da8dSAndroid Build Coastguard Worker          'functions, built-in functions, methods of built-in objects, class\n'
1571*cda5da8dSAndroid Build Coastguard Worker          'objects, methods of class instances, and all objects having a\n'
1572*cda5da8dSAndroid Build Coastguard Worker          '"__call__()" method are callable).  All argument expressions are\n'
1573*cda5da8dSAndroid Build Coastguard Worker          'evaluated before the call is attempted.  Please refer to section\n'
1574*cda5da8dSAndroid Build Coastguard Worker          'Function definitions for the syntax of formal *parameter* lists.\n'
1575*cda5da8dSAndroid Build Coastguard Worker          '\n'
1576*cda5da8dSAndroid Build Coastguard Worker          'If keyword arguments are present, they are first converted to\n'
1577*cda5da8dSAndroid Build Coastguard Worker          'positional arguments, as follows.  First, a list of unfilled slots '
1578*cda5da8dSAndroid Build Coastguard Worker          'is\n'
1579*cda5da8dSAndroid Build Coastguard Worker          'created for the formal parameters.  If there are N positional\n'
1580*cda5da8dSAndroid Build Coastguard Worker          'arguments, they are placed in the first N slots.  Next, for each\n'
1581*cda5da8dSAndroid Build Coastguard Worker          'keyword argument, the identifier is used to determine the\n'
1582*cda5da8dSAndroid Build Coastguard Worker          'corresponding slot (if the identifier is the same as the first '
1583*cda5da8dSAndroid Build Coastguard Worker          'formal\n'
1584*cda5da8dSAndroid Build Coastguard Worker          'parameter name, the first slot is used, and so on).  If the slot '
1585*cda5da8dSAndroid Build Coastguard Worker          'is\n'
1586*cda5da8dSAndroid Build Coastguard Worker          'already filled, a "TypeError" exception is raised. Otherwise, the\n'
1587*cda5da8dSAndroid Build Coastguard Worker          'argument is placed in the slot, filling it (even if the expression '
1588*cda5da8dSAndroid Build Coastguard Worker          'is\n'
1589*cda5da8dSAndroid Build Coastguard Worker          '"None", it fills the slot).  When all arguments have been '
1590*cda5da8dSAndroid Build Coastguard Worker          'processed,\n'
1591*cda5da8dSAndroid Build Coastguard Worker          'the slots that are still unfilled are filled with the '
1592*cda5da8dSAndroid Build Coastguard Worker          'corresponding\n'
1593*cda5da8dSAndroid Build Coastguard Worker          'default value from the function definition.  (Default values are\n'
1594*cda5da8dSAndroid Build Coastguard Worker          'calculated, once, when the function is defined; thus, a mutable '
1595*cda5da8dSAndroid Build Coastguard Worker          'object\n'
1596*cda5da8dSAndroid Build Coastguard Worker          'such as a list or dictionary used as default value will be shared '
1597*cda5da8dSAndroid Build Coastguard Worker          'by\n'
1598*cda5da8dSAndroid Build Coastguard Worker          'all calls that don’t specify an argument value for the '
1599*cda5da8dSAndroid Build Coastguard Worker          'corresponding\n'
1600*cda5da8dSAndroid Build Coastguard Worker          'slot; this should usually be avoided.)  If there are any unfilled\n'
1601*cda5da8dSAndroid Build Coastguard Worker          'slots for which no default value is specified, a "TypeError" '
1602*cda5da8dSAndroid Build Coastguard Worker          'exception\n'
1603*cda5da8dSAndroid Build Coastguard Worker          'is raised.  Otherwise, the list of filled slots is used as the\n'
1604*cda5da8dSAndroid Build Coastguard Worker          'argument list for the call.\n'
1605*cda5da8dSAndroid Build Coastguard Worker          '\n'
1606*cda5da8dSAndroid Build Coastguard Worker          '**CPython implementation detail:** An implementation may provide\n'
1607*cda5da8dSAndroid Build Coastguard Worker          'built-in functions whose positional parameters do not have names, '
1608*cda5da8dSAndroid Build Coastguard Worker          'even\n'
1609*cda5da8dSAndroid Build Coastguard Worker          'if they are ‘named’ for the purpose of documentation, and which\n'
1610*cda5da8dSAndroid Build Coastguard Worker          'therefore cannot be supplied by keyword.  In CPython, this is the '
1611*cda5da8dSAndroid Build Coastguard Worker          'case\n'
1612*cda5da8dSAndroid Build Coastguard Worker          'for functions implemented in C that use "PyArg_ParseTuple()" to '
1613*cda5da8dSAndroid Build Coastguard Worker          'parse\n'
1614*cda5da8dSAndroid Build Coastguard Worker          'their arguments.\n'
1615*cda5da8dSAndroid Build Coastguard Worker          '\n'
1616*cda5da8dSAndroid Build Coastguard Worker          'If there are more positional arguments than there are formal '
1617*cda5da8dSAndroid Build Coastguard Worker          'parameter\n'
1618*cda5da8dSAndroid Build Coastguard Worker          'slots, a "TypeError" exception is raised, unless a formal '
1619*cda5da8dSAndroid Build Coastguard Worker          'parameter\n'
1620*cda5da8dSAndroid Build Coastguard Worker          'using the syntax "*identifier" is present; in this case, that '
1621*cda5da8dSAndroid Build Coastguard Worker          'formal\n'
1622*cda5da8dSAndroid Build Coastguard Worker          'parameter receives a tuple containing the excess positional '
1623*cda5da8dSAndroid Build Coastguard Worker          'arguments\n'
1624*cda5da8dSAndroid Build Coastguard Worker          '(or an empty tuple if there were no excess positional arguments).\n'
1625*cda5da8dSAndroid Build Coastguard Worker          '\n'
1626*cda5da8dSAndroid Build Coastguard Worker          'If any keyword argument does not correspond to a formal parameter\n'
1627*cda5da8dSAndroid Build Coastguard Worker          'name, a "TypeError" exception is raised, unless a formal parameter\n'
1628*cda5da8dSAndroid Build Coastguard Worker          'using the syntax "**identifier" is present; in this case, that '
1629*cda5da8dSAndroid Build Coastguard Worker          'formal\n'
1630*cda5da8dSAndroid Build Coastguard Worker          'parameter receives a dictionary containing the excess keyword\n'
1631*cda5da8dSAndroid Build Coastguard Worker          'arguments (using the keywords as keys and the argument values as\n'
1632*cda5da8dSAndroid Build Coastguard Worker          'corresponding values), or a (new) empty dictionary if there were '
1633*cda5da8dSAndroid Build Coastguard Worker          'no\n'
1634*cda5da8dSAndroid Build Coastguard Worker          'excess keyword arguments.\n'
1635*cda5da8dSAndroid Build Coastguard Worker          '\n'
1636*cda5da8dSAndroid Build Coastguard Worker          'If the syntax "*expression" appears in the function call, '
1637*cda5da8dSAndroid Build Coastguard Worker          '"expression"\n'
1638*cda5da8dSAndroid Build Coastguard Worker          'must evaluate to an *iterable*.  Elements from these iterables are\n'
1639*cda5da8dSAndroid Build Coastguard Worker          'treated as if they were additional positional arguments.  For the '
1640*cda5da8dSAndroid Build Coastguard Worker          'call\n'
1641*cda5da8dSAndroid Build Coastguard Worker          '"f(x1, x2, *y, x3, x4)", if *y* evaluates to a sequence *y1*, …, '
1642*cda5da8dSAndroid Build Coastguard Worker          '*yM*,\n'
1643*cda5da8dSAndroid Build Coastguard Worker          'this is equivalent to a call with M+4 positional arguments *x1*, '
1644*cda5da8dSAndroid Build Coastguard Worker          '*x2*,\n'
1645*cda5da8dSAndroid Build Coastguard Worker          '*y1*, …, *yM*, *x3*, *x4*.\n'
1646*cda5da8dSAndroid Build Coastguard Worker          '\n'
1647*cda5da8dSAndroid Build Coastguard Worker          'A consequence of this is that although the "*expression" syntax '
1648*cda5da8dSAndroid Build Coastguard Worker          'may\n'
1649*cda5da8dSAndroid Build Coastguard Worker          'appear *after* explicit keyword arguments, it is processed '
1650*cda5da8dSAndroid Build Coastguard Worker          '*before*\n'
1651*cda5da8dSAndroid Build Coastguard Worker          'the keyword arguments (and any "**expression" arguments – see '
1652*cda5da8dSAndroid Build Coastguard Worker          'below).\n'
1653*cda5da8dSAndroid Build Coastguard Worker          'So:\n'
1654*cda5da8dSAndroid Build Coastguard Worker          '\n'
1655*cda5da8dSAndroid Build Coastguard Worker          '   >>> def f(a, b):\n'
1656*cda5da8dSAndroid Build Coastguard Worker          '   ...     print(a, b)\n'
1657*cda5da8dSAndroid Build Coastguard Worker          '   ...\n'
1658*cda5da8dSAndroid Build Coastguard Worker          '   >>> f(b=1, *(2,))\n'
1659*cda5da8dSAndroid Build Coastguard Worker          '   2 1\n'
1660*cda5da8dSAndroid Build Coastguard Worker          '   >>> f(a=1, *(2,))\n'
1661*cda5da8dSAndroid Build Coastguard Worker          '   Traceback (most recent call last):\n'
1662*cda5da8dSAndroid Build Coastguard Worker          '     File "<stdin>", line 1, in <module>\n'
1663*cda5da8dSAndroid Build Coastguard Worker          "   TypeError: f() got multiple values for keyword argument 'a'\n"
1664*cda5da8dSAndroid Build Coastguard Worker          '   >>> f(1, *(2,))\n'
1665*cda5da8dSAndroid Build Coastguard Worker          '   1 2\n'
1666*cda5da8dSAndroid Build Coastguard Worker          '\n'
1667*cda5da8dSAndroid Build Coastguard Worker          'It is unusual for both keyword arguments and the "*expression" '
1668*cda5da8dSAndroid Build Coastguard Worker          'syntax\n'
1669*cda5da8dSAndroid Build Coastguard Worker          'to be used in the same call, so in practice this confusion does '
1670*cda5da8dSAndroid Build Coastguard Worker          'not\n'
1671*cda5da8dSAndroid Build Coastguard Worker          'often arise.\n'
1672*cda5da8dSAndroid Build Coastguard Worker          '\n'
1673*cda5da8dSAndroid Build Coastguard Worker          'If the syntax "**expression" appears in the function call,\n'
1674*cda5da8dSAndroid Build Coastguard Worker          '"expression" must evaluate to a *mapping*, the contents of which '
1675*cda5da8dSAndroid Build Coastguard Worker          'are\n'
1676*cda5da8dSAndroid Build Coastguard Worker          'treated as additional keyword arguments. If a parameter matching a '
1677*cda5da8dSAndroid Build Coastguard Worker          'key\n'
1678*cda5da8dSAndroid Build Coastguard Worker          'has already been given a value (by an explicit keyword argument, '
1679*cda5da8dSAndroid Build Coastguard Worker          'or\n'
1680*cda5da8dSAndroid Build Coastguard Worker          'from another unpacking), a "TypeError" exception is raised.\n'
1681*cda5da8dSAndroid Build Coastguard Worker          '\n'
1682*cda5da8dSAndroid Build Coastguard Worker          'When "**expression" is used, each key in this mapping must be a\n'
1683*cda5da8dSAndroid Build Coastguard Worker          'string. Each value from the mapping is assigned to the first '
1684*cda5da8dSAndroid Build Coastguard Worker          'formal\n'
1685*cda5da8dSAndroid Build Coastguard Worker          'parameter eligible for keyword assignment whose name is equal to '
1686*cda5da8dSAndroid Build Coastguard Worker          'the\n'
1687*cda5da8dSAndroid Build Coastguard Worker          'key. A key need not be a Python identifier (e.g. ""max-temp °F"" '
1688*cda5da8dSAndroid Build Coastguard Worker          'is\n'
1689*cda5da8dSAndroid Build Coastguard Worker          'acceptable, although it will not match any formal parameter that '
1690*cda5da8dSAndroid Build Coastguard Worker          'could\n'
1691*cda5da8dSAndroid Build Coastguard Worker          'be declared). If there is no match to a formal parameter the '
1692*cda5da8dSAndroid Build Coastguard Worker          'key-value\n'
1693*cda5da8dSAndroid Build Coastguard Worker          'pair is collected by the "**" parameter, if there is one, or if '
1694*cda5da8dSAndroid Build Coastguard Worker          'there\n'
1695*cda5da8dSAndroid Build Coastguard Worker          'is not, a "TypeError" exception is raised.\n'
1696*cda5da8dSAndroid Build Coastguard Worker          '\n'
1697*cda5da8dSAndroid Build Coastguard Worker          'Formal parameters using the syntax "*identifier" or "**identifier"\n'
1698*cda5da8dSAndroid Build Coastguard Worker          'cannot be used as positional argument slots or as keyword argument\n'
1699*cda5da8dSAndroid Build Coastguard Worker          'names.\n'
1700*cda5da8dSAndroid Build Coastguard Worker          '\n'
1701*cda5da8dSAndroid Build Coastguard Worker          'Changed in version 3.5: Function calls accept any number of "*" '
1702*cda5da8dSAndroid Build Coastguard Worker          'and\n'
1703*cda5da8dSAndroid Build Coastguard Worker          '"**" unpackings, positional arguments may follow iterable '
1704*cda5da8dSAndroid Build Coastguard Worker          'unpackings\n'
1705*cda5da8dSAndroid Build Coastguard Worker          '("*"), and keyword arguments may follow dictionary unpackings '
1706*cda5da8dSAndroid Build Coastguard Worker          '("**").\n'
1707*cda5da8dSAndroid Build Coastguard Worker          'Originally proposed by **PEP 448**.\n'
1708*cda5da8dSAndroid Build Coastguard Worker          '\n'
1709*cda5da8dSAndroid Build Coastguard Worker          'A call always returns some value, possibly "None", unless it raises '
1710*cda5da8dSAndroid Build Coastguard Worker          'an\n'
1711*cda5da8dSAndroid Build Coastguard Worker          'exception.  How this value is computed depends on the type of the\n'
1712*cda5da8dSAndroid Build Coastguard Worker          'callable object.\n'
1713*cda5da8dSAndroid Build Coastguard Worker          '\n'
1714*cda5da8dSAndroid Build Coastguard Worker          'If it is—\n'
1715*cda5da8dSAndroid Build Coastguard Worker          '\n'
1716*cda5da8dSAndroid Build Coastguard Worker          'a user-defined function:\n'
1717*cda5da8dSAndroid Build Coastguard Worker          '   The code block for the function is executed, passing it the\n'
1718*cda5da8dSAndroid Build Coastguard Worker          '   argument list.  The first thing the code block will do is bind '
1719*cda5da8dSAndroid Build Coastguard Worker          'the\n'
1720*cda5da8dSAndroid Build Coastguard Worker          '   formal parameters to the arguments; this is described in '
1721*cda5da8dSAndroid Build Coastguard Worker          'section\n'
1722*cda5da8dSAndroid Build Coastguard Worker          '   Function definitions.  When the code block executes a "return"\n'
1723*cda5da8dSAndroid Build Coastguard Worker          '   statement, this specifies the return value of the function '
1724*cda5da8dSAndroid Build Coastguard Worker          'call.\n'
1725*cda5da8dSAndroid Build Coastguard Worker          '\n'
1726*cda5da8dSAndroid Build Coastguard Worker          'a built-in function or method:\n'
1727*cda5da8dSAndroid Build Coastguard Worker          '   The result is up to the interpreter; see Built-in Functions for '
1728*cda5da8dSAndroid Build Coastguard Worker          'the\n'
1729*cda5da8dSAndroid Build Coastguard Worker          '   descriptions of built-in functions and methods.\n'
1730*cda5da8dSAndroid Build Coastguard Worker          '\n'
1731*cda5da8dSAndroid Build Coastguard Worker          'a class object:\n'
1732*cda5da8dSAndroid Build Coastguard Worker          '   A new instance of that class is returned.\n'
1733*cda5da8dSAndroid Build Coastguard Worker          '\n'
1734*cda5da8dSAndroid Build Coastguard Worker          'a class instance method:\n'
1735*cda5da8dSAndroid Build Coastguard Worker          '   The corresponding user-defined function is called, with an '
1736*cda5da8dSAndroid Build Coastguard Worker          'argument\n'
1737*cda5da8dSAndroid Build Coastguard Worker          '   list that is one longer than the argument list of the call: the\n'
1738*cda5da8dSAndroid Build Coastguard Worker          '   instance becomes the first argument.\n'
1739*cda5da8dSAndroid Build Coastguard Worker          '\n'
1740*cda5da8dSAndroid Build Coastguard Worker          'a class instance:\n'
1741*cda5da8dSAndroid Build Coastguard Worker          '   The class must define a "__call__()" method; the effect is then '
1742*cda5da8dSAndroid Build Coastguard Worker          'the\n'
1743*cda5da8dSAndroid Build Coastguard Worker          '   same as if that method was called.\n',
1744*cda5da8dSAndroid Build Coastguard Worker 'class': 'Class definitions\n'
1745*cda5da8dSAndroid Build Coastguard Worker          '*****************\n'
1746*cda5da8dSAndroid Build Coastguard Worker          '\n'
1747*cda5da8dSAndroid Build Coastguard Worker          'A class definition defines a class object (see section The '
1748*cda5da8dSAndroid Build Coastguard Worker          'standard\n'
1749*cda5da8dSAndroid Build Coastguard Worker          'type hierarchy):\n'
1750*cda5da8dSAndroid Build Coastguard Worker          '\n'
1751*cda5da8dSAndroid Build Coastguard Worker          '   classdef    ::= [decorators] "class" classname [inheritance] ":" '
1752*cda5da8dSAndroid Build Coastguard Worker          'suite\n'
1753*cda5da8dSAndroid Build Coastguard Worker          '   inheritance ::= "(" [argument_list] ")"\n'
1754*cda5da8dSAndroid Build Coastguard Worker          '   classname   ::= identifier\n'
1755*cda5da8dSAndroid Build Coastguard Worker          '\n'
1756*cda5da8dSAndroid Build Coastguard Worker          'A class definition is an executable statement.  The inheritance '
1757*cda5da8dSAndroid Build Coastguard Worker          'list\n'
1758*cda5da8dSAndroid Build Coastguard Worker          'usually gives a list of base classes (see Metaclasses for more\n'
1759*cda5da8dSAndroid Build Coastguard Worker          'advanced uses), so each item in the list should evaluate to a '
1760*cda5da8dSAndroid Build Coastguard Worker          'class\n'
1761*cda5da8dSAndroid Build Coastguard Worker          'object which allows subclassing.  Classes without an inheritance '
1762*cda5da8dSAndroid Build Coastguard Worker          'list\n'
1763*cda5da8dSAndroid Build Coastguard Worker          'inherit, by default, from the base class "object"; hence,\n'
1764*cda5da8dSAndroid Build Coastguard Worker          '\n'
1765*cda5da8dSAndroid Build Coastguard Worker          '   class Foo:\n'
1766*cda5da8dSAndroid Build Coastguard Worker          '       pass\n'
1767*cda5da8dSAndroid Build Coastguard Worker          '\n'
1768*cda5da8dSAndroid Build Coastguard Worker          'is equivalent to\n'
1769*cda5da8dSAndroid Build Coastguard Worker          '\n'
1770*cda5da8dSAndroid Build Coastguard Worker          '   class Foo(object):\n'
1771*cda5da8dSAndroid Build Coastguard Worker          '       pass\n'
1772*cda5da8dSAndroid Build Coastguard Worker          '\n'
1773*cda5da8dSAndroid Build Coastguard Worker          'The class’s suite is then executed in a new execution frame (see\n'
1774*cda5da8dSAndroid Build Coastguard Worker          'Naming and binding), using a newly created local namespace and the\n'
1775*cda5da8dSAndroid Build Coastguard Worker          'original global namespace. (Usually, the suite contains mostly\n'
1776*cda5da8dSAndroid Build Coastguard Worker          'function definitions.)  When the class’s suite finishes execution, '
1777*cda5da8dSAndroid Build Coastguard Worker          'its\n'
1778*cda5da8dSAndroid Build Coastguard Worker          'execution frame is discarded but its local namespace is saved. [5] '
1779*cda5da8dSAndroid Build Coastguard Worker          'A\n'
1780*cda5da8dSAndroid Build Coastguard Worker          'class object is then created using the inheritance list for the '
1781*cda5da8dSAndroid Build Coastguard Worker          'base\n'
1782*cda5da8dSAndroid Build Coastguard Worker          'classes and the saved local namespace for the attribute '
1783*cda5da8dSAndroid Build Coastguard Worker          'dictionary.\n'
1784*cda5da8dSAndroid Build Coastguard Worker          'The class name is bound to this class object in the original local\n'
1785*cda5da8dSAndroid Build Coastguard Worker          'namespace.\n'
1786*cda5da8dSAndroid Build Coastguard Worker          '\n'
1787*cda5da8dSAndroid Build Coastguard Worker          'The order in which attributes are defined in the class body is\n'
1788*cda5da8dSAndroid Build Coastguard Worker          'preserved in the new class’s "__dict__".  Note that this is '
1789*cda5da8dSAndroid Build Coastguard Worker          'reliable\n'
1790*cda5da8dSAndroid Build Coastguard Worker          'only right after the class is created and only for classes that '
1791*cda5da8dSAndroid Build Coastguard Worker          'were\n'
1792*cda5da8dSAndroid Build Coastguard Worker          'defined using the definition syntax.\n'
1793*cda5da8dSAndroid Build Coastguard Worker          '\n'
1794*cda5da8dSAndroid Build Coastguard Worker          'Class creation can be customized heavily using metaclasses.\n'
1795*cda5da8dSAndroid Build Coastguard Worker          '\n'
1796*cda5da8dSAndroid Build Coastguard Worker          'Classes can also be decorated: just like when decorating '
1797*cda5da8dSAndroid Build Coastguard Worker          'functions,\n'
1798*cda5da8dSAndroid Build Coastguard Worker          '\n'
1799*cda5da8dSAndroid Build Coastguard Worker          '   @f1(arg)\n'
1800*cda5da8dSAndroid Build Coastguard Worker          '   @f2\n'
1801*cda5da8dSAndroid Build Coastguard Worker          '   class Foo: pass\n'
1802*cda5da8dSAndroid Build Coastguard Worker          '\n'
1803*cda5da8dSAndroid Build Coastguard Worker          'is roughly equivalent to\n'
1804*cda5da8dSAndroid Build Coastguard Worker          '\n'
1805*cda5da8dSAndroid Build Coastguard Worker          '   class Foo: pass\n'
1806*cda5da8dSAndroid Build Coastguard Worker          '   Foo = f1(arg)(f2(Foo))\n'
1807*cda5da8dSAndroid Build Coastguard Worker          '\n'
1808*cda5da8dSAndroid Build Coastguard Worker          'The evaluation rules for the decorator expressions are the same as '
1809*cda5da8dSAndroid Build Coastguard Worker          'for\n'
1810*cda5da8dSAndroid Build Coastguard Worker          'function decorators.  The result is then bound to the class name.\n'
1811*cda5da8dSAndroid Build Coastguard Worker          '\n'
1812*cda5da8dSAndroid Build Coastguard Worker          'Changed in version 3.9: Classes may be decorated with any valid\n'
1813*cda5da8dSAndroid Build Coastguard Worker          '"assignment_expression". Previously, the grammar was much more\n'
1814*cda5da8dSAndroid Build Coastguard Worker          'restrictive; see **PEP 614** for details.\n'
1815*cda5da8dSAndroid Build Coastguard Worker          '\n'
1816*cda5da8dSAndroid Build Coastguard Worker          '**Programmer’s note:** Variables defined in the class definition '
1817*cda5da8dSAndroid Build Coastguard Worker          'are\n'
1818*cda5da8dSAndroid Build Coastguard Worker          'class attributes; they are shared by instances.  Instance '
1819*cda5da8dSAndroid Build Coastguard Worker          'attributes\n'
1820*cda5da8dSAndroid Build Coastguard Worker          'can be set in a method with "self.name = value".  Both class and\n'
1821*cda5da8dSAndroid Build Coastguard Worker          'instance attributes are accessible through the notation '
1822*cda5da8dSAndroid Build Coastguard Worker          '“"self.name"”,\n'
1823*cda5da8dSAndroid Build Coastguard Worker          'and an instance attribute hides a class attribute with the same '
1824*cda5da8dSAndroid Build Coastguard Worker          'name\n'
1825*cda5da8dSAndroid Build Coastguard Worker          'when accessed in this way.  Class attributes can be used as '
1826*cda5da8dSAndroid Build Coastguard Worker          'defaults\n'
1827*cda5da8dSAndroid Build Coastguard Worker          'for instance attributes, but using mutable values there can lead '
1828*cda5da8dSAndroid Build Coastguard Worker          'to\n'
1829*cda5da8dSAndroid Build Coastguard Worker          'unexpected results.  Descriptors can be used to create instance\n'
1830*cda5da8dSAndroid Build Coastguard Worker          'variables with different implementation details.\n'
1831*cda5da8dSAndroid Build Coastguard Worker          '\n'
1832*cda5da8dSAndroid Build Coastguard Worker          'See also:\n'
1833*cda5da8dSAndroid Build Coastguard Worker          '\n'
1834*cda5da8dSAndroid Build Coastguard Worker          '  **PEP 3115** - Metaclasses in Python 3000\n'
1835*cda5da8dSAndroid Build Coastguard Worker          '     The proposal that changed the declaration of metaclasses to '
1836*cda5da8dSAndroid Build Coastguard Worker          'the\n'
1837*cda5da8dSAndroid Build Coastguard Worker          '     current syntax, and the semantics for how classes with\n'
1838*cda5da8dSAndroid Build Coastguard Worker          '     metaclasses are constructed.\n'
1839*cda5da8dSAndroid Build Coastguard Worker          '\n'
1840*cda5da8dSAndroid Build Coastguard Worker          '  **PEP 3129** - Class Decorators\n'
1841*cda5da8dSAndroid Build Coastguard Worker          '     The proposal that added class decorators.  Function and '
1842*cda5da8dSAndroid Build Coastguard Worker          'method\n'
1843*cda5da8dSAndroid Build Coastguard Worker          '     decorators were introduced in **PEP 318**.\n',
1844*cda5da8dSAndroid Build Coastguard Worker 'comparisons': 'Comparisons\n'
1845*cda5da8dSAndroid Build Coastguard Worker                '***********\n'
1846*cda5da8dSAndroid Build Coastguard Worker                '\n'
1847*cda5da8dSAndroid Build Coastguard Worker                'Unlike C, all comparison operations in Python have the same '
1848*cda5da8dSAndroid Build Coastguard Worker                'priority,\n'
1849*cda5da8dSAndroid Build Coastguard Worker                'which is lower than that of any arithmetic, shifting or '
1850*cda5da8dSAndroid Build Coastguard Worker                'bitwise\n'
1851*cda5da8dSAndroid Build Coastguard Worker                'operation.  Also unlike C, expressions like "a < b < c" have '
1852*cda5da8dSAndroid Build Coastguard Worker                'the\n'
1853*cda5da8dSAndroid Build Coastguard Worker                'interpretation that is conventional in mathematics:\n'
1854*cda5da8dSAndroid Build Coastguard Worker                '\n'
1855*cda5da8dSAndroid Build Coastguard Worker                '   comparison    ::= or_expr (comp_operator or_expr)*\n'
1856*cda5da8dSAndroid Build Coastguard Worker                '   comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!="\n'
1857*cda5da8dSAndroid Build Coastguard Worker                '                     | "is" ["not"] | ["not"] "in"\n'
1858*cda5da8dSAndroid Build Coastguard Worker                '\n'
1859*cda5da8dSAndroid Build Coastguard Worker                'Comparisons yield boolean values: "True" or "False". Custom '
1860*cda5da8dSAndroid Build Coastguard Worker                '*rich\n'
1861*cda5da8dSAndroid Build Coastguard Worker                'comparison methods* may return non-boolean values. In this '
1862*cda5da8dSAndroid Build Coastguard Worker                'case Python\n'
1863*cda5da8dSAndroid Build Coastguard Worker                'will call "bool()" on such value in boolean contexts.\n'
1864*cda5da8dSAndroid Build Coastguard Worker                '\n'
1865*cda5da8dSAndroid Build Coastguard Worker                'Comparisons can be chained arbitrarily, e.g., "x < y <= z" '
1866*cda5da8dSAndroid Build Coastguard Worker                'is\n'
1867*cda5da8dSAndroid Build Coastguard Worker                'equivalent to "x < y and y <= z", except that "y" is '
1868*cda5da8dSAndroid Build Coastguard Worker                'evaluated only\n'
1869*cda5da8dSAndroid Build Coastguard Worker                'once (but in both cases "z" is not evaluated at all when "x < '
1870*cda5da8dSAndroid Build Coastguard Worker                'y" is\n'
1871*cda5da8dSAndroid Build Coastguard Worker                'found to be false).\n'
1872*cda5da8dSAndroid Build Coastguard Worker                '\n'
1873*cda5da8dSAndroid Build Coastguard Worker                'Formally, if *a*, *b*, *c*, …, *y*, *z* are expressions and '
1874*cda5da8dSAndroid Build Coastguard Worker                '*op1*,\n'
1875*cda5da8dSAndroid Build Coastguard Worker                '*op2*, …, *opN* are comparison operators, then "a op1 b op2 c '
1876*cda5da8dSAndroid Build Coastguard Worker                '... y\n'
1877*cda5da8dSAndroid Build Coastguard Worker                'opN z" is equivalent to "a op1 b and b op2 c and ... y opN '
1878*cda5da8dSAndroid Build Coastguard Worker                'z", except\n'
1879*cda5da8dSAndroid Build Coastguard Worker                'that each expression is evaluated at most once.\n'
1880*cda5da8dSAndroid Build Coastguard Worker                '\n'
1881*cda5da8dSAndroid Build Coastguard Worker                'Note that "a op1 b op2 c" doesn’t imply any kind of '
1882*cda5da8dSAndroid Build Coastguard Worker                'comparison between\n'
1883*cda5da8dSAndroid Build Coastguard Worker                '*a* and *c*, so that, e.g., "x < y > z" is perfectly legal '
1884*cda5da8dSAndroid Build Coastguard Worker                '(though\n'
1885*cda5da8dSAndroid Build Coastguard Worker                'perhaps not pretty).\n'
1886*cda5da8dSAndroid Build Coastguard Worker                '\n'
1887*cda5da8dSAndroid Build Coastguard Worker                '\n'
1888*cda5da8dSAndroid Build Coastguard Worker                'Value comparisons\n'
1889*cda5da8dSAndroid Build Coastguard Worker                '=================\n'
1890*cda5da8dSAndroid Build Coastguard Worker                '\n'
1891*cda5da8dSAndroid Build Coastguard Worker                'The operators "<", ">", "==", ">=", "<=", and "!=" compare '
1892*cda5da8dSAndroid Build Coastguard Worker                'the values\n'
1893*cda5da8dSAndroid Build Coastguard Worker                'of two objects.  The objects do not need to have the same '
1894*cda5da8dSAndroid Build Coastguard Worker                'type.\n'
1895*cda5da8dSAndroid Build Coastguard Worker                '\n'
1896*cda5da8dSAndroid Build Coastguard Worker                'Chapter Objects, values and types states that objects have a '
1897*cda5da8dSAndroid Build Coastguard Worker                'value (in\n'
1898*cda5da8dSAndroid Build Coastguard Worker                'addition to type and identity).  The value of an object is a '
1899*cda5da8dSAndroid Build Coastguard Worker                'rather\n'
1900*cda5da8dSAndroid Build Coastguard Worker                'abstract notion in Python: For example, there is no canonical '
1901*cda5da8dSAndroid Build Coastguard Worker                'access\n'
1902*cda5da8dSAndroid Build Coastguard Worker                'method for an object’s value.  Also, there is no requirement '
1903*cda5da8dSAndroid Build Coastguard Worker                'that the\n'
1904*cda5da8dSAndroid Build Coastguard Worker                'value of an object should be constructed in a particular way, '
1905*cda5da8dSAndroid Build Coastguard Worker                'e.g.\n'
1906*cda5da8dSAndroid Build Coastguard Worker                'comprised of all its data attributes. Comparison operators '
1907*cda5da8dSAndroid Build Coastguard Worker                'implement a\n'
1908*cda5da8dSAndroid Build Coastguard Worker                'particular notion of what the value of an object is.  One can '
1909*cda5da8dSAndroid Build Coastguard Worker                'think of\n'
1910*cda5da8dSAndroid Build Coastguard Worker                'them as defining the value of an object indirectly, by means '
1911*cda5da8dSAndroid Build Coastguard Worker                'of their\n'
1912*cda5da8dSAndroid Build Coastguard Worker                'comparison implementation.\n'
1913*cda5da8dSAndroid Build Coastguard Worker                '\n'
1914*cda5da8dSAndroid Build Coastguard Worker                'Because all types are (direct or indirect) subtypes of '
1915*cda5da8dSAndroid Build Coastguard Worker                '"object", they\n'
1916*cda5da8dSAndroid Build Coastguard Worker                'inherit the default comparison behavior from "object".  Types '
1917*cda5da8dSAndroid Build Coastguard Worker                'can\n'
1918*cda5da8dSAndroid Build Coastguard Worker                'customize their comparison behavior by implementing *rich '
1919*cda5da8dSAndroid Build Coastguard Worker                'comparison\n'
1920*cda5da8dSAndroid Build Coastguard Worker                'methods* like "__lt__()", described in Basic customization.\n'
1921*cda5da8dSAndroid Build Coastguard Worker                '\n'
1922*cda5da8dSAndroid Build Coastguard Worker                'The default behavior for equality comparison ("==" and "!=") '
1923*cda5da8dSAndroid Build Coastguard Worker                'is based\n'
1924*cda5da8dSAndroid Build Coastguard Worker                'on the identity of the objects.  Hence, equality comparison '
1925*cda5da8dSAndroid Build Coastguard Worker                'of\n'
1926*cda5da8dSAndroid Build Coastguard Worker                'instances with the same identity results in equality, and '
1927*cda5da8dSAndroid Build Coastguard Worker                'equality\n'
1928*cda5da8dSAndroid Build Coastguard Worker                'comparison of instances with different identities results in\n'
1929*cda5da8dSAndroid Build Coastguard Worker                'inequality.  A motivation for this default behavior is the '
1930*cda5da8dSAndroid Build Coastguard Worker                'desire that\n'
1931*cda5da8dSAndroid Build Coastguard Worker                'all objects should be reflexive (i.e. "x is y" implies "x == '
1932*cda5da8dSAndroid Build Coastguard Worker                'y").\n'
1933*cda5da8dSAndroid Build Coastguard Worker                '\n'
1934*cda5da8dSAndroid Build Coastguard Worker                'A default order comparison ("<", ">", "<=", and ">=") is not '
1935*cda5da8dSAndroid Build Coastguard Worker                'provided;\n'
1936*cda5da8dSAndroid Build Coastguard Worker                'an attempt raises "TypeError".  A motivation for this default '
1937*cda5da8dSAndroid Build Coastguard Worker                'behavior\n'
1938*cda5da8dSAndroid Build Coastguard Worker                'is the lack of a similar invariant as for equality.\n'
1939*cda5da8dSAndroid Build Coastguard Worker                '\n'
1940*cda5da8dSAndroid Build Coastguard Worker                'The behavior of the default equality comparison, that '
1941*cda5da8dSAndroid Build Coastguard Worker                'instances with\n'
1942*cda5da8dSAndroid Build Coastguard Worker                'different identities are always unequal, may be in contrast '
1943*cda5da8dSAndroid Build Coastguard Worker                'to what\n'
1944*cda5da8dSAndroid Build Coastguard Worker                'types will need that have a sensible definition of object '
1945*cda5da8dSAndroid Build Coastguard Worker                'value and\n'
1946*cda5da8dSAndroid Build Coastguard Worker                'value-based equality.  Such types will need to customize '
1947*cda5da8dSAndroid Build Coastguard Worker                'their\n'
1948*cda5da8dSAndroid Build Coastguard Worker                'comparison behavior, and in fact, a number of built-in types '
1949*cda5da8dSAndroid Build Coastguard Worker                'have done\n'
1950*cda5da8dSAndroid Build Coastguard Worker                'that.\n'
1951*cda5da8dSAndroid Build Coastguard Worker                '\n'
1952*cda5da8dSAndroid Build Coastguard Worker                'The following list describes the comparison behavior of the '
1953*cda5da8dSAndroid Build Coastguard Worker                'most\n'
1954*cda5da8dSAndroid Build Coastguard Worker                'important built-in types.\n'
1955*cda5da8dSAndroid Build Coastguard Worker                '\n'
1956*cda5da8dSAndroid Build Coastguard Worker                '* Numbers of built-in numeric types (Numeric Types — int, '
1957*cda5da8dSAndroid Build Coastguard Worker                'float,\n'
1958*cda5da8dSAndroid Build Coastguard Worker                '  complex) and of the standard library types '
1959*cda5da8dSAndroid Build Coastguard Worker                '"fractions.Fraction" and\n'
1960*cda5da8dSAndroid Build Coastguard Worker                '  "decimal.Decimal" can be compared within and across their '
1961*cda5da8dSAndroid Build Coastguard Worker                'types,\n'
1962*cda5da8dSAndroid Build Coastguard Worker                '  with the restriction that complex numbers do not support '
1963*cda5da8dSAndroid Build Coastguard Worker                'order\n'
1964*cda5da8dSAndroid Build Coastguard Worker                '  comparison.  Within the limits of the types involved, they '
1965*cda5da8dSAndroid Build Coastguard Worker                'compare\n'
1966*cda5da8dSAndroid Build Coastguard Worker                '  mathematically (algorithmically) correct without loss of '
1967*cda5da8dSAndroid Build Coastguard Worker                'precision.\n'
1968*cda5da8dSAndroid Build Coastguard Worker                '\n'
1969*cda5da8dSAndroid Build Coastguard Worker                '  The not-a-number values "float(\'NaN\')" and '
1970*cda5da8dSAndroid Build Coastguard Worker                '"decimal.Decimal(\'NaN\')"\n'
1971*cda5da8dSAndroid Build Coastguard Worker                '  are special.  Any ordered comparison of a number to a '
1972*cda5da8dSAndroid Build Coastguard Worker                'not-a-number\n'
1973*cda5da8dSAndroid Build Coastguard Worker                '  value is false. A counter-intuitive implication is that '
1974*cda5da8dSAndroid Build Coastguard Worker                'not-a-number\n'
1975*cda5da8dSAndroid Build Coastguard Worker                '  values are not equal to themselves.  For example, if "x =\n'
1976*cda5da8dSAndroid Build Coastguard Worker                '  float(\'NaN\')", "3 < x", "x < 3" and "x == x" are all '
1977*cda5da8dSAndroid Build Coastguard Worker                'false, while "x\n'
1978*cda5da8dSAndroid Build Coastguard Worker                '  != x" is true.  This behavior is compliant with IEEE 754.\n'
1979*cda5da8dSAndroid Build Coastguard Worker                '\n'
1980*cda5da8dSAndroid Build Coastguard Worker                '* "None" and "NotImplemented" are singletons.  **PEP 8** '
1981*cda5da8dSAndroid Build Coastguard Worker                'advises that\n'
1982*cda5da8dSAndroid Build Coastguard Worker                '  comparisons for singletons should always be done with "is" '
1983*cda5da8dSAndroid Build Coastguard Worker                'or "is\n'
1984*cda5da8dSAndroid Build Coastguard Worker                '  not", never the equality operators.\n'
1985*cda5da8dSAndroid Build Coastguard Worker                '\n'
1986*cda5da8dSAndroid Build Coastguard Worker                '* Binary sequences (instances of "bytes" or "bytearray") can '
1987*cda5da8dSAndroid Build Coastguard Worker                'be\n'
1988*cda5da8dSAndroid Build Coastguard Worker                '  compared within and across their types.  They compare\n'
1989*cda5da8dSAndroid Build Coastguard Worker                '  lexicographically using the numeric values of their '
1990*cda5da8dSAndroid Build Coastguard Worker                'elements.\n'
1991*cda5da8dSAndroid Build Coastguard Worker                '\n'
1992*cda5da8dSAndroid Build Coastguard Worker                '* Strings (instances of "str") compare lexicographically '
1993*cda5da8dSAndroid Build Coastguard Worker                'using the\n'
1994*cda5da8dSAndroid Build Coastguard Worker                '  numerical Unicode code points (the result of the built-in '
1995*cda5da8dSAndroid Build Coastguard Worker                'function\n'
1996*cda5da8dSAndroid Build Coastguard Worker                '  "ord()") of their characters. [3]\n'
1997*cda5da8dSAndroid Build Coastguard Worker                '\n'
1998*cda5da8dSAndroid Build Coastguard Worker                '  Strings and binary sequences cannot be directly compared.\n'
1999*cda5da8dSAndroid Build Coastguard Worker                '\n'
2000*cda5da8dSAndroid Build Coastguard Worker                '* Sequences (instances of "tuple", "list", or "range") can be '
2001*cda5da8dSAndroid Build Coastguard Worker                'compared\n'
2002*cda5da8dSAndroid Build Coastguard Worker                '  only within each of their types, with the restriction that '
2003*cda5da8dSAndroid Build Coastguard Worker                'ranges do\n'
2004*cda5da8dSAndroid Build Coastguard Worker                '  not support order comparison.  Equality comparison across '
2005*cda5da8dSAndroid Build Coastguard Worker                'these\n'
2006*cda5da8dSAndroid Build Coastguard Worker                '  types results in inequality, and ordering comparison across '
2007*cda5da8dSAndroid Build Coastguard Worker                'these\n'
2008*cda5da8dSAndroid Build Coastguard Worker                '  types raises "TypeError".\n'
2009*cda5da8dSAndroid Build Coastguard Worker                '\n'
2010*cda5da8dSAndroid Build Coastguard Worker                '  Sequences compare lexicographically using comparison of\n'
2011*cda5da8dSAndroid Build Coastguard Worker                '  corresponding elements.  The built-in containers typically '
2012*cda5da8dSAndroid Build Coastguard Worker                'assume\n'
2013*cda5da8dSAndroid Build Coastguard Worker                '  identical objects are equal to themselves.  That lets them '
2014*cda5da8dSAndroid Build Coastguard Worker                'bypass\n'
2015*cda5da8dSAndroid Build Coastguard Worker                '  equality tests for identical objects to improve performance '
2016*cda5da8dSAndroid Build Coastguard Worker                'and to\n'
2017*cda5da8dSAndroid Build Coastguard Worker                '  maintain their internal invariants.\n'
2018*cda5da8dSAndroid Build Coastguard Worker                '\n'
2019*cda5da8dSAndroid Build Coastguard Worker                '  Lexicographical comparison between built-in collections '
2020*cda5da8dSAndroid Build Coastguard Worker                'works as\n'
2021*cda5da8dSAndroid Build Coastguard Worker                '  follows:\n'
2022*cda5da8dSAndroid Build Coastguard Worker                '\n'
2023*cda5da8dSAndroid Build Coastguard Worker                '  * For two collections to compare equal, they must be of the '
2024*cda5da8dSAndroid Build Coastguard Worker                'same\n'
2025*cda5da8dSAndroid Build Coastguard Worker                '    type, have the same length, and each pair of '
2026*cda5da8dSAndroid Build Coastguard Worker                'corresponding\n'
2027*cda5da8dSAndroid Build Coastguard Worker                '    elements must compare equal (for example, "[1,2] == '
2028*cda5da8dSAndroid Build Coastguard Worker                '(1,2)" is\n'
2029*cda5da8dSAndroid Build Coastguard Worker                '    false because the type is not the same).\n'
2030*cda5da8dSAndroid Build Coastguard Worker                '\n'
2031*cda5da8dSAndroid Build Coastguard Worker                '  * Collections that support order comparison are ordered the '
2032*cda5da8dSAndroid Build Coastguard Worker                'same as\n'
2033*cda5da8dSAndroid Build Coastguard Worker                '    their first unequal elements (for example, "[1,2,x] <= '
2034*cda5da8dSAndroid Build Coastguard Worker                '[1,2,y]"\n'
2035*cda5da8dSAndroid Build Coastguard Worker                '    has the same value as "x <= y").  If a corresponding '
2036*cda5da8dSAndroid Build Coastguard Worker                'element does\n'
2037*cda5da8dSAndroid Build Coastguard Worker                '    not exist, the shorter collection is ordered first (for '
2038*cda5da8dSAndroid Build Coastguard Worker                'example,\n'
2039*cda5da8dSAndroid Build Coastguard Worker                '    "[1,2] < [1,2,3]" is true).\n'
2040*cda5da8dSAndroid Build Coastguard Worker                '\n'
2041*cda5da8dSAndroid Build Coastguard Worker                '* Mappings (instances of "dict") compare equal if and only if '
2042*cda5da8dSAndroid Build Coastguard Worker                'they\n'
2043*cda5da8dSAndroid Build Coastguard Worker                '  have equal "(key, value)" pairs. Equality comparison of the '
2044*cda5da8dSAndroid Build Coastguard Worker                'keys and\n'
2045*cda5da8dSAndroid Build Coastguard Worker                '  values enforces reflexivity.\n'
2046*cda5da8dSAndroid Build Coastguard Worker                '\n'
2047*cda5da8dSAndroid Build Coastguard Worker                '  Order comparisons ("<", ">", "<=", and ">=") raise '
2048*cda5da8dSAndroid Build Coastguard Worker                '"TypeError".\n'
2049*cda5da8dSAndroid Build Coastguard Worker                '\n'
2050*cda5da8dSAndroid Build Coastguard Worker                '* Sets (instances of "set" or "frozenset") can be compared '
2051*cda5da8dSAndroid Build Coastguard Worker                'within and\n'
2052*cda5da8dSAndroid Build Coastguard Worker                '  across their types.\n'
2053*cda5da8dSAndroid Build Coastguard Worker                '\n'
2054*cda5da8dSAndroid Build Coastguard Worker                '  They define order comparison operators to mean subset and '
2055*cda5da8dSAndroid Build Coastguard Worker                'superset\n'
2056*cda5da8dSAndroid Build Coastguard Worker                '  tests.  Those relations do not define total orderings (for '
2057*cda5da8dSAndroid Build Coastguard Worker                'example,\n'
2058*cda5da8dSAndroid Build Coastguard Worker                '  the two sets "{1,2}" and "{2,3}" are not equal, nor subsets '
2059*cda5da8dSAndroid Build Coastguard Worker                'of one\n'
2060*cda5da8dSAndroid Build Coastguard Worker                '  another, nor supersets of one another).  Accordingly, sets '
2061*cda5da8dSAndroid Build Coastguard Worker                'are not\n'
2062*cda5da8dSAndroid Build Coastguard Worker                '  appropriate arguments for functions which depend on total '
2063*cda5da8dSAndroid Build Coastguard Worker                'ordering\n'
2064*cda5da8dSAndroid Build Coastguard Worker                '  (for example, "min()", "max()", and "sorted()" produce '
2065*cda5da8dSAndroid Build Coastguard Worker                'undefined\n'
2066*cda5da8dSAndroid Build Coastguard Worker                '  results given a list of sets as inputs).\n'
2067*cda5da8dSAndroid Build Coastguard Worker                '\n'
2068*cda5da8dSAndroid Build Coastguard Worker                '  Comparison of sets enforces reflexivity of its elements.\n'
2069*cda5da8dSAndroid Build Coastguard Worker                '\n'
2070*cda5da8dSAndroid Build Coastguard Worker                '* Most other built-in types have no comparison methods '
2071*cda5da8dSAndroid Build Coastguard Worker                'implemented, so\n'
2072*cda5da8dSAndroid Build Coastguard Worker                '  they inherit the default comparison behavior.\n'
2073*cda5da8dSAndroid Build Coastguard Worker                '\n'
2074*cda5da8dSAndroid Build Coastguard Worker                'User-defined classes that customize their comparison behavior '
2075*cda5da8dSAndroid Build Coastguard Worker                'should\n'
2076*cda5da8dSAndroid Build Coastguard Worker                'follow some consistency rules, if possible:\n'
2077*cda5da8dSAndroid Build Coastguard Worker                '\n'
2078*cda5da8dSAndroid Build Coastguard Worker                '* Equality comparison should be reflexive. In other words, '
2079*cda5da8dSAndroid Build Coastguard Worker                'identical\n'
2080*cda5da8dSAndroid Build Coastguard Worker                '  objects should compare equal:\n'
2081*cda5da8dSAndroid Build Coastguard Worker                '\n'
2082*cda5da8dSAndroid Build Coastguard Worker                '     "x is y" implies "x == y"\n'
2083*cda5da8dSAndroid Build Coastguard Worker                '\n'
2084*cda5da8dSAndroid Build Coastguard Worker                '* Comparison should be symmetric. In other words, the '
2085*cda5da8dSAndroid Build Coastguard Worker                'following\n'
2086*cda5da8dSAndroid Build Coastguard Worker                '  expressions should have the same result:\n'
2087*cda5da8dSAndroid Build Coastguard Worker                '\n'
2088*cda5da8dSAndroid Build Coastguard Worker                '     "x == y" and "y == x"\n'
2089*cda5da8dSAndroid Build Coastguard Worker                '\n'
2090*cda5da8dSAndroid Build Coastguard Worker                '     "x != y" and "y != x"\n'
2091*cda5da8dSAndroid Build Coastguard Worker                '\n'
2092*cda5da8dSAndroid Build Coastguard Worker                '     "x < y" and "y > x"\n'
2093*cda5da8dSAndroid Build Coastguard Worker                '\n'
2094*cda5da8dSAndroid Build Coastguard Worker                '     "x <= y" and "y >= x"\n'
2095*cda5da8dSAndroid Build Coastguard Worker                '\n'
2096*cda5da8dSAndroid Build Coastguard Worker                '* Comparison should be transitive. The following '
2097*cda5da8dSAndroid Build Coastguard Worker                '(non-exhaustive)\n'
2098*cda5da8dSAndroid Build Coastguard Worker                '  examples illustrate that:\n'
2099*cda5da8dSAndroid Build Coastguard Worker                '\n'
2100*cda5da8dSAndroid Build Coastguard Worker                '     "x > y and y > z" implies "x > z"\n'
2101*cda5da8dSAndroid Build Coastguard Worker                '\n'
2102*cda5da8dSAndroid Build Coastguard Worker                '     "x < y and y <= z" implies "x < z"\n'
2103*cda5da8dSAndroid Build Coastguard Worker                '\n'
2104*cda5da8dSAndroid Build Coastguard Worker                '* Inverse comparison should result in the boolean negation. '
2105*cda5da8dSAndroid Build Coastguard Worker                'In other\n'
2106*cda5da8dSAndroid Build Coastguard Worker                '  words, the following expressions should have the same '
2107*cda5da8dSAndroid Build Coastguard Worker                'result:\n'
2108*cda5da8dSAndroid Build Coastguard Worker                '\n'
2109*cda5da8dSAndroid Build Coastguard Worker                '     "x == y" and "not x != y"\n'
2110*cda5da8dSAndroid Build Coastguard Worker                '\n'
2111*cda5da8dSAndroid Build Coastguard Worker                '     "x < y" and "not x >= y" (for total ordering)\n'
2112*cda5da8dSAndroid Build Coastguard Worker                '\n'
2113*cda5da8dSAndroid Build Coastguard Worker                '     "x > y" and "not x <= y" (for total ordering)\n'
2114*cda5da8dSAndroid Build Coastguard Worker                '\n'
2115*cda5da8dSAndroid Build Coastguard Worker                '  The last two expressions apply to totally ordered '
2116*cda5da8dSAndroid Build Coastguard Worker                'collections (e.g.\n'
2117*cda5da8dSAndroid Build Coastguard Worker                '  to sequences, but not to sets or mappings). See also the\n'
2118*cda5da8dSAndroid Build Coastguard Worker                '  "total_ordering()" decorator.\n'
2119*cda5da8dSAndroid Build Coastguard Worker                '\n'
2120*cda5da8dSAndroid Build Coastguard Worker                '* The "hash()" result should be consistent with equality. '
2121*cda5da8dSAndroid Build Coastguard Worker                'Objects that\n'
2122*cda5da8dSAndroid Build Coastguard Worker                '  are equal should either have the same hash value, or be '
2123*cda5da8dSAndroid Build Coastguard Worker                'marked as\n'
2124*cda5da8dSAndroid Build Coastguard Worker                '  unhashable.\n'
2125*cda5da8dSAndroid Build Coastguard Worker                '\n'
2126*cda5da8dSAndroid Build Coastguard Worker                'Python does not enforce these consistency rules. In fact, '
2127*cda5da8dSAndroid Build Coastguard Worker                'the\n'
2128*cda5da8dSAndroid Build Coastguard Worker                'not-a-number values are an example for not following these '
2129*cda5da8dSAndroid Build Coastguard Worker                'rules.\n'
2130*cda5da8dSAndroid Build Coastguard Worker                '\n'
2131*cda5da8dSAndroid Build Coastguard Worker                '\n'
2132*cda5da8dSAndroid Build Coastguard Worker                'Membership test operations\n'
2133*cda5da8dSAndroid Build Coastguard Worker                '==========================\n'
2134*cda5da8dSAndroid Build Coastguard Worker                '\n'
2135*cda5da8dSAndroid Build Coastguard Worker                'The operators "in" and "not in" test for membership.  "x in '
2136*cda5da8dSAndroid Build Coastguard Worker                's"\n'
2137*cda5da8dSAndroid Build Coastguard Worker                'evaluates to "True" if *x* is a member of *s*, and "False" '
2138*cda5da8dSAndroid Build Coastguard Worker                'otherwise.\n'
2139*cda5da8dSAndroid Build Coastguard Worker                '"x not in s" returns the negation of "x in s".  All built-in '
2140*cda5da8dSAndroid Build Coastguard Worker                'sequences\n'
2141*cda5da8dSAndroid Build Coastguard Worker                'and set types support this as well as dictionary, for which '
2142*cda5da8dSAndroid Build Coastguard Worker                '"in" tests\n'
2143*cda5da8dSAndroid Build Coastguard Worker                'whether the dictionary has a given key. For container types '
2144*cda5da8dSAndroid Build Coastguard Worker                'such as\n'
2145*cda5da8dSAndroid Build Coastguard Worker                'list, tuple, set, frozenset, dict, or collections.deque, the\n'
2146*cda5da8dSAndroid Build Coastguard Worker                'expression "x in y" is equivalent to "any(x is e or x == e '
2147*cda5da8dSAndroid Build Coastguard Worker                'for e in\n'
2148*cda5da8dSAndroid Build Coastguard Worker                'y)".\n'
2149*cda5da8dSAndroid Build Coastguard Worker                '\n'
2150*cda5da8dSAndroid Build Coastguard Worker                'For the string and bytes types, "x in y" is "True" if and '
2151*cda5da8dSAndroid Build Coastguard Worker                'only if *x*\n'
2152*cda5da8dSAndroid Build Coastguard Worker                'is a substring of *y*.  An equivalent test is "y.find(x) != '
2153*cda5da8dSAndroid Build Coastguard Worker                '-1".\n'
2154*cda5da8dSAndroid Build Coastguard Worker                'Empty strings are always considered to be a substring of any '
2155*cda5da8dSAndroid Build Coastguard Worker                'other\n'
2156*cda5da8dSAndroid Build Coastguard Worker                'string, so """ in "abc"" will return "True".\n'
2157*cda5da8dSAndroid Build Coastguard Worker                '\n'
2158*cda5da8dSAndroid Build Coastguard Worker                'For user-defined classes which define the "__contains__()" '
2159*cda5da8dSAndroid Build Coastguard Worker                'method, "x\n'
2160*cda5da8dSAndroid Build Coastguard Worker                'in y" returns "True" if "y.__contains__(x)" returns a true '
2161*cda5da8dSAndroid Build Coastguard Worker                'value, and\n'
2162*cda5da8dSAndroid Build Coastguard Worker                '"False" otherwise.\n'
2163*cda5da8dSAndroid Build Coastguard Worker                '\n'
2164*cda5da8dSAndroid Build Coastguard Worker                'For user-defined classes which do not define "__contains__()" '
2165*cda5da8dSAndroid Build Coastguard Worker                'but do\n'
2166*cda5da8dSAndroid Build Coastguard Worker                'define "__iter__()", "x in y" is "True" if some value "z", '
2167*cda5da8dSAndroid Build Coastguard Worker                'for which\n'
2168*cda5da8dSAndroid Build Coastguard Worker                'the expression "x is z or x == z" is true, is produced while '
2169*cda5da8dSAndroid Build Coastguard Worker                'iterating\n'
2170*cda5da8dSAndroid Build Coastguard Worker                'over "y". If an exception is raised during the iteration, it '
2171*cda5da8dSAndroid Build Coastguard Worker                'is as if\n'
2172*cda5da8dSAndroid Build Coastguard Worker                '"in" raised that exception.\n'
2173*cda5da8dSAndroid Build Coastguard Worker                '\n'
2174*cda5da8dSAndroid Build Coastguard Worker                'Lastly, the old-style iteration protocol is tried: if a class '
2175*cda5da8dSAndroid Build Coastguard Worker                'defines\n'
2176*cda5da8dSAndroid Build Coastguard Worker                '"__getitem__()", "x in y" is "True" if and only if there is a '
2177*cda5da8dSAndroid Build Coastguard Worker                'non-\n'
2178*cda5da8dSAndroid Build Coastguard Worker                'negative integer index *i* such that "x is y[i] or x == '
2179*cda5da8dSAndroid Build Coastguard Worker                'y[i]", and no\n'
2180*cda5da8dSAndroid Build Coastguard Worker                'lower integer index raises the "IndexError" exception.  (If '
2181*cda5da8dSAndroid Build Coastguard Worker                'any other\n'
2182*cda5da8dSAndroid Build Coastguard Worker                'exception is raised, it is as if "in" raised that '
2183*cda5da8dSAndroid Build Coastguard Worker                'exception).\n'
2184*cda5da8dSAndroid Build Coastguard Worker                '\n'
2185*cda5da8dSAndroid Build Coastguard Worker                'The operator "not in" is defined to have the inverse truth '
2186*cda5da8dSAndroid Build Coastguard Worker                'value of\n'
2187*cda5da8dSAndroid Build Coastguard Worker                '"in".\n'
2188*cda5da8dSAndroid Build Coastguard Worker                '\n'
2189*cda5da8dSAndroid Build Coastguard Worker                '\n'
2190*cda5da8dSAndroid Build Coastguard Worker                'Identity comparisons\n'
2191*cda5da8dSAndroid Build Coastguard Worker                '====================\n'
2192*cda5da8dSAndroid Build Coastguard Worker                '\n'
2193*cda5da8dSAndroid Build Coastguard Worker                'The operators "is" and "is not" test for an object’s '
2194*cda5da8dSAndroid Build Coastguard Worker                'identity: "x is\n'
2195*cda5da8dSAndroid Build Coastguard Worker                'y" is true if and only if *x* and *y* are the same object.  '
2196*cda5da8dSAndroid Build Coastguard Worker                'An\n'
2197*cda5da8dSAndroid Build Coastguard Worker                'Object’s identity is determined using the "id()" function.  '
2198*cda5da8dSAndroid Build Coastguard Worker                '"x is not\n'
2199*cda5da8dSAndroid Build Coastguard Worker                'y" yields the inverse truth value. [4]\n',
2200*cda5da8dSAndroid Build Coastguard Worker 'compound': 'Compound statements\n'
2201*cda5da8dSAndroid Build Coastguard Worker             '*******************\n'
2202*cda5da8dSAndroid Build Coastguard Worker             '\n'
2203*cda5da8dSAndroid Build Coastguard Worker             'Compound statements contain (groups of) other statements; they '
2204*cda5da8dSAndroid Build Coastguard Worker             'affect\n'
2205*cda5da8dSAndroid Build Coastguard Worker             'or control the execution of those other statements in some way.  '
2206*cda5da8dSAndroid Build Coastguard Worker             'In\n'
2207*cda5da8dSAndroid Build Coastguard Worker             'general, compound statements span multiple lines, although in '
2208*cda5da8dSAndroid Build Coastguard Worker             'simple\n'
2209*cda5da8dSAndroid Build Coastguard Worker             'incarnations a whole compound statement may be contained in one '
2210*cda5da8dSAndroid Build Coastguard Worker             'line.\n'
2211*cda5da8dSAndroid Build Coastguard Worker             '\n'
2212*cda5da8dSAndroid Build Coastguard Worker             'The "if", "while" and "for" statements implement traditional '
2213*cda5da8dSAndroid Build Coastguard Worker             'control\n'
2214*cda5da8dSAndroid Build Coastguard Worker             'flow constructs.  "try" specifies exception handlers and/or '
2215*cda5da8dSAndroid Build Coastguard Worker             'cleanup\n'
2216*cda5da8dSAndroid Build Coastguard Worker             'code for a group of statements, while the "with" statement '
2217*cda5da8dSAndroid Build Coastguard Worker             'allows the\n'
2218*cda5da8dSAndroid Build Coastguard Worker             'execution of initialization and finalization code around a block '
2219*cda5da8dSAndroid Build Coastguard Worker             'of\n'
2220*cda5da8dSAndroid Build Coastguard Worker             'code.  Function and class definitions are also syntactically '
2221*cda5da8dSAndroid Build Coastguard Worker             'compound\n'
2222*cda5da8dSAndroid Build Coastguard Worker             'statements.\n'
2223*cda5da8dSAndroid Build Coastguard Worker             '\n'
2224*cda5da8dSAndroid Build Coastguard Worker             'A compound statement consists of one or more ‘clauses.’  A '
2225*cda5da8dSAndroid Build Coastguard Worker             'clause\n'
2226*cda5da8dSAndroid Build Coastguard Worker             'consists of a header and a ‘suite.’  The clause headers of a\n'
2227*cda5da8dSAndroid Build Coastguard Worker             'particular compound statement are all at the same indentation '
2228*cda5da8dSAndroid Build Coastguard Worker             'level.\n'
2229*cda5da8dSAndroid Build Coastguard Worker             'Each clause header begins with a uniquely identifying keyword '
2230*cda5da8dSAndroid Build Coastguard Worker             'and ends\n'
2231*cda5da8dSAndroid Build Coastguard Worker             'with a colon.  A suite is a group of statements controlled by a\n'
2232*cda5da8dSAndroid Build Coastguard Worker             'clause.  A suite can be one or more semicolon-separated simple\n'
2233*cda5da8dSAndroid Build Coastguard Worker             'statements on the same line as the header, following the '
2234*cda5da8dSAndroid Build Coastguard Worker             'header’s\n'
2235*cda5da8dSAndroid Build Coastguard Worker             'colon, or it can be one or more indented statements on '
2236*cda5da8dSAndroid Build Coastguard Worker             'subsequent\n'
2237*cda5da8dSAndroid Build Coastguard Worker             'lines.  Only the latter form of a suite can contain nested '
2238*cda5da8dSAndroid Build Coastguard Worker             'compound\n'
2239*cda5da8dSAndroid Build Coastguard Worker             'statements; the following is illegal, mostly because it wouldn’t '
2240*cda5da8dSAndroid Build Coastguard Worker             'be\n'
2241*cda5da8dSAndroid Build Coastguard Worker             'clear to which "if" clause a following "else" clause would '
2242*cda5da8dSAndroid Build Coastguard Worker             'belong:\n'
2243*cda5da8dSAndroid Build Coastguard Worker             '\n'
2244*cda5da8dSAndroid Build Coastguard Worker             '   if test1: if test2: print(x)\n'
2245*cda5da8dSAndroid Build Coastguard Worker             '\n'
2246*cda5da8dSAndroid Build Coastguard Worker             'Also note that the semicolon binds tighter than the colon in '
2247*cda5da8dSAndroid Build Coastguard Worker             'this\n'
2248*cda5da8dSAndroid Build Coastguard Worker             'context, so that in the following example, either all or none of '
2249*cda5da8dSAndroid Build Coastguard Worker             'the\n'
2250*cda5da8dSAndroid Build Coastguard Worker             '"print()" calls are executed:\n'
2251*cda5da8dSAndroid Build Coastguard Worker             '\n'
2252*cda5da8dSAndroid Build Coastguard Worker             '   if x < y < z: print(x); print(y); print(z)\n'
2253*cda5da8dSAndroid Build Coastguard Worker             '\n'
2254*cda5da8dSAndroid Build Coastguard Worker             'Summarizing:\n'
2255*cda5da8dSAndroid Build Coastguard Worker             '\n'
2256*cda5da8dSAndroid Build Coastguard Worker             '   compound_stmt ::= if_stmt\n'
2257*cda5da8dSAndroid Build Coastguard Worker             '                     | while_stmt\n'
2258*cda5da8dSAndroid Build Coastguard Worker             '                     | for_stmt\n'
2259*cda5da8dSAndroid Build Coastguard Worker             '                     | try_stmt\n'
2260*cda5da8dSAndroid Build Coastguard Worker             '                     | with_stmt\n'
2261*cda5da8dSAndroid Build Coastguard Worker             '                     | match_stmt\n'
2262*cda5da8dSAndroid Build Coastguard Worker             '                     | funcdef\n'
2263*cda5da8dSAndroid Build Coastguard Worker             '                     | classdef\n'
2264*cda5da8dSAndroid Build Coastguard Worker             '                     | async_with_stmt\n'
2265*cda5da8dSAndroid Build Coastguard Worker             '                     | async_for_stmt\n'
2266*cda5da8dSAndroid Build Coastguard Worker             '                     | async_funcdef\n'
2267*cda5da8dSAndroid Build Coastguard Worker             '   suite         ::= stmt_list NEWLINE | NEWLINE INDENT '
2268*cda5da8dSAndroid Build Coastguard Worker             'statement+ DEDENT\n'
2269*cda5da8dSAndroid Build Coastguard Worker             '   statement     ::= stmt_list NEWLINE | compound_stmt\n'
2270*cda5da8dSAndroid Build Coastguard Worker             '   stmt_list     ::= simple_stmt (";" simple_stmt)* [";"]\n'
2271*cda5da8dSAndroid Build Coastguard Worker             '\n'
2272*cda5da8dSAndroid Build Coastguard Worker             'Note that statements always end in a "NEWLINE" possibly followed '
2273*cda5da8dSAndroid Build Coastguard Worker             'by a\n'
2274*cda5da8dSAndroid Build Coastguard Worker             '"DEDENT".  Also note that optional continuation clauses always '
2275*cda5da8dSAndroid Build Coastguard Worker             'begin\n'
2276*cda5da8dSAndroid Build Coastguard Worker             'with a keyword that cannot start a statement, thus there are no\n'
2277*cda5da8dSAndroid Build Coastguard Worker             'ambiguities (the ‘dangling "else"’ problem is solved in Python '
2278*cda5da8dSAndroid Build Coastguard Worker             'by\n'
2279*cda5da8dSAndroid Build Coastguard Worker             'requiring nested "if" statements to be indented).\n'
2280*cda5da8dSAndroid Build Coastguard Worker             '\n'
2281*cda5da8dSAndroid Build Coastguard Worker             'The formatting of the grammar rules in the following sections '
2282*cda5da8dSAndroid Build Coastguard Worker             'places\n'
2283*cda5da8dSAndroid Build Coastguard Worker             'each clause on a separate line for clarity.\n'
2284*cda5da8dSAndroid Build Coastguard Worker             '\n'
2285*cda5da8dSAndroid Build Coastguard Worker             '\n'
2286*cda5da8dSAndroid Build Coastguard Worker             'The "if" statement\n'
2287*cda5da8dSAndroid Build Coastguard Worker             '==================\n'
2288*cda5da8dSAndroid Build Coastguard Worker             '\n'
2289*cda5da8dSAndroid Build Coastguard Worker             'The "if" statement is used for conditional execution:\n'
2290*cda5da8dSAndroid Build Coastguard Worker             '\n'
2291*cda5da8dSAndroid Build Coastguard Worker             '   if_stmt ::= "if" assignment_expression ":" suite\n'
2292*cda5da8dSAndroid Build Coastguard Worker             '               ("elif" assignment_expression ":" suite)*\n'
2293*cda5da8dSAndroid Build Coastguard Worker             '               ["else" ":" suite]\n'
2294*cda5da8dSAndroid Build Coastguard Worker             '\n'
2295*cda5da8dSAndroid Build Coastguard Worker             'It selects exactly one of the suites by evaluating the '
2296*cda5da8dSAndroid Build Coastguard Worker             'expressions one\n'
2297*cda5da8dSAndroid Build Coastguard Worker             'by one until one is found to be true (see section Boolean '
2298*cda5da8dSAndroid Build Coastguard Worker             'operations\n'
2299*cda5da8dSAndroid Build Coastguard Worker             'for the definition of true and false); then that suite is '
2300*cda5da8dSAndroid Build Coastguard Worker             'executed\n'
2301*cda5da8dSAndroid Build Coastguard Worker             '(and no other part of the "if" statement is executed or '
2302*cda5da8dSAndroid Build Coastguard Worker             'evaluated).\n'
2303*cda5da8dSAndroid Build Coastguard Worker             'If all expressions are false, the suite of the "else" clause, '
2304*cda5da8dSAndroid Build Coastguard Worker             'if\n'
2305*cda5da8dSAndroid Build Coastguard Worker             'present, is executed.\n'
2306*cda5da8dSAndroid Build Coastguard Worker             '\n'
2307*cda5da8dSAndroid Build Coastguard Worker             '\n'
2308*cda5da8dSAndroid Build Coastguard Worker             'The "while" statement\n'
2309*cda5da8dSAndroid Build Coastguard Worker             '=====================\n'
2310*cda5da8dSAndroid Build Coastguard Worker             '\n'
2311*cda5da8dSAndroid Build Coastguard Worker             'The "while" statement is used for repeated execution as long as '
2312*cda5da8dSAndroid Build Coastguard Worker             'an\n'
2313*cda5da8dSAndroid Build Coastguard Worker             'expression is true:\n'
2314*cda5da8dSAndroid Build Coastguard Worker             '\n'
2315*cda5da8dSAndroid Build Coastguard Worker             '   while_stmt ::= "while" assignment_expression ":" suite\n'
2316*cda5da8dSAndroid Build Coastguard Worker             '                  ["else" ":" suite]\n'
2317*cda5da8dSAndroid Build Coastguard Worker             '\n'
2318*cda5da8dSAndroid Build Coastguard Worker             'This repeatedly tests the expression and, if it is true, '
2319*cda5da8dSAndroid Build Coastguard Worker             'executes the\n'
2320*cda5da8dSAndroid Build Coastguard Worker             'first suite; if the expression is false (which may be the first '
2321*cda5da8dSAndroid Build Coastguard Worker             'time\n'
2322*cda5da8dSAndroid Build Coastguard Worker             'it is tested) the suite of the "else" clause, if present, is '
2323*cda5da8dSAndroid Build Coastguard Worker             'executed\n'
2324*cda5da8dSAndroid Build Coastguard Worker             'and the loop terminates.\n'
2325*cda5da8dSAndroid Build Coastguard Worker             '\n'
2326*cda5da8dSAndroid Build Coastguard Worker             'A "break" statement executed in the first suite terminates the '
2327*cda5da8dSAndroid Build Coastguard Worker             'loop\n'
2328*cda5da8dSAndroid Build Coastguard Worker             'without executing the "else" clause’s suite.  A "continue" '
2329*cda5da8dSAndroid Build Coastguard Worker             'statement\n'
2330*cda5da8dSAndroid Build Coastguard Worker             'executed in the first suite skips the rest of the suite and goes '
2331*cda5da8dSAndroid Build Coastguard Worker             'back\n'
2332*cda5da8dSAndroid Build Coastguard Worker             'to testing the expression.\n'
2333*cda5da8dSAndroid Build Coastguard Worker             '\n'
2334*cda5da8dSAndroid Build Coastguard Worker             '\n'
2335*cda5da8dSAndroid Build Coastguard Worker             'The "for" statement\n'
2336*cda5da8dSAndroid Build Coastguard Worker             '===================\n'
2337*cda5da8dSAndroid Build Coastguard Worker             '\n'
2338*cda5da8dSAndroid Build Coastguard Worker             'The "for" statement is used to iterate over the elements of a '
2339*cda5da8dSAndroid Build Coastguard Worker             'sequence\n'
2340*cda5da8dSAndroid Build Coastguard Worker             '(such as a string, tuple or list) or other iterable object:\n'
2341*cda5da8dSAndroid Build Coastguard Worker             '\n'
2342*cda5da8dSAndroid Build Coastguard Worker             '   for_stmt ::= "for" target_list "in" starred_list ":" suite\n'
2343*cda5da8dSAndroid Build Coastguard Worker             '                ["else" ":" suite]\n'
2344*cda5da8dSAndroid Build Coastguard Worker             '\n'
2345*cda5da8dSAndroid Build Coastguard Worker             'The "starred_list" expression is evaluated once; it should yield '
2346*cda5da8dSAndroid Build Coastguard Worker             'an\n'
2347*cda5da8dSAndroid Build Coastguard Worker             '*iterable* object.  An *iterator* is created for that iterable. '
2348*cda5da8dSAndroid Build Coastguard Worker             'The\n'
2349*cda5da8dSAndroid Build Coastguard Worker             'first item provided by the iterator is then assigned to the '
2350*cda5da8dSAndroid Build Coastguard Worker             'target\n'
2351*cda5da8dSAndroid Build Coastguard Worker             'list using the standard rules for assignments (see Assignment\n'
2352*cda5da8dSAndroid Build Coastguard Worker             'statements), and the suite is executed.  This repeats for each '
2353*cda5da8dSAndroid Build Coastguard Worker             'item\n'
2354*cda5da8dSAndroid Build Coastguard Worker             'provided by the iterator.  When the iterator is exhausted, the '
2355*cda5da8dSAndroid Build Coastguard Worker             'suite\n'
2356*cda5da8dSAndroid Build Coastguard Worker             'in the "else" clause, if present, is executed, and the loop\n'
2357*cda5da8dSAndroid Build Coastguard Worker             'terminates.\n'
2358*cda5da8dSAndroid Build Coastguard Worker             '\n'
2359*cda5da8dSAndroid Build Coastguard Worker             'A "break" statement executed in the first suite terminates the '
2360*cda5da8dSAndroid Build Coastguard Worker             'loop\n'
2361*cda5da8dSAndroid Build Coastguard Worker             'without executing the "else" clause’s suite.  A "continue" '
2362*cda5da8dSAndroid Build Coastguard Worker             'statement\n'
2363*cda5da8dSAndroid Build Coastguard Worker             'executed in the first suite skips the rest of the suite and '
2364*cda5da8dSAndroid Build Coastguard Worker             'continues\n'
2365*cda5da8dSAndroid Build Coastguard Worker             'with the next item, or with the "else" clause if there is no '
2366*cda5da8dSAndroid Build Coastguard Worker             'next\n'
2367*cda5da8dSAndroid Build Coastguard Worker             'item.\n'
2368*cda5da8dSAndroid Build Coastguard Worker             '\n'
2369*cda5da8dSAndroid Build Coastguard Worker             'The for-loop makes assignments to the variables in the target '
2370*cda5da8dSAndroid Build Coastguard Worker             'list.\n'
2371*cda5da8dSAndroid Build Coastguard Worker             'This overwrites all previous assignments to those variables '
2372*cda5da8dSAndroid Build Coastguard Worker             'including\n'
2373*cda5da8dSAndroid Build Coastguard Worker             'those made in the suite of the for-loop:\n'
2374*cda5da8dSAndroid Build Coastguard Worker             '\n'
2375*cda5da8dSAndroid Build Coastguard Worker             '   for i in range(10):\n'
2376*cda5da8dSAndroid Build Coastguard Worker             '       print(i)\n'
2377*cda5da8dSAndroid Build Coastguard Worker             '       i = 5             # this will not affect the for-loop\n'
2378*cda5da8dSAndroid Build Coastguard Worker             '                         # because i will be overwritten with '
2379*cda5da8dSAndroid Build Coastguard Worker             'the next\n'
2380*cda5da8dSAndroid Build Coastguard Worker             '                         # index in the range\n'
2381*cda5da8dSAndroid Build Coastguard Worker             '\n'
2382*cda5da8dSAndroid Build Coastguard Worker             'Names in the target list are not deleted when the loop is '
2383*cda5da8dSAndroid Build Coastguard Worker             'finished,\n'
2384*cda5da8dSAndroid Build Coastguard Worker             'but if the sequence is empty, they will not have been assigned '
2385*cda5da8dSAndroid Build Coastguard Worker             'to at\n'
2386*cda5da8dSAndroid Build Coastguard Worker             'all by the loop.  Hint: the built-in type "range()" represents\n'
2387*cda5da8dSAndroid Build Coastguard Worker             'immutable arithmetic sequences of integers. For instance, '
2388*cda5da8dSAndroid Build Coastguard Worker             'iterating\n'
2389*cda5da8dSAndroid Build Coastguard Worker             '"range(3)" successively yields 0, 1, and then 2.\n'
2390*cda5da8dSAndroid Build Coastguard Worker             '\n'
2391*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.11: Starred elements are now allowed in '
2392*cda5da8dSAndroid Build Coastguard Worker             'the\n'
2393*cda5da8dSAndroid Build Coastguard Worker             'expression list.\n'
2394*cda5da8dSAndroid Build Coastguard Worker             '\n'
2395*cda5da8dSAndroid Build Coastguard Worker             '\n'
2396*cda5da8dSAndroid Build Coastguard Worker             'The "try" statement\n'
2397*cda5da8dSAndroid Build Coastguard Worker             '===================\n'
2398*cda5da8dSAndroid Build Coastguard Worker             '\n'
2399*cda5da8dSAndroid Build Coastguard Worker             'The "try" statement specifies exception handlers and/or cleanup '
2400*cda5da8dSAndroid Build Coastguard Worker             'code\n'
2401*cda5da8dSAndroid Build Coastguard Worker             'for a group of statements:\n'
2402*cda5da8dSAndroid Build Coastguard Worker             '\n'
2403*cda5da8dSAndroid Build Coastguard Worker             '   try_stmt  ::= try1_stmt | try2_stmt | try3_stmt\n'
2404*cda5da8dSAndroid Build Coastguard Worker             '   try1_stmt ::= "try" ":" suite\n'
2405*cda5da8dSAndroid Build Coastguard Worker             '                 ("except" [expression ["as" identifier]] ":" '
2406*cda5da8dSAndroid Build Coastguard Worker             'suite)+\n'
2407*cda5da8dSAndroid Build Coastguard Worker             '                 ["else" ":" suite]\n'
2408*cda5da8dSAndroid Build Coastguard Worker             '                 ["finally" ":" suite]\n'
2409*cda5da8dSAndroid Build Coastguard Worker             '   try2_stmt ::= "try" ":" suite\n'
2410*cda5da8dSAndroid Build Coastguard Worker             '                 ("except" "*" expression ["as" identifier] ":" '
2411*cda5da8dSAndroid Build Coastguard Worker             'suite)+\n'
2412*cda5da8dSAndroid Build Coastguard Worker             '                 ["else" ":" suite]\n'
2413*cda5da8dSAndroid Build Coastguard Worker             '                 ["finally" ":" suite]\n'
2414*cda5da8dSAndroid Build Coastguard Worker             '   try3_stmt ::= "try" ":" suite\n'
2415*cda5da8dSAndroid Build Coastguard Worker             '                 "finally" ":" suite\n'
2416*cda5da8dSAndroid Build Coastguard Worker             '\n'
2417*cda5da8dSAndroid Build Coastguard Worker             'Additional information on exceptions can be found in section\n'
2418*cda5da8dSAndroid Build Coastguard Worker             'Exceptions, and information on using the "raise" statement to '
2419*cda5da8dSAndroid Build Coastguard Worker             'generate\n'
2420*cda5da8dSAndroid Build Coastguard Worker             'exceptions may be found in section The raise statement.\n'
2421*cda5da8dSAndroid Build Coastguard Worker             '\n'
2422*cda5da8dSAndroid Build Coastguard Worker             '\n'
2423*cda5da8dSAndroid Build Coastguard Worker             '"except" clause\n'
2424*cda5da8dSAndroid Build Coastguard Worker             '---------------\n'
2425*cda5da8dSAndroid Build Coastguard Worker             '\n'
2426*cda5da8dSAndroid Build Coastguard Worker             'The "except" clause(s) specify one or more exception handlers. '
2427*cda5da8dSAndroid Build Coastguard Worker             'When no\n'
2428*cda5da8dSAndroid Build Coastguard Worker             'exception occurs in the "try" clause, no exception handler is\n'
2429*cda5da8dSAndroid Build Coastguard Worker             'executed. When an exception occurs in the "try" suite, a search '
2430*cda5da8dSAndroid Build Coastguard Worker             'for an\n'
2431*cda5da8dSAndroid Build Coastguard Worker             'exception handler is started. This search inspects the "except"\n'
2432*cda5da8dSAndroid Build Coastguard Worker             'clauses in turn until one is found that matches the exception. '
2433*cda5da8dSAndroid Build Coastguard Worker             'An\n'
2434*cda5da8dSAndroid Build Coastguard Worker             'expression-less "except" clause, if present, must be last; it '
2435*cda5da8dSAndroid Build Coastguard Worker             'matches\n'
2436*cda5da8dSAndroid Build Coastguard Worker             'any exception. For an "except" clause with an expression, that\n'
2437*cda5da8dSAndroid Build Coastguard Worker             'expression is evaluated, and the clause matches the exception if '
2438*cda5da8dSAndroid Build Coastguard Worker             'the\n'
2439*cda5da8dSAndroid Build Coastguard Worker             'resulting object is “compatible” with the exception.  An object '
2440*cda5da8dSAndroid Build Coastguard Worker             'is\n'
2441*cda5da8dSAndroid Build Coastguard Worker             'compatible with an exception if the object is the class or a '
2442*cda5da8dSAndroid Build Coastguard Worker             '*non-\n'
2443*cda5da8dSAndroid Build Coastguard Worker             'virtual base class* of the exception object, or a tuple '
2444*cda5da8dSAndroid Build Coastguard Worker             'containing an\n'
2445*cda5da8dSAndroid Build Coastguard Worker             'item that is the class or a non-virtual base class of the '
2446*cda5da8dSAndroid Build Coastguard Worker             'exception\n'
2447*cda5da8dSAndroid Build Coastguard Worker             'object.\n'
2448*cda5da8dSAndroid Build Coastguard Worker             '\n'
2449*cda5da8dSAndroid Build Coastguard Worker             'If no "except" clause matches the exception, the search for an\n'
2450*cda5da8dSAndroid Build Coastguard Worker             'exception handler continues in the surrounding code and on the\n'
2451*cda5da8dSAndroid Build Coastguard Worker             'invocation stack.  [1]\n'
2452*cda5da8dSAndroid Build Coastguard Worker             '\n'
2453*cda5da8dSAndroid Build Coastguard Worker             'If the evaluation of an expression in the header of an "except" '
2454*cda5da8dSAndroid Build Coastguard Worker             'clause\n'
2455*cda5da8dSAndroid Build Coastguard Worker             'raises an exception, the original search for a handler is '
2456*cda5da8dSAndroid Build Coastguard Worker             'canceled and\n'
2457*cda5da8dSAndroid Build Coastguard Worker             'a search starts for the new exception in the surrounding code '
2458*cda5da8dSAndroid Build Coastguard Worker             'and on\n'
2459*cda5da8dSAndroid Build Coastguard Worker             'the call stack (it is treated as if the entire "try" statement '
2460*cda5da8dSAndroid Build Coastguard Worker             'raised\n'
2461*cda5da8dSAndroid Build Coastguard Worker             'the exception).\n'
2462*cda5da8dSAndroid Build Coastguard Worker             '\n'
2463*cda5da8dSAndroid Build Coastguard Worker             'When a matching "except" clause is found, the exception is '
2464*cda5da8dSAndroid Build Coastguard Worker             'assigned to\n'
2465*cda5da8dSAndroid Build Coastguard Worker             'the target specified after the "as" keyword in that "except" '
2466*cda5da8dSAndroid Build Coastguard Worker             'clause,\n'
2467*cda5da8dSAndroid Build Coastguard Worker             'if present, and the "except" clause’s suite is executed. All '
2468*cda5da8dSAndroid Build Coastguard Worker             '"except"\n'
2469*cda5da8dSAndroid Build Coastguard Worker             'clauses must have an executable block. When the end of this '
2470*cda5da8dSAndroid Build Coastguard Worker             'block is\n'
2471*cda5da8dSAndroid Build Coastguard Worker             'reached, execution continues normally after the entire "try"\n'
2472*cda5da8dSAndroid Build Coastguard Worker             'statement. (This means that if two nested handlers exist for the '
2473*cda5da8dSAndroid Build Coastguard Worker             'same\n'
2474*cda5da8dSAndroid Build Coastguard Worker             'exception, and the exception occurs in the "try" clause of the '
2475*cda5da8dSAndroid Build Coastguard Worker             'inner\n'
2476*cda5da8dSAndroid Build Coastguard Worker             'handler, the outer handler will not handle the exception.)\n'
2477*cda5da8dSAndroid Build Coastguard Worker             '\n'
2478*cda5da8dSAndroid Build Coastguard Worker             'When an exception has been assigned using "as target", it is '
2479*cda5da8dSAndroid Build Coastguard Worker             'cleared\n'
2480*cda5da8dSAndroid Build Coastguard Worker             'at the end of the "except" clause.  This is as if\n'
2481*cda5da8dSAndroid Build Coastguard Worker             '\n'
2482*cda5da8dSAndroid Build Coastguard Worker             '   except E as N:\n'
2483*cda5da8dSAndroid Build Coastguard Worker             '       foo\n'
2484*cda5da8dSAndroid Build Coastguard Worker             '\n'
2485*cda5da8dSAndroid Build Coastguard Worker             'was translated to\n'
2486*cda5da8dSAndroid Build Coastguard Worker             '\n'
2487*cda5da8dSAndroid Build Coastguard Worker             '   except E as N:\n'
2488*cda5da8dSAndroid Build Coastguard Worker             '       try:\n'
2489*cda5da8dSAndroid Build Coastguard Worker             '           foo\n'
2490*cda5da8dSAndroid Build Coastguard Worker             '       finally:\n'
2491*cda5da8dSAndroid Build Coastguard Worker             '           del N\n'
2492*cda5da8dSAndroid Build Coastguard Worker             '\n'
2493*cda5da8dSAndroid Build Coastguard Worker             'This means the exception must be assigned to a different name to '
2494*cda5da8dSAndroid Build Coastguard Worker             'be\n'
2495*cda5da8dSAndroid Build Coastguard Worker             'able to refer to it after the "except" clause. Exceptions are '
2496*cda5da8dSAndroid Build Coastguard Worker             'cleared\n'
2497*cda5da8dSAndroid Build Coastguard Worker             'because with the traceback attached to them, they form a '
2498*cda5da8dSAndroid Build Coastguard Worker             'reference\n'
2499*cda5da8dSAndroid Build Coastguard Worker             'cycle with the stack frame, keeping all locals in that frame '
2500*cda5da8dSAndroid Build Coastguard Worker             'alive\n'
2501*cda5da8dSAndroid Build Coastguard Worker             'until the next garbage collection occurs.\n'
2502*cda5da8dSAndroid Build Coastguard Worker             '\n'
2503*cda5da8dSAndroid Build Coastguard Worker             'Before an "except" clause’s suite is executed, the exception is '
2504*cda5da8dSAndroid Build Coastguard Worker             'stored\n'
2505*cda5da8dSAndroid Build Coastguard Worker             'in the "sys" module, where it can be accessed from within the '
2506*cda5da8dSAndroid Build Coastguard Worker             'body of\n'
2507*cda5da8dSAndroid Build Coastguard Worker             'the "except" clause by calling "sys.exception()". When leaving '
2508*cda5da8dSAndroid Build Coastguard Worker             'an\n'
2509*cda5da8dSAndroid Build Coastguard Worker             'exception handler, the exception stored in the "sys" module is '
2510*cda5da8dSAndroid Build Coastguard Worker             'reset\n'
2511*cda5da8dSAndroid Build Coastguard Worker             'to its previous value:\n'
2512*cda5da8dSAndroid Build Coastguard Worker             '\n'
2513*cda5da8dSAndroid Build Coastguard Worker             '   >>> print(sys.exception())\n'
2514*cda5da8dSAndroid Build Coastguard Worker             '   None\n'
2515*cda5da8dSAndroid Build Coastguard Worker             '   >>> try:\n'
2516*cda5da8dSAndroid Build Coastguard Worker             '   ...     raise TypeError\n'
2517*cda5da8dSAndroid Build Coastguard Worker             '   ... except:\n'
2518*cda5da8dSAndroid Build Coastguard Worker             '   ...     print(repr(sys.exception()))\n'
2519*cda5da8dSAndroid Build Coastguard Worker             '   ...     try:\n'
2520*cda5da8dSAndroid Build Coastguard Worker             '   ...          raise ValueError\n'
2521*cda5da8dSAndroid Build Coastguard Worker             '   ...     except:\n'
2522*cda5da8dSAndroid Build Coastguard Worker             '   ...         print(repr(sys.exception()))\n'
2523*cda5da8dSAndroid Build Coastguard Worker             '   ...     print(repr(sys.exception()))\n'
2524*cda5da8dSAndroid Build Coastguard Worker             '   ...\n'
2525*cda5da8dSAndroid Build Coastguard Worker             '   TypeError()\n'
2526*cda5da8dSAndroid Build Coastguard Worker             '   ValueError()\n'
2527*cda5da8dSAndroid Build Coastguard Worker             '   TypeError()\n'
2528*cda5da8dSAndroid Build Coastguard Worker             '   >>> print(sys.exception())\n'
2529*cda5da8dSAndroid Build Coastguard Worker             '   None\n'
2530*cda5da8dSAndroid Build Coastguard Worker             '\n'
2531*cda5da8dSAndroid Build Coastguard Worker             '\n'
2532*cda5da8dSAndroid Build Coastguard Worker             '"except*" clause\n'
2533*cda5da8dSAndroid Build Coastguard Worker             '----------------\n'
2534*cda5da8dSAndroid Build Coastguard Worker             '\n'
2535*cda5da8dSAndroid Build Coastguard Worker             'The "except*" clause(s) are used for handling "ExceptionGroup"s. '
2536*cda5da8dSAndroid Build Coastguard Worker             'The\n'
2537*cda5da8dSAndroid Build Coastguard Worker             'exception type for matching is interpreted as in the case of '
2538*cda5da8dSAndroid Build Coastguard Worker             '"except",\n'
2539*cda5da8dSAndroid Build Coastguard Worker             'but in the case of exception groups we can have partial matches '
2540*cda5da8dSAndroid Build Coastguard Worker             'when\n'
2541*cda5da8dSAndroid Build Coastguard Worker             'the type matches some of the exceptions in the group. This means '
2542*cda5da8dSAndroid Build Coastguard Worker             'that\n'
2543*cda5da8dSAndroid Build Coastguard Worker             'multiple "except*" clauses can execute, each handling part of '
2544*cda5da8dSAndroid Build Coastguard Worker             'the\n'
2545*cda5da8dSAndroid Build Coastguard Worker             'exception group. Each clause executes at most once and handles '
2546*cda5da8dSAndroid Build Coastguard Worker             'an\n'
2547*cda5da8dSAndroid Build Coastguard Worker             'exception group of all matching exceptions.  Each exception in '
2548*cda5da8dSAndroid Build Coastguard Worker             'the\n'
2549*cda5da8dSAndroid Build Coastguard Worker             'group is handled by at most one "except*" clause, the first '
2550*cda5da8dSAndroid Build Coastguard Worker             'that\n'
2551*cda5da8dSAndroid Build Coastguard Worker             'matches it.\n'
2552*cda5da8dSAndroid Build Coastguard Worker             '\n'
2553*cda5da8dSAndroid Build Coastguard Worker             '   >>> try:\n'
2554*cda5da8dSAndroid Build Coastguard Worker             '   ...     raise ExceptionGroup("eg",\n'
2555*cda5da8dSAndroid Build Coastguard Worker             '   ...         [ValueError(1), TypeError(2), OSError(3), '
2556*cda5da8dSAndroid Build Coastguard Worker             'OSError(4)])\n'
2557*cda5da8dSAndroid Build Coastguard Worker             '   ... except* TypeError as e:\n'
2558*cda5da8dSAndroid Build Coastguard Worker             "   ...     print(f'caught {type(e)} with nested "
2559*cda5da8dSAndroid Build Coastguard Worker             "{e.exceptions}')\n"
2560*cda5da8dSAndroid Build Coastguard Worker             '   ... except* OSError as e:\n'
2561*cda5da8dSAndroid Build Coastguard Worker             "   ...     print(f'caught {type(e)} with nested "
2562*cda5da8dSAndroid Build Coastguard Worker             "{e.exceptions}')\n"
2563*cda5da8dSAndroid Build Coastguard Worker             '   ...\n'
2564*cda5da8dSAndroid Build Coastguard Worker             "   caught <class 'ExceptionGroup'> with nested (TypeError(2),)\n"
2565*cda5da8dSAndroid Build Coastguard Worker             "   caught <class 'ExceptionGroup'> with nested (OSError(3), "
2566*cda5da8dSAndroid Build Coastguard Worker             'OSError(4))\n'
2567*cda5da8dSAndroid Build Coastguard Worker             '     + Exception Group Traceback (most recent call last):\n'
2568*cda5da8dSAndroid Build Coastguard Worker             '     |   File "<stdin>", line 2, in <module>\n'
2569*cda5da8dSAndroid Build Coastguard Worker             '     | ExceptionGroup: eg\n'
2570*cda5da8dSAndroid Build Coastguard Worker             '     +-+---------------- 1 ----------------\n'
2571*cda5da8dSAndroid Build Coastguard Worker             '       | ValueError: 1\n'
2572*cda5da8dSAndroid Build Coastguard Worker             '       +------------------------------------\n'
2573*cda5da8dSAndroid Build Coastguard Worker             '\n'
2574*cda5da8dSAndroid Build Coastguard Worker             'Any remaining exceptions that were not handled by any "except*" '
2575*cda5da8dSAndroid Build Coastguard Worker             'clause\n'
2576*cda5da8dSAndroid Build Coastguard Worker             'are re-raised at the end, combined into an exception group along '
2577*cda5da8dSAndroid Build Coastguard Worker             'with\n'
2578*cda5da8dSAndroid Build Coastguard Worker             'all exceptions that were raised from within "except*" clauses.\n'
2579*cda5da8dSAndroid Build Coastguard Worker             '\n'
2580*cda5da8dSAndroid Build Coastguard Worker             'From version 3.11.4, when the entire "ExceptionGroup" is handled '
2581*cda5da8dSAndroid Build Coastguard Worker             'and\n'
2582*cda5da8dSAndroid Build Coastguard Worker             'only one exception is raised from an "except*" clause, this '
2583*cda5da8dSAndroid Build Coastguard Worker             'exception\n'
2584*cda5da8dSAndroid Build Coastguard Worker             'is no longer wrapped to form a new "ExceptionGroup".\n'
2585*cda5da8dSAndroid Build Coastguard Worker             '\n'
2586*cda5da8dSAndroid Build Coastguard Worker             'If the raised exception is not an exception group and its type '
2587*cda5da8dSAndroid Build Coastguard Worker             'matches\n'
2588*cda5da8dSAndroid Build Coastguard Worker             'one of the "except*" clauses, it is caught and wrapped by an '
2589*cda5da8dSAndroid Build Coastguard Worker             'exception\n'
2590*cda5da8dSAndroid Build Coastguard Worker             'group with an empty message string.\n'
2591*cda5da8dSAndroid Build Coastguard Worker             '\n'
2592*cda5da8dSAndroid Build Coastguard Worker             '   >>> try:\n'
2593*cda5da8dSAndroid Build Coastguard Worker             '   ...     raise BlockingIOError\n'
2594*cda5da8dSAndroid Build Coastguard Worker             '   ... except* BlockingIOError as e:\n'
2595*cda5da8dSAndroid Build Coastguard Worker             '   ...     print(repr(e))\n'
2596*cda5da8dSAndroid Build Coastguard Worker             '   ...\n'
2597*cda5da8dSAndroid Build Coastguard Worker             "   ExceptionGroup('', (BlockingIOError()))\n"
2598*cda5da8dSAndroid Build Coastguard Worker             '\n'
2599*cda5da8dSAndroid Build Coastguard Worker             'An "except*" clause must have a matching type, and this type '
2600*cda5da8dSAndroid Build Coastguard Worker             'cannot be\n'
2601*cda5da8dSAndroid Build Coastguard Worker             'a subclass of "BaseExceptionGroup". It is not possible to mix '
2602*cda5da8dSAndroid Build Coastguard Worker             '"except"\n'
2603*cda5da8dSAndroid Build Coastguard Worker             'and "except*" in the same "try". "break", "continue" and '
2604*cda5da8dSAndroid Build Coastguard Worker             '"return"\n'
2605*cda5da8dSAndroid Build Coastguard Worker             'cannot appear in an "except*" clause.\n'
2606*cda5da8dSAndroid Build Coastguard Worker             '\n'
2607*cda5da8dSAndroid Build Coastguard Worker             '\n'
2608*cda5da8dSAndroid Build Coastguard Worker             '"else" clause\n'
2609*cda5da8dSAndroid Build Coastguard Worker             '-------------\n'
2610*cda5da8dSAndroid Build Coastguard Worker             '\n'
2611*cda5da8dSAndroid Build Coastguard Worker             'The optional "else" clause is executed if the control flow '
2612*cda5da8dSAndroid Build Coastguard Worker             'leaves the\n'
2613*cda5da8dSAndroid Build Coastguard Worker             '"try" suite, no exception was raised, and no "return", '
2614*cda5da8dSAndroid Build Coastguard Worker             '"continue", or\n'
2615*cda5da8dSAndroid Build Coastguard Worker             '"break" statement was executed.  Exceptions in the "else" clause '
2616*cda5da8dSAndroid Build Coastguard Worker             'are\n'
2617*cda5da8dSAndroid Build Coastguard Worker             'not handled by the preceding "except" clauses.\n'
2618*cda5da8dSAndroid Build Coastguard Worker             '\n'
2619*cda5da8dSAndroid Build Coastguard Worker             '\n'
2620*cda5da8dSAndroid Build Coastguard Worker             '"finally" clause\n'
2621*cda5da8dSAndroid Build Coastguard Worker             '----------------\n'
2622*cda5da8dSAndroid Build Coastguard Worker             '\n'
2623*cda5da8dSAndroid Build Coastguard Worker             'If "finally" is present, it specifies a ‘cleanup’ handler.  The '
2624*cda5da8dSAndroid Build Coastguard Worker             '"try"\n'
2625*cda5da8dSAndroid Build Coastguard Worker             'clause is executed, including any "except" and "else" clauses.  '
2626*cda5da8dSAndroid Build Coastguard Worker             'If an\n'
2627*cda5da8dSAndroid Build Coastguard Worker             'exception occurs in any of the clauses and is not handled, the\n'
2628*cda5da8dSAndroid Build Coastguard Worker             'exception is temporarily saved. The "finally" clause is '
2629*cda5da8dSAndroid Build Coastguard Worker             'executed.  If\n'
2630*cda5da8dSAndroid Build Coastguard Worker             'there is a saved exception it is re-raised at the end of the '
2631*cda5da8dSAndroid Build Coastguard Worker             '"finally"\n'
2632*cda5da8dSAndroid Build Coastguard Worker             'clause.  If the "finally" clause raises another exception, the '
2633*cda5da8dSAndroid Build Coastguard Worker             'saved\n'
2634*cda5da8dSAndroid Build Coastguard Worker             'exception is set as the context of the new exception. If the '
2635*cda5da8dSAndroid Build Coastguard Worker             '"finally"\n'
2636*cda5da8dSAndroid Build Coastguard Worker             'clause executes a "return", "break" or "continue" statement, the '
2637*cda5da8dSAndroid Build Coastguard Worker             'saved\n'
2638*cda5da8dSAndroid Build Coastguard Worker             'exception is discarded:\n'
2639*cda5da8dSAndroid Build Coastguard Worker             '\n'
2640*cda5da8dSAndroid Build Coastguard Worker             '   >>> def f():\n'
2641*cda5da8dSAndroid Build Coastguard Worker             '   ...     try:\n'
2642*cda5da8dSAndroid Build Coastguard Worker             '   ...         1/0\n'
2643*cda5da8dSAndroid Build Coastguard Worker             '   ...     finally:\n'
2644*cda5da8dSAndroid Build Coastguard Worker             '   ...         return 42\n'
2645*cda5da8dSAndroid Build Coastguard Worker             '   ...\n'
2646*cda5da8dSAndroid Build Coastguard Worker             '   >>> f()\n'
2647*cda5da8dSAndroid Build Coastguard Worker             '   42\n'
2648*cda5da8dSAndroid Build Coastguard Worker             '\n'
2649*cda5da8dSAndroid Build Coastguard Worker             'The exception information is not available to the program '
2650*cda5da8dSAndroid Build Coastguard Worker             'during\n'
2651*cda5da8dSAndroid Build Coastguard Worker             'execution of the "finally" clause.\n'
2652*cda5da8dSAndroid Build Coastguard Worker             '\n'
2653*cda5da8dSAndroid Build Coastguard Worker             'When a "return", "break" or "continue" statement is executed in '
2654*cda5da8dSAndroid Build Coastguard Worker             'the\n'
2655*cda5da8dSAndroid Build Coastguard Worker             '"try" suite of a "try"…"finally" statement, the "finally" clause '
2656*cda5da8dSAndroid Build Coastguard Worker             'is\n'
2657*cda5da8dSAndroid Build Coastguard Worker             'also executed ‘on the way out.’\n'
2658*cda5da8dSAndroid Build Coastguard Worker             '\n'
2659*cda5da8dSAndroid Build Coastguard Worker             'The return value of a function is determined by the last '
2660*cda5da8dSAndroid Build Coastguard Worker             '"return"\n'
2661*cda5da8dSAndroid Build Coastguard Worker             'statement executed.  Since the "finally" clause always executes, '
2662*cda5da8dSAndroid Build Coastguard Worker             'a\n'
2663*cda5da8dSAndroid Build Coastguard Worker             '"return" statement executed in the "finally" clause will always '
2664*cda5da8dSAndroid Build Coastguard Worker             'be the\n'
2665*cda5da8dSAndroid Build Coastguard Worker             'last one executed:\n'
2666*cda5da8dSAndroid Build Coastguard Worker             '\n'
2667*cda5da8dSAndroid Build Coastguard Worker             '   >>> def foo():\n'
2668*cda5da8dSAndroid Build Coastguard Worker             '   ...     try:\n'
2669*cda5da8dSAndroid Build Coastguard Worker             "   ...         return 'try'\n"
2670*cda5da8dSAndroid Build Coastguard Worker             '   ...     finally:\n'
2671*cda5da8dSAndroid Build Coastguard Worker             "   ...         return 'finally'\n"
2672*cda5da8dSAndroid Build Coastguard Worker             '   ...\n'
2673*cda5da8dSAndroid Build Coastguard Worker             '   >>> foo()\n'
2674*cda5da8dSAndroid Build Coastguard Worker             "   'finally'\n"
2675*cda5da8dSAndroid Build Coastguard Worker             '\n'
2676*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.8: Prior to Python 3.8, a "continue" '
2677*cda5da8dSAndroid Build Coastguard Worker             'statement\n'
2678*cda5da8dSAndroid Build Coastguard Worker             'was illegal in the "finally" clause due to a problem with the\n'
2679*cda5da8dSAndroid Build Coastguard Worker             'implementation.\n'
2680*cda5da8dSAndroid Build Coastguard Worker             '\n'
2681*cda5da8dSAndroid Build Coastguard Worker             '\n'
2682*cda5da8dSAndroid Build Coastguard Worker             'The "with" statement\n'
2683*cda5da8dSAndroid Build Coastguard Worker             '====================\n'
2684*cda5da8dSAndroid Build Coastguard Worker             '\n'
2685*cda5da8dSAndroid Build Coastguard Worker             'The "with" statement is used to wrap the execution of a block '
2686*cda5da8dSAndroid Build Coastguard Worker             'with\n'
2687*cda5da8dSAndroid Build Coastguard Worker             'methods defined by a context manager (see section With '
2688*cda5da8dSAndroid Build Coastguard Worker             'Statement\n'
2689*cda5da8dSAndroid Build Coastguard Worker             'Context Managers). This allows common "try"…"except"…"finally" '
2690*cda5da8dSAndroid Build Coastguard Worker             'usage\n'
2691*cda5da8dSAndroid Build Coastguard Worker             'patterns to be encapsulated for convenient reuse.\n'
2692*cda5da8dSAndroid Build Coastguard Worker             '\n'
2693*cda5da8dSAndroid Build Coastguard Worker             '   with_stmt          ::= "with" ( "(" with_stmt_contents ","? '
2694*cda5da8dSAndroid Build Coastguard Worker             '")" | with_stmt_contents ) ":" suite\n'
2695*cda5da8dSAndroid Build Coastguard Worker             '   with_stmt_contents ::= with_item ("," with_item)*\n'
2696*cda5da8dSAndroid Build Coastguard Worker             '   with_item          ::= expression ["as" target]\n'
2697*cda5da8dSAndroid Build Coastguard Worker             '\n'
2698*cda5da8dSAndroid Build Coastguard Worker             'The execution of the "with" statement with one “item” proceeds '
2699*cda5da8dSAndroid Build Coastguard Worker             'as\n'
2700*cda5da8dSAndroid Build Coastguard Worker             'follows:\n'
2701*cda5da8dSAndroid Build Coastguard Worker             '\n'
2702*cda5da8dSAndroid Build Coastguard Worker             '1. The context expression (the expression given in the '
2703*cda5da8dSAndroid Build Coastguard Worker             '"with_item") is\n'
2704*cda5da8dSAndroid Build Coastguard Worker             '   evaluated to obtain a context manager.\n'
2705*cda5da8dSAndroid Build Coastguard Worker             '\n'
2706*cda5da8dSAndroid Build Coastguard Worker             '2. The context manager’s "__enter__()" is loaded for later use.\n'
2707*cda5da8dSAndroid Build Coastguard Worker             '\n'
2708*cda5da8dSAndroid Build Coastguard Worker             '3. The context manager’s "__exit__()" is loaded for later use.\n'
2709*cda5da8dSAndroid Build Coastguard Worker             '\n'
2710*cda5da8dSAndroid Build Coastguard Worker             '4. The context manager’s "__enter__()" method is invoked.\n'
2711*cda5da8dSAndroid Build Coastguard Worker             '\n'
2712*cda5da8dSAndroid Build Coastguard Worker             '5. If a target was included in the "with" statement, the return '
2713*cda5da8dSAndroid Build Coastguard Worker             'value\n'
2714*cda5da8dSAndroid Build Coastguard Worker             '   from "__enter__()" is assigned to it.\n'
2715*cda5da8dSAndroid Build Coastguard Worker             '\n'
2716*cda5da8dSAndroid Build Coastguard Worker             '   Note:\n'
2717*cda5da8dSAndroid Build Coastguard Worker             '\n'
2718*cda5da8dSAndroid Build Coastguard Worker             '     The "with" statement guarantees that if the "__enter__()" '
2719*cda5da8dSAndroid Build Coastguard Worker             'method\n'
2720*cda5da8dSAndroid Build Coastguard Worker             '     returns without an error, then "__exit__()" will always be\n'
2721*cda5da8dSAndroid Build Coastguard Worker             '     called. Thus, if an error occurs during the assignment to '
2722*cda5da8dSAndroid Build Coastguard Worker             'the\n'
2723*cda5da8dSAndroid Build Coastguard Worker             '     target list, it will be treated the same as an error '
2724*cda5da8dSAndroid Build Coastguard Worker             'occurring\n'
2725*cda5da8dSAndroid Build Coastguard Worker             '     within the suite would be. See step 7 below.\n'
2726*cda5da8dSAndroid Build Coastguard Worker             '\n'
2727*cda5da8dSAndroid Build Coastguard Worker             '6. The suite is executed.\n'
2728*cda5da8dSAndroid Build Coastguard Worker             '\n'
2729*cda5da8dSAndroid Build Coastguard Worker             '7. The context manager’s "__exit__()" method is invoked.  If an\n'
2730*cda5da8dSAndroid Build Coastguard Worker             '   exception caused the suite to be exited, its type, value, '
2731*cda5da8dSAndroid Build Coastguard Worker             'and\n'
2732*cda5da8dSAndroid Build Coastguard Worker             '   traceback are passed as arguments to "__exit__()". Otherwise, '
2733*cda5da8dSAndroid Build Coastguard Worker             'three\n'
2734*cda5da8dSAndroid Build Coastguard Worker             '   "None" arguments are supplied.\n'
2735*cda5da8dSAndroid Build Coastguard Worker             '\n'
2736*cda5da8dSAndroid Build Coastguard Worker             '   If the suite was exited due to an exception, and the return '
2737*cda5da8dSAndroid Build Coastguard Worker             'value\n'
2738*cda5da8dSAndroid Build Coastguard Worker             '   from the "__exit__()" method was false, the exception is '
2739*cda5da8dSAndroid Build Coastguard Worker             'reraised.\n'
2740*cda5da8dSAndroid Build Coastguard Worker             '   If the return value was true, the exception is suppressed, '
2741*cda5da8dSAndroid Build Coastguard Worker             'and\n'
2742*cda5da8dSAndroid Build Coastguard Worker             '   execution continues with the statement following the "with"\n'
2743*cda5da8dSAndroid Build Coastguard Worker             '   statement.\n'
2744*cda5da8dSAndroid Build Coastguard Worker             '\n'
2745*cda5da8dSAndroid Build Coastguard Worker             '   If the suite was exited for any reason other than an '
2746*cda5da8dSAndroid Build Coastguard Worker             'exception, the\n'
2747*cda5da8dSAndroid Build Coastguard Worker             '   return value from "__exit__()" is ignored, and execution '
2748*cda5da8dSAndroid Build Coastguard Worker             'proceeds\n'
2749*cda5da8dSAndroid Build Coastguard Worker             '   at the normal location for the kind of exit that was taken.\n'
2750*cda5da8dSAndroid Build Coastguard Worker             '\n'
2751*cda5da8dSAndroid Build Coastguard Worker             'The following code:\n'
2752*cda5da8dSAndroid Build Coastguard Worker             '\n'
2753*cda5da8dSAndroid Build Coastguard Worker             '   with EXPRESSION as TARGET:\n'
2754*cda5da8dSAndroid Build Coastguard Worker             '       SUITE\n'
2755*cda5da8dSAndroid Build Coastguard Worker             '\n'
2756*cda5da8dSAndroid Build Coastguard Worker             'is semantically equivalent to:\n'
2757*cda5da8dSAndroid Build Coastguard Worker             '\n'
2758*cda5da8dSAndroid Build Coastguard Worker             '   manager = (EXPRESSION)\n'
2759*cda5da8dSAndroid Build Coastguard Worker             '   enter = type(manager).__enter__\n'
2760*cda5da8dSAndroid Build Coastguard Worker             '   exit = type(manager).__exit__\n'
2761*cda5da8dSAndroid Build Coastguard Worker             '   value = enter(manager)\n'
2762*cda5da8dSAndroid Build Coastguard Worker             '   hit_except = False\n'
2763*cda5da8dSAndroid Build Coastguard Worker             '\n'
2764*cda5da8dSAndroid Build Coastguard Worker             '   try:\n'
2765*cda5da8dSAndroid Build Coastguard Worker             '       TARGET = value\n'
2766*cda5da8dSAndroid Build Coastguard Worker             '       SUITE\n'
2767*cda5da8dSAndroid Build Coastguard Worker             '   except:\n'
2768*cda5da8dSAndroid Build Coastguard Worker             '       hit_except = True\n'
2769*cda5da8dSAndroid Build Coastguard Worker             '       if not exit(manager, *sys.exc_info()):\n'
2770*cda5da8dSAndroid Build Coastguard Worker             '           raise\n'
2771*cda5da8dSAndroid Build Coastguard Worker             '   finally:\n'
2772*cda5da8dSAndroid Build Coastguard Worker             '       if not hit_except:\n'
2773*cda5da8dSAndroid Build Coastguard Worker             '           exit(manager, None, None, None)\n'
2774*cda5da8dSAndroid Build Coastguard Worker             '\n'
2775*cda5da8dSAndroid Build Coastguard Worker             'With more than one item, the context managers are processed as '
2776*cda5da8dSAndroid Build Coastguard Worker             'if\n'
2777*cda5da8dSAndroid Build Coastguard Worker             'multiple "with" statements were nested:\n'
2778*cda5da8dSAndroid Build Coastguard Worker             '\n'
2779*cda5da8dSAndroid Build Coastguard Worker             '   with A() as a, B() as b:\n'
2780*cda5da8dSAndroid Build Coastguard Worker             '       SUITE\n'
2781*cda5da8dSAndroid Build Coastguard Worker             '\n'
2782*cda5da8dSAndroid Build Coastguard Worker             'is semantically equivalent to:\n'
2783*cda5da8dSAndroid Build Coastguard Worker             '\n'
2784*cda5da8dSAndroid Build Coastguard Worker             '   with A() as a:\n'
2785*cda5da8dSAndroid Build Coastguard Worker             '       with B() as b:\n'
2786*cda5da8dSAndroid Build Coastguard Worker             '           SUITE\n'
2787*cda5da8dSAndroid Build Coastguard Worker             '\n'
2788*cda5da8dSAndroid Build Coastguard Worker             'You can also write multi-item context managers in multiple lines '
2789*cda5da8dSAndroid Build Coastguard Worker             'if\n'
2790*cda5da8dSAndroid Build Coastguard Worker             'the items are surrounded by parentheses. For example:\n'
2791*cda5da8dSAndroid Build Coastguard Worker             '\n'
2792*cda5da8dSAndroid Build Coastguard Worker             '   with (\n'
2793*cda5da8dSAndroid Build Coastguard Worker             '       A() as a,\n'
2794*cda5da8dSAndroid Build Coastguard Worker             '       B() as b,\n'
2795*cda5da8dSAndroid Build Coastguard Worker             '   ):\n'
2796*cda5da8dSAndroid Build Coastguard Worker             '       SUITE\n'
2797*cda5da8dSAndroid Build Coastguard Worker             '\n'
2798*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.1: Support for multiple context '
2799*cda5da8dSAndroid Build Coastguard Worker             'expressions.\n'
2800*cda5da8dSAndroid Build Coastguard Worker             '\n'
2801*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.10: Support for using grouping parentheses '
2802*cda5da8dSAndroid Build Coastguard Worker             'to\n'
2803*cda5da8dSAndroid Build Coastguard Worker             'break the statement in multiple lines.\n'
2804*cda5da8dSAndroid Build Coastguard Worker             '\n'
2805*cda5da8dSAndroid Build Coastguard Worker             'See also:\n'
2806*cda5da8dSAndroid Build Coastguard Worker             '\n'
2807*cda5da8dSAndroid Build Coastguard Worker             '  **PEP 343** - The “with” statement\n'
2808*cda5da8dSAndroid Build Coastguard Worker             '     The specification, background, and examples for the Python '
2809*cda5da8dSAndroid Build Coastguard Worker             '"with"\n'
2810*cda5da8dSAndroid Build Coastguard Worker             '     statement.\n'
2811*cda5da8dSAndroid Build Coastguard Worker             '\n'
2812*cda5da8dSAndroid Build Coastguard Worker             '\n'
2813*cda5da8dSAndroid Build Coastguard Worker             'The "match" statement\n'
2814*cda5da8dSAndroid Build Coastguard Worker             '=====================\n'
2815*cda5da8dSAndroid Build Coastguard Worker             '\n'
2816*cda5da8dSAndroid Build Coastguard Worker             'New in version 3.10.\n'
2817*cda5da8dSAndroid Build Coastguard Worker             '\n'
2818*cda5da8dSAndroid Build Coastguard Worker             'The match statement is used for pattern matching.  Syntax:\n'
2819*cda5da8dSAndroid Build Coastguard Worker             '\n'
2820*cda5da8dSAndroid Build Coastguard Worker             '   match_stmt   ::= \'match\' subject_expr ":" NEWLINE INDENT '
2821*cda5da8dSAndroid Build Coastguard Worker             'case_block+ DEDENT\n'
2822*cda5da8dSAndroid Build Coastguard Worker             '   subject_expr ::= star_named_expression "," '
2823*cda5da8dSAndroid Build Coastguard Worker             'star_named_expressions?\n'
2824*cda5da8dSAndroid Build Coastguard Worker             '                    | named_expression\n'
2825*cda5da8dSAndroid Build Coastguard Worker             '   case_block   ::= \'case\' patterns [guard] ":" block\n'
2826*cda5da8dSAndroid Build Coastguard Worker             '\n'
2827*cda5da8dSAndroid Build Coastguard Worker             'Note:\n'
2828*cda5da8dSAndroid Build Coastguard Worker             '\n'
2829*cda5da8dSAndroid Build Coastguard Worker             '  This section uses single quotes to denote soft keywords.\n'
2830*cda5da8dSAndroid Build Coastguard Worker             '\n'
2831*cda5da8dSAndroid Build Coastguard Worker             'Pattern matching takes a pattern as input (following "case") and '
2832*cda5da8dSAndroid Build Coastguard Worker             'a\n'
2833*cda5da8dSAndroid Build Coastguard Worker             'subject value (following "match").  The pattern (which may '
2834*cda5da8dSAndroid Build Coastguard Worker             'contain\n'
2835*cda5da8dSAndroid Build Coastguard Worker             'subpatterns) is matched against the subject value.  The outcomes '
2836*cda5da8dSAndroid Build Coastguard Worker             'are:\n'
2837*cda5da8dSAndroid Build Coastguard Worker             '\n'
2838*cda5da8dSAndroid Build Coastguard Worker             '* A match success or failure (also termed a pattern success or\n'
2839*cda5da8dSAndroid Build Coastguard Worker             '  failure).\n'
2840*cda5da8dSAndroid Build Coastguard Worker             '\n'
2841*cda5da8dSAndroid Build Coastguard Worker             '* Possible binding of matched values to a name.  The '
2842*cda5da8dSAndroid Build Coastguard Worker             'prerequisites for\n'
2843*cda5da8dSAndroid Build Coastguard Worker             '  this are further discussed below.\n'
2844*cda5da8dSAndroid Build Coastguard Worker             '\n'
2845*cda5da8dSAndroid Build Coastguard Worker             'The "match" and "case" keywords are soft keywords.\n'
2846*cda5da8dSAndroid Build Coastguard Worker             '\n'
2847*cda5da8dSAndroid Build Coastguard Worker             'See also:\n'
2848*cda5da8dSAndroid Build Coastguard Worker             '\n'
2849*cda5da8dSAndroid Build Coastguard Worker             '  * **PEP 634** – Structural Pattern Matching: Specification\n'
2850*cda5da8dSAndroid Build Coastguard Worker             '\n'
2851*cda5da8dSAndroid Build Coastguard Worker             '  * **PEP 636** – Structural Pattern Matching: Tutorial\n'
2852*cda5da8dSAndroid Build Coastguard Worker             '\n'
2853*cda5da8dSAndroid Build Coastguard Worker             '\n'
2854*cda5da8dSAndroid Build Coastguard Worker             'Overview\n'
2855*cda5da8dSAndroid Build Coastguard Worker             '--------\n'
2856*cda5da8dSAndroid Build Coastguard Worker             '\n'
2857*cda5da8dSAndroid Build Coastguard Worker             'Here’s an overview of the logical flow of a match statement:\n'
2858*cda5da8dSAndroid Build Coastguard Worker             '\n'
2859*cda5da8dSAndroid Build Coastguard Worker             '1. The subject expression "subject_expr" is evaluated and a '
2860*cda5da8dSAndroid Build Coastguard Worker             'resulting\n'
2861*cda5da8dSAndroid Build Coastguard Worker             '   subject value obtained. If the subject expression contains a '
2862*cda5da8dSAndroid Build Coastguard Worker             'comma,\n'
2863*cda5da8dSAndroid Build Coastguard Worker             '   a tuple is constructed using the standard rules.\n'
2864*cda5da8dSAndroid Build Coastguard Worker             '\n'
2865*cda5da8dSAndroid Build Coastguard Worker             '2. Each pattern in a "case_block" is attempted to match with '
2866*cda5da8dSAndroid Build Coastguard Worker             'the\n'
2867*cda5da8dSAndroid Build Coastguard Worker             '   subject value. The specific rules for success or failure are\n'
2868*cda5da8dSAndroid Build Coastguard Worker             '   described below. The match attempt can also bind some or all '
2869*cda5da8dSAndroid Build Coastguard Worker             'of the\n'
2870*cda5da8dSAndroid Build Coastguard Worker             '   standalone names within the pattern. The precise pattern '
2871*cda5da8dSAndroid Build Coastguard Worker             'binding\n'
2872*cda5da8dSAndroid Build Coastguard Worker             '   rules vary per pattern type and are specified below.  **Name\n'
2873*cda5da8dSAndroid Build Coastguard Worker             '   bindings made during a successful pattern match outlive the\n'
2874*cda5da8dSAndroid Build Coastguard Worker             '   executed block and can be used after the match statement**.\n'
2875*cda5da8dSAndroid Build Coastguard Worker             '\n'
2876*cda5da8dSAndroid Build Coastguard Worker             '      Note:\n'
2877*cda5da8dSAndroid Build Coastguard Worker             '\n'
2878*cda5da8dSAndroid Build Coastguard Worker             '        During failed pattern matches, some subpatterns may '
2879*cda5da8dSAndroid Build Coastguard Worker             'succeed.\n'
2880*cda5da8dSAndroid Build Coastguard Worker             '        Do not rely on bindings being made for a failed match.\n'
2881*cda5da8dSAndroid Build Coastguard Worker             '        Conversely, do not rely on variables remaining unchanged '
2882*cda5da8dSAndroid Build Coastguard Worker             'after\n'
2883*cda5da8dSAndroid Build Coastguard Worker             '        a failed match.  The exact behavior is dependent on\n'
2884*cda5da8dSAndroid Build Coastguard Worker             '        implementation and may vary.  This is an intentional '
2885*cda5da8dSAndroid Build Coastguard Worker             'decision\n'
2886*cda5da8dSAndroid Build Coastguard Worker             '        made to allow different implementations to add '
2887*cda5da8dSAndroid Build Coastguard Worker             'optimizations.\n'
2888*cda5da8dSAndroid Build Coastguard Worker             '\n'
2889*cda5da8dSAndroid Build Coastguard Worker             '3. If the pattern succeeds, the corresponding guard (if present) '
2890*cda5da8dSAndroid Build Coastguard Worker             'is\n'
2891*cda5da8dSAndroid Build Coastguard Worker             '   evaluated. In this case all name bindings are guaranteed to '
2892*cda5da8dSAndroid Build Coastguard Worker             'have\n'
2893*cda5da8dSAndroid Build Coastguard Worker             '   happened.\n'
2894*cda5da8dSAndroid Build Coastguard Worker             '\n'
2895*cda5da8dSAndroid Build Coastguard Worker             '   * If the guard evaluates as true or is missing, the "block" '
2896*cda5da8dSAndroid Build Coastguard Worker             'inside\n'
2897*cda5da8dSAndroid Build Coastguard Worker             '     "case_block" is executed.\n'
2898*cda5da8dSAndroid Build Coastguard Worker             '\n'
2899*cda5da8dSAndroid Build Coastguard Worker             '   * Otherwise, the next "case_block" is attempted as described '
2900*cda5da8dSAndroid Build Coastguard Worker             'above.\n'
2901*cda5da8dSAndroid Build Coastguard Worker             '\n'
2902*cda5da8dSAndroid Build Coastguard Worker             '   * If there are no further case blocks, the match statement '
2903*cda5da8dSAndroid Build Coastguard Worker             'is\n'
2904*cda5da8dSAndroid Build Coastguard Worker             '     completed.\n'
2905*cda5da8dSAndroid Build Coastguard Worker             '\n'
2906*cda5da8dSAndroid Build Coastguard Worker             'Note:\n'
2907*cda5da8dSAndroid Build Coastguard Worker             '\n'
2908*cda5da8dSAndroid Build Coastguard Worker             '  Users should generally never rely on a pattern being '
2909*cda5da8dSAndroid Build Coastguard Worker             'evaluated.\n'
2910*cda5da8dSAndroid Build Coastguard Worker             '  Depending on implementation, the interpreter may cache values '
2911*cda5da8dSAndroid Build Coastguard Worker             'or use\n'
2912*cda5da8dSAndroid Build Coastguard Worker             '  other optimizations which skip repeated evaluations.\n'
2913*cda5da8dSAndroid Build Coastguard Worker             '\n'
2914*cda5da8dSAndroid Build Coastguard Worker             'A sample match statement:\n'
2915*cda5da8dSAndroid Build Coastguard Worker             '\n'
2916*cda5da8dSAndroid Build Coastguard Worker             '   >>> flag = False\n'
2917*cda5da8dSAndroid Build Coastguard Worker             '   >>> match (100, 200):\n'
2918*cda5da8dSAndroid Build Coastguard Worker             '   ...    case (100, 300):  # Mismatch: 200 != 300\n'
2919*cda5da8dSAndroid Build Coastguard Worker             "   ...        print('Case 1')\n"
2920*cda5da8dSAndroid Build Coastguard Worker             '   ...    case (100, 200) if flag:  # Successful match, but '
2921*cda5da8dSAndroid Build Coastguard Worker             'guard fails\n'
2922*cda5da8dSAndroid Build Coastguard Worker             "   ...        print('Case 2')\n"
2923*cda5da8dSAndroid Build Coastguard Worker             '   ...    case (100, y):  # Matches and binds y to 200\n'
2924*cda5da8dSAndroid Build Coastguard Worker             "   ...        print(f'Case 3, y: {y}')\n"
2925*cda5da8dSAndroid Build Coastguard Worker             '   ...    case _:  # Pattern not attempted\n'
2926*cda5da8dSAndroid Build Coastguard Worker             "   ...        print('Case 4, I match anything!')\n"
2927*cda5da8dSAndroid Build Coastguard Worker             '   ...\n'
2928*cda5da8dSAndroid Build Coastguard Worker             '   Case 3, y: 200\n'
2929*cda5da8dSAndroid Build Coastguard Worker             '\n'
2930*cda5da8dSAndroid Build Coastguard Worker             'In this case, "if flag" is a guard.  Read more about that in the '
2931*cda5da8dSAndroid Build Coastguard Worker             'next\n'
2932*cda5da8dSAndroid Build Coastguard Worker             'section.\n'
2933*cda5da8dSAndroid Build Coastguard Worker             '\n'
2934*cda5da8dSAndroid Build Coastguard Worker             '\n'
2935*cda5da8dSAndroid Build Coastguard Worker             'Guards\n'
2936*cda5da8dSAndroid Build Coastguard Worker             '------\n'
2937*cda5da8dSAndroid Build Coastguard Worker             '\n'
2938*cda5da8dSAndroid Build Coastguard Worker             '   guard ::= "if" named_expression\n'
2939*cda5da8dSAndroid Build Coastguard Worker             '\n'
2940*cda5da8dSAndroid Build Coastguard Worker             'A "guard" (which is part of the "case") must succeed for code '
2941*cda5da8dSAndroid Build Coastguard Worker             'inside\n'
2942*cda5da8dSAndroid Build Coastguard Worker             'the "case" block to execute.  It takes the form: "if" followed '
2943*cda5da8dSAndroid Build Coastguard Worker             'by an\n'
2944*cda5da8dSAndroid Build Coastguard Worker             'expression.\n'
2945*cda5da8dSAndroid Build Coastguard Worker             '\n'
2946*cda5da8dSAndroid Build Coastguard Worker             'The logical flow of a "case" block with a "guard" follows:\n'
2947*cda5da8dSAndroid Build Coastguard Worker             '\n'
2948*cda5da8dSAndroid Build Coastguard Worker             '1. Check that the pattern in the "case" block succeeded.  If '
2949*cda5da8dSAndroid Build Coastguard Worker             'the\n'
2950*cda5da8dSAndroid Build Coastguard Worker             '   pattern failed, the "guard" is not evaluated and the next '
2951*cda5da8dSAndroid Build Coastguard Worker             '"case"\n'
2952*cda5da8dSAndroid Build Coastguard Worker             '   block is checked.\n'
2953*cda5da8dSAndroid Build Coastguard Worker             '\n'
2954*cda5da8dSAndroid Build Coastguard Worker             '2. If the pattern succeeded, evaluate the "guard".\n'
2955*cda5da8dSAndroid Build Coastguard Worker             '\n'
2956*cda5da8dSAndroid Build Coastguard Worker             '   * If the "guard" condition evaluates as true, the case block '
2957*cda5da8dSAndroid Build Coastguard Worker             'is\n'
2958*cda5da8dSAndroid Build Coastguard Worker             '     selected.\n'
2959*cda5da8dSAndroid Build Coastguard Worker             '\n'
2960*cda5da8dSAndroid Build Coastguard Worker             '   * If the "guard" condition evaluates as false, the case block '
2961*cda5da8dSAndroid Build Coastguard Worker             'is\n'
2962*cda5da8dSAndroid Build Coastguard Worker             '     not selected.\n'
2963*cda5da8dSAndroid Build Coastguard Worker             '\n'
2964*cda5da8dSAndroid Build Coastguard Worker             '   * If the "guard" raises an exception during evaluation, the\n'
2965*cda5da8dSAndroid Build Coastguard Worker             '     exception bubbles up.\n'
2966*cda5da8dSAndroid Build Coastguard Worker             '\n'
2967*cda5da8dSAndroid Build Coastguard Worker             'Guards are allowed to have side effects as they are '
2968*cda5da8dSAndroid Build Coastguard Worker             'expressions.\n'
2969*cda5da8dSAndroid Build Coastguard Worker             'Guard evaluation must proceed from the first to the last case '
2970*cda5da8dSAndroid Build Coastguard Worker             'block,\n'
2971*cda5da8dSAndroid Build Coastguard Worker             'one at a time, skipping case blocks whose pattern(s) don’t all\n'
2972*cda5da8dSAndroid Build Coastguard Worker             'succeed. (I.e., guard evaluation must happen in order.) Guard\n'
2973*cda5da8dSAndroid Build Coastguard Worker             'evaluation must stop once a case block is selected.\n'
2974*cda5da8dSAndroid Build Coastguard Worker             '\n'
2975*cda5da8dSAndroid Build Coastguard Worker             '\n'
2976*cda5da8dSAndroid Build Coastguard Worker             'Irrefutable Case Blocks\n'
2977*cda5da8dSAndroid Build Coastguard Worker             '-----------------------\n'
2978*cda5da8dSAndroid Build Coastguard Worker             '\n'
2979*cda5da8dSAndroid Build Coastguard Worker             'An irrefutable case block is a match-all case block.  A match\n'
2980*cda5da8dSAndroid Build Coastguard Worker             'statement may have at most one irrefutable case block, and it '
2981*cda5da8dSAndroid Build Coastguard Worker             'must be\n'
2982*cda5da8dSAndroid Build Coastguard Worker             'last.\n'
2983*cda5da8dSAndroid Build Coastguard Worker             '\n'
2984*cda5da8dSAndroid Build Coastguard Worker             'A case block is considered irrefutable if it has no guard and '
2985*cda5da8dSAndroid Build Coastguard Worker             'its\n'
2986*cda5da8dSAndroid Build Coastguard Worker             'pattern is irrefutable.  A pattern is considered irrefutable if '
2987*cda5da8dSAndroid Build Coastguard Worker             'we can\n'
2988*cda5da8dSAndroid Build Coastguard Worker             'prove from its syntax alone that it will always succeed.  Only '
2989*cda5da8dSAndroid Build Coastguard Worker             'the\n'
2990*cda5da8dSAndroid Build Coastguard Worker             'following patterns are irrefutable:\n'
2991*cda5da8dSAndroid Build Coastguard Worker             '\n'
2992*cda5da8dSAndroid Build Coastguard Worker             '* AS Patterns whose left-hand side is irrefutable\n'
2993*cda5da8dSAndroid Build Coastguard Worker             '\n'
2994*cda5da8dSAndroid Build Coastguard Worker             '* OR Patterns containing at least one irrefutable pattern\n'
2995*cda5da8dSAndroid Build Coastguard Worker             '\n'
2996*cda5da8dSAndroid Build Coastguard Worker             '* Capture Patterns\n'
2997*cda5da8dSAndroid Build Coastguard Worker             '\n'
2998*cda5da8dSAndroid Build Coastguard Worker             '* Wildcard Patterns\n'
2999*cda5da8dSAndroid Build Coastguard Worker             '\n'
3000*cda5da8dSAndroid Build Coastguard Worker             '* parenthesized irrefutable patterns\n'
3001*cda5da8dSAndroid Build Coastguard Worker             '\n'
3002*cda5da8dSAndroid Build Coastguard Worker             '\n'
3003*cda5da8dSAndroid Build Coastguard Worker             'Patterns\n'
3004*cda5da8dSAndroid Build Coastguard Worker             '--------\n'
3005*cda5da8dSAndroid Build Coastguard Worker             '\n'
3006*cda5da8dSAndroid Build Coastguard Worker             'Note:\n'
3007*cda5da8dSAndroid Build Coastguard Worker             '\n'
3008*cda5da8dSAndroid Build Coastguard Worker             '  This section uses grammar notations beyond standard EBNF:\n'
3009*cda5da8dSAndroid Build Coastguard Worker             '\n'
3010*cda5da8dSAndroid Build Coastguard Worker             '  * the notation "SEP.RULE+" is shorthand for "RULE (SEP '
3011*cda5da8dSAndroid Build Coastguard Worker             'RULE)*"\n'
3012*cda5da8dSAndroid Build Coastguard Worker             '\n'
3013*cda5da8dSAndroid Build Coastguard Worker             '  * the notation "!RULE" is shorthand for a negative lookahead\n'
3014*cda5da8dSAndroid Build Coastguard Worker             '    assertion\n'
3015*cda5da8dSAndroid Build Coastguard Worker             '\n'
3016*cda5da8dSAndroid Build Coastguard Worker             'The top-level syntax for "patterns" is:\n'
3017*cda5da8dSAndroid Build Coastguard Worker             '\n'
3018*cda5da8dSAndroid Build Coastguard Worker             '   patterns       ::= open_sequence_pattern | pattern\n'
3019*cda5da8dSAndroid Build Coastguard Worker             '   pattern        ::= as_pattern | or_pattern\n'
3020*cda5da8dSAndroid Build Coastguard Worker             '   closed_pattern ::= | literal_pattern\n'
3021*cda5da8dSAndroid Build Coastguard Worker             '                      | capture_pattern\n'
3022*cda5da8dSAndroid Build Coastguard Worker             '                      | wildcard_pattern\n'
3023*cda5da8dSAndroid Build Coastguard Worker             '                      | value_pattern\n'
3024*cda5da8dSAndroid Build Coastguard Worker             '                      | group_pattern\n'
3025*cda5da8dSAndroid Build Coastguard Worker             '                      | sequence_pattern\n'
3026*cda5da8dSAndroid Build Coastguard Worker             '                      | mapping_pattern\n'
3027*cda5da8dSAndroid Build Coastguard Worker             '                      | class_pattern\n'
3028*cda5da8dSAndroid Build Coastguard Worker             '\n'
3029*cda5da8dSAndroid Build Coastguard Worker             'The descriptions below will include a description “in simple '
3030*cda5da8dSAndroid Build Coastguard Worker             'terms” of\n'
3031*cda5da8dSAndroid Build Coastguard Worker             'what a pattern does for illustration purposes (credits to '
3032*cda5da8dSAndroid Build Coastguard Worker             'Raymond\n'
3033*cda5da8dSAndroid Build Coastguard Worker             'Hettinger for a document that inspired most of the '
3034*cda5da8dSAndroid Build Coastguard Worker             'descriptions). Note\n'
3035*cda5da8dSAndroid Build Coastguard Worker             'that these descriptions are purely for illustration purposes and '
3036*cda5da8dSAndroid Build Coastguard Worker             '**may\n'
3037*cda5da8dSAndroid Build Coastguard Worker             'not** reflect the underlying implementation.  Furthermore, they '
3038*cda5da8dSAndroid Build Coastguard Worker             'do not\n'
3039*cda5da8dSAndroid Build Coastguard Worker             'cover all valid forms.\n'
3040*cda5da8dSAndroid Build Coastguard Worker             '\n'
3041*cda5da8dSAndroid Build Coastguard Worker             '\n'
3042*cda5da8dSAndroid Build Coastguard Worker             'OR Patterns\n'
3043*cda5da8dSAndroid Build Coastguard Worker             '~~~~~~~~~~~\n'
3044*cda5da8dSAndroid Build Coastguard Worker             '\n'
3045*cda5da8dSAndroid Build Coastguard Worker             'An OR pattern is two or more patterns separated by vertical bars '
3046*cda5da8dSAndroid Build Coastguard Worker             '"|".\n'
3047*cda5da8dSAndroid Build Coastguard Worker             'Syntax:\n'
3048*cda5da8dSAndroid Build Coastguard Worker             '\n'
3049*cda5da8dSAndroid Build Coastguard Worker             '   or_pattern ::= "|".closed_pattern+\n'
3050*cda5da8dSAndroid Build Coastguard Worker             '\n'
3051*cda5da8dSAndroid Build Coastguard Worker             'Only the final subpattern may be irrefutable, and each '
3052*cda5da8dSAndroid Build Coastguard Worker             'subpattern must\n'
3053*cda5da8dSAndroid Build Coastguard Worker             'bind the same set of names to avoid ambiguity.\n'
3054*cda5da8dSAndroid Build Coastguard Worker             '\n'
3055*cda5da8dSAndroid Build Coastguard Worker             'An OR pattern matches each of its subpatterns in turn to the '
3056*cda5da8dSAndroid Build Coastguard Worker             'subject\n'
3057*cda5da8dSAndroid Build Coastguard Worker             'value, until one succeeds.  The OR pattern is then considered\n'
3058*cda5da8dSAndroid Build Coastguard Worker             'successful.  Otherwise, if none of the subpatterns succeed, the '
3059*cda5da8dSAndroid Build Coastguard Worker             'OR\n'
3060*cda5da8dSAndroid Build Coastguard Worker             'pattern fails.\n'
3061*cda5da8dSAndroid Build Coastguard Worker             '\n'
3062*cda5da8dSAndroid Build Coastguard Worker             'In simple terms, "P1 | P2 | ..." will try to match "P1", if it '
3063*cda5da8dSAndroid Build Coastguard Worker             'fails\n'
3064*cda5da8dSAndroid Build Coastguard Worker             'it will try to match "P2", succeeding immediately if any '
3065*cda5da8dSAndroid Build Coastguard Worker             'succeeds,\n'
3066*cda5da8dSAndroid Build Coastguard Worker             'failing otherwise.\n'
3067*cda5da8dSAndroid Build Coastguard Worker             '\n'
3068*cda5da8dSAndroid Build Coastguard Worker             '\n'
3069*cda5da8dSAndroid Build Coastguard Worker             'AS Patterns\n'
3070*cda5da8dSAndroid Build Coastguard Worker             '~~~~~~~~~~~\n'
3071*cda5da8dSAndroid Build Coastguard Worker             '\n'
3072*cda5da8dSAndroid Build Coastguard Worker             'An AS pattern matches an OR pattern on the left of the "as" '
3073*cda5da8dSAndroid Build Coastguard Worker             'keyword\n'
3074*cda5da8dSAndroid Build Coastguard Worker             'against a subject.  Syntax:\n'
3075*cda5da8dSAndroid Build Coastguard Worker             '\n'
3076*cda5da8dSAndroid Build Coastguard Worker             '   as_pattern ::= or_pattern "as" capture_pattern\n'
3077*cda5da8dSAndroid Build Coastguard Worker             '\n'
3078*cda5da8dSAndroid Build Coastguard Worker             'If the OR pattern fails, the AS pattern fails.  Otherwise, the '
3079*cda5da8dSAndroid Build Coastguard Worker             'AS\n'
3080*cda5da8dSAndroid Build Coastguard Worker             'pattern binds the subject to the name on the right of the as '
3081*cda5da8dSAndroid Build Coastguard Worker             'keyword\n'
3082*cda5da8dSAndroid Build Coastguard Worker             'and succeeds. "capture_pattern" cannot be a "_".\n'
3083*cda5da8dSAndroid Build Coastguard Worker             '\n'
3084*cda5da8dSAndroid Build Coastguard Worker             'In simple terms "P as NAME" will match with "P", and on success '
3085*cda5da8dSAndroid Build Coastguard Worker             'it\n'
3086*cda5da8dSAndroid Build Coastguard Worker             'will set "NAME = <subject>".\n'
3087*cda5da8dSAndroid Build Coastguard Worker             '\n'
3088*cda5da8dSAndroid Build Coastguard Worker             '\n'
3089*cda5da8dSAndroid Build Coastguard Worker             'Literal Patterns\n'
3090*cda5da8dSAndroid Build Coastguard Worker             '~~~~~~~~~~~~~~~~\n'
3091*cda5da8dSAndroid Build Coastguard Worker             '\n'
3092*cda5da8dSAndroid Build Coastguard Worker             'A literal pattern corresponds to most literals in Python.  '
3093*cda5da8dSAndroid Build Coastguard Worker             'Syntax:\n'
3094*cda5da8dSAndroid Build Coastguard Worker             '\n'
3095*cda5da8dSAndroid Build Coastguard Worker             '   literal_pattern ::= signed_number\n'
3096*cda5da8dSAndroid Build Coastguard Worker             '                       | signed_number "+" NUMBER\n'
3097*cda5da8dSAndroid Build Coastguard Worker             '                       | signed_number "-" NUMBER\n'
3098*cda5da8dSAndroid Build Coastguard Worker             '                       | strings\n'
3099*cda5da8dSAndroid Build Coastguard Worker             '                       | "None"\n'
3100*cda5da8dSAndroid Build Coastguard Worker             '                       | "True"\n'
3101*cda5da8dSAndroid Build Coastguard Worker             '                       | "False"\n'
3102*cda5da8dSAndroid Build Coastguard Worker             '                       | signed_number: NUMBER | "-" NUMBER\n'
3103*cda5da8dSAndroid Build Coastguard Worker             '\n'
3104*cda5da8dSAndroid Build Coastguard Worker             'The rule "strings" and the token "NUMBER" are defined in the '
3105*cda5da8dSAndroid Build Coastguard Worker             'standard\n'
3106*cda5da8dSAndroid Build Coastguard Worker             'Python grammar.  Triple-quoted strings are supported.  Raw '
3107*cda5da8dSAndroid Build Coastguard Worker             'strings and\n'
3108*cda5da8dSAndroid Build Coastguard Worker             'byte strings are supported.  Formatted string literals are not\n'
3109*cda5da8dSAndroid Build Coastguard Worker             'supported.\n'
3110*cda5da8dSAndroid Build Coastguard Worker             '\n'
3111*cda5da8dSAndroid Build Coastguard Worker             'The forms "signed_number \'+\' NUMBER" and "signed_number \'-\' '
3112*cda5da8dSAndroid Build Coastguard Worker             'NUMBER"\n'
3113*cda5da8dSAndroid Build Coastguard Worker             'are for expressing complex numbers; they require a real number '
3114*cda5da8dSAndroid Build Coastguard Worker             'on the\n'
3115*cda5da8dSAndroid Build Coastguard Worker             'left and an imaginary number on the right. E.g. "3 + 4j".\n'
3116*cda5da8dSAndroid Build Coastguard Worker             '\n'
3117*cda5da8dSAndroid Build Coastguard Worker             'In simple terms, "LITERAL" will succeed only if "<subject> ==\n'
3118*cda5da8dSAndroid Build Coastguard Worker             'LITERAL". For the singletons "None", "True" and "False", the '
3119*cda5da8dSAndroid Build Coastguard Worker             '"is"\n'
3120*cda5da8dSAndroid Build Coastguard Worker             'operator is used.\n'
3121*cda5da8dSAndroid Build Coastguard Worker             '\n'
3122*cda5da8dSAndroid Build Coastguard Worker             '\n'
3123*cda5da8dSAndroid Build Coastguard Worker             'Capture Patterns\n'
3124*cda5da8dSAndroid Build Coastguard Worker             '~~~~~~~~~~~~~~~~\n'
3125*cda5da8dSAndroid Build Coastguard Worker             '\n'
3126*cda5da8dSAndroid Build Coastguard Worker             'A capture pattern binds the subject value to a name. Syntax:\n'
3127*cda5da8dSAndroid Build Coastguard Worker             '\n'
3128*cda5da8dSAndroid Build Coastguard Worker             "   capture_pattern ::= !'_' NAME\n"
3129*cda5da8dSAndroid Build Coastguard Worker             '\n'
3130*cda5da8dSAndroid Build Coastguard Worker             'A single underscore "_" is not a capture pattern (this is what '
3131*cda5da8dSAndroid Build Coastguard Worker             '"!\'_\'"\n'
3132*cda5da8dSAndroid Build Coastguard Worker             'expresses). It is instead treated as a "wildcard_pattern".\n'
3133*cda5da8dSAndroid Build Coastguard Worker             '\n'
3134*cda5da8dSAndroid Build Coastguard Worker             'In a given pattern, a given name can only be bound once.  E.g. '
3135*cda5da8dSAndroid Build Coastguard Worker             '"case\n'
3136*cda5da8dSAndroid Build Coastguard Worker             'x, x: ..." is invalid while "case [x] | x: ..." is allowed.\n'
3137*cda5da8dSAndroid Build Coastguard Worker             '\n'
3138*cda5da8dSAndroid Build Coastguard Worker             'Capture patterns always succeed.  The binding follows scoping '
3139*cda5da8dSAndroid Build Coastguard Worker             'rules\n'
3140*cda5da8dSAndroid Build Coastguard Worker             'established by the assignment expression operator in **PEP '
3141*cda5da8dSAndroid Build Coastguard Worker             '572**; the\n'
3142*cda5da8dSAndroid Build Coastguard Worker             'name becomes a local variable in the closest containing function '
3143*cda5da8dSAndroid Build Coastguard Worker             'scope\n'
3144*cda5da8dSAndroid Build Coastguard Worker             'unless there’s an applicable "global" or "nonlocal" statement.\n'
3145*cda5da8dSAndroid Build Coastguard Worker             '\n'
3146*cda5da8dSAndroid Build Coastguard Worker             'In simple terms "NAME" will always succeed and it will set "NAME '
3147*cda5da8dSAndroid Build Coastguard Worker             '=\n'
3148*cda5da8dSAndroid Build Coastguard Worker             '<subject>".\n'
3149*cda5da8dSAndroid Build Coastguard Worker             '\n'
3150*cda5da8dSAndroid Build Coastguard Worker             '\n'
3151*cda5da8dSAndroid Build Coastguard Worker             'Wildcard Patterns\n'
3152*cda5da8dSAndroid Build Coastguard Worker             '~~~~~~~~~~~~~~~~~\n'
3153*cda5da8dSAndroid Build Coastguard Worker             '\n'
3154*cda5da8dSAndroid Build Coastguard Worker             'A wildcard pattern always succeeds (matches anything) and binds '
3155*cda5da8dSAndroid Build Coastguard Worker             'no\n'
3156*cda5da8dSAndroid Build Coastguard Worker             'name.  Syntax:\n'
3157*cda5da8dSAndroid Build Coastguard Worker             '\n'
3158*cda5da8dSAndroid Build Coastguard Worker             "   wildcard_pattern ::= '_'\n"
3159*cda5da8dSAndroid Build Coastguard Worker             '\n'
3160*cda5da8dSAndroid Build Coastguard Worker             '"_" is a soft keyword within any pattern, but only within '
3161*cda5da8dSAndroid Build Coastguard Worker             'patterns.\n'
3162*cda5da8dSAndroid Build Coastguard Worker             'It is an identifier, as usual, even within "match" subject\n'
3163*cda5da8dSAndroid Build Coastguard Worker             'expressions, "guard"s, and "case" blocks.\n'
3164*cda5da8dSAndroid Build Coastguard Worker             '\n'
3165*cda5da8dSAndroid Build Coastguard Worker             'In simple terms, "_" will always succeed.\n'
3166*cda5da8dSAndroid Build Coastguard Worker             '\n'
3167*cda5da8dSAndroid Build Coastguard Worker             '\n'
3168*cda5da8dSAndroid Build Coastguard Worker             'Value Patterns\n'
3169*cda5da8dSAndroid Build Coastguard Worker             '~~~~~~~~~~~~~~\n'
3170*cda5da8dSAndroid Build Coastguard Worker             '\n'
3171*cda5da8dSAndroid Build Coastguard Worker             'A value pattern represents a named value in Python. Syntax:\n'
3172*cda5da8dSAndroid Build Coastguard Worker             '\n'
3173*cda5da8dSAndroid Build Coastguard Worker             '   value_pattern ::= attr\n'
3174*cda5da8dSAndroid Build Coastguard Worker             '   attr          ::= name_or_attr "." NAME\n'
3175*cda5da8dSAndroid Build Coastguard Worker             '   name_or_attr  ::= attr | NAME\n'
3176*cda5da8dSAndroid Build Coastguard Worker             '\n'
3177*cda5da8dSAndroid Build Coastguard Worker             'The dotted name in the pattern is looked up using standard '
3178*cda5da8dSAndroid Build Coastguard Worker             'Python name\n'
3179*cda5da8dSAndroid Build Coastguard Worker             'resolution rules.  The pattern succeeds if the value found '
3180*cda5da8dSAndroid Build Coastguard Worker             'compares\n'
3181*cda5da8dSAndroid Build Coastguard Worker             'equal to the subject value (using the "==" equality operator).\n'
3182*cda5da8dSAndroid Build Coastguard Worker             '\n'
3183*cda5da8dSAndroid Build Coastguard Worker             'In simple terms "NAME1.NAME2" will succeed only if "<subject> '
3184*cda5da8dSAndroid Build Coastguard Worker             '==\n'
3185*cda5da8dSAndroid Build Coastguard Worker             'NAME1.NAME2"\n'
3186*cda5da8dSAndroid Build Coastguard Worker             '\n'
3187*cda5da8dSAndroid Build Coastguard Worker             'Note:\n'
3188*cda5da8dSAndroid Build Coastguard Worker             '\n'
3189*cda5da8dSAndroid Build Coastguard Worker             '  If the same value occurs multiple times in the same match '
3190*cda5da8dSAndroid Build Coastguard Worker             'statement,\n'
3191*cda5da8dSAndroid Build Coastguard Worker             '  the interpreter may cache the first value found and reuse it '
3192*cda5da8dSAndroid Build Coastguard Worker             'rather\n'
3193*cda5da8dSAndroid Build Coastguard Worker             '  than repeat the same lookup.  This cache is strictly tied to a '
3194*cda5da8dSAndroid Build Coastguard Worker             'given\n'
3195*cda5da8dSAndroid Build Coastguard Worker             '  execution of a given match statement.\n'
3196*cda5da8dSAndroid Build Coastguard Worker             '\n'
3197*cda5da8dSAndroid Build Coastguard Worker             '\n'
3198*cda5da8dSAndroid Build Coastguard Worker             'Group Patterns\n'
3199*cda5da8dSAndroid Build Coastguard Worker             '~~~~~~~~~~~~~~\n'
3200*cda5da8dSAndroid Build Coastguard Worker             '\n'
3201*cda5da8dSAndroid Build Coastguard Worker             'A group pattern allows users to add parentheses around patterns '
3202*cda5da8dSAndroid Build Coastguard Worker             'to\n'
3203*cda5da8dSAndroid Build Coastguard Worker             'emphasize the intended grouping.  Otherwise, it has no '
3204*cda5da8dSAndroid Build Coastguard Worker             'additional\n'
3205*cda5da8dSAndroid Build Coastguard Worker             'syntax. Syntax:\n'
3206*cda5da8dSAndroid Build Coastguard Worker             '\n'
3207*cda5da8dSAndroid Build Coastguard Worker             '   group_pattern ::= "(" pattern ")"\n'
3208*cda5da8dSAndroid Build Coastguard Worker             '\n'
3209*cda5da8dSAndroid Build Coastguard Worker             'In simple terms "(P)" has the same effect as "P".\n'
3210*cda5da8dSAndroid Build Coastguard Worker             '\n'
3211*cda5da8dSAndroid Build Coastguard Worker             '\n'
3212*cda5da8dSAndroid Build Coastguard Worker             'Sequence Patterns\n'
3213*cda5da8dSAndroid Build Coastguard Worker             '~~~~~~~~~~~~~~~~~\n'
3214*cda5da8dSAndroid Build Coastguard Worker             '\n'
3215*cda5da8dSAndroid Build Coastguard Worker             'A sequence pattern contains several subpatterns to be matched '
3216*cda5da8dSAndroid Build Coastguard Worker             'against\n'
3217*cda5da8dSAndroid Build Coastguard Worker             'sequence elements. The syntax is similar to the unpacking of a '
3218*cda5da8dSAndroid Build Coastguard Worker             'list or\n'
3219*cda5da8dSAndroid Build Coastguard Worker             'tuple.\n'
3220*cda5da8dSAndroid Build Coastguard Worker             '\n'
3221*cda5da8dSAndroid Build Coastguard Worker             '   sequence_pattern       ::= "[" [maybe_sequence_pattern] "]"\n'
3222*cda5da8dSAndroid Build Coastguard Worker             '                        | "(" [open_sequence_pattern] ")"\n'
3223*cda5da8dSAndroid Build Coastguard Worker             '   open_sequence_pattern  ::= maybe_star_pattern "," '
3224*cda5da8dSAndroid Build Coastguard Worker             '[maybe_sequence_pattern]\n'
3225*cda5da8dSAndroid Build Coastguard Worker             '   maybe_sequence_pattern ::= ",".maybe_star_pattern+ ","?\n'
3226*cda5da8dSAndroid Build Coastguard Worker             '   maybe_star_pattern     ::= star_pattern | pattern\n'
3227*cda5da8dSAndroid Build Coastguard Worker             '   star_pattern           ::= "*" (capture_pattern | '
3228*cda5da8dSAndroid Build Coastguard Worker             'wildcard_pattern)\n'
3229*cda5da8dSAndroid Build Coastguard Worker             '\n'
3230*cda5da8dSAndroid Build Coastguard Worker             'There is no difference if parentheses  or square brackets are '
3231*cda5da8dSAndroid Build Coastguard Worker             'used for\n'
3232*cda5da8dSAndroid Build Coastguard Worker             'sequence patterns (i.e. "(...)" vs "[...]" ).\n'
3233*cda5da8dSAndroid Build Coastguard Worker             '\n'
3234*cda5da8dSAndroid Build Coastguard Worker             'Note:\n'
3235*cda5da8dSAndroid Build Coastguard Worker             '\n'
3236*cda5da8dSAndroid Build Coastguard Worker             '  A single pattern enclosed in parentheses without a trailing '
3237*cda5da8dSAndroid Build Coastguard Worker             'comma\n'
3238*cda5da8dSAndroid Build Coastguard Worker             '  (e.g. "(3 | 4)") is a group pattern. While a single pattern '
3239*cda5da8dSAndroid Build Coastguard Worker             'enclosed\n'
3240*cda5da8dSAndroid Build Coastguard Worker             '  in square brackets (e.g. "[3 | 4]") is still a sequence '
3241*cda5da8dSAndroid Build Coastguard Worker             'pattern.\n'
3242*cda5da8dSAndroid Build Coastguard Worker             '\n'
3243*cda5da8dSAndroid Build Coastguard Worker             'At most one star subpattern may be in a sequence pattern.  The '
3244*cda5da8dSAndroid Build Coastguard Worker             'star\n'
3245*cda5da8dSAndroid Build Coastguard Worker             'subpattern may occur in any position. If no star subpattern is\n'
3246*cda5da8dSAndroid Build Coastguard Worker             'present, the sequence pattern is a fixed-length sequence '
3247*cda5da8dSAndroid Build Coastguard Worker             'pattern;\n'
3248*cda5da8dSAndroid Build Coastguard Worker             'otherwise it is a variable-length sequence pattern.\n'
3249*cda5da8dSAndroid Build Coastguard Worker             '\n'
3250*cda5da8dSAndroid Build Coastguard Worker             'The following is the logical flow for matching a sequence '
3251*cda5da8dSAndroid Build Coastguard Worker             'pattern\n'
3252*cda5da8dSAndroid Build Coastguard Worker             'against a subject value:\n'
3253*cda5da8dSAndroid Build Coastguard Worker             '\n'
3254*cda5da8dSAndroid Build Coastguard Worker             '1. If the subject value is not a sequence [2], the sequence '
3255*cda5da8dSAndroid Build Coastguard Worker             'pattern\n'
3256*cda5da8dSAndroid Build Coastguard Worker             '   fails.\n'
3257*cda5da8dSAndroid Build Coastguard Worker             '\n'
3258*cda5da8dSAndroid Build Coastguard Worker             '2. If the subject value is an instance of "str", "bytes" or\n'
3259*cda5da8dSAndroid Build Coastguard Worker             '   "bytearray" the sequence pattern fails.\n'
3260*cda5da8dSAndroid Build Coastguard Worker             '\n'
3261*cda5da8dSAndroid Build Coastguard Worker             '3. The subsequent steps depend on whether the sequence pattern '
3262*cda5da8dSAndroid Build Coastguard Worker             'is\n'
3263*cda5da8dSAndroid Build Coastguard Worker             '   fixed or variable-length.\n'
3264*cda5da8dSAndroid Build Coastguard Worker             '\n'
3265*cda5da8dSAndroid Build Coastguard Worker             '   If the sequence pattern is fixed-length:\n'
3266*cda5da8dSAndroid Build Coastguard Worker             '\n'
3267*cda5da8dSAndroid Build Coastguard Worker             '   1. If the length of the subject sequence is not equal to the '
3268*cda5da8dSAndroid Build Coastguard Worker             'number\n'
3269*cda5da8dSAndroid Build Coastguard Worker             '      of subpatterns, the sequence pattern fails\n'
3270*cda5da8dSAndroid Build Coastguard Worker             '\n'
3271*cda5da8dSAndroid Build Coastguard Worker             '   2. Subpatterns in the sequence pattern are matched to their\n'
3272*cda5da8dSAndroid Build Coastguard Worker             '      corresponding items in the subject sequence from left to '
3273*cda5da8dSAndroid Build Coastguard Worker             'right.\n'
3274*cda5da8dSAndroid Build Coastguard Worker             '      Matching stops as soon as a subpattern fails.  If all\n'
3275*cda5da8dSAndroid Build Coastguard Worker             '      subpatterns succeed in matching their corresponding item, '
3276*cda5da8dSAndroid Build Coastguard Worker             'the\n'
3277*cda5da8dSAndroid Build Coastguard Worker             '      sequence pattern succeeds.\n'
3278*cda5da8dSAndroid Build Coastguard Worker             '\n'
3279*cda5da8dSAndroid Build Coastguard Worker             '   Otherwise, if the sequence pattern is variable-length:\n'
3280*cda5da8dSAndroid Build Coastguard Worker             '\n'
3281*cda5da8dSAndroid Build Coastguard Worker             '   1. If the length of the subject sequence is less than the '
3282*cda5da8dSAndroid Build Coastguard Worker             'number of\n'
3283*cda5da8dSAndroid Build Coastguard Worker             '      non-star subpatterns, the sequence pattern fails.\n'
3284*cda5da8dSAndroid Build Coastguard Worker             '\n'
3285*cda5da8dSAndroid Build Coastguard Worker             '   2. The leading non-star subpatterns are matched to their\n'
3286*cda5da8dSAndroid Build Coastguard Worker             '      corresponding items as for fixed-length sequences.\n'
3287*cda5da8dSAndroid Build Coastguard Worker             '\n'
3288*cda5da8dSAndroid Build Coastguard Worker             '   3. If the previous step succeeds, the star subpattern matches '
3289*cda5da8dSAndroid Build Coastguard Worker             'a\n'
3290*cda5da8dSAndroid Build Coastguard Worker             '      list formed of the remaining subject items, excluding the\n'
3291*cda5da8dSAndroid Build Coastguard Worker             '      remaining items corresponding to non-star subpatterns '
3292*cda5da8dSAndroid Build Coastguard Worker             'following\n'
3293*cda5da8dSAndroid Build Coastguard Worker             '      the star subpattern.\n'
3294*cda5da8dSAndroid Build Coastguard Worker             '\n'
3295*cda5da8dSAndroid Build Coastguard Worker             '   4. Remaining non-star subpatterns are matched to their\n'
3296*cda5da8dSAndroid Build Coastguard Worker             '      corresponding subject items, as for a fixed-length '
3297*cda5da8dSAndroid Build Coastguard Worker             'sequence.\n'
3298*cda5da8dSAndroid Build Coastguard Worker             '\n'
3299*cda5da8dSAndroid Build Coastguard Worker             '   Note:\n'
3300*cda5da8dSAndroid Build Coastguard Worker             '\n'
3301*cda5da8dSAndroid Build Coastguard Worker             '     The length of the subject sequence is obtained via "len()" '
3302*cda5da8dSAndroid Build Coastguard Worker             '(i.e.\n'
3303*cda5da8dSAndroid Build Coastguard Worker             '     via the "__len__()" protocol).  This length may be cached '
3304*cda5da8dSAndroid Build Coastguard Worker             'by the\n'
3305*cda5da8dSAndroid Build Coastguard Worker             '     interpreter in a similar manner as value patterns.\n'
3306*cda5da8dSAndroid Build Coastguard Worker             '\n'
3307*cda5da8dSAndroid Build Coastguard Worker             'In simple terms "[P1, P2, P3," … ", P<N>]" matches only if all '
3308*cda5da8dSAndroid Build Coastguard Worker             'the\n'
3309*cda5da8dSAndroid Build Coastguard Worker             'following happens:\n'
3310*cda5da8dSAndroid Build Coastguard Worker             '\n'
3311*cda5da8dSAndroid Build Coastguard Worker             '* check "<subject>" is a sequence\n'
3312*cda5da8dSAndroid Build Coastguard Worker             '\n'
3313*cda5da8dSAndroid Build Coastguard Worker             '* "len(subject) == <N>"\n'
3314*cda5da8dSAndroid Build Coastguard Worker             '\n'
3315*cda5da8dSAndroid Build Coastguard Worker             '* "P1" matches "<subject>[0]" (note that this match can also '
3316*cda5da8dSAndroid Build Coastguard Worker             'bind\n'
3317*cda5da8dSAndroid Build Coastguard Worker             '  names)\n'
3318*cda5da8dSAndroid Build Coastguard Worker             '\n'
3319*cda5da8dSAndroid Build Coastguard Worker             '* "P2" matches "<subject>[1]" (note that this match can also '
3320*cda5da8dSAndroid Build Coastguard Worker             'bind\n'
3321*cda5da8dSAndroid Build Coastguard Worker             '  names)\n'
3322*cda5da8dSAndroid Build Coastguard Worker             '\n'
3323*cda5da8dSAndroid Build Coastguard Worker             '* … and so on for the corresponding pattern/element.\n'
3324*cda5da8dSAndroid Build Coastguard Worker             '\n'
3325*cda5da8dSAndroid Build Coastguard Worker             '\n'
3326*cda5da8dSAndroid Build Coastguard Worker             'Mapping Patterns\n'
3327*cda5da8dSAndroid Build Coastguard Worker             '~~~~~~~~~~~~~~~~\n'
3328*cda5da8dSAndroid Build Coastguard Worker             '\n'
3329*cda5da8dSAndroid Build Coastguard Worker             'A mapping pattern contains one or more key-value patterns.  The '
3330*cda5da8dSAndroid Build Coastguard Worker             'syntax\n'
3331*cda5da8dSAndroid Build Coastguard Worker             'is similar to the construction of a dictionary. Syntax:\n'
3332*cda5da8dSAndroid Build Coastguard Worker             '\n'
3333*cda5da8dSAndroid Build Coastguard Worker             '   mapping_pattern     ::= "{" [items_pattern] "}"\n'
3334*cda5da8dSAndroid Build Coastguard Worker             '   items_pattern       ::= ",".key_value_pattern+ ","?\n'
3335*cda5da8dSAndroid Build Coastguard Worker             '   key_value_pattern   ::= (literal_pattern | value_pattern) ":" '
3336*cda5da8dSAndroid Build Coastguard Worker             'pattern\n'
3337*cda5da8dSAndroid Build Coastguard Worker             '                         | double_star_pattern\n'
3338*cda5da8dSAndroid Build Coastguard Worker             '   double_star_pattern ::= "**" capture_pattern\n'
3339*cda5da8dSAndroid Build Coastguard Worker             '\n'
3340*cda5da8dSAndroid Build Coastguard Worker             'At most one double star pattern may be in a mapping pattern.  '
3341*cda5da8dSAndroid Build Coastguard Worker             'The\n'
3342*cda5da8dSAndroid Build Coastguard Worker             'double star pattern must be the last subpattern in the mapping\n'
3343*cda5da8dSAndroid Build Coastguard Worker             'pattern.\n'
3344*cda5da8dSAndroid Build Coastguard Worker             '\n'
3345*cda5da8dSAndroid Build Coastguard Worker             'Duplicate keys in mapping patterns are disallowed. Duplicate '
3346*cda5da8dSAndroid Build Coastguard Worker             'literal\n'
3347*cda5da8dSAndroid Build Coastguard Worker             'keys will raise a "SyntaxError". Two keys that otherwise have '
3348*cda5da8dSAndroid Build Coastguard Worker             'the same\n'
3349*cda5da8dSAndroid Build Coastguard Worker             'value will raise a "ValueError" at runtime.\n'
3350*cda5da8dSAndroid Build Coastguard Worker             '\n'
3351*cda5da8dSAndroid Build Coastguard Worker             'The following is the logical flow for matching a mapping '
3352*cda5da8dSAndroid Build Coastguard Worker             'pattern\n'
3353*cda5da8dSAndroid Build Coastguard Worker             'against a subject value:\n'
3354*cda5da8dSAndroid Build Coastguard Worker             '\n'
3355*cda5da8dSAndroid Build Coastguard Worker             '1. If the subject value is not a mapping [3],the mapping '
3356*cda5da8dSAndroid Build Coastguard Worker             'pattern\n'
3357*cda5da8dSAndroid Build Coastguard Worker             '   fails.\n'
3358*cda5da8dSAndroid Build Coastguard Worker             '\n'
3359*cda5da8dSAndroid Build Coastguard Worker             '2. If every key given in the mapping pattern is present in the '
3360*cda5da8dSAndroid Build Coastguard Worker             'subject\n'
3361*cda5da8dSAndroid Build Coastguard Worker             '   mapping, and the pattern for each key matches the '
3362*cda5da8dSAndroid Build Coastguard Worker             'corresponding\n'
3363*cda5da8dSAndroid Build Coastguard Worker             '   item of the subject mapping, the mapping pattern succeeds.\n'
3364*cda5da8dSAndroid Build Coastguard Worker             '\n'
3365*cda5da8dSAndroid Build Coastguard Worker             '3. If duplicate keys are detected in the mapping pattern, the '
3366*cda5da8dSAndroid Build Coastguard Worker             'pattern\n'
3367*cda5da8dSAndroid Build Coastguard Worker             '   is considered invalid. A "SyntaxError" is raised for '
3368*cda5da8dSAndroid Build Coastguard Worker             'duplicate\n'
3369*cda5da8dSAndroid Build Coastguard Worker             '   literal values; or a "ValueError" for named keys of the same '
3370*cda5da8dSAndroid Build Coastguard Worker             'value.\n'
3371*cda5da8dSAndroid Build Coastguard Worker             '\n'
3372*cda5da8dSAndroid Build Coastguard Worker             'Note:\n'
3373*cda5da8dSAndroid Build Coastguard Worker             '\n'
3374*cda5da8dSAndroid Build Coastguard Worker             '  Key-value pairs are matched using the two-argument form of '
3375*cda5da8dSAndroid Build Coastguard Worker             'the\n'
3376*cda5da8dSAndroid Build Coastguard Worker             '  mapping subject’s "get()" method.  Matched key-value pairs '
3377*cda5da8dSAndroid Build Coastguard Worker             'must\n'
3378*cda5da8dSAndroid Build Coastguard Worker             '  already be present in the mapping, and not created on-the-fly '
3379*cda5da8dSAndroid Build Coastguard Worker             'via\n'
3380*cda5da8dSAndroid Build Coastguard Worker             '  "__missing__()" or "__getitem__()".\n'
3381*cda5da8dSAndroid Build Coastguard Worker             '\n'
3382*cda5da8dSAndroid Build Coastguard Worker             'In simple terms "{KEY1: P1, KEY2: P2, ... }" matches only if all '
3383*cda5da8dSAndroid Build Coastguard Worker             'the\n'
3384*cda5da8dSAndroid Build Coastguard Worker             'following happens:\n'
3385*cda5da8dSAndroid Build Coastguard Worker             '\n'
3386*cda5da8dSAndroid Build Coastguard Worker             '* check "<subject>" is a mapping\n'
3387*cda5da8dSAndroid Build Coastguard Worker             '\n'
3388*cda5da8dSAndroid Build Coastguard Worker             '* "KEY1 in <subject>"\n'
3389*cda5da8dSAndroid Build Coastguard Worker             '\n'
3390*cda5da8dSAndroid Build Coastguard Worker             '* "P1" matches "<subject>[KEY1]"\n'
3391*cda5da8dSAndroid Build Coastguard Worker             '\n'
3392*cda5da8dSAndroid Build Coastguard Worker             '* … and so on for the corresponding KEY/pattern pair.\n'
3393*cda5da8dSAndroid Build Coastguard Worker             '\n'
3394*cda5da8dSAndroid Build Coastguard Worker             '\n'
3395*cda5da8dSAndroid Build Coastguard Worker             'Class Patterns\n'
3396*cda5da8dSAndroid Build Coastguard Worker             '~~~~~~~~~~~~~~\n'
3397*cda5da8dSAndroid Build Coastguard Worker             '\n'
3398*cda5da8dSAndroid Build Coastguard Worker             'A class pattern represents a class and its positional and '
3399*cda5da8dSAndroid Build Coastguard Worker             'keyword\n'
3400*cda5da8dSAndroid Build Coastguard Worker             'arguments (if any).  Syntax:\n'
3401*cda5da8dSAndroid Build Coastguard Worker             '\n'
3402*cda5da8dSAndroid Build Coastguard Worker             '   class_pattern       ::= name_or_attr "(" [pattern_arguments '
3403*cda5da8dSAndroid Build Coastguard Worker             '","?] ")"\n'
3404*cda5da8dSAndroid Build Coastguard Worker             '   pattern_arguments   ::= positional_patterns ["," '
3405*cda5da8dSAndroid Build Coastguard Worker             'keyword_patterns]\n'
3406*cda5da8dSAndroid Build Coastguard Worker             '                         | keyword_patterns\n'
3407*cda5da8dSAndroid Build Coastguard Worker             '   positional_patterns ::= ",".pattern+\n'
3408*cda5da8dSAndroid Build Coastguard Worker             '   keyword_patterns    ::= ",".keyword_pattern+\n'
3409*cda5da8dSAndroid Build Coastguard Worker             '   keyword_pattern     ::= NAME "=" pattern\n'
3410*cda5da8dSAndroid Build Coastguard Worker             '\n'
3411*cda5da8dSAndroid Build Coastguard Worker             'The same keyword should not be repeated in class patterns.\n'
3412*cda5da8dSAndroid Build Coastguard Worker             '\n'
3413*cda5da8dSAndroid Build Coastguard Worker             'The following is the logical flow for matching a class pattern '
3414*cda5da8dSAndroid Build Coastguard Worker             'against\n'
3415*cda5da8dSAndroid Build Coastguard Worker             'a subject value:\n'
3416*cda5da8dSAndroid Build Coastguard Worker             '\n'
3417*cda5da8dSAndroid Build Coastguard Worker             '1. If "name_or_attr" is not an instance of the builtin "type" , '
3418*cda5da8dSAndroid Build Coastguard Worker             'raise\n'
3419*cda5da8dSAndroid Build Coastguard Worker             '   "TypeError".\n'
3420*cda5da8dSAndroid Build Coastguard Worker             '\n'
3421*cda5da8dSAndroid Build Coastguard Worker             '2. If the subject value is not an instance of "name_or_attr" '
3422*cda5da8dSAndroid Build Coastguard Worker             '(tested\n'
3423*cda5da8dSAndroid Build Coastguard Worker             '   via "isinstance()"), the class pattern fails.\n'
3424*cda5da8dSAndroid Build Coastguard Worker             '\n'
3425*cda5da8dSAndroid Build Coastguard Worker             '3. If no pattern arguments are present, the pattern succeeds.\n'
3426*cda5da8dSAndroid Build Coastguard Worker             '   Otherwise, the subsequent steps depend on whether keyword or\n'
3427*cda5da8dSAndroid Build Coastguard Worker             '   positional argument patterns are present.\n'
3428*cda5da8dSAndroid Build Coastguard Worker             '\n'
3429*cda5da8dSAndroid Build Coastguard Worker             '   For a number of built-in types (specified below), a single\n'
3430*cda5da8dSAndroid Build Coastguard Worker             '   positional subpattern is accepted which will match the '
3431*cda5da8dSAndroid Build Coastguard Worker             'entire\n'
3432*cda5da8dSAndroid Build Coastguard Worker             '   subject; for these types keyword patterns also work as for '
3433*cda5da8dSAndroid Build Coastguard Worker             'other\n'
3434*cda5da8dSAndroid Build Coastguard Worker             '   types.\n'
3435*cda5da8dSAndroid Build Coastguard Worker             '\n'
3436*cda5da8dSAndroid Build Coastguard Worker             '   If only keyword patterns are present, they are processed as\n'
3437*cda5da8dSAndroid Build Coastguard Worker             '   follows, one by one:\n'
3438*cda5da8dSAndroid Build Coastguard Worker             '\n'
3439*cda5da8dSAndroid Build Coastguard Worker             '   I. The keyword is looked up as an attribute on the subject.\n'
3440*cda5da8dSAndroid Build Coastguard Worker             '\n'
3441*cda5da8dSAndroid Build Coastguard Worker             '      * If this raises an exception other than "AttributeError", '
3442*cda5da8dSAndroid Build Coastguard Worker             'the\n'
3443*cda5da8dSAndroid Build Coastguard Worker             '        exception bubbles up.\n'
3444*cda5da8dSAndroid Build Coastguard Worker             '\n'
3445*cda5da8dSAndroid Build Coastguard Worker             '      * If this raises "AttributeError", the class pattern has '
3446*cda5da8dSAndroid Build Coastguard Worker             'failed.\n'
3447*cda5da8dSAndroid Build Coastguard Worker             '\n'
3448*cda5da8dSAndroid Build Coastguard Worker             '      * Else, the subpattern associated with the keyword pattern '
3449*cda5da8dSAndroid Build Coastguard Worker             'is\n'
3450*cda5da8dSAndroid Build Coastguard Worker             '        matched against the subject’s attribute value.  If this '
3451*cda5da8dSAndroid Build Coastguard Worker             'fails,\n'
3452*cda5da8dSAndroid Build Coastguard Worker             '        the class pattern fails; if this succeeds, the match '
3453*cda5da8dSAndroid Build Coastguard Worker             'proceeds\n'
3454*cda5da8dSAndroid Build Coastguard Worker             '        to the next keyword.\n'
3455*cda5da8dSAndroid Build Coastguard Worker             '\n'
3456*cda5da8dSAndroid Build Coastguard Worker             '   II. If all keyword patterns succeed, the class pattern '
3457*cda5da8dSAndroid Build Coastguard Worker             'succeeds.\n'
3458*cda5da8dSAndroid Build Coastguard Worker             '\n'
3459*cda5da8dSAndroid Build Coastguard Worker             '   If any positional patterns are present, they are converted '
3460*cda5da8dSAndroid Build Coastguard Worker             'to\n'
3461*cda5da8dSAndroid Build Coastguard Worker             '   keyword patterns using the "__match_args__" attribute on the '
3462*cda5da8dSAndroid Build Coastguard Worker             'class\n'
3463*cda5da8dSAndroid Build Coastguard Worker             '   "name_or_attr" before matching:\n'
3464*cda5da8dSAndroid Build Coastguard Worker             '\n'
3465*cda5da8dSAndroid Build Coastguard Worker             '   I. The equivalent of "getattr(cls, "__match_args__", ())" is\n'
3466*cda5da8dSAndroid Build Coastguard Worker             '   called.\n'
3467*cda5da8dSAndroid Build Coastguard Worker             '\n'
3468*cda5da8dSAndroid Build Coastguard Worker             '      * If this raises an exception, the exception bubbles up.\n'
3469*cda5da8dSAndroid Build Coastguard Worker             '\n'
3470*cda5da8dSAndroid Build Coastguard Worker             '      * If the returned value is not a tuple, the conversion '
3471*cda5da8dSAndroid Build Coastguard Worker             'fails and\n'
3472*cda5da8dSAndroid Build Coastguard Worker             '        "TypeError" is raised.\n'
3473*cda5da8dSAndroid Build Coastguard Worker             '\n'
3474*cda5da8dSAndroid Build Coastguard Worker             '      * If there are more positional patterns than\n'
3475*cda5da8dSAndroid Build Coastguard Worker             '        "len(cls.__match_args__)", "TypeError" is raised.\n'
3476*cda5da8dSAndroid Build Coastguard Worker             '\n'
3477*cda5da8dSAndroid Build Coastguard Worker             '      * Otherwise, positional pattern "i" is converted to a '
3478*cda5da8dSAndroid Build Coastguard Worker             'keyword\n'
3479*cda5da8dSAndroid Build Coastguard Worker             '        pattern using "__match_args__[i]" as the keyword.\n'
3480*cda5da8dSAndroid Build Coastguard Worker             '        "__match_args__[i]" must be a string; if not "TypeError" '
3481*cda5da8dSAndroid Build Coastguard Worker             'is\n'
3482*cda5da8dSAndroid Build Coastguard Worker             '        raised.\n'
3483*cda5da8dSAndroid Build Coastguard Worker             '\n'
3484*cda5da8dSAndroid Build Coastguard Worker             '      * If there are duplicate keywords, "TypeError" is raised.\n'
3485*cda5da8dSAndroid Build Coastguard Worker             '\n'
3486*cda5da8dSAndroid Build Coastguard Worker             '      See also:\n'
3487*cda5da8dSAndroid Build Coastguard Worker             '\n'
3488*cda5da8dSAndroid Build Coastguard Worker             '        Customizing positional arguments in class pattern '
3489*cda5da8dSAndroid Build Coastguard Worker             'matching\n'
3490*cda5da8dSAndroid Build Coastguard Worker             '\n'
3491*cda5da8dSAndroid Build Coastguard Worker             '   II. Once all positional patterns have been converted to '
3492*cda5da8dSAndroid Build Coastguard Worker             'keyword\n'
3493*cda5da8dSAndroid Build Coastguard Worker             '   patterns,\n'
3494*cda5da8dSAndroid Build Coastguard Worker             '      the match proceeds as if there were only keyword '
3495*cda5da8dSAndroid Build Coastguard Worker             'patterns.\n'
3496*cda5da8dSAndroid Build Coastguard Worker             '\n'
3497*cda5da8dSAndroid Build Coastguard Worker             '   For the following built-in types the handling of positional\n'
3498*cda5da8dSAndroid Build Coastguard Worker             '   subpatterns is different:\n'
3499*cda5da8dSAndroid Build Coastguard Worker             '\n'
3500*cda5da8dSAndroid Build Coastguard Worker             '   * "bool"\n'
3501*cda5da8dSAndroid Build Coastguard Worker             '\n'
3502*cda5da8dSAndroid Build Coastguard Worker             '   * "bytearray"\n'
3503*cda5da8dSAndroid Build Coastguard Worker             '\n'
3504*cda5da8dSAndroid Build Coastguard Worker             '   * "bytes"\n'
3505*cda5da8dSAndroid Build Coastguard Worker             '\n'
3506*cda5da8dSAndroid Build Coastguard Worker             '   * "dict"\n'
3507*cda5da8dSAndroid Build Coastguard Worker             '\n'
3508*cda5da8dSAndroid Build Coastguard Worker             '   * "float"\n'
3509*cda5da8dSAndroid Build Coastguard Worker             '\n'
3510*cda5da8dSAndroid Build Coastguard Worker             '   * "frozenset"\n'
3511*cda5da8dSAndroid Build Coastguard Worker             '\n'
3512*cda5da8dSAndroid Build Coastguard Worker             '   * "int"\n'
3513*cda5da8dSAndroid Build Coastguard Worker             '\n'
3514*cda5da8dSAndroid Build Coastguard Worker             '   * "list"\n'
3515*cda5da8dSAndroid Build Coastguard Worker             '\n'
3516*cda5da8dSAndroid Build Coastguard Worker             '   * "set"\n'
3517*cda5da8dSAndroid Build Coastguard Worker             '\n'
3518*cda5da8dSAndroid Build Coastguard Worker             '   * "str"\n'
3519*cda5da8dSAndroid Build Coastguard Worker             '\n'
3520*cda5da8dSAndroid Build Coastguard Worker             '   * "tuple"\n'
3521*cda5da8dSAndroid Build Coastguard Worker             '\n'
3522*cda5da8dSAndroid Build Coastguard Worker             '   These classes accept a single positional argument, and the '
3523*cda5da8dSAndroid Build Coastguard Worker             'pattern\n'
3524*cda5da8dSAndroid Build Coastguard Worker             '   there is matched against the whole object rather than an '
3525*cda5da8dSAndroid Build Coastguard Worker             'attribute.\n'
3526*cda5da8dSAndroid Build Coastguard Worker             '   For example "int(0|1)" matches the value "0", but not the '
3527*cda5da8dSAndroid Build Coastguard Worker             'value\n'
3528*cda5da8dSAndroid Build Coastguard Worker             '   "0.0".\n'
3529*cda5da8dSAndroid Build Coastguard Worker             '\n'
3530*cda5da8dSAndroid Build Coastguard Worker             'In simple terms "CLS(P1, attr=P2)" matches only if the '
3531*cda5da8dSAndroid Build Coastguard Worker             'following\n'
3532*cda5da8dSAndroid Build Coastguard Worker             'happens:\n'
3533*cda5da8dSAndroid Build Coastguard Worker             '\n'
3534*cda5da8dSAndroid Build Coastguard Worker             '* "isinstance(<subject>, CLS)"\n'
3535*cda5da8dSAndroid Build Coastguard Worker             '\n'
3536*cda5da8dSAndroid Build Coastguard Worker             '* convert "P1" to a keyword pattern using "CLS.__match_args__"\n'
3537*cda5da8dSAndroid Build Coastguard Worker             '\n'
3538*cda5da8dSAndroid Build Coastguard Worker             '* For each keyword argument "attr=P2":\n'
3539*cda5da8dSAndroid Build Coastguard Worker             '     * "hasattr(<subject>, "attr")"\n'
3540*cda5da8dSAndroid Build Coastguard Worker             '\n'
3541*cda5da8dSAndroid Build Coastguard Worker             '     * "P2" matches "<subject>.attr"\n'
3542*cda5da8dSAndroid Build Coastguard Worker             '\n'
3543*cda5da8dSAndroid Build Coastguard Worker             '* … and so on for the corresponding keyword argument/pattern '
3544*cda5da8dSAndroid Build Coastguard Worker             'pair.\n'
3545*cda5da8dSAndroid Build Coastguard Worker             '\n'
3546*cda5da8dSAndroid Build Coastguard Worker             'See also:\n'
3547*cda5da8dSAndroid Build Coastguard Worker             '\n'
3548*cda5da8dSAndroid Build Coastguard Worker             '  * **PEP 634** – Structural Pattern Matching: Specification\n'
3549*cda5da8dSAndroid Build Coastguard Worker             '\n'
3550*cda5da8dSAndroid Build Coastguard Worker             '  * **PEP 636** – Structural Pattern Matching: Tutorial\n'
3551*cda5da8dSAndroid Build Coastguard Worker             '\n'
3552*cda5da8dSAndroid Build Coastguard Worker             '\n'
3553*cda5da8dSAndroid Build Coastguard Worker             'Function definitions\n'
3554*cda5da8dSAndroid Build Coastguard Worker             '====================\n'
3555*cda5da8dSAndroid Build Coastguard Worker             '\n'
3556*cda5da8dSAndroid Build Coastguard Worker             'A function definition defines a user-defined function object '
3557*cda5da8dSAndroid Build Coastguard Worker             '(see\n'
3558*cda5da8dSAndroid Build Coastguard Worker             'section The standard type hierarchy):\n'
3559*cda5da8dSAndroid Build Coastguard Worker             '\n'
3560*cda5da8dSAndroid Build Coastguard Worker             '   funcdef                   ::= [decorators] "def" funcname "(" '
3561*cda5da8dSAndroid Build Coastguard Worker             '[parameter_list] ")"\n'
3562*cda5da8dSAndroid Build Coastguard Worker             '               ["->" expression] ":" suite\n'
3563*cda5da8dSAndroid Build Coastguard Worker             '   decorators                ::= decorator+\n'
3564*cda5da8dSAndroid Build Coastguard Worker             '   decorator                 ::= "@" assignment_expression '
3565*cda5da8dSAndroid Build Coastguard Worker             'NEWLINE\n'
3566*cda5da8dSAndroid Build Coastguard Worker             '   parameter_list            ::= defparameter ("," '
3567*cda5da8dSAndroid Build Coastguard Worker             'defparameter)* "," "/" ["," [parameter_list_no_posonly]]\n'
3568*cda5da8dSAndroid Build Coastguard Worker             '                        | parameter_list_no_posonly\n'
3569*cda5da8dSAndroid Build Coastguard Worker             '   parameter_list_no_posonly ::= defparameter ("," '
3570*cda5da8dSAndroid Build Coastguard Worker             'defparameter)* ["," [parameter_list_starargs]]\n'
3571*cda5da8dSAndroid Build Coastguard Worker             '                                 | parameter_list_starargs\n'
3572*cda5da8dSAndroid Build Coastguard Worker             '   parameter_list_starargs   ::= "*" [parameter] ("," '
3573*cda5da8dSAndroid Build Coastguard Worker             'defparameter)* ["," ["**" parameter [","]]]\n'
3574*cda5da8dSAndroid Build Coastguard Worker             '                               | "**" parameter [","]\n'
3575*cda5da8dSAndroid Build Coastguard Worker             '   parameter                 ::= identifier [":" expression]\n'
3576*cda5da8dSAndroid Build Coastguard Worker             '   defparameter              ::= parameter ["=" expression]\n'
3577*cda5da8dSAndroid Build Coastguard Worker             '   funcname                  ::= identifier\n'
3578*cda5da8dSAndroid Build Coastguard Worker             '\n'
3579*cda5da8dSAndroid Build Coastguard Worker             'A function definition is an executable statement.  Its execution '
3580*cda5da8dSAndroid Build Coastguard Worker             'binds\n'
3581*cda5da8dSAndroid Build Coastguard Worker             'the function name in the current local namespace to a function '
3582*cda5da8dSAndroid Build Coastguard Worker             'object\n'
3583*cda5da8dSAndroid Build Coastguard Worker             '(a wrapper around the executable code for the function).  This\n'
3584*cda5da8dSAndroid Build Coastguard Worker             'function object contains a reference to the current global '
3585*cda5da8dSAndroid Build Coastguard Worker             'namespace\n'
3586*cda5da8dSAndroid Build Coastguard Worker             'as the global namespace to be used when the function is called.\n'
3587*cda5da8dSAndroid Build Coastguard Worker             '\n'
3588*cda5da8dSAndroid Build Coastguard Worker             'The function definition does not execute the function body; this '
3589*cda5da8dSAndroid Build Coastguard Worker             'gets\n'
3590*cda5da8dSAndroid Build Coastguard Worker             'executed only when the function is called. [4]\n'
3591*cda5da8dSAndroid Build Coastguard Worker             '\n'
3592*cda5da8dSAndroid Build Coastguard Worker             'A function definition may be wrapped by one or more *decorator*\n'
3593*cda5da8dSAndroid Build Coastguard Worker             'expressions. Decorator expressions are evaluated when the '
3594*cda5da8dSAndroid Build Coastguard Worker             'function is\n'
3595*cda5da8dSAndroid Build Coastguard Worker             'defined, in the scope that contains the function definition.  '
3596*cda5da8dSAndroid Build Coastguard Worker             'The\n'
3597*cda5da8dSAndroid Build Coastguard Worker             'result must be a callable, which is invoked with the function '
3598*cda5da8dSAndroid Build Coastguard Worker             'object\n'
3599*cda5da8dSAndroid Build Coastguard Worker             'as the only argument. The returned value is bound to the '
3600*cda5da8dSAndroid Build Coastguard Worker             'function name\n'
3601*cda5da8dSAndroid Build Coastguard Worker             'instead of the function object.  Multiple decorators are applied '
3602*cda5da8dSAndroid Build Coastguard Worker             'in\n'
3603*cda5da8dSAndroid Build Coastguard Worker             'nested fashion. For example, the following code\n'
3604*cda5da8dSAndroid Build Coastguard Worker             '\n'
3605*cda5da8dSAndroid Build Coastguard Worker             '   @f1(arg)\n'
3606*cda5da8dSAndroid Build Coastguard Worker             '   @f2\n'
3607*cda5da8dSAndroid Build Coastguard Worker             '   def func(): pass\n'
3608*cda5da8dSAndroid Build Coastguard Worker             '\n'
3609*cda5da8dSAndroid Build Coastguard Worker             'is roughly equivalent to\n'
3610*cda5da8dSAndroid Build Coastguard Worker             '\n'
3611*cda5da8dSAndroid Build Coastguard Worker             '   def func(): pass\n'
3612*cda5da8dSAndroid Build Coastguard Worker             '   func = f1(arg)(f2(func))\n'
3613*cda5da8dSAndroid Build Coastguard Worker             '\n'
3614*cda5da8dSAndroid Build Coastguard Worker             'except that the original function is not temporarily bound to '
3615*cda5da8dSAndroid Build Coastguard Worker             'the name\n'
3616*cda5da8dSAndroid Build Coastguard Worker             '"func".\n'
3617*cda5da8dSAndroid Build Coastguard Worker             '\n'
3618*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.9: Functions may be decorated with any '
3619*cda5da8dSAndroid Build Coastguard Worker             'valid\n'
3620*cda5da8dSAndroid Build Coastguard Worker             '"assignment_expression". Previously, the grammar was much more\n'
3621*cda5da8dSAndroid Build Coastguard Worker             'restrictive; see **PEP 614** for details.\n'
3622*cda5da8dSAndroid Build Coastguard Worker             '\n'
3623*cda5da8dSAndroid Build Coastguard Worker             'When one or more *parameters* have the form *parameter* "="\n'
3624*cda5da8dSAndroid Build Coastguard Worker             '*expression*, the function is said to have “default parameter '
3625*cda5da8dSAndroid Build Coastguard Worker             'values.”\n'
3626*cda5da8dSAndroid Build Coastguard Worker             'For a parameter with a default value, the corresponding '
3627*cda5da8dSAndroid Build Coastguard Worker             '*argument* may\n'
3628*cda5da8dSAndroid Build Coastguard Worker             'be omitted from a call, in which case the parameter’s default '
3629*cda5da8dSAndroid Build Coastguard Worker             'value is\n'
3630*cda5da8dSAndroid Build Coastguard Worker             'substituted.  If a parameter has a default value, all following\n'
3631*cda5da8dSAndroid Build Coastguard Worker             'parameters up until the “"*"” must also have a default value — '
3632*cda5da8dSAndroid Build Coastguard Worker             'this is\n'
3633*cda5da8dSAndroid Build Coastguard Worker             'a syntactic restriction that is not expressed by the grammar.\n'
3634*cda5da8dSAndroid Build Coastguard Worker             '\n'
3635*cda5da8dSAndroid Build Coastguard Worker             '**Default parameter values are evaluated from left to right when '
3636*cda5da8dSAndroid Build Coastguard Worker             'the\n'
3637*cda5da8dSAndroid Build Coastguard Worker             'function definition is executed.** This means that the '
3638*cda5da8dSAndroid Build Coastguard Worker             'expression is\n'
3639*cda5da8dSAndroid Build Coastguard Worker             'evaluated once, when the function is defined, and that the same '
3640*cda5da8dSAndroid Build Coastguard Worker             '“pre-\n'
3641*cda5da8dSAndroid Build Coastguard Worker             'computed” value is used for each call.  This is especially '
3642*cda5da8dSAndroid Build Coastguard Worker             'important\n'
3643*cda5da8dSAndroid Build Coastguard Worker             'to understand when a default parameter value is a mutable '
3644*cda5da8dSAndroid Build Coastguard Worker             'object, such\n'
3645*cda5da8dSAndroid Build Coastguard Worker             'as a list or a dictionary: if the function modifies the object '
3646*cda5da8dSAndroid Build Coastguard Worker             '(e.g.\n'
3647*cda5da8dSAndroid Build Coastguard Worker             'by appending an item to a list), the default parameter value is '
3648*cda5da8dSAndroid Build Coastguard Worker             'in\n'
3649*cda5da8dSAndroid Build Coastguard Worker             'effect modified.  This is generally not what was intended.  A '
3650*cda5da8dSAndroid Build Coastguard Worker             'way\n'
3651*cda5da8dSAndroid Build Coastguard Worker             'around this is to use "None" as the default, and explicitly test '
3652*cda5da8dSAndroid Build Coastguard Worker             'for\n'
3653*cda5da8dSAndroid Build Coastguard Worker             'it in the body of the function, e.g.:\n'
3654*cda5da8dSAndroid Build Coastguard Worker             '\n'
3655*cda5da8dSAndroid Build Coastguard Worker             '   def whats_on_the_telly(penguin=None):\n'
3656*cda5da8dSAndroid Build Coastguard Worker             '       if penguin is None:\n'
3657*cda5da8dSAndroid Build Coastguard Worker             '           penguin = []\n'
3658*cda5da8dSAndroid Build Coastguard Worker             '       penguin.append("property of the zoo")\n'
3659*cda5da8dSAndroid Build Coastguard Worker             '       return penguin\n'
3660*cda5da8dSAndroid Build Coastguard Worker             '\n'
3661*cda5da8dSAndroid Build Coastguard Worker             'Function call semantics are described in more detail in section '
3662*cda5da8dSAndroid Build Coastguard Worker             'Calls.\n'
3663*cda5da8dSAndroid Build Coastguard Worker             'A function call always assigns values to all parameters '
3664*cda5da8dSAndroid Build Coastguard Worker             'mentioned in\n'
3665*cda5da8dSAndroid Build Coastguard Worker             'the parameter list, either from positional arguments, from '
3666*cda5da8dSAndroid Build Coastguard Worker             'keyword\n'
3667*cda5da8dSAndroid Build Coastguard Worker             'arguments, or from default values.  If the form “"*identifier"” '
3668*cda5da8dSAndroid Build Coastguard Worker             'is\n'
3669*cda5da8dSAndroid Build Coastguard Worker             'present, it is initialized to a tuple receiving any excess '
3670*cda5da8dSAndroid Build Coastguard Worker             'positional\n'
3671*cda5da8dSAndroid Build Coastguard Worker             'parameters, defaulting to the empty tuple. If the form\n'
3672*cda5da8dSAndroid Build Coastguard Worker             '“"**identifier"” is present, it is initialized to a new ordered\n'
3673*cda5da8dSAndroid Build Coastguard Worker             'mapping receiving any excess keyword arguments, defaulting to a '
3674*cda5da8dSAndroid Build Coastguard Worker             'new\n'
3675*cda5da8dSAndroid Build Coastguard Worker             'empty mapping of the same type.  Parameters after “"*"” or\n'
3676*cda5da8dSAndroid Build Coastguard Worker             '“"*identifier"” are keyword-only parameters and may only be '
3677*cda5da8dSAndroid Build Coastguard Worker             'passed by\n'
3678*cda5da8dSAndroid Build Coastguard Worker             'keyword arguments.  Parameters before “"/"” are positional-only\n'
3679*cda5da8dSAndroid Build Coastguard Worker             'parameters and may only be passed by positional arguments.\n'
3680*cda5da8dSAndroid Build Coastguard Worker             '\n'
3681*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.8: The "/" function parameter syntax may be '
3682*cda5da8dSAndroid Build Coastguard Worker             'used\n'
3683*cda5da8dSAndroid Build Coastguard Worker             'to indicate positional-only parameters. See **PEP 570** for '
3684*cda5da8dSAndroid Build Coastguard Worker             'details.\n'
3685*cda5da8dSAndroid Build Coastguard Worker             '\n'
3686*cda5da8dSAndroid Build Coastguard Worker             'Parameters may have an *annotation* of the form “": '
3687*cda5da8dSAndroid Build Coastguard Worker             'expression"”\n'
3688*cda5da8dSAndroid Build Coastguard Worker             'following the parameter name.  Any parameter may have an '
3689*cda5da8dSAndroid Build Coastguard Worker             'annotation,\n'
3690*cda5da8dSAndroid Build Coastguard Worker             'even those of the form "*identifier" or "**identifier".  '
3691*cda5da8dSAndroid Build Coastguard Worker             'Functions may\n'
3692*cda5da8dSAndroid Build Coastguard Worker             'have “return” annotation of the form “"-> expression"” after '
3693*cda5da8dSAndroid Build Coastguard Worker             'the\n'
3694*cda5da8dSAndroid Build Coastguard Worker             'parameter list.  These annotations can be any valid Python '
3695*cda5da8dSAndroid Build Coastguard Worker             'expression.\n'
3696*cda5da8dSAndroid Build Coastguard Worker             'The presence of annotations does not change the semantics of a\n'
3697*cda5da8dSAndroid Build Coastguard Worker             'function.  The annotation values are available as values of a\n'
3698*cda5da8dSAndroid Build Coastguard Worker             'dictionary keyed by the parameters’ names in the '
3699*cda5da8dSAndroid Build Coastguard Worker             '"__annotations__"\n'
3700*cda5da8dSAndroid Build Coastguard Worker             'attribute of the function object.  If the "annotations" import '
3701*cda5da8dSAndroid Build Coastguard Worker             'from\n'
3702*cda5da8dSAndroid Build Coastguard Worker             '"__future__" is used, annotations are preserved as strings at '
3703*cda5da8dSAndroid Build Coastguard Worker             'runtime\n'
3704*cda5da8dSAndroid Build Coastguard Worker             'which enables postponed evaluation.  Otherwise, they are '
3705*cda5da8dSAndroid Build Coastguard Worker             'evaluated\n'
3706*cda5da8dSAndroid Build Coastguard Worker             'when the function definition is executed.  In this case '
3707*cda5da8dSAndroid Build Coastguard Worker             'annotations\n'
3708*cda5da8dSAndroid Build Coastguard Worker             'may be evaluated in a different order than they appear in the '
3709*cda5da8dSAndroid Build Coastguard Worker             'source\n'
3710*cda5da8dSAndroid Build Coastguard Worker             'code.\n'
3711*cda5da8dSAndroid Build Coastguard Worker             '\n'
3712*cda5da8dSAndroid Build Coastguard Worker             'It is also possible to create anonymous functions (functions not '
3713*cda5da8dSAndroid Build Coastguard Worker             'bound\n'
3714*cda5da8dSAndroid Build Coastguard Worker             'to a name), for immediate use in expressions.  This uses lambda\n'
3715*cda5da8dSAndroid Build Coastguard Worker             'expressions, described in section Lambdas.  Note that the '
3716*cda5da8dSAndroid Build Coastguard Worker             'lambda\n'
3717*cda5da8dSAndroid Build Coastguard Worker             'expression is merely a shorthand for a simplified function '
3718*cda5da8dSAndroid Build Coastguard Worker             'definition;\n'
3719*cda5da8dSAndroid Build Coastguard Worker             'a function defined in a “"def"” statement can be passed around '
3720*cda5da8dSAndroid Build Coastguard Worker             'or\n'
3721*cda5da8dSAndroid Build Coastguard Worker             'assigned to another name just like a function defined by a '
3722*cda5da8dSAndroid Build Coastguard Worker             'lambda\n'
3723*cda5da8dSAndroid Build Coastguard Worker             'expression.  The “"def"” form is actually more powerful since '
3724*cda5da8dSAndroid Build Coastguard Worker             'it\n'
3725*cda5da8dSAndroid Build Coastguard Worker             'allows the execution of multiple statements and annotations.\n'
3726*cda5da8dSAndroid Build Coastguard Worker             '\n'
3727*cda5da8dSAndroid Build Coastguard Worker             '**Programmer’s note:** Functions are first-class objects.  A '
3728*cda5da8dSAndroid Build Coastguard Worker             '“"def"”\n'
3729*cda5da8dSAndroid Build Coastguard Worker             'statement executed inside a function definition defines a local\n'
3730*cda5da8dSAndroid Build Coastguard Worker             'function that can be returned or passed around.  Free variables '
3731*cda5da8dSAndroid Build Coastguard Worker             'used\n'
3732*cda5da8dSAndroid Build Coastguard Worker             'in the nested function can access the local variables of the '
3733*cda5da8dSAndroid Build Coastguard Worker             'function\n'
3734*cda5da8dSAndroid Build Coastguard Worker             'containing the def.  See section Naming and binding for '
3735*cda5da8dSAndroid Build Coastguard Worker             'details.\n'
3736*cda5da8dSAndroid Build Coastguard Worker             '\n'
3737*cda5da8dSAndroid Build Coastguard Worker             'See also:\n'
3738*cda5da8dSAndroid Build Coastguard Worker             '\n'
3739*cda5da8dSAndroid Build Coastguard Worker             '  **PEP 3107** - Function Annotations\n'
3740*cda5da8dSAndroid Build Coastguard Worker             '     The original specification for function annotations.\n'
3741*cda5da8dSAndroid Build Coastguard Worker             '\n'
3742*cda5da8dSAndroid Build Coastguard Worker             '  **PEP 484** - Type Hints\n'
3743*cda5da8dSAndroid Build Coastguard Worker             '     Definition of a standard meaning for annotations: type '
3744*cda5da8dSAndroid Build Coastguard Worker             'hints.\n'
3745*cda5da8dSAndroid Build Coastguard Worker             '\n'
3746*cda5da8dSAndroid Build Coastguard Worker             '  **PEP 526** - Syntax for Variable Annotations\n'
3747*cda5da8dSAndroid Build Coastguard Worker             '     Ability to type hint variable declarations, including '
3748*cda5da8dSAndroid Build Coastguard Worker             'class\n'
3749*cda5da8dSAndroid Build Coastguard Worker             '     variables and instance variables\n'
3750*cda5da8dSAndroid Build Coastguard Worker             '\n'
3751*cda5da8dSAndroid Build Coastguard Worker             '  **PEP 563** - Postponed Evaluation of Annotations\n'
3752*cda5da8dSAndroid Build Coastguard Worker             '     Support for forward references within annotations by '
3753*cda5da8dSAndroid Build Coastguard Worker             'preserving\n'
3754*cda5da8dSAndroid Build Coastguard Worker             '     annotations in a string form at runtime instead of eager\n'
3755*cda5da8dSAndroid Build Coastguard Worker             '     evaluation.\n'
3756*cda5da8dSAndroid Build Coastguard Worker             '\n'
3757*cda5da8dSAndroid Build Coastguard Worker             '\n'
3758*cda5da8dSAndroid Build Coastguard Worker             'Class definitions\n'
3759*cda5da8dSAndroid Build Coastguard Worker             '=================\n'
3760*cda5da8dSAndroid Build Coastguard Worker             '\n'
3761*cda5da8dSAndroid Build Coastguard Worker             'A class definition defines a class object (see section The '
3762*cda5da8dSAndroid Build Coastguard Worker             'standard\n'
3763*cda5da8dSAndroid Build Coastguard Worker             'type hierarchy):\n'
3764*cda5da8dSAndroid Build Coastguard Worker             '\n'
3765*cda5da8dSAndroid Build Coastguard Worker             '   classdef    ::= [decorators] "class" classname [inheritance] '
3766*cda5da8dSAndroid Build Coastguard Worker             '":" suite\n'
3767*cda5da8dSAndroid Build Coastguard Worker             '   inheritance ::= "(" [argument_list] ")"\n'
3768*cda5da8dSAndroid Build Coastguard Worker             '   classname   ::= identifier\n'
3769*cda5da8dSAndroid Build Coastguard Worker             '\n'
3770*cda5da8dSAndroid Build Coastguard Worker             'A class definition is an executable statement.  The inheritance '
3771*cda5da8dSAndroid Build Coastguard Worker             'list\n'
3772*cda5da8dSAndroid Build Coastguard Worker             'usually gives a list of base classes (see Metaclasses for more\n'
3773*cda5da8dSAndroid Build Coastguard Worker             'advanced uses), so each item in the list should evaluate to a '
3774*cda5da8dSAndroid Build Coastguard Worker             'class\n'
3775*cda5da8dSAndroid Build Coastguard Worker             'object which allows subclassing.  Classes without an inheritance '
3776*cda5da8dSAndroid Build Coastguard Worker             'list\n'
3777*cda5da8dSAndroid Build Coastguard Worker             'inherit, by default, from the base class "object"; hence,\n'
3778*cda5da8dSAndroid Build Coastguard Worker             '\n'
3779*cda5da8dSAndroid Build Coastguard Worker             '   class Foo:\n'
3780*cda5da8dSAndroid Build Coastguard Worker             '       pass\n'
3781*cda5da8dSAndroid Build Coastguard Worker             '\n'
3782*cda5da8dSAndroid Build Coastguard Worker             'is equivalent to\n'
3783*cda5da8dSAndroid Build Coastguard Worker             '\n'
3784*cda5da8dSAndroid Build Coastguard Worker             '   class Foo(object):\n'
3785*cda5da8dSAndroid Build Coastguard Worker             '       pass\n'
3786*cda5da8dSAndroid Build Coastguard Worker             '\n'
3787*cda5da8dSAndroid Build Coastguard Worker             'The class’s suite is then executed in a new execution frame '
3788*cda5da8dSAndroid Build Coastguard Worker             '(see\n'
3789*cda5da8dSAndroid Build Coastguard Worker             'Naming and binding), using a newly created local namespace and '
3790*cda5da8dSAndroid Build Coastguard Worker             'the\n'
3791*cda5da8dSAndroid Build Coastguard Worker             'original global namespace. (Usually, the suite contains mostly\n'
3792*cda5da8dSAndroid Build Coastguard Worker             'function definitions.)  When the class’s suite finishes '
3793*cda5da8dSAndroid Build Coastguard Worker             'execution, its\n'
3794*cda5da8dSAndroid Build Coastguard Worker             'execution frame is discarded but its local namespace is saved. '
3795*cda5da8dSAndroid Build Coastguard Worker             '[5] A\n'
3796*cda5da8dSAndroid Build Coastguard Worker             'class object is then created using the inheritance list for the '
3797*cda5da8dSAndroid Build Coastguard Worker             'base\n'
3798*cda5da8dSAndroid Build Coastguard Worker             'classes and the saved local namespace for the attribute '
3799*cda5da8dSAndroid Build Coastguard Worker             'dictionary.\n'
3800*cda5da8dSAndroid Build Coastguard Worker             'The class name is bound to this class object in the original '
3801*cda5da8dSAndroid Build Coastguard Worker             'local\n'
3802*cda5da8dSAndroid Build Coastguard Worker             'namespace.\n'
3803*cda5da8dSAndroid Build Coastguard Worker             '\n'
3804*cda5da8dSAndroid Build Coastguard Worker             'The order in which attributes are defined in the class body is\n'
3805*cda5da8dSAndroid Build Coastguard Worker             'preserved in the new class’s "__dict__".  Note that this is '
3806*cda5da8dSAndroid Build Coastguard Worker             'reliable\n'
3807*cda5da8dSAndroid Build Coastguard Worker             'only right after the class is created and only for classes that '
3808*cda5da8dSAndroid Build Coastguard Worker             'were\n'
3809*cda5da8dSAndroid Build Coastguard Worker             'defined using the definition syntax.\n'
3810*cda5da8dSAndroid Build Coastguard Worker             '\n'
3811*cda5da8dSAndroid Build Coastguard Worker             'Class creation can be customized heavily using metaclasses.\n'
3812*cda5da8dSAndroid Build Coastguard Worker             '\n'
3813*cda5da8dSAndroid Build Coastguard Worker             'Classes can also be decorated: just like when decorating '
3814*cda5da8dSAndroid Build Coastguard Worker             'functions,\n'
3815*cda5da8dSAndroid Build Coastguard Worker             '\n'
3816*cda5da8dSAndroid Build Coastguard Worker             '   @f1(arg)\n'
3817*cda5da8dSAndroid Build Coastguard Worker             '   @f2\n'
3818*cda5da8dSAndroid Build Coastguard Worker             '   class Foo: pass\n'
3819*cda5da8dSAndroid Build Coastguard Worker             '\n'
3820*cda5da8dSAndroid Build Coastguard Worker             'is roughly equivalent to\n'
3821*cda5da8dSAndroid Build Coastguard Worker             '\n'
3822*cda5da8dSAndroid Build Coastguard Worker             '   class Foo: pass\n'
3823*cda5da8dSAndroid Build Coastguard Worker             '   Foo = f1(arg)(f2(Foo))\n'
3824*cda5da8dSAndroid Build Coastguard Worker             '\n'
3825*cda5da8dSAndroid Build Coastguard Worker             'The evaluation rules for the decorator expressions are the same '
3826*cda5da8dSAndroid Build Coastguard Worker             'as for\n'
3827*cda5da8dSAndroid Build Coastguard Worker             'function decorators.  The result is then bound to the class '
3828*cda5da8dSAndroid Build Coastguard Worker             'name.\n'
3829*cda5da8dSAndroid Build Coastguard Worker             '\n'
3830*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.9: Classes may be decorated with any valid\n'
3831*cda5da8dSAndroid Build Coastguard Worker             '"assignment_expression". Previously, the grammar was much more\n'
3832*cda5da8dSAndroid Build Coastguard Worker             'restrictive; see **PEP 614** for details.\n'
3833*cda5da8dSAndroid Build Coastguard Worker             '\n'
3834*cda5da8dSAndroid Build Coastguard Worker             '**Programmer’s note:** Variables defined in the class definition '
3835*cda5da8dSAndroid Build Coastguard Worker             'are\n'
3836*cda5da8dSAndroid Build Coastguard Worker             'class attributes; they are shared by instances.  Instance '
3837*cda5da8dSAndroid Build Coastguard Worker             'attributes\n'
3838*cda5da8dSAndroid Build Coastguard Worker             'can be set in a method with "self.name = value".  Both class '
3839*cda5da8dSAndroid Build Coastguard Worker             'and\n'
3840*cda5da8dSAndroid Build Coastguard Worker             'instance attributes are accessible through the notation '
3841*cda5da8dSAndroid Build Coastguard Worker             '“"self.name"”,\n'
3842*cda5da8dSAndroid Build Coastguard Worker             'and an instance attribute hides a class attribute with the same '
3843*cda5da8dSAndroid Build Coastguard Worker             'name\n'
3844*cda5da8dSAndroid Build Coastguard Worker             'when accessed in this way.  Class attributes can be used as '
3845*cda5da8dSAndroid Build Coastguard Worker             'defaults\n'
3846*cda5da8dSAndroid Build Coastguard Worker             'for instance attributes, but using mutable values there can lead '
3847*cda5da8dSAndroid Build Coastguard Worker             'to\n'
3848*cda5da8dSAndroid Build Coastguard Worker             'unexpected results.  Descriptors can be used to create instance\n'
3849*cda5da8dSAndroid Build Coastguard Worker             'variables with different implementation details.\n'
3850*cda5da8dSAndroid Build Coastguard Worker             '\n'
3851*cda5da8dSAndroid Build Coastguard Worker             'See also:\n'
3852*cda5da8dSAndroid Build Coastguard Worker             '\n'
3853*cda5da8dSAndroid Build Coastguard Worker             '  **PEP 3115** - Metaclasses in Python 3000\n'
3854*cda5da8dSAndroid Build Coastguard Worker             '     The proposal that changed the declaration of metaclasses to '
3855*cda5da8dSAndroid Build Coastguard Worker             'the\n'
3856*cda5da8dSAndroid Build Coastguard Worker             '     current syntax, and the semantics for how classes with\n'
3857*cda5da8dSAndroid Build Coastguard Worker             '     metaclasses are constructed.\n'
3858*cda5da8dSAndroid Build Coastguard Worker             '\n'
3859*cda5da8dSAndroid Build Coastguard Worker             '  **PEP 3129** - Class Decorators\n'
3860*cda5da8dSAndroid Build Coastguard Worker             '     The proposal that added class decorators.  Function and '
3861*cda5da8dSAndroid Build Coastguard Worker             'method\n'
3862*cda5da8dSAndroid Build Coastguard Worker             '     decorators were introduced in **PEP 318**.\n'
3863*cda5da8dSAndroid Build Coastguard Worker             '\n'
3864*cda5da8dSAndroid Build Coastguard Worker             '\n'
3865*cda5da8dSAndroid Build Coastguard Worker             'Coroutines\n'
3866*cda5da8dSAndroid Build Coastguard Worker             '==========\n'
3867*cda5da8dSAndroid Build Coastguard Worker             '\n'
3868*cda5da8dSAndroid Build Coastguard Worker             'New in version 3.5.\n'
3869*cda5da8dSAndroid Build Coastguard Worker             '\n'
3870*cda5da8dSAndroid Build Coastguard Worker             '\n'
3871*cda5da8dSAndroid Build Coastguard Worker             'Coroutine function definition\n'
3872*cda5da8dSAndroid Build Coastguard Worker             '-----------------------------\n'
3873*cda5da8dSAndroid Build Coastguard Worker             '\n'
3874*cda5da8dSAndroid Build Coastguard Worker             '   async_funcdef ::= [decorators] "async" "def" funcname "(" '
3875*cda5da8dSAndroid Build Coastguard Worker             '[parameter_list] ")"\n'
3876*cda5da8dSAndroid Build Coastguard Worker             '                     ["->" expression] ":" suite\n'
3877*cda5da8dSAndroid Build Coastguard Worker             '\n'
3878*cda5da8dSAndroid Build Coastguard Worker             'Execution of Python coroutines can be suspended and resumed at '
3879*cda5da8dSAndroid Build Coastguard Worker             'many\n'
3880*cda5da8dSAndroid Build Coastguard Worker             'points (see *coroutine*). "await" expressions, "async for" and '
3881*cda5da8dSAndroid Build Coastguard Worker             '"async\n'
3882*cda5da8dSAndroid Build Coastguard Worker             'with" can only be used in the body of a coroutine function.\n'
3883*cda5da8dSAndroid Build Coastguard Worker             '\n'
3884*cda5da8dSAndroid Build Coastguard Worker             'Functions defined with "async def" syntax are always coroutine\n'
3885*cda5da8dSAndroid Build Coastguard Worker             'functions, even if they do not contain "await" or "async" '
3886*cda5da8dSAndroid Build Coastguard Worker             'keywords.\n'
3887*cda5da8dSAndroid Build Coastguard Worker             '\n'
3888*cda5da8dSAndroid Build Coastguard Worker             'It is a "SyntaxError" to use a "yield from" expression inside '
3889*cda5da8dSAndroid Build Coastguard Worker             'the body\n'
3890*cda5da8dSAndroid Build Coastguard Worker             'of a coroutine function.\n'
3891*cda5da8dSAndroid Build Coastguard Worker             '\n'
3892*cda5da8dSAndroid Build Coastguard Worker             'An example of a coroutine function:\n'
3893*cda5da8dSAndroid Build Coastguard Worker             '\n'
3894*cda5da8dSAndroid Build Coastguard Worker             '   async def func(param1, param2):\n'
3895*cda5da8dSAndroid Build Coastguard Worker             '       do_stuff()\n'
3896*cda5da8dSAndroid Build Coastguard Worker             '       await some_coroutine()\n'
3897*cda5da8dSAndroid Build Coastguard Worker             '\n'
3898*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.7: "await" and "async" are now keywords;\n'
3899*cda5da8dSAndroid Build Coastguard Worker             'previously they were only treated as such inside the body of a\n'
3900*cda5da8dSAndroid Build Coastguard Worker             'coroutine function.\n'
3901*cda5da8dSAndroid Build Coastguard Worker             '\n'
3902*cda5da8dSAndroid Build Coastguard Worker             '\n'
3903*cda5da8dSAndroid Build Coastguard Worker             'The "async for" statement\n'
3904*cda5da8dSAndroid Build Coastguard Worker             '-------------------------\n'
3905*cda5da8dSAndroid Build Coastguard Worker             '\n'
3906*cda5da8dSAndroid Build Coastguard Worker             '   async_for_stmt ::= "async" for_stmt\n'
3907*cda5da8dSAndroid Build Coastguard Worker             '\n'
3908*cda5da8dSAndroid Build Coastguard Worker             'An *asynchronous iterable* provides an "__aiter__" method that\n'
3909*cda5da8dSAndroid Build Coastguard Worker             'directly returns an *asynchronous iterator*, which can call\n'
3910*cda5da8dSAndroid Build Coastguard Worker             'asynchronous code in its "__anext__" method.\n'
3911*cda5da8dSAndroid Build Coastguard Worker             '\n'
3912*cda5da8dSAndroid Build Coastguard Worker             'The "async for" statement allows convenient iteration over\n'
3913*cda5da8dSAndroid Build Coastguard Worker             'asynchronous iterables.\n'
3914*cda5da8dSAndroid Build Coastguard Worker             '\n'
3915*cda5da8dSAndroid Build Coastguard Worker             'The following code:\n'
3916*cda5da8dSAndroid Build Coastguard Worker             '\n'
3917*cda5da8dSAndroid Build Coastguard Worker             '   async for TARGET in ITER:\n'
3918*cda5da8dSAndroid Build Coastguard Worker             '       SUITE\n'
3919*cda5da8dSAndroid Build Coastguard Worker             '   else:\n'
3920*cda5da8dSAndroid Build Coastguard Worker             '       SUITE2\n'
3921*cda5da8dSAndroid Build Coastguard Worker             '\n'
3922*cda5da8dSAndroid Build Coastguard Worker             'Is semantically equivalent to:\n'
3923*cda5da8dSAndroid Build Coastguard Worker             '\n'
3924*cda5da8dSAndroid Build Coastguard Worker             '   iter = (ITER)\n'
3925*cda5da8dSAndroid Build Coastguard Worker             '   iter = type(iter).__aiter__(iter)\n'
3926*cda5da8dSAndroid Build Coastguard Worker             '   running = True\n'
3927*cda5da8dSAndroid Build Coastguard Worker             '\n'
3928*cda5da8dSAndroid Build Coastguard Worker             '   while running:\n'
3929*cda5da8dSAndroid Build Coastguard Worker             '       try:\n'
3930*cda5da8dSAndroid Build Coastguard Worker             '           TARGET = await type(iter).__anext__(iter)\n'
3931*cda5da8dSAndroid Build Coastguard Worker             '       except StopAsyncIteration:\n'
3932*cda5da8dSAndroid Build Coastguard Worker             '           running = False\n'
3933*cda5da8dSAndroid Build Coastguard Worker             '       else:\n'
3934*cda5da8dSAndroid Build Coastguard Worker             '           SUITE\n'
3935*cda5da8dSAndroid Build Coastguard Worker             '   else:\n'
3936*cda5da8dSAndroid Build Coastguard Worker             '       SUITE2\n'
3937*cda5da8dSAndroid Build Coastguard Worker             '\n'
3938*cda5da8dSAndroid Build Coastguard Worker             'See also "__aiter__()" and "__anext__()" for details.\n'
3939*cda5da8dSAndroid Build Coastguard Worker             '\n'
3940*cda5da8dSAndroid Build Coastguard Worker             'It is a "SyntaxError" to use an "async for" statement outside '
3941*cda5da8dSAndroid Build Coastguard Worker             'the body\n'
3942*cda5da8dSAndroid Build Coastguard Worker             'of a coroutine function.\n'
3943*cda5da8dSAndroid Build Coastguard Worker             '\n'
3944*cda5da8dSAndroid Build Coastguard Worker             '\n'
3945*cda5da8dSAndroid Build Coastguard Worker             'The "async with" statement\n'
3946*cda5da8dSAndroid Build Coastguard Worker             '--------------------------\n'
3947*cda5da8dSAndroid Build Coastguard Worker             '\n'
3948*cda5da8dSAndroid Build Coastguard Worker             '   async_with_stmt ::= "async" with_stmt\n'
3949*cda5da8dSAndroid Build Coastguard Worker             '\n'
3950*cda5da8dSAndroid Build Coastguard Worker             'An *asynchronous context manager* is a *context manager* that is '
3951*cda5da8dSAndroid Build Coastguard Worker             'able\n'
3952*cda5da8dSAndroid Build Coastguard Worker             'to suspend execution in its *enter* and *exit* methods.\n'
3953*cda5da8dSAndroid Build Coastguard Worker             '\n'
3954*cda5da8dSAndroid Build Coastguard Worker             'The following code:\n'
3955*cda5da8dSAndroid Build Coastguard Worker             '\n'
3956*cda5da8dSAndroid Build Coastguard Worker             '   async with EXPRESSION as TARGET:\n'
3957*cda5da8dSAndroid Build Coastguard Worker             '       SUITE\n'
3958*cda5da8dSAndroid Build Coastguard Worker             '\n'
3959*cda5da8dSAndroid Build Coastguard Worker             'is semantically equivalent to:\n'
3960*cda5da8dSAndroid Build Coastguard Worker             '\n'
3961*cda5da8dSAndroid Build Coastguard Worker             '   manager = (EXPRESSION)\n'
3962*cda5da8dSAndroid Build Coastguard Worker             '   aenter = type(manager).__aenter__\n'
3963*cda5da8dSAndroid Build Coastguard Worker             '   aexit = type(manager).__aexit__\n'
3964*cda5da8dSAndroid Build Coastguard Worker             '   value = await aenter(manager)\n'
3965*cda5da8dSAndroid Build Coastguard Worker             '   hit_except = False\n'
3966*cda5da8dSAndroid Build Coastguard Worker             '\n'
3967*cda5da8dSAndroid Build Coastguard Worker             '   try:\n'
3968*cda5da8dSAndroid Build Coastguard Worker             '       TARGET = value\n'
3969*cda5da8dSAndroid Build Coastguard Worker             '       SUITE\n'
3970*cda5da8dSAndroid Build Coastguard Worker             '   except:\n'
3971*cda5da8dSAndroid Build Coastguard Worker             '       hit_except = True\n'
3972*cda5da8dSAndroid Build Coastguard Worker             '       if not await aexit(manager, *sys.exc_info()):\n'
3973*cda5da8dSAndroid Build Coastguard Worker             '           raise\n'
3974*cda5da8dSAndroid Build Coastguard Worker             '   finally:\n'
3975*cda5da8dSAndroid Build Coastguard Worker             '       if not hit_except:\n'
3976*cda5da8dSAndroid Build Coastguard Worker             '           await aexit(manager, None, None, None)\n'
3977*cda5da8dSAndroid Build Coastguard Worker             '\n'
3978*cda5da8dSAndroid Build Coastguard Worker             'See also "__aenter__()" and "__aexit__()" for details.\n'
3979*cda5da8dSAndroid Build Coastguard Worker             '\n'
3980*cda5da8dSAndroid Build Coastguard Worker             'It is a "SyntaxError" to use an "async with" statement outside '
3981*cda5da8dSAndroid Build Coastguard Worker             'the\n'
3982*cda5da8dSAndroid Build Coastguard Worker             'body of a coroutine function.\n'
3983*cda5da8dSAndroid Build Coastguard Worker             '\n'
3984*cda5da8dSAndroid Build Coastguard Worker             'See also:\n'
3985*cda5da8dSAndroid Build Coastguard Worker             '\n'
3986*cda5da8dSAndroid Build Coastguard Worker             '  **PEP 492** - Coroutines with async and await syntax\n'
3987*cda5da8dSAndroid Build Coastguard Worker             '     The proposal that made coroutines a proper standalone '
3988*cda5da8dSAndroid Build Coastguard Worker             'concept in\n'
3989*cda5da8dSAndroid Build Coastguard Worker             '     Python, and added supporting syntax.\n'
3990*cda5da8dSAndroid Build Coastguard Worker             '\n'
3991*cda5da8dSAndroid Build Coastguard Worker             '-[ Footnotes ]-\n'
3992*cda5da8dSAndroid Build Coastguard Worker             '\n'
3993*cda5da8dSAndroid Build Coastguard Worker             '[1] The exception is propagated to the invocation stack unless '
3994*cda5da8dSAndroid Build Coastguard Worker             'there\n'
3995*cda5da8dSAndroid Build Coastguard Worker             '    is a "finally" clause which happens to raise another '
3996*cda5da8dSAndroid Build Coastguard Worker             'exception.\n'
3997*cda5da8dSAndroid Build Coastguard Worker             '    That new exception causes the old one to be lost.\n'
3998*cda5da8dSAndroid Build Coastguard Worker             '\n'
3999*cda5da8dSAndroid Build Coastguard Worker             '[2] In pattern matching, a sequence is defined as one of the\n'
4000*cda5da8dSAndroid Build Coastguard Worker             '    following:\n'
4001*cda5da8dSAndroid Build Coastguard Worker             '\n'
4002*cda5da8dSAndroid Build Coastguard Worker             '       * a class that inherits from "collections.abc.Sequence"\n'
4003*cda5da8dSAndroid Build Coastguard Worker             '\n'
4004*cda5da8dSAndroid Build Coastguard Worker             '       * a Python class that has been registered as\n'
4005*cda5da8dSAndroid Build Coastguard Worker             '         "collections.abc.Sequence"\n'
4006*cda5da8dSAndroid Build Coastguard Worker             '\n'
4007*cda5da8dSAndroid Build Coastguard Worker             '       * a builtin class that has its (CPython) '
4008*cda5da8dSAndroid Build Coastguard Worker             '"Py_TPFLAGS_SEQUENCE"\n'
4009*cda5da8dSAndroid Build Coastguard Worker             '         bit set\n'
4010*cda5da8dSAndroid Build Coastguard Worker             '\n'
4011*cda5da8dSAndroid Build Coastguard Worker             '       * a class that inherits from any of the above\n'
4012*cda5da8dSAndroid Build Coastguard Worker             '\n'
4013*cda5da8dSAndroid Build Coastguard Worker             '    The following standard library classes are sequences:\n'
4014*cda5da8dSAndroid Build Coastguard Worker             '\n'
4015*cda5da8dSAndroid Build Coastguard Worker             '       * "array.array"\n'
4016*cda5da8dSAndroid Build Coastguard Worker             '\n'
4017*cda5da8dSAndroid Build Coastguard Worker             '       * "collections.deque"\n'
4018*cda5da8dSAndroid Build Coastguard Worker             '\n'
4019*cda5da8dSAndroid Build Coastguard Worker             '       * "list"\n'
4020*cda5da8dSAndroid Build Coastguard Worker             '\n'
4021*cda5da8dSAndroid Build Coastguard Worker             '       * "memoryview"\n'
4022*cda5da8dSAndroid Build Coastguard Worker             '\n'
4023*cda5da8dSAndroid Build Coastguard Worker             '       * "range"\n'
4024*cda5da8dSAndroid Build Coastguard Worker             '\n'
4025*cda5da8dSAndroid Build Coastguard Worker             '       * "tuple"\n'
4026*cda5da8dSAndroid Build Coastguard Worker             '\n'
4027*cda5da8dSAndroid Build Coastguard Worker             '    Note:\n'
4028*cda5da8dSAndroid Build Coastguard Worker             '\n'
4029*cda5da8dSAndroid Build Coastguard Worker             '      Subject values of type "str", "bytes", and "bytearray" do '
4030*cda5da8dSAndroid Build Coastguard Worker             'not\n'
4031*cda5da8dSAndroid Build Coastguard Worker             '      match sequence patterns.\n'
4032*cda5da8dSAndroid Build Coastguard Worker             '\n'
4033*cda5da8dSAndroid Build Coastguard Worker             '[3] In pattern matching, a mapping is defined as one of the '
4034*cda5da8dSAndroid Build Coastguard Worker             'following:\n'
4035*cda5da8dSAndroid Build Coastguard Worker             '\n'
4036*cda5da8dSAndroid Build Coastguard Worker             '       * a class that inherits from "collections.abc.Mapping"\n'
4037*cda5da8dSAndroid Build Coastguard Worker             '\n'
4038*cda5da8dSAndroid Build Coastguard Worker             '       * a Python class that has been registered as\n'
4039*cda5da8dSAndroid Build Coastguard Worker             '         "collections.abc.Mapping"\n'
4040*cda5da8dSAndroid Build Coastguard Worker             '\n'
4041*cda5da8dSAndroid Build Coastguard Worker             '       * a builtin class that has its (CPython) '
4042*cda5da8dSAndroid Build Coastguard Worker             '"Py_TPFLAGS_MAPPING"\n'
4043*cda5da8dSAndroid Build Coastguard Worker             '         bit set\n'
4044*cda5da8dSAndroid Build Coastguard Worker             '\n'
4045*cda5da8dSAndroid Build Coastguard Worker             '       * a class that inherits from any of the above\n'
4046*cda5da8dSAndroid Build Coastguard Worker             '\n'
4047*cda5da8dSAndroid Build Coastguard Worker             '    The standard library classes "dict" and '
4048*cda5da8dSAndroid Build Coastguard Worker             '"types.MappingProxyType"\n'
4049*cda5da8dSAndroid Build Coastguard Worker             '    are mappings.\n'
4050*cda5da8dSAndroid Build Coastguard Worker             '\n'
4051*cda5da8dSAndroid Build Coastguard Worker             '[4] A string literal appearing as the first statement in the '
4052*cda5da8dSAndroid Build Coastguard Worker             'function\n'
4053*cda5da8dSAndroid Build Coastguard Worker             '    body is transformed into the function’s "__doc__" attribute '
4054*cda5da8dSAndroid Build Coastguard Worker             'and\n'
4055*cda5da8dSAndroid Build Coastguard Worker             '    therefore the function’s *docstring*.\n'
4056*cda5da8dSAndroid Build Coastguard Worker             '\n'
4057*cda5da8dSAndroid Build Coastguard Worker             '[5] A string literal appearing as the first statement in the '
4058*cda5da8dSAndroid Build Coastguard Worker             'class\n'
4059*cda5da8dSAndroid Build Coastguard Worker             '    body is transformed into the namespace’s "__doc__" item and\n'
4060*cda5da8dSAndroid Build Coastguard Worker             '    therefore the class’s *docstring*.\n',
4061*cda5da8dSAndroid Build Coastguard Worker 'context-managers': 'With Statement Context Managers\n'
4062*cda5da8dSAndroid Build Coastguard Worker                     '*******************************\n'
4063*cda5da8dSAndroid Build Coastguard Worker                     '\n'
4064*cda5da8dSAndroid Build Coastguard Worker                     'A *context manager* is an object that defines the '
4065*cda5da8dSAndroid Build Coastguard Worker                     'runtime context to\n'
4066*cda5da8dSAndroid Build Coastguard Worker                     'be established when executing a "with" statement. The '
4067*cda5da8dSAndroid Build Coastguard Worker                     'context manager\n'
4068*cda5da8dSAndroid Build Coastguard Worker                     'handles the entry into, and the exit from, the desired '
4069*cda5da8dSAndroid Build Coastguard Worker                     'runtime context\n'
4070*cda5da8dSAndroid Build Coastguard Worker                     'for the execution of the block of code.  Context '
4071*cda5da8dSAndroid Build Coastguard Worker                     'managers are normally\n'
4072*cda5da8dSAndroid Build Coastguard Worker                     'invoked using the "with" statement (described in section '
4073*cda5da8dSAndroid Build Coastguard Worker                     'The with\n'
4074*cda5da8dSAndroid Build Coastguard Worker                     'statement), but can also be used by directly invoking '
4075*cda5da8dSAndroid Build Coastguard Worker                     'their methods.\n'
4076*cda5da8dSAndroid Build Coastguard Worker                     '\n'
4077*cda5da8dSAndroid Build Coastguard Worker                     'Typical uses of context managers include saving and '
4078*cda5da8dSAndroid Build Coastguard Worker                     'restoring various\n'
4079*cda5da8dSAndroid Build Coastguard Worker                     'kinds of global state, locking and unlocking resources, '
4080*cda5da8dSAndroid Build Coastguard Worker                     'closing opened\n'
4081*cda5da8dSAndroid Build Coastguard Worker                     'files, etc.\n'
4082*cda5da8dSAndroid Build Coastguard Worker                     '\n'
4083*cda5da8dSAndroid Build Coastguard Worker                     'For more information on context managers, see Context '
4084*cda5da8dSAndroid Build Coastguard Worker                     'Manager Types.\n'
4085*cda5da8dSAndroid Build Coastguard Worker                     '\n'
4086*cda5da8dSAndroid Build Coastguard Worker                     'object.__enter__(self)\n'
4087*cda5da8dSAndroid Build Coastguard Worker                     '\n'
4088*cda5da8dSAndroid Build Coastguard Worker                     '   Enter the runtime context related to this object. The '
4089*cda5da8dSAndroid Build Coastguard Worker                     '"with"\n'
4090*cda5da8dSAndroid Build Coastguard Worker                     '   statement will bind this method’s return value to the '
4091*cda5da8dSAndroid Build Coastguard Worker                     'target(s)\n'
4092*cda5da8dSAndroid Build Coastguard Worker                     '   specified in the "as" clause of the statement, if '
4093*cda5da8dSAndroid Build Coastguard Worker                     'any.\n'
4094*cda5da8dSAndroid Build Coastguard Worker                     '\n'
4095*cda5da8dSAndroid Build Coastguard Worker                     'object.__exit__(self, exc_type, exc_value, traceback)\n'
4096*cda5da8dSAndroid Build Coastguard Worker                     '\n'
4097*cda5da8dSAndroid Build Coastguard Worker                     '   Exit the runtime context related to this object. The '
4098*cda5da8dSAndroid Build Coastguard Worker                     'parameters\n'
4099*cda5da8dSAndroid Build Coastguard Worker                     '   describe the exception that caused the context to be '
4100*cda5da8dSAndroid Build Coastguard Worker                     'exited. If the\n'
4101*cda5da8dSAndroid Build Coastguard Worker                     '   context was exited without an exception, all three '
4102*cda5da8dSAndroid Build Coastguard Worker                     'arguments will\n'
4103*cda5da8dSAndroid Build Coastguard Worker                     '   be "None".\n'
4104*cda5da8dSAndroid Build Coastguard Worker                     '\n'
4105*cda5da8dSAndroid Build Coastguard Worker                     '   If an exception is supplied, and the method wishes to '
4106*cda5da8dSAndroid Build Coastguard Worker                     'suppress the\n'
4107*cda5da8dSAndroid Build Coastguard Worker                     '   exception (i.e., prevent it from being propagated), '
4108*cda5da8dSAndroid Build Coastguard Worker                     'it should\n'
4109*cda5da8dSAndroid Build Coastguard Worker                     '   return a true value. Otherwise, the exception will be '
4110*cda5da8dSAndroid Build Coastguard Worker                     'processed\n'
4111*cda5da8dSAndroid Build Coastguard Worker                     '   normally upon exit from this method.\n'
4112*cda5da8dSAndroid Build Coastguard Worker                     '\n'
4113*cda5da8dSAndroid Build Coastguard Worker                     '   Note that "__exit__()" methods should not reraise the '
4114*cda5da8dSAndroid Build Coastguard Worker                     'passed-in\n'
4115*cda5da8dSAndroid Build Coastguard Worker                     '   exception; this is the caller’s responsibility.\n'
4116*cda5da8dSAndroid Build Coastguard Worker                     '\n'
4117*cda5da8dSAndroid Build Coastguard Worker                     'See also:\n'
4118*cda5da8dSAndroid Build Coastguard Worker                     '\n'
4119*cda5da8dSAndroid Build Coastguard Worker                     '  **PEP 343** - The “with” statement\n'
4120*cda5da8dSAndroid Build Coastguard Worker                     '     The specification, background, and examples for the '
4121*cda5da8dSAndroid Build Coastguard Worker                     'Python "with"\n'
4122*cda5da8dSAndroid Build Coastguard Worker                     '     statement.\n',
4123*cda5da8dSAndroid Build Coastguard Worker 'continue': 'The "continue" statement\n'
4124*cda5da8dSAndroid Build Coastguard Worker             '************************\n'
4125*cda5da8dSAndroid Build Coastguard Worker             '\n'
4126*cda5da8dSAndroid Build Coastguard Worker             '   continue_stmt ::= "continue"\n'
4127*cda5da8dSAndroid Build Coastguard Worker             '\n'
4128*cda5da8dSAndroid Build Coastguard Worker             '"continue" may only occur syntactically nested in a "for" or '
4129*cda5da8dSAndroid Build Coastguard Worker             '"while"\n'
4130*cda5da8dSAndroid Build Coastguard Worker             'loop, but not nested in a function or class definition within '
4131*cda5da8dSAndroid Build Coastguard Worker             'that\n'
4132*cda5da8dSAndroid Build Coastguard Worker             'loop.  It continues with the next cycle of the nearest enclosing '
4133*cda5da8dSAndroid Build Coastguard Worker             'loop.\n'
4134*cda5da8dSAndroid Build Coastguard Worker             '\n'
4135*cda5da8dSAndroid Build Coastguard Worker             'When "continue" passes control out of a "try" statement with a\n'
4136*cda5da8dSAndroid Build Coastguard Worker             '"finally" clause, that "finally" clause is executed before '
4137*cda5da8dSAndroid Build Coastguard Worker             'really\n'
4138*cda5da8dSAndroid Build Coastguard Worker             'starting the next loop cycle.\n',
4139*cda5da8dSAndroid Build Coastguard Worker 'conversions': 'Arithmetic conversions\n'
4140*cda5da8dSAndroid Build Coastguard Worker                '**********************\n'
4141*cda5da8dSAndroid Build Coastguard Worker                '\n'
4142*cda5da8dSAndroid Build Coastguard Worker                'When a description of an arithmetic operator below uses the '
4143*cda5da8dSAndroid Build Coastguard Worker                'phrase\n'
4144*cda5da8dSAndroid Build Coastguard Worker                '“the numeric arguments are converted to a common type”, this '
4145*cda5da8dSAndroid Build Coastguard Worker                'means\n'
4146*cda5da8dSAndroid Build Coastguard Worker                'that the operator implementation for built-in types works as '
4147*cda5da8dSAndroid Build Coastguard Worker                'follows:\n'
4148*cda5da8dSAndroid Build Coastguard Worker                '\n'
4149*cda5da8dSAndroid Build Coastguard Worker                '* If either argument is a complex number, the other is '
4150*cda5da8dSAndroid Build Coastguard Worker                'converted to\n'
4151*cda5da8dSAndroid Build Coastguard Worker                '  complex;\n'
4152*cda5da8dSAndroid Build Coastguard Worker                '\n'
4153*cda5da8dSAndroid Build Coastguard Worker                '* otherwise, if either argument is a floating point number, '
4154*cda5da8dSAndroid Build Coastguard Worker                'the other\n'
4155*cda5da8dSAndroid Build Coastguard Worker                '  is converted to floating point;\n'
4156*cda5da8dSAndroid Build Coastguard Worker                '\n'
4157*cda5da8dSAndroid Build Coastguard Worker                '* otherwise, both must be integers and no conversion is '
4158*cda5da8dSAndroid Build Coastguard Worker                'necessary.\n'
4159*cda5da8dSAndroid Build Coastguard Worker                '\n'
4160*cda5da8dSAndroid Build Coastguard Worker                'Some additional rules apply for certain operators (e.g., a '
4161*cda5da8dSAndroid Build Coastguard Worker                'string as a\n'
4162*cda5da8dSAndroid Build Coastguard Worker                'left argument to the ‘%’ operator).  Extensions must define '
4163*cda5da8dSAndroid Build Coastguard Worker                'their own\n'
4164*cda5da8dSAndroid Build Coastguard Worker                'conversion behavior.\n',
4165*cda5da8dSAndroid Build Coastguard Worker 'customization': 'Basic customization\n'
4166*cda5da8dSAndroid Build Coastguard Worker                  '*******************\n'
4167*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4168*cda5da8dSAndroid Build Coastguard Worker                  'object.__new__(cls[, ...])\n'
4169*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4170*cda5da8dSAndroid Build Coastguard Worker                  '   Called to create a new instance of class *cls*.  '
4171*cda5da8dSAndroid Build Coastguard Worker                  '"__new__()" is a\n'
4172*cda5da8dSAndroid Build Coastguard Worker                  '   static method (special-cased so you need not declare it '
4173*cda5da8dSAndroid Build Coastguard Worker                  'as such)\n'
4174*cda5da8dSAndroid Build Coastguard Worker                  '   that takes the class of which an instance was requested '
4175*cda5da8dSAndroid Build Coastguard Worker                  'as its\n'
4176*cda5da8dSAndroid Build Coastguard Worker                  '   first argument.  The remaining arguments are those '
4177*cda5da8dSAndroid Build Coastguard Worker                  'passed to the\n'
4178*cda5da8dSAndroid Build Coastguard Worker                  '   object constructor expression (the call to the class).  '
4179*cda5da8dSAndroid Build Coastguard Worker                  'The return\n'
4180*cda5da8dSAndroid Build Coastguard Worker                  '   value of "__new__()" should be the new object instance '
4181*cda5da8dSAndroid Build Coastguard Worker                  '(usually an\n'
4182*cda5da8dSAndroid Build Coastguard Worker                  '   instance of *cls*).\n'
4183*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4184*cda5da8dSAndroid Build Coastguard Worker                  '   Typical implementations create a new instance of the '
4185*cda5da8dSAndroid Build Coastguard Worker                  'class by\n'
4186*cda5da8dSAndroid Build Coastguard Worker                  '   invoking the superclass’s "__new__()" method using\n'
4187*cda5da8dSAndroid Build Coastguard Worker                  '   "super().__new__(cls[, ...])" with appropriate arguments '
4188*cda5da8dSAndroid Build Coastguard Worker                  'and then\n'
4189*cda5da8dSAndroid Build Coastguard Worker                  '   modifying the newly created instance as necessary before '
4190*cda5da8dSAndroid Build Coastguard Worker                  'returning\n'
4191*cda5da8dSAndroid Build Coastguard Worker                  '   it.\n'
4192*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4193*cda5da8dSAndroid Build Coastguard Worker                  '   If "__new__()" is invoked during object construction and '
4194*cda5da8dSAndroid Build Coastguard Worker                  'it returns\n'
4195*cda5da8dSAndroid Build Coastguard Worker                  '   an instance of *cls*, then the new instance’s '
4196*cda5da8dSAndroid Build Coastguard Worker                  '"__init__()" method\n'
4197*cda5da8dSAndroid Build Coastguard Worker                  '   will be invoked like "__init__(self[, ...])", where '
4198*cda5da8dSAndroid Build Coastguard Worker                  '*self* is the\n'
4199*cda5da8dSAndroid Build Coastguard Worker                  '   new instance and the remaining arguments are the same as '
4200*cda5da8dSAndroid Build Coastguard Worker                  'were\n'
4201*cda5da8dSAndroid Build Coastguard Worker                  '   passed to the object constructor.\n'
4202*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4203*cda5da8dSAndroid Build Coastguard Worker                  '   If "__new__()" does not return an instance of *cls*, '
4204*cda5da8dSAndroid Build Coastguard Worker                  'then the new\n'
4205*cda5da8dSAndroid Build Coastguard Worker                  '   instance’s "__init__()" method will not be invoked.\n'
4206*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4207*cda5da8dSAndroid Build Coastguard Worker                  '   "__new__()" is intended mainly to allow subclasses of '
4208*cda5da8dSAndroid Build Coastguard Worker                  'immutable\n'
4209*cda5da8dSAndroid Build Coastguard Worker                  '   types (like int, str, or tuple) to customize instance '
4210*cda5da8dSAndroid Build Coastguard Worker                  'creation.  It\n'
4211*cda5da8dSAndroid Build Coastguard Worker                  '   is also commonly overridden in custom metaclasses in '
4212*cda5da8dSAndroid Build Coastguard Worker                  'order to\n'
4213*cda5da8dSAndroid Build Coastguard Worker                  '   customize class creation.\n'
4214*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4215*cda5da8dSAndroid Build Coastguard Worker                  'object.__init__(self[, ...])\n'
4216*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4217*cda5da8dSAndroid Build Coastguard Worker                  '   Called after the instance has been created (by '
4218*cda5da8dSAndroid Build Coastguard Worker                  '"__new__()"), but\n'
4219*cda5da8dSAndroid Build Coastguard Worker                  '   before it is returned to the caller.  The arguments are '
4220*cda5da8dSAndroid Build Coastguard Worker                  'those\n'
4221*cda5da8dSAndroid Build Coastguard Worker                  '   passed to the class constructor expression.  If a base '
4222*cda5da8dSAndroid Build Coastguard Worker                  'class has an\n'
4223*cda5da8dSAndroid Build Coastguard Worker                  '   "__init__()" method, the derived class’s "__init__()" '
4224*cda5da8dSAndroid Build Coastguard Worker                  'method, if\n'
4225*cda5da8dSAndroid Build Coastguard Worker                  '   any, must explicitly call it to ensure proper '
4226*cda5da8dSAndroid Build Coastguard Worker                  'initialization of the\n'
4227*cda5da8dSAndroid Build Coastguard Worker                  '   base class part of the instance; for example:\n'
4228*cda5da8dSAndroid Build Coastguard Worker                  '   "super().__init__([args...])".\n'
4229*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4230*cda5da8dSAndroid Build Coastguard Worker                  '   Because "__new__()" and "__init__()" work together in '
4231*cda5da8dSAndroid Build Coastguard Worker                  'constructing\n'
4232*cda5da8dSAndroid Build Coastguard Worker                  '   objects ("__new__()" to create it, and "__init__()" to '
4233*cda5da8dSAndroid Build Coastguard Worker                  'customize\n'
4234*cda5da8dSAndroid Build Coastguard Worker                  '   it), no non-"None" value may be returned by '
4235*cda5da8dSAndroid Build Coastguard Worker                  '"__init__()"; doing so\n'
4236*cda5da8dSAndroid Build Coastguard Worker                  '   will cause a "TypeError" to be raised at runtime.\n'
4237*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4238*cda5da8dSAndroid Build Coastguard Worker                  'object.__del__(self)\n'
4239*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4240*cda5da8dSAndroid Build Coastguard Worker                  '   Called when the instance is about to be destroyed.  This '
4241*cda5da8dSAndroid Build Coastguard Worker                  'is also\n'
4242*cda5da8dSAndroid Build Coastguard Worker                  '   called a finalizer or (improperly) a destructor.  If a '
4243*cda5da8dSAndroid Build Coastguard Worker                  'base class\n'
4244*cda5da8dSAndroid Build Coastguard Worker                  '   has a "__del__()" method, the derived class’s '
4245*cda5da8dSAndroid Build Coastguard Worker                  '"__del__()" method,\n'
4246*cda5da8dSAndroid Build Coastguard Worker                  '   if any, must explicitly call it to ensure proper '
4247*cda5da8dSAndroid Build Coastguard Worker                  'deletion of the\n'
4248*cda5da8dSAndroid Build Coastguard Worker                  '   base class part of the instance.\n'
4249*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4250*cda5da8dSAndroid Build Coastguard Worker                  '   It is possible (though not recommended!) for the '
4251*cda5da8dSAndroid Build Coastguard Worker                  '"__del__()" method\n'
4252*cda5da8dSAndroid Build Coastguard Worker                  '   to postpone destruction of the instance by creating a '
4253*cda5da8dSAndroid Build Coastguard Worker                  'new reference\n'
4254*cda5da8dSAndroid Build Coastguard Worker                  '   to it.  This is called object *resurrection*.  It is\n'
4255*cda5da8dSAndroid Build Coastguard Worker                  '   implementation-dependent whether "__del__()" is called a '
4256*cda5da8dSAndroid Build Coastguard Worker                  'second\n'
4257*cda5da8dSAndroid Build Coastguard Worker                  '   time when a resurrected object is about to be destroyed; '
4258*cda5da8dSAndroid Build Coastguard Worker                  'the\n'
4259*cda5da8dSAndroid Build Coastguard Worker                  '   current *CPython* implementation only calls it once.\n'
4260*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4261*cda5da8dSAndroid Build Coastguard Worker                  '   It is not guaranteed that "__del__()" methods are called '
4262*cda5da8dSAndroid Build Coastguard Worker                  'for\n'
4263*cda5da8dSAndroid Build Coastguard Worker                  '   objects that still exist when the interpreter exits.\n'
4264*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4265*cda5da8dSAndroid Build Coastguard Worker                  '   Note:\n'
4266*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4267*cda5da8dSAndroid Build Coastguard Worker                  '     "del x" doesn’t directly call "x.__del__()" — the '
4268*cda5da8dSAndroid Build Coastguard Worker                  'former\n'
4269*cda5da8dSAndroid Build Coastguard Worker                  '     decrements the reference count for "x" by one, and the '
4270*cda5da8dSAndroid Build Coastguard Worker                  'latter is\n'
4271*cda5da8dSAndroid Build Coastguard Worker                  '     only called when "x"’s reference count reaches zero.\n'
4272*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4273*cda5da8dSAndroid Build Coastguard Worker                  '   **CPython implementation detail:** It is possible for a '
4274*cda5da8dSAndroid Build Coastguard Worker                  'reference\n'
4275*cda5da8dSAndroid Build Coastguard Worker                  '   cycle to prevent the reference count of an object from '
4276*cda5da8dSAndroid Build Coastguard Worker                  'going to\n'
4277*cda5da8dSAndroid Build Coastguard Worker                  '   zero.  In this case, the cycle will be later detected '
4278*cda5da8dSAndroid Build Coastguard Worker                  'and deleted\n'
4279*cda5da8dSAndroid Build Coastguard Worker                  '   by the *cyclic garbage collector*.  A common cause of '
4280*cda5da8dSAndroid Build Coastguard Worker                  'reference\n'
4281*cda5da8dSAndroid Build Coastguard Worker                  '   cycles is when an exception has been caught in a local '
4282*cda5da8dSAndroid Build Coastguard Worker                  'variable.\n'
4283*cda5da8dSAndroid Build Coastguard Worker                  '   The frame’s locals then reference the exception, which '
4284*cda5da8dSAndroid Build Coastguard Worker                  'references\n'
4285*cda5da8dSAndroid Build Coastguard Worker                  '   its own traceback, which references the locals of all '
4286*cda5da8dSAndroid Build Coastguard Worker                  'frames caught\n'
4287*cda5da8dSAndroid Build Coastguard Worker                  '   in the traceback.\n'
4288*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4289*cda5da8dSAndroid Build Coastguard Worker                  '   See also: Documentation for the "gc" module.\n'
4290*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4291*cda5da8dSAndroid Build Coastguard Worker                  '   Warning:\n'
4292*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4293*cda5da8dSAndroid Build Coastguard Worker                  '     Due to the precarious circumstances under which '
4294*cda5da8dSAndroid Build Coastguard Worker                  '"__del__()"\n'
4295*cda5da8dSAndroid Build Coastguard Worker                  '     methods are invoked, exceptions that occur during '
4296*cda5da8dSAndroid Build Coastguard Worker                  'their execution\n'
4297*cda5da8dSAndroid Build Coastguard Worker                  '     are ignored, and a warning is printed to "sys.stderr" '
4298*cda5da8dSAndroid Build Coastguard Worker                  'instead.\n'
4299*cda5da8dSAndroid Build Coastguard Worker                  '     In particular:\n'
4300*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4301*cda5da8dSAndroid Build Coastguard Worker                  '     * "__del__()" can be invoked when arbitrary code is '
4302*cda5da8dSAndroid Build Coastguard Worker                  'being\n'
4303*cda5da8dSAndroid Build Coastguard Worker                  '       executed, including from any arbitrary thread.  If '
4304*cda5da8dSAndroid Build Coastguard Worker                  '"__del__()"\n'
4305*cda5da8dSAndroid Build Coastguard Worker                  '       needs to take a lock or invoke any other blocking '
4306*cda5da8dSAndroid Build Coastguard Worker                  'resource, it\n'
4307*cda5da8dSAndroid Build Coastguard Worker                  '       may deadlock as the resource may already be taken by '
4308*cda5da8dSAndroid Build Coastguard Worker                  'the code\n'
4309*cda5da8dSAndroid Build Coastguard Worker                  '       that gets interrupted to execute "__del__()".\n'
4310*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4311*cda5da8dSAndroid Build Coastguard Worker                  '     * "__del__()" can be executed during interpreter '
4312*cda5da8dSAndroid Build Coastguard Worker                  'shutdown.  As a\n'
4313*cda5da8dSAndroid Build Coastguard Worker                  '       consequence, the global variables it needs to access '
4314*cda5da8dSAndroid Build Coastguard Worker                  '(including\n'
4315*cda5da8dSAndroid Build Coastguard Worker                  '       other modules) may already have been deleted or set '
4316*cda5da8dSAndroid Build Coastguard Worker                  'to "None".\n'
4317*cda5da8dSAndroid Build Coastguard Worker                  '       Python guarantees that globals whose name begins '
4318*cda5da8dSAndroid Build Coastguard Worker                  'with a single\n'
4319*cda5da8dSAndroid Build Coastguard Worker                  '       underscore are deleted from their module before '
4320*cda5da8dSAndroid Build Coastguard Worker                  'other globals\n'
4321*cda5da8dSAndroid Build Coastguard Worker                  '       are deleted; if no other references to such globals '
4322*cda5da8dSAndroid Build Coastguard Worker                  'exist, this\n'
4323*cda5da8dSAndroid Build Coastguard Worker                  '       may help in assuring that imported modules are still '
4324*cda5da8dSAndroid Build Coastguard Worker                  'available\n'
4325*cda5da8dSAndroid Build Coastguard Worker                  '       at the time when the "__del__()" method is called.\n'
4326*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4327*cda5da8dSAndroid Build Coastguard Worker                  'object.__repr__(self)\n'
4328*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4329*cda5da8dSAndroid Build Coastguard Worker                  '   Called by the "repr()" built-in function to compute the '
4330*cda5da8dSAndroid Build Coastguard Worker                  '“official”\n'
4331*cda5da8dSAndroid Build Coastguard Worker                  '   string representation of an object.  If at all possible, '
4332*cda5da8dSAndroid Build Coastguard Worker                  'this\n'
4333*cda5da8dSAndroid Build Coastguard Worker                  '   should look like a valid Python expression that could be '
4334*cda5da8dSAndroid Build Coastguard Worker                  'used to\n'
4335*cda5da8dSAndroid Build Coastguard Worker                  '   recreate an object with the same value (given an '
4336*cda5da8dSAndroid Build Coastguard Worker                  'appropriate\n'
4337*cda5da8dSAndroid Build Coastguard Worker                  '   environment).  If this is not possible, a string of the '
4338*cda5da8dSAndroid Build Coastguard Worker                  'form\n'
4339*cda5da8dSAndroid Build Coastguard Worker                  '   "<...some useful description...>" should be returned. '
4340*cda5da8dSAndroid Build Coastguard Worker                  'The return\n'
4341*cda5da8dSAndroid Build Coastguard Worker                  '   value must be a string object. If a class defines '
4342*cda5da8dSAndroid Build Coastguard Worker                  '"__repr__()" but\n'
4343*cda5da8dSAndroid Build Coastguard Worker                  '   not "__str__()", then "__repr__()" is also used when an '
4344*cda5da8dSAndroid Build Coastguard Worker                  '“informal”\n'
4345*cda5da8dSAndroid Build Coastguard Worker                  '   string representation of instances of that class is '
4346*cda5da8dSAndroid Build Coastguard Worker                  'required.\n'
4347*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4348*cda5da8dSAndroid Build Coastguard Worker                  '   This is typically used for debugging, so it is important '
4349*cda5da8dSAndroid Build Coastguard Worker                  'that the\n'
4350*cda5da8dSAndroid Build Coastguard Worker                  '   representation is information-rich and unambiguous.\n'
4351*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4352*cda5da8dSAndroid Build Coastguard Worker                  'object.__str__(self)\n'
4353*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4354*cda5da8dSAndroid Build Coastguard Worker                  '   Called by "str(object)" and the built-in functions '
4355*cda5da8dSAndroid Build Coastguard Worker                  '"format()" and\n'
4356*cda5da8dSAndroid Build Coastguard Worker                  '   "print()" to compute the “informal” or nicely printable '
4357*cda5da8dSAndroid Build Coastguard Worker                  'string\n'
4358*cda5da8dSAndroid Build Coastguard Worker                  '   representation of an object.  The return value must be a '
4359*cda5da8dSAndroid Build Coastguard Worker                  'string\n'
4360*cda5da8dSAndroid Build Coastguard Worker                  '   object.\n'
4361*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4362*cda5da8dSAndroid Build Coastguard Worker                  '   This method differs from "object.__repr__()" in that '
4363*cda5da8dSAndroid Build Coastguard Worker                  'there is no\n'
4364*cda5da8dSAndroid Build Coastguard Worker                  '   expectation that "__str__()" return a valid Python '
4365*cda5da8dSAndroid Build Coastguard Worker                  'expression: a\n'
4366*cda5da8dSAndroid Build Coastguard Worker                  '   more convenient or concise representation can be used.\n'
4367*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4368*cda5da8dSAndroid Build Coastguard Worker                  '   The default implementation defined by the built-in type '
4369*cda5da8dSAndroid Build Coastguard Worker                  '"object"\n'
4370*cda5da8dSAndroid Build Coastguard Worker                  '   calls "object.__repr__()".\n'
4371*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4372*cda5da8dSAndroid Build Coastguard Worker                  'object.__bytes__(self)\n'
4373*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4374*cda5da8dSAndroid Build Coastguard Worker                  '   Called by bytes to compute a byte-string representation '
4375*cda5da8dSAndroid Build Coastguard Worker                  'of an\n'
4376*cda5da8dSAndroid Build Coastguard Worker                  '   object. This should return a "bytes" object.\n'
4377*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4378*cda5da8dSAndroid Build Coastguard Worker                  'object.__format__(self, format_spec)\n'
4379*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4380*cda5da8dSAndroid Build Coastguard Worker                  '   Called by the "format()" built-in function, and by '
4381*cda5da8dSAndroid Build Coastguard Worker                  'extension,\n'
4382*cda5da8dSAndroid Build Coastguard Worker                  '   evaluation of formatted string literals and the '
4383*cda5da8dSAndroid Build Coastguard Worker                  '"str.format()"\n'
4384*cda5da8dSAndroid Build Coastguard Worker                  '   method, to produce a “formatted” string representation '
4385*cda5da8dSAndroid Build Coastguard Worker                  'of an\n'
4386*cda5da8dSAndroid Build Coastguard Worker                  '   object. The *format_spec* argument is a string that '
4387*cda5da8dSAndroid Build Coastguard Worker                  'contains a\n'
4388*cda5da8dSAndroid Build Coastguard Worker                  '   description of the formatting options desired. The '
4389*cda5da8dSAndroid Build Coastguard Worker                  'interpretation\n'
4390*cda5da8dSAndroid Build Coastguard Worker                  '   of the *format_spec* argument is up to the type '
4391*cda5da8dSAndroid Build Coastguard Worker                  'implementing\n'
4392*cda5da8dSAndroid Build Coastguard Worker                  '   "__format__()", however most classes will either '
4393*cda5da8dSAndroid Build Coastguard Worker                  'delegate\n'
4394*cda5da8dSAndroid Build Coastguard Worker                  '   formatting to one of the built-in types, or use a '
4395*cda5da8dSAndroid Build Coastguard Worker                  'similar\n'
4396*cda5da8dSAndroid Build Coastguard Worker                  '   formatting option syntax.\n'
4397*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4398*cda5da8dSAndroid Build Coastguard Worker                  '   See Format Specification Mini-Language for a description '
4399*cda5da8dSAndroid Build Coastguard Worker                  'of the\n'
4400*cda5da8dSAndroid Build Coastguard Worker                  '   standard formatting syntax.\n'
4401*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4402*cda5da8dSAndroid Build Coastguard Worker                  '   The return value must be a string object.\n'
4403*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4404*cda5da8dSAndroid Build Coastguard Worker                  '   Changed in version 3.4: The __format__ method of '
4405*cda5da8dSAndroid Build Coastguard Worker                  '"object" itself\n'
4406*cda5da8dSAndroid Build Coastguard Worker                  '   raises a "TypeError" if passed any non-empty string.\n'
4407*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4408*cda5da8dSAndroid Build Coastguard Worker                  '   Changed in version 3.7: "object.__format__(x, \'\')" is '
4409*cda5da8dSAndroid Build Coastguard Worker                  'now\n'
4410*cda5da8dSAndroid Build Coastguard Worker                  '   equivalent to "str(x)" rather than "format(str(x), '
4411*cda5da8dSAndroid Build Coastguard Worker                  '\'\')".\n'
4412*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4413*cda5da8dSAndroid Build Coastguard Worker                  'object.__lt__(self, other)\n'
4414*cda5da8dSAndroid Build Coastguard Worker                  'object.__le__(self, other)\n'
4415*cda5da8dSAndroid Build Coastguard Worker                  'object.__eq__(self, other)\n'
4416*cda5da8dSAndroid Build Coastguard Worker                  'object.__ne__(self, other)\n'
4417*cda5da8dSAndroid Build Coastguard Worker                  'object.__gt__(self, other)\n'
4418*cda5da8dSAndroid Build Coastguard Worker                  'object.__ge__(self, other)\n'
4419*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4420*cda5da8dSAndroid Build Coastguard Worker                  '   These are the so-called “rich comparison” methods. The\n'
4421*cda5da8dSAndroid Build Coastguard Worker                  '   correspondence between operator symbols and method names '
4422*cda5da8dSAndroid Build Coastguard Worker                  'is as\n'
4423*cda5da8dSAndroid Build Coastguard Worker                  '   follows: "x<y" calls "x.__lt__(y)", "x<=y" calls '
4424*cda5da8dSAndroid Build Coastguard Worker                  '"x.__le__(y)",\n'
4425*cda5da8dSAndroid Build Coastguard Worker                  '   "x==y" calls "x.__eq__(y)", "x!=y" calls "x.__ne__(y)", '
4426*cda5da8dSAndroid Build Coastguard Worker                  '"x>y" calls\n'
4427*cda5da8dSAndroid Build Coastguard Worker                  '   "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)".\n'
4428*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4429*cda5da8dSAndroid Build Coastguard Worker                  '   A rich comparison method may return the singleton '
4430*cda5da8dSAndroid Build Coastguard Worker                  '"NotImplemented"\n'
4431*cda5da8dSAndroid Build Coastguard Worker                  '   if it does not implement the operation for a given pair '
4432*cda5da8dSAndroid Build Coastguard Worker                  'of\n'
4433*cda5da8dSAndroid Build Coastguard Worker                  '   arguments. By convention, "False" and "True" are '
4434*cda5da8dSAndroid Build Coastguard Worker                  'returned for a\n'
4435*cda5da8dSAndroid Build Coastguard Worker                  '   successful comparison. However, these methods can return '
4436*cda5da8dSAndroid Build Coastguard Worker                  'any value,\n'
4437*cda5da8dSAndroid Build Coastguard Worker                  '   so if the comparison operator is used in a Boolean '
4438*cda5da8dSAndroid Build Coastguard Worker                  'context (e.g.,\n'
4439*cda5da8dSAndroid Build Coastguard Worker                  '   in the condition of an "if" statement), Python will call '
4440*cda5da8dSAndroid Build Coastguard Worker                  '"bool()"\n'
4441*cda5da8dSAndroid Build Coastguard Worker                  '   on the value to determine if the result is true or '
4442*cda5da8dSAndroid Build Coastguard Worker                  'false.\n'
4443*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4444*cda5da8dSAndroid Build Coastguard Worker                  '   By default, "object" implements "__eq__()" by using '
4445*cda5da8dSAndroid Build Coastguard Worker                  '"is", returning\n'
4446*cda5da8dSAndroid Build Coastguard Worker                  '   "NotImplemented" in the case of a false comparison: '
4447*cda5da8dSAndroid Build Coastguard Worker                  '"True if x is y\n'
4448*cda5da8dSAndroid Build Coastguard Worker                  '   else NotImplemented". For "__ne__()", by default it '
4449*cda5da8dSAndroid Build Coastguard Worker                  'delegates to\n'
4450*cda5da8dSAndroid Build Coastguard Worker                  '   "__eq__()" and inverts the result unless it is '
4451*cda5da8dSAndroid Build Coastguard Worker                  '"NotImplemented".\n'
4452*cda5da8dSAndroid Build Coastguard Worker                  '   There are no other implied relationships among the '
4453*cda5da8dSAndroid Build Coastguard Worker                  'comparison\n'
4454*cda5da8dSAndroid Build Coastguard Worker                  '   operators or default implementations; for example, the '
4455*cda5da8dSAndroid Build Coastguard Worker                  'truth of\n'
4456*cda5da8dSAndroid Build Coastguard Worker                  '   "(x<y or x==y)" does not imply "x<=y". To automatically '
4457*cda5da8dSAndroid Build Coastguard Worker                  'generate\n'
4458*cda5da8dSAndroid Build Coastguard Worker                  '   ordering operations from a single root operation, see\n'
4459*cda5da8dSAndroid Build Coastguard Worker                  '   "functools.total_ordering()".\n'
4460*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4461*cda5da8dSAndroid Build Coastguard Worker                  '   See the paragraph on "__hash__()" for some important '
4462*cda5da8dSAndroid Build Coastguard Worker                  'notes on\n'
4463*cda5da8dSAndroid Build Coastguard Worker                  '   creating *hashable* objects which support custom '
4464*cda5da8dSAndroid Build Coastguard Worker                  'comparison\n'
4465*cda5da8dSAndroid Build Coastguard Worker                  '   operations and are usable as dictionary keys.\n'
4466*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4467*cda5da8dSAndroid Build Coastguard Worker                  '   There are no swapped-argument versions of these methods '
4468*cda5da8dSAndroid Build Coastguard Worker                  '(to be used\n'
4469*cda5da8dSAndroid Build Coastguard Worker                  '   when the left argument does not support the operation '
4470*cda5da8dSAndroid Build Coastguard Worker                  'but the right\n'
4471*cda5da8dSAndroid Build Coastguard Worker                  '   argument does); rather, "__lt__()" and "__gt__()" are '
4472*cda5da8dSAndroid Build Coastguard Worker                  'each other’s\n'
4473*cda5da8dSAndroid Build Coastguard Worker                  '   reflection, "__le__()" and "__ge__()" are each other’s '
4474*cda5da8dSAndroid Build Coastguard Worker                  'reflection,\n'
4475*cda5da8dSAndroid Build Coastguard Worker                  '   and "__eq__()" and "__ne__()" are their own reflection. '
4476*cda5da8dSAndroid Build Coastguard Worker                  'If the\n'
4477*cda5da8dSAndroid Build Coastguard Worker                  '   operands are of different types, and right operand’s '
4478*cda5da8dSAndroid Build Coastguard Worker                  'type is a\n'
4479*cda5da8dSAndroid Build Coastguard Worker                  '   direct or indirect subclass of the left operand’s type, '
4480*cda5da8dSAndroid Build Coastguard Worker                  'the\n'
4481*cda5da8dSAndroid Build Coastguard Worker                  '   reflected method of the right operand has priority, '
4482*cda5da8dSAndroid Build Coastguard Worker                  'otherwise the\n'
4483*cda5da8dSAndroid Build Coastguard Worker                  '   left operand’s method has priority.  Virtual subclassing '
4484*cda5da8dSAndroid Build Coastguard Worker                  'is not\n'
4485*cda5da8dSAndroid Build Coastguard Worker                  '   considered.\n'
4486*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4487*cda5da8dSAndroid Build Coastguard Worker                  'object.__hash__(self)\n'
4488*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4489*cda5da8dSAndroid Build Coastguard Worker                  '   Called by built-in function "hash()" and for operations '
4490*cda5da8dSAndroid Build Coastguard Worker                  'on members\n'
4491*cda5da8dSAndroid Build Coastguard Worker                  '   of hashed collections including "set", "frozenset", and '
4492*cda5da8dSAndroid Build Coastguard Worker                  '"dict".\n'
4493*cda5da8dSAndroid Build Coastguard Worker                  '   The "__hash__()" method should return an integer. The '
4494*cda5da8dSAndroid Build Coastguard Worker                  'only required\n'
4495*cda5da8dSAndroid Build Coastguard Worker                  '   property is that objects which compare equal have the '
4496*cda5da8dSAndroid Build Coastguard Worker                  'same hash\n'
4497*cda5da8dSAndroid Build Coastguard Worker                  '   value; it is advised to mix together the hash values of '
4498*cda5da8dSAndroid Build Coastguard Worker                  'the\n'
4499*cda5da8dSAndroid Build Coastguard Worker                  '   components of the object that also play a part in '
4500*cda5da8dSAndroid Build Coastguard Worker                  'comparison of\n'
4501*cda5da8dSAndroid Build Coastguard Worker                  '   objects by packing them into a tuple and hashing the '
4502*cda5da8dSAndroid Build Coastguard Worker                  'tuple.\n'
4503*cda5da8dSAndroid Build Coastguard Worker                  '   Example:\n'
4504*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4505*cda5da8dSAndroid Build Coastguard Worker                  '      def __hash__(self):\n'
4506*cda5da8dSAndroid Build Coastguard Worker                  '          return hash((self.name, self.nick, self.color))\n'
4507*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4508*cda5da8dSAndroid Build Coastguard Worker                  '   Note:\n'
4509*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4510*cda5da8dSAndroid Build Coastguard Worker                  '     "hash()" truncates the value returned from an object’s '
4511*cda5da8dSAndroid Build Coastguard Worker                  'custom\n'
4512*cda5da8dSAndroid Build Coastguard Worker                  '     "__hash__()" method to the size of a "Py_ssize_t".  '
4513*cda5da8dSAndroid Build Coastguard Worker                  'This is\n'
4514*cda5da8dSAndroid Build Coastguard Worker                  '     typically 8 bytes on 64-bit builds and 4 bytes on '
4515*cda5da8dSAndroid Build Coastguard Worker                  '32-bit builds.\n'
4516*cda5da8dSAndroid Build Coastguard Worker                  '     If an object’s   "__hash__()" must interoperate on '
4517*cda5da8dSAndroid Build Coastguard Worker                  'builds of\n'
4518*cda5da8dSAndroid Build Coastguard Worker                  '     different bit sizes, be sure to check the width on all '
4519*cda5da8dSAndroid Build Coastguard Worker                  'supported\n'
4520*cda5da8dSAndroid Build Coastguard Worker                  '     builds.  An easy way to do this is with "python -c '
4521*cda5da8dSAndroid Build Coastguard Worker                  '"import sys;\n'
4522*cda5da8dSAndroid Build Coastguard Worker                  '     print(sys.hash_info.width)"".\n'
4523*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4524*cda5da8dSAndroid Build Coastguard Worker                  '   If a class does not define an "__eq__()" method it '
4525*cda5da8dSAndroid Build Coastguard Worker                  'should not\n'
4526*cda5da8dSAndroid Build Coastguard Worker                  '   define a "__hash__()" operation either; if it defines '
4527*cda5da8dSAndroid Build Coastguard Worker                  '"__eq__()"\n'
4528*cda5da8dSAndroid Build Coastguard Worker                  '   but not "__hash__()", its instances will not be usable '
4529*cda5da8dSAndroid Build Coastguard Worker                  'as items in\n'
4530*cda5da8dSAndroid Build Coastguard Worker                  '   hashable collections.  If a class defines mutable '
4531*cda5da8dSAndroid Build Coastguard Worker                  'objects and\n'
4532*cda5da8dSAndroid Build Coastguard Worker                  '   implements an "__eq__()" method, it should not '
4533*cda5da8dSAndroid Build Coastguard Worker                  'implement\n'
4534*cda5da8dSAndroid Build Coastguard Worker                  '   "__hash__()", since the implementation of *hashable* '
4535*cda5da8dSAndroid Build Coastguard Worker                  'collections\n'
4536*cda5da8dSAndroid Build Coastguard Worker                  '   requires that a key’s hash value is immutable (if the '
4537*cda5da8dSAndroid Build Coastguard Worker                  'object’s hash\n'
4538*cda5da8dSAndroid Build Coastguard Worker                  '   value changes, it will be in the wrong hash bucket).\n'
4539*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4540*cda5da8dSAndroid Build Coastguard Worker                  '   User-defined classes have "__eq__()" and "__hash__()" '
4541*cda5da8dSAndroid Build Coastguard Worker                  'methods by\n'
4542*cda5da8dSAndroid Build Coastguard Worker                  '   default; with them, all objects compare unequal (except '
4543*cda5da8dSAndroid Build Coastguard Worker                  'with\n'
4544*cda5da8dSAndroid Build Coastguard Worker                  '   themselves) and "x.__hash__()" returns an appropriate '
4545*cda5da8dSAndroid Build Coastguard Worker                  'value such\n'
4546*cda5da8dSAndroid Build Coastguard Worker                  '   that "x == y" implies both that "x is y" and "hash(x) == '
4547*cda5da8dSAndroid Build Coastguard Worker                  'hash(y)".\n'
4548*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4549*cda5da8dSAndroid Build Coastguard Worker                  '   A class that overrides "__eq__()" and does not define '
4550*cda5da8dSAndroid Build Coastguard Worker                  '"__hash__()"\n'
4551*cda5da8dSAndroid Build Coastguard Worker                  '   will have its "__hash__()" implicitly set to "None".  '
4552*cda5da8dSAndroid Build Coastguard Worker                  'When the\n'
4553*cda5da8dSAndroid Build Coastguard Worker                  '   "__hash__()" method of a class is "None", instances of '
4554*cda5da8dSAndroid Build Coastguard Worker                  'the class\n'
4555*cda5da8dSAndroid Build Coastguard Worker                  '   will raise an appropriate "TypeError" when a program '
4556*cda5da8dSAndroid Build Coastguard Worker                  'attempts to\n'
4557*cda5da8dSAndroid Build Coastguard Worker                  '   retrieve their hash value, and will also be correctly '
4558*cda5da8dSAndroid Build Coastguard Worker                  'identified as\n'
4559*cda5da8dSAndroid Build Coastguard Worker                  '   unhashable when checking "isinstance(obj,\n'
4560*cda5da8dSAndroid Build Coastguard Worker                  '   collections.abc.Hashable)".\n'
4561*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4562*cda5da8dSAndroid Build Coastguard Worker                  '   If a class that overrides "__eq__()" needs to retain '
4563*cda5da8dSAndroid Build Coastguard Worker                  'the\n'
4564*cda5da8dSAndroid Build Coastguard Worker                  '   implementation of "__hash__()" from a parent class, the '
4565*cda5da8dSAndroid Build Coastguard Worker                  'interpreter\n'
4566*cda5da8dSAndroid Build Coastguard Worker                  '   must be told this explicitly by setting "__hash__ =\n'
4567*cda5da8dSAndroid Build Coastguard Worker                  '   <ParentClass>.__hash__".\n'
4568*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4569*cda5da8dSAndroid Build Coastguard Worker                  '   If a class that does not override "__eq__()" wishes to '
4570*cda5da8dSAndroid Build Coastguard Worker                  'suppress\n'
4571*cda5da8dSAndroid Build Coastguard Worker                  '   hash support, it should include "__hash__ = None" in the '
4572*cda5da8dSAndroid Build Coastguard Worker                  'class\n'
4573*cda5da8dSAndroid Build Coastguard Worker                  '   definition. A class which defines its own "__hash__()" '
4574*cda5da8dSAndroid Build Coastguard Worker                  'that\n'
4575*cda5da8dSAndroid Build Coastguard Worker                  '   explicitly raises a "TypeError" would be incorrectly '
4576*cda5da8dSAndroid Build Coastguard Worker                  'identified as\n'
4577*cda5da8dSAndroid Build Coastguard Worker                  '   hashable by an "isinstance(obj, '
4578*cda5da8dSAndroid Build Coastguard Worker                  'collections.abc.Hashable)" call.\n'
4579*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4580*cda5da8dSAndroid Build Coastguard Worker                  '   Note:\n'
4581*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4582*cda5da8dSAndroid Build Coastguard Worker                  '     By default, the "__hash__()" values of str and bytes '
4583*cda5da8dSAndroid Build Coastguard Worker                  'objects are\n'
4584*cda5da8dSAndroid Build Coastguard Worker                  '     “salted” with an unpredictable random value.  Although '
4585*cda5da8dSAndroid Build Coastguard Worker                  'they\n'
4586*cda5da8dSAndroid Build Coastguard Worker                  '     remain constant within an individual Python process, '
4587*cda5da8dSAndroid Build Coastguard Worker                  'they are not\n'
4588*cda5da8dSAndroid Build Coastguard Worker                  '     predictable between repeated invocations of '
4589*cda5da8dSAndroid Build Coastguard Worker                  'Python.This is\n'
4590*cda5da8dSAndroid Build Coastguard Worker                  '     intended to provide protection against a '
4591*cda5da8dSAndroid Build Coastguard Worker                  'denial-of-service caused\n'
4592*cda5da8dSAndroid Build Coastguard Worker                  '     by carefully chosen inputs that exploit the worst '
4593*cda5da8dSAndroid Build Coastguard Worker                  'case\n'
4594*cda5da8dSAndroid Build Coastguard Worker                  '     performance of a dict insertion, O(n^2) complexity.  '
4595*cda5da8dSAndroid Build Coastguard Worker                  'See\n'
4596*cda5da8dSAndroid Build Coastguard Worker                  '     http://ocert.org/advisories/ocert-2011-003.html for\n'
4597*cda5da8dSAndroid Build Coastguard Worker                  '     details.Changing hash values affects the iteration '
4598*cda5da8dSAndroid Build Coastguard Worker                  'order of sets.\n'
4599*cda5da8dSAndroid Build Coastguard Worker                  '     Python has never made guarantees about this ordering '
4600*cda5da8dSAndroid Build Coastguard Worker                  '(and it\n'
4601*cda5da8dSAndroid Build Coastguard Worker                  '     typically varies between 32-bit and 64-bit builds).See '
4602*cda5da8dSAndroid Build Coastguard Worker                  'also\n'
4603*cda5da8dSAndroid Build Coastguard Worker                  '     "PYTHONHASHSEED".\n'
4604*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4605*cda5da8dSAndroid Build Coastguard Worker                  '   Changed in version 3.3: Hash randomization is enabled by '
4606*cda5da8dSAndroid Build Coastguard Worker                  'default.\n'
4607*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4608*cda5da8dSAndroid Build Coastguard Worker                  'object.__bool__(self)\n'
4609*cda5da8dSAndroid Build Coastguard Worker                  '\n'
4610*cda5da8dSAndroid Build Coastguard Worker                  '   Called to implement truth value testing and the built-in '
4611*cda5da8dSAndroid Build Coastguard Worker                  'operation\n'
4612*cda5da8dSAndroid Build Coastguard Worker                  '   "bool()"; should return "False" or "True".  When this '
4613*cda5da8dSAndroid Build Coastguard Worker                  'method is not\n'
4614*cda5da8dSAndroid Build Coastguard Worker                  '   defined, "__len__()" is called, if it is defined, and '
4615*cda5da8dSAndroid Build Coastguard Worker                  'the object is\n'
4616*cda5da8dSAndroid Build Coastguard Worker                  '   considered true if its result is nonzero.  If a class '
4617*cda5da8dSAndroid Build Coastguard Worker                  'defines\n'
4618*cda5da8dSAndroid Build Coastguard Worker                  '   neither "__len__()" nor "__bool__()", all its instances '
4619*cda5da8dSAndroid Build Coastguard Worker                  'are\n'
4620*cda5da8dSAndroid Build Coastguard Worker                  '   considered true.\n',
4621*cda5da8dSAndroid Build Coastguard Worker 'debugger': '"pdb" — The Python Debugger\n'
4622*cda5da8dSAndroid Build Coastguard Worker             '***************************\n'
4623*cda5da8dSAndroid Build Coastguard Worker             '\n'
4624*cda5da8dSAndroid Build Coastguard Worker             '**Source code:** Lib/pdb.py\n'
4625*cda5da8dSAndroid Build Coastguard Worker             '\n'
4626*cda5da8dSAndroid Build Coastguard Worker             '======================================================================\n'
4627*cda5da8dSAndroid Build Coastguard Worker             '\n'
4628*cda5da8dSAndroid Build Coastguard Worker             'The module "pdb" defines an interactive source code debugger '
4629*cda5da8dSAndroid Build Coastguard Worker             'for\n'
4630*cda5da8dSAndroid Build Coastguard Worker             'Python programs.  It supports setting (conditional) breakpoints '
4631*cda5da8dSAndroid Build Coastguard Worker             'and\n'
4632*cda5da8dSAndroid Build Coastguard Worker             'single stepping at the source line level, inspection of stack '
4633*cda5da8dSAndroid Build Coastguard Worker             'frames,\n'
4634*cda5da8dSAndroid Build Coastguard Worker             'source code listing, and evaluation of arbitrary Python code in '
4635*cda5da8dSAndroid Build Coastguard Worker             'the\n'
4636*cda5da8dSAndroid Build Coastguard Worker             'context of any stack frame.  It also supports post-mortem '
4637*cda5da8dSAndroid Build Coastguard Worker             'debugging\n'
4638*cda5da8dSAndroid Build Coastguard Worker             'and can be called under program control.\n'
4639*cda5da8dSAndroid Build Coastguard Worker             '\n'
4640*cda5da8dSAndroid Build Coastguard Worker             'The debugger is extensible – it is actually defined as the '
4641*cda5da8dSAndroid Build Coastguard Worker             'class\n'
4642*cda5da8dSAndroid Build Coastguard Worker             '"Pdb". This is currently undocumented but easily understood by '
4643*cda5da8dSAndroid Build Coastguard Worker             'reading\n'
4644*cda5da8dSAndroid Build Coastguard Worker             'the source.  The extension interface uses the modules "bdb" and '
4645*cda5da8dSAndroid Build Coastguard Worker             '"cmd".\n'
4646*cda5da8dSAndroid Build Coastguard Worker             '\n'
4647*cda5da8dSAndroid Build Coastguard Worker             'See also:\n'
4648*cda5da8dSAndroid Build Coastguard Worker             '\n'
4649*cda5da8dSAndroid Build Coastguard Worker             '  Module "faulthandler"\n'
4650*cda5da8dSAndroid Build Coastguard Worker             '     Used to dump Python tracebacks explicitly, on a fault, '
4651*cda5da8dSAndroid Build Coastguard Worker             'after a\n'
4652*cda5da8dSAndroid Build Coastguard Worker             '     timeout, or on a user signal.\n'
4653*cda5da8dSAndroid Build Coastguard Worker             '\n'
4654*cda5da8dSAndroid Build Coastguard Worker             '  Module "traceback"\n'
4655*cda5da8dSAndroid Build Coastguard Worker             '     Standard interface to extract, format and print stack '
4656*cda5da8dSAndroid Build Coastguard Worker             'traces of\n'
4657*cda5da8dSAndroid Build Coastguard Worker             '     Python programs.\n'
4658*cda5da8dSAndroid Build Coastguard Worker             '\n'
4659*cda5da8dSAndroid Build Coastguard Worker             'The typical usage to break into the debugger is to insert:\n'
4660*cda5da8dSAndroid Build Coastguard Worker             '\n'
4661*cda5da8dSAndroid Build Coastguard Worker             '   import pdb; pdb.set_trace()\n'
4662*cda5da8dSAndroid Build Coastguard Worker             '\n'
4663*cda5da8dSAndroid Build Coastguard Worker             'Or:\n'
4664*cda5da8dSAndroid Build Coastguard Worker             '\n'
4665*cda5da8dSAndroid Build Coastguard Worker             '   breakpoint()\n'
4666*cda5da8dSAndroid Build Coastguard Worker             '\n'
4667*cda5da8dSAndroid Build Coastguard Worker             'at the location you want to break into the debugger, and then '
4668*cda5da8dSAndroid Build Coastguard Worker             'run the\n'
4669*cda5da8dSAndroid Build Coastguard Worker             'program. You can then step through the code following this '
4670*cda5da8dSAndroid Build Coastguard Worker             'statement,\n'
4671*cda5da8dSAndroid Build Coastguard Worker             'and continue running without the debugger using the "continue"\n'
4672*cda5da8dSAndroid Build Coastguard Worker             'command.\n'
4673*cda5da8dSAndroid Build Coastguard Worker             '\n'
4674*cda5da8dSAndroid Build Coastguard Worker             'New in version 3.7: The built-in "breakpoint()", when called '
4675*cda5da8dSAndroid Build Coastguard Worker             'with\n'
4676*cda5da8dSAndroid Build Coastguard Worker             'defaults, can be used instead of "import pdb; pdb.set_trace()".\n'
4677*cda5da8dSAndroid Build Coastguard Worker             '\n'
4678*cda5da8dSAndroid Build Coastguard Worker             '   def double(x):\n'
4679*cda5da8dSAndroid Build Coastguard Worker             '      breakpoint()\n'
4680*cda5da8dSAndroid Build Coastguard Worker             '      return x * 2\n'
4681*cda5da8dSAndroid Build Coastguard Worker             '   val = 3\n'
4682*cda5da8dSAndroid Build Coastguard Worker             '   print(f"{val} * 2 is {double(val)}")\n'
4683*cda5da8dSAndroid Build Coastguard Worker             '\n'
4684*cda5da8dSAndroid Build Coastguard Worker             'The debugger’s prompt is "(Pdb)", which is the indicator that '
4685*cda5da8dSAndroid Build Coastguard Worker             'you are\n'
4686*cda5da8dSAndroid Build Coastguard Worker             'in debug mode:\n'
4687*cda5da8dSAndroid Build Coastguard Worker             '\n'
4688*cda5da8dSAndroid Build Coastguard Worker             '   > ...(3)double()\n'
4689*cda5da8dSAndroid Build Coastguard Worker             '   -> return x * 2\n'
4690*cda5da8dSAndroid Build Coastguard Worker             '   (Pdb) p x\n'
4691*cda5da8dSAndroid Build Coastguard Worker             '   3\n'
4692*cda5da8dSAndroid Build Coastguard Worker             '   (Pdb) continue\n'
4693*cda5da8dSAndroid Build Coastguard Worker             '   3 * 2 is 6\n'
4694*cda5da8dSAndroid Build Coastguard Worker             '\n'
4695*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.3: Tab-completion via the "readline" module '
4696*cda5da8dSAndroid Build Coastguard Worker             'is\n'
4697*cda5da8dSAndroid Build Coastguard Worker             'available for commands and command arguments, e.g. the current '
4698*cda5da8dSAndroid Build Coastguard Worker             'global\n'
4699*cda5da8dSAndroid Build Coastguard Worker             'and local names are offered as arguments of the "p" command.\n'
4700*cda5da8dSAndroid Build Coastguard Worker             '\n'
4701*cda5da8dSAndroid Build Coastguard Worker             'You can also invoke "pdb" from the command line to debug other\n'
4702*cda5da8dSAndroid Build Coastguard Worker             'scripts.  For example:\n'
4703*cda5da8dSAndroid Build Coastguard Worker             '\n'
4704*cda5da8dSAndroid Build Coastguard Worker             '   python -m pdb myscript.py\n'
4705*cda5da8dSAndroid Build Coastguard Worker             '\n'
4706*cda5da8dSAndroid Build Coastguard Worker             'When invoked as a module, pdb will automatically enter '
4707*cda5da8dSAndroid Build Coastguard Worker             'post-mortem\n'
4708*cda5da8dSAndroid Build Coastguard Worker             'debugging if the program being debugged exits abnormally.  After '
4709*cda5da8dSAndroid Build Coastguard Worker             'post-\n'
4710*cda5da8dSAndroid Build Coastguard Worker             'mortem debugging (or after normal exit of the program), pdb '
4711*cda5da8dSAndroid Build Coastguard Worker             'will\n'
4712*cda5da8dSAndroid Build Coastguard Worker             'restart the program.  Automatic restarting preserves pdb’s state '
4713*cda5da8dSAndroid Build Coastguard Worker             '(such\n'
4714*cda5da8dSAndroid Build Coastguard Worker             'as breakpoints) and in most cases is more useful than quitting '
4715*cda5da8dSAndroid Build Coastguard Worker             'the\n'
4716*cda5da8dSAndroid Build Coastguard Worker             'debugger upon program’s exit.\n'
4717*cda5da8dSAndroid Build Coastguard Worker             '\n'
4718*cda5da8dSAndroid Build Coastguard Worker             'New in version 3.2: "-c" option is introduced to execute '
4719*cda5da8dSAndroid Build Coastguard Worker             'commands as\n'
4720*cda5da8dSAndroid Build Coastguard Worker             'if given in a ".pdbrc" file, see Debugger Commands.\n'
4721*cda5da8dSAndroid Build Coastguard Worker             '\n'
4722*cda5da8dSAndroid Build Coastguard Worker             'New in version 3.7: "-m" option is introduced to execute '
4723*cda5da8dSAndroid Build Coastguard Worker             'modules\n'
4724*cda5da8dSAndroid Build Coastguard Worker             'similar to the way "python -m" does. As with a script, the '
4725*cda5da8dSAndroid Build Coastguard Worker             'debugger\n'
4726*cda5da8dSAndroid Build Coastguard Worker             'will pause execution just before the first line of the module.\n'
4727*cda5da8dSAndroid Build Coastguard Worker             '\n'
4728*cda5da8dSAndroid Build Coastguard Worker             'Typical usage to execute a statement under control of the '
4729*cda5da8dSAndroid Build Coastguard Worker             'debugger is:\n'
4730*cda5da8dSAndroid Build Coastguard Worker             '\n'
4731*cda5da8dSAndroid Build Coastguard Worker             '   >>> import pdb\n'
4732*cda5da8dSAndroid Build Coastguard Worker             '   >>> def f(x):\n'
4733*cda5da8dSAndroid Build Coastguard Worker             '   ...     print(1 / x)\n'
4734*cda5da8dSAndroid Build Coastguard Worker             '   >>> pdb.run("f(2)")\n'
4735*cda5da8dSAndroid Build Coastguard Worker             '   > <string>(1)<module>()\n'
4736*cda5da8dSAndroid Build Coastguard Worker             '   (Pdb) continue\n'
4737*cda5da8dSAndroid Build Coastguard Worker             '   0.5\n'
4738*cda5da8dSAndroid Build Coastguard Worker             '   >>>\n'
4739*cda5da8dSAndroid Build Coastguard Worker             '\n'
4740*cda5da8dSAndroid Build Coastguard Worker             'The typical usage to inspect a crashed program is:\n'
4741*cda5da8dSAndroid Build Coastguard Worker             '\n'
4742*cda5da8dSAndroid Build Coastguard Worker             '   >>> import pdb\n'
4743*cda5da8dSAndroid Build Coastguard Worker             '   >>> def f(x):\n'
4744*cda5da8dSAndroid Build Coastguard Worker             '   ...     print(1 / x)\n'
4745*cda5da8dSAndroid Build Coastguard Worker             '   ...\n'
4746*cda5da8dSAndroid Build Coastguard Worker             '   >>> f(0)\n'
4747*cda5da8dSAndroid Build Coastguard Worker             '   Traceback (most recent call last):\n'
4748*cda5da8dSAndroid Build Coastguard Worker             '     File "<stdin>", line 1, in <module>\n'
4749*cda5da8dSAndroid Build Coastguard Worker             '     File "<stdin>", line 2, in f\n'
4750*cda5da8dSAndroid Build Coastguard Worker             '   ZeroDivisionError: division by zero\n'
4751*cda5da8dSAndroid Build Coastguard Worker             '   >>> pdb.pm()\n'
4752*cda5da8dSAndroid Build Coastguard Worker             '   > <stdin>(2)f()\n'
4753*cda5da8dSAndroid Build Coastguard Worker             '   (Pdb) p x\n'
4754*cda5da8dSAndroid Build Coastguard Worker             '   0\n'
4755*cda5da8dSAndroid Build Coastguard Worker             '   (Pdb)\n'
4756*cda5da8dSAndroid Build Coastguard Worker             '\n'
4757*cda5da8dSAndroid Build Coastguard Worker             'The module defines the following functions; each enters the '
4758*cda5da8dSAndroid Build Coastguard Worker             'debugger\n'
4759*cda5da8dSAndroid Build Coastguard Worker             'in a slightly different way:\n'
4760*cda5da8dSAndroid Build Coastguard Worker             '\n'
4761*cda5da8dSAndroid Build Coastguard Worker             'pdb.run(statement, globals=None, locals=None)\n'
4762*cda5da8dSAndroid Build Coastguard Worker             '\n'
4763*cda5da8dSAndroid Build Coastguard Worker             '   Execute the *statement* (given as a string or a code object) '
4764*cda5da8dSAndroid Build Coastguard Worker             'under\n'
4765*cda5da8dSAndroid Build Coastguard Worker             '   debugger control.  The debugger prompt appears before any '
4766*cda5da8dSAndroid Build Coastguard Worker             'code is\n'
4767*cda5da8dSAndroid Build Coastguard Worker             '   executed; you can set breakpoints and type "continue", or you '
4768*cda5da8dSAndroid Build Coastguard Worker             'can\n'
4769*cda5da8dSAndroid Build Coastguard Worker             '   step through the statement using "step" or "next" (all these\n'
4770*cda5da8dSAndroid Build Coastguard Worker             '   commands are explained below).  The optional *globals* and '
4771*cda5da8dSAndroid Build Coastguard Worker             '*locals*\n'
4772*cda5da8dSAndroid Build Coastguard Worker             '   arguments specify the environment in which the code is '
4773*cda5da8dSAndroid Build Coastguard Worker             'executed; by\n'
4774*cda5da8dSAndroid Build Coastguard Worker             '   default the dictionary of the module "__main__" is used.  '
4775*cda5da8dSAndroid Build Coastguard Worker             '(See the\n'
4776*cda5da8dSAndroid Build Coastguard Worker             '   explanation of the built-in "exec()" or "eval()" functions.)\n'
4777*cda5da8dSAndroid Build Coastguard Worker             '\n'
4778*cda5da8dSAndroid Build Coastguard Worker             'pdb.runeval(expression, globals=None, locals=None)\n'
4779*cda5da8dSAndroid Build Coastguard Worker             '\n'
4780*cda5da8dSAndroid Build Coastguard Worker             '   Evaluate the *expression* (given as a string or a code '
4781*cda5da8dSAndroid Build Coastguard Worker             'object)\n'
4782*cda5da8dSAndroid Build Coastguard Worker             '   under debugger control.  When "runeval()" returns, it returns '
4783*cda5da8dSAndroid Build Coastguard Worker             'the\n'
4784*cda5da8dSAndroid Build Coastguard Worker             '   value of the *expression*.  Otherwise this function is '
4785*cda5da8dSAndroid Build Coastguard Worker             'similar to\n'
4786*cda5da8dSAndroid Build Coastguard Worker             '   "run()".\n'
4787*cda5da8dSAndroid Build Coastguard Worker             '\n'
4788*cda5da8dSAndroid Build Coastguard Worker             'pdb.runcall(function, *args, **kwds)\n'
4789*cda5da8dSAndroid Build Coastguard Worker             '\n'
4790*cda5da8dSAndroid Build Coastguard Worker             '   Call the *function* (a function or method object, not a '
4791*cda5da8dSAndroid Build Coastguard Worker             'string)\n'
4792*cda5da8dSAndroid Build Coastguard Worker             '   with the given arguments.  When "runcall()" returns, it '
4793*cda5da8dSAndroid Build Coastguard Worker             'returns\n'
4794*cda5da8dSAndroid Build Coastguard Worker             '   whatever the function call returned.  The debugger prompt '
4795*cda5da8dSAndroid Build Coastguard Worker             'appears\n'
4796*cda5da8dSAndroid Build Coastguard Worker             '   as soon as the function is entered.\n'
4797*cda5da8dSAndroid Build Coastguard Worker             '\n'
4798*cda5da8dSAndroid Build Coastguard Worker             'pdb.set_trace(*, header=None)\n'
4799*cda5da8dSAndroid Build Coastguard Worker             '\n'
4800*cda5da8dSAndroid Build Coastguard Worker             '   Enter the debugger at the calling stack frame.  This is '
4801*cda5da8dSAndroid Build Coastguard Worker             'useful to\n'
4802*cda5da8dSAndroid Build Coastguard Worker             '   hard-code a breakpoint at a given point in a program, even if '
4803*cda5da8dSAndroid Build Coastguard Worker             'the\n'
4804*cda5da8dSAndroid Build Coastguard Worker             '   code is not otherwise being debugged (e.g. when an assertion\n'
4805*cda5da8dSAndroid Build Coastguard Worker             '   fails).  If given, *header* is printed to the console just '
4806*cda5da8dSAndroid Build Coastguard Worker             'before\n'
4807*cda5da8dSAndroid Build Coastguard Worker             '   debugging begins.\n'
4808*cda5da8dSAndroid Build Coastguard Worker             '\n'
4809*cda5da8dSAndroid Build Coastguard Worker             '   Changed in version 3.7: The keyword-only argument *header*.\n'
4810*cda5da8dSAndroid Build Coastguard Worker             '\n'
4811*cda5da8dSAndroid Build Coastguard Worker             'pdb.post_mortem(traceback=None)\n'
4812*cda5da8dSAndroid Build Coastguard Worker             '\n'
4813*cda5da8dSAndroid Build Coastguard Worker             '   Enter post-mortem debugging of the given *traceback* object.  '
4814*cda5da8dSAndroid Build Coastguard Worker             'If no\n'
4815*cda5da8dSAndroid Build Coastguard Worker             '   *traceback* is given, it uses the one of the exception that '
4816*cda5da8dSAndroid Build Coastguard Worker             'is\n'
4817*cda5da8dSAndroid Build Coastguard Worker             '   currently being handled (an exception must be being handled '
4818*cda5da8dSAndroid Build Coastguard Worker             'if the\n'
4819*cda5da8dSAndroid Build Coastguard Worker             '   default is to be used).\n'
4820*cda5da8dSAndroid Build Coastguard Worker             '\n'
4821*cda5da8dSAndroid Build Coastguard Worker             'pdb.pm()\n'
4822*cda5da8dSAndroid Build Coastguard Worker             '\n'
4823*cda5da8dSAndroid Build Coastguard Worker             '   Enter post-mortem debugging of the traceback found in\n'
4824*cda5da8dSAndroid Build Coastguard Worker             '   "sys.last_traceback".\n'
4825*cda5da8dSAndroid Build Coastguard Worker             '\n'
4826*cda5da8dSAndroid Build Coastguard Worker             'The "run*" functions and "set_trace()" are aliases for '
4827*cda5da8dSAndroid Build Coastguard Worker             'instantiating\n'
4828*cda5da8dSAndroid Build Coastguard Worker             'the "Pdb" class and calling the method of the same name.  If you '
4829*cda5da8dSAndroid Build Coastguard Worker             'want\n'
4830*cda5da8dSAndroid Build Coastguard Worker             'to access further features, you have to do this yourself:\n'
4831*cda5da8dSAndroid Build Coastguard Worker             '\n'
4832*cda5da8dSAndroid Build Coastguard Worker             "class pdb.Pdb(completekey='tab', stdin=None, stdout=None, "
4833*cda5da8dSAndroid Build Coastguard Worker             'skip=None, nosigint=False, readrc=True)\n'
4834*cda5da8dSAndroid Build Coastguard Worker             '\n'
4835*cda5da8dSAndroid Build Coastguard Worker             '   "Pdb" is the debugger class.\n'
4836*cda5da8dSAndroid Build Coastguard Worker             '\n'
4837*cda5da8dSAndroid Build Coastguard Worker             '   The *completekey*, *stdin* and *stdout* arguments are passed '
4838*cda5da8dSAndroid Build Coastguard Worker             'to the\n'
4839*cda5da8dSAndroid Build Coastguard Worker             '   underlying "cmd.Cmd" class; see the description there.\n'
4840*cda5da8dSAndroid Build Coastguard Worker             '\n'
4841*cda5da8dSAndroid Build Coastguard Worker             '   The *skip* argument, if given, must be an iterable of '
4842*cda5da8dSAndroid Build Coastguard Worker             'glob-style\n'
4843*cda5da8dSAndroid Build Coastguard Worker             '   module name patterns.  The debugger will not step into frames '
4844*cda5da8dSAndroid Build Coastguard Worker             'that\n'
4845*cda5da8dSAndroid Build Coastguard Worker             '   originate in a module that matches one of these patterns. '
4846*cda5da8dSAndroid Build Coastguard Worker             '[1]\n'
4847*cda5da8dSAndroid Build Coastguard Worker             '\n'
4848*cda5da8dSAndroid Build Coastguard Worker             '   By default, Pdb sets a handler for the SIGINT signal (which '
4849*cda5da8dSAndroid Build Coastguard Worker             'is sent\n'
4850*cda5da8dSAndroid Build Coastguard Worker             '   when the user presses "Ctrl-C" on the console) when you give '
4851*cda5da8dSAndroid Build Coastguard Worker             'a\n'
4852*cda5da8dSAndroid Build Coastguard Worker             '   "continue" command. This allows you to break into the '
4853*cda5da8dSAndroid Build Coastguard Worker             'debugger\n'
4854*cda5da8dSAndroid Build Coastguard Worker             '   again by pressing "Ctrl-C".  If you want Pdb not to touch '
4855*cda5da8dSAndroid Build Coastguard Worker             'the\n'
4856*cda5da8dSAndroid Build Coastguard Worker             '   SIGINT handler, set *nosigint* to true.\n'
4857*cda5da8dSAndroid Build Coastguard Worker             '\n'
4858*cda5da8dSAndroid Build Coastguard Worker             '   The *readrc* argument defaults to true and controls whether '
4859*cda5da8dSAndroid Build Coastguard Worker             'Pdb\n'
4860*cda5da8dSAndroid Build Coastguard Worker             '   will load .pdbrc files from the filesystem.\n'
4861*cda5da8dSAndroid Build Coastguard Worker             '\n'
4862*cda5da8dSAndroid Build Coastguard Worker             '   Example call to enable tracing with *skip*:\n'
4863*cda5da8dSAndroid Build Coastguard Worker             '\n'
4864*cda5da8dSAndroid Build Coastguard Worker             "      import pdb; pdb.Pdb(skip=['django.*']).set_trace()\n"
4865*cda5da8dSAndroid Build Coastguard Worker             '\n'
4866*cda5da8dSAndroid Build Coastguard Worker             '   Raises an auditing event "pdb.Pdb" with no arguments.\n'
4867*cda5da8dSAndroid Build Coastguard Worker             '\n'
4868*cda5da8dSAndroid Build Coastguard Worker             '   New in version 3.1: The *skip* argument.\n'
4869*cda5da8dSAndroid Build Coastguard Worker             '\n'
4870*cda5da8dSAndroid Build Coastguard Worker             '   New in version 3.2: The *nosigint* argument.  Previously, a '
4871*cda5da8dSAndroid Build Coastguard Worker             'SIGINT\n'
4872*cda5da8dSAndroid Build Coastguard Worker             '   handler was never set by Pdb.\n'
4873*cda5da8dSAndroid Build Coastguard Worker             '\n'
4874*cda5da8dSAndroid Build Coastguard Worker             '   Changed in version 3.6: The *readrc* argument.\n'
4875*cda5da8dSAndroid Build Coastguard Worker             '\n'
4876*cda5da8dSAndroid Build Coastguard Worker             '   run(statement, globals=None, locals=None)\n'
4877*cda5da8dSAndroid Build Coastguard Worker             '   runeval(expression, globals=None, locals=None)\n'
4878*cda5da8dSAndroid Build Coastguard Worker             '   runcall(function, *args, **kwds)\n'
4879*cda5da8dSAndroid Build Coastguard Worker             '   set_trace()\n'
4880*cda5da8dSAndroid Build Coastguard Worker             '\n'
4881*cda5da8dSAndroid Build Coastguard Worker             '      See the documentation for the functions explained above.\n'
4882*cda5da8dSAndroid Build Coastguard Worker             '\n'
4883*cda5da8dSAndroid Build Coastguard Worker             '\n'
4884*cda5da8dSAndroid Build Coastguard Worker             'Debugger Commands\n'
4885*cda5da8dSAndroid Build Coastguard Worker             '=================\n'
4886*cda5da8dSAndroid Build Coastguard Worker             '\n'
4887*cda5da8dSAndroid Build Coastguard Worker             'The commands recognized by the debugger are listed below.  Most\n'
4888*cda5da8dSAndroid Build Coastguard Worker             'commands can be abbreviated to one or two letters as indicated; '
4889*cda5da8dSAndroid Build Coastguard Worker             'e.g.\n'
4890*cda5da8dSAndroid Build Coastguard Worker             '"h(elp)" means that either "h" or "help" can be used to enter '
4891*cda5da8dSAndroid Build Coastguard Worker             'the help\n'
4892*cda5da8dSAndroid Build Coastguard Worker             'command (but not "he" or "hel", nor "H" or "Help" or "HELP").\n'
4893*cda5da8dSAndroid Build Coastguard Worker             'Arguments to commands must be separated by whitespace (spaces '
4894*cda5da8dSAndroid Build Coastguard Worker             'or\n'
4895*cda5da8dSAndroid Build Coastguard Worker             'tabs).  Optional arguments are enclosed in square brackets '
4896*cda5da8dSAndroid Build Coastguard Worker             '("[]") in\n'
4897*cda5da8dSAndroid Build Coastguard Worker             'the command syntax; the square brackets must not be typed.\n'
4898*cda5da8dSAndroid Build Coastguard Worker             'Alternatives in the command syntax are separated by a vertical '
4899*cda5da8dSAndroid Build Coastguard Worker             'bar\n'
4900*cda5da8dSAndroid Build Coastguard Worker             '("|").\n'
4901*cda5da8dSAndroid Build Coastguard Worker             '\n'
4902*cda5da8dSAndroid Build Coastguard Worker             'Entering a blank line repeats the last command entered.  '
4903*cda5da8dSAndroid Build Coastguard Worker             'Exception: if\n'
4904*cda5da8dSAndroid Build Coastguard Worker             'the last command was a "list" command, the next 11 lines are '
4905*cda5da8dSAndroid Build Coastguard Worker             'listed.\n'
4906*cda5da8dSAndroid Build Coastguard Worker             '\n'
4907*cda5da8dSAndroid Build Coastguard Worker             'Commands that the debugger doesn’t recognize are assumed to be '
4908*cda5da8dSAndroid Build Coastguard Worker             'Python\n'
4909*cda5da8dSAndroid Build Coastguard Worker             'statements and are executed in the context of the program being\n'
4910*cda5da8dSAndroid Build Coastguard Worker             'debugged.  Python statements can also be prefixed with an '
4911*cda5da8dSAndroid Build Coastguard Worker             'exclamation\n'
4912*cda5da8dSAndroid Build Coastguard Worker             'point ("!").  This is a powerful way to inspect the program '
4913*cda5da8dSAndroid Build Coastguard Worker             'being\n'
4914*cda5da8dSAndroid Build Coastguard Worker             'debugged; it is even possible to change a variable or call a '
4915*cda5da8dSAndroid Build Coastguard Worker             'function.\n'
4916*cda5da8dSAndroid Build Coastguard Worker             'When an exception occurs in such a statement, the exception name '
4917*cda5da8dSAndroid Build Coastguard Worker             'is\n'
4918*cda5da8dSAndroid Build Coastguard Worker             'printed but the debugger’s state is not changed.\n'
4919*cda5da8dSAndroid Build Coastguard Worker             '\n'
4920*cda5da8dSAndroid Build Coastguard Worker             'The debugger supports aliases.  Aliases can have parameters '
4921*cda5da8dSAndroid Build Coastguard Worker             'which\n'
4922*cda5da8dSAndroid Build Coastguard Worker             'allows one a certain level of adaptability to the context under\n'
4923*cda5da8dSAndroid Build Coastguard Worker             'examination.\n'
4924*cda5da8dSAndroid Build Coastguard Worker             '\n'
4925*cda5da8dSAndroid Build Coastguard Worker             'Multiple commands may be entered on a single line, separated by '
4926*cda5da8dSAndroid Build Coastguard Worker             '";;".\n'
4927*cda5da8dSAndroid Build Coastguard Worker             '(A single ";" is not used as it is the separator for multiple '
4928*cda5da8dSAndroid Build Coastguard Worker             'commands\n'
4929*cda5da8dSAndroid Build Coastguard Worker             'in a line that is passed to the Python parser.)  No intelligence '
4930*cda5da8dSAndroid Build Coastguard Worker             'is\n'
4931*cda5da8dSAndroid Build Coastguard Worker             'applied to separating the commands; the input is split at the '
4932*cda5da8dSAndroid Build Coastguard Worker             'first\n'
4933*cda5da8dSAndroid Build Coastguard Worker             '";;" pair, even if it is in the middle of a quoted string. A\n'
4934*cda5da8dSAndroid Build Coastguard Worker             'workaround for strings with double semicolons is to use '
4935*cda5da8dSAndroid Build Coastguard Worker             'implicit\n'
4936*cda5da8dSAndroid Build Coastguard Worker             'string concatenation "\';\'\';\'" or "";"";"".\n'
4937*cda5da8dSAndroid Build Coastguard Worker             '\n'
4938*cda5da8dSAndroid Build Coastguard Worker             'If a file ".pdbrc" exists in the user’s home directory or in '
4939*cda5da8dSAndroid Build Coastguard Worker             'the\n'
4940*cda5da8dSAndroid Build Coastguard Worker             'current directory, it is read with "\'utf-8\'" encoding and '
4941*cda5da8dSAndroid Build Coastguard Worker             'executed as\n'
4942*cda5da8dSAndroid Build Coastguard Worker             'if it had been typed at the debugger prompt.  This is '
4943*cda5da8dSAndroid Build Coastguard Worker             'particularly\n'
4944*cda5da8dSAndroid Build Coastguard Worker             'useful for aliases.  If both files exist, the one in the home\n'
4945*cda5da8dSAndroid Build Coastguard Worker             'directory is read first and aliases defined there can be '
4946*cda5da8dSAndroid Build Coastguard Worker             'overridden by\n'
4947*cda5da8dSAndroid Build Coastguard Worker             'the local file.\n'
4948*cda5da8dSAndroid Build Coastguard Worker             '\n'
4949*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.11: ".pdbrc" is now read with "\'utf-8\'" '
4950*cda5da8dSAndroid Build Coastguard Worker             'encoding.\n'
4951*cda5da8dSAndroid Build Coastguard Worker             'Previously, it was read with the system locale encoding.\n'
4952*cda5da8dSAndroid Build Coastguard Worker             '\n'
4953*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.2: ".pdbrc" can now contain commands that\n'
4954*cda5da8dSAndroid Build Coastguard Worker             'continue debugging, such as "continue" or "next".  Previously, '
4955*cda5da8dSAndroid Build Coastguard Worker             'these\n'
4956*cda5da8dSAndroid Build Coastguard Worker             'commands had no effect.\n'
4957*cda5da8dSAndroid Build Coastguard Worker             '\n'
4958*cda5da8dSAndroid Build Coastguard Worker             'h(elp) [command]\n'
4959*cda5da8dSAndroid Build Coastguard Worker             '\n'
4960*cda5da8dSAndroid Build Coastguard Worker             '   Without argument, print the list of available commands.  With '
4961*cda5da8dSAndroid Build Coastguard Worker             'a\n'
4962*cda5da8dSAndroid Build Coastguard Worker             '   *command* as argument, print help about that command.  "help '
4963*cda5da8dSAndroid Build Coastguard Worker             'pdb"\n'
4964*cda5da8dSAndroid Build Coastguard Worker             '   displays the full documentation (the docstring of the "pdb"\n'
4965*cda5da8dSAndroid Build Coastguard Worker             '   module).  Since the *command* argument must be an identifier, '
4966*cda5da8dSAndroid Build Coastguard Worker             '"help\n'
4967*cda5da8dSAndroid Build Coastguard Worker             '   exec" must be entered to get help on the "!" command.\n'
4968*cda5da8dSAndroid Build Coastguard Worker             '\n'
4969*cda5da8dSAndroid Build Coastguard Worker             'w(here)\n'
4970*cda5da8dSAndroid Build Coastguard Worker             '\n'
4971*cda5da8dSAndroid Build Coastguard Worker             '   Print a stack trace, with the most recent frame at the '
4972*cda5da8dSAndroid Build Coastguard Worker             'bottom.  An\n'
4973*cda5da8dSAndroid Build Coastguard Worker             '   arrow (">") indicates the current frame, which determines '
4974*cda5da8dSAndroid Build Coastguard Worker             'the\n'
4975*cda5da8dSAndroid Build Coastguard Worker             '   context of most commands.\n'
4976*cda5da8dSAndroid Build Coastguard Worker             '\n'
4977*cda5da8dSAndroid Build Coastguard Worker             'd(own) [count]\n'
4978*cda5da8dSAndroid Build Coastguard Worker             '\n'
4979*cda5da8dSAndroid Build Coastguard Worker             '   Move the current frame *count* (default one) levels down in '
4980*cda5da8dSAndroid Build Coastguard Worker             'the\n'
4981*cda5da8dSAndroid Build Coastguard Worker             '   stack trace (to a newer frame).\n'
4982*cda5da8dSAndroid Build Coastguard Worker             '\n'
4983*cda5da8dSAndroid Build Coastguard Worker             'u(p) [count]\n'
4984*cda5da8dSAndroid Build Coastguard Worker             '\n'
4985*cda5da8dSAndroid Build Coastguard Worker             '   Move the current frame *count* (default one) levels up in the '
4986*cda5da8dSAndroid Build Coastguard Worker             'stack\n'
4987*cda5da8dSAndroid Build Coastguard Worker             '   trace (to an older frame).\n'
4988*cda5da8dSAndroid Build Coastguard Worker             '\n'
4989*cda5da8dSAndroid Build Coastguard Worker             'b(reak) [([filename:]lineno | function) [, condition]]\n'
4990*cda5da8dSAndroid Build Coastguard Worker             '\n'
4991*cda5da8dSAndroid Build Coastguard Worker             '   With a *lineno* argument, set a break there in the current '
4992*cda5da8dSAndroid Build Coastguard Worker             'file.\n'
4993*cda5da8dSAndroid Build Coastguard Worker             '   With a *function* argument, set a break at the first '
4994*cda5da8dSAndroid Build Coastguard Worker             'executable\n'
4995*cda5da8dSAndroid Build Coastguard Worker             '   statement within that function.  The line number may be '
4996*cda5da8dSAndroid Build Coastguard Worker             'prefixed\n'
4997*cda5da8dSAndroid Build Coastguard Worker             '   with a filename and a colon, to specify a breakpoint in '
4998*cda5da8dSAndroid Build Coastguard Worker             'another\n'
4999*cda5da8dSAndroid Build Coastguard Worker             '   file (probably one that hasn’t been loaded yet).  The file '
5000*cda5da8dSAndroid Build Coastguard Worker             'is\n'
5001*cda5da8dSAndroid Build Coastguard Worker             '   searched on "sys.path".  Note that each breakpoint is '
5002*cda5da8dSAndroid Build Coastguard Worker             'assigned a\n'
5003*cda5da8dSAndroid Build Coastguard Worker             '   number to which all the other breakpoint commands refer.\n'
5004*cda5da8dSAndroid Build Coastguard Worker             '\n'
5005*cda5da8dSAndroid Build Coastguard Worker             '   If a second argument is present, it is an expression which '
5006*cda5da8dSAndroid Build Coastguard Worker             'must\n'
5007*cda5da8dSAndroid Build Coastguard Worker             '   evaluate to true before the breakpoint is honored.\n'
5008*cda5da8dSAndroid Build Coastguard Worker             '\n'
5009*cda5da8dSAndroid Build Coastguard Worker             '   Without argument, list all breaks, including for each '
5010*cda5da8dSAndroid Build Coastguard Worker             'breakpoint,\n'
5011*cda5da8dSAndroid Build Coastguard Worker             '   the number of times that breakpoint has been hit, the '
5012*cda5da8dSAndroid Build Coastguard Worker             'current\n'
5013*cda5da8dSAndroid Build Coastguard Worker             '   ignore count, and the associated condition if any.\n'
5014*cda5da8dSAndroid Build Coastguard Worker             '\n'
5015*cda5da8dSAndroid Build Coastguard Worker             'tbreak [([filename:]lineno | function) [, condition]]\n'
5016*cda5da8dSAndroid Build Coastguard Worker             '\n'
5017*cda5da8dSAndroid Build Coastguard Worker             '   Temporary breakpoint, which is removed automatically when it '
5018*cda5da8dSAndroid Build Coastguard Worker             'is\n'
5019*cda5da8dSAndroid Build Coastguard Worker             '   first hit. The arguments are the same as for "break".\n'
5020*cda5da8dSAndroid Build Coastguard Worker             '\n'
5021*cda5da8dSAndroid Build Coastguard Worker             'cl(ear) [filename:lineno | bpnumber ...]\n'
5022*cda5da8dSAndroid Build Coastguard Worker             '\n'
5023*cda5da8dSAndroid Build Coastguard Worker             '   With a *filename:lineno* argument, clear all the breakpoints '
5024*cda5da8dSAndroid Build Coastguard Worker             'at\n'
5025*cda5da8dSAndroid Build Coastguard Worker             '   this line. With a space separated list of breakpoint numbers, '
5026*cda5da8dSAndroid Build Coastguard Worker             'clear\n'
5027*cda5da8dSAndroid Build Coastguard Worker             '   those breakpoints. Without argument, clear all breaks (but '
5028*cda5da8dSAndroid Build Coastguard Worker             'first\n'
5029*cda5da8dSAndroid Build Coastguard Worker             '   ask confirmation).\n'
5030*cda5da8dSAndroid Build Coastguard Worker             '\n'
5031*cda5da8dSAndroid Build Coastguard Worker             'disable [bpnumber ...]\n'
5032*cda5da8dSAndroid Build Coastguard Worker             '\n'
5033*cda5da8dSAndroid Build Coastguard Worker             '   Disable the breakpoints given as a space separated list of\n'
5034*cda5da8dSAndroid Build Coastguard Worker             '   breakpoint numbers.  Disabling a breakpoint means it cannot '
5035*cda5da8dSAndroid Build Coastguard Worker             'cause\n'
5036*cda5da8dSAndroid Build Coastguard Worker             '   the program to stop execution, but unlike clearing a '
5037*cda5da8dSAndroid Build Coastguard Worker             'breakpoint, it\n'
5038*cda5da8dSAndroid Build Coastguard Worker             '   remains in the list of breakpoints and can be (re-)enabled.\n'
5039*cda5da8dSAndroid Build Coastguard Worker             '\n'
5040*cda5da8dSAndroid Build Coastguard Worker             'enable [bpnumber ...]\n'
5041*cda5da8dSAndroid Build Coastguard Worker             '\n'
5042*cda5da8dSAndroid Build Coastguard Worker             '   Enable the breakpoints specified.\n'
5043*cda5da8dSAndroid Build Coastguard Worker             '\n'
5044*cda5da8dSAndroid Build Coastguard Worker             'ignore bpnumber [count]\n'
5045*cda5da8dSAndroid Build Coastguard Worker             '\n'
5046*cda5da8dSAndroid Build Coastguard Worker             '   Set the ignore count for the given breakpoint number.  If '
5047*cda5da8dSAndroid Build Coastguard Worker             '*count*\n'
5048*cda5da8dSAndroid Build Coastguard Worker             '   is omitted, the ignore count is set to 0.  A breakpoint '
5049*cda5da8dSAndroid Build Coastguard Worker             'becomes\n'
5050*cda5da8dSAndroid Build Coastguard Worker             '   active when the ignore count is zero.  When non-zero, the '
5051*cda5da8dSAndroid Build Coastguard Worker             '*count*\n'
5052*cda5da8dSAndroid Build Coastguard Worker             '   is decremented each time the breakpoint is reached and the\n'
5053*cda5da8dSAndroid Build Coastguard Worker             '   breakpoint is not disabled and any associated condition '
5054*cda5da8dSAndroid Build Coastguard Worker             'evaluates\n'
5055*cda5da8dSAndroid Build Coastguard Worker             '   to true.\n'
5056*cda5da8dSAndroid Build Coastguard Worker             '\n'
5057*cda5da8dSAndroid Build Coastguard Worker             'condition bpnumber [condition]\n'
5058*cda5da8dSAndroid Build Coastguard Worker             '\n'
5059*cda5da8dSAndroid Build Coastguard Worker             '   Set a new *condition* for the breakpoint, an expression which '
5060*cda5da8dSAndroid Build Coastguard Worker             'must\n'
5061*cda5da8dSAndroid Build Coastguard Worker             '   evaluate to true before the breakpoint is honored.  If '
5062*cda5da8dSAndroid Build Coastguard Worker             '*condition*\n'
5063*cda5da8dSAndroid Build Coastguard Worker             '   is absent, any existing condition is removed; i.e., the '
5064*cda5da8dSAndroid Build Coastguard Worker             'breakpoint\n'
5065*cda5da8dSAndroid Build Coastguard Worker             '   is made unconditional.\n'
5066*cda5da8dSAndroid Build Coastguard Worker             '\n'
5067*cda5da8dSAndroid Build Coastguard Worker             'commands [bpnumber]\n'
5068*cda5da8dSAndroid Build Coastguard Worker             '\n'
5069*cda5da8dSAndroid Build Coastguard Worker             '   Specify a list of commands for breakpoint number *bpnumber*.  '
5070*cda5da8dSAndroid Build Coastguard Worker             'The\n'
5071*cda5da8dSAndroid Build Coastguard Worker             '   commands themselves appear on the following lines.  Type a '
5072*cda5da8dSAndroid Build Coastguard Worker             'line\n'
5073*cda5da8dSAndroid Build Coastguard Worker             '   containing just "end" to terminate the commands. An example:\n'
5074*cda5da8dSAndroid Build Coastguard Worker             '\n'
5075*cda5da8dSAndroid Build Coastguard Worker             '      (Pdb) commands 1\n'
5076*cda5da8dSAndroid Build Coastguard Worker             '      (com) p some_variable\n'
5077*cda5da8dSAndroid Build Coastguard Worker             '      (com) end\n'
5078*cda5da8dSAndroid Build Coastguard Worker             '      (Pdb)\n'
5079*cda5da8dSAndroid Build Coastguard Worker             '\n'
5080*cda5da8dSAndroid Build Coastguard Worker             '   To remove all commands from a breakpoint, type "commands" '
5081*cda5da8dSAndroid Build Coastguard Worker             'and\n'
5082*cda5da8dSAndroid Build Coastguard Worker             '   follow it immediately with "end"; that is, give no commands.\n'
5083*cda5da8dSAndroid Build Coastguard Worker             '\n'
5084*cda5da8dSAndroid Build Coastguard Worker             '   With no *bpnumber* argument, "commands" refers to the last\n'
5085*cda5da8dSAndroid Build Coastguard Worker             '   breakpoint set.\n'
5086*cda5da8dSAndroid Build Coastguard Worker             '\n'
5087*cda5da8dSAndroid Build Coastguard Worker             '   You can use breakpoint commands to start your program up '
5088*cda5da8dSAndroid Build Coastguard Worker             'again.\n'
5089*cda5da8dSAndroid Build Coastguard Worker             '   Simply use the "continue" command, or "step", or any other '
5090*cda5da8dSAndroid Build Coastguard Worker             'command\n'
5091*cda5da8dSAndroid Build Coastguard Worker             '   that resumes execution.\n'
5092*cda5da8dSAndroid Build Coastguard Worker             '\n'
5093*cda5da8dSAndroid Build Coastguard Worker             '   Specifying any command resuming execution (currently '
5094*cda5da8dSAndroid Build Coastguard Worker             '"continue",\n'
5095*cda5da8dSAndroid Build Coastguard Worker             '   "step", "next", "return", "jump", "quit" and their '
5096*cda5da8dSAndroid Build Coastguard Worker             'abbreviations)\n'
5097*cda5da8dSAndroid Build Coastguard Worker             '   terminates the command list (as if that command was '
5098*cda5da8dSAndroid Build Coastguard Worker             'immediately\n'
5099*cda5da8dSAndroid Build Coastguard Worker             '   followed by end). This is because any time you resume '
5100*cda5da8dSAndroid Build Coastguard Worker             'execution\n'
5101*cda5da8dSAndroid Build Coastguard Worker             '   (even with a simple next or step), you may encounter another\n'
5102*cda5da8dSAndroid Build Coastguard Worker             '   breakpoint—which could have its own command list, leading to\n'
5103*cda5da8dSAndroid Build Coastguard Worker             '   ambiguities about which list to execute.\n'
5104*cda5da8dSAndroid Build Coastguard Worker             '\n'
5105*cda5da8dSAndroid Build Coastguard Worker             '   If you use the "silent" command in the command list, the '
5106*cda5da8dSAndroid Build Coastguard Worker             'usual\n'
5107*cda5da8dSAndroid Build Coastguard Worker             '   message about stopping at a breakpoint is not printed.  This '
5108*cda5da8dSAndroid Build Coastguard Worker             'may be\n'
5109*cda5da8dSAndroid Build Coastguard Worker             '   desirable for breakpoints that are to print a specific '
5110*cda5da8dSAndroid Build Coastguard Worker             'message and\n'
5111*cda5da8dSAndroid Build Coastguard Worker             '   then continue.  If none of the other commands print anything, '
5112*cda5da8dSAndroid Build Coastguard Worker             'you\n'
5113*cda5da8dSAndroid Build Coastguard Worker             '   see no sign that the breakpoint was reached.\n'
5114*cda5da8dSAndroid Build Coastguard Worker             '\n'
5115*cda5da8dSAndroid Build Coastguard Worker             's(tep)\n'
5116*cda5da8dSAndroid Build Coastguard Worker             '\n'
5117*cda5da8dSAndroid Build Coastguard Worker             '   Execute the current line, stop at the first possible '
5118*cda5da8dSAndroid Build Coastguard Worker             'occasion\n'
5119*cda5da8dSAndroid Build Coastguard Worker             '   (either in a function that is called or on the next line in '
5120*cda5da8dSAndroid Build Coastguard Worker             'the\n'
5121*cda5da8dSAndroid Build Coastguard Worker             '   current function).\n'
5122*cda5da8dSAndroid Build Coastguard Worker             '\n'
5123*cda5da8dSAndroid Build Coastguard Worker             'n(ext)\n'
5124*cda5da8dSAndroid Build Coastguard Worker             '\n'
5125*cda5da8dSAndroid Build Coastguard Worker             '   Continue execution until the next line in the current '
5126*cda5da8dSAndroid Build Coastguard Worker             'function is\n'
5127*cda5da8dSAndroid Build Coastguard Worker             '   reached or it returns.  (The difference between "next" and '
5128*cda5da8dSAndroid Build Coastguard Worker             '"step"\n'
5129*cda5da8dSAndroid Build Coastguard Worker             '   is that "step" stops inside a called function, while "next"\n'
5130*cda5da8dSAndroid Build Coastguard Worker             '   executes called functions at (nearly) full speed, only '
5131*cda5da8dSAndroid Build Coastguard Worker             'stopping at\n'
5132*cda5da8dSAndroid Build Coastguard Worker             '   the next line in the current function.)\n'
5133*cda5da8dSAndroid Build Coastguard Worker             '\n'
5134*cda5da8dSAndroid Build Coastguard Worker             'unt(il) [lineno]\n'
5135*cda5da8dSAndroid Build Coastguard Worker             '\n'
5136*cda5da8dSAndroid Build Coastguard Worker             '   Without argument, continue execution until the line with a '
5137*cda5da8dSAndroid Build Coastguard Worker             'number\n'
5138*cda5da8dSAndroid Build Coastguard Worker             '   greater than the current one is reached.\n'
5139*cda5da8dSAndroid Build Coastguard Worker             '\n'
5140*cda5da8dSAndroid Build Coastguard Worker             '   With *lineno*, continue execution until a line with a number\n'
5141*cda5da8dSAndroid Build Coastguard Worker             '   greater or equal to *lineno* is reached.  In both cases, also '
5142*cda5da8dSAndroid Build Coastguard Worker             'stop\n'
5143*cda5da8dSAndroid Build Coastguard Worker             '   when the current frame returns.\n'
5144*cda5da8dSAndroid Build Coastguard Worker             '\n'
5145*cda5da8dSAndroid Build Coastguard Worker             '   Changed in version 3.2: Allow giving an explicit line '
5146*cda5da8dSAndroid Build Coastguard Worker             'number.\n'
5147*cda5da8dSAndroid Build Coastguard Worker             '\n'
5148*cda5da8dSAndroid Build Coastguard Worker             'r(eturn)\n'
5149*cda5da8dSAndroid Build Coastguard Worker             '\n'
5150*cda5da8dSAndroid Build Coastguard Worker             '   Continue execution until the current function returns.\n'
5151*cda5da8dSAndroid Build Coastguard Worker             '\n'
5152*cda5da8dSAndroid Build Coastguard Worker             'c(ont(inue))\n'
5153*cda5da8dSAndroid Build Coastguard Worker             '\n'
5154*cda5da8dSAndroid Build Coastguard Worker             '   Continue execution, only stop when a breakpoint is '
5155*cda5da8dSAndroid Build Coastguard Worker             'encountered.\n'
5156*cda5da8dSAndroid Build Coastguard Worker             '\n'
5157*cda5da8dSAndroid Build Coastguard Worker             'j(ump) lineno\n'
5158*cda5da8dSAndroid Build Coastguard Worker             '\n'
5159*cda5da8dSAndroid Build Coastguard Worker             '   Set the next line that will be executed.  Only available in '
5160*cda5da8dSAndroid Build Coastguard Worker             'the\n'
5161*cda5da8dSAndroid Build Coastguard Worker             '   bottom-most frame.  This lets you jump back and execute code '
5162*cda5da8dSAndroid Build Coastguard Worker             'again,\n'
5163*cda5da8dSAndroid Build Coastguard Worker             '   or jump forward to skip code that you don’t want to run.\n'
5164*cda5da8dSAndroid Build Coastguard Worker             '\n'
5165*cda5da8dSAndroid Build Coastguard Worker             '   It should be noted that not all jumps are allowed – for '
5166*cda5da8dSAndroid Build Coastguard Worker             'instance it\n'
5167*cda5da8dSAndroid Build Coastguard Worker             '   is not possible to jump into the middle of a "for" loop or '
5168*cda5da8dSAndroid Build Coastguard Worker             'out of a\n'
5169*cda5da8dSAndroid Build Coastguard Worker             '   "finally" clause.\n'
5170*cda5da8dSAndroid Build Coastguard Worker             '\n'
5171*cda5da8dSAndroid Build Coastguard Worker             'l(ist) [first[, last]]\n'
5172*cda5da8dSAndroid Build Coastguard Worker             '\n'
5173*cda5da8dSAndroid Build Coastguard Worker             '   List source code for the current file.  Without arguments, '
5174*cda5da8dSAndroid Build Coastguard Worker             'list 11\n'
5175*cda5da8dSAndroid Build Coastguard Worker             '   lines around the current line or continue the previous '
5176*cda5da8dSAndroid Build Coastguard Worker             'listing.\n'
5177*cda5da8dSAndroid Build Coastguard Worker             '   With "." as argument, list 11 lines around the current line.  '
5178*cda5da8dSAndroid Build Coastguard Worker             'With\n'
5179*cda5da8dSAndroid Build Coastguard Worker             '   one argument, list 11 lines around at that line.  With two\n'
5180*cda5da8dSAndroid Build Coastguard Worker             '   arguments, list the given range; if the second argument is '
5181*cda5da8dSAndroid Build Coastguard Worker             'less\n'
5182*cda5da8dSAndroid Build Coastguard Worker             '   than the first, it is interpreted as a count.\n'
5183*cda5da8dSAndroid Build Coastguard Worker             '\n'
5184*cda5da8dSAndroid Build Coastguard Worker             '   The current line in the current frame is indicated by "->".  '
5185*cda5da8dSAndroid Build Coastguard Worker             'If an\n'
5186*cda5da8dSAndroid Build Coastguard Worker             '   exception is being debugged, the line where the exception '
5187*cda5da8dSAndroid Build Coastguard Worker             'was\n'
5188*cda5da8dSAndroid Build Coastguard Worker             '   originally raised or propagated is indicated by ">>", if it '
5189*cda5da8dSAndroid Build Coastguard Worker             'differs\n'
5190*cda5da8dSAndroid Build Coastguard Worker             '   from the current line.\n'
5191*cda5da8dSAndroid Build Coastguard Worker             '\n'
5192*cda5da8dSAndroid Build Coastguard Worker             '   New in version 3.2: The ">>" marker.\n'
5193*cda5da8dSAndroid Build Coastguard Worker             '\n'
5194*cda5da8dSAndroid Build Coastguard Worker             'll | longlist\n'
5195*cda5da8dSAndroid Build Coastguard Worker             '\n'
5196*cda5da8dSAndroid Build Coastguard Worker             '   List all source code for the current function or frame.\n'
5197*cda5da8dSAndroid Build Coastguard Worker             '   Interesting lines are marked as for "list".\n'
5198*cda5da8dSAndroid Build Coastguard Worker             '\n'
5199*cda5da8dSAndroid Build Coastguard Worker             '   New in version 3.2.\n'
5200*cda5da8dSAndroid Build Coastguard Worker             '\n'
5201*cda5da8dSAndroid Build Coastguard Worker             'a(rgs)\n'
5202*cda5da8dSAndroid Build Coastguard Worker             '\n'
5203*cda5da8dSAndroid Build Coastguard Worker             '   Print the arguments of the current function and their '
5204*cda5da8dSAndroid Build Coastguard Worker             'current\n'
5205*cda5da8dSAndroid Build Coastguard Worker             '   values.\n'
5206*cda5da8dSAndroid Build Coastguard Worker             '\n'
5207*cda5da8dSAndroid Build Coastguard Worker             'p expression\n'
5208*cda5da8dSAndroid Build Coastguard Worker             '\n'
5209*cda5da8dSAndroid Build Coastguard Worker             '   Evaluate *expression* in the current context and print its '
5210*cda5da8dSAndroid Build Coastguard Worker             'value.\n'
5211*cda5da8dSAndroid Build Coastguard Worker             '\n'
5212*cda5da8dSAndroid Build Coastguard Worker             '   Note:\n'
5213*cda5da8dSAndroid Build Coastguard Worker             '\n'
5214*cda5da8dSAndroid Build Coastguard Worker             '     "print()" can also be used, but is not a debugger command — '
5215*cda5da8dSAndroid Build Coastguard Worker             'this\n'
5216*cda5da8dSAndroid Build Coastguard Worker             '     executes the Python "print()" function.\n'
5217*cda5da8dSAndroid Build Coastguard Worker             '\n'
5218*cda5da8dSAndroid Build Coastguard Worker             'pp expression\n'
5219*cda5da8dSAndroid Build Coastguard Worker             '\n'
5220*cda5da8dSAndroid Build Coastguard Worker             '   Like the "p" command, except the value of *expression* is '
5221*cda5da8dSAndroid Build Coastguard Worker             'pretty-\n'
5222*cda5da8dSAndroid Build Coastguard Worker             '   printed using the "pprint" module.\n'
5223*cda5da8dSAndroid Build Coastguard Worker             '\n'
5224*cda5da8dSAndroid Build Coastguard Worker             'whatis expression\n'
5225*cda5da8dSAndroid Build Coastguard Worker             '\n'
5226*cda5da8dSAndroid Build Coastguard Worker             '   Print the type of *expression*.\n'
5227*cda5da8dSAndroid Build Coastguard Worker             '\n'
5228*cda5da8dSAndroid Build Coastguard Worker             'source expression\n'
5229*cda5da8dSAndroid Build Coastguard Worker             '\n'
5230*cda5da8dSAndroid Build Coastguard Worker             '   Try to get source code of *expression* and display it.\n'
5231*cda5da8dSAndroid Build Coastguard Worker             '\n'
5232*cda5da8dSAndroid Build Coastguard Worker             '   New in version 3.2.\n'
5233*cda5da8dSAndroid Build Coastguard Worker             '\n'
5234*cda5da8dSAndroid Build Coastguard Worker             'display [expression]\n'
5235*cda5da8dSAndroid Build Coastguard Worker             '\n'
5236*cda5da8dSAndroid Build Coastguard Worker             '   Display the value of *expression* if it changed, each time\n'
5237*cda5da8dSAndroid Build Coastguard Worker             '   execution stops in the current frame.\n'
5238*cda5da8dSAndroid Build Coastguard Worker             '\n'
5239*cda5da8dSAndroid Build Coastguard Worker             '   Without *expression*, list all display expressions for the '
5240*cda5da8dSAndroid Build Coastguard Worker             'current\n'
5241*cda5da8dSAndroid Build Coastguard Worker             '   frame.\n'
5242*cda5da8dSAndroid Build Coastguard Worker             '\n'
5243*cda5da8dSAndroid Build Coastguard Worker             '   Note:\n'
5244*cda5da8dSAndroid Build Coastguard Worker             '\n'
5245*cda5da8dSAndroid Build Coastguard Worker             '     Display evaluates *expression* and compares to the result '
5246*cda5da8dSAndroid Build Coastguard Worker             'of the\n'
5247*cda5da8dSAndroid Build Coastguard Worker             '     previous evaluation of *expression*, so when the result is\n'
5248*cda5da8dSAndroid Build Coastguard Worker             '     mutable, display may not be able to pick up the changes.\n'
5249*cda5da8dSAndroid Build Coastguard Worker             '\n'
5250*cda5da8dSAndroid Build Coastguard Worker             '   Example:\n'
5251*cda5da8dSAndroid Build Coastguard Worker             '\n'
5252*cda5da8dSAndroid Build Coastguard Worker             '      lst = []\n'
5253*cda5da8dSAndroid Build Coastguard Worker             '      breakpoint()\n'
5254*cda5da8dSAndroid Build Coastguard Worker             '      pass\n'
5255*cda5da8dSAndroid Build Coastguard Worker             '      lst.append(1)\n'
5256*cda5da8dSAndroid Build Coastguard Worker             '      print(lst)\n'
5257*cda5da8dSAndroid Build Coastguard Worker             '\n'
5258*cda5da8dSAndroid Build Coastguard Worker             '   Display won’t realize "lst" has been changed because the '
5259*cda5da8dSAndroid Build Coastguard Worker             'result of\n'
5260*cda5da8dSAndroid Build Coastguard Worker             '   evaluation is modified in place by "lst.append(1)" before '
5261*cda5da8dSAndroid Build Coastguard Worker             'being\n'
5262*cda5da8dSAndroid Build Coastguard Worker             '   compared:\n'
5263*cda5da8dSAndroid Build Coastguard Worker             '\n'
5264*cda5da8dSAndroid Build Coastguard Worker             '      > example.py(3)<module>()\n'
5265*cda5da8dSAndroid Build Coastguard Worker             '      -> pass\n'
5266*cda5da8dSAndroid Build Coastguard Worker             '      (Pdb) display lst\n'
5267*cda5da8dSAndroid Build Coastguard Worker             '      display lst: []\n'
5268*cda5da8dSAndroid Build Coastguard Worker             '      (Pdb) n\n'
5269*cda5da8dSAndroid Build Coastguard Worker             '      > example.py(4)<module>()\n'
5270*cda5da8dSAndroid Build Coastguard Worker             '      -> lst.append(1)\n'
5271*cda5da8dSAndroid Build Coastguard Worker             '      (Pdb) n\n'
5272*cda5da8dSAndroid Build Coastguard Worker             '      > example.py(5)<module>()\n'
5273*cda5da8dSAndroid Build Coastguard Worker             '      -> print(lst)\n'
5274*cda5da8dSAndroid Build Coastguard Worker             '      (Pdb)\n'
5275*cda5da8dSAndroid Build Coastguard Worker             '\n'
5276*cda5da8dSAndroid Build Coastguard Worker             '   You can do some tricks with copy mechanism to make it work:\n'
5277*cda5da8dSAndroid Build Coastguard Worker             '\n'
5278*cda5da8dSAndroid Build Coastguard Worker             '      > example.py(3)<module>()\n'
5279*cda5da8dSAndroid Build Coastguard Worker             '      -> pass\n'
5280*cda5da8dSAndroid Build Coastguard Worker             '      (Pdb) display lst[:]\n'
5281*cda5da8dSAndroid Build Coastguard Worker             '      display lst[:]: []\n'
5282*cda5da8dSAndroid Build Coastguard Worker             '      (Pdb) n\n'
5283*cda5da8dSAndroid Build Coastguard Worker             '      > example.py(4)<module>()\n'
5284*cda5da8dSAndroid Build Coastguard Worker             '      -> lst.append(1)\n'
5285*cda5da8dSAndroid Build Coastguard Worker             '      (Pdb) n\n'
5286*cda5da8dSAndroid Build Coastguard Worker             '      > example.py(5)<module>()\n'
5287*cda5da8dSAndroid Build Coastguard Worker             '      -> print(lst)\n'
5288*cda5da8dSAndroid Build Coastguard Worker             '      display lst[:]: [1]  [old: []]\n'
5289*cda5da8dSAndroid Build Coastguard Worker             '      (Pdb)\n'
5290*cda5da8dSAndroid Build Coastguard Worker             '\n'
5291*cda5da8dSAndroid Build Coastguard Worker             '   New in version 3.2.\n'
5292*cda5da8dSAndroid Build Coastguard Worker             '\n'
5293*cda5da8dSAndroid Build Coastguard Worker             'undisplay [expression]\n'
5294*cda5da8dSAndroid Build Coastguard Worker             '\n'
5295*cda5da8dSAndroid Build Coastguard Worker             '   Do not display *expression* anymore in the current frame.  '
5296*cda5da8dSAndroid Build Coastguard Worker             'Without\n'
5297*cda5da8dSAndroid Build Coastguard Worker             '   *expression*, clear all display expressions for the current '
5298*cda5da8dSAndroid Build Coastguard Worker             'frame.\n'
5299*cda5da8dSAndroid Build Coastguard Worker             '\n'
5300*cda5da8dSAndroid Build Coastguard Worker             '   New in version 3.2.\n'
5301*cda5da8dSAndroid Build Coastguard Worker             '\n'
5302*cda5da8dSAndroid Build Coastguard Worker             'interact\n'
5303*cda5da8dSAndroid Build Coastguard Worker             '\n'
5304*cda5da8dSAndroid Build Coastguard Worker             '   Start an interactive interpreter (using the "code" module) '
5305*cda5da8dSAndroid Build Coastguard Worker             'whose\n'
5306*cda5da8dSAndroid Build Coastguard Worker             '   global namespace contains all the (global and local) names '
5307*cda5da8dSAndroid Build Coastguard Worker             'found in\n'
5308*cda5da8dSAndroid Build Coastguard Worker             '   the current scope.\n'
5309*cda5da8dSAndroid Build Coastguard Worker             '\n'
5310*cda5da8dSAndroid Build Coastguard Worker             '   New in version 3.2.\n'
5311*cda5da8dSAndroid Build Coastguard Worker             '\n'
5312*cda5da8dSAndroid Build Coastguard Worker             'alias [name [command]]\n'
5313*cda5da8dSAndroid Build Coastguard Worker             '\n'
5314*cda5da8dSAndroid Build Coastguard Worker             '   Create an alias called *name* that executes *command*.  The\n'
5315*cda5da8dSAndroid Build Coastguard Worker             '   *command* must *not* be enclosed in quotes.  Replaceable '
5316*cda5da8dSAndroid Build Coastguard Worker             'parameters\n'
5317*cda5da8dSAndroid Build Coastguard Worker             '   can be indicated by "%1", "%2", and so on, while "%*" is '
5318*cda5da8dSAndroid Build Coastguard Worker             'replaced\n'
5319*cda5da8dSAndroid Build Coastguard Worker             '   by all the parameters. If *command* is omitted, the current '
5320*cda5da8dSAndroid Build Coastguard Worker             'alias\n'
5321*cda5da8dSAndroid Build Coastguard Worker             '   for *name* is shown. If no arguments are given, all aliases '
5322*cda5da8dSAndroid Build Coastguard Worker             'are\n'
5323*cda5da8dSAndroid Build Coastguard Worker             '   listed.\n'
5324*cda5da8dSAndroid Build Coastguard Worker             '\n'
5325*cda5da8dSAndroid Build Coastguard Worker             '   Aliases may be nested and can contain anything that can be '
5326*cda5da8dSAndroid Build Coastguard Worker             'legally\n'
5327*cda5da8dSAndroid Build Coastguard Worker             '   typed at the pdb prompt.  Note that internal pdb commands '
5328*cda5da8dSAndroid Build Coastguard Worker             '*can* be\n'
5329*cda5da8dSAndroid Build Coastguard Worker             '   overridden by aliases.  Such a command is then hidden until '
5330*cda5da8dSAndroid Build Coastguard Worker             'the\n'
5331*cda5da8dSAndroid Build Coastguard Worker             '   alias is removed.  Aliasing is recursively applied to the '
5332*cda5da8dSAndroid Build Coastguard Worker             'first\n'
5333*cda5da8dSAndroid Build Coastguard Worker             '   word of the command line; all other words in the line are '
5334*cda5da8dSAndroid Build Coastguard Worker             'left\n'
5335*cda5da8dSAndroid Build Coastguard Worker             '   alone.\n'
5336*cda5da8dSAndroid Build Coastguard Worker             '\n'
5337*cda5da8dSAndroid Build Coastguard Worker             '   As an example, here are two useful aliases (especially when '
5338*cda5da8dSAndroid Build Coastguard Worker             'placed\n'
5339*cda5da8dSAndroid Build Coastguard Worker             '   in the ".pdbrc" file):\n'
5340*cda5da8dSAndroid Build Coastguard Worker             '\n'
5341*cda5da8dSAndroid Build Coastguard Worker             '      # Print instance variables (usage "pi classInst")\n'
5342*cda5da8dSAndroid Build Coastguard Worker             '      alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = '
5343*cda5da8dSAndroid Build Coastguard Worker             '{%1.__dict__[k]}")\n'
5344*cda5da8dSAndroid Build Coastguard Worker             '      # Print instance variables in self\n'
5345*cda5da8dSAndroid Build Coastguard Worker             '      alias ps pi self\n'
5346*cda5da8dSAndroid Build Coastguard Worker             '\n'
5347*cda5da8dSAndroid Build Coastguard Worker             'unalias name\n'
5348*cda5da8dSAndroid Build Coastguard Worker             '\n'
5349*cda5da8dSAndroid Build Coastguard Worker             '   Delete the specified alias *name*.\n'
5350*cda5da8dSAndroid Build Coastguard Worker             '\n'
5351*cda5da8dSAndroid Build Coastguard Worker             '! statement\n'
5352*cda5da8dSAndroid Build Coastguard Worker             '\n'
5353*cda5da8dSAndroid Build Coastguard Worker             '   Execute the (one-line) *statement* in the context of the '
5354*cda5da8dSAndroid Build Coastguard Worker             'current\n'
5355*cda5da8dSAndroid Build Coastguard Worker             '   stack frame. The exclamation point can be omitted unless the '
5356*cda5da8dSAndroid Build Coastguard Worker             'first\n'
5357*cda5da8dSAndroid Build Coastguard Worker             '   word of the statement resembles a debugger command.  To set '
5358*cda5da8dSAndroid Build Coastguard Worker             'a\n'
5359*cda5da8dSAndroid Build Coastguard Worker             '   global variable, you can prefix the assignment command with '
5360*cda5da8dSAndroid Build Coastguard Worker             'a\n'
5361*cda5da8dSAndroid Build Coastguard Worker             '   "global" statement on the same line, e.g.:\n'
5362*cda5da8dSAndroid Build Coastguard Worker             '\n'
5363*cda5da8dSAndroid Build Coastguard Worker             "      (Pdb) global list_options; list_options = ['-l']\n"
5364*cda5da8dSAndroid Build Coastguard Worker             '      (Pdb)\n'
5365*cda5da8dSAndroid Build Coastguard Worker             '\n'
5366*cda5da8dSAndroid Build Coastguard Worker             'run [args ...]\n'
5367*cda5da8dSAndroid Build Coastguard Worker             'restart [args ...]\n'
5368*cda5da8dSAndroid Build Coastguard Worker             '\n'
5369*cda5da8dSAndroid Build Coastguard Worker             '   Restart the debugged Python program.  If *args* is supplied, '
5370*cda5da8dSAndroid Build Coastguard Worker             'it is\n'
5371*cda5da8dSAndroid Build Coastguard Worker             '   split with "shlex" and the result is used as the new '
5372*cda5da8dSAndroid Build Coastguard Worker             '"sys.argv".\n'
5373*cda5da8dSAndroid Build Coastguard Worker             '   History, breakpoints, actions and debugger options are '
5374*cda5da8dSAndroid Build Coastguard Worker             'preserved.\n'
5375*cda5da8dSAndroid Build Coastguard Worker             '   "restart" is an alias for "run".\n'
5376*cda5da8dSAndroid Build Coastguard Worker             '\n'
5377*cda5da8dSAndroid Build Coastguard Worker             'q(uit)\n'
5378*cda5da8dSAndroid Build Coastguard Worker             '\n'
5379*cda5da8dSAndroid Build Coastguard Worker             '   Quit from the debugger.  The program being executed is '
5380*cda5da8dSAndroid Build Coastguard Worker             'aborted.\n'
5381*cda5da8dSAndroid Build Coastguard Worker             '\n'
5382*cda5da8dSAndroid Build Coastguard Worker             'debug code\n'
5383*cda5da8dSAndroid Build Coastguard Worker             '\n'
5384*cda5da8dSAndroid Build Coastguard Worker             '   Enter a recursive debugger that steps through *code* (which '
5385*cda5da8dSAndroid Build Coastguard Worker             'is an\n'
5386*cda5da8dSAndroid Build Coastguard Worker             '   arbitrary expression or statement to be executed in the '
5387*cda5da8dSAndroid Build Coastguard Worker             'current\n'
5388*cda5da8dSAndroid Build Coastguard Worker             '   environment).\n'
5389*cda5da8dSAndroid Build Coastguard Worker             '\n'
5390*cda5da8dSAndroid Build Coastguard Worker             'retval\n'
5391*cda5da8dSAndroid Build Coastguard Worker             '\n'
5392*cda5da8dSAndroid Build Coastguard Worker             '   Print the return value for the last return of the current '
5393*cda5da8dSAndroid Build Coastguard Worker             'function.\n'
5394*cda5da8dSAndroid Build Coastguard Worker             '\n'
5395*cda5da8dSAndroid Build Coastguard Worker             '-[ Footnotes ]-\n'
5396*cda5da8dSAndroid Build Coastguard Worker             '\n'
5397*cda5da8dSAndroid Build Coastguard Worker             '[1] Whether a frame is considered to originate in a certain '
5398*cda5da8dSAndroid Build Coastguard Worker             'module is\n'
5399*cda5da8dSAndroid Build Coastguard Worker             '    determined by the "__name__" in the frame globals.\n',
5400*cda5da8dSAndroid Build Coastguard Worker 'del': 'The "del" statement\n'
5401*cda5da8dSAndroid Build Coastguard Worker        '*******************\n'
5402*cda5da8dSAndroid Build Coastguard Worker        '\n'
5403*cda5da8dSAndroid Build Coastguard Worker        '   del_stmt ::= "del" target_list\n'
5404*cda5da8dSAndroid Build Coastguard Worker        '\n'
5405*cda5da8dSAndroid Build Coastguard Worker        'Deletion is recursively defined very similar to the way assignment '
5406*cda5da8dSAndroid Build Coastguard Worker        'is\n'
5407*cda5da8dSAndroid Build Coastguard Worker        'defined. Rather than spelling it out in full details, here are some\n'
5408*cda5da8dSAndroid Build Coastguard Worker        'hints.\n'
5409*cda5da8dSAndroid Build Coastguard Worker        '\n'
5410*cda5da8dSAndroid Build Coastguard Worker        'Deletion of a target list recursively deletes each target, from left\n'
5411*cda5da8dSAndroid Build Coastguard Worker        'to right.\n'
5412*cda5da8dSAndroid Build Coastguard Worker        '\n'
5413*cda5da8dSAndroid Build Coastguard Worker        'Deletion of a name removes the binding of that name from the local '
5414*cda5da8dSAndroid Build Coastguard Worker        'or\n'
5415*cda5da8dSAndroid Build Coastguard Worker        'global namespace, depending on whether the name occurs in a "global"\n'
5416*cda5da8dSAndroid Build Coastguard Worker        'statement in the same code block.  If the name is unbound, a\n'
5417*cda5da8dSAndroid Build Coastguard Worker        '"NameError" exception will be raised.\n'
5418*cda5da8dSAndroid Build Coastguard Worker        '\n'
5419*cda5da8dSAndroid Build Coastguard Worker        'Deletion of attribute references, subscriptions and slicings is '
5420*cda5da8dSAndroid Build Coastguard Worker        'passed\n'
5421*cda5da8dSAndroid Build Coastguard Worker        'to the primary object involved; deletion of a slicing is in general\n'
5422*cda5da8dSAndroid Build Coastguard Worker        'equivalent to assignment of an empty slice of the right type (but '
5423*cda5da8dSAndroid Build Coastguard Worker        'even\n'
5424*cda5da8dSAndroid Build Coastguard Worker        'this is determined by the sliced object).\n'
5425*cda5da8dSAndroid Build Coastguard Worker        '\n'
5426*cda5da8dSAndroid Build Coastguard Worker        'Changed in version 3.2: Previously it was illegal to delete a name\n'
5427*cda5da8dSAndroid Build Coastguard Worker        'from the local namespace if it occurs as a free variable in a nested\n'
5428*cda5da8dSAndroid Build Coastguard Worker        'block.\n',
5429*cda5da8dSAndroid Build Coastguard Worker 'dict': 'Dictionary displays\n'
5430*cda5da8dSAndroid Build Coastguard Worker         '*******************\n'
5431*cda5da8dSAndroid Build Coastguard Worker         '\n'
5432*cda5da8dSAndroid Build Coastguard Worker         'A dictionary display is a possibly empty series of key/datum pairs\n'
5433*cda5da8dSAndroid Build Coastguard Worker         'enclosed in curly braces:\n'
5434*cda5da8dSAndroid Build Coastguard Worker         '\n'
5435*cda5da8dSAndroid Build Coastguard Worker         '   dict_display       ::= "{" [key_datum_list | dict_comprehension] '
5436*cda5da8dSAndroid Build Coastguard Worker         '"}"\n'
5437*cda5da8dSAndroid Build Coastguard Worker         '   key_datum_list     ::= key_datum ("," key_datum)* [","]\n'
5438*cda5da8dSAndroid Build Coastguard Worker         '   key_datum          ::= expression ":" expression | "**" or_expr\n'
5439*cda5da8dSAndroid Build Coastguard Worker         '   dict_comprehension ::= expression ":" expression comp_for\n'
5440*cda5da8dSAndroid Build Coastguard Worker         '\n'
5441*cda5da8dSAndroid Build Coastguard Worker         'A dictionary display yields a new dictionary object.\n'
5442*cda5da8dSAndroid Build Coastguard Worker         '\n'
5443*cda5da8dSAndroid Build Coastguard Worker         'If a comma-separated sequence of key/datum pairs is given, they are\n'
5444*cda5da8dSAndroid Build Coastguard Worker         'evaluated from left to right to define the entries of the '
5445*cda5da8dSAndroid Build Coastguard Worker         'dictionary:\n'
5446*cda5da8dSAndroid Build Coastguard Worker         'each key object is used as a key into the dictionary to store the\n'
5447*cda5da8dSAndroid Build Coastguard Worker         'corresponding datum.  This means that you can specify the same key\n'
5448*cda5da8dSAndroid Build Coastguard Worker         'multiple times in the key/datum list, and the final dictionary’s '
5449*cda5da8dSAndroid Build Coastguard Worker         'value\n'
5450*cda5da8dSAndroid Build Coastguard Worker         'for that key will be the last one given.\n'
5451*cda5da8dSAndroid Build Coastguard Worker         '\n'
5452*cda5da8dSAndroid Build Coastguard Worker         'A double asterisk "**" denotes *dictionary unpacking*. Its operand\n'
5453*cda5da8dSAndroid Build Coastguard Worker         'must be a *mapping*.  Each mapping item is added to the new\n'
5454*cda5da8dSAndroid Build Coastguard Worker         'dictionary.  Later values replace values already set by earlier\n'
5455*cda5da8dSAndroid Build Coastguard Worker         'key/datum pairs and earlier dictionary unpackings.\n'
5456*cda5da8dSAndroid Build Coastguard Worker         '\n'
5457*cda5da8dSAndroid Build Coastguard Worker         'New in version 3.5: Unpacking into dictionary displays, originally\n'
5458*cda5da8dSAndroid Build Coastguard Worker         'proposed by **PEP 448**.\n'
5459*cda5da8dSAndroid Build Coastguard Worker         '\n'
5460*cda5da8dSAndroid Build Coastguard Worker         'A dict comprehension, in contrast to list and set comprehensions,\n'
5461*cda5da8dSAndroid Build Coastguard Worker         'needs two expressions separated with a colon followed by the usual\n'
5462*cda5da8dSAndroid Build Coastguard Worker         '“for” and “if” clauses. When the comprehension is run, the '
5463*cda5da8dSAndroid Build Coastguard Worker         'resulting\n'
5464*cda5da8dSAndroid Build Coastguard Worker         'key and value elements are inserted in the new dictionary in the '
5465*cda5da8dSAndroid Build Coastguard Worker         'order\n'
5466*cda5da8dSAndroid Build Coastguard Worker         'they are produced.\n'
5467*cda5da8dSAndroid Build Coastguard Worker         '\n'
5468*cda5da8dSAndroid Build Coastguard Worker         'Restrictions on the types of the key values are listed earlier in\n'
5469*cda5da8dSAndroid Build Coastguard Worker         'section The standard type hierarchy.  (To summarize, the key type\n'
5470*cda5da8dSAndroid Build Coastguard Worker         'should be *hashable*, which excludes all mutable objects.)  Clashes\n'
5471*cda5da8dSAndroid Build Coastguard Worker         'between duplicate keys are not detected; the last datum (textually\n'
5472*cda5da8dSAndroid Build Coastguard Worker         'rightmost in the display) stored for a given key value prevails.\n'
5473*cda5da8dSAndroid Build Coastguard Worker         '\n'
5474*cda5da8dSAndroid Build Coastguard Worker         'Changed in version 3.8: Prior to Python 3.8, in dict '
5475*cda5da8dSAndroid Build Coastguard Worker         'comprehensions,\n'
5476*cda5da8dSAndroid Build Coastguard Worker         'the evaluation order of key and value was not well-defined.  In\n'
5477*cda5da8dSAndroid Build Coastguard Worker         'CPython, the value was evaluated before the key.  Starting with '
5478*cda5da8dSAndroid Build Coastguard Worker         '3.8,\n'
5479*cda5da8dSAndroid Build Coastguard Worker         'the key is evaluated before the value, as proposed by **PEP 572**.\n',
5480*cda5da8dSAndroid Build Coastguard Worker 'dynamic-features': 'Interaction with dynamic features\n'
5481*cda5da8dSAndroid Build Coastguard Worker                     '*********************************\n'
5482*cda5da8dSAndroid Build Coastguard Worker                     '\n'
5483*cda5da8dSAndroid Build Coastguard Worker                     'Name resolution of free variables occurs at runtime, not '
5484*cda5da8dSAndroid Build Coastguard Worker                     'at compile\n'
5485*cda5da8dSAndroid Build Coastguard Worker                     'time. This means that the following code will print 42:\n'
5486*cda5da8dSAndroid Build Coastguard Worker                     '\n'
5487*cda5da8dSAndroid Build Coastguard Worker                     '   i = 10\n'
5488*cda5da8dSAndroid Build Coastguard Worker                     '   def f():\n'
5489*cda5da8dSAndroid Build Coastguard Worker                     '       print(i)\n'
5490*cda5da8dSAndroid Build Coastguard Worker                     '   i = 42\n'
5491*cda5da8dSAndroid Build Coastguard Worker                     '   f()\n'
5492*cda5da8dSAndroid Build Coastguard Worker                     '\n'
5493*cda5da8dSAndroid Build Coastguard Worker                     'The "eval()" and "exec()" functions do not have access '
5494*cda5da8dSAndroid Build Coastguard Worker                     'to the full\n'
5495*cda5da8dSAndroid Build Coastguard Worker                     'environment for resolving names.  Names may be resolved '
5496*cda5da8dSAndroid Build Coastguard Worker                     'in the local\n'
5497*cda5da8dSAndroid Build Coastguard Worker                     'and global namespaces of the caller.  Free variables are '
5498*cda5da8dSAndroid Build Coastguard Worker                     'not resolved\n'
5499*cda5da8dSAndroid Build Coastguard Worker                     'in the nearest enclosing namespace, but in the global '
5500*cda5da8dSAndroid Build Coastguard Worker                     'namespace.  [1]\n'
5501*cda5da8dSAndroid Build Coastguard Worker                     'The "exec()" and "eval()" functions have optional '
5502*cda5da8dSAndroid Build Coastguard Worker                     'arguments to\n'
5503*cda5da8dSAndroid Build Coastguard Worker                     'override the global and local namespace.  If only one '
5504*cda5da8dSAndroid Build Coastguard Worker                     'namespace is\n'
5505*cda5da8dSAndroid Build Coastguard Worker                     'specified, it is used for both.\n',
5506*cda5da8dSAndroid Build Coastguard Worker 'else': 'The "if" statement\n'
5507*cda5da8dSAndroid Build Coastguard Worker         '******************\n'
5508*cda5da8dSAndroid Build Coastguard Worker         '\n'
5509*cda5da8dSAndroid Build Coastguard Worker         'The "if" statement is used for conditional execution:\n'
5510*cda5da8dSAndroid Build Coastguard Worker         '\n'
5511*cda5da8dSAndroid Build Coastguard Worker         '   if_stmt ::= "if" assignment_expression ":" suite\n'
5512*cda5da8dSAndroid Build Coastguard Worker         '               ("elif" assignment_expression ":" suite)*\n'
5513*cda5da8dSAndroid Build Coastguard Worker         '               ["else" ":" suite]\n'
5514*cda5da8dSAndroid Build Coastguard Worker         '\n'
5515*cda5da8dSAndroid Build Coastguard Worker         'It selects exactly one of the suites by evaluating the expressions '
5516*cda5da8dSAndroid Build Coastguard Worker         'one\n'
5517*cda5da8dSAndroid Build Coastguard Worker         'by one until one is found to be true (see section Boolean '
5518*cda5da8dSAndroid Build Coastguard Worker         'operations\n'
5519*cda5da8dSAndroid Build Coastguard Worker         'for the definition of true and false); then that suite is executed\n'
5520*cda5da8dSAndroid Build Coastguard Worker         '(and no other part of the "if" statement is executed or evaluated).\n'
5521*cda5da8dSAndroid Build Coastguard Worker         'If all expressions are false, the suite of the "else" clause, if\n'
5522*cda5da8dSAndroid Build Coastguard Worker         'present, is executed.\n',
5523*cda5da8dSAndroid Build Coastguard Worker 'exceptions': 'Exceptions\n'
5524*cda5da8dSAndroid Build Coastguard Worker               '**********\n'
5525*cda5da8dSAndroid Build Coastguard Worker               '\n'
5526*cda5da8dSAndroid Build Coastguard Worker               'Exceptions are a means of breaking out of the normal flow of '
5527*cda5da8dSAndroid Build Coastguard Worker               'control\n'
5528*cda5da8dSAndroid Build Coastguard Worker               'of a code block in order to handle errors or other '
5529*cda5da8dSAndroid Build Coastguard Worker               'exceptional\n'
5530*cda5da8dSAndroid Build Coastguard Worker               'conditions.  An exception is *raised* at the point where the '
5531*cda5da8dSAndroid Build Coastguard Worker               'error is\n'
5532*cda5da8dSAndroid Build Coastguard Worker               'detected; it may be *handled* by the surrounding code block or '
5533*cda5da8dSAndroid Build Coastguard Worker               'by any\n'
5534*cda5da8dSAndroid Build Coastguard Worker               'code block that directly or indirectly invoked the code block '
5535*cda5da8dSAndroid Build Coastguard Worker               'where\n'
5536*cda5da8dSAndroid Build Coastguard Worker               'the error occurred.\n'
5537*cda5da8dSAndroid Build Coastguard Worker               '\n'
5538*cda5da8dSAndroid Build Coastguard Worker               'The Python interpreter raises an exception when it detects a '
5539*cda5da8dSAndroid Build Coastguard Worker               'run-time\n'
5540*cda5da8dSAndroid Build Coastguard Worker               'error (such as division by zero).  A Python program can also\n'
5541*cda5da8dSAndroid Build Coastguard Worker               'explicitly raise an exception with the "raise" statement. '
5542*cda5da8dSAndroid Build Coastguard Worker               'Exception\n'
5543*cda5da8dSAndroid Build Coastguard Worker               'handlers are specified with the "try" … "except" statement.  '
5544*cda5da8dSAndroid Build Coastguard Worker               'The\n'
5545*cda5da8dSAndroid Build Coastguard Worker               '"finally" clause of such a statement can be used to specify '
5546*cda5da8dSAndroid Build Coastguard Worker               'cleanup\n'
5547*cda5da8dSAndroid Build Coastguard Worker               'code which does not handle the exception, but is executed '
5548*cda5da8dSAndroid Build Coastguard Worker               'whether an\n'
5549*cda5da8dSAndroid Build Coastguard Worker               'exception occurred or not in the preceding code.\n'
5550*cda5da8dSAndroid Build Coastguard Worker               '\n'
5551*cda5da8dSAndroid Build Coastguard Worker               'Python uses the “termination” model of error handling: an '
5552*cda5da8dSAndroid Build Coastguard Worker               'exception\n'
5553*cda5da8dSAndroid Build Coastguard Worker               'handler can find out what happened and continue execution at '
5554*cda5da8dSAndroid Build Coastguard Worker               'an outer\n'
5555*cda5da8dSAndroid Build Coastguard Worker               'level, but it cannot repair the cause of the error and retry '
5556*cda5da8dSAndroid Build Coastguard Worker               'the\n'
5557*cda5da8dSAndroid Build Coastguard Worker               'failing operation (except by re-entering the offending piece '
5558*cda5da8dSAndroid Build Coastguard Worker               'of code\n'
5559*cda5da8dSAndroid Build Coastguard Worker               'from the top).\n'
5560*cda5da8dSAndroid Build Coastguard Worker               '\n'
5561*cda5da8dSAndroid Build Coastguard Worker               'When an exception is not handled at all, the interpreter '
5562*cda5da8dSAndroid Build Coastguard Worker               'terminates\n'
5563*cda5da8dSAndroid Build Coastguard Worker               'execution of the program, or returns to its interactive main '
5564*cda5da8dSAndroid Build Coastguard Worker               'loop.  In\n'
5565*cda5da8dSAndroid Build Coastguard Worker               'either case, it prints a stack traceback, except when the '
5566*cda5da8dSAndroid Build Coastguard Worker               'exception is\n'
5567*cda5da8dSAndroid Build Coastguard Worker               '"SystemExit".\n'
5568*cda5da8dSAndroid Build Coastguard Worker               '\n'
5569*cda5da8dSAndroid Build Coastguard Worker               'Exceptions are identified by class instances.  The "except" '
5570*cda5da8dSAndroid Build Coastguard Worker               'clause is\n'
5571*cda5da8dSAndroid Build Coastguard Worker               'selected depending on the class of the instance: it must '
5572*cda5da8dSAndroid Build Coastguard Worker               'reference the\n'
5573*cda5da8dSAndroid Build Coastguard Worker               'class of the instance or a *non-virtual base class* thereof. '
5574*cda5da8dSAndroid Build Coastguard Worker               'The\n'
5575*cda5da8dSAndroid Build Coastguard Worker               'instance can be received by the handler and can carry '
5576*cda5da8dSAndroid Build Coastguard Worker               'additional\n'
5577*cda5da8dSAndroid Build Coastguard Worker               'information about the exceptional condition.\n'
5578*cda5da8dSAndroid Build Coastguard Worker               '\n'
5579*cda5da8dSAndroid Build Coastguard Worker               'Note:\n'
5580*cda5da8dSAndroid Build Coastguard Worker               '\n'
5581*cda5da8dSAndroid Build Coastguard Worker               '  Exception messages are not part of the Python API.  Their '
5582*cda5da8dSAndroid Build Coastguard Worker               'contents\n'
5583*cda5da8dSAndroid Build Coastguard Worker               '  may change from one version of Python to the next without '
5584*cda5da8dSAndroid Build Coastguard Worker               'warning\n'
5585*cda5da8dSAndroid Build Coastguard Worker               '  and should not be relied on by code which will run under '
5586*cda5da8dSAndroid Build Coastguard Worker               'multiple\n'
5587*cda5da8dSAndroid Build Coastguard Worker               '  versions of the interpreter.\n'
5588*cda5da8dSAndroid Build Coastguard Worker               '\n'
5589*cda5da8dSAndroid Build Coastguard Worker               'See also the description of the "try" statement in section The '
5590*cda5da8dSAndroid Build Coastguard Worker               'try\n'
5591*cda5da8dSAndroid Build Coastguard Worker               'statement and "raise" statement in section The raise '
5592*cda5da8dSAndroid Build Coastguard Worker               'statement.\n'
5593*cda5da8dSAndroid Build Coastguard Worker               '\n'
5594*cda5da8dSAndroid Build Coastguard Worker               '-[ Footnotes ]-\n'
5595*cda5da8dSAndroid Build Coastguard Worker               '\n'
5596*cda5da8dSAndroid Build Coastguard Worker               '[1] This limitation occurs because the code that is executed '
5597*cda5da8dSAndroid Build Coastguard Worker               'by these\n'
5598*cda5da8dSAndroid Build Coastguard Worker               '    operations is not available at the time the module is '
5599*cda5da8dSAndroid Build Coastguard Worker               'compiled.\n',
5600*cda5da8dSAndroid Build Coastguard Worker 'execmodel': 'Execution model\n'
5601*cda5da8dSAndroid Build Coastguard Worker              '***************\n'
5602*cda5da8dSAndroid Build Coastguard Worker              '\n'
5603*cda5da8dSAndroid Build Coastguard Worker              '\n'
5604*cda5da8dSAndroid Build Coastguard Worker              'Structure of a program\n'
5605*cda5da8dSAndroid Build Coastguard Worker              '======================\n'
5606*cda5da8dSAndroid Build Coastguard Worker              '\n'
5607*cda5da8dSAndroid Build Coastguard Worker              'A Python program is constructed from code blocks. A *block* is '
5608*cda5da8dSAndroid Build Coastguard Worker              'a piece\n'
5609*cda5da8dSAndroid Build Coastguard Worker              'of Python program text that is executed as a unit. The '
5610*cda5da8dSAndroid Build Coastguard Worker              'following are\n'
5611*cda5da8dSAndroid Build Coastguard Worker              'blocks: a module, a function body, and a class definition. '
5612*cda5da8dSAndroid Build Coastguard Worker              'Each\n'
5613*cda5da8dSAndroid Build Coastguard Worker              'command typed interactively is a block.  A script file (a file '
5614*cda5da8dSAndroid Build Coastguard Worker              'given\n'
5615*cda5da8dSAndroid Build Coastguard Worker              'as standard input to the interpreter or specified as a command '
5616*cda5da8dSAndroid Build Coastguard Worker              'line\n'
5617*cda5da8dSAndroid Build Coastguard Worker              'argument to the interpreter) is a code block.  A script command '
5618*cda5da8dSAndroid Build Coastguard Worker              '(a\n'
5619*cda5da8dSAndroid Build Coastguard Worker              'command specified on the interpreter command line with the '
5620*cda5da8dSAndroid Build Coastguard Worker              '"-c"\n'
5621*cda5da8dSAndroid Build Coastguard Worker              'option) is a code block. A module run as a top level script (as '
5622*cda5da8dSAndroid Build Coastguard Worker              'module\n'
5623*cda5da8dSAndroid Build Coastguard Worker              '"__main__") from the command line using a "-m" argument is also '
5624*cda5da8dSAndroid Build Coastguard Worker              'a code\n'
5625*cda5da8dSAndroid Build Coastguard Worker              'block. The string argument passed to the built-in functions '
5626*cda5da8dSAndroid Build Coastguard Worker              '"eval()"\n'
5627*cda5da8dSAndroid Build Coastguard Worker              'and "exec()" is a code block.\n'
5628*cda5da8dSAndroid Build Coastguard Worker              '\n'
5629*cda5da8dSAndroid Build Coastguard Worker              'A code block is executed in an *execution frame*.  A frame '
5630*cda5da8dSAndroid Build Coastguard Worker              'contains\n'
5631*cda5da8dSAndroid Build Coastguard Worker              'some administrative information (used for debugging) and '
5632*cda5da8dSAndroid Build Coastguard Worker              'determines\n'
5633*cda5da8dSAndroid Build Coastguard Worker              'where and how execution continues after the code block’s '
5634*cda5da8dSAndroid Build Coastguard Worker              'execution has\n'
5635*cda5da8dSAndroid Build Coastguard Worker              'completed.\n'
5636*cda5da8dSAndroid Build Coastguard Worker              '\n'
5637*cda5da8dSAndroid Build Coastguard Worker              '\n'
5638*cda5da8dSAndroid Build Coastguard Worker              'Naming and binding\n'
5639*cda5da8dSAndroid Build Coastguard Worker              '==================\n'
5640*cda5da8dSAndroid Build Coastguard Worker              '\n'
5641*cda5da8dSAndroid Build Coastguard Worker              '\n'
5642*cda5da8dSAndroid Build Coastguard Worker              'Binding of names\n'
5643*cda5da8dSAndroid Build Coastguard Worker              '----------------\n'
5644*cda5da8dSAndroid Build Coastguard Worker              '\n'
5645*cda5da8dSAndroid Build Coastguard Worker              '*Names* refer to objects.  Names are introduced by name '
5646*cda5da8dSAndroid Build Coastguard Worker              'binding\n'
5647*cda5da8dSAndroid Build Coastguard Worker              'operations.\n'
5648*cda5da8dSAndroid Build Coastguard Worker              '\n'
5649*cda5da8dSAndroid Build Coastguard Worker              'The following constructs bind names:\n'
5650*cda5da8dSAndroid Build Coastguard Worker              '\n'
5651*cda5da8dSAndroid Build Coastguard Worker              '* formal parameters to functions,\n'
5652*cda5da8dSAndroid Build Coastguard Worker              '\n'
5653*cda5da8dSAndroid Build Coastguard Worker              '* class definitions,\n'
5654*cda5da8dSAndroid Build Coastguard Worker              '\n'
5655*cda5da8dSAndroid Build Coastguard Worker              '* function definitions,\n'
5656*cda5da8dSAndroid Build Coastguard Worker              '\n'
5657*cda5da8dSAndroid Build Coastguard Worker              '* assignment expressions,\n'
5658*cda5da8dSAndroid Build Coastguard Worker              '\n'
5659*cda5da8dSAndroid Build Coastguard Worker              '* targets that are identifiers if occurring in an assignment:\n'
5660*cda5da8dSAndroid Build Coastguard Worker              '\n'
5661*cda5da8dSAndroid Build Coastguard Worker              '  * "for" loop header,\n'
5662*cda5da8dSAndroid Build Coastguard Worker              '\n'
5663*cda5da8dSAndroid Build Coastguard Worker              '  * after "as" in a "with" statement, "except" clause, '
5664*cda5da8dSAndroid Build Coastguard Worker              '"except*"\n'
5665*cda5da8dSAndroid Build Coastguard Worker              '    clause, or in the as-pattern in structural pattern '
5666*cda5da8dSAndroid Build Coastguard Worker              'matching,\n'
5667*cda5da8dSAndroid Build Coastguard Worker              '\n'
5668*cda5da8dSAndroid Build Coastguard Worker              '  * in a capture pattern in structural pattern matching\n'
5669*cda5da8dSAndroid Build Coastguard Worker              '\n'
5670*cda5da8dSAndroid Build Coastguard Worker              '* "import" statements.\n'
5671*cda5da8dSAndroid Build Coastguard Worker              '\n'
5672*cda5da8dSAndroid Build Coastguard Worker              'The "import" statement of the form "from ... import *" binds '
5673*cda5da8dSAndroid Build Coastguard Worker              'all names\n'
5674*cda5da8dSAndroid Build Coastguard Worker              'defined in the imported module, except those beginning with an\n'
5675*cda5da8dSAndroid Build Coastguard Worker              'underscore. This form may only be used at the module level.\n'
5676*cda5da8dSAndroid Build Coastguard Worker              '\n'
5677*cda5da8dSAndroid Build Coastguard Worker              'A target occurring in a "del" statement is also considered '
5678*cda5da8dSAndroid Build Coastguard Worker              'bound for\n'
5679*cda5da8dSAndroid Build Coastguard Worker              'this purpose (though the actual semantics are to unbind the '
5680*cda5da8dSAndroid Build Coastguard Worker              'name).\n'
5681*cda5da8dSAndroid Build Coastguard Worker              '\n'
5682*cda5da8dSAndroid Build Coastguard Worker              'Each assignment or import statement occurs within a block '
5683*cda5da8dSAndroid Build Coastguard Worker              'defined by a\n'
5684*cda5da8dSAndroid Build Coastguard Worker              'class or function definition or at the module level (the '
5685*cda5da8dSAndroid Build Coastguard Worker              'top-level\n'
5686*cda5da8dSAndroid Build Coastguard Worker              'code block).\n'
5687*cda5da8dSAndroid Build Coastguard Worker              '\n'
5688*cda5da8dSAndroid Build Coastguard Worker              'If a name is bound in a block, it is a local variable of that '
5689*cda5da8dSAndroid Build Coastguard Worker              'block,\n'
5690*cda5da8dSAndroid Build Coastguard Worker              'unless declared as "nonlocal" or "global".  If a name is bound '
5691*cda5da8dSAndroid Build Coastguard Worker              'at the\n'
5692*cda5da8dSAndroid Build Coastguard Worker              'module level, it is a global variable.  (The variables of the '
5693*cda5da8dSAndroid Build Coastguard Worker              'module\n'
5694*cda5da8dSAndroid Build Coastguard Worker              'code block are local and global.)  If a variable is used in a '
5695*cda5da8dSAndroid Build Coastguard Worker              'code\n'
5696*cda5da8dSAndroid Build Coastguard Worker              'block but not defined there, it is a *free variable*.\n'
5697*cda5da8dSAndroid Build Coastguard Worker              '\n'
5698*cda5da8dSAndroid Build Coastguard Worker              'Each occurrence of a name in the program text refers to the '
5699*cda5da8dSAndroid Build Coastguard Worker              '*binding*\n'
5700*cda5da8dSAndroid Build Coastguard Worker              'of that name established by the following name resolution '
5701*cda5da8dSAndroid Build Coastguard Worker              'rules.\n'
5702*cda5da8dSAndroid Build Coastguard Worker              '\n'
5703*cda5da8dSAndroid Build Coastguard Worker              '\n'
5704*cda5da8dSAndroid Build Coastguard Worker              'Resolution of names\n'
5705*cda5da8dSAndroid Build Coastguard Worker              '-------------------\n'
5706*cda5da8dSAndroid Build Coastguard Worker              '\n'
5707*cda5da8dSAndroid Build Coastguard Worker              'A *scope* defines the visibility of a name within a block.  If '
5708*cda5da8dSAndroid Build Coastguard Worker              'a local\n'
5709*cda5da8dSAndroid Build Coastguard Worker              'variable is defined in a block, its scope includes that block.  '
5710*cda5da8dSAndroid Build Coastguard Worker              'If the\n'
5711*cda5da8dSAndroid Build Coastguard Worker              'definition occurs in a function block, the scope extends to any '
5712*cda5da8dSAndroid Build Coastguard Worker              'blocks\n'
5713*cda5da8dSAndroid Build Coastguard Worker              'contained within the defining one, unless a contained block '
5714*cda5da8dSAndroid Build Coastguard Worker              'introduces\n'
5715*cda5da8dSAndroid Build Coastguard Worker              'a different binding for the name.\n'
5716*cda5da8dSAndroid Build Coastguard Worker              '\n'
5717*cda5da8dSAndroid Build Coastguard Worker              'When a name is used in a code block, it is resolved using the '
5718*cda5da8dSAndroid Build Coastguard Worker              'nearest\n'
5719*cda5da8dSAndroid Build Coastguard Worker              'enclosing scope.  The set of all such scopes visible to a code '
5720*cda5da8dSAndroid Build Coastguard Worker              'block\n'
5721*cda5da8dSAndroid Build Coastguard Worker              'is called the block’s *environment*.\n'
5722*cda5da8dSAndroid Build Coastguard Worker              '\n'
5723*cda5da8dSAndroid Build Coastguard Worker              'When a name is not found at all, a "NameError" exception is '
5724*cda5da8dSAndroid Build Coastguard Worker              'raised. If\n'
5725*cda5da8dSAndroid Build Coastguard Worker              'the current scope is a function scope, and the name refers to a '
5726*cda5da8dSAndroid Build Coastguard Worker              'local\n'
5727*cda5da8dSAndroid Build Coastguard Worker              'variable that has not yet been bound to a value at the point '
5728*cda5da8dSAndroid Build Coastguard Worker              'where the\n'
5729*cda5da8dSAndroid Build Coastguard Worker              'name is used, an "UnboundLocalError" exception is raised.\n'
5730*cda5da8dSAndroid Build Coastguard Worker              '"UnboundLocalError" is a subclass of "NameError".\n'
5731*cda5da8dSAndroid Build Coastguard Worker              '\n'
5732*cda5da8dSAndroid Build Coastguard Worker              'If a name binding operation occurs anywhere within a code '
5733*cda5da8dSAndroid Build Coastguard Worker              'block, all\n'
5734*cda5da8dSAndroid Build Coastguard Worker              'uses of the name within the block are treated as references to '
5735*cda5da8dSAndroid Build Coastguard Worker              'the\n'
5736*cda5da8dSAndroid Build Coastguard Worker              'current block.  This can lead to errors when a name is used '
5737*cda5da8dSAndroid Build Coastguard Worker              'within a\n'
5738*cda5da8dSAndroid Build Coastguard Worker              'block before it is bound.  This rule is subtle.  Python lacks\n'
5739*cda5da8dSAndroid Build Coastguard Worker              'declarations and allows name binding operations to occur '
5740*cda5da8dSAndroid Build Coastguard Worker              'anywhere\n'
5741*cda5da8dSAndroid Build Coastguard Worker              'within a code block.  The local variables of a code block can '
5742*cda5da8dSAndroid Build Coastguard Worker              'be\n'
5743*cda5da8dSAndroid Build Coastguard Worker              'determined by scanning the entire text of the block for name '
5744*cda5da8dSAndroid Build Coastguard Worker              'binding\n'
5745*cda5da8dSAndroid Build Coastguard Worker              'operations. See the FAQ entry on UnboundLocalError for '
5746*cda5da8dSAndroid Build Coastguard Worker              'examples.\n'
5747*cda5da8dSAndroid Build Coastguard Worker              '\n'
5748*cda5da8dSAndroid Build Coastguard Worker              'If the "global" statement occurs within a block, all uses of '
5749*cda5da8dSAndroid Build Coastguard Worker              'the names\n'
5750*cda5da8dSAndroid Build Coastguard Worker              'specified in the statement refer to the bindings of those names '
5751*cda5da8dSAndroid Build Coastguard Worker              'in the\n'
5752*cda5da8dSAndroid Build Coastguard Worker              'top-level namespace.  Names are resolved in the top-level '
5753*cda5da8dSAndroid Build Coastguard Worker              'namespace by\n'
5754*cda5da8dSAndroid Build Coastguard Worker              'searching the global namespace, i.e. the namespace of the '
5755*cda5da8dSAndroid Build Coastguard Worker              'module\n'
5756*cda5da8dSAndroid Build Coastguard Worker              'containing the code block, and the builtins namespace, the '
5757*cda5da8dSAndroid Build Coastguard Worker              'namespace\n'
5758*cda5da8dSAndroid Build Coastguard Worker              'of the module "builtins".  The global namespace is searched '
5759*cda5da8dSAndroid Build Coastguard Worker              'first.  If\n'
5760*cda5da8dSAndroid Build Coastguard Worker              'the names are not found there, the builtins namespace is '
5761*cda5da8dSAndroid Build Coastguard Worker              'searched.\n'
5762*cda5da8dSAndroid Build Coastguard Worker              'The "global" statement must precede all uses of the listed '
5763*cda5da8dSAndroid Build Coastguard Worker              'names.\n'
5764*cda5da8dSAndroid Build Coastguard Worker              '\n'
5765*cda5da8dSAndroid Build Coastguard Worker              'The "global" statement has the same scope as a name binding '
5766*cda5da8dSAndroid Build Coastguard Worker              'operation\n'
5767*cda5da8dSAndroid Build Coastguard Worker              'in the same block.  If the nearest enclosing scope for a free '
5768*cda5da8dSAndroid Build Coastguard Worker              'variable\n'
5769*cda5da8dSAndroid Build Coastguard Worker              'contains a global statement, the free variable is treated as a '
5770*cda5da8dSAndroid Build Coastguard Worker              'global.\n'
5771*cda5da8dSAndroid Build Coastguard Worker              '\n'
5772*cda5da8dSAndroid Build Coastguard Worker              'The "nonlocal" statement causes corresponding names to refer '
5773*cda5da8dSAndroid Build Coastguard Worker              'to\n'
5774*cda5da8dSAndroid Build Coastguard Worker              'previously bound variables in the nearest enclosing function '
5775*cda5da8dSAndroid Build Coastguard Worker              'scope.\n'
5776*cda5da8dSAndroid Build Coastguard Worker              '"SyntaxError" is raised at compile time if the given name does '
5777*cda5da8dSAndroid Build Coastguard Worker              'not\n'
5778*cda5da8dSAndroid Build Coastguard Worker              'exist in any enclosing function scope.\n'
5779*cda5da8dSAndroid Build Coastguard Worker              '\n'
5780*cda5da8dSAndroid Build Coastguard Worker              'The namespace for a module is automatically created the first '
5781*cda5da8dSAndroid Build Coastguard Worker              'time a\n'
5782*cda5da8dSAndroid Build Coastguard Worker              'module is imported.  The main module for a script is always '
5783*cda5da8dSAndroid Build Coastguard Worker              'called\n'
5784*cda5da8dSAndroid Build Coastguard Worker              '"__main__".\n'
5785*cda5da8dSAndroid Build Coastguard Worker              '\n'
5786*cda5da8dSAndroid Build Coastguard Worker              'Class definition blocks and arguments to "exec()" and "eval()" '
5787*cda5da8dSAndroid Build Coastguard Worker              'are\n'
5788*cda5da8dSAndroid Build Coastguard Worker              'special in the context of name resolution. A class definition '
5789*cda5da8dSAndroid Build Coastguard Worker              'is an\n'
5790*cda5da8dSAndroid Build Coastguard Worker              'executable statement that may use and define names. These '
5791*cda5da8dSAndroid Build Coastguard Worker              'references\n'
5792*cda5da8dSAndroid Build Coastguard Worker              'follow the normal rules for name resolution with an exception '
5793*cda5da8dSAndroid Build Coastguard Worker              'that\n'
5794*cda5da8dSAndroid Build Coastguard Worker              'unbound local variables are looked up in the global namespace. '
5795*cda5da8dSAndroid Build Coastguard Worker              'The\n'
5796*cda5da8dSAndroid Build Coastguard Worker              'namespace of the class definition becomes the attribute '
5797*cda5da8dSAndroid Build Coastguard Worker              'dictionary of\n'
5798*cda5da8dSAndroid Build Coastguard Worker              'the class. The scope of names defined in a class block is '
5799*cda5da8dSAndroid Build Coastguard Worker              'limited to\n'
5800*cda5da8dSAndroid Build Coastguard Worker              'the class block; it does not extend to the code blocks of '
5801*cda5da8dSAndroid Build Coastguard Worker              'methods –\n'
5802*cda5da8dSAndroid Build Coastguard Worker              'this includes comprehensions and generator expressions since '
5803*cda5da8dSAndroid Build Coastguard Worker              'they are\n'
5804*cda5da8dSAndroid Build Coastguard Worker              'implemented using a function scope.  This means that the '
5805*cda5da8dSAndroid Build Coastguard Worker              'following\n'
5806*cda5da8dSAndroid Build Coastguard Worker              'will fail:\n'
5807*cda5da8dSAndroid Build Coastguard Worker              '\n'
5808*cda5da8dSAndroid Build Coastguard Worker              '   class A:\n'
5809*cda5da8dSAndroid Build Coastguard Worker              '       a = 42\n'
5810*cda5da8dSAndroid Build Coastguard Worker              '       b = list(a + i for i in range(10))\n'
5811*cda5da8dSAndroid Build Coastguard Worker              '\n'
5812*cda5da8dSAndroid Build Coastguard Worker              '\n'
5813*cda5da8dSAndroid Build Coastguard Worker              'Builtins and restricted execution\n'
5814*cda5da8dSAndroid Build Coastguard Worker              '---------------------------------\n'
5815*cda5da8dSAndroid Build Coastguard Worker              '\n'
5816*cda5da8dSAndroid Build Coastguard Worker              '**CPython implementation detail:** Users should not touch\n'
5817*cda5da8dSAndroid Build Coastguard Worker              '"__builtins__"; it is strictly an implementation detail.  '
5818*cda5da8dSAndroid Build Coastguard Worker              'Users\n'
5819*cda5da8dSAndroid Build Coastguard Worker              'wanting to override values in the builtins namespace should '
5820*cda5da8dSAndroid Build Coastguard Worker              '"import"\n'
5821*cda5da8dSAndroid Build Coastguard Worker              'the "builtins" module and modify its attributes appropriately.\n'
5822*cda5da8dSAndroid Build Coastguard Worker              '\n'
5823*cda5da8dSAndroid Build Coastguard Worker              'The builtins namespace associated with the execution of a code '
5824*cda5da8dSAndroid Build Coastguard Worker              'block\n'
5825*cda5da8dSAndroid Build Coastguard Worker              'is actually found by looking up the name "__builtins__" in its '
5826*cda5da8dSAndroid Build Coastguard Worker              'global\n'
5827*cda5da8dSAndroid Build Coastguard Worker              'namespace; this should be a dictionary or a module (in the '
5828*cda5da8dSAndroid Build Coastguard Worker              'latter case\n'
5829*cda5da8dSAndroid Build Coastguard Worker              'the module’s dictionary is used).  By default, when in the '
5830*cda5da8dSAndroid Build Coastguard Worker              '"__main__"\n'
5831*cda5da8dSAndroid Build Coastguard Worker              'module, "__builtins__" is the built-in module "builtins"; when '
5832*cda5da8dSAndroid Build Coastguard Worker              'in any\n'
5833*cda5da8dSAndroid Build Coastguard Worker              'other module, "__builtins__" is an alias for the dictionary of '
5834*cda5da8dSAndroid Build Coastguard Worker              'the\n'
5835*cda5da8dSAndroid Build Coastguard Worker              '"builtins" module itself.\n'
5836*cda5da8dSAndroid Build Coastguard Worker              '\n'
5837*cda5da8dSAndroid Build Coastguard Worker              '\n'
5838*cda5da8dSAndroid Build Coastguard Worker              'Interaction with dynamic features\n'
5839*cda5da8dSAndroid Build Coastguard Worker              '---------------------------------\n'
5840*cda5da8dSAndroid Build Coastguard Worker              '\n'
5841*cda5da8dSAndroid Build Coastguard Worker              'Name resolution of free variables occurs at runtime, not at '
5842*cda5da8dSAndroid Build Coastguard Worker              'compile\n'
5843*cda5da8dSAndroid Build Coastguard Worker              'time. This means that the following code will print 42:\n'
5844*cda5da8dSAndroid Build Coastguard Worker              '\n'
5845*cda5da8dSAndroid Build Coastguard Worker              '   i = 10\n'
5846*cda5da8dSAndroid Build Coastguard Worker              '   def f():\n'
5847*cda5da8dSAndroid Build Coastguard Worker              '       print(i)\n'
5848*cda5da8dSAndroid Build Coastguard Worker              '   i = 42\n'
5849*cda5da8dSAndroid Build Coastguard Worker              '   f()\n'
5850*cda5da8dSAndroid Build Coastguard Worker              '\n'
5851*cda5da8dSAndroid Build Coastguard Worker              'The "eval()" and "exec()" functions do not have access to the '
5852*cda5da8dSAndroid Build Coastguard Worker              'full\n'
5853*cda5da8dSAndroid Build Coastguard Worker              'environment for resolving names.  Names may be resolved in the '
5854*cda5da8dSAndroid Build Coastguard Worker              'local\n'
5855*cda5da8dSAndroid Build Coastguard Worker              'and global namespaces of the caller.  Free variables are not '
5856*cda5da8dSAndroid Build Coastguard Worker              'resolved\n'
5857*cda5da8dSAndroid Build Coastguard Worker              'in the nearest enclosing namespace, but in the global '
5858*cda5da8dSAndroid Build Coastguard Worker              'namespace.  [1]\n'
5859*cda5da8dSAndroid Build Coastguard Worker              'The "exec()" and "eval()" functions have optional arguments to\n'
5860*cda5da8dSAndroid Build Coastguard Worker              'override the global and local namespace.  If only one namespace '
5861*cda5da8dSAndroid Build Coastguard Worker              'is\n'
5862*cda5da8dSAndroid Build Coastguard Worker              'specified, it is used for both.\n'
5863*cda5da8dSAndroid Build Coastguard Worker              '\n'
5864*cda5da8dSAndroid Build Coastguard Worker              '\n'
5865*cda5da8dSAndroid Build Coastguard Worker              'Exceptions\n'
5866*cda5da8dSAndroid Build Coastguard Worker              '==========\n'
5867*cda5da8dSAndroid Build Coastguard Worker              '\n'
5868*cda5da8dSAndroid Build Coastguard Worker              'Exceptions are a means of breaking out of the normal flow of '
5869*cda5da8dSAndroid Build Coastguard Worker              'control\n'
5870*cda5da8dSAndroid Build Coastguard Worker              'of a code block in order to handle errors or other exceptional\n'
5871*cda5da8dSAndroid Build Coastguard Worker              'conditions.  An exception is *raised* at the point where the '
5872*cda5da8dSAndroid Build Coastguard Worker              'error is\n'
5873*cda5da8dSAndroid Build Coastguard Worker              'detected; it may be *handled* by the surrounding code block or '
5874*cda5da8dSAndroid Build Coastguard Worker              'by any\n'
5875*cda5da8dSAndroid Build Coastguard Worker              'code block that directly or indirectly invoked the code block '
5876*cda5da8dSAndroid Build Coastguard Worker              'where\n'
5877*cda5da8dSAndroid Build Coastguard Worker              'the error occurred.\n'
5878*cda5da8dSAndroid Build Coastguard Worker              '\n'
5879*cda5da8dSAndroid Build Coastguard Worker              'The Python interpreter raises an exception when it detects a '
5880*cda5da8dSAndroid Build Coastguard Worker              'run-time\n'
5881*cda5da8dSAndroid Build Coastguard Worker              'error (such as division by zero).  A Python program can also\n'
5882*cda5da8dSAndroid Build Coastguard Worker              'explicitly raise an exception with the "raise" statement. '
5883*cda5da8dSAndroid Build Coastguard Worker              'Exception\n'
5884*cda5da8dSAndroid Build Coastguard Worker              'handlers are specified with the "try" … "except" statement.  '
5885*cda5da8dSAndroid Build Coastguard Worker              'The\n'
5886*cda5da8dSAndroid Build Coastguard Worker              '"finally" clause of such a statement can be used to specify '
5887*cda5da8dSAndroid Build Coastguard Worker              'cleanup\n'
5888*cda5da8dSAndroid Build Coastguard Worker              'code which does not handle the exception, but is executed '
5889*cda5da8dSAndroid Build Coastguard Worker              'whether an\n'
5890*cda5da8dSAndroid Build Coastguard Worker              'exception occurred or not in the preceding code.\n'
5891*cda5da8dSAndroid Build Coastguard Worker              '\n'
5892*cda5da8dSAndroid Build Coastguard Worker              'Python uses the “termination” model of error handling: an '
5893*cda5da8dSAndroid Build Coastguard Worker              'exception\n'
5894*cda5da8dSAndroid Build Coastguard Worker              'handler can find out what happened and continue execution at an '
5895*cda5da8dSAndroid Build Coastguard Worker              'outer\n'
5896*cda5da8dSAndroid Build Coastguard Worker              'level, but it cannot repair the cause of the error and retry '
5897*cda5da8dSAndroid Build Coastguard Worker              'the\n'
5898*cda5da8dSAndroid Build Coastguard Worker              'failing operation (except by re-entering the offending piece of '
5899*cda5da8dSAndroid Build Coastguard Worker              'code\n'
5900*cda5da8dSAndroid Build Coastguard Worker              'from the top).\n'
5901*cda5da8dSAndroid Build Coastguard Worker              '\n'
5902*cda5da8dSAndroid Build Coastguard Worker              'When an exception is not handled at all, the interpreter '
5903*cda5da8dSAndroid Build Coastguard Worker              'terminates\n'
5904*cda5da8dSAndroid Build Coastguard Worker              'execution of the program, or returns to its interactive main '
5905*cda5da8dSAndroid Build Coastguard Worker              'loop.  In\n'
5906*cda5da8dSAndroid Build Coastguard Worker              'either case, it prints a stack traceback, except when the '
5907*cda5da8dSAndroid Build Coastguard Worker              'exception is\n'
5908*cda5da8dSAndroid Build Coastguard Worker              '"SystemExit".\n'
5909*cda5da8dSAndroid Build Coastguard Worker              '\n'
5910*cda5da8dSAndroid Build Coastguard Worker              'Exceptions are identified by class instances.  The "except" '
5911*cda5da8dSAndroid Build Coastguard Worker              'clause is\n'
5912*cda5da8dSAndroid Build Coastguard Worker              'selected depending on the class of the instance: it must '
5913*cda5da8dSAndroid Build Coastguard Worker              'reference the\n'
5914*cda5da8dSAndroid Build Coastguard Worker              'class of the instance or a *non-virtual base class* thereof. '
5915*cda5da8dSAndroid Build Coastguard Worker              'The\n'
5916*cda5da8dSAndroid Build Coastguard Worker              'instance can be received by the handler and can carry '
5917*cda5da8dSAndroid Build Coastguard Worker              'additional\n'
5918*cda5da8dSAndroid Build Coastguard Worker              'information about the exceptional condition.\n'
5919*cda5da8dSAndroid Build Coastguard Worker              '\n'
5920*cda5da8dSAndroid Build Coastguard Worker              'Note:\n'
5921*cda5da8dSAndroid Build Coastguard Worker              '\n'
5922*cda5da8dSAndroid Build Coastguard Worker              '  Exception messages are not part of the Python API.  Their '
5923*cda5da8dSAndroid Build Coastguard Worker              'contents\n'
5924*cda5da8dSAndroid Build Coastguard Worker              '  may change from one version of Python to the next without '
5925*cda5da8dSAndroid Build Coastguard Worker              'warning\n'
5926*cda5da8dSAndroid Build Coastguard Worker              '  and should not be relied on by code which will run under '
5927*cda5da8dSAndroid Build Coastguard Worker              'multiple\n'
5928*cda5da8dSAndroid Build Coastguard Worker              '  versions of the interpreter.\n'
5929*cda5da8dSAndroid Build Coastguard Worker              '\n'
5930*cda5da8dSAndroid Build Coastguard Worker              'See also the description of the "try" statement in section The '
5931*cda5da8dSAndroid Build Coastguard Worker              'try\n'
5932*cda5da8dSAndroid Build Coastguard Worker              'statement and "raise" statement in section The raise '
5933*cda5da8dSAndroid Build Coastguard Worker              'statement.\n'
5934*cda5da8dSAndroid Build Coastguard Worker              '\n'
5935*cda5da8dSAndroid Build Coastguard Worker              '-[ Footnotes ]-\n'
5936*cda5da8dSAndroid Build Coastguard Worker              '\n'
5937*cda5da8dSAndroid Build Coastguard Worker              '[1] This limitation occurs because the code that is executed by '
5938*cda5da8dSAndroid Build Coastguard Worker              'these\n'
5939*cda5da8dSAndroid Build Coastguard Worker              '    operations is not available at the time the module is '
5940*cda5da8dSAndroid Build Coastguard Worker              'compiled.\n',
5941*cda5da8dSAndroid Build Coastguard Worker 'exprlists': 'Expression lists\n'
5942*cda5da8dSAndroid Build Coastguard Worker              '****************\n'
5943*cda5da8dSAndroid Build Coastguard Worker              '\n'
5944*cda5da8dSAndroid Build Coastguard Worker              '   expression_list    ::= expression ("," expression)* [","]\n'
5945*cda5da8dSAndroid Build Coastguard Worker              '   starred_list       ::= starred_item ("," starred_item)* '
5946*cda5da8dSAndroid Build Coastguard Worker              '[","]\n'
5947*cda5da8dSAndroid Build Coastguard Worker              '   starred_expression ::= expression | (starred_item ",")* '
5948*cda5da8dSAndroid Build Coastguard Worker              '[starred_item]\n'
5949*cda5da8dSAndroid Build Coastguard Worker              '   starred_item       ::= assignment_expression | "*" or_expr\n'
5950*cda5da8dSAndroid Build Coastguard Worker              '\n'
5951*cda5da8dSAndroid Build Coastguard Worker              'Except when part of a list or set display, an expression list\n'
5952*cda5da8dSAndroid Build Coastguard Worker              'containing at least one comma yields a tuple.  The length of '
5953*cda5da8dSAndroid Build Coastguard Worker              'the tuple\n'
5954*cda5da8dSAndroid Build Coastguard Worker              'is the number of expressions in the list.  The expressions are\n'
5955*cda5da8dSAndroid Build Coastguard Worker              'evaluated from left to right.\n'
5956*cda5da8dSAndroid Build Coastguard Worker              '\n'
5957*cda5da8dSAndroid Build Coastguard Worker              'An asterisk "*" denotes *iterable unpacking*.  Its operand must '
5958*cda5da8dSAndroid Build Coastguard Worker              'be an\n'
5959*cda5da8dSAndroid Build Coastguard Worker              '*iterable*.  The iterable is expanded into a sequence of items, '
5960*cda5da8dSAndroid Build Coastguard Worker              'which\n'
5961*cda5da8dSAndroid Build Coastguard Worker              'are included in the new tuple, list, or set, at the site of '
5962*cda5da8dSAndroid Build Coastguard Worker              'the\n'
5963*cda5da8dSAndroid Build Coastguard Worker              'unpacking.\n'
5964*cda5da8dSAndroid Build Coastguard Worker              '\n'
5965*cda5da8dSAndroid Build Coastguard Worker              'New in version 3.5: Iterable unpacking in expression lists, '
5966*cda5da8dSAndroid Build Coastguard Worker              'originally\n'
5967*cda5da8dSAndroid Build Coastguard Worker              'proposed by **PEP 448**.\n'
5968*cda5da8dSAndroid Build Coastguard Worker              '\n'
5969*cda5da8dSAndroid Build Coastguard Worker              'The trailing comma is required only to create a single tuple '
5970*cda5da8dSAndroid Build Coastguard Worker              '(a.k.a. a\n'
5971*cda5da8dSAndroid Build Coastguard Worker              '*singleton*); it is optional in all other cases.  A single '
5972*cda5da8dSAndroid Build Coastguard Worker              'expression\n'
5973*cda5da8dSAndroid Build Coastguard Worker              'without a trailing comma doesn’t create a tuple, but rather '
5974*cda5da8dSAndroid Build Coastguard Worker              'yields the\n'
5975*cda5da8dSAndroid Build Coastguard Worker              'value of that expression. (To create an empty tuple, use an '
5976*cda5da8dSAndroid Build Coastguard Worker              'empty pair\n'
5977*cda5da8dSAndroid Build Coastguard Worker              'of parentheses: "()".)\n',
5978*cda5da8dSAndroid Build Coastguard Worker 'floating': 'Floating point literals\n'
5979*cda5da8dSAndroid Build Coastguard Worker             '***********************\n'
5980*cda5da8dSAndroid Build Coastguard Worker             '\n'
5981*cda5da8dSAndroid Build Coastguard Worker             'Floating point literals are described by the following lexical\n'
5982*cda5da8dSAndroid Build Coastguard Worker             'definitions:\n'
5983*cda5da8dSAndroid Build Coastguard Worker             '\n'
5984*cda5da8dSAndroid Build Coastguard Worker             '   floatnumber   ::= pointfloat | exponentfloat\n'
5985*cda5da8dSAndroid Build Coastguard Worker             '   pointfloat    ::= [digitpart] fraction | digitpart "."\n'
5986*cda5da8dSAndroid Build Coastguard Worker             '   exponentfloat ::= (digitpart | pointfloat) exponent\n'
5987*cda5da8dSAndroid Build Coastguard Worker             '   digitpart     ::= digit (["_"] digit)*\n'
5988*cda5da8dSAndroid Build Coastguard Worker             '   fraction      ::= "." digitpart\n'
5989*cda5da8dSAndroid Build Coastguard Worker             '   exponent      ::= ("e" | "E") ["+" | "-"] digitpart\n'
5990*cda5da8dSAndroid Build Coastguard Worker             '\n'
5991*cda5da8dSAndroid Build Coastguard Worker             'Note that the integer and exponent parts are always interpreted '
5992*cda5da8dSAndroid Build Coastguard Worker             'using\n'
5993*cda5da8dSAndroid Build Coastguard Worker             'radix 10. For example, "077e010" is legal, and denotes the same '
5994*cda5da8dSAndroid Build Coastguard Worker             'number\n'
5995*cda5da8dSAndroid Build Coastguard Worker             'as "77e10". The allowed range of floating point literals is\n'
5996*cda5da8dSAndroid Build Coastguard Worker             'implementation-dependent.  As in integer literals, underscores '
5997*cda5da8dSAndroid Build Coastguard Worker             'are\n'
5998*cda5da8dSAndroid Build Coastguard Worker             'supported for digit grouping.\n'
5999*cda5da8dSAndroid Build Coastguard Worker             '\n'
6000*cda5da8dSAndroid Build Coastguard Worker             'Some examples of floating point literals:\n'
6001*cda5da8dSAndroid Build Coastguard Worker             '\n'
6002*cda5da8dSAndroid Build Coastguard Worker             '   3.14    10.    .001    1e100    3.14e-10    0e0    '
6003*cda5da8dSAndroid Build Coastguard Worker             '3.14_15_93\n'
6004*cda5da8dSAndroid Build Coastguard Worker             '\n'
6005*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.6: Underscores are now allowed for '
6006*cda5da8dSAndroid Build Coastguard Worker             'grouping\n'
6007*cda5da8dSAndroid Build Coastguard Worker             'purposes in literals.\n',
6008*cda5da8dSAndroid Build Coastguard Worker 'for': 'The "for" statement\n'
6009*cda5da8dSAndroid Build Coastguard Worker        '*******************\n'
6010*cda5da8dSAndroid Build Coastguard Worker        '\n'
6011*cda5da8dSAndroid Build Coastguard Worker        'The "for" statement is used to iterate over the elements of a '
6012*cda5da8dSAndroid Build Coastguard Worker        'sequence\n'
6013*cda5da8dSAndroid Build Coastguard Worker        '(such as a string, tuple or list) or other iterable object:\n'
6014*cda5da8dSAndroid Build Coastguard Worker        '\n'
6015*cda5da8dSAndroid Build Coastguard Worker        '   for_stmt ::= "for" target_list "in" starred_list ":" suite\n'
6016*cda5da8dSAndroid Build Coastguard Worker        '                ["else" ":" suite]\n'
6017*cda5da8dSAndroid Build Coastguard Worker        '\n'
6018*cda5da8dSAndroid Build Coastguard Worker        'The "starred_list" expression is evaluated once; it should yield an\n'
6019*cda5da8dSAndroid Build Coastguard Worker        '*iterable* object.  An *iterator* is created for that iterable. The\n'
6020*cda5da8dSAndroid Build Coastguard Worker        'first item provided by the iterator is then assigned to the target\n'
6021*cda5da8dSAndroid Build Coastguard Worker        'list using the standard rules for assignments (see Assignment\n'
6022*cda5da8dSAndroid Build Coastguard Worker        'statements), and the suite is executed.  This repeats for each item\n'
6023*cda5da8dSAndroid Build Coastguard Worker        'provided by the iterator.  When the iterator is exhausted, the suite\n'
6024*cda5da8dSAndroid Build Coastguard Worker        'in the "else" clause, if present, is executed, and the loop\n'
6025*cda5da8dSAndroid Build Coastguard Worker        'terminates.\n'
6026*cda5da8dSAndroid Build Coastguard Worker        '\n'
6027*cda5da8dSAndroid Build Coastguard Worker        'A "break" statement executed in the first suite terminates the loop\n'
6028*cda5da8dSAndroid Build Coastguard Worker        'without executing the "else" clause’s suite.  A "continue" statement\n'
6029*cda5da8dSAndroid Build Coastguard Worker        'executed in the first suite skips the rest of the suite and '
6030*cda5da8dSAndroid Build Coastguard Worker        'continues\n'
6031*cda5da8dSAndroid Build Coastguard Worker        'with the next item, or with the "else" clause if there is no next\n'
6032*cda5da8dSAndroid Build Coastguard Worker        'item.\n'
6033*cda5da8dSAndroid Build Coastguard Worker        '\n'
6034*cda5da8dSAndroid Build Coastguard Worker        'The for-loop makes assignments to the variables in the target list.\n'
6035*cda5da8dSAndroid Build Coastguard Worker        'This overwrites all previous assignments to those variables '
6036*cda5da8dSAndroid Build Coastguard Worker        'including\n'
6037*cda5da8dSAndroid Build Coastguard Worker        'those made in the suite of the for-loop:\n'
6038*cda5da8dSAndroid Build Coastguard Worker        '\n'
6039*cda5da8dSAndroid Build Coastguard Worker        '   for i in range(10):\n'
6040*cda5da8dSAndroid Build Coastguard Worker        '       print(i)\n'
6041*cda5da8dSAndroid Build Coastguard Worker        '       i = 5             # this will not affect the for-loop\n'
6042*cda5da8dSAndroid Build Coastguard Worker        '                         # because i will be overwritten with the '
6043*cda5da8dSAndroid Build Coastguard Worker        'next\n'
6044*cda5da8dSAndroid Build Coastguard Worker        '                         # index in the range\n'
6045*cda5da8dSAndroid Build Coastguard Worker        '\n'
6046*cda5da8dSAndroid Build Coastguard Worker        'Names in the target list are not deleted when the loop is finished,\n'
6047*cda5da8dSAndroid Build Coastguard Worker        'but if the sequence is empty, they will not have been assigned to at\n'
6048*cda5da8dSAndroid Build Coastguard Worker        'all by the loop.  Hint: the built-in type "range()" represents\n'
6049*cda5da8dSAndroid Build Coastguard Worker        'immutable arithmetic sequences of integers. For instance, iterating\n'
6050*cda5da8dSAndroid Build Coastguard Worker        '"range(3)" successively yields 0, 1, and then 2.\n'
6051*cda5da8dSAndroid Build Coastguard Worker        '\n'
6052*cda5da8dSAndroid Build Coastguard Worker        'Changed in version 3.11: Starred elements are now allowed in the\n'
6053*cda5da8dSAndroid Build Coastguard Worker        'expression list.\n',
6054*cda5da8dSAndroid Build Coastguard Worker 'formatstrings': 'Format String Syntax\n'
6055*cda5da8dSAndroid Build Coastguard Worker                  '********************\n'
6056*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6057*cda5da8dSAndroid Build Coastguard Worker                  'The "str.format()" method and the "Formatter" class share '
6058*cda5da8dSAndroid Build Coastguard Worker                  'the same\n'
6059*cda5da8dSAndroid Build Coastguard Worker                  'syntax for format strings (although in the case of '
6060*cda5da8dSAndroid Build Coastguard Worker                  '"Formatter",\n'
6061*cda5da8dSAndroid Build Coastguard Worker                  'subclasses can define their own format string syntax).  The '
6062*cda5da8dSAndroid Build Coastguard Worker                  'syntax is\n'
6063*cda5da8dSAndroid Build Coastguard Worker                  'related to that of formatted string literals, but it is '
6064*cda5da8dSAndroid Build Coastguard Worker                  'less\n'
6065*cda5da8dSAndroid Build Coastguard Worker                  'sophisticated and, in particular, does not support '
6066*cda5da8dSAndroid Build Coastguard Worker                  'arbitrary\n'
6067*cda5da8dSAndroid Build Coastguard Worker                  'expressions.\n'
6068*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6069*cda5da8dSAndroid Build Coastguard Worker                  'Format strings contain “replacement fields” surrounded by '
6070*cda5da8dSAndroid Build Coastguard Worker                  'curly braces\n'
6071*cda5da8dSAndroid Build Coastguard Worker                  '"{}". Anything that is not contained in braces is '
6072*cda5da8dSAndroid Build Coastguard Worker                  'considered literal\n'
6073*cda5da8dSAndroid Build Coastguard Worker                  'text, which is copied unchanged to the output.  If you need '
6074*cda5da8dSAndroid Build Coastguard Worker                  'to include\n'
6075*cda5da8dSAndroid Build Coastguard Worker                  'a brace character in the literal text, it can be escaped by '
6076*cda5da8dSAndroid Build Coastguard Worker                  'doubling:\n'
6077*cda5da8dSAndroid Build Coastguard Worker                  '"{{" and "}}".\n'
6078*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6079*cda5da8dSAndroid Build Coastguard Worker                  'The grammar for a replacement field is as follows:\n'
6080*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6081*cda5da8dSAndroid Build Coastguard Worker                  '      replacement_field ::= "{" [field_name] ["!" '
6082*cda5da8dSAndroid Build Coastguard Worker                  'conversion] [":" format_spec] "}"\n'
6083*cda5da8dSAndroid Build Coastguard Worker                  '      field_name        ::= arg_name ("." attribute_name | '
6084*cda5da8dSAndroid Build Coastguard Worker                  '"[" element_index "]")*\n'
6085*cda5da8dSAndroid Build Coastguard Worker                  '      arg_name          ::= [identifier | digit+]\n'
6086*cda5da8dSAndroid Build Coastguard Worker                  '      attribute_name    ::= identifier\n'
6087*cda5da8dSAndroid Build Coastguard Worker                  '      element_index     ::= digit+ | index_string\n'
6088*cda5da8dSAndroid Build Coastguard Worker                  '      index_string      ::= <any source character except '
6089*cda5da8dSAndroid Build Coastguard Worker                  '"]"> +\n'
6090*cda5da8dSAndroid Build Coastguard Worker                  '      conversion        ::= "r" | "s" | "a"\n'
6091*cda5da8dSAndroid Build Coastguard Worker                  '      format_spec       ::= <described in the next '
6092*cda5da8dSAndroid Build Coastguard Worker                  'section>\n'
6093*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6094*cda5da8dSAndroid Build Coastguard Worker                  'In less formal terms, the replacement field can start with '
6095*cda5da8dSAndroid Build Coastguard Worker                  'a\n'
6096*cda5da8dSAndroid Build Coastguard Worker                  '*field_name* that specifies the object whose value is to be '
6097*cda5da8dSAndroid Build Coastguard Worker                  'formatted\n'
6098*cda5da8dSAndroid Build Coastguard Worker                  'and inserted into the output instead of the replacement '
6099*cda5da8dSAndroid Build Coastguard Worker                  'field. The\n'
6100*cda5da8dSAndroid Build Coastguard Worker                  '*field_name* is optionally followed by a  *conversion* '
6101*cda5da8dSAndroid Build Coastguard Worker                  'field, which is\n'
6102*cda5da8dSAndroid Build Coastguard Worker                  'preceded by an exclamation point "\'!\'", and a '
6103*cda5da8dSAndroid Build Coastguard Worker                  '*format_spec*, which is\n'
6104*cda5da8dSAndroid Build Coastguard Worker                  'preceded by a colon "\':\'".  These specify a non-default '
6105*cda5da8dSAndroid Build Coastguard Worker                  'format for the\n'
6106*cda5da8dSAndroid Build Coastguard Worker                  'replacement value.\n'
6107*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6108*cda5da8dSAndroid Build Coastguard Worker                  'See also the Format Specification Mini-Language section.\n'
6109*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6110*cda5da8dSAndroid Build Coastguard Worker                  'The *field_name* itself begins with an *arg_name* that is '
6111*cda5da8dSAndroid Build Coastguard Worker                  'either a\n'
6112*cda5da8dSAndroid Build Coastguard Worker                  'number or a keyword.  If it’s a number, it refers to a '
6113*cda5da8dSAndroid Build Coastguard Worker                  'positional\n'
6114*cda5da8dSAndroid Build Coastguard Worker                  'argument, and if it’s a keyword, it refers to a named '
6115*cda5da8dSAndroid Build Coastguard Worker                  'keyword\n'
6116*cda5da8dSAndroid Build Coastguard Worker                  'argument.  If the numerical arg_names in a format string '
6117*cda5da8dSAndroid Build Coastguard Worker                  'are 0, 1, 2,\n'
6118*cda5da8dSAndroid Build Coastguard Worker                  '… in sequence, they can all be omitted (not just some) and '
6119*cda5da8dSAndroid Build Coastguard Worker                  'the numbers\n'
6120*cda5da8dSAndroid Build Coastguard Worker                  '0, 1, 2, … will be automatically inserted in that order. '
6121*cda5da8dSAndroid Build Coastguard Worker                  'Because\n'
6122*cda5da8dSAndroid Build Coastguard Worker                  '*arg_name* is not quote-delimited, it is not possible to '
6123*cda5da8dSAndroid Build Coastguard Worker                  'specify\n'
6124*cda5da8dSAndroid Build Coastguard Worker                  'arbitrary dictionary keys (e.g., the strings "\'10\'" or '
6125*cda5da8dSAndroid Build Coastguard Worker                  '"\':-]\'") within\n'
6126*cda5da8dSAndroid Build Coastguard Worker                  'a format string. The *arg_name* can be followed by any '
6127*cda5da8dSAndroid Build Coastguard Worker                  'number of index\n'
6128*cda5da8dSAndroid Build Coastguard Worker                  'or attribute expressions. An expression of the form '
6129*cda5da8dSAndroid Build Coastguard Worker                  '"\'.name\'" selects\n'
6130*cda5da8dSAndroid Build Coastguard Worker                  'the named attribute using "getattr()", while an expression '
6131*cda5da8dSAndroid Build Coastguard Worker                  'of the form\n'
6132*cda5da8dSAndroid Build Coastguard Worker                  '"\'[index]\'" does an index lookup using "__getitem__()".\n'
6133*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6134*cda5da8dSAndroid Build Coastguard Worker                  'Changed in version 3.1: The positional argument specifiers '
6135*cda5da8dSAndroid Build Coastguard Worker                  'can be\n'
6136*cda5da8dSAndroid Build Coastguard Worker                  'omitted for "str.format()", so "\'{} {}\'.format(a, b)" is '
6137*cda5da8dSAndroid Build Coastguard Worker                  'equivalent to\n'
6138*cda5da8dSAndroid Build Coastguard Worker                  '"\'{0} {1}\'.format(a, b)".\n'
6139*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6140*cda5da8dSAndroid Build Coastguard Worker                  'Changed in version 3.4: The positional argument specifiers '
6141*cda5da8dSAndroid Build Coastguard Worker                  'can be\n'
6142*cda5da8dSAndroid Build Coastguard Worker                  'omitted for "Formatter".\n'
6143*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6144*cda5da8dSAndroid Build Coastguard Worker                  'Some simple format string examples:\n'
6145*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6146*cda5da8dSAndroid Build Coastguard Worker                  '   "First, thou shalt count to {0}"  # References first '
6147*cda5da8dSAndroid Build Coastguard Worker                  'positional argument\n'
6148*cda5da8dSAndroid Build Coastguard Worker                  '   "Bring me a {}"                   # Implicitly '
6149*cda5da8dSAndroid Build Coastguard Worker                  'references the first positional argument\n'
6150*cda5da8dSAndroid Build Coastguard Worker                  '   "From {} to {}"                   # Same as "From {0} to '
6151*cda5da8dSAndroid Build Coastguard Worker                  '{1}"\n'
6152*cda5da8dSAndroid Build Coastguard Worker                  '   "My quest is {name}"              # References keyword '
6153*cda5da8dSAndroid Build Coastguard Worker                  "argument 'name'\n"
6154*cda5da8dSAndroid Build Coastguard Worker                  '   "Weight in tons {0.weight}"       # \'weight\' attribute '
6155*cda5da8dSAndroid Build Coastguard Worker                  'of first positional arg\n'
6156*cda5da8dSAndroid Build Coastguard Worker                  '   "Units destroyed: {players[0]}"   # First element of '
6157*cda5da8dSAndroid Build Coastguard Worker                  "keyword argument 'players'.\n"
6158*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6159*cda5da8dSAndroid Build Coastguard Worker                  'The *conversion* field causes a type coercion before '
6160*cda5da8dSAndroid Build Coastguard Worker                  'formatting.\n'
6161*cda5da8dSAndroid Build Coastguard Worker                  'Normally, the job of formatting a value is done by the '
6162*cda5da8dSAndroid Build Coastguard Worker                  '"__format__()"\n'
6163*cda5da8dSAndroid Build Coastguard Worker                  'method of the value itself.  However, in some cases it is '
6164*cda5da8dSAndroid Build Coastguard Worker                  'desirable to\n'
6165*cda5da8dSAndroid Build Coastguard Worker                  'force a type to be formatted as a string, overriding its '
6166*cda5da8dSAndroid Build Coastguard Worker                  'own\n'
6167*cda5da8dSAndroid Build Coastguard Worker                  'definition of formatting.  By converting the value to a '
6168*cda5da8dSAndroid Build Coastguard Worker                  'string before\n'
6169*cda5da8dSAndroid Build Coastguard Worker                  'calling "__format__()", the normal formatting logic is '
6170*cda5da8dSAndroid Build Coastguard Worker                  'bypassed.\n'
6171*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6172*cda5da8dSAndroid Build Coastguard Worker                  'Three conversion flags are currently supported: "\'!s\'" '
6173*cda5da8dSAndroid Build Coastguard Worker                  'which calls\n'
6174*cda5da8dSAndroid Build Coastguard Worker                  '"str()" on the value, "\'!r\'" which calls "repr()" and '
6175*cda5da8dSAndroid Build Coastguard Worker                  '"\'!a\'" which\n'
6176*cda5da8dSAndroid Build Coastguard Worker                  'calls "ascii()".\n'
6177*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6178*cda5da8dSAndroid Build Coastguard Worker                  'Some examples:\n'
6179*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6180*cda5da8dSAndroid Build Coastguard Worker                  '   "Harold\'s a clever {0!s}"        # Calls str() on the '
6181*cda5da8dSAndroid Build Coastguard Worker                  'argument first\n'
6182*cda5da8dSAndroid Build Coastguard Worker                  '   "Bring out the holy {name!r}"    # Calls repr() on the '
6183*cda5da8dSAndroid Build Coastguard Worker                  'argument first\n'
6184*cda5da8dSAndroid Build Coastguard Worker                  '   "More {!a}"                      # Calls ascii() on the '
6185*cda5da8dSAndroid Build Coastguard Worker                  'argument first\n'
6186*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6187*cda5da8dSAndroid Build Coastguard Worker                  'The *format_spec* field contains a specification of how the '
6188*cda5da8dSAndroid Build Coastguard Worker                  'value\n'
6189*cda5da8dSAndroid Build Coastguard Worker                  'should be presented, including such details as field width, '
6190*cda5da8dSAndroid Build Coastguard Worker                  'alignment,\n'
6191*cda5da8dSAndroid Build Coastguard Worker                  'padding, decimal precision and so on.  Each value type can '
6192*cda5da8dSAndroid Build Coastguard Worker                  'define its\n'
6193*cda5da8dSAndroid Build Coastguard Worker                  'own “formatting mini-language” or interpretation of the '
6194*cda5da8dSAndroid Build Coastguard Worker                  '*format_spec*.\n'
6195*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6196*cda5da8dSAndroid Build Coastguard Worker                  'Most built-in types support a common formatting '
6197*cda5da8dSAndroid Build Coastguard Worker                  'mini-language, which\n'
6198*cda5da8dSAndroid Build Coastguard Worker                  'is described in the next section.\n'
6199*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6200*cda5da8dSAndroid Build Coastguard Worker                  'A *format_spec* field can also include nested replacement '
6201*cda5da8dSAndroid Build Coastguard Worker                  'fields\n'
6202*cda5da8dSAndroid Build Coastguard Worker                  'within it. These nested replacement fields may contain a '
6203*cda5da8dSAndroid Build Coastguard Worker                  'field name,\n'
6204*cda5da8dSAndroid Build Coastguard Worker                  'conversion flag and format specification, but deeper '
6205*cda5da8dSAndroid Build Coastguard Worker                  'nesting is not\n'
6206*cda5da8dSAndroid Build Coastguard Worker                  'allowed.  The replacement fields within the format_spec '
6207*cda5da8dSAndroid Build Coastguard Worker                  'are\n'
6208*cda5da8dSAndroid Build Coastguard Worker                  'substituted before the *format_spec* string is interpreted. '
6209*cda5da8dSAndroid Build Coastguard Worker                  'This\n'
6210*cda5da8dSAndroid Build Coastguard Worker                  'allows the formatting of a value to be dynamically '
6211*cda5da8dSAndroid Build Coastguard Worker                  'specified.\n'
6212*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6213*cda5da8dSAndroid Build Coastguard Worker                  'See the Format examples section for some examples.\n'
6214*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6215*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6216*cda5da8dSAndroid Build Coastguard Worker                  'Format Specification Mini-Language\n'
6217*cda5da8dSAndroid Build Coastguard Worker                  '==================================\n'
6218*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6219*cda5da8dSAndroid Build Coastguard Worker                  '“Format specifications” are used within replacement fields '
6220*cda5da8dSAndroid Build Coastguard Worker                  'contained\n'
6221*cda5da8dSAndroid Build Coastguard Worker                  'within a format string to define how individual values are '
6222*cda5da8dSAndroid Build Coastguard Worker                  'presented\n'
6223*cda5da8dSAndroid Build Coastguard Worker                  '(see Format String Syntax and Formatted string literals). '
6224*cda5da8dSAndroid Build Coastguard Worker                  'They can\n'
6225*cda5da8dSAndroid Build Coastguard Worker                  'also be passed directly to the built-in "format()" '
6226*cda5da8dSAndroid Build Coastguard Worker                  'function.  Each\n'
6227*cda5da8dSAndroid Build Coastguard Worker                  'formattable type may define how the format specification is '
6228*cda5da8dSAndroid Build Coastguard Worker                  'to be\n'
6229*cda5da8dSAndroid Build Coastguard Worker                  'interpreted.\n'
6230*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6231*cda5da8dSAndroid Build Coastguard Worker                  'Most built-in types implement the following options for '
6232*cda5da8dSAndroid Build Coastguard Worker                  'format\n'
6233*cda5da8dSAndroid Build Coastguard Worker                  'specifications, although some of the formatting options are '
6234*cda5da8dSAndroid Build Coastguard Worker                  'only\n'
6235*cda5da8dSAndroid Build Coastguard Worker                  'supported by the numeric types.\n'
6236*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6237*cda5da8dSAndroid Build Coastguard Worker                  'A general convention is that an empty format specification '
6238*cda5da8dSAndroid Build Coastguard Worker                  'produces\n'
6239*cda5da8dSAndroid Build Coastguard Worker                  'the same result as if you had called "str()" on the value. '
6240*cda5da8dSAndroid Build Coastguard Worker                  'A non-empty\n'
6241*cda5da8dSAndroid Build Coastguard Worker                  'format specification typically modifies the result.\n'
6242*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6243*cda5da8dSAndroid Build Coastguard Worker                  'The general form of a *standard format specifier* is:\n'
6244*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6245*cda5da8dSAndroid Build Coastguard Worker                  '   format_spec     ::= '
6246*cda5da8dSAndroid Build Coastguard Worker                  '[[fill]align][sign]["z"]["#"]["0"][width][grouping_option]["." '
6247*cda5da8dSAndroid Build Coastguard Worker                  'precision][type]\n'
6248*cda5da8dSAndroid Build Coastguard Worker                  '   fill            ::= <any character>\n'
6249*cda5da8dSAndroid Build Coastguard Worker                  '   align           ::= "<" | ">" | "=" | "^"\n'
6250*cda5da8dSAndroid Build Coastguard Worker                  '   sign            ::= "+" | "-" | " "\n'
6251*cda5da8dSAndroid Build Coastguard Worker                  '   width           ::= digit+\n'
6252*cda5da8dSAndroid Build Coastguard Worker                  '   grouping_option ::= "_" | ","\n'
6253*cda5da8dSAndroid Build Coastguard Worker                  '   precision       ::= digit+\n'
6254*cda5da8dSAndroid Build Coastguard Worker                  '   type            ::= "b" | "c" | "d" | "e" | "E" | "f" | '
6255*cda5da8dSAndroid Build Coastguard Worker                  '"F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"\n'
6256*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6257*cda5da8dSAndroid Build Coastguard Worker                  'If a valid *align* value is specified, it can be preceded '
6258*cda5da8dSAndroid Build Coastguard Worker                  'by a *fill*\n'
6259*cda5da8dSAndroid Build Coastguard Worker                  'character that can be any character and defaults to a space '
6260*cda5da8dSAndroid Build Coastguard Worker                  'if\n'
6261*cda5da8dSAndroid Build Coastguard Worker                  'omitted. It is not possible to use a literal curly brace '
6262*cda5da8dSAndroid Build Coastguard Worker                  '(”"{"” or\n'
6263*cda5da8dSAndroid Build Coastguard Worker                  '“"}"”) as the *fill* character in a formatted string '
6264*cda5da8dSAndroid Build Coastguard Worker                  'literal or when\n'
6265*cda5da8dSAndroid Build Coastguard Worker                  'using the "str.format()" method.  However, it is possible '
6266*cda5da8dSAndroid Build Coastguard Worker                  'to insert a\n'
6267*cda5da8dSAndroid Build Coastguard Worker                  'curly brace with a nested replacement field.  This '
6268*cda5da8dSAndroid Build Coastguard Worker                  'limitation doesn’t\n'
6269*cda5da8dSAndroid Build Coastguard Worker                  'affect the "format()" function.\n'
6270*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6271*cda5da8dSAndroid Build Coastguard Worker                  'The meaning of the various alignment options is as '
6272*cda5da8dSAndroid Build Coastguard Worker                  'follows:\n'
6273*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6274*cda5da8dSAndroid Build Coastguard Worker                  '   '
6275*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6276*cda5da8dSAndroid Build Coastguard Worker                  '   | Option    | '
6277*cda5da8dSAndroid Build Coastguard Worker                  'Meaning                                                    '
6278*cda5da8dSAndroid Build Coastguard Worker                  '|\n'
6279*cda5da8dSAndroid Build Coastguard Worker                  '   '
6280*cda5da8dSAndroid Build Coastguard Worker                  '|===========|============================================================|\n'
6281*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'<\'"     | Forces the field to be left-aligned '
6282*cda5da8dSAndroid Build Coastguard Worker                  'within the available   |\n'
6283*cda5da8dSAndroid Build Coastguard Worker                  '   |           | space (this is the default for most '
6284*cda5da8dSAndroid Build Coastguard Worker                  'objects).              |\n'
6285*cda5da8dSAndroid Build Coastguard Worker                  '   '
6286*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6287*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'>\'"     | Forces the field to be right-aligned '
6288*cda5da8dSAndroid Build Coastguard Worker                  'within the available  |\n'
6289*cda5da8dSAndroid Build Coastguard Worker                  '   |           | space (this is the default for '
6290*cda5da8dSAndroid Build Coastguard Worker                  'numbers).                   |\n'
6291*cda5da8dSAndroid Build Coastguard Worker                  '   '
6292*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6293*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'=\'"     | Forces the padding to be placed after '
6294*cda5da8dSAndroid Build Coastguard Worker                  'the sign (if any)    |\n'
6295*cda5da8dSAndroid Build Coastguard Worker                  '   |           | but before the digits.  This is used for '
6296*cda5da8dSAndroid Build Coastguard Worker                  'printing fields   |\n'
6297*cda5da8dSAndroid Build Coastguard Worker                  '   |           | in the form ‘+000000120’. This alignment '
6298*cda5da8dSAndroid Build Coastguard Worker                  'option is only    |\n'
6299*cda5da8dSAndroid Build Coastguard Worker                  '   |           | valid for numeric types.  It becomes the '
6300*cda5da8dSAndroid Build Coastguard Worker                  'default for       |\n'
6301*cda5da8dSAndroid Build Coastguard Worker                  '   |           | numbers when ‘0’ immediately precedes the '
6302*cda5da8dSAndroid Build Coastguard Worker                  'field width.     |\n'
6303*cda5da8dSAndroid Build Coastguard Worker                  '   '
6304*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6305*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'^\'"     | Forces the field to be centered within '
6306*cda5da8dSAndroid Build Coastguard Worker                  'the available       |\n'
6307*cda5da8dSAndroid Build Coastguard Worker                  '   |           | '
6308*cda5da8dSAndroid Build Coastguard Worker                  'space.                                                     '
6309*cda5da8dSAndroid Build Coastguard Worker                  '|\n'
6310*cda5da8dSAndroid Build Coastguard Worker                  '   '
6311*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6312*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6313*cda5da8dSAndroid Build Coastguard Worker                  'Note that unless a minimum field width is defined, the '
6314*cda5da8dSAndroid Build Coastguard Worker                  'field width\n'
6315*cda5da8dSAndroid Build Coastguard Worker                  'will always be the same size as the data to fill it, so '
6316*cda5da8dSAndroid Build Coastguard Worker                  'that the\n'
6317*cda5da8dSAndroid Build Coastguard Worker                  'alignment option has no meaning in this case.\n'
6318*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6319*cda5da8dSAndroid Build Coastguard Worker                  'The *sign* option is only valid for number types, and can '
6320*cda5da8dSAndroid Build Coastguard Worker                  'be one of\n'
6321*cda5da8dSAndroid Build Coastguard Worker                  'the following:\n'
6322*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6323*cda5da8dSAndroid Build Coastguard Worker                  '   '
6324*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6325*cda5da8dSAndroid Build Coastguard Worker                  '   | Option    | '
6326*cda5da8dSAndroid Build Coastguard Worker                  'Meaning                                                    '
6327*cda5da8dSAndroid Build Coastguard Worker                  '|\n'
6328*cda5da8dSAndroid Build Coastguard Worker                  '   '
6329*cda5da8dSAndroid Build Coastguard Worker                  '|===========|============================================================|\n'
6330*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'+\'"     | indicates that a sign should be used for '
6331*cda5da8dSAndroid Build Coastguard Worker                  'both positive as  |\n'
6332*cda5da8dSAndroid Build Coastguard Worker                  '   |           | well as negative '
6333*cda5da8dSAndroid Build Coastguard Worker                  'numbers.                                  |\n'
6334*cda5da8dSAndroid Build Coastguard Worker                  '   '
6335*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6336*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'-\'"     | indicates that a sign should be used '
6337*cda5da8dSAndroid Build Coastguard Worker                  'only for negative     |\n'
6338*cda5da8dSAndroid Build Coastguard Worker                  '   |           | numbers (this is the default '
6339*cda5da8dSAndroid Build Coastguard Worker                  'behavior).                    |\n'
6340*cda5da8dSAndroid Build Coastguard Worker                  '   '
6341*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6342*cda5da8dSAndroid Build Coastguard Worker                  '   | space     | indicates that a leading space should be '
6343*cda5da8dSAndroid Build Coastguard Worker                  'used on positive  |\n'
6344*cda5da8dSAndroid Build Coastguard Worker                  '   |           | numbers, and a minus sign on negative '
6345*cda5da8dSAndroid Build Coastguard Worker                  'numbers.             |\n'
6346*cda5da8dSAndroid Build Coastguard Worker                  '   '
6347*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6348*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6349*cda5da8dSAndroid Build Coastguard Worker                  'The "\'z\'" option coerces negative zero floating-point '
6350*cda5da8dSAndroid Build Coastguard Worker                  'values to\n'
6351*cda5da8dSAndroid Build Coastguard Worker                  'positive zero after rounding to the format precision.  This '
6352*cda5da8dSAndroid Build Coastguard Worker                  'option is\n'
6353*cda5da8dSAndroid Build Coastguard Worker                  'only valid for floating-point presentation types.\n'
6354*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6355*cda5da8dSAndroid Build Coastguard Worker                  'Changed in version 3.11: Added the "\'z\'" option (see also '
6356*cda5da8dSAndroid Build Coastguard Worker                  '**PEP\n'
6357*cda5da8dSAndroid Build Coastguard Worker                  '682**).\n'
6358*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6359*cda5da8dSAndroid Build Coastguard Worker                  'The "\'#\'" option causes the “alternate form” to be used '
6360*cda5da8dSAndroid Build Coastguard Worker                  'for the\n'
6361*cda5da8dSAndroid Build Coastguard Worker                  'conversion.  The alternate form is defined differently for '
6362*cda5da8dSAndroid Build Coastguard Worker                  'different\n'
6363*cda5da8dSAndroid Build Coastguard Worker                  'types.  This option is only valid for integer, float and '
6364*cda5da8dSAndroid Build Coastguard Worker                  'complex\n'
6365*cda5da8dSAndroid Build Coastguard Worker                  'types. For integers, when binary, octal, or hexadecimal '
6366*cda5da8dSAndroid Build Coastguard Worker                  'output is\n'
6367*cda5da8dSAndroid Build Coastguard Worker                  'used, this option adds the respective prefix "\'0b\'", '
6368*cda5da8dSAndroid Build Coastguard Worker                  '"\'0o\'", "\'0x\'",\n'
6369*cda5da8dSAndroid Build Coastguard Worker                  'or "\'0X\'" to the output value. For float and complex the '
6370*cda5da8dSAndroid Build Coastguard Worker                  'alternate\n'
6371*cda5da8dSAndroid Build Coastguard Worker                  'form causes the result of the conversion to always contain '
6372*cda5da8dSAndroid Build Coastguard Worker                  'a decimal-\n'
6373*cda5da8dSAndroid Build Coastguard Worker                  'point character, even if no digits follow it. Normally, a '
6374*cda5da8dSAndroid Build Coastguard Worker                  'decimal-\n'
6375*cda5da8dSAndroid Build Coastguard Worker                  'point character appears in the result of these conversions '
6376*cda5da8dSAndroid Build Coastguard Worker                  'only if a\n'
6377*cda5da8dSAndroid Build Coastguard Worker                  'digit follows it. In addition, for "\'g\'" and "\'G\'" '
6378*cda5da8dSAndroid Build Coastguard Worker                  'conversions,\n'
6379*cda5da8dSAndroid Build Coastguard Worker                  'trailing zeros are not removed from the result.\n'
6380*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6381*cda5da8dSAndroid Build Coastguard Worker                  'The "\',\'" option signals the use of a comma for a '
6382*cda5da8dSAndroid Build Coastguard Worker                  'thousands separator.\n'
6383*cda5da8dSAndroid Build Coastguard Worker                  'For a locale aware separator, use the "\'n\'" integer '
6384*cda5da8dSAndroid Build Coastguard Worker                  'presentation type\n'
6385*cda5da8dSAndroid Build Coastguard Worker                  'instead.\n'
6386*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6387*cda5da8dSAndroid Build Coastguard Worker                  'Changed in version 3.1: Added the "\',\'" option (see also '
6388*cda5da8dSAndroid Build Coastguard Worker                  '**PEP 378**).\n'
6389*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6390*cda5da8dSAndroid Build Coastguard Worker                  'The "\'_\'" option signals the use of an underscore for a '
6391*cda5da8dSAndroid Build Coastguard Worker                  'thousands\n'
6392*cda5da8dSAndroid Build Coastguard Worker                  'separator for floating point presentation types and for '
6393*cda5da8dSAndroid Build Coastguard Worker                  'integer\n'
6394*cda5da8dSAndroid Build Coastguard Worker                  'presentation type "\'d\'".  For integer presentation types '
6395*cda5da8dSAndroid Build Coastguard Worker                  '"\'b\'", "\'o\'",\n'
6396*cda5da8dSAndroid Build Coastguard Worker                  '"\'x\'", and "\'X\'", underscores will be inserted every 4 '
6397*cda5da8dSAndroid Build Coastguard Worker                  'digits.  For\n'
6398*cda5da8dSAndroid Build Coastguard Worker                  'other presentation types, specifying this option is an '
6399*cda5da8dSAndroid Build Coastguard Worker                  'error.\n'
6400*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6401*cda5da8dSAndroid Build Coastguard Worker                  'Changed in version 3.6: Added the "\'_\'" option (see also '
6402*cda5da8dSAndroid Build Coastguard Worker                  '**PEP 515**).\n'
6403*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6404*cda5da8dSAndroid Build Coastguard Worker                  '*width* is a decimal integer defining the minimum total '
6405*cda5da8dSAndroid Build Coastguard Worker                  'field width,\n'
6406*cda5da8dSAndroid Build Coastguard Worker                  'including any prefixes, separators, and other formatting '
6407*cda5da8dSAndroid Build Coastguard Worker                  'characters.\n'
6408*cda5da8dSAndroid Build Coastguard Worker                  'If not specified, then the field width will be determined '
6409*cda5da8dSAndroid Build Coastguard Worker                  'by the\n'
6410*cda5da8dSAndroid Build Coastguard Worker                  'content.\n'
6411*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6412*cda5da8dSAndroid Build Coastguard Worker                  'When no explicit alignment is given, preceding the *width* '
6413*cda5da8dSAndroid Build Coastguard Worker                  'field by a\n'
6414*cda5da8dSAndroid Build Coastguard Worker                  'zero ("\'0\'") character enables sign-aware zero-padding '
6415*cda5da8dSAndroid Build Coastguard Worker                  'for numeric\n'
6416*cda5da8dSAndroid Build Coastguard Worker                  'types.  This is equivalent to a *fill* character of "\'0\'" '
6417*cda5da8dSAndroid Build Coastguard Worker                  'with an\n'
6418*cda5da8dSAndroid Build Coastguard Worker                  '*alignment* type of "\'=\'".\n'
6419*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6420*cda5da8dSAndroid Build Coastguard Worker                  'Changed in version 3.10: Preceding the *width* field by '
6421*cda5da8dSAndroid Build Coastguard Worker                  '"\'0\'" no\n'
6422*cda5da8dSAndroid Build Coastguard Worker                  'longer affects the default alignment for strings.\n'
6423*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6424*cda5da8dSAndroid Build Coastguard Worker                  'The *precision* is a decimal integer indicating how many '
6425*cda5da8dSAndroid Build Coastguard Worker                  'digits should\n'
6426*cda5da8dSAndroid Build Coastguard Worker                  'be displayed after the decimal point for presentation types '
6427*cda5da8dSAndroid Build Coastguard Worker                  '"\'f\'" and\n'
6428*cda5da8dSAndroid Build Coastguard Worker                  '"\'F\'", or before and after the decimal point for '
6429*cda5da8dSAndroid Build Coastguard Worker                  'presentation types\n'
6430*cda5da8dSAndroid Build Coastguard Worker                  '"\'g\'" or "\'G\'".  For string presentation types the '
6431*cda5da8dSAndroid Build Coastguard Worker                  'field indicates the\n'
6432*cda5da8dSAndroid Build Coastguard Worker                  'maximum field size - in other words, how many characters '
6433*cda5da8dSAndroid Build Coastguard Worker                  'will be used\n'
6434*cda5da8dSAndroid Build Coastguard Worker                  'from the field content.  The *precision* is not allowed for '
6435*cda5da8dSAndroid Build Coastguard Worker                  'integer\n'
6436*cda5da8dSAndroid Build Coastguard Worker                  'presentation types.\n'
6437*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6438*cda5da8dSAndroid Build Coastguard Worker                  'Finally, the *type* determines how the data should be '
6439*cda5da8dSAndroid Build Coastguard Worker                  'presented.\n'
6440*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6441*cda5da8dSAndroid Build Coastguard Worker                  'The available string presentation types are:\n'
6442*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6443*cda5da8dSAndroid Build Coastguard Worker                  '   '
6444*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6445*cda5da8dSAndroid Build Coastguard Worker                  '   | Type      | '
6446*cda5da8dSAndroid Build Coastguard Worker                  'Meaning                                                    '
6447*cda5da8dSAndroid Build Coastguard Worker                  '|\n'
6448*cda5da8dSAndroid Build Coastguard Worker                  '   '
6449*cda5da8dSAndroid Build Coastguard Worker                  '|===========|============================================================|\n'
6450*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'s\'"     | String format. This is the default type '
6451*cda5da8dSAndroid Build Coastguard Worker                  'for strings and    |\n'
6452*cda5da8dSAndroid Build Coastguard Worker                  '   |           | may be '
6453*cda5da8dSAndroid Build Coastguard Worker                  'omitted.                                            |\n'
6454*cda5da8dSAndroid Build Coastguard Worker                  '   '
6455*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6456*cda5da8dSAndroid Build Coastguard Worker                  '   | None      | The same as '
6457*cda5da8dSAndroid Build Coastguard Worker                  '"\'s\'".                                         |\n'
6458*cda5da8dSAndroid Build Coastguard Worker                  '   '
6459*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6460*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6461*cda5da8dSAndroid Build Coastguard Worker                  'The available integer presentation types are:\n'
6462*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6463*cda5da8dSAndroid Build Coastguard Worker                  '   '
6464*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6465*cda5da8dSAndroid Build Coastguard Worker                  '   | Type      | '
6466*cda5da8dSAndroid Build Coastguard Worker                  'Meaning                                                    '
6467*cda5da8dSAndroid Build Coastguard Worker                  '|\n'
6468*cda5da8dSAndroid Build Coastguard Worker                  '   '
6469*cda5da8dSAndroid Build Coastguard Worker                  '|===========|============================================================|\n'
6470*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'b\'"     | Binary format. Outputs the number in '
6471*cda5da8dSAndroid Build Coastguard Worker                  'base 2.               |\n'
6472*cda5da8dSAndroid Build Coastguard Worker                  '   '
6473*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6474*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'c\'"     | Character. Converts the integer to the '
6475*cda5da8dSAndroid Build Coastguard Worker                  'corresponding       |\n'
6476*cda5da8dSAndroid Build Coastguard Worker                  '   |           | unicode character before '
6477*cda5da8dSAndroid Build Coastguard Worker                  'printing.                         |\n'
6478*cda5da8dSAndroid Build Coastguard Worker                  '   '
6479*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6480*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'d\'"     | Decimal Integer. Outputs the number in '
6481*cda5da8dSAndroid Build Coastguard Worker                  'base 10.            |\n'
6482*cda5da8dSAndroid Build Coastguard Worker                  '   '
6483*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6484*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'o\'"     | Octal format. Outputs the number in base '
6485*cda5da8dSAndroid Build Coastguard Worker                  '8.                |\n'
6486*cda5da8dSAndroid Build Coastguard Worker                  '   '
6487*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6488*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'x\'"     | Hex format. Outputs the number in base '
6489*cda5da8dSAndroid Build Coastguard Worker                  '16, using lower-    |\n'
6490*cda5da8dSAndroid Build Coastguard Worker                  '   |           | case letters for the digits above '
6491*cda5da8dSAndroid Build Coastguard Worker                  '9.                       |\n'
6492*cda5da8dSAndroid Build Coastguard Worker                  '   '
6493*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6494*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'X\'"     | Hex format. Outputs the number in base '
6495*cda5da8dSAndroid Build Coastguard Worker                  '16, using upper-    |\n'
6496*cda5da8dSAndroid Build Coastguard Worker                  '   |           | case letters for the digits above 9. In '
6497*cda5da8dSAndroid Build Coastguard Worker                  'case "\'#\'" is      |\n'
6498*cda5da8dSAndroid Build Coastguard Worker                  '   |           | specified, the prefix "\'0x\'" will be '
6499*cda5da8dSAndroid Build Coastguard Worker                  'upper-cased to "\'0X\'" |\n'
6500*cda5da8dSAndroid Build Coastguard Worker                  '   |           | as '
6501*cda5da8dSAndroid Build Coastguard Worker                  'well.                                                   |\n'
6502*cda5da8dSAndroid Build Coastguard Worker                  '   '
6503*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6504*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'n\'"     | Number. This is the same as "\'d\'", '
6505*cda5da8dSAndroid Build Coastguard Worker                  'except that it uses the |\n'
6506*cda5da8dSAndroid Build Coastguard Worker                  '   |           | current locale setting to insert the '
6507*cda5da8dSAndroid Build Coastguard Worker                  'appropriate number    |\n'
6508*cda5da8dSAndroid Build Coastguard Worker                  '   |           | separator '
6509*cda5da8dSAndroid Build Coastguard Worker                  'characters.                                      |\n'
6510*cda5da8dSAndroid Build Coastguard Worker                  '   '
6511*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6512*cda5da8dSAndroid Build Coastguard Worker                  '   | None      | The same as '
6513*cda5da8dSAndroid Build Coastguard Worker                  '"\'d\'".                                         |\n'
6514*cda5da8dSAndroid Build Coastguard Worker                  '   '
6515*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6516*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6517*cda5da8dSAndroid Build Coastguard Worker                  'In addition to the above presentation types, integers can '
6518*cda5da8dSAndroid Build Coastguard Worker                  'be formatted\n'
6519*cda5da8dSAndroid Build Coastguard Worker                  'with the floating point presentation types listed below '
6520*cda5da8dSAndroid Build Coastguard Worker                  '(except "\'n\'"\n'
6521*cda5da8dSAndroid Build Coastguard Worker                  'and "None"). When doing so, "float()" is used to convert '
6522*cda5da8dSAndroid Build Coastguard Worker                  'the integer\n'
6523*cda5da8dSAndroid Build Coastguard Worker                  'to a floating point number before formatting.\n'
6524*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6525*cda5da8dSAndroid Build Coastguard Worker                  'The available presentation types for "float" and "Decimal" '
6526*cda5da8dSAndroid Build Coastguard Worker                  'values are:\n'
6527*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6528*cda5da8dSAndroid Build Coastguard Worker                  '   '
6529*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6530*cda5da8dSAndroid Build Coastguard Worker                  '   | Type      | '
6531*cda5da8dSAndroid Build Coastguard Worker                  'Meaning                                                    '
6532*cda5da8dSAndroid Build Coastguard Worker                  '|\n'
6533*cda5da8dSAndroid Build Coastguard Worker                  '   '
6534*cda5da8dSAndroid Build Coastguard Worker                  '|===========|============================================================|\n'
6535*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'e\'"     | Scientific notation. For a given '
6536*cda5da8dSAndroid Build Coastguard Worker                  'precision "p", formats    |\n'
6537*cda5da8dSAndroid Build Coastguard Worker                  '   |           | the number in scientific notation with the '
6538*cda5da8dSAndroid Build Coastguard Worker                  'letter ‘e’      |\n'
6539*cda5da8dSAndroid Build Coastguard Worker                  '   |           | separating the coefficient from the '
6540*cda5da8dSAndroid Build Coastguard Worker                  'exponent. The          |\n'
6541*cda5da8dSAndroid Build Coastguard Worker                  '   |           | coefficient has one digit before and "p" '
6542*cda5da8dSAndroid Build Coastguard Worker                  'digits after the  |\n'
6543*cda5da8dSAndroid Build Coastguard Worker                  '   |           | decimal point, for a total of "p + 1" '
6544*cda5da8dSAndroid Build Coastguard Worker                  'significant digits.  |\n'
6545*cda5da8dSAndroid Build Coastguard Worker                  '   |           | With no precision given, uses a precision '
6546*cda5da8dSAndroid Build Coastguard Worker                  'of "6" digits    |\n'
6547*cda5da8dSAndroid Build Coastguard Worker                  '   |           | after the decimal point for "float", and '
6548*cda5da8dSAndroid Build Coastguard Worker                  'shows all         |\n'
6549*cda5da8dSAndroid Build Coastguard Worker                  '   |           | coefficient digits for "Decimal". If no '
6550*cda5da8dSAndroid Build Coastguard Worker                  'digits follow the  |\n'
6551*cda5da8dSAndroid Build Coastguard Worker                  '   |           | decimal point, the decimal point is also '
6552*cda5da8dSAndroid Build Coastguard Worker                  'removed unless    |\n'
6553*cda5da8dSAndroid Build Coastguard Worker                  '   |           | the "#" option is '
6554*cda5da8dSAndroid Build Coastguard Worker                  'used.                                    |\n'
6555*cda5da8dSAndroid Build Coastguard Worker                  '   '
6556*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6557*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'E\'"     | Scientific notation. Same as "\'e\'" '
6558*cda5da8dSAndroid Build Coastguard Worker                  'except it uses an upper |\n'
6559*cda5da8dSAndroid Build Coastguard Worker                  '   |           | case ‘E’ as the separator '
6560*cda5da8dSAndroid Build Coastguard Worker                  'character.                       |\n'
6561*cda5da8dSAndroid Build Coastguard Worker                  '   '
6562*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6563*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'f\'"     | Fixed-point notation. For a given '
6564*cda5da8dSAndroid Build Coastguard Worker                  'precision "p", formats   |\n'
6565*cda5da8dSAndroid Build Coastguard Worker                  '   |           | the number as a decimal number with '
6566*cda5da8dSAndroid Build Coastguard Worker                  'exactly "p" digits     |\n'
6567*cda5da8dSAndroid Build Coastguard Worker                  '   |           | following the decimal point. With no '
6568*cda5da8dSAndroid Build Coastguard Worker                  'precision given, uses |\n'
6569*cda5da8dSAndroid Build Coastguard Worker                  '   |           | a precision of "6" digits after the '
6570*cda5da8dSAndroid Build Coastguard Worker                  'decimal point for      |\n'
6571*cda5da8dSAndroid Build Coastguard Worker                  '   |           | "float", and uses a precision large enough '
6572*cda5da8dSAndroid Build Coastguard Worker                  'to show all     |\n'
6573*cda5da8dSAndroid Build Coastguard Worker                  '   |           | coefficient digits for "Decimal". If no '
6574*cda5da8dSAndroid Build Coastguard Worker                  'digits follow the  |\n'
6575*cda5da8dSAndroid Build Coastguard Worker                  '   |           | decimal point, the decimal point is also '
6576*cda5da8dSAndroid Build Coastguard Worker                  'removed unless    |\n'
6577*cda5da8dSAndroid Build Coastguard Worker                  '   |           | the "#" option is '
6578*cda5da8dSAndroid Build Coastguard Worker                  'used.                                    |\n'
6579*cda5da8dSAndroid Build Coastguard Worker                  '   '
6580*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6581*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'F\'"     | Fixed-point notation. Same as "\'f\'", '
6582*cda5da8dSAndroid Build Coastguard Worker                  'but converts "nan" to |\n'
6583*cda5da8dSAndroid Build Coastguard Worker                  '   |           | "NAN" and "inf" to '
6584*cda5da8dSAndroid Build Coastguard Worker                  '"INF".                                  |\n'
6585*cda5da8dSAndroid Build Coastguard Worker                  '   '
6586*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6587*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'g\'"     | General format.  For a given precision '
6588*cda5da8dSAndroid Build Coastguard Worker                  '"p >= 1", this      |\n'
6589*cda5da8dSAndroid Build Coastguard Worker                  '   |           | rounds the number to "p" significant '
6590*cda5da8dSAndroid Build Coastguard Worker                  'digits and then       |\n'
6591*cda5da8dSAndroid Build Coastguard Worker                  '   |           | formats the result in either fixed-point '
6592*cda5da8dSAndroid Build Coastguard Worker                  'format or in      |\n'
6593*cda5da8dSAndroid Build Coastguard Worker                  '   |           | scientific notation, depending on its '
6594*cda5da8dSAndroid Build Coastguard Worker                  'magnitude. A         |\n'
6595*cda5da8dSAndroid Build Coastguard Worker                  '   |           | precision of "0" is treated as equivalent '
6596*cda5da8dSAndroid Build Coastguard Worker                  'to a precision   |\n'
6597*cda5da8dSAndroid Build Coastguard Worker                  '   |           | of "1".  The precise rules are as follows: '
6598*cda5da8dSAndroid Build Coastguard Worker                  'suppose that    |\n'
6599*cda5da8dSAndroid Build Coastguard Worker                  '   |           | the result formatted with presentation '
6600*cda5da8dSAndroid Build Coastguard Worker                  'type "\'e\'" and      |\n'
6601*cda5da8dSAndroid Build Coastguard Worker                  '   |           | precision "p-1" would have exponent '
6602*cda5da8dSAndroid Build Coastguard Worker                  '"exp".  Then, if "m <= |\n'
6603*cda5da8dSAndroid Build Coastguard Worker                  '   |           | exp < p", where "m" is -4 for floats and '
6604*cda5da8dSAndroid Build Coastguard Worker                  '-6 for            |\n'
6605*cda5da8dSAndroid Build Coastguard Worker                  '   |           | "Decimals", the number is formatted with '
6606*cda5da8dSAndroid Build Coastguard Worker                  'presentation type |\n'
6607*cda5da8dSAndroid Build Coastguard Worker                  '   |           | "\'f\'" and precision "p-1-exp".  '
6608*cda5da8dSAndroid Build Coastguard Worker                  'Otherwise, the number is   |\n'
6609*cda5da8dSAndroid Build Coastguard Worker                  '   |           | formatted with presentation type "\'e\'" '
6610*cda5da8dSAndroid Build Coastguard Worker                  'and precision       |\n'
6611*cda5da8dSAndroid Build Coastguard Worker                  '   |           | "p-1". In both cases insignificant '
6612*cda5da8dSAndroid Build Coastguard Worker                  'trailing zeros are      |\n'
6613*cda5da8dSAndroid Build Coastguard Worker                  '   |           | removed from the significand, and the '
6614*cda5da8dSAndroid Build Coastguard Worker                  'decimal point is     |\n'
6615*cda5da8dSAndroid Build Coastguard Worker                  '   |           | also removed if there are no remaining '
6616*cda5da8dSAndroid Build Coastguard Worker                  'digits following    |\n'
6617*cda5da8dSAndroid Build Coastguard Worker                  '   |           | it, unless the "\'#\'" option is used.  '
6618*cda5da8dSAndroid Build Coastguard Worker                  'With no precision    |\n'
6619*cda5da8dSAndroid Build Coastguard Worker                  '   |           | given, uses a precision of "6" significant '
6620*cda5da8dSAndroid Build Coastguard Worker                  'digits for      |\n'
6621*cda5da8dSAndroid Build Coastguard Worker                  '   |           | "float". For "Decimal", the coefficient of '
6622*cda5da8dSAndroid Build Coastguard Worker                  'the result is   |\n'
6623*cda5da8dSAndroid Build Coastguard Worker                  '   |           | formed from the coefficient digits of the '
6624*cda5da8dSAndroid Build Coastguard Worker                  'value;           |\n'
6625*cda5da8dSAndroid Build Coastguard Worker                  '   |           | scientific notation is used for values '
6626*cda5da8dSAndroid Build Coastguard Worker                  'smaller than "1e-6" |\n'
6627*cda5da8dSAndroid Build Coastguard Worker                  '   |           | in absolute value and values where the '
6628*cda5da8dSAndroid Build Coastguard Worker                  'place value of the  |\n'
6629*cda5da8dSAndroid Build Coastguard Worker                  '   |           | least significant digit is larger than 1, '
6630*cda5da8dSAndroid Build Coastguard Worker                  'and fixed-point  |\n'
6631*cda5da8dSAndroid Build Coastguard Worker                  '   |           | notation is used otherwise.  Positive and '
6632*cda5da8dSAndroid Build Coastguard Worker                  'negative         |\n'
6633*cda5da8dSAndroid Build Coastguard Worker                  '   |           | infinity, positive and negative zero, and '
6634*cda5da8dSAndroid Build Coastguard Worker                  'nans, are        |\n'
6635*cda5da8dSAndroid Build Coastguard Worker                  '   |           | formatted as "inf", "-inf", "0", "-0" and '
6636*cda5da8dSAndroid Build Coastguard Worker                  '"nan"            |\n'
6637*cda5da8dSAndroid Build Coastguard Worker                  '   |           | respectively, regardless of the '
6638*cda5da8dSAndroid Build Coastguard Worker                  'precision.                 |\n'
6639*cda5da8dSAndroid Build Coastguard Worker                  '   '
6640*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6641*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'G\'"     | General format. Same as "\'g\'" except '
6642*cda5da8dSAndroid Build Coastguard Worker                  'switches to "\'E\'" if  |\n'
6643*cda5da8dSAndroid Build Coastguard Worker                  '   |           | the number gets too large. The '
6644*cda5da8dSAndroid Build Coastguard Worker                  'representations of infinity |\n'
6645*cda5da8dSAndroid Build Coastguard Worker                  '   |           | and NaN are uppercased, '
6646*cda5da8dSAndroid Build Coastguard Worker                  'too.                               |\n'
6647*cda5da8dSAndroid Build Coastguard Worker                  '   '
6648*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6649*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'n\'"     | Number. This is the same as "\'g\'", '
6650*cda5da8dSAndroid Build Coastguard Worker                  'except that it uses the |\n'
6651*cda5da8dSAndroid Build Coastguard Worker                  '   |           | current locale setting to insert the '
6652*cda5da8dSAndroid Build Coastguard Worker                  'appropriate number    |\n'
6653*cda5da8dSAndroid Build Coastguard Worker                  '   |           | separator '
6654*cda5da8dSAndroid Build Coastguard Worker                  'characters.                                      |\n'
6655*cda5da8dSAndroid Build Coastguard Worker                  '   '
6656*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6657*cda5da8dSAndroid Build Coastguard Worker                  '   | "\'%\'"     | Percentage. Multiplies the number by 100 '
6658*cda5da8dSAndroid Build Coastguard Worker                  'and displays in   |\n'
6659*cda5da8dSAndroid Build Coastguard Worker                  '   |           | fixed ("\'f\'") format, followed by a '
6660*cda5da8dSAndroid Build Coastguard Worker                  'percent sign.          |\n'
6661*cda5da8dSAndroid Build Coastguard Worker                  '   '
6662*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6663*cda5da8dSAndroid Build Coastguard Worker                  '   | None      | For "float" this is the same as "\'g\'", '
6664*cda5da8dSAndroid Build Coastguard Worker                  'except that when    |\n'
6665*cda5da8dSAndroid Build Coastguard Worker                  '   |           | fixed-point notation is used to format the '
6666*cda5da8dSAndroid Build Coastguard Worker                  'result, it      |\n'
6667*cda5da8dSAndroid Build Coastguard Worker                  '   |           | always includes at least one digit past '
6668*cda5da8dSAndroid Build Coastguard Worker                  'the decimal point. |\n'
6669*cda5da8dSAndroid Build Coastguard Worker                  '   |           | The precision used is as large as needed '
6670*cda5da8dSAndroid Build Coastguard Worker                  'to represent the  |\n'
6671*cda5da8dSAndroid Build Coastguard Worker                  '   |           | given value faithfully.  For "Decimal", '
6672*cda5da8dSAndroid Build Coastguard Worker                  'this is the same   |\n'
6673*cda5da8dSAndroid Build Coastguard Worker                  '   |           | as either "\'g\'" or "\'G\'" depending on '
6674*cda5da8dSAndroid Build Coastguard Worker                  'the value of         |\n'
6675*cda5da8dSAndroid Build Coastguard Worker                  '   |           | "context.capitals" for the current decimal '
6676*cda5da8dSAndroid Build Coastguard Worker                  'context.  The   |\n'
6677*cda5da8dSAndroid Build Coastguard Worker                  '   |           | overall effect is to match the output of '
6678*cda5da8dSAndroid Build Coastguard Worker                  '"str()" as        |\n'
6679*cda5da8dSAndroid Build Coastguard Worker                  '   |           | altered by the other format '
6680*cda5da8dSAndroid Build Coastguard Worker                  'modifiers.                     |\n'
6681*cda5da8dSAndroid Build Coastguard Worker                  '   '
6682*cda5da8dSAndroid Build Coastguard Worker                  '+-----------+------------------------------------------------------------+\n'
6683*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6684*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6685*cda5da8dSAndroid Build Coastguard Worker                  'Format examples\n'
6686*cda5da8dSAndroid Build Coastguard Worker                  '===============\n'
6687*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6688*cda5da8dSAndroid Build Coastguard Worker                  'This section contains examples of the "str.format()" syntax '
6689*cda5da8dSAndroid Build Coastguard Worker                  'and\n'
6690*cda5da8dSAndroid Build Coastguard Worker                  'comparison with the old "%"-formatting.\n'
6691*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6692*cda5da8dSAndroid Build Coastguard Worker                  'In most of the cases the syntax is similar to the old '
6693*cda5da8dSAndroid Build Coastguard Worker                  '"%"-formatting,\n'
6694*cda5da8dSAndroid Build Coastguard Worker                  'with the addition of the "{}" and with ":" used instead of '
6695*cda5da8dSAndroid Build Coastguard Worker                  '"%". For\n'
6696*cda5da8dSAndroid Build Coastguard Worker                  'example, "\'%03.2f\'" can be translated to "\'{:03.2f}\'".\n'
6697*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6698*cda5da8dSAndroid Build Coastguard Worker                  'The new format syntax also supports new and different '
6699*cda5da8dSAndroid Build Coastguard Worker                  'options, shown\n'
6700*cda5da8dSAndroid Build Coastguard Worker                  'in the following examples.\n'
6701*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6702*cda5da8dSAndroid Build Coastguard Worker                  'Accessing arguments by position:\n'
6703*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6704*cda5da8dSAndroid Build Coastguard Worker                  "   >>> '{0}, {1}, {2}'.format('a', 'b', 'c')\n"
6705*cda5da8dSAndroid Build Coastguard Worker                  "   'a, b, c'\n"
6706*cda5da8dSAndroid Build Coastguard Worker                  "   >>> '{}, {}, {}'.format('a', 'b', 'c')  # 3.1+ only\n"
6707*cda5da8dSAndroid Build Coastguard Worker                  "   'a, b, c'\n"
6708*cda5da8dSAndroid Build Coastguard Worker                  "   >>> '{2}, {1}, {0}'.format('a', 'b', 'c')\n"
6709*cda5da8dSAndroid Build Coastguard Worker                  "   'c, b, a'\n"
6710*cda5da8dSAndroid Build Coastguard Worker                  "   >>> '{2}, {1}, {0}'.format(*'abc')      # unpacking "
6711*cda5da8dSAndroid Build Coastguard Worker                  'argument sequence\n'
6712*cda5da8dSAndroid Build Coastguard Worker                  "   'c, b, a'\n"
6713*cda5da8dSAndroid Build Coastguard Worker                  "   >>> '{0}{1}{0}'.format('abra', 'cad')   # arguments' "
6714*cda5da8dSAndroid Build Coastguard Worker                  'indices can be repeated\n'
6715*cda5da8dSAndroid Build Coastguard Worker                  "   'abracadabra'\n"
6716*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6717*cda5da8dSAndroid Build Coastguard Worker                  'Accessing arguments by name:\n'
6718*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6719*cda5da8dSAndroid Build Coastguard Worker                  "   >>> 'Coordinates: {latitude}, "
6720*cda5da8dSAndroid Build Coastguard Worker                  "{longitude}'.format(latitude='37.24N', "
6721*cda5da8dSAndroid Build Coastguard Worker                  "longitude='-115.81W')\n"
6722*cda5da8dSAndroid Build Coastguard Worker                  "   'Coordinates: 37.24N, -115.81W'\n"
6723*cda5da8dSAndroid Build Coastguard Worker                  "   >>> coord = {'latitude': '37.24N', 'longitude': "
6724*cda5da8dSAndroid Build Coastguard Worker                  "'-115.81W'}\n"
6725*cda5da8dSAndroid Build Coastguard Worker                  "   >>> 'Coordinates: {latitude}, "
6726*cda5da8dSAndroid Build Coastguard Worker                  "{longitude}'.format(**coord)\n"
6727*cda5da8dSAndroid Build Coastguard Worker                  "   'Coordinates: 37.24N, -115.81W'\n"
6728*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6729*cda5da8dSAndroid Build Coastguard Worker                  'Accessing arguments’ attributes:\n'
6730*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6731*cda5da8dSAndroid Build Coastguard Worker                  '   >>> c = 3-5j\n'
6732*cda5da8dSAndroid Build Coastguard Worker                  "   >>> ('The complex number {0} is formed from the real "
6733*cda5da8dSAndroid Build Coastguard Worker                  "part {0.real} '\n"
6734*cda5da8dSAndroid Build Coastguard Worker                  "   ...  'and the imaginary part {0.imag}.').format(c)\n"
6735*cda5da8dSAndroid Build Coastguard Worker                  "   'The complex number (3-5j) is formed from the real part "
6736*cda5da8dSAndroid Build Coastguard Worker                  "3.0 and the imaginary part -5.0.'\n"
6737*cda5da8dSAndroid Build Coastguard Worker                  '   >>> class Point:\n'
6738*cda5da8dSAndroid Build Coastguard Worker                  '   ...     def __init__(self, x, y):\n'
6739*cda5da8dSAndroid Build Coastguard Worker                  '   ...         self.x, self.y = x, y\n'
6740*cda5da8dSAndroid Build Coastguard Worker                  '   ...     def __str__(self):\n'
6741*cda5da8dSAndroid Build Coastguard Worker                  "   ...         return 'Point({self.x}, "
6742*cda5da8dSAndroid Build Coastguard Worker                  "{self.y})'.format(self=self)\n"
6743*cda5da8dSAndroid Build Coastguard Worker                  '   ...\n'
6744*cda5da8dSAndroid Build Coastguard Worker                  '   >>> str(Point(4, 2))\n'
6745*cda5da8dSAndroid Build Coastguard Worker                  "   'Point(4, 2)'\n"
6746*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6747*cda5da8dSAndroid Build Coastguard Worker                  'Accessing arguments’ items:\n'
6748*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6749*cda5da8dSAndroid Build Coastguard Worker                  '   >>> coord = (3, 5)\n'
6750*cda5da8dSAndroid Build Coastguard Worker                  "   >>> 'X: {0[0]};  Y: {0[1]}'.format(coord)\n"
6751*cda5da8dSAndroid Build Coastguard Worker                  "   'X: 3;  Y: 5'\n"
6752*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6753*cda5da8dSAndroid Build Coastguard Worker                  'Replacing "%s" and "%r":\n'
6754*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6755*cda5da8dSAndroid Build Coastguard Worker                  '   >>> "repr() shows quotes: {!r}; str() doesn\'t: '
6756*cda5da8dSAndroid Build Coastguard Worker                  '{!s}".format(\'test1\', \'test2\')\n'
6757*cda5da8dSAndroid Build Coastguard Worker                  '   "repr() shows quotes: \'test1\'; str() doesn\'t: test2"\n'
6758*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6759*cda5da8dSAndroid Build Coastguard Worker                  'Aligning the text and specifying a width:\n'
6760*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6761*cda5da8dSAndroid Build Coastguard Worker                  "   >>> '{:<30}'.format('left aligned')\n"
6762*cda5da8dSAndroid Build Coastguard Worker                  "   'left aligned                  '\n"
6763*cda5da8dSAndroid Build Coastguard Worker                  "   >>> '{:>30}'.format('right aligned')\n"
6764*cda5da8dSAndroid Build Coastguard Worker                  "   '                 right aligned'\n"
6765*cda5da8dSAndroid Build Coastguard Worker                  "   >>> '{:^30}'.format('centered')\n"
6766*cda5da8dSAndroid Build Coastguard Worker                  "   '           centered           '\n"
6767*cda5da8dSAndroid Build Coastguard Worker                  "   >>> '{:*^30}'.format('centered')  # use '*' as a fill "
6768*cda5da8dSAndroid Build Coastguard Worker                  'char\n'
6769*cda5da8dSAndroid Build Coastguard Worker                  "   '***********centered***********'\n"
6770*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6771*cda5da8dSAndroid Build Coastguard Worker                  'Replacing "%+f", "%-f", and "% f" and specifying a sign:\n'
6772*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6773*cda5da8dSAndroid Build Coastguard Worker                  "   >>> '{:+f}; {:+f}'.format(3.14, -3.14)  # show it "
6774*cda5da8dSAndroid Build Coastguard Worker                  'always\n'
6775*cda5da8dSAndroid Build Coastguard Worker                  "   '+3.140000; -3.140000'\n"
6776*cda5da8dSAndroid Build Coastguard Worker                  "   >>> '{: f}; {: f}'.format(3.14, -3.14)  # show a space "
6777*cda5da8dSAndroid Build Coastguard Worker                  'for positive numbers\n'
6778*cda5da8dSAndroid Build Coastguard Worker                  "   ' 3.140000; -3.140000'\n"
6779*cda5da8dSAndroid Build Coastguard Worker                  "   >>> '{:-f}; {:-f}'.format(3.14, -3.14)  # show only the "
6780*cda5da8dSAndroid Build Coastguard Worker                  "minus -- same as '{:f}; {:f}'\n"
6781*cda5da8dSAndroid Build Coastguard Worker                  "   '3.140000; -3.140000'\n"
6782*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6783*cda5da8dSAndroid Build Coastguard Worker                  'Replacing "%x" and "%o" and converting the value to '
6784*cda5da8dSAndroid Build Coastguard Worker                  'different bases:\n'
6785*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6786*cda5da8dSAndroid Build Coastguard Worker                  '   >>> # format also supports binary numbers\n'
6787*cda5da8dSAndroid Build Coastguard Worker                  '   >>> "int: {0:d};  hex: {0:x};  oct: {0:o};  bin: '
6788*cda5da8dSAndroid Build Coastguard Worker                  '{0:b}".format(42)\n'
6789*cda5da8dSAndroid Build Coastguard Worker                  "   'int: 42;  hex: 2a;  oct: 52;  bin: 101010'\n"
6790*cda5da8dSAndroid Build Coastguard Worker                  '   >>> # with 0x, 0o, or 0b as prefix:\n'
6791*cda5da8dSAndroid Build Coastguard Worker                  '   >>> "int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: '
6792*cda5da8dSAndroid Build Coastguard Worker                  '{0:#b}".format(42)\n'
6793*cda5da8dSAndroid Build Coastguard Worker                  "   'int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010'\n"
6794*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6795*cda5da8dSAndroid Build Coastguard Worker                  'Using the comma as a thousands separator:\n'
6796*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6797*cda5da8dSAndroid Build Coastguard Worker                  "   >>> '{:,}'.format(1234567890)\n"
6798*cda5da8dSAndroid Build Coastguard Worker                  "   '1,234,567,890'\n"
6799*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6800*cda5da8dSAndroid Build Coastguard Worker                  'Expressing a percentage:\n'
6801*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6802*cda5da8dSAndroid Build Coastguard Worker                  '   >>> points = 19\n'
6803*cda5da8dSAndroid Build Coastguard Worker                  '   >>> total = 22\n'
6804*cda5da8dSAndroid Build Coastguard Worker                  "   >>> 'Correct answers: {:.2%}'.format(points/total)\n"
6805*cda5da8dSAndroid Build Coastguard Worker                  "   'Correct answers: 86.36%'\n"
6806*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6807*cda5da8dSAndroid Build Coastguard Worker                  'Using type-specific formatting:\n'
6808*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6809*cda5da8dSAndroid Build Coastguard Worker                  '   >>> import datetime\n'
6810*cda5da8dSAndroid Build Coastguard Worker                  '   >>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)\n'
6811*cda5da8dSAndroid Build Coastguard Worker                  "   >>> '{:%Y-%m-%d %H:%M:%S}'.format(d)\n"
6812*cda5da8dSAndroid Build Coastguard Worker                  "   '2010-07-04 12:15:58'\n"
6813*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6814*cda5da8dSAndroid Build Coastguard Worker                  'Nesting arguments and more complex examples:\n'
6815*cda5da8dSAndroid Build Coastguard Worker                  '\n'
6816*cda5da8dSAndroid Build Coastguard Worker                  "   >>> for align, text in zip('<^>', ['left', 'center', "
6817*cda5da8dSAndroid Build Coastguard Worker                  "'right']):\n"
6818*cda5da8dSAndroid Build Coastguard Worker                  "   ...     '{0:{fill}{align}16}'.format(text, fill=align, "
6819*cda5da8dSAndroid Build Coastguard Worker                  'align=align)\n'
6820*cda5da8dSAndroid Build Coastguard Worker                  '   ...\n'
6821*cda5da8dSAndroid Build Coastguard Worker                  "   'left<<<<<<<<<<<<'\n"
6822*cda5da8dSAndroid Build Coastguard Worker                  "   '^^^^^center^^^^^'\n"
6823*cda5da8dSAndroid Build Coastguard Worker                  "   '>>>>>>>>>>>right'\n"
6824*cda5da8dSAndroid Build Coastguard Worker                  '   >>>\n'
6825*cda5da8dSAndroid Build Coastguard Worker                  '   >>> octets = [192, 168, 0, 1]\n'
6826*cda5da8dSAndroid Build Coastguard Worker                  "   >>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)\n"
6827*cda5da8dSAndroid Build Coastguard Worker                  "   'C0A80001'\n"
6828*cda5da8dSAndroid Build Coastguard Worker                  '   >>> int(_, 16)\n'
6829*cda5da8dSAndroid Build Coastguard Worker                  '   3232235521\n'
6830*cda5da8dSAndroid Build Coastguard Worker                  '   >>>\n'
6831*cda5da8dSAndroid Build Coastguard Worker                  '   >>> width = 5\n'
6832*cda5da8dSAndroid Build Coastguard Worker                  '   >>> for num in range(5,12): \n'
6833*cda5da8dSAndroid Build Coastguard Worker                  "   ...     for base in 'dXob':\n"
6834*cda5da8dSAndroid Build Coastguard Worker                  "   ...         print('{0:{width}{base}}'.format(num, "
6835*cda5da8dSAndroid Build Coastguard Worker                  "base=base, width=width), end=' ')\n"
6836*cda5da8dSAndroid Build Coastguard Worker                  '   ...     print()\n'
6837*cda5da8dSAndroid Build Coastguard Worker                  '   ...\n'
6838*cda5da8dSAndroid Build Coastguard Worker                  '       5     5     5   101\n'
6839*cda5da8dSAndroid Build Coastguard Worker                  '       6     6     6   110\n'
6840*cda5da8dSAndroid Build Coastguard Worker                  '       7     7     7   111\n'
6841*cda5da8dSAndroid Build Coastguard Worker                  '       8     8    10  1000\n'
6842*cda5da8dSAndroid Build Coastguard Worker                  '       9     9    11  1001\n'
6843*cda5da8dSAndroid Build Coastguard Worker                  '      10     A    12  1010\n'
6844*cda5da8dSAndroid Build Coastguard Worker                  '      11     B    13  1011\n',
6845*cda5da8dSAndroid Build Coastguard Worker 'function': 'Function definitions\n'
6846*cda5da8dSAndroid Build Coastguard Worker             '********************\n'
6847*cda5da8dSAndroid Build Coastguard Worker             '\n'
6848*cda5da8dSAndroid Build Coastguard Worker             'A function definition defines a user-defined function object '
6849*cda5da8dSAndroid Build Coastguard Worker             '(see\n'
6850*cda5da8dSAndroid Build Coastguard Worker             'section The standard type hierarchy):\n'
6851*cda5da8dSAndroid Build Coastguard Worker             '\n'
6852*cda5da8dSAndroid Build Coastguard Worker             '   funcdef                   ::= [decorators] "def" funcname "(" '
6853*cda5da8dSAndroid Build Coastguard Worker             '[parameter_list] ")"\n'
6854*cda5da8dSAndroid Build Coastguard Worker             '               ["->" expression] ":" suite\n'
6855*cda5da8dSAndroid Build Coastguard Worker             '   decorators                ::= decorator+\n'
6856*cda5da8dSAndroid Build Coastguard Worker             '   decorator                 ::= "@" assignment_expression '
6857*cda5da8dSAndroid Build Coastguard Worker             'NEWLINE\n'
6858*cda5da8dSAndroid Build Coastguard Worker             '   parameter_list            ::= defparameter ("," '
6859*cda5da8dSAndroid Build Coastguard Worker             'defparameter)* "," "/" ["," [parameter_list_no_posonly]]\n'
6860*cda5da8dSAndroid Build Coastguard Worker             '                        | parameter_list_no_posonly\n'
6861*cda5da8dSAndroid Build Coastguard Worker             '   parameter_list_no_posonly ::= defparameter ("," '
6862*cda5da8dSAndroid Build Coastguard Worker             'defparameter)* ["," [parameter_list_starargs]]\n'
6863*cda5da8dSAndroid Build Coastguard Worker             '                                 | parameter_list_starargs\n'
6864*cda5da8dSAndroid Build Coastguard Worker             '   parameter_list_starargs   ::= "*" [parameter] ("," '
6865*cda5da8dSAndroid Build Coastguard Worker             'defparameter)* ["," ["**" parameter [","]]]\n'
6866*cda5da8dSAndroid Build Coastguard Worker             '                               | "**" parameter [","]\n'
6867*cda5da8dSAndroid Build Coastguard Worker             '   parameter                 ::= identifier [":" expression]\n'
6868*cda5da8dSAndroid Build Coastguard Worker             '   defparameter              ::= parameter ["=" expression]\n'
6869*cda5da8dSAndroid Build Coastguard Worker             '   funcname                  ::= identifier\n'
6870*cda5da8dSAndroid Build Coastguard Worker             '\n'
6871*cda5da8dSAndroid Build Coastguard Worker             'A function definition is an executable statement.  Its execution '
6872*cda5da8dSAndroid Build Coastguard Worker             'binds\n'
6873*cda5da8dSAndroid Build Coastguard Worker             'the function name in the current local namespace to a function '
6874*cda5da8dSAndroid Build Coastguard Worker             'object\n'
6875*cda5da8dSAndroid Build Coastguard Worker             '(a wrapper around the executable code for the function).  This\n'
6876*cda5da8dSAndroid Build Coastguard Worker             'function object contains a reference to the current global '
6877*cda5da8dSAndroid Build Coastguard Worker             'namespace\n'
6878*cda5da8dSAndroid Build Coastguard Worker             'as the global namespace to be used when the function is called.\n'
6879*cda5da8dSAndroid Build Coastguard Worker             '\n'
6880*cda5da8dSAndroid Build Coastguard Worker             'The function definition does not execute the function body; this '
6881*cda5da8dSAndroid Build Coastguard Worker             'gets\n'
6882*cda5da8dSAndroid Build Coastguard Worker             'executed only when the function is called. [4]\n'
6883*cda5da8dSAndroid Build Coastguard Worker             '\n'
6884*cda5da8dSAndroid Build Coastguard Worker             'A function definition may be wrapped by one or more *decorator*\n'
6885*cda5da8dSAndroid Build Coastguard Worker             'expressions. Decorator expressions are evaluated when the '
6886*cda5da8dSAndroid Build Coastguard Worker             'function is\n'
6887*cda5da8dSAndroid Build Coastguard Worker             'defined, in the scope that contains the function definition.  '
6888*cda5da8dSAndroid Build Coastguard Worker             'The\n'
6889*cda5da8dSAndroid Build Coastguard Worker             'result must be a callable, which is invoked with the function '
6890*cda5da8dSAndroid Build Coastguard Worker             'object\n'
6891*cda5da8dSAndroid Build Coastguard Worker             'as the only argument. The returned value is bound to the '
6892*cda5da8dSAndroid Build Coastguard Worker             'function name\n'
6893*cda5da8dSAndroid Build Coastguard Worker             'instead of the function object.  Multiple decorators are applied '
6894*cda5da8dSAndroid Build Coastguard Worker             'in\n'
6895*cda5da8dSAndroid Build Coastguard Worker             'nested fashion. For example, the following code\n'
6896*cda5da8dSAndroid Build Coastguard Worker             '\n'
6897*cda5da8dSAndroid Build Coastguard Worker             '   @f1(arg)\n'
6898*cda5da8dSAndroid Build Coastguard Worker             '   @f2\n'
6899*cda5da8dSAndroid Build Coastguard Worker             '   def func(): pass\n'
6900*cda5da8dSAndroid Build Coastguard Worker             '\n'
6901*cda5da8dSAndroid Build Coastguard Worker             'is roughly equivalent to\n'
6902*cda5da8dSAndroid Build Coastguard Worker             '\n'
6903*cda5da8dSAndroid Build Coastguard Worker             '   def func(): pass\n'
6904*cda5da8dSAndroid Build Coastguard Worker             '   func = f1(arg)(f2(func))\n'
6905*cda5da8dSAndroid Build Coastguard Worker             '\n'
6906*cda5da8dSAndroid Build Coastguard Worker             'except that the original function is not temporarily bound to '
6907*cda5da8dSAndroid Build Coastguard Worker             'the name\n'
6908*cda5da8dSAndroid Build Coastguard Worker             '"func".\n'
6909*cda5da8dSAndroid Build Coastguard Worker             '\n'
6910*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.9: Functions may be decorated with any '
6911*cda5da8dSAndroid Build Coastguard Worker             'valid\n'
6912*cda5da8dSAndroid Build Coastguard Worker             '"assignment_expression". Previously, the grammar was much more\n'
6913*cda5da8dSAndroid Build Coastguard Worker             'restrictive; see **PEP 614** for details.\n'
6914*cda5da8dSAndroid Build Coastguard Worker             '\n'
6915*cda5da8dSAndroid Build Coastguard Worker             'When one or more *parameters* have the form *parameter* "="\n'
6916*cda5da8dSAndroid Build Coastguard Worker             '*expression*, the function is said to have “default parameter '
6917*cda5da8dSAndroid Build Coastguard Worker             'values.”\n'
6918*cda5da8dSAndroid Build Coastguard Worker             'For a parameter with a default value, the corresponding '
6919*cda5da8dSAndroid Build Coastguard Worker             '*argument* may\n'
6920*cda5da8dSAndroid Build Coastguard Worker             'be omitted from a call, in which case the parameter’s default '
6921*cda5da8dSAndroid Build Coastguard Worker             'value is\n'
6922*cda5da8dSAndroid Build Coastguard Worker             'substituted.  If a parameter has a default value, all following\n'
6923*cda5da8dSAndroid Build Coastguard Worker             'parameters up until the “"*"” must also have a default value — '
6924*cda5da8dSAndroid Build Coastguard Worker             'this is\n'
6925*cda5da8dSAndroid Build Coastguard Worker             'a syntactic restriction that is not expressed by the grammar.\n'
6926*cda5da8dSAndroid Build Coastguard Worker             '\n'
6927*cda5da8dSAndroid Build Coastguard Worker             '**Default parameter values are evaluated from left to right when '
6928*cda5da8dSAndroid Build Coastguard Worker             'the\n'
6929*cda5da8dSAndroid Build Coastguard Worker             'function definition is executed.** This means that the '
6930*cda5da8dSAndroid Build Coastguard Worker             'expression is\n'
6931*cda5da8dSAndroid Build Coastguard Worker             'evaluated once, when the function is defined, and that the same '
6932*cda5da8dSAndroid Build Coastguard Worker             '“pre-\n'
6933*cda5da8dSAndroid Build Coastguard Worker             'computed” value is used for each call.  This is especially '
6934*cda5da8dSAndroid Build Coastguard Worker             'important\n'
6935*cda5da8dSAndroid Build Coastguard Worker             'to understand when a default parameter value is a mutable '
6936*cda5da8dSAndroid Build Coastguard Worker             'object, such\n'
6937*cda5da8dSAndroid Build Coastguard Worker             'as a list or a dictionary: if the function modifies the object '
6938*cda5da8dSAndroid Build Coastguard Worker             '(e.g.\n'
6939*cda5da8dSAndroid Build Coastguard Worker             'by appending an item to a list), the default parameter value is '
6940*cda5da8dSAndroid Build Coastguard Worker             'in\n'
6941*cda5da8dSAndroid Build Coastguard Worker             'effect modified.  This is generally not what was intended.  A '
6942*cda5da8dSAndroid Build Coastguard Worker             'way\n'
6943*cda5da8dSAndroid Build Coastguard Worker             'around this is to use "None" as the default, and explicitly test '
6944*cda5da8dSAndroid Build Coastguard Worker             'for\n'
6945*cda5da8dSAndroid Build Coastguard Worker             'it in the body of the function, e.g.:\n'
6946*cda5da8dSAndroid Build Coastguard Worker             '\n'
6947*cda5da8dSAndroid Build Coastguard Worker             '   def whats_on_the_telly(penguin=None):\n'
6948*cda5da8dSAndroid Build Coastguard Worker             '       if penguin is None:\n'
6949*cda5da8dSAndroid Build Coastguard Worker             '           penguin = []\n'
6950*cda5da8dSAndroid Build Coastguard Worker             '       penguin.append("property of the zoo")\n'
6951*cda5da8dSAndroid Build Coastguard Worker             '       return penguin\n'
6952*cda5da8dSAndroid Build Coastguard Worker             '\n'
6953*cda5da8dSAndroid Build Coastguard Worker             'Function call semantics are described in more detail in section '
6954*cda5da8dSAndroid Build Coastguard Worker             'Calls.\n'
6955*cda5da8dSAndroid Build Coastguard Worker             'A function call always assigns values to all parameters '
6956*cda5da8dSAndroid Build Coastguard Worker             'mentioned in\n'
6957*cda5da8dSAndroid Build Coastguard Worker             'the parameter list, either from positional arguments, from '
6958*cda5da8dSAndroid Build Coastguard Worker             'keyword\n'
6959*cda5da8dSAndroid Build Coastguard Worker             'arguments, or from default values.  If the form “"*identifier"” '
6960*cda5da8dSAndroid Build Coastguard Worker             'is\n'
6961*cda5da8dSAndroid Build Coastguard Worker             'present, it is initialized to a tuple receiving any excess '
6962*cda5da8dSAndroid Build Coastguard Worker             'positional\n'
6963*cda5da8dSAndroid Build Coastguard Worker             'parameters, defaulting to the empty tuple. If the form\n'
6964*cda5da8dSAndroid Build Coastguard Worker             '“"**identifier"” is present, it is initialized to a new ordered\n'
6965*cda5da8dSAndroid Build Coastguard Worker             'mapping receiving any excess keyword arguments, defaulting to a '
6966*cda5da8dSAndroid Build Coastguard Worker             'new\n'
6967*cda5da8dSAndroid Build Coastguard Worker             'empty mapping of the same type.  Parameters after “"*"” or\n'
6968*cda5da8dSAndroid Build Coastguard Worker             '“"*identifier"” are keyword-only parameters and may only be '
6969*cda5da8dSAndroid Build Coastguard Worker             'passed by\n'
6970*cda5da8dSAndroid Build Coastguard Worker             'keyword arguments.  Parameters before “"/"” are positional-only\n'
6971*cda5da8dSAndroid Build Coastguard Worker             'parameters and may only be passed by positional arguments.\n'
6972*cda5da8dSAndroid Build Coastguard Worker             '\n'
6973*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.8: The "/" function parameter syntax may be '
6974*cda5da8dSAndroid Build Coastguard Worker             'used\n'
6975*cda5da8dSAndroid Build Coastguard Worker             'to indicate positional-only parameters. See **PEP 570** for '
6976*cda5da8dSAndroid Build Coastguard Worker             'details.\n'
6977*cda5da8dSAndroid Build Coastguard Worker             '\n'
6978*cda5da8dSAndroid Build Coastguard Worker             'Parameters may have an *annotation* of the form “": '
6979*cda5da8dSAndroid Build Coastguard Worker             'expression"”\n'
6980*cda5da8dSAndroid Build Coastguard Worker             'following the parameter name.  Any parameter may have an '
6981*cda5da8dSAndroid Build Coastguard Worker             'annotation,\n'
6982*cda5da8dSAndroid Build Coastguard Worker             'even those of the form "*identifier" or "**identifier".  '
6983*cda5da8dSAndroid Build Coastguard Worker             'Functions may\n'
6984*cda5da8dSAndroid Build Coastguard Worker             'have “return” annotation of the form “"-> expression"” after '
6985*cda5da8dSAndroid Build Coastguard Worker             'the\n'
6986*cda5da8dSAndroid Build Coastguard Worker             'parameter list.  These annotations can be any valid Python '
6987*cda5da8dSAndroid Build Coastguard Worker             'expression.\n'
6988*cda5da8dSAndroid Build Coastguard Worker             'The presence of annotations does not change the semantics of a\n'
6989*cda5da8dSAndroid Build Coastguard Worker             'function.  The annotation values are available as values of a\n'
6990*cda5da8dSAndroid Build Coastguard Worker             'dictionary keyed by the parameters’ names in the '
6991*cda5da8dSAndroid Build Coastguard Worker             '"__annotations__"\n'
6992*cda5da8dSAndroid Build Coastguard Worker             'attribute of the function object.  If the "annotations" import '
6993*cda5da8dSAndroid Build Coastguard Worker             'from\n'
6994*cda5da8dSAndroid Build Coastguard Worker             '"__future__" is used, annotations are preserved as strings at '
6995*cda5da8dSAndroid Build Coastguard Worker             'runtime\n'
6996*cda5da8dSAndroid Build Coastguard Worker             'which enables postponed evaluation.  Otherwise, they are '
6997*cda5da8dSAndroid Build Coastguard Worker             'evaluated\n'
6998*cda5da8dSAndroid Build Coastguard Worker             'when the function definition is executed.  In this case '
6999*cda5da8dSAndroid Build Coastguard Worker             'annotations\n'
7000*cda5da8dSAndroid Build Coastguard Worker             'may be evaluated in a different order than they appear in the '
7001*cda5da8dSAndroid Build Coastguard Worker             'source\n'
7002*cda5da8dSAndroid Build Coastguard Worker             'code.\n'
7003*cda5da8dSAndroid Build Coastguard Worker             '\n'
7004*cda5da8dSAndroid Build Coastguard Worker             'It is also possible to create anonymous functions (functions not '
7005*cda5da8dSAndroid Build Coastguard Worker             'bound\n'
7006*cda5da8dSAndroid Build Coastguard Worker             'to a name), for immediate use in expressions.  This uses lambda\n'
7007*cda5da8dSAndroid Build Coastguard Worker             'expressions, described in section Lambdas.  Note that the '
7008*cda5da8dSAndroid Build Coastguard Worker             'lambda\n'
7009*cda5da8dSAndroid Build Coastguard Worker             'expression is merely a shorthand for a simplified function '
7010*cda5da8dSAndroid Build Coastguard Worker             'definition;\n'
7011*cda5da8dSAndroid Build Coastguard Worker             'a function defined in a “"def"” statement can be passed around '
7012*cda5da8dSAndroid Build Coastguard Worker             'or\n'
7013*cda5da8dSAndroid Build Coastguard Worker             'assigned to another name just like a function defined by a '
7014*cda5da8dSAndroid Build Coastguard Worker             'lambda\n'
7015*cda5da8dSAndroid Build Coastguard Worker             'expression.  The “"def"” form is actually more powerful since '
7016*cda5da8dSAndroid Build Coastguard Worker             'it\n'
7017*cda5da8dSAndroid Build Coastguard Worker             'allows the execution of multiple statements and annotations.\n'
7018*cda5da8dSAndroid Build Coastguard Worker             '\n'
7019*cda5da8dSAndroid Build Coastguard Worker             '**Programmer’s note:** Functions are first-class objects.  A '
7020*cda5da8dSAndroid Build Coastguard Worker             '“"def"”\n'
7021*cda5da8dSAndroid Build Coastguard Worker             'statement executed inside a function definition defines a local\n'
7022*cda5da8dSAndroid Build Coastguard Worker             'function that can be returned or passed around.  Free variables '
7023*cda5da8dSAndroid Build Coastguard Worker             'used\n'
7024*cda5da8dSAndroid Build Coastguard Worker             'in the nested function can access the local variables of the '
7025*cda5da8dSAndroid Build Coastguard Worker             'function\n'
7026*cda5da8dSAndroid Build Coastguard Worker             'containing the def.  See section Naming and binding for '
7027*cda5da8dSAndroid Build Coastguard Worker             'details.\n'
7028*cda5da8dSAndroid Build Coastguard Worker             '\n'
7029*cda5da8dSAndroid Build Coastguard Worker             'See also:\n'
7030*cda5da8dSAndroid Build Coastguard Worker             '\n'
7031*cda5da8dSAndroid Build Coastguard Worker             '  **PEP 3107** - Function Annotations\n'
7032*cda5da8dSAndroid Build Coastguard Worker             '     The original specification for function annotations.\n'
7033*cda5da8dSAndroid Build Coastguard Worker             '\n'
7034*cda5da8dSAndroid Build Coastguard Worker             '  **PEP 484** - Type Hints\n'
7035*cda5da8dSAndroid Build Coastguard Worker             '     Definition of a standard meaning for annotations: type '
7036*cda5da8dSAndroid Build Coastguard Worker             'hints.\n'
7037*cda5da8dSAndroid Build Coastguard Worker             '\n'
7038*cda5da8dSAndroid Build Coastguard Worker             '  **PEP 526** - Syntax for Variable Annotations\n'
7039*cda5da8dSAndroid Build Coastguard Worker             '     Ability to type hint variable declarations, including '
7040*cda5da8dSAndroid Build Coastguard Worker             'class\n'
7041*cda5da8dSAndroid Build Coastguard Worker             '     variables and instance variables\n'
7042*cda5da8dSAndroid Build Coastguard Worker             '\n'
7043*cda5da8dSAndroid Build Coastguard Worker             '  **PEP 563** - Postponed Evaluation of Annotations\n'
7044*cda5da8dSAndroid Build Coastguard Worker             '     Support for forward references within annotations by '
7045*cda5da8dSAndroid Build Coastguard Worker             'preserving\n'
7046*cda5da8dSAndroid Build Coastguard Worker             '     annotations in a string form at runtime instead of eager\n'
7047*cda5da8dSAndroid Build Coastguard Worker             '     evaluation.\n',
7048*cda5da8dSAndroid Build Coastguard Worker 'global': 'The "global" statement\n'
7049*cda5da8dSAndroid Build Coastguard Worker           '**********************\n'
7050*cda5da8dSAndroid Build Coastguard Worker           '\n'
7051*cda5da8dSAndroid Build Coastguard Worker           '   global_stmt ::= "global" identifier ("," identifier)*\n'
7052*cda5da8dSAndroid Build Coastguard Worker           '\n'
7053*cda5da8dSAndroid Build Coastguard Worker           'The "global" statement is a declaration which holds for the '
7054*cda5da8dSAndroid Build Coastguard Worker           'entire\n'
7055*cda5da8dSAndroid Build Coastguard Worker           'current code block.  It means that the listed identifiers are to '
7056*cda5da8dSAndroid Build Coastguard Worker           'be\n'
7057*cda5da8dSAndroid Build Coastguard Worker           'interpreted as globals.  It would be impossible to assign to a '
7058*cda5da8dSAndroid Build Coastguard Worker           'global\n'
7059*cda5da8dSAndroid Build Coastguard Worker           'variable without "global", although free variables may refer to\n'
7060*cda5da8dSAndroid Build Coastguard Worker           'globals without being declared global.\n'
7061*cda5da8dSAndroid Build Coastguard Worker           '\n'
7062*cda5da8dSAndroid Build Coastguard Worker           'Names listed in a "global" statement must not be used in the same '
7063*cda5da8dSAndroid Build Coastguard Worker           'code\n'
7064*cda5da8dSAndroid Build Coastguard Worker           'block textually preceding that "global" statement.\n'
7065*cda5da8dSAndroid Build Coastguard Worker           '\n'
7066*cda5da8dSAndroid Build Coastguard Worker           'Names listed in a "global" statement must not be defined as '
7067*cda5da8dSAndroid Build Coastguard Worker           'formal\n'
7068*cda5da8dSAndroid Build Coastguard Worker           'parameters, or as targets in "with" statements or "except" '
7069*cda5da8dSAndroid Build Coastguard Worker           'clauses, or\n'
7070*cda5da8dSAndroid Build Coastguard Worker           'in a "for" target list, "class" definition, function definition,\n'
7071*cda5da8dSAndroid Build Coastguard Worker           '"import" statement, or variable annotation.\n'
7072*cda5da8dSAndroid Build Coastguard Worker           '\n'
7073*cda5da8dSAndroid Build Coastguard Worker           '**CPython implementation detail:** The current implementation does '
7074*cda5da8dSAndroid Build Coastguard Worker           'not\n'
7075*cda5da8dSAndroid Build Coastguard Worker           'enforce some of these restrictions, but programs should not abuse '
7076*cda5da8dSAndroid Build Coastguard Worker           'this\n'
7077*cda5da8dSAndroid Build Coastguard Worker           'freedom, as future implementations may enforce them or silently '
7078*cda5da8dSAndroid Build Coastguard Worker           'change\n'
7079*cda5da8dSAndroid Build Coastguard Worker           'the meaning of the program.\n'
7080*cda5da8dSAndroid Build Coastguard Worker           '\n'
7081*cda5da8dSAndroid Build Coastguard Worker           '**Programmer’s note:** "global" is a directive to the parser.  It\n'
7082*cda5da8dSAndroid Build Coastguard Worker           'applies only to code parsed at the same time as the "global"\n'
7083*cda5da8dSAndroid Build Coastguard Worker           'statement. In particular, a "global" statement contained in a '
7084*cda5da8dSAndroid Build Coastguard Worker           'string\n'
7085*cda5da8dSAndroid Build Coastguard Worker           'or code object supplied to the built-in "exec()" function does '
7086*cda5da8dSAndroid Build Coastguard Worker           'not\n'
7087*cda5da8dSAndroid Build Coastguard Worker           'affect the code block *containing* the function call, and code\n'
7088*cda5da8dSAndroid Build Coastguard Worker           'contained in such a string is unaffected by "global" statements in '
7089*cda5da8dSAndroid Build Coastguard Worker           'the\n'
7090*cda5da8dSAndroid Build Coastguard Worker           'code containing the function call.  The same applies to the '
7091*cda5da8dSAndroid Build Coastguard Worker           '"eval()"\n'
7092*cda5da8dSAndroid Build Coastguard Worker           'and "compile()" functions.\n',
7093*cda5da8dSAndroid Build Coastguard Worker 'id-classes': 'Reserved classes of identifiers\n'
7094*cda5da8dSAndroid Build Coastguard Worker               '*******************************\n'
7095*cda5da8dSAndroid Build Coastguard Worker               '\n'
7096*cda5da8dSAndroid Build Coastguard Worker               'Certain classes of identifiers (besides keywords) have '
7097*cda5da8dSAndroid Build Coastguard Worker               'special\n'
7098*cda5da8dSAndroid Build Coastguard Worker               'meanings.  These classes are identified by the patterns of '
7099*cda5da8dSAndroid Build Coastguard Worker               'leading and\n'
7100*cda5da8dSAndroid Build Coastguard Worker               'trailing underscore characters:\n'
7101*cda5da8dSAndroid Build Coastguard Worker               '\n'
7102*cda5da8dSAndroid Build Coastguard Worker               '"_*"\n'
7103*cda5da8dSAndroid Build Coastguard Worker               '   Not imported by "from module import *".\n'
7104*cda5da8dSAndroid Build Coastguard Worker               '\n'
7105*cda5da8dSAndroid Build Coastguard Worker               '"_"\n'
7106*cda5da8dSAndroid Build Coastguard Worker               '   In a "case" pattern within a "match" statement, "_" is a '
7107*cda5da8dSAndroid Build Coastguard Worker               'soft\n'
7108*cda5da8dSAndroid Build Coastguard Worker               '   keyword that denotes a wildcard.\n'
7109*cda5da8dSAndroid Build Coastguard Worker               '\n'
7110*cda5da8dSAndroid Build Coastguard Worker               '   Separately, the interactive interpreter makes the result of '
7111*cda5da8dSAndroid Build Coastguard Worker               'the\n'
7112*cda5da8dSAndroid Build Coastguard Worker               '   last evaluation available in the variable "_". (It is '
7113*cda5da8dSAndroid Build Coastguard Worker               'stored in the\n'
7114*cda5da8dSAndroid Build Coastguard Worker               '   "builtins" module, alongside built-in functions like '
7115*cda5da8dSAndroid Build Coastguard Worker               '"print".)\n'
7116*cda5da8dSAndroid Build Coastguard Worker               '\n'
7117*cda5da8dSAndroid Build Coastguard Worker               '   Elsewhere, "_" is a regular identifier. It is often used to '
7118*cda5da8dSAndroid Build Coastguard Worker               'name\n'
7119*cda5da8dSAndroid Build Coastguard Worker               '   “special” items, but it is not special to Python itself.\n'
7120*cda5da8dSAndroid Build Coastguard Worker               '\n'
7121*cda5da8dSAndroid Build Coastguard Worker               '   Note:\n'
7122*cda5da8dSAndroid Build Coastguard Worker               '\n'
7123*cda5da8dSAndroid Build Coastguard Worker               '     The name "_" is often used in conjunction with\n'
7124*cda5da8dSAndroid Build Coastguard Worker               '     internationalization; refer to the documentation for the\n'
7125*cda5da8dSAndroid Build Coastguard Worker               '     "gettext" module for more information on this '
7126*cda5da8dSAndroid Build Coastguard Worker               'convention.It is\n'
7127*cda5da8dSAndroid Build Coastguard Worker               '     also commonly used for unused variables.\n'
7128*cda5da8dSAndroid Build Coastguard Worker               '\n'
7129*cda5da8dSAndroid Build Coastguard Worker               '"__*__"\n'
7130*cda5da8dSAndroid Build Coastguard Worker               '   System-defined names, informally known as “dunder” names. '
7131*cda5da8dSAndroid Build Coastguard Worker               'These\n'
7132*cda5da8dSAndroid Build Coastguard Worker               '   names are defined by the interpreter and its '
7133*cda5da8dSAndroid Build Coastguard Worker               'implementation\n'
7134*cda5da8dSAndroid Build Coastguard Worker               '   (including the standard library). Current system names are\n'
7135*cda5da8dSAndroid Build Coastguard Worker               '   discussed in the Special method names section and '
7136*cda5da8dSAndroid Build Coastguard Worker               'elsewhere. More\n'
7137*cda5da8dSAndroid Build Coastguard Worker               '   will likely be defined in future versions of Python.  *Any* '
7138*cda5da8dSAndroid Build Coastguard Worker               'use of\n'
7139*cda5da8dSAndroid Build Coastguard Worker               '   "__*__" names, in any context, that does not follow '
7140*cda5da8dSAndroid Build Coastguard Worker               'explicitly\n'
7141*cda5da8dSAndroid Build Coastguard Worker               '   documented use, is subject to breakage without warning.\n'
7142*cda5da8dSAndroid Build Coastguard Worker               '\n'
7143*cda5da8dSAndroid Build Coastguard Worker               '"__*"\n'
7144*cda5da8dSAndroid Build Coastguard Worker               '   Class-private names.  Names in this category, when used '
7145*cda5da8dSAndroid Build Coastguard Worker               'within the\n'
7146*cda5da8dSAndroid Build Coastguard Worker               '   context of a class definition, are re-written to use a '
7147*cda5da8dSAndroid Build Coastguard Worker               'mangled form\n'
7148*cda5da8dSAndroid Build Coastguard Worker               '   to help avoid name clashes between “private” attributes of '
7149*cda5da8dSAndroid Build Coastguard Worker               'base and\n'
7150*cda5da8dSAndroid Build Coastguard Worker               '   derived classes. See section Identifiers (Names).\n',
7151*cda5da8dSAndroid Build Coastguard Worker 'identifiers': 'Identifiers and keywords\n'
7152*cda5da8dSAndroid Build Coastguard Worker                '************************\n'
7153*cda5da8dSAndroid Build Coastguard Worker                '\n'
7154*cda5da8dSAndroid Build Coastguard Worker                'Identifiers (also referred to as *names*) are described by '
7155*cda5da8dSAndroid Build Coastguard Worker                'the\n'
7156*cda5da8dSAndroid Build Coastguard Worker                'following lexical definitions.\n'
7157*cda5da8dSAndroid Build Coastguard Worker                '\n'
7158*cda5da8dSAndroid Build Coastguard Worker                'The syntax of identifiers in Python is based on the Unicode '
7159*cda5da8dSAndroid Build Coastguard Worker                'standard\n'
7160*cda5da8dSAndroid Build Coastguard Worker                'annex UAX-31, with elaboration and changes as defined below; '
7161*cda5da8dSAndroid Build Coastguard Worker                'see also\n'
7162*cda5da8dSAndroid Build Coastguard Worker                '**PEP 3131** for further details.\n'
7163*cda5da8dSAndroid Build Coastguard Worker                '\n'
7164*cda5da8dSAndroid Build Coastguard Worker                'Within the ASCII range (U+0001..U+007F), the valid characters '
7165*cda5da8dSAndroid Build Coastguard Worker                'for\n'
7166*cda5da8dSAndroid Build Coastguard Worker                'identifiers are the same as in Python 2.x: the uppercase and '
7167*cda5da8dSAndroid Build Coastguard Worker                'lowercase\n'
7168*cda5da8dSAndroid Build Coastguard Worker                'letters "A" through "Z", the underscore "_" and, except for '
7169*cda5da8dSAndroid Build Coastguard Worker                'the first\n'
7170*cda5da8dSAndroid Build Coastguard Worker                'character, the digits "0" through "9".\n'
7171*cda5da8dSAndroid Build Coastguard Worker                '\n'
7172*cda5da8dSAndroid Build Coastguard Worker                'Python 3.0 introduces additional characters from outside the '
7173*cda5da8dSAndroid Build Coastguard Worker                'ASCII\n'
7174*cda5da8dSAndroid Build Coastguard Worker                'range (see **PEP 3131**).  For these characters, the '
7175*cda5da8dSAndroid Build Coastguard Worker                'classification\n'
7176*cda5da8dSAndroid Build Coastguard Worker                'uses the version of the Unicode Character Database as '
7177*cda5da8dSAndroid Build Coastguard Worker                'included in the\n'
7178*cda5da8dSAndroid Build Coastguard Worker                '"unicodedata" module.\n'
7179*cda5da8dSAndroid Build Coastguard Worker                '\n'
7180*cda5da8dSAndroid Build Coastguard Worker                'Identifiers are unlimited in length.  Case is significant.\n'
7181*cda5da8dSAndroid Build Coastguard Worker                '\n'
7182*cda5da8dSAndroid Build Coastguard Worker                '   identifier   ::= xid_start xid_continue*\n'
7183*cda5da8dSAndroid Build Coastguard Worker                '   id_start     ::= <all characters in general categories Lu, '
7184*cda5da8dSAndroid Build Coastguard Worker                'Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the '
7185*cda5da8dSAndroid Build Coastguard Worker                'Other_ID_Start property>\n'
7186*cda5da8dSAndroid Build Coastguard Worker                '   id_continue  ::= <all characters in id_start, plus '
7187*cda5da8dSAndroid Build Coastguard Worker                'characters in the categories Mn, Mc, Nd, Pc and others with '
7188*cda5da8dSAndroid Build Coastguard Worker                'the Other_ID_Continue property>\n'
7189*cda5da8dSAndroid Build Coastguard Worker                '   xid_start    ::= <all characters in id_start whose NFKC '
7190*cda5da8dSAndroid Build Coastguard Worker                'normalization is in "id_start xid_continue*">\n'
7191*cda5da8dSAndroid Build Coastguard Worker                '   xid_continue ::= <all characters in id_continue whose NFKC '
7192*cda5da8dSAndroid Build Coastguard Worker                'normalization is in "id_continue*">\n'
7193*cda5da8dSAndroid Build Coastguard Worker                '\n'
7194*cda5da8dSAndroid Build Coastguard Worker                'The Unicode category codes mentioned above stand for:\n'
7195*cda5da8dSAndroid Build Coastguard Worker                '\n'
7196*cda5da8dSAndroid Build Coastguard Worker                '* *Lu* - uppercase letters\n'
7197*cda5da8dSAndroid Build Coastguard Worker                '\n'
7198*cda5da8dSAndroid Build Coastguard Worker                '* *Ll* - lowercase letters\n'
7199*cda5da8dSAndroid Build Coastguard Worker                '\n'
7200*cda5da8dSAndroid Build Coastguard Worker                '* *Lt* - titlecase letters\n'
7201*cda5da8dSAndroid Build Coastguard Worker                '\n'
7202*cda5da8dSAndroid Build Coastguard Worker                '* *Lm* - modifier letters\n'
7203*cda5da8dSAndroid Build Coastguard Worker                '\n'
7204*cda5da8dSAndroid Build Coastguard Worker                '* *Lo* - other letters\n'
7205*cda5da8dSAndroid Build Coastguard Worker                '\n'
7206*cda5da8dSAndroid Build Coastguard Worker                '* *Nl* - letter numbers\n'
7207*cda5da8dSAndroid Build Coastguard Worker                '\n'
7208*cda5da8dSAndroid Build Coastguard Worker                '* *Mn* - nonspacing marks\n'
7209*cda5da8dSAndroid Build Coastguard Worker                '\n'
7210*cda5da8dSAndroid Build Coastguard Worker                '* *Mc* - spacing combining marks\n'
7211*cda5da8dSAndroid Build Coastguard Worker                '\n'
7212*cda5da8dSAndroid Build Coastguard Worker                '* *Nd* - decimal numbers\n'
7213*cda5da8dSAndroid Build Coastguard Worker                '\n'
7214*cda5da8dSAndroid Build Coastguard Worker                '* *Pc* - connector punctuations\n'
7215*cda5da8dSAndroid Build Coastguard Worker                '\n'
7216*cda5da8dSAndroid Build Coastguard Worker                '* *Other_ID_Start* - explicit list of characters in '
7217*cda5da8dSAndroid Build Coastguard Worker                'PropList.txt to\n'
7218*cda5da8dSAndroid Build Coastguard Worker                '  support backwards compatibility\n'
7219*cda5da8dSAndroid Build Coastguard Worker                '\n'
7220*cda5da8dSAndroid Build Coastguard Worker                '* *Other_ID_Continue* - likewise\n'
7221*cda5da8dSAndroid Build Coastguard Worker                '\n'
7222*cda5da8dSAndroid Build Coastguard Worker                'All identifiers are converted into the normal form NFKC while '
7223*cda5da8dSAndroid Build Coastguard Worker                'parsing;\n'
7224*cda5da8dSAndroid Build Coastguard Worker                'comparison of identifiers is based on NFKC.\n'
7225*cda5da8dSAndroid Build Coastguard Worker                '\n'
7226*cda5da8dSAndroid Build Coastguard Worker                'A non-normative HTML file listing all valid identifier '
7227*cda5da8dSAndroid Build Coastguard Worker                'characters for\n'
7228*cda5da8dSAndroid Build Coastguard Worker                'Unicode 14.0.0 can be found at\n'
7229*cda5da8dSAndroid Build Coastguard Worker                'https://www.unicode.org/Public/14.0.0/ucd/DerivedCoreProperties.txt\n'
7230*cda5da8dSAndroid Build Coastguard Worker                '\n'
7231*cda5da8dSAndroid Build Coastguard Worker                '\n'
7232*cda5da8dSAndroid Build Coastguard Worker                'Keywords\n'
7233*cda5da8dSAndroid Build Coastguard Worker                '========\n'
7234*cda5da8dSAndroid Build Coastguard Worker                '\n'
7235*cda5da8dSAndroid Build Coastguard Worker                'The following identifiers are used as reserved words, or '
7236*cda5da8dSAndroid Build Coastguard Worker                '*keywords* of\n'
7237*cda5da8dSAndroid Build Coastguard Worker                'the language, and cannot be used as ordinary identifiers.  '
7238*cda5da8dSAndroid Build Coastguard Worker                'They must\n'
7239*cda5da8dSAndroid Build Coastguard Worker                'be spelled exactly as written here:\n'
7240*cda5da8dSAndroid Build Coastguard Worker                '\n'
7241*cda5da8dSAndroid Build Coastguard Worker                '   False      await      else       import     pass\n'
7242*cda5da8dSAndroid Build Coastguard Worker                '   None       break      except     in         raise\n'
7243*cda5da8dSAndroid Build Coastguard Worker                '   True       class      finally    is         return\n'
7244*cda5da8dSAndroid Build Coastguard Worker                '   and        continue   for        lambda     try\n'
7245*cda5da8dSAndroid Build Coastguard Worker                '   as         def        from       nonlocal   while\n'
7246*cda5da8dSAndroid Build Coastguard Worker                '   assert     del        global     not        with\n'
7247*cda5da8dSAndroid Build Coastguard Worker                '   async      elif       if         or         yield\n'
7248*cda5da8dSAndroid Build Coastguard Worker                '\n'
7249*cda5da8dSAndroid Build Coastguard Worker                '\n'
7250*cda5da8dSAndroid Build Coastguard Worker                'Soft Keywords\n'
7251*cda5da8dSAndroid Build Coastguard Worker                '=============\n'
7252*cda5da8dSAndroid Build Coastguard Worker                '\n'
7253*cda5da8dSAndroid Build Coastguard Worker                'New in version 3.10.\n'
7254*cda5da8dSAndroid Build Coastguard Worker                '\n'
7255*cda5da8dSAndroid Build Coastguard Worker                'Some identifiers are only reserved under specific contexts. '
7256*cda5da8dSAndroid Build Coastguard Worker                'These are\n'
7257*cda5da8dSAndroid Build Coastguard Worker                'known as *soft keywords*.  The identifiers "match", "case" '
7258*cda5da8dSAndroid Build Coastguard Worker                'and "_" can\n'
7259*cda5da8dSAndroid Build Coastguard Worker                'syntactically act as keywords in contexts related to the '
7260*cda5da8dSAndroid Build Coastguard Worker                'pattern\n'
7261*cda5da8dSAndroid Build Coastguard Worker                'matching statement, but this distinction is done at the '
7262*cda5da8dSAndroid Build Coastguard Worker                'parser level,\n'
7263*cda5da8dSAndroid Build Coastguard Worker                'not when tokenizing.\n'
7264*cda5da8dSAndroid Build Coastguard Worker                '\n'
7265*cda5da8dSAndroid Build Coastguard Worker                'As soft keywords, their use with pattern matching is possible '
7266*cda5da8dSAndroid Build Coastguard Worker                'while\n'
7267*cda5da8dSAndroid Build Coastguard Worker                'still preserving compatibility with existing code that uses '
7268*cda5da8dSAndroid Build Coastguard Worker                '"match",\n'
7269*cda5da8dSAndroid Build Coastguard Worker                '"case" and "_" as identifier names.\n'
7270*cda5da8dSAndroid Build Coastguard Worker                '\n'
7271*cda5da8dSAndroid Build Coastguard Worker                '\n'
7272*cda5da8dSAndroid Build Coastguard Worker                'Reserved classes of identifiers\n'
7273*cda5da8dSAndroid Build Coastguard Worker                '===============================\n'
7274*cda5da8dSAndroid Build Coastguard Worker                '\n'
7275*cda5da8dSAndroid Build Coastguard Worker                'Certain classes of identifiers (besides keywords) have '
7276*cda5da8dSAndroid Build Coastguard Worker                'special\n'
7277*cda5da8dSAndroid Build Coastguard Worker                'meanings.  These classes are identified by the patterns of '
7278*cda5da8dSAndroid Build Coastguard Worker                'leading and\n'
7279*cda5da8dSAndroid Build Coastguard Worker                'trailing underscore characters:\n'
7280*cda5da8dSAndroid Build Coastguard Worker                '\n'
7281*cda5da8dSAndroid Build Coastguard Worker                '"_*"\n'
7282*cda5da8dSAndroid Build Coastguard Worker                '   Not imported by "from module import *".\n'
7283*cda5da8dSAndroid Build Coastguard Worker                '\n'
7284*cda5da8dSAndroid Build Coastguard Worker                '"_"\n'
7285*cda5da8dSAndroid Build Coastguard Worker                '   In a "case" pattern within a "match" statement, "_" is a '
7286*cda5da8dSAndroid Build Coastguard Worker                'soft\n'
7287*cda5da8dSAndroid Build Coastguard Worker                '   keyword that denotes a wildcard.\n'
7288*cda5da8dSAndroid Build Coastguard Worker                '\n'
7289*cda5da8dSAndroid Build Coastguard Worker                '   Separately, the interactive interpreter makes the result '
7290*cda5da8dSAndroid Build Coastguard Worker                'of the\n'
7291*cda5da8dSAndroid Build Coastguard Worker                '   last evaluation available in the variable "_". (It is '
7292*cda5da8dSAndroid Build Coastguard Worker                'stored in the\n'
7293*cda5da8dSAndroid Build Coastguard Worker                '   "builtins" module, alongside built-in functions like '
7294*cda5da8dSAndroid Build Coastguard Worker                '"print".)\n'
7295*cda5da8dSAndroid Build Coastguard Worker                '\n'
7296*cda5da8dSAndroid Build Coastguard Worker                '   Elsewhere, "_" is a regular identifier. It is often used '
7297*cda5da8dSAndroid Build Coastguard Worker                'to name\n'
7298*cda5da8dSAndroid Build Coastguard Worker                '   “special” items, but it is not special to Python itself.\n'
7299*cda5da8dSAndroid Build Coastguard Worker                '\n'
7300*cda5da8dSAndroid Build Coastguard Worker                '   Note:\n'
7301*cda5da8dSAndroid Build Coastguard Worker                '\n'
7302*cda5da8dSAndroid Build Coastguard Worker                '     The name "_" is often used in conjunction with\n'
7303*cda5da8dSAndroid Build Coastguard Worker                '     internationalization; refer to the documentation for '
7304*cda5da8dSAndroid Build Coastguard Worker                'the\n'
7305*cda5da8dSAndroid Build Coastguard Worker                '     "gettext" module for more information on this '
7306*cda5da8dSAndroid Build Coastguard Worker                'convention.It is\n'
7307*cda5da8dSAndroid Build Coastguard Worker                '     also commonly used for unused variables.\n'
7308*cda5da8dSAndroid Build Coastguard Worker                '\n'
7309*cda5da8dSAndroid Build Coastguard Worker                '"__*__"\n'
7310*cda5da8dSAndroid Build Coastguard Worker                '   System-defined names, informally known as “dunder” names. '
7311*cda5da8dSAndroid Build Coastguard Worker                'These\n'
7312*cda5da8dSAndroid Build Coastguard Worker                '   names are defined by the interpreter and its '
7313*cda5da8dSAndroid Build Coastguard Worker                'implementation\n'
7314*cda5da8dSAndroid Build Coastguard Worker                '   (including the standard library). Current system names '
7315*cda5da8dSAndroid Build Coastguard Worker                'are\n'
7316*cda5da8dSAndroid Build Coastguard Worker                '   discussed in the Special method names section and '
7317*cda5da8dSAndroid Build Coastguard Worker                'elsewhere. More\n'
7318*cda5da8dSAndroid Build Coastguard Worker                '   will likely be defined in future versions of Python.  '
7319*cda5da8dSAndroid Build Coastguard Worker                '*Any* use of\n'
7320*cda5da8dSAndroid Build Coastguard Worker                '   "__*__" names, in any context, that does not follow '
7321*cda5da8dSAndroid Build Coastguard Worker                'explicitly\n'
7322*cda5da8dSAndroid Build Coastguard Worker                '   documented use, is subject to breakage without warning.\n'
7323*cda5da8dSAndroid Build Coastguard Worker                '\n'
7324*cda5da8dSAndroid Build Coastguard Worker                '"__*"\n'
7325*cda5da8dSAndroid Build Coastguard Worker                '   Class-private names.  Names in this category, when used '
7326*cda5da8dSAndroid Build Coastguard Worker                'within the\n'
7327*cda5da8dSAndroid Build Coastguard Worker                '   context of a class definition, are re-written to use a '
7328*cda5da8dSAndroid Build Coastguard Worker                'mangled form\n'
7329*cda5da8dSAndroid Build Coastguard Worker                '   to help avoid name clashes between “private” attributes of '
7330*cda5da8dSAndroid Build Coastguard Worker                'base and\n'
7331*cda5da8dSAndroid Build Coastguard Worker                '   derived classes. See section Identifiers (Names).\n',
7332*cda5da8dSAndroid Build Coastguard Worker 'if': 'The "if" statement\n'
7333*cda5da8dSAndroid Build Coastguard Worker       '******************\n'
7334*cda5da8dSAndroid Build Coastguard Worker       '\n'
7335*cda5da8dSAndroid Build Coastguard Worker       'The "if" statement is used for conditional execution:\n'
7336*cda5da8dSAndroid Build Coastguard Worker       '\n'
7337*cda5da8dSAndroid Build Coastguard Worker       '   if_stmt ::= "if" assignment_expression ":" suite\n'
7338*cda5da8dSAndroid Build Coastguard Worker       '               ("elif" assignment_expression ":" suite)*\n'
7339*cda5da8dSAndroid Build Coastguard Worker       '               ["else" ":" suite]\n'
7340*cda5da8dSAndroid Build Coastguard Worker       '\n'
7341*cda5da8dSAndroid Build Coastguard Worker       'It selects exactly one of the suites by evaluating the expressions '
7342*cda5da8dSAndroid Build Coastguard Worker       'one\n'
7343*cda5da8dSAndroid Build Coastguard Worker       'by one until one is found to be true (see section Boolean operations\n'
7344*cda5da8dSAndroid Build Coastguard Worker       'for the definition of true and false); then that suite is executed\n'
7345*cda5da8dSAndroid Build Coastguard Worker       '(and no other part of the "if" statement is executed or evaluated).\n'
7346*cda5da8dSAndroid Build Coastguard Worker       'If all expressions are false, the suite of the "else" clause, if\n'
7347*cda5da8dSAndroid Build Coastguard Worker       'present, is executed.\n',
7348*cda5da8dSAndroid Build Coastguard Worker 'imaginary': 'Imaginary literals\n'
7349*cda5da8dSAndroid Build Coastguard Worker              '******************\n'
7350*cda5da8dSAndroid Build Coastguard Worker              '\n'
7351*cda5da8dSAndroid Build Coastguard Worker              'Imaginary literals are described by the following lexical '
7352*cda5da8dSAndroid Build Coastguard Worker              'definitions:\n'
7353*cda5da8dSAndroid Build Coastguard Worker              '\n'
7354*cda5da8dSAndroid Build Coastguard Worker              '   imagnumber ::= (floatnumber | digitpart) ("j" | "J")\n'
7355*cda5da8dSAndroid Build Coastguard Worker              '\n'
7356*cda5da8dSAndroid Build Coastguard Worker              'An imaginary literal yields a complex number with a real part '
7357*cda5da8dSAndroid Build Coastguard Worker              'of 0.0.\n'
7358*cda5da8dSAndroid Build Coastguard Worker              'Complex numbers are represented as a pair of floating point '
7359*cda5da8dSAndroid Build Coastguard Worker              'numbers\n'
7360*cda5da8dSAndroid Build Coastguard Worker              'and have the same restrictions on their range.  To create a '
7361*cda5da8dSAndroid Build Coastguard Worker              'complex\n'
7362*cda5da8dSAndroid Build Coastguard Worker              'number with a nonzero real part, add a floating point number to '
7363*cda5da8dSAndroid Build Coastguard Worker              'it,\n'
7364*cda5da8dSAndroid Build Coastguard Worker              'e.g., "(3+4j)".  Some examples of imaginary literals:\n'
7365*cda5da8dSAndroid Build Coastguard Worker              '\n'
7366*cda5da8dSAndroid Build Coastguard Worker              '   3.14j   10.j    10j     .001j   1e100j   3.14e-10j   '
7367*cda5da8dSAndroid Build Coastguard Worker              '3.14_15_93j\n',
7368*cda5da8dSAndroid Build Coastguard Worker 'import': 'The "import" statement\n'
7369*cda5da8dSAndroid Build Coastguard Worker           '**********************\n'
7370*cda5da8dSAndroid Build Coastguard Worker           '\n'
7371*cda5da8dSAndroid Build Coastguard Worker           '   import_stmt     ::= "import" module ["as" identifier] ("," '
7372*cda5da8dSAndroid Build Coastguard Worker           'module ["as" identifier])*\n'
7373*cda5da8dSAndroid Build Coastguard Worker           '                   | "from" relative_module "import" identifier '
7374*cda5da8dSAndroid Build Coastguard Worker           '["as" identifier]\n'
7375*cda5da8dSAndroid Build Coastguard Worker           '                   ("," identifier ["as" identifier])*\n'
7376*cda5da8dSAndroid Build Coastguard Worker           '                   | "from" relative_module "import" "(" '
7377*cda5da8dSAndroid Build Coastguard Worker           'identifier ["as" identifier]\n'
7378*cda5da8dSAndroid Build Coastguard Worker           '                   ("," identifier ["as" identifier])* [","] ")"\n'
7379*cda5da8dSAndroid Build Coastguard Worker           '                   | "from" relative_module "import" "*"\n'
7380*cda5da8dSAndroid Build Coastguard Worker           '   module          ::= (identifier ".")* identifier\n'
7381*cda5da8dSAndroid Build Coastguard Worker           '   relative_module ::= "."* module | "."+\n'
7382*cda5da8dSAndroid Build Coastguard Worker           '\n'
7383*cda5da8dSAndroid Build Coastguard Worker           'The basic import statement (no "from" clause) is executed in two\n'
7384*cda5da8dSAndroid Build Coastguard Worker           'steps:\n'
7385*cda5da8dSAndroid Build Coastguard Worker           '\n'
7386*cda5da8dSAndroid Build Coastguard Worker           '1. find a module, loading and initializing it if necessary\n'
7387*cda5da8dSAndroid Build Coastguard Worker           '\n'
7388*cda5da8dSAndroid Build Coastguard Worker           '2. define a name or names in the local namespace for the scope '
7389*cda5da8dSAndroid Build Coastguard Worker           'where\n'
7390*cda5da8dSAndroid Build Coastguard Worker           '   the "import" statement occurs.\n'
7391*cda5da8dSAndroid Build Coastguard Worker           '\n'
7392*cda5da8dSAndroid Build Coastguard Worker           'When the statement contains multiple clauses (separated by commas) '
7393*cda5da8dSAndroid Build Coastguard Worker           'the\n'
7394*cda5da8dSAndroid Build Coastguard Worker           'two steps are carried out separately for each clause, just as '
7395*cda5da8dSAndroid Build Coastguard Worker           'though\n'
7396*cda5da8dSAndroid Build Coastguard Worker           'the clauses had been separated out into individual import '
7397*cda5da8dSAndroid Build Coastguard Worker           'statements.\n'
7398*cda5da8dSAndroid Build Coastguard Worker           '\n'
7399*cda5da8dSAndroid Build Coastguard Worker           'The details of the first step, finding and loading modules, are\n'
7400*cda5da8dSAndroid Build Coastguard Worker           'described in greater detail in the section on the import system, '
7401*cda5da8dSAndroid Build Coastguard Worker           'which\n'
7402*cda5da8dSAndroid Build Coastguard Worker           'also describes the various types of packages and modules that can '
7403*cda5da8dSAndroid Build Coastguard Worker           'be\n'
7404*cda5da8dSAndroid Build Coastguard Worker           'imported, as well as all the hooks that can be used to customize '
7405*cda5da8dSAndroid Build Coastguard Worker           'the\n'
7406*cda5da8dSAndroid Build Coastguard Worker           'import system. Note that failures in this step may indicate '
7407*cda5da8dSAndroid Build Coastguard Worker           'either\n'
7408*cda5da8dSAndroid Build Coastguard Worker           'that the module could not be located, *or* that an error occurred\n'
7409*cda5da8dSAndroid Build Coastguard Worker           'while initializing the module, which includes execution of the\n'
7410*cda5da8dSAndroid Build Coastguard Worker           'module’s code.\n'
7411*cda5da8dSAndroid Build Coastguard Worker           '\n'
7412*cda5da8dSAndroid Build Coastguard Worker           'If the requested module is retrieved successfully, it will be '
7413*cda5da8dSAndroid Build Coastguard Worker           'made\n'
7414*cda5da8dSAndroid Build Coastguard Worker           'available in the local namespace in one of three ways:\n'
7415*cda5da8dSAndroid Build Coastguard Worker           '\n'
7416*cda5da8dSAndroid Build Coastguard Worker           '* If the module name is followed by "as", then the name following '
7417*cda5da8dSAndroid Build Coastguard Worker           '"as"\n'
7418*cda5da8dSAndroid Build Coastguard Worker           '  is bound directly to the imported module.\n'
7419*cda5da8dSAndroid Build Coastguard Worker           '\n'
7420*cda5da8dSAndroid Build Coastguard Worker           '* If no other name is specified, and the module being imported is '
7421*cda5da8dSAndroid Build Coastguard Worker           'a\n'
7422*cda5da8dSAndroid Build Coastguard Worker           '  top level module, the module’s name is bound in the local '
7423*cda5da8dSAndroid Build Coastguard Worker           'namespace\n'
7424*cda5da8dSAndroid Build Coastguard Worker           '  as a reference to the imported module\n'
7425*cda5da8dSAndroid Build Coastguard Worker           '\n'
7426*cda5da8dSAndroid Build Coastguard Worker           '* If the module being imported is *not* a top level module, then '
7427*cda5da8dSAndroid Build Coastguard Worker           'the\n'
7428*cda5da8dSAndroid Build Coastguard Worker           '  name of the top level package that contains the module is bound '
7429*cda5da8dSAndroid Build Coastguard Worker           'in\n'
7430*cda5da8dSAndroid Build Coastguard Worker           '  the local namespace as a reference to the top level package. '
7431*cda5da8dSAndroid Build Coastguard Worker           'The\n'
7432*cda5da8dSAndroid Build Coastguard Worker           '  imported module must be accessed using its full qualified name\n'
7433*cda5da8dSAndroid Build Coastguard Worker           '  rather than directly\n'
7434*cda5da8dSAndroid Build Coastguard Worker           '\n'
7435*cda5da8dSAndroid Build Coastguard Worker           'The "from" form uses a slightly more complex process:\n'
7436*cda5da8dSAndroid Build Coastguard Worker           '\n'
7437*cda5da8dSAndroid Build Coastguard Worker           '1. find the module specified in the "from" clause, loading and\n'
7438*cda5da8dSAndroid Build Coastguard Worker           '   initializing it if necessary;\n'
7439*cda5da8dSAndroid Build Coastguard Worker           '\n'
7440*cda5da8dSAndroid Build Coastguard Worker           '2. for each of the identifiers specified in the "import" clauses:\n'
7441*cda5da8dSAndroid Build Coastguard Worker           '\n'
7442*cda5da8dSAndroid Build Coastguard Worker           '   1. check if the imported module has an attribute by that name\n'
7443*cda5da8dSAndroid Build Coastguard Worker           '\n'
7444*cda5da8dSAndroid Build Coastguard Worker           '   2. if not, attempt to import a submodule with that name and '
7445*cda5da8dSAndroid Build Coastguard Worker           'then\n'
7446*cda5da8dSAndroid Build Coastguard Worker           '      check the imported module again for that attribute\n'
7447*cda5da8dSAndroid Build Coastguard Worker           '\n'
7448*cda5da8dSAndroid Build Coastguard Worker           '   3. if the attribute is not found, "ImportError" is raised.\n'
7449*cda5da8dSAndroid Build Coastguard Worker           '\n'
7450*cda5da8dSAndroid Build Coastguard Worker           '   4. otherwise, a reference to that value is stored in the local\n'
7451*cda5da8dSAndroid Build Coastguard Worker           '      namespace, using the name in the "as" clause if it is '
7452*cda5da8dSAndroid Build Coastguard Worker           'present,\n'
7453*cda5da8dSAndroid Build Coastguard Worker           '      otherwise using the attribute name\n'
7454*cda5da8dSAndroid Build Coastguard Worker           '\n'
7455*cda5da8dSAndroid Build Coastguard Worker           'Examples:\n'
7456*cda5da8dSAndroid Build Coastguard Worker           '\n'
7457*cda5da8dSAndroid Build Coastguard Worker           '   import foo                 # foo imported and bound locally\n'
7458*cda5da8dSAndroid Build Coastguard Worker           '   import foo.bar.baz         # foo, foo.bar, and foo.bar.baz '
7459*cda5da8dSAndroid Build Coastguard Worker           'imported, foo bound locally\n'
7460*cda5da8dSAndroid Build Coastguard Worker           '   import foo.bar.baz as fbb  # foo, foo.bar, and foo.bar.baz '
7461*cda5da8dSAndroid Build Coastguard Worker           'imported, foo.bar.baz bound as fbb\n'
7462*cda5da8dSAndroid Build Coastguard Worker           '   from foo.bar import baz    # foo, foo.bar, and foo.bar.baz '
7463*cda5da8dSAndroid Build Coastguard Worker           'imported, foo.bar.baz bound as baz\n'
7464*cda5da8dSAndroid Build Coastguard Worker           '   from foo import attr       # foo imported and foo.attr bound as '
7465*cda5da8dSAndroid Build Coastguard Worker           'attr\n'
7466*cda5da8dSAndroid Build Coastguard Worker           '\n'
7467*cda5da8dSAndroid Build Coastguard Worker           'If the list of identifiers is replaced by a star ("\'*\'"), all '
7468*cda5da8dSAndroid Build Coastguard Worker           'public\n'
7469*cda5da8dSAndroid Build Coastguard Worker           'names defined in the module are bound in the local namespace for '
7470*cda5da8dSAndroid Build Coastguard Worker           'the\n'
7471*cda5da8dSAndroid Build Coastguard Worker           'scope where the "import" statement occurs.\n'
7472*cda5da8dSAndroid Build Coastguard Worker           '\n'
7473*cda5da8dSAndroid Build Coastguard Worker           'The *public names* defined by a module are determined by checking '
7474*cda5da8dSAndroid Build Coastguard Worker           'the\n'
7475*cda5da8dSAndroid Build Coastguard Worker           'module’s namespace for a variable named "__all__"; if defined, it '
7476*cda5da8dSAndroid Build Coastguard Worker           'must\n'
7477*cda5da8dSAndroid Build Coastguard Worker           'be a sequence of strings which are names defined or imported by '
7478*cda5da8dSAndroid Build Coastguard Worker           'that\n'
7479*cda5da8dSAndroid Build Coastguard Worker           'module.  The names given in "__all__" are all considered public '
7480*cda5da8dSAndroid Build Coastguard Worker           'and\n'
7481*cda5da8dSAndroid Build Coastguard Worker           'are required to exist.  If "__all__" is not defined, the set of '
7482*cda5da8dSAndroid Build Coastguard Worker           'public\n'
7483*cda5da8dSAndroid Build Coastguard Worker           'names includes all names found in the module’s namespace which do '
7484*cda5da8dSAndroid Build Coastguard Worker           'not\n'
7485*cda5da8dSAndroid Build Coastguard Worker           'begin with an underscore character ("\'_\'").  "__all__" should '
7486*cda5da8dSAndroid Build Coastguard Worker           'contain\n'
7487*cda5da8dSAndroid Build Coastguard Worker           'the entire public API. It is intended to avoid accidentally '
7488*cda5da8dSAndroid Build Coastguard Worker           'exporting\n'
7489*cda5da8dSAndroid Build Coastguard Worker           'items that are not part of the API (such as library modules which '
7490*cda5da8dSAndroid Build Coastguard Worker           'were\n'
7491*cda5da8dSAndroid Build Coastguard Worker           'imported and used within the module).\n'
7492*cda5da8dSAndroid Build Coastguard Worker           '\n'
7493*cda5da8dSAndroid Build Coastguard Worker           'The wild card form of import — "from module import *" — is only\n'
7494*cda5da8dSAndroid Build Coastguard Worker           'allowed at the module level.  Attempting to use it in class or\n'
7495*cda5da8dSAndroid Build Coastguard Worker           'function definitions will raise a "SyntaxError".\n'
7496*cda5da8dSAndroid Build Coastguard Worker           '\n'
7497*cda5da8dSAndroid Build Coastguard Worker           'When specifying what module to import you do not have to specify '
7498*cda5da8dSAndroid Build Coastguard Worker           'the\n'
7499*cda5da8dSAndroid Build Coastguard Worker           'absolute name of the module. When a module or package is '
7500*cda5da8dSAndroid Build Coastguard Worker           'contained\n'
7501*cda5da8dSAndroid Build Coastguard Worker           'within another package it is possible to make a relative import '
7502*cda5da8dSAndroid Build Coastguard Worker           'within\n'
7503*cda5da8dSAndroid Build Coastguard Worker           'the same top package without having to mention the package name. '
7504*cda5da8dSAndroid Build Coastguard Worker           'By\n'
7505*cda5da8dSAndroid Build Coastguard Worker           'using leading dots in the specified module or package after "from" '
7506*cda5da8dSAndroid Build Coastguard Worker           'you\n'
7507*cda5da8dSAndroid Build Coastguard Worker           'can specify how high to traverse up the current package hierarchy\n'
7508*cda5da8dSAndroid Build Coastguard Worker           'without specifying exact names. One leading dot means the current\n'
7509*cda5da8dSAndroid Build Coastguard Worker           'package where the module making the import exists. Two dots means '
7510*cda5da8dSAndroid Build Coastguard Worker           'up\n'
7511*cda5da8dSAndroid Build Coastguard Worker           'one package level. Three dots is up two levels, etc. So if you '
7512*cda5da8dSAndroid Build Coastguard Worker           'execute\n'
7513*cda5da8dSAndroid Build Coastguard Worker           '"from . import mod" from a module in the "pkg" package then you '
7514*cda5da8dSAndroid Build Coastguard Worker           'will\n'
7515*cda5da8dSAndroid Build Coastguard Worker           'end up importing "pkg.mod". If you execute "from ..subpkg2 import '
7516*cda5da8dSAndroid Build Coastguard Worker           'mod"\n'
7517*cda5da8dSAndroid Build Coastguard Worker           'from within "pkg.subpkg1" you will import "pkg.subpkg2.mod". The\n'
7518*cda5da8dSAndroid Build Coastguard Worker           'specification for relative imports is contained in the Package\n'
7519*cda5da8dSAndroid Build Coastguard Worker           'Relative Imports section.\n'
7520*cda5da8dSAndroid Build Coastguard Worker           '\n'
7521*cda5da8dSAndroid Build Coastguard Worker           '"importlib.import_module()" is provided to support applications '
7522*cda5da8dSAndroid Build Coastguard Worker           'that\n'
7523*cda5da8dSAndroid Build Coastguard Worker           'determine dynamically the modules to be loaded.\n'
7524*cda5da8dSAndroid Build Coastguard Worker           '\n'
7525*cda5da8dSAndroid Build Coastguard Worker           'Raises an auditing event "import" with arguments "module", '
7526*cda5da8dSAndroid Build Coastguard Worker           '"filename",\n'
7527*cda5da8dSAndroid Build Coastguard Worker           '"sys.path", "sys.meta_path", "sys.path_hooks".\n'
7528*cda5da8dSAndroid Build Coastguard Worker           '\n'
7529*cda5da8dSAndroid Build Coastguard Worker           '\n'
7530*cda5da8dSAndroid Build Coastguard Worker           'Future statements\n'
7531*cda5da8dSAndroid Build Coastguard Worker           '=================\n'
7532*cda5da8dSAndroid Build Coastguard Worker           '\n'
7533*cda5da8dSAndroid Build Coastguard Worker           'A *future statement* is a directive to the compiler that a '
7534*cda5da8dSAndroid Build Coastguard Worker           'particular\n'
7535*cda5da8dSAndroid Build Coastguard Worker           'module should be compiled using syntax or semantics that will be\n'
7536*cda5da8dSAndroid Build Coastguard Worker           'available in a specified future release of Python where the '
7537*cda5da8dSAndroid Build Coastguard Worker           'feature\n'
7538*cda5da8dSAndroid Build Coastguard Worker           'becomes standard.\n'
7539*cda5da8dSAndroid Build Coastguard Worker           '\n'
7540*cda5da8dSAndroid Build Coastguard Worker           'The future statement is intended to ease migration to future '
7541*cda5da8dSAndroid Build Coastguard Worker           'versions\n'
7542*cda5da8dSAndroid Build Coastguard Worker           'of Python that introduce incompatible changes to the language.  '
7543*cda5da8dSAndroid Build Coastguard Worker           'It\n'
7544*cda5da8dSAndroid Build Coastguard Worker           'allows use of the new features on a per-module basis before the\n'
7545*cda5da8dSAndroid Build Coastguard Worker           'release in which the feature becomes standard.\n'
7546*cda5da8dSAndroid Build Coastguard Worker           '\n'
7547*cda5da8dSAndroid Build Coastguard Worker           '   future_stmt ::= "from" "__future__" "import" feature ["as" '
7548*cda5da8dSAndroid Build Coastguard Worker           'identifier]\n'
7549*cda5da8dSAndroid Build Coastguard Worker           '                   ("," feature ["as" identifier])*\n'
7550*cda5da8dSAndroid Build Coastguard Worker           '                   | "from" "__future__" "import" "(" feature '
7551*cda5da8dSAndroid Build Coastguard Worker           '["as" identifier]\n'
7552*cda5da8dSAndroid Build Coastguard Worker           '                   ("," feature ["as" identifier])* [","] ")"\n'
7553*cda5da8dSAndroid Build Coastguard Worker           '   feature     ::= identifier\n'
7554*cda5da8dSAndroid Build Coastguard Worker           '\n'
7555*cda5da8dSAndroid Build Coastguard Worker           'A future statement must appear near the top of the module.  The '
7556*cda5da8dSAndroid Build Coastguard Worker           'only\n'
7557*cda5da8dSAndroid Build Coastguard Worker           'lines that can appear before a future statement are:\n'
7558*cda5da8dSAndroid Build Coastguard Worker           '\n'
7559*cda5da8dSAndroid Build Coastguard Worker           '* the module docstring (if any),\n'
7560*cda5da8dSAndroid Build Coastguard Worker           '\n'
7561*cda5da8dSAndroid Build Coastguard Worker           '* comments,\n'
7562*cda5da8dSAndroid Build Coastguard Worker           '\n'
7563*cda5da8dSAndroid Build Coastguard Worker           '* blank lines, and\n'
7564*cda5da8dSAndroid Build Coastguard Worker           '\n'
7565*cda5da8dSAndroid Build Coastguard Worker           '* other future statements.\n'
7566*cda5da8dSAndroid Build Coastguard Worker           '\n'
7567*cda5da8dSAndroid Build Coastguard Worker           'The only feature that requires using the future statement is\n'
7568*cda5da8dSAndroid Build Coastguard Worker           '"annotations" (see **PEP 563**).\n'
7569*cda5da8dSAndroid Build Coastguard Worker           '\n'
7570*cda5da8dSAndroid Build Coastguard Worker           'All historical features enabled by the future statement are still\n'
7571*cda5da8dSAndroid Build Coastguard Worker           'recognized by Python 3.  The list includes "absolute_import",\n'
7572*cda5da8dSAndroid Build Coastguard Worker           '"division", "generators", "generator_stop", "unicode_literals",\n'
7573*cda5da8dSAndroid Build Coastguard Worker           '"print_function", "nested_scopes" and "with_statement".  They are '
7574*cda5da8dSAndroid Build Coastguard Worker           'all\n'
7575*cda5da8dSAndroid Build Coastguard Worker           'redundant because they are always enabled, and only kept for '
7576*cda5da8dSAndroid Build Coastguard Worker           'backwards\n'
7577*cda5da8dSAndroid Build Coastguard Worker           'compatibility.\n'
7578*cda5da8dSAndroid Build Coastguard Worker           '\n'
7579*cda5da8dSAndroid Build Coastguard Worker           'A future statement is recognized and treated specially at compile\n'
7580*cda5da8dSAndroid Build Coastguard Worker           'time: Changes to the semantics of core constructs are often\n'
7581*cda5da8dSAndroid Build Coastguard Worker           'implemented by generating different code.  It may even be the '
7582*cda5da8dSAndroid Build Coastguard Worker           'case\n'
7583*cda5da8dSAndroid Build Coastguard Worker           'that a new feature introduces new incompatible syntax (such as a '
7584*cda5da8dSAndroid Build Coastguard Worker           'new\n'
7585*cda5da8dSAndroid Build Coastguard Worker           'reserved word), in which case the compiler may need to parse the\n'
7586*cda5da8dSAndroid Build Coastguard Worker           'module differently.  Such decisions cannot be pushed off until\n'
7587*cda5da8dSAndroid Build Coastguard Worker           'runtime.\n'
7588*cda5da8dSAndroid Build Coastguard Worker           '\n'
7589*cda5da8dSAndroid Build Coastguard Worker           'For any given release, the compiler knows which feature names '
7590*cda5da8dSAndroid Build Coastguard Worker           'have\n'
7591*cda5da8dSAndroid Build Coastguard Worker           'been defined, and raises a compile-time error if a future '
7592*cda5da8dSAndroid Build Coastguard Worker           'statement\n'
7593*cda5da8dSAndroid Build Coastguard Worker           'contains a feature not known to it.\n'
7594*cda5da8dSAndroid Build Coastguard Worker           '\n'
7595*cda5da8dSAndroid Build Coastguard Worker           'The direct runtime semantics are the same as for any import '
7596*cda5da8dSAndroid Build Coastguard Worker           'statement:\n'
7597*cda5da8dSAndroid Build Coastguard Worker           'there is a standard module "__future__", described later, and it '
7598*cda5da8dSAndroid Build Coastguard Worker           'will\n'
7599*cda5da8dSAndroid Build Coastguard Worker           'be imported in the usual way at the time the future statement is\n'
7600*cda5da8dSAndroid Build Coastguard Worker           'executed.\n'
7601*cda5da8dSAndroid Build Coastguard Worker           '\n'
7602*cda5da8dSAndroid Build Coastguard Worker           'The interesting runtime semantics depend on the specific feature\n'
7603*cda5da8dSAndroid Build Coastguard Worker           'enabled by the future statement.\n'
7604*cda5da8dSAndroid Build Coastguard Worker           '\n'
7605*cda5da8dSAndroid Build Coastguard Worker           'Note that there is nothing special about the statement:\n'
7606*cda5da8dSAndroid Build Coastguard Worker           '\n'
7607*cda5da8dSAndroid Build Coastguard Worker           '   import __future__ [as name]\n'
7608*cda5da8dSAndroid Build Coastguard Worker           '\n'
7609*cda5da8dSAndroid Build Coastguard Worker           'That is not a future statement; it’s an ordinary import statement '
7610*cda5da8dSAndroid Build Coastguard Worker           'with\n'
7611*cda5da8dSAndroid Build Coastguard Worker           'no special semantics or syntax restrictions.\n'
7612*cda5da8dSAndroid Build Coastguard Worker           '\n'
7613*cda5da8dSAndroid Build Coastguard Worker           'Code compiled by calls to the built-in functions "exec()" and\n'
7614*cda5da8dSAndroid Build Coastguard Worker           '"compile()" that occur in a module "M" containing a future '
7615*cda5da8dSAndroid Build Coastguard Worker           'statement\n'
7616*cda5da8dSAndroid Build Coastguard Worker           'will, by default, use the new syntax or semantics associated with '
7617*cda5da8dSAndroid Build Coastguard Worker           'the\n'
7618*cda5da8dSAndroid Build Coastguard Worker           'future statement.  This can be controlled by optional arguments '
7619*cda5da8dSAndroid Build Coastguard Worker           'to\n'
7620*cda5da8dSAndroid Build Coastguard Worker           '"compile()" — see the documentation of that function for details.\n'
7621*cda5da8dSAndroid Build Coastguard Worker           '\n'
7622*cda5da8dSAndroid Build Coastguard Worker           'A future statement typed at an interactive interpreter prompt '
7623*cda5da8dSAndroid Build Coastguard Worker           'will\n'
7624*cda5da8dSAndroid Build Coastguard Worker           'take effect for the rest of the interpreter session.  If an\n'
7625*cda5da8dSAndroid Build Coastguard Worker           'interpreter is started with the "-i" option, is passed a script '
7626*cda5da8dSAndroid Build Coastguard Worker           'name\n'
7627*cda5da8dSAndroid Build Coastguard Worker           'to execute, and the script includes a future statement, it will be '
7628*cda5da8dSAndroid Build Coastguard Worker           'in\n'
7629*cda5da8dSAndroid Build Coastguard Worker           'effect in the interactive session started after the script is\n'
7630*cda5da8dSAndroid Build Coastguard Worker           'executed.\n'
7631*cda5da8dSAndroid Build Coastguard Worker           '\n'
7632*cda5da8dSAndroid Build Coastguard Worker           'See also:\n'
7633*cda5da8dSAndroid Build Coastguard Worker           '\n'
7634*cda5da8dSAndroid Build Coastguard Worker           '  **PEP 236** - Back to the __future__\n'
7635*cda5da8dSAndroid Build Coastguard Worker           '     The original proposal for the __future__ mechanism.\n',
7636*cda5da8dSAndroid Build Coastguard Worker 'in': 'Membership test operations\n'
7637*cda5da8dSAndroid Build Coastguard Worker       '**************************\n'
7638*cda5da8dSAndroid Build Coastguard Worker       '\n'
7639*cda5da8dSAndroid Build Coastguard Worker       'The operators "in" and "not in" test for membership.  "x in s"\n'
7640*cda5da8dSAndroid Build Coastguard Worker       'evaluates to "True" if *x* is a member of *s*, and "False" otherwise.\n'
7641*cda5da8dSAndroid Build Coastguard Worker       '"x not in s" returns the negation of "x in s".  All built-in '
7642*cda5da8dSAndroid Build Coastguard Worker       'sequences\n'
7643*cda5da8dSAndroid Build Coastguard Worker       'and set types support this as well as dictionary, for which "in" '
7644*cda5da8dSAndroid Build Coastguard Worker       'tests\n'
7645*cda5da8dSAndroid Build Coastguard Worker       'whether the dictionary has a given key. For container types such as\n'
7646*cda5da8dSAndroid Build Coastguard Worker       'list, tuple, set, frozenset, dict, or collections.deque, the\n'
7647*cda5da8dSAndroid Build Coastguard Worker       'expression "x in y" is equivalent to "any(x is e or x == e for e in\n'
7648*cda5da8dSAndroid Build Coastguard Worker       'y)".\n'
7649*cda5da8dSAndroid Build Coastguard Worker       '\n'
7650*cda5da8dSAndroid Build Coastguard Worker       'For the string and bytes types, "x in y" is "True" if and only if *x*\n'
7651*cda5da8dSAndroid Build Coastguard Worker       'is a substring of *y*.  An equivalent test is "y.find(x) != -1".\n'
7652*cda5da8dSAndroid Build Coastguard Worker       'Empty strings are always considered to be a substring of any other\n'
7653*cda5da8dSAndroid Build Coastguard Worker       'string, so """ in "abc"" will return "True".\n'
7654*cda5da8dSAndroid Build Coastguard Worker       '\n'
7655*cda5da8dSAndroid Build Coastguard Worker       'For user-defined classes which define the "__contains__()" method, "x\n'
7656*cda5da8dSAndroid Build Coastguard Worker       'in y" returns "True" if "y.__contains__(x)" returns a true value, and\n'
7657*cda5da8dSAndroid Build Coastguard Worker       '"False" otherwise.\n'
7658*cda5da8dSAndroid Build Coastguard Worker       '\n'
7659*cda5da8dSAndroid Build Coastguard Worker       'For user-defined classes which do not define "__contains__()" but do\n'
7660*cda5da8dSAndroid Build Coastguard Worker       'define "__iter__()", "x in y" is "True" if some value "z", for which\n'
7661*cda5da8dSAndroid Build Coastguard Worker       'the expression "x is z or x == z" is true, is produced while '
7662*cda5da8dSAndroid Build Coastguard Worker       'iterating\n'
7663*cda5da8dSAndroid Build Coastguard Worker       'over "y". If an exception is raised during the iteration, it is as if\n'
7664*cda5da8dSAndroid Build Coastguard Worker       '"in" raised that exception.\n'
7665*cda5da8dSAndroid Build Coastguard Worker       '\n'
7666*cda5da8dSAndroid Build Coastguard Worker       'Lastly, the old-style iteration protocol is tried: if a class defines\n'
7667*cda5da8dSAndroid Build Coastguard Worker       '"__getitem__()", "x in y" is "True" if and only if there is a non-\n'
7668*cda5da8dSAndroid Build Coastguard Worker       'negative integer index *i* such that "x is y[i] or x == y[i]", and no\n'
7669*cda5da8dSAndroid Build Coastguard Worker       'lower integer index raises the "IndexError" exception.  (If any other\n'
7670*cda5da8dSAndroid Build Coastguard Worker       'exception is raised, it is as if "in" raised that exception).\n'
7671*cda5da8dSAndroid Build Coastguard Worker       '\n'
7672*cda5da8dSAndroid Build Coastguard Worker       'The operator "not in" is defined to have the inverse truth value of\n'
7673*cda5da8dSAndroid Build Coastguard Worker       '"in".\n',
7674*cda5da8dSAndroid Build Coastguard Worker 'integers': 'Integer literals\n'
7675*cda5da8dSAndroid Build Coastguard Worker             '****************\n'
7676*cda5da8dSAndroid Build Coastguard Worker             '\n'
7677*cda5da8dSAndroid Build Coastguard Worker             'Integer literals are described by the following lexical '
7678*cda5da8dSAndroid Build Coastguard Worker             'definitions:\n'
7679*cda5da8dSAndroid Build Coastguard Worker             '\n'
7680*cda5da8dSAndroid Build Coastguard Worker             '   integer      ::= decinteger | bininteger | octinteger | '
7681*cda5da8dSAndroid Build Coastguard Worker             'hexinteger\n'
7682*cda5da8dSAndroid Build Coastguard Worker             '   decinteger   ::= nonzerodigit (["_"] digit)* | "0"+ (["_"] '
7683*cda5da8dSAndroid Build Coastguard Worker             '"0")*\n'
7684*cda5da8dSAndroid Build Coastguard Worker             '   bininteger   ::= "0" ("b" | "B") (["_"] bindigit)+\n'
7685*cda5da8dSAndroid Build Coastguard Worker             '   octinteger   ::= "0" ("o" | "O") (["_"] octdigit)+\n'
7686*cda5da8dSAndroid Build Coastguard Worker             '   hexinteger   ::= "0" ("x" | "X") (["_"] hexdigit)+\n'
7687*cda5da8dSAndroid Build Coastguard Worker             '   nonzerodigit ::= "1"..."9"\n'
7688*cda5da8dSAndroid Build Coastguard Worker             '   digit        ::= "0"..."9"\n'
7689*cda5da8dSAndroid Build Coastguard Worker             '   bindigit     ::= "0" | "1"\n'
7690*cda5da8dSAndroid Build Coastguard Worker             '   octdigit     ::= "0"..."7"\n'
7691*cda5da8dSAndroid Build Coastguard Worker             '   hexdigit     ::= digit | "a"..."f" | "A"..."F"\n'
7692*cda5da8dSAndroid Build Coastguard Worker             '\n'
7693*cda5da8dSAndroid Build Coastguard Worker             'There is no limit for the length of integer literals apart from '
7694*cda5da8dSAndroid Build Coastguard Worker             'what\n'
7695*cda5da8dSAndroid Build Coastguard Worker             'can be stored in available memory.\n'
7696*cda5da8dSAndroid Build Coastguard Worker             '\n'
7697*cda5da8dSAndroid Build Coastguard Worker             'Underscores are ignored for determining the numeric value of '
7698*cda5da8dSAndroid Build Coastguard Worker             'the\n'
7699*cda5da8dSAndroid Build Coastguard Worker             'literal.  They can be used to group digits for enhanced '
7700*cda5da8dSAndroid Build Coastguard Worker             'readability.\n'
7701*cda5da8dSAndroid Build Coastguard Worker             'One underscore can occur between digits, and after base '
7702*cda5da8dSAndroid Build Coastguard Worker             'specifiers\n'
7703*cda5da8dSAndroid Build Coastguard Worker             'like "0x".\n'
7704*cda5da8dSAndroid Build Coastguard Worker             '\n'
7705*cda5da8dSAndroid Build Coastguard Worker             'Note that leading zeros in a non-zero decimal number are not '
7706*cda5da8dSAndroid Build Coastguard Worker             'allowed.\n'
7707*cda5da8dSAndroid Build Coastguard Worker             'This is for disambiguation with C-style octal literals, which '
7708*cda5da8dSAndroid Build Coastguard Worker             'Python\n'
7709*cda5da8dSAndroid Build Coastguard Worker             'used before version 3.0.\n'
7710*cda5da8dSAndroid Build Coastguard Worker             '\n'
7711*cda5da8dSAndroid Build Coastguard Worker             'Some examples of integer literals:\n'
7712*cda5da8dSAndroid Build Coastguard Worker             '\n'
7713*cda5da8dSAndroid Build Coastguard Worker             '   7     2147483647                        0o177    0b100110111\n'
7714*cda5da8dSAndroid Build Coastguard Worker             '   3     79228162514264337593543950336     0o377    0xdeadbeef\n'
7715*cda5da8dSAndroid Build Coastguard Worker             '         100_000_000_000                   0b_1110_0101\n'
7716*cda5da8dSAndroid Build Coastguard Worker             '\n'
7717*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.6: Underscores are now allowed for '
7718*cda5da8dSAndroid Build Coastguard Worker             'grouping\n'
7719*cda5da8dSAndroid Build Coastguard Worker             'purposes in literals.\n',
7720*cda5da8dSAndroid Build Coastguard Worker 'lambda': 'Lambdas\n'
7721*cda5da8dSAndroid Build Coastguard Worker           '*******\n'
7722*cda5da8dSAndroid Build Coastguard Worker           '\n'
7723*cda5da8dSAndroid Build Coastguard Worker           '   lambda_expr ::= "lambda" [parameter_list] ":" expression\n'
7724*cda5da8dSAndroid Build Coastguard Worker           '\n'
7725*cda5da8dSAndroid Build Coastguard Worker           'Lambda expressions (sometimes called lambda forms) are used to '
7726*cda5da8dSAndroid Build Coastguard Worker           'create\n'
7727*cda5da8dSAndroid Build Coastguard Worker           'anonymous functions. The expression "lambda parameters: '
7728*cda5da8dSAndroid Build Coastguard Worker           'expression"\n'
7729*cda5da8dSAndroid Build Coastguard Worker           'yields a function object.  The unnamed object behaves like a '
7730*cda5da8dSAndroid Build Coastguard Worker           'function\n'
7731*cda5da8dSAndroid Build Coastguard Worker           'object defined with:\n'
7732*cda5da8dSAndroid Build Coastguard Worker           '\n'
7733*cda5da8dSAndroid Build Coastguard Worker           '   def <lambda>(parameters):\n'
7734*cda5da8dSAndroid Build Coastguard Worker           '       return expression\n'
7735*cda5da8dSAndroid Build Coastguard Worker           '\n'
7736*cda5da8dSAndroid Build Coastguard Worker           'See section Function definitions for the syntax of parameter '
7737*cda5da8dSAndroid Build Coastguard Worker           'lists.\n'
7738*cda5da8dSAndroid Build Coastguard Worker           'Note that functions created with lambda expressions cannot '
7739*cda5da8dSAndroid Build Coastguard Worker           'contain\n'
7740*cda5da8dSAndroid Build Coastguard Worker           'statements or annotations.\n',
7741*cda5da8dSAndroid Build Coastguard Worker 'lists': 'List displays\n'
7742*cda5da8dSAndroid Build Coastguard Worker          '*************\n'
7743*cda5da8dSAndroid Build Coastguard Worker          '\n'
7744*cda5da8dSAndroid Build Coastguard Worker          'A list display is a possibly empty series of expressions enclosed '
7745*cda5da8dSAndroid Build Coastguard Worker          'in\n'
7746*cda5da8dSAndroid Build Coastguard Worker          'square brackets:\n'
7747*cda5da8dSAndroid Build Coastguard Worker          '\n'
7748*cda5da8dSAndroid Build Coastguard Worker          '   list_display ::= "[" [starred_list | comprehension] "]"\n'
7749*cda5da8dSAndroid Build Coastguard Worker          '\n'
7750*cda5da8dSAndroid Build Coastguard Worker          'A list display yields a new list object, the contents being '
7751*cda5da8dSAndroid Build Coastguard Worker          'specified\n'
7752*cda5da8dSAndroid Build Coastguard Worker          'by either a list of expressions or a comprehension.  When a comma-\n'
7753*cda5da8dSAndroid Build Coastguard Worker          'separated list of expressions is supplied, its elements are '
7754*cda5da8dSAndroid Build Coastguard Worker          'evaluated\n'
7755*cda5da8dSAndroid Build Coastguard Worker          'from left to right and placed into the list object in that order.\n'
7756*cda5da8dSAndroid Build Coastguard Worker          'When a comprehension is supplied, the list is constructed from the\n'
7757*cda5da8dSAndroid Build Coastguard Worker          'elements resulting from the comprehension.\n',
7758*cda5da8dSAndroid Build Coastguard Worker 'naming': 'Naming and binding\n'
7759*cda5da8dSAndroid Build Coastguard Worker           '******************\n'
7760*cda5da8dSAndroid Build Coastguard Worker           '\n'
7761*cda5da8dSAndroid Build Coastguard Worker           '\n'
7762*cda5da8dSAndroid Build Coastguard Worker           'Binding of names\n'
7763*cda5da8dSAndroid Build Coastguard Worker           '================\n'
7764*cda5da8dSAndroid Build Coastguard Worker           '\n'
7765*cda5da8dSAndroid Build Coastguard Worker           '*Names* refer to objects.  Names are introduced by name binding\n'
7766*cda5da8dSAndroid Build Coastguard Worker           'operations.\n'
7767*cda5da8dSAndroid Build Coastguard Worker           '\n'
7768*cda5da8dSAndroid Build Coastguard Worker           'The following constructs bind names:\n'
7769*cda5da8dSAndroid Build Coastguard Worker           '\n'
7770*cda5da8dSAndroid Build Coastguard Worker           '* formal parameters to functions,\n'
7771*cda5da8dSAndroid Build Coastguard Worker           '\n'
7772*cda5da8dSAndroid Build Coastguard Worker           '* class definitions,\n'
7773*cda5da8dSAndroid Build Coastguard Worker           '\n'
7774*cda5da8dSAndroid Build Coastguard Worker           '* function definitions,\n'
7775*cda5da8dSAndroid Build Coastguard Worker           '\n'
7776*cda5da8dSAndroid Build Coastguard Worker           '* assignment expressions,\n'
7777*cda5da8dSAndroid Build Coastguard Worker           '\n'
7778*cda5da8dSAndroid Build Coastguard Worker           '* targets that are identifiers if occurring in an assignment:\n'
7779*cda5da8dSAndroid Build Coastguard Worker           '\n'
7780*cda5da8dSAndroid Build Coastguard Worker           '  * "for" loop header,\n'
7781*cda5da8dSAndroid Build Coastguard Worker           '\n'
7782*cda5da8dSAndroid Build Coastguard Worker           '  * after "as" in a "with" statement, "except" clause, "except*"\n'
7783*cda5da8dSAndroid Build Coastguard Worker           '    clause, or in the as-pattern in structural pattern matching,\n'
7784*cda5da8dSAndroid Build Coastguard Worker           '\n'
7785*cda5da8dSAndroid Build Coastguard Worker           '  * in a capture pattern in structural pattern matching\n'
7786*cda5da8dSAndroid Build Coastguard Worker           '\n'
7787*cda5da8dSAndroid Build Coastguard Worker           '* "import" statements.\n'
7788*cda5da8dSAndroid Build Coastguard Worker           '\n'
7789*cda5da8dSAndroid Build Coastguard Worker           'The "import" statement of the form "from ... import *" binds all '
7790*cda5da8dSAndroid Build Coastguard Worker           'names\n'
7791*cda5da8dSAndroid Build Coastguard Worker           'defined in the imported module, except those beginning with an\n'
7792*cda5da8dSAndroid Build Coastguard Worker           'underscore. This form may only be used at the module level.\n'
7793*cda5da8dSAndroid Build Coastguard Worker           '\n'
7794*cda5da8dSAndroid Build Coastguard Worker           'A target occurring in a "del" statement is also considered bound '
7795*cda5da8dSAndroid Build Coastguard Worker           'for\n'
7796*cda5da8dSAndroid Build Coastguard Worker           'this purpose (though the actual semantics are to unbind the '
7797*cda5da8dSAndroid Build Coastguard Worker           'name).\n'
7798*cda5da8dSAndroid Build Coastguard Worker           '\n'
7799*cda5da8dSAndroid Build Coastguard Worker           'Each assignment or import statement occurs within a block defined '
7800*cda5da8dSAndroid Build Coastguard Worker           'by a\n'
7801*cda5da8dSAndroid Build Coastguard Worker           'class or function definition or at the module level (the '
7802*cda5da8dSAndroid Build Coastguard Worker           'top-level\n'
7803*cda5da8dSAndroid Build Coastguard Worker           'code block).\n'
7804*cda5da8dSAndroid Build Coastguard Worker           '\n'
7805*cda5da8dSAndroid Build Coastguard Worker           'If a name is bound in a block, it is a local variable of that '
7806*cda5da8dSAndroid Build Coastguard Worker           'block,\n'
7807*cda5da8dSAndroid Build Coastguard Worker           'unless declared as "nonlocal" or "global".  If a name is bound at '
7808*cda5da8dSAndroid Build Coastguard Worker           'the\n'
7809*cda5da8dSAndroid Build Coastguard Worker           'module level, it is a global variable.  (The variables of the '
7810*cda5da8dSAndroid Build Coastguard Worker           'module\n'
7811*cda5da8dSAndroid Build Coastguard Worker           'code block are local and global.)  If a variable is used in a '
7812*cda5da8dSAndroid Build Coastguard Worker           'code\n'
7813*cda5da8dSAndroid Build Coastguard Worker           'block but not defined there, it is a *free variable*.\n'
7814*cda5da8dSAndroid Build Coastguard Worker           '\n'
7815*cda5da8dSAndroid Build Coastguard Worker           'Each occurrence of a name in the program text refers to the '
7816*cda5da8dSAndroid Build Coastguard Worker           '*binding*\n'
7817*cda5da8dSAndroid Build Coastguard Worker           'of that name established by the following name resolution rules.\n'
7818*cda5da8dSAndroid Build Coastguard Worker           '\n'
7819*cda5da8dSAndroid Build Coastguard Worker           '\n'
7820*cda5da8dSAndroid Build Coastguard Worker           'Resolution of names\n'
7821*cda5da8dSAndroid Build Coastguard Worker           '===================\n'
7822*cda5da8dSAndroid Build Coastguard Worker           '\n'
7823*cda5da8dSAndroid Build Coastguard Worker           'A *scope* defines the visibility of a name within a block.  If a '
7824*cda5da8dSAndroid Build Coastguard Worker           'local\n'
7825*cda5da8dSAndroid Build Coastguard Worker           'variable is defined in a block, its scope includes that block.  If '
7826*cda5da8dSAndroid Build Coastguard Worker           'the\n'
7827*cda5da8dSAndroid Build Coastguard Worker           'definition occurs in a function block, the scope extends to any '
7828*cda5da8dSAndroid Build Coastguard Worker           'blocks\n'
7829*cda5da8dSAndroid Build Coastguard Worker           'contained within the defining one, unless a contained block '
7830*cda5da8dSAndroid Build Coastguard Worker           'introduces\n'
7831*cda5da8dSAndroid Build Coastguard Worker           'a different binding for the name.\n'
7832*cda5da8dSAndroid Build Coastguard Worker           '\n'
7833*cda5da8dSAndroid Build Coastguard Worker           'When a name is used in a code block, it is resolved using the '
7834*cda5da8dSAndroid Build Coastguard Worker           'nearest\n'
7835*cda5da8dSAndroid Build Coastguard Worker           'enclosing scope.  The set of all such scopes visible to a code '
7836*cda5da8dSAndroid Build Coastguard Worker           'block\n'
7837*cda5da8dSAndroid Build Coastguard Worker           'is called the block’s *environment*.\n'
7838*cda5da8dSAndroid Build Coastguard Worker           '\n'
7839*cda5da8dSAndroid Build Coastguard Worker           'When a name is not found at all, a "NameError" exception is '
7840*cda5da8dSAndroid Build Coastguard Worker           'raised. If\n'
7841*cda5da8dSAndroid Build Coastguard Worker           'the current scope is a function scope, and the name refers to a '
7842*cda5da8dSAndroid Build Coastguard Worker           'local\n'
7843*cda5da8dSAndroid Build Coastguard Worker           'variable that has not yet been bound to a value at the point where '
7844*cda5da8dSAndroid Build Coastguard Worker           'the\n'
7845*cda5da8dSAndroid Build Coastguard Worker           'name is used, an "UnboundLocalError" exception is raised.\n'
7846*cda5da8dSAndroid Build Coastguard Worker           '"UnboundLocalError" is a subclass of "NameError".\n'
7847*cda5da8dSAndroid Build Coastguard Worker           '\n'
7848*cda5da8dSAndroid Build Coastguard Worker           'If a name binding operation occurs anywhere within a code block, '
7849*cda5da8dSAndroid Build Coastguard Worker           'all\n'
7850*cda5da8dSAndroid Build Coastguard Worker           'uses of the name within the block are treated as references to '
7851*cda5da8dSAndroid Build Coastguard Worker           'the\n'
7852*cda5da8dSAndroid Build Coastguard Worker           'current block.  This can lead to errors when a name is used within '
7853*cda5da8dSAndroid Build Coastguard Worker           'a\n'
7854*cda5da8dSAndroid Build Coastguard Worker           'block before it is bound.  This rule is subtle.  Python lacks\n'
7855*cda5da8dSAndroid Build Coastguard Worker           'declarations and allows name binding operations to occur anywhere\n'
7856*cda5da8dSAndroid Build Coastguard Worker           'within a code block.  The local variables of a code block can be\n'
7857*cda5da8dSAndroid Build Coastguard Worker           'determined by scanning the entire text of the block for name '
7858*cda5da8dSAndroid Build Coastguard Worker           'binding\n'
7859*cda5da8dSAndroid Build Coastguard Worker           'operations. See the FAQ entry on UnboundLocalError for examples.\n'
7860*cda5da8dSAndroid Build Coastguard Worker           '\n'
7861*cda5da8dSAndroid Build Coastguard Worker           'If the "global" statement occurs within a block, all uses of the '
7862*cda5da8dSAndroid Build Coastguard Worker           'names\n'
7863*cda5da8dSAndroid Build Coastguard Worker           'specified in the statement refer to the bindings of those names in '
7864*cda5da8dSAndroid Build Coastguard Worker           'the\n'
7865*cda5da8dSAndroid Build Coastguard Worker           'top-level namespace.  Names are resolved in the top-level '
7866*cda5da8dSAndroid Build Coastguard Worker           'namespace by\n'
7867*cda5da8dSAndroid Build Coastguard Worker           'searching the global namespace, i.e. the namespace of the module\n'
7868*cda5da8dSAndroid Build Coastguard Worker           'containing the code block, and the builtins namespace, the '
7869*cda5da8dSAndroid Build Coastguard Worker           'namespace\n'
7870*cda5da8dSAndroid Build Coastguard Worker           'of the module "builtins".  The global namespace is searched '
7871*cda5da8dSAndroid Build Coastguard Worker           'first.  If\n'
7872*cda5da8dSAndroid Build Coastguard Worker           'the names are not found there, the builtins namespace is '
7873*cda5da8dSAndroid Build Coastguard Worker           'searched.\n'
7874*cda5da8dSAndroid Build Coastguard Worker           'The "global" statement must precede all uses of the listed names.\n'
7875*cda5da8dSAndroid Build Coastguard Worker           '\n'
7876*cda5da8dSAndroid Build Coastguard Worker           'The "global" statement has the same scope as a name binding '
7877*cda5da8dSAndroid Build Coastguard Worker           'operation\n'
7878*cda5da8dSAndroid Build Coastguard Worker           'in the same block.  If the nearest enclosing scope for a free '
7879*cda5da8dSAndroid Build Coastguard Worker           'variable\n'
7880*cda5da8dSAndroid Build Coastguard Worker           'contains a global statement, the free variable is treated as a '
7881*cda5da8dSAndroid Build Coastguard Worker           'global.\n'
7882*cda5da8dSAndroid Build Coastguard Worker           '\n'
7883*cda5da8dSAndroid Build Coastguard Worker           'The "nonlocal" statement causes corresponding names to refer to\n'
7884*cda5da8dSAndroid Build Coastguard Worker           'previously bound variables in the nearest enclosing function '
7885*cda5da8dSAndroid Build Coastguard Worker           'scope.\n'
7886*cda5da8dSAndroid Build Coastguard Worker           '"SyntaxError" is raised at compile time if the given name does '
7887*cda5da8dSAndroid Build Coastguard Worker           'not\n'
7888*cda5da8dSAndroid Build Coastguard Worker           'exist in any enclosing function scope.\n'
7889*cda5da8dSAndroid Build Coastguard Worker           '\n'
7890*cda5da8dSAndroid Build Coastguard Worker           'The namespace for a module is automatically created the first time '
7891*cda5da8dSAndroid Build Coastguard Worker           'a\n'
7892*cda5da8dSAndroid Build Coastguard Worker           'module is imported.  The main module for a script is always '
7893*cda5da8dSAndroid Build Coastguard Worker           'called\n'
7894*cda5da8dSAndroid Build Coastguard Worker           '"__main__".\n'
7895*cda5da8dSAndroid Build Coastguard Worker           '\n'
7896*cda5da8dSAndroid Build Coastguard Worker           'Class definition blocks and arguments to "exec()" and "eval()" '
7897*cda5da8dSAndroid Build Coastguard Worker           'are\n'
7898*cda5da8dSAndroid Build Coastguard Worker           'special in the context of name resolution. A class definition is '
7899*cda5da8dSAndroid Build Coastguard Worker           'an\n'
7900*cda5da8dSAndroid Build Coastguard Worker           'executable statement that may use and define names. These '
7901*cda5da8dSAndroid Build Coastguard Worker           'references\n'
7902*cda5da8dSAndroid Build Coastguard Worker           'follow the normal rules for name resolution with an exception '
7903*cda5da8dSAndroid Build Coastguard Worker           'that\n'
7904*cda5da8dSAndroid Build Coastguard Worker           'unbound local variables are looked up in the global namespace. '
7905*cda5da8dSAndroid Build Coastguard Worker           'The\n'
7906*cda5da8dSAndroid Build Coastguard Worker           'namespace of the class definition becomes the attribute dictionary '
7907*cda5da8dSAndroid Build Coastguard Worker           'of\n'
7908*cda5da8dSAndroid Build Coastguard Worker           'the class. The scope of names defined in a class block is limited '
7909*cda5da8dSAndroid Build Coastguard Worker           'to\n'
7910*cda5da8dSAndroid Build Coastguard Worker           'the class block; it does not extend to the code blocks of methods '
7911*cda5da8dSAndroid Build Coastguard Worker           '–\n'
7912*cda5da8dSAndroid Build Coastguard Worker           'this includes comprehensions and generator expressions since they '
7913*cda5da8dSAndroid Build Coastguard Worker           'are\n'
7914*cda5da8dSAndroid Build Coastguard Worker           'implemented using a function scope.  This means that the '
7915*cda5da8dSAndroid Build Coastguard Worker           'following\n'
7916*cda5da8dSAndroid Build Coastguard Worker           'will fail:\n'
7917*cda5da8dSAndroid Build Coastguard Worker           '\n'
7918*cda5da8dSAndroid Build Coastguard Worker           '   class A:\n'
7919*cda5da8dSAndroid Build Coastguard Worker           '       a = 42\n'
7920*cda5da8dSAndroid Build Coastguard Worker           '       b = list(a + i for i in range(10))\n'
7921*cda5da8dSAndroid Build Coastguard Worker           '\n'
7922*cda5da8dSAndroid Build Coastguard Worker           '\n'
7923*cda5da8dSAndroid Build Coastguard Worker           'Builtins and restricted execution\n'
7924*cda5da8dSAndroid Build Coastguard Worker           '=================================\n'
7925*cda5da8dSAndroid Build Coastguard Worker           '\n'
7926*cda5da8dSAndroid Build Coastguard Worker           '**CPython implementation detail:** Users should not touch\n'
7927*cda5da8dSAndroid Build Coastguard Worker           '"__builtins__"; it is strictly an implementation detail.  Users\n'
7928*cda5da8dSAndroid Build Coastguard Worker           'wanting to override values in the builtins namespace should '
7929*cda5da8dSAndroid Build Coastguard Worker           '"import"\n'
7930*cda5da8dSAndroid Build Coastguard Worker           'the "builtins" module and modify its attributes appropriately.\n'
7931*cda5da8dSAndroid Build Coastguard Worker           '\n'
7932*cda5da8dSAndroid Build Coastguard Worker           'The builtins namespace associated with the execution of a code '
7933*cda5da8dSAndroid Build Coastguard Worker           'block\n'
7934*cda5da8dSAndroid Build Coastguard Worker           'is actually found by looking up the name "__builtins__" in its '
7935*cda5da8dSAndroid Build Coastguard Worker           'global\n'
7936*cda5da8dSAndroid Build Coastguard Worker           'namespace; this should be a dictionary or a module (in the latter '
7937*cda5da8dSAndroid Build Coastguard Worker           'case\n'
7938*cda5da8dSAndroid Build Coastguard Worker           'the module’s dictionary is used).  By default, when in the '
7939*cda5da8dSAndroid Build Coastguard Worker           '"__main__"\n'
7940*cda5da8dSAndroid Build Coastguard Worker           'module, "__builtins__" is the built-in module "builtins"; when in '
7941*cda5da8dSAndroid Build Coastguard Worker           'any\n'
7942*cda5da8dSAndroid Build Coastguard Worker           'other module, "__builtins__" is an alias for the dictionary of '
7943*cda5da8dSAndroid Build Coastguard Worker           'the\n'
7944*cda5da8dSAndroid Build Coastguard Worker           '"builtins" module itself.\n'
7945*cda5da8dSAndroid Build Coastguard Worker           '\n'
7946*cda5da8dSAndroid Build Coastguard Worker           '\n'
7947*cda5da8dSAndroid Build Coastguard Worker           'Interaction with dynamic features\n'
7948*cda5da8dSAndroid Build Coastguard Worker           '=================================\n'
7949*cda5da8dSAndroid Build Coastguard Worker           '\n'
7950*cda5da8dSAndroid Build Coastguard Worker           'Name resolution of free variables occurs at runtime, not at '
7951*cda5da8dSAndroid Build Coastguard Worker           'compile\n'
7952*cda5da8dSAndroid Build Coastguard Worker           'time. This means that the following code will print 42:\n'
7953*cda5da8dSAndroid Build Coastguard Worker           '\n'
7954*cda5da8dSAndroid Build Coastguard Worker           '   i = 10\n'
7955*cda5da8dSAndroid Build Coastguard Worker           '   def f():\n'
7956*cda5da8dSAndroid Build Coastguard Worker           '       print(i)\n'
7957*cda5da8dSAndroid Build Coastguard Worker           '   i = 42\n'
7958*cda5da8dSAndroid Build Coastguard Worker           '   f()\n'
7959*cda5da8dSAndroid Build Coastguard Worker           '\n'
7960*cda5da8dSAndroid Build Coastguard Worker           'The "eval()" and "exec()" functions do not have access to the '
7961*cda5da8dSAndroid Build Coastguard Worker           'full\n'
7962*cda5da8dSAndroid Build Coastguard Worker           'environment for resolving names.  Names may be resolved in the '
7963*cda5da8dSAndroid Build Coastguard Worker           'local\n'
7964*cda5da8dSAndroid Build Coastguard Worker           'and global namespaces of the caller.  Free variables are not '
7965*cda5da8dSAndroid Build Coastguard Worker           'resolved\n'
7966*cda5da8dSAndroid Build Coastguard Worker           'in the nearest enclosing namespace, but in the global namespace.  '
7967*cda5da8dSAndroid Build Coastguard Worker           '[1]\n'
7968*cda5da8dSAndroid Build Coastguard Worker           'The "exec()" and "eval()" functions have optional arguments to\n'
7969*cda5da8dSAndroid Build Coastguard Worker           'override the global and local namespace.  If only one namespace '
7970*cda5da8dSAndroid Build Coastguard Worker           'is\n'
7971*cda5da8dSAndroid Build Coastguard Worker           'specified, it is used for both.\n',
7972*cda5da8dSAndroid Build Coastguard Worker 'nonlocal': 'The "nonlocal" statement\n'
7973*cda5da8dSAndroid Build Coastguard Worker             '************************\n'
7974*cda5da8dSAndroid Build Coastguard Worker             '\n'
7975*cda5da8dSAndroid Build Coastguard Worker             '   nonlocal_stmt ::= "nonlocal" identifier ("," identifier)*\n'
7976*cda5da8dSAndroid Build Coastguard Worker             '\n'
7977*cda5da8dSAndroid Build Coastguard Worker             'The "nonlocal" statement causes the listed identifiers to refer '
7978*cda5da8dSAndroid Build Coastguard Worker             'to\n'
7979*cda5da8dSAndroid Build Coastguard Worker             'previously bound variables in the nearest enclosing scope '
7980*cda5da8dSAndroid Build Coastguard Worker             'excluding\n'
7981*cda5da8dSAndroid Build Coastguard Worker             'globals. This is important because the default behavior for '
7982*cda5da8dSAndroid Build Coastguard Worker             'binding is\n'
7983*cda5da8dSAndroid Build Coastguard Worker             'to search the local namespace first.  The statement allows\n'
7984*cda5da8dSAndroid Build Coastguard Worker             'encapsulated code to rebind variables outside of the local '
7985*cda5da8dSAndroid Build Coastguard Worker             'scope\n'
7986*cda5da8dSAndroid Build Coastguard Worker             'besides the global (module) scope.\n'
7987*cda5da8dSAndroid Build Coastguard Worker             '\n'
7988*cda5da8dSAndroid Build Coastguard Worker             'Names listed in a "nonlocal" statement, unlike those listed in '
7989*cda5da8dSAndroid Build Coastguard Worker             'a\n'
7990*cda5da8dSAndroid Build Coastguard Worker             '"global" statement, must refer to pre-existing bindings in an\n'
7991*cda5da8dSAndroid Build Coastguard Worker             'enclosing scope (the scope in which a new binding should be '
7992*cda5da8dSAndroid Build Coastguard Worker             'created\n'
7993*cda5da8dSAndroid Build Coastguard Worker             'cannot be determined unambiguously).\n'
7994*cda5da8dSAndroid Build Coastguard Worker             '\n'
7995*cda5da8dSAndroid Build Coastguard Worker             'Names listed in a "nonlocal" statement must not collide with '
7996*cda5da8dSAndroid Build Coastguard Worker             'pre-\n'
7997*cda5da8dSAndroid Build Coastguard Worker             'existing bindings in the local scope.\n'
7998*cda5da8dSAndroid Build Coastguard Worker             '\n'
7999*cda5da8dSAndroid Build Coastguard Worker             'See also:\n'
8000*cda5da8dSAndroid Build Coastguard Worker             '\n'
8001*cda5da8dSAndroid Build Coastguard Worker             '  **PEP 3104** - Access to Names in Outer Scopes\n'
8002*cda5da8dSAndroid Build Coastguard Worker             '     The specification for the "nonlocal" statement.\n',
8003*cda5da8dSAndroid Build Coastguard Worker 'numbers': 'Numeric literals\n'
8004*cda5da8dSAndroid Build Coastguard Worker            '****************\n'
8005*cda5da8dSAndroid Build Coastguard Worker            '\n'
8006*cda5da8dSAndroid Build Coastguard Worker            'There are three types of numeric literals: integers, floating '
8007*cda5da8dSAndroid Build Coastguard Worker            'point\n'
8008*cda5da8dSAndroid Build Coastguard Worker            'numbers, and imaginary numbers.  There are no complex literals\n'
8009*cda5da8dSAndroid Build Coastguard Worker            '(complex numbers can be formed by adding a real number and an\n'
8010*cda5da8dSAndroid Build Coastguard Worker            'imaginary number).\n'
8011*cda5da8dSAndroid Build Coastguard Worker            '\n'
8012*cda5da8dSAndroid Build Coastguard Worker            'Note that numeric literals do not include a sign; a phrase like '
8013*cda5da8dSAndroid Build Coastguard Worker            '"-1"\n'
8014*cda5da8dSAndroid Build Coastguard Worker            'is actually an expression composed of the unary operator ‘"-"’ '
8015*cda5da8dSAndroid Build Coastguard Worker            'and the\n'
8016*cda5da8dSAndroid Build Coastguard Worker            'literal "1".\n',
8017*cda5da8dSAndroid Build Coastguard Worker 'numeric-types': 'Emulating numeric types\n'
8018*cda5da8dSAndroid Build Coastguard Worker                  '***********************\n'
8019*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8020*cda5da8dSAndroid Build Coastguard Worker                  'The following methods can be defined to emulate numeric '
8021*cda5da8dSAndroid Build Coastguard Worker                  'objects.\n'
8022*cda5da8dSAndroid Build Coastguard Worker                  'Methods corresponding to operations that are not supported '
8023*cda5da8dSAndroid Build Coastguard Worker                  'by the\n'
8024*cda5da8dSAndroid Build Coastguard Worker                  'particular kind of number implemented (e.g., bitwise '
8025*cda5da8dSAndroid Build Coastguard Worker                  'operations for\n'
8026*cda5da8dSAndroid Build Coastguard Worker                  'non-integral numbers) should be left undefined.\n'
8027*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8028*cda5da8dSAndroid Build Coastguard Worker                  'object.__add__(self, other)\n'
8029*cda5da8dSAndroid Build Coastguard Worker                  'object.__sub__(self, other)\n'
8030*cda5da8dSAndroid Build Coastguard Worker                  'object.__mul__(self, other)\n'
8031*cda5da8dSAndroid Build Coastguard Worker                  'object.__matmul__(self, other)\n'
8032*cda5da8dSAndroid Build Coastguard Worker                  'object.__truediv__(self, other)\n'
8033*cda5da8dSAndroid Build Coastguard Worker                  'object.__floordiv__(self, other)\n'
8034*cda5da8dSAndroid Build Coastguard Worker                  'object.__mod__(self, other)\n'
8035*cda5da8dSAndroid Build Coastguard Worker                  'object.__divmod__(self, other)\n'
8036*cda5da8dSAndroid Build Coastguard Worker                  'object.__pow__(self, other[, modulo])\n'
8037*cda5da8dSAndroid Build Coastguard Worker                  'object.__lshift__(self, other)\n'
8038*cda5da8dSAndroid Build Coastguard Worker                  'object.__rshift__(self, other)\n'
8039*cda5da8dSAndroid Build Coastguard Worker                  'object.__and__(self, other)\n'
8040*cda5da8dSAndroid Build Coastguard Worker                  'object.__xor__(self, other)\n'
8041*cda5da8dSAndroid Build Coastguard Worker                  'object.__or__(self, other)\n'
8042*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8043*cda5da8dSAndroid Build Coastguard Worker                  '   These methods are called to implement the binary '
8044*cda5da8dSAndroid Build Coastguard Worker                  'arithmetic\n'
8045*cda5da8dSAndroid Build Coastguard Worker                  '   operations ("+", "-", "*", "@", "/", "//", "%", '
8046*cda5da8dSAndroid Build Coastguard Worker                  '"divmod()",\n'
8047*cda5da8dSAndroid Build Coastguard Worker                  '   "pow()", "**", "<<", ">>", "&", "^", "|").  For '
8048*cda5da8dSAndroid Build Coastguard Worker                  'instance, to\n'
8049*cda5da8dSAndroid Build Coastguard Worker                  '   evaluate the expression "x + y", where *x* is an '
8050*cda5da8dSAndroid Build Coastguard Worker                  'instance of a\n'
8051*cda5da8dSAndroid Build Coastguard Worker                  '   class that has an "__add__()" method, '
8052*cda5da8dSAndroid Build Coastguard Worker                  '"type(x).__add__(x, y)" is\n'
8053*cda5da8dSAndroid Build Coastguard Worker                  '   called.  The "__divmod__()" method should be the '
8054*cda5da8dSAndroid Build Coastguard Worker                  'equivalent to\n'
8055*cda5da8dSAndroid Build Coastguard Worker                  '   using "__floordiv__()" and "__mod__()"; it should not be '
8056*cda5da8dSAndroid Build Coastguard Worker                  'related to\n'
8057*cda5da8dSAndroid Build Coastguard Worker                  '   "__truediv__()".  Note that "__pow__()" should be '
8058*cda5da8dSAndroid Build Coastguard Worker                  'defined to accept\n'
8059*cda5da8dSAndroid Build Coastguard Worker                  '   an optional third argument if the ternary version of the '
8060*cda5da8dSAndroid Build Coastguard Worker                  'built-in\n'
8061*cda5da8dSAndroid Build Coastguard Worker                  '   "pow()" function is to be supported.\n'
8062*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8063*cda5da8dSAndroid Build Coastguard Worker                  '   If one of those methods does not support the operation '
8064*cda5da8dSAndroid Build Coastguard Worker                  'with the\n'
8065*cda5da8dSAndroid Build Coastguard Worker                  '   supplied arguments, it should return "NotImplemented".\n'
8066*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8067*cda5da8dSAndroid Build Coastguard Worker                  'object.__radd__(self, other)\n'
8068*cda5da8dSAndroid Build Coastguard Worker                  'object.__rsub__(self, other)\n'
8069*cda5da8dSAndroid Build Coastguard Worker                  'object.__rmul__(self, other)\n'
8070*cda5da8dSAndroid Build Coastguard Worker                  'object.__rmatmul__(self, other)\n'
8071*cda5da8dSAndroid Build Coastguard Worker                  'object.__rtruediv__(self, other)\n'
8072*cda5da8dSAndroid Build Coastguard Worker                  'object.__rfloordiv__(self, other)\n'
8073*cda5da8dSAndroid Build Coastguard Worker                  'object.__rmod__(self, other)\n'
8074*cda5da8dSAndroid Build Coastguard Worker                  'object.__rdivmod__(self, other)\n'
8075*cda5da8dSAndroid Build Coastguard Worker                  'object.__rpow__(self, other[, modulo])\n'
8076*cda5da8dSAndroid Build Coastguard Worker                  'object.__rlshift__(self, other)\n'
8077*cda5da8dSAndroid Build Coastguard Worker                  'object.__rrshift__(self, other)\n'
8078*cda5da8dSAndroid Build Coastguard Worker                  'object.__rand__(self, other)\n'
8079*cda5da8dSAndroid Build Coastguard Worker                  'object.__rxor__(self, other)\n'
8080*cda5da8dSAndroid Build Coastguard Worker                  'object.__ror__(self, other)\n'
8081*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8082*cda5da8dSAndroid Build Coastguard Worker                  '   These methods are called to implement the binary '
8083*cda5da8dSAndroid Build Coastguard Worker                  'arithmetic\n'
8084*cda5da8dSAndroid Build Coastguard Worker                  '   operations ("+", "-", "*", "@", "/", "//", "%", '
8085*cda5da8dSAndroid Build Coastguard Worker                  '"divmod()",\n'
8086*cda5da8dSAndroid Build Coastguard Worker                  '   "pow()", "**", "<<", ">>", "&", "^", "|") with reflected '
8087*cda5da8dSAndroid Build Coastguard Worker                  '(swapped)\n'
8088*cda5da8dSAndroid Build Coastguard Worker                  '   operands.  These functions are only called if the left '
8089*cda5da8dSAndroid Build Coastguard Worker                  'operand does\n'
8090*cda5da8dSAndroid Build Coastguard Worker                  '   not support the corresponding operation [3] and the '
8091*cda5da8dSAndroid Build Coastguard Worker                  'operands are of\n'
8092*cda5da8dSAndroid Build Coastguard Worker                  '   different types. [4] For instance, to evaluate the '
8093*cda5da8dSAndroid Build Coastguard Worker                  'expression "x -\n'
8094*cda5da8dSAndroid Build Coastguard Worker                  '   y", where *y* is an instance of a class that has an '
8095*cda5da8dSAndroid Build Coastguard Worker                  '"__rsub__()"\n'
8096*cda5da8dSAndroid Build Coastguard Worker                  '   method, "type(y).__rsub__(y, x)" is called if '
8097*cda5da8dSAndroid Build Coastguard Worker                  '"type(x).__sub__(x,\n'
8098*cda5da8dSAndroid Build Coastguard Worker                  '   y)" returns *NotImplemented*.\n'
8099*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8100*cda5da8dSAndroid Build Coastguard Worker                  '   Note that ternary "pow()" will not try calling '
8101*cda5da8dSAndroid Build Coastguard Worker                  '"__rpow__()" (the\n'
8102*cda5da8dSAndroid Build Coastguard Worker                  '   coercion rules would become too complicated).\n'
8103*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8104*cda5da8dSAndroid Build Coastguard Worker                  '   Note:\n'
8105*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8106*cda5da8dSAndroid Build Coastguard Worker                  '     If the right operand’s type is a subclass of the left '
8107*cda5da8dSAndroid Build Coastguard Worker                  'operand’s\n'
8108*cda5da8dSAndroid Build Coastguard Worker                  '     type and that subclass provides a different '
8109*cda5da8dSAndroid Build Coastguard Worker                  'implementation of the\n'
8110*cda5da8dSAndroid Build Coastguard Worker                  '     reflected method for the operation, this method will '
8111*cda5da8dSAndroid Build Coastguard Worker                  'be called\n'
8112*cda5da8dSAndroid Build Coastguard Worker                  '     before the left operand’s non-reflected method. This '
8113*cda5da8dSAndroid Build Coastguard Worker                  'behavior\n'
8114*cda5da8dSAndroid Build Coastguard Worker                  '     allows subclasses to override their ancestors’ '
8115*cda5da8dSAndroid Build Coastguard Worker                  'operations.\n'
8116*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8117*cda5da8dSAndroid Build Coastguard Worker                  'object.__iadd__(self, other)\n'
8118*cda5da8dSAndroid Build Coastguard Worker                  'object.__isub__(self, other)\n'
8119*cda5da8dSAndroid Build Coastguard Worker                  'object.__imul__(self, other)\n'
8120*cda5da8dSAndroid Build Coastguard Worker                  'object.__imatmul__(self, other)\n'
8121*cda5da8dSAndroid Build Coastguard Worker                  'object.__itruediv__(self, other)\n'
8122*cda5da8dSAndroid Build Coastguard Worker                  'object.__ifloordiv__(self, other)\n'
8123*cda5da8dSAndroid Build Coastguard Worker                  'object.__imod__(self, other)\n'
8124*cda5da8dSAndroid Build Coastguard Worker                  'object.__ipow__(self, other[, modulo])\n'
8125*cda5da8dSAndroid Build Coastguard Worker                  'object.__ilshift__(self, other)\n'
8126*cda5da8dSAndroid Build Coastguard Worker                  'object.__irshift__(self, other)\n'
8127*cda5da8dSAndroid Build Coastguard Worker                  'object.__iand__(self, other)\n'
8128*cda5da8dSAndroid Build Coastguard Worker                  'object.__ixor__(self, other)\n'
8129*cda5da8dSAndroid Build Coastguard Worker                  'object.__ior__(self, other)\n'
8130*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8131*cda5da8dSAndroid Build Coastguard Worker                  '   These methods are called to implement the augmented '
8132*cda5da8dSAndroid Build Coastguard Worker                  'arithmetic\n'
8133*cda5da8dSAndroid Build Coastguard Worker                  '   assignments ("+=", "-=", "*=", "@=", "/=", "//=", "%=", '
8134*cda5da8dSAndroid Build Coastguard Worker                  '"**=",\n'
8135*cda5da8dSAndroid Build Coastguard Worker                  '   "<<=", ">>=", "&=", "^=", "|=").  These methods should '
8136*cda5da8dSAndroid Build Coastguard Worker                  'attempt to\n'
8137*cda5da8dSAndroid Build Coastguard Worker                  '   do the operation in-place (modifying *self*) and return '
8138*cda5da8dSAndroid Build Coastguard Worker                  'the result\n'
8139*cda5da8dSAndroid Build Coastguard Worker                  '   (which could be, but does not have to be, *self*).  If a '
8140*cda5da8dSAndroid Build Coastguard Worker                  'specific\n'
8141*cda5da8dSAndroid Build Coastguard Worker                  '   method is not defined, the augmented assignment falls '
8142*cda5da8dSAndroid Build Coastguard Worker                  'back to the\n'
8143*cda5da8dSAndroid Build Coastguard Worker                  '   normal methods.  For instance, if *x* is an instance of '
8144*cda5da8dSAndroid Build Coastguard Worker                  'a class\n'
8145*cda5da8dSAndroid Build Coastguard Worker                  '   with an "__iadd__()" method, "x += y" is equivalent to '
8146*cda5da8dSAndroid Build Coastguard Worker                  '"x =\n'
8147*cda5da8dSAndroid Build Coastguard Worker                  '   x.__iadd__(y)" . Otherwise, "x.__add__(y)" and '
8148*cda5da8dSAndroid Build Coastguard Worker                  '"y.__radd__(x)" are\n'
8149*cda5da8dSAndroid Build Coastguard Worker                  '   considered, as with the evaluation of "x + y". In '
8150*cda5da8dSAndroid Build Coastguard Worker                  'certain\n'
8151*cda5da8dSAndroid Build Coastguard Worker                  '   situations, augmented assignment can result in '
8152*cda5da8dSAndroid Build Coastguard Worker                  'unexpected errors\n'
8153*cda5da8dSAndroid Build Coastguard Worker                  '   (see Why does a_tuple[i] += [‘item’] raise an exception '
8154*cda5da8dSAndroid Build Coastguard Worker                  'when the\n'
8155*cda5da8dSAndroid Build Coastguard Worker                  '   addition works?), but this behavior is in fact part of '
8156*cda5da8dSAndroid Build Coastguard Worker                  'the data\n'
8157*cda5da8dSAndroid Build Coastguard Worker                  '   model.\n'
8158*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8159*cda5da8dSAndroid Build Coastguard Worker                  'object.__neg__(self)\n'
8160*cda5da8dSAndroid Build Coastguard Worker                  'object.__pos__(self)\n'
8161*cda5da8dSAndroid Build Coastguard Worker                  'object.__abs__(self)\n'
8162*cda5da8dSAndroid Build Coastguard Worker                  'object.__invert__(self)\n'
8163*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8164*cda5da8dSAndroid Build Coastguard Worker                  '   Called to implement the unary arithmetic operations '
8165*cda5da8dSAndroid Build Coastguard Worker                  '("-", "+",\n'
8166*cda5da8dSAndroid Build Coastguard Worker                  '   "abs()" and "~").\n'
8167*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8168*cda5da8dSAndroid Build Coastguard Worker                  'object.__complex__(self)\n'
8169*cda5da8dSAndroid Build Coastguard Worker                  'object.__int__(self)\n'
8170*cda5da8dSAndroid Build Coastguard Worker                  'object.__float__(self)\n'
8171*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8172*cda5da8dSAndroid Build Coastguard Worker                  '   Called to implement the built-in functions "complex()", '
8173*cda5da8dSAndroid Build Coastguard Worker                  '"int()" and\n'
8174*cda5da8dSAndroid Build Coastguard Worker                  '   "float()".  Should return a value of the appropriate '
8175*cda5da8dSAndroid Build Coastguard Worker                  'type.\n'
8176*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8177*cda5da8dSAndroid Build Coastguard Worker                  'object.__index__(self)\n'
8178*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8179*cda5da8dSAndroid Build Coastguard Worker                  '   Called to implement "operator.index()", and whenever '
8180*cda5da8dSAndroid Build Coastguard Worker                  'Python needs\n'
8181*cda5da8dSAndroid Build Coastguard Worker                  '   to losslessly convert the numeric object to an integer '
8182*cda5da8dSAndroid Build Coastguard Worker                  'object (such\n'
8183*cda5da8dSAndroid Build Coastguard Worker                  '   as in slicing, or in the built-in "bin()", "hex()" and '
8184*cda5da8dSAndroid Build Coastguard Worker                  '"oct()"\n'
8185*cda5da8dSAndroid Build Coastguard Worker                  '   functions). Presence of this method indicates that the '
8186*cda5da8dSAndroid Build Coastguard Worker                  'numeric\n'
8187*cda5da8dSAndroid Build Coastguard Worker                  '   object is an integer type.  Must return an integer.\n'
8188*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8189*cda5da8dSAndroid Build Coastguard Worker                  '   If "__int__()", "__float__()" and "__complex__()" are '
8190*cda5da8dSAndroid Build Coastguard Worker                  'not defined\n'
8191*cda5da8dSAndroid Build Coastguard Worker                  '   then corresponding built-in functions "int()", "float()" '
8192*cda5da8dSAndroid Build Coastguard Worker                  'and\n'
8193*cda5da8dSAndroid Build Coastguard Worker                  '   "complex()" fall back to "__index__()".\n'
8194*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8195*cda5da8dSAndroid Build Coastguard Worker                  'object.__round__(self[, ndigits])\n'
8196*cda5da8dSAndroid Build Coastguard Worker                  'object.__trunc__(self)\n'
8197*cda5da8dSAndroid Build Coastguard Worker                  'object.__floor__(self)\n'
8198*cda5da8dSAndroid Build Coastguard Worker                  'object.__ceil__(self)\n'
8199*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8200*cda5da8dSAndroid Build Coastguard Worker                  '   Called to implement the built-in function "round()" and '
8201*cda5da8dSAndroid Build Coastguard Worker                  '"math"\n'
8202*cda5da8dSAndroid Build Coastguard Worker                  '   functions "trunc()", "floor()" and "ceil()". Unless '
8203*cda5da8dSAndroid Build Coastguard Worker                  '*ndigits* is\n'
8204*cda5da8dSAndroid Build Coastguard Worker                  '   passed to "__round__()" all these methods should return '
8205*cda5da8dSAndroid Build Coastguard Worker                  'the value\n'
8206*cda5da8dSAndroid Build Coastguard Worker                  '   of the object truncated to an "Integral" (typically an '
8207*cda5da8dSAndroid Build Coastguard Worker                  '"int").\n'
8208*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8209*cda5da8dSAndroid Build Coastguard Worker                  '   The built-in function "int()" falls back to '
8210*cda5da8dSAndroid Build Coastguard Worker                  '"__trunc__()" if\n'
8211*cda5da8dSAndroid Build Coastguard Worker                  '   neither "__int__()" nor "__index__()" is defined.\n'
8212*cda5da8dSAndroid Build Coastguard Worker                  '\n'
8213*cda5da8dSAndroid Build Coastguard Worker                  '   Changed in version 3.11: The delegation of "int()" to '
8214*cda5da8dSAndroid Build Coastguard Worker                  '"__trunc__()"\n'
8215*cda5da8dSAndroid Build Coastguard Worker                  '   is deprecated.\n',
8216*cda5da8dSAndroid Build Coastguard Worker 'objects': 'Objects, values and types\n'
8217*cda5da8dSAndroid Build Coastguard Worker            '*************************\n'
8218*cda5da8dSAndroid Build Coastguard Worker            '\n'
8219*cda5da8dSAndroid Build Coastguard Worker            '*Objects* are Python’s abstraction for data.  All data in a '
8220*cda5da8dSAndroid Build Coastguard Worker            'Python\n'
8221*cda5da8dSAndroid Build Coastguard Worker            'program is represented by objects or by relations between '
8222*cda5da8dSAndroid Build Coastguard Worker            'objects. (In\n'
8223*cda5da8dSAndroid Build Coastguard Worker            'a sense, and in conformance to Von Neumann’s model of a “stored\n'
8224*cda5da8dSAndroid Build Coastguard Worker            'program computer”, code is also represented by objects.)\n'
8225*cda5da8dSAndroid Build Coastguard Worker            '\n'
8226*cda5da8dSAndroid Build Coastguard Worker            'Every object has an identity, a type and a value.  An object’s\n'
8227*cda5da8dSAndroid Build Coastguard Worker            '*identity* never changes once it has been created; you may think '
8228*cda5da8dSAndroid Build Coastguard Worker            'of it\n'
8229*cda5da8dSAndroid Build Coastguard Worker            'as the object’s address in memory.  The ‘"is"’ operator compares '
8230*cda5da8dSAndroid Build Coastguard Worker            'the\n'
8231*cda5da8dSAndroid Build Coastguard Worker            'identity of two objects; the "id()" function returns an integer\n'
8232*cda5da8dSAndroid Build Coastguard Worker            'representing its identity.\n'
8233*cda5da8dSAndroid Build Coastguard Worker            '\n'
8234*cda5da8dSAndroid Build Coastguard Worker            '**CPython implementation detail:** For CPython, "id(x)" is the '
8235*cda5da8dSAndroid Build Coastguard Worker            'memory\n'
8236*cda5da8dSAndroid Build Coastguard Worker            'address where "x" is stored.\n'
8237*cda5da8dSAndroid Build Coastguard Worker            '\n'
8238*cda5da8dSAndroid Build Coastguard Worker            'An object’s type determines the operations that the object '
8239*cda5da8dSAndroid Build Coastguard Worker            'supports\n'
8240*cda5da8dSAndroid Build Coastguard Worker            '(e.g., “does it have a length?”) and also defines the possible '
8241*cda5da8dSAndroid Build Coastguard Worker            'values\n'
8242*cda5da8dSAndroid Build Coastguard Worker            'for objects of that type.  The "type()" function returns an '
8243*cda5da8dSAndroid Build Coastguard Worker            'object’s\n'
8244*cda5da8dSAndroid Build Coastguard Worker            'type (which is an object itself).  Like its identity, an '
8245*cda5da8dSAndroid Build Coastguard Worker            'object’s\n'
8246*cda5da8dSAndroid Build Coastguard Worker            '*type* is also unchangeable. [1]\n'
8247*cda5da8dSAndroid Build Coastguard Worker            '\n'
8248*cda5da8dSAndroid Build Coastguard Worker            'The *value* of some objects can change.  Objects whose value can\n'
8249*cda5da8dSAndroid Build Coastguard Worker            'change are said to be *mutable*; objects whose value is '
8250*cda5da8dSAndroid Build Coastguard Worker            'unchangeable\n'
8251*cda5da8dSAndroid Build Coastguard Worker            'once they are created are called *immutable*. (The value of an\n'
8252*cda5da8dSAndroid Build Coastguard Worker            'immutable container object that contains a reference to a '
8253*cda5da8dSAndroid Build Coastguard Worker            'mutable\n'
8254*cda5da8dSAndroid Build Coastguard Worker            'object can change when the latter’s value is changed; however '
8255*cda5da8dSAndroid Build Coastguard Worker            'the\n'
8256*cda5da8dSAndroid Build Coastguard Worker            'container is still considered immutable, because the collection '
8257*cda5da8dSAndroid Build Coastguard Worker            'of\n'
8258*cda5da8dSAndroid Build Coastguard Worker            'objects it contains cannot be changed.  So, immutability is not\n'
8259*cda5da8dSAndroid Build Coastguard Worker            'strictly the same as having an unchangeable value, it is more '
8260*cda5da8dSAndroid Build Coastguard Worker            'subtle.)\n'
8261*cda5da8dSAndroid Build Coastguard Worker            'An object’s mutability is determined by its type; for instance,\n'
8262*cda5da8dSAndroid Build Coastguard Worker            'numbers, strings and tuples are immutable, while dictionaries '
8263*cda5da8dSAndroid Build Coastguard Worker            'and\n'
8264*cda5da8dSAndroid Build Coastguard Worker            'lists are mutable.\n'
8265*cda5da8dSAndroid Build Coastguard Worker            '\n'
8266*cda5da8dSAndroid Build Coastguard Worker            'Objects are never explicitly destroyed; however, when they '
8267*cda5da8dSAndroid Build Coastguard Worker            'become\n'
8268*cda5da8dSAndroid Build Coastguard Worker            'unreachable they may be garbage-collected.  An implementation is\n'
8269*cda5da8dSAndroid Build Coastguard Worker            'allowed to postpone garbage collection or omit it altogether — it '
8270*cda5da8dSAndroid Build Coastguard Worker            'is a\n'
8271*cda5da8dSAndroid Build Coastguard Worker            'matter of implementation quality how garbage collection is\n'
8272*cda5da8dSAndroid Build Coastguard Worker            'implemented, as long as no objects are collected that are still\n'
8273*cda5da8dSAndroid Build Coastguard Worker            'reachable.\n'
8274*cda5da8dSAndroid Build Coastguard Worker            '\n'
8275*cda5da8dSAndroid Build Coastguard Worker            '**CPython implementation detail:** CPython currently uses a '
8276*cda5da8dSAndroid Build Coastguard Worker            'reference-\n'
8277*cda5da8dSAndroid Build Coastguard Worker            'counting scheme with (optional) delayed detection of cyclically '
8278*cda5da8dSAndroid Build Coastguard Worker            'linked\n'
8279*cda5da8dSAndroid Build Coastguard Worker            'garbage, which collects most objects as soon as they become\n'
8280*cda5da8dSAndroid Build Coastguard Worker            'unreachable, but is not guaranteed to collect garbage containing\n'
8281*cda5da8dSAndroid Build Coastguard Worker            'circular references.  See the documentation of the "gc" module '
8282*cda5da8dSAndroid Build Coastguard Worker            'for\n'
8283*cda5da8dSAndroid Build Coastguard Worker            'information on controlling the collection of cyclic garbage. '
8284*cda5da8dSAndroid Build Coastguard Worker            'Other\n'
8285*cda5da8dSAndroid Build Coastguard Worker            'implementations act differently and CPython may change. Do not '
8286*cda5da8dSAndroid Build Coastguard Worker            'depend\n'
8287*cda5da8dSAndroid Build Coastguard Worker            'on immediate finalization of objects when they become unreachable '
8288*cda5da8dSAndroid Build Coastguard Worker            '(so\n'
8289*cda5da8dSAndroid Build Coastguard Worker            'you should always close files explicitly).\n'
8290*cda5da8dSAndroid Build Coastguard Worker            '\n'
8291*cda5da8dSAndroid Build Coastguard Worker            'Note that the use of the implementation’s tracing or debugging\n'
8292*cda5da8dSAndroid Build Coastguard Worker            'facilities may keep objects alive that would normally be '
8293*cda5da8dSAndroid Build Coastguard Worker            'collectable.\n'
8294*cda5da8dSAndroid Build Coastguard Worker            'Also note that catching an exception with a ‘"try"…"except"’ '
8295*cda5da8dSAndroid Build Coastguard Worker            'statement\n'
8296*cda5da8dSAndroid Build Coastguard Worker            'may keep objects alive.\n'
8297*cda5da8dSAndroid Build Coastguard Worker            '\n'
8298*cda5da8dSAndroid Build Coastguard Worker            'Some objects contain references to “external” resources such as '
8299*cda5da8dSAndroid Build Coastguard Worker            'open\n'
8300*cda5da8dSAndroid Build Coastguard Worker            'files or windows.  It is understood that these resources are '
8301*cda5da8dSAndroid Build Coastguard Worker            'freed\n'
8302*cda5da8dSAndroid Build Coastguard Worker            'when the object is garbage-collected, but since garbage '
8303*cda5da8dSAndroid Build Coastguard Worker            'collection is\n'
8304*cda5da8dSAndroid Build Coastguard Worker            'not guaranteed to happen, such objects also provide an explicit '
8305*cda5da8dSAndroid Build Coastguard Worker            'way to\n'
8306*cda5da8dSAndroid Build Coastguard Worker            'release the external resource, usually a "close()" method. '
8307*cda5da8dSAndroid Build Coastguard Worker            'Programs\n'
8308*cda5da8dSAndroid Build Coastguard Worker            'are strongly recommended to explicitly close such objects.  The\n'
8309*cda5da8dSAndroid Build Coastguard Worker            '‘"try"…"finally"’ statement and the ‘"with"’ statement provide\n'
8310*cda5da8dSAndroid Build Coastguard Worker            'convenient ways to do this.\n'
8311*cda5da8dSAndroid Build Coastguard Worker            '\n'
8312*cda5da8dSAndroid Build Coastguard Worker            'Some objects contain references to other objects; these are '
8313*cda5da8dSAndroid Build Coastguard Worker            'called\n'
8314*cda5da8dSAndroid Build Coastguard Worker            '*containers*. Examples of containers are tuples, lists and\n'
8315*cda5da8dSAndroid Build Coastguard Worker            'dictionaries.  The references are part of a container’s value.  '
8316*cda5da8dSAndroid Build Coastguard Worker            'In\n'
8317*cda5da8dSAndroid Build Coastguard Worker            'most cases, when we talk about the value of a container, we imply '
8318*cda5da8dSAndroid Build Coastguard Worker            'the\n'
8319*cda5da8dSAndroid Build Coastguard Worker            'values, not the identities of the contained objects; however, '
8320*cda5da8dSAndroid Build Coastguard Worker            'when we\n'
8321*cda5da8dSAndroid Build Coastguard Worker            'talk about the mutability of a container, only the identities of '
8322*cda5da8dSAndroid Build Coastguard Worker            'the\n'
8323*cda5da8dSAndroid Build Coastguard Worker            'immediately contained objects are implied.  So, if an immutable\n'
8324*cda5da8dSAndroid Build Coastguard Worker            'container (like a tuple) contains a reference to a mutable '
8325*cda5da8dSAndroid Build Coastguard Worker            'object, its\n'
8326*cda5da8dSAndroid Build Coastguard Worker            'value changes if that mutable object is changed.\n'
8327*cda5da8dSAndroid Build Coastguard Worker            '\n'
8328*cda5da8dSAndroid Build Coastguard Worker            'Types affect almost all aspects of object behavior.  Even the\n'
8329*cda5da8dSAndroid Build Coastguard Worker            'importance of object identity is affected in some sense: for '
8330*cda5da8dSAndroid Build Coastguard Worker            'immutable\n'
8331*cda5da8dSAndroid Build Coastguard Worker            'types, operations that compute new values may actually return a\n'
8332*cda5da8dSAndroid Build Coastguard Worker            'reference to any existing object with the same type and value, '
8333*cda5da8dSAndroid Build Coastguard Worker            'while\n'
8334*cda5da8dSAndroid Build Coastguard Worker            'for mutable objects this is not allowed.  E.g., after "a = 1; b = '
8335*cda5da8dSAndroid Build Coastguard Worker            '1",\n'
8336*cda5da8dSAndroid Build Coastguard Worker            '"a" and "b" may or may not refer to the same object with the '
8337*cda5da8dSAndroid Build Coastguard Worker            'value\n'
8338*cda5da8dSAndroid Build Coastguard Worker            'one, depending on the implementation, but after "c = []; d = []", '
8339*cda5da8dSAndroid Build Coastguard Worker            '"c"\n'
8340*cda5da8dSAndroid Build Coastguard Worker            'and "d" are guaranteed to refer to two different, unique, newly\n'
8341*cda5da8dSAndroid Build Coastguard Worker            'created empty lists. (Note that "c = d = []" assigns the same '
8342*cda5da8dSAndroid Build Coastguard Worker            'object\n'
8343*cda5da8dSAndroid Build Coastguard Worker            'to both "c" and "d".)\n',
8344*cda5da8dSAndroid Build Coastguard Worker 'operator-summary': 'Operator precedence\n'
8345*cda5da8dSAndroid Build Coastguard Worker                     '*******************\n'
8346*cda5da8dSAndroid Build Coastguard Worker                     '\n'
8347*cda5da8dSAndroid Build Coastguard Worker                     'The following table summarizes the operator precedence '
8348*cda5da8dSAndroid Build Coastguard Worker                     'in Python, from\n'
8349*cda5da8dSAndroid Build Coastguard Worker                     'highest precedence (most binding) to lowest precedence '
8350*cda5da8dSAndroid Build Coastguard Worker                     '(least\n'
8351*cda5da8dSAndroid Build Coastguard Worker                     'binding).  Operators in the same box have the same '
8352*cda5da8dSAndroid Build Coastguard Worker                     'precedence.  Unless\n'
8353*cda5da8dSAndroid Build Coastguard Worker                     'the syntax is explicitly given, operators are binary.  '
8354*cda5da8dSAndroid Build Coastguard Worker                     'Operators in\n'
8355*cda5da8dSAndroid Build Coastguard Worker                     'the same box group left to right (except for '
8356*cda5da8dSAndroid Build Coastguard Worker                     'exponentiation and\n'
8357*cda5da8dSAndroid Build Coastguard Worker                     'conditional expressions, which group from right to '
8358*cda5da8dSAndroid Build Coastguard Worker                     'left).\n'
8359*cda5da8dSAndroid Build Coastguard Worker                     '\n'
8360*cda5da8dSAndroid Build Coastguard Worker                     'Note that comparisons, membership tests, and identity '
8361*cda5da8dSAndroid Build Coastguard Worker                     'tests, all have\n'
8362*cda5da8dSAndroid Build Coastguard Worker                     'the same precedence and have a left-to-right chaining '
8363*cda5da8dSAndroid Build Coastguard Worker                     'feature as\n'
8364*cda5da8dSAndroid Build Coastguard Worker                     'described in the Comparisons section.\n'
8365*cda5da8dSAndroid Build Coastguard Worker                     '\n'
8366*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8367*cda5da8dSAndroid Build Coastguard Worker                     '| Operator                                        | '
8368*cda5da8dSAndroid Build Coastguard Worker                     'Description                           |\n'
8369*cda5da8dSAndroid Build Coastguard Worker                     '|=================================================|=======================================|\n'
8370*cda5da8dSAndroid Build Coastguard Worker                     '| "(expressions...)",  "[expressions...]", "{key: | '
8371*cda5da8dSAndroid Build Coastguard Worker                     'Binding or parenthesized expression,  |\n'
8372*cda5da8dSAndroid Build Coastguard Worker                     '| value...}", "{expressions...}"                  | list '
8373*cda5da8dSAndroid Build Coastguard Worker                     'display, dictionary display, set |\n'
8374*cda5da8dSAndroid Build Coastguard Worker                     '|                                                 | '
8375*cda5da8dSAndroid Build Coastguard Worker                     'display                               |\n'
8376*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8377*cda5da8dSAndroid Build Coastguard Worker                     '| "x[index]", "x[index:index]",                   | '
8378*cda5da8dSAndroid Build Coastguard Worker                     'Subscription, slicing, call,          |\n'
8379*cda5da8dSAndroid Build Coastguard Worker                     '| "x(arguments...)", "x.attribute"                | '
8380*cda5da8dSAndroid Build Coastguard Worker                     'attribute reference                   |\n'
8381*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8382*cda5da8dSAndroid Build Coastguard Worker                     '| "await x"                                       | '
8383*cda5da8dSAndroid Build Coastguard Worker                     'Await expression                      |\n'
8384*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8385*cda5da8dSAndroid Build Coastguard Worker                     '| "**"                                            | '
8386*cda5da8dSAndroid Build Coastguard Worker                     'Exponentiation [5]                    |\n'
8387*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8388*cda5da8dSAndroid Build Coastguard Worker                     '| "+x", "-x", "~x"                                | '
8389*cda5da8dSAndroid Build Coastguard Worker                     'Positive, negative, bitwise NOT       |\n'
8390*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8391*cda5da8dSAndroid Build Coastguard Worker                     '| "*", "@", "/", "//", "%"                        | '
8392*cda5da8dSAndroid Build Coastguard Worker                     'Multiplication, matrix                |\n'
8393*cda5da8dSAndroid Build Coastguard Worker                     '|                                                 | '
8394*cda5da8dSAndroid Build Coastguard Worker                     'multiplication, division, floor       |\n'
8395*cda5da8dSAndroid Build Coastguard Worker                     '|                                                 | '
8396*cda5da8dSAndroid Build Coastguard Worker                     'division, remainder [6]               |\n'
8397*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8398*cda5da8dSAndroid Build Coastguard Worker                     '| "+", "-"                                        | '
8399*cda5da8dSAndroid Build Coastguard Worker                     'Addition and subtraction              |\n'
8400*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8401*cda5da8dSAndroid Build Coastguard Worker                     '| "<<", ">>"                                      | '
8402*cda5da8dSAndroid Build Coastguard Worker                     'Shifts                                |\n'
8403*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8404*cda5da8dSAndroid Build Coastguard Worker                     '| "&"                                             | '
8405*cda5da8dSAndroid Build Coastguard Worker                     'Bitwise AND                           |\n'
8406*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8407*cda5da8dSAndroid Build Coastguard Worker                     '| "^"                                             | '
8408*cda5da8dSAndroid Build Coastguard Worker                     'Bitwise XOR                           |\n'
8409*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8410*cda5da8dSAndroid Build Coastguard Worker                     '| "|"                                             | '
8411*cda5da8dSAndroid Build Coastguard Worker                     'Bitwise OR                            |\n'
8412*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8413*cda5da8dSAndroid Build Coastguard Worker                     '| "in", "not in", "is", "is not", "<", "<=", ">", | '
8414*cda5da8dSAndroid Build Coastguard Worker                     'Comparisons, including membership     |\n'
8415*cda5da8dSAndroid Build Coastguard Worker                     '| ">=", "!=", "=="                                | '
8416*cda5da8dSAndroid Build Coastguard Worker                     'tests and identity tests              |\n'
8417*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8418*cda5da8dSAndroid Build Coastguard Worker                     '| "not x"                                         | '
8419*cda5da8dSAndroid Build Coastguard Worker                     'Boolean NOT                           |\n'
8420*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8421*cda5da8dSAndroid Build Coastguard Worker                     '| "and"                                           | '
8422*cda5da8dSAndroid Build Coastguard Worker                     'Boolean AND                           |\n'
8423*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8424*cda5da8dSAndroid Build Coastguard Worker                     '| "or"                                            | '
8425*cda5da8dSAndroid Build Coastguard Worker                     'Boolean OR                            |\n'
8426*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8427*cda5da8dSAndroid Build Coastguard Worker                     '| "if" – "else"                                   | '
8428*cda5da8dSAndroid Build Coastguard Worker                     'Conditional expression                |\n'
8429*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8430*cda5da8dSAndroid Build Coastguard Worker                     '| "lambda"                                        | '
8431*cda5da8dSAndroid Build Coastguard Worker                     'Lambda expression                     |\n'
8432*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8433*cda5da8dSAndroid Build Coastguard Worker                     '| ":="                                            | '
8434*cda5da8dSAndroid Build Coastguard Worker                     'Assignment expression                 |\n'
8435*cda5da8dSAndroid Build Coastguard Worker                     '+-------------------------------------------------+---------------------------------------+\n'
8436*cda5da8dSAndroid Build Coastguard Worker                     '\n'
8437*cda5da8dSAndroid Build Coastguard Worker                     '-[ Footnotes ]-\n'
8438*cda5da8dSAndroid Build Coastguard Worker                     '\n'
8439*cda5da8dSAndroid Build Coastguard Worker                     '[1] While "abs(x%y) < abs(y)" is true mathematically, '
8440*cda5da8dSAndroid Build Coastguard Worker                     'for floats it\n'
8441*cda5da8dSAndroid Build Coastguard Worker                     '    may not be true numerically due to roundoff.  For '
8442*cda5da8dSAndroid Build Coastguard Worker                     'example, and\n'
8443*cda5da8dSAndroid Build Coastguard Worker                     '    assuming a platform on which a Python float is an '
8444*cda5da8dSAndroid Build Coastguard Worker                     'IEEE 754 double-\n'
8445*cda5da8dSAndroid Build Coastguard Worker                     '    precision number, in order that "-1e-100 % 1e100" '
8446*cda5da8dSAndroid Build Coastguard Worker                     'have the same\n'
8447*cda5da8dSAndroid Build Coastguard Worker                     '    sign as "1e100", the computed result is "-1e-100 + '
8448*cda5da8dSAndroid Build Coastguard Worker                     '1e100", which\n'
8449*cda5da8dSAndroid Build Coastguard Worker                     '    is numerically exactly equal to "1e100".  The '
8450*cda5da8dSAndroid Build Coastguard Worker                     'function\n'
8451*cda5da8dSAndroid Build Coastguard Worker                     '    "math.fmod()" returns a result whose sign matches '
8452*cda5da8dSAndroid Build Coastguard Worker                     'the sign of the\n'
8453*cda5da8dSAndroid Build Coastguard Worker                     '    first argument instead, and so returns "-1e-100" in '
8454*cda5da8dSAndroid Build Coastguard Worker                     'this case.\n'
8455*cda5da8dSAndroid Build Coastguard Worker                     '    Which approach is more appropriate depends on the '
8456*cda5da8dSAndroid Build Coastguard Worker                     'application.\n'
8457*cda5da8dSAndroid Build Coastguard Worker                     '\n'
8458*cda5da8dSAndroid Build Coastguard Worker                     '[2] If x is very close to an exact integer multiple of '
8459*cda5da8dSAndroid Build Coastguard Worker                     'y, it’s\n'
8460*cda5da8dSAndroid Build Coastguard Worker                     '    possible for "x//y" to be one larger than '
8461*cda5da8dSAndroid Build Coastguard Worker                     '"(x-x%y)//y" due to\n'
8462*cda5da8dSAndroid Build Coastguard Worker                     '    rounding.  In such cases, Python returns the latter '
8463*cda5da8dSAndroid Build Coastguard Worker                     'result, in\n'
8464*cda5da8dSAndroid Build Coastguard Worker                     '    order to preserve that "divmod(x,y)[0] * y + x % y" '
8465*cda5da8dSAndroid Build Coastguard Worker                     'be very close\n'
8466*cda5da8dSAndroid Build Coastguard Worker                     '    to "x".\n'
8467*cda5da8dSAndroid Build Coastguard Worker                     '\n'
8468*cda5da8dSAndroid Build Coastguard Worker                     '[3] The Unicode standard distinguishes between *code '
8469*cda5da8dSAndroid Build Coastguard Worker                     'points* (e.g.\n'
8470*cda5da8dSAndroid Build Coastguard Worker                     '    U+0041) and *abstract characters* (e.g. “LATIN '
8471*cda5da8dSAndroid Build Coastguard Worker                     'CAPITAL LETTER A”).\n'
8472*cda5da8dSAndroid Build Coastguard Worker                     '    While most abstract characters in Unicode are only '
8473*cda5da8dSAndroid Build Coastguard Worker                     'represented\n'
8474*cda5da8dSAndroid Build Coastguard Worker                     '    using one code point, there is a number of abstract '
8475*cda5da8dSAndroid Build Coastguard Worker                     'characters\n'
8476*cda5da8dSAndroid Build Coastguard Worker                     '    that can in addition be represented using a sequence '
8477*cda5da8dSAndroid Build Coastguard Worker                     'of more than\n'
8478*cda5da8dSAndroid Build Coastguard Worker                     '    one code point.  For example, the abstract character '
8479*cda5da8dSAndroid Build Coastguard Worker                     '“LATIN\n'
8480*cda5da8dSAndroid Build Coastguard Worker                     '    CAPITAL LETTER C WITH CEDILLA” can be represented as '
8481*cda5da8dSAndroid Build Coastguard Worker                     'a single\n'
8482*cda5da8dSAndroid Build Coastguard Worker                     '    *precomposed character* at code position U+00C7, or '
8483*cda5da8dSAndroid Build Coastguard Worker                     'as a sequence\n'
8484*cda5da8dSAndroid Build Coastguard Worker                     '    of a *base character* at code position U+0043 (LATIN '
8485*cda5da8dSAndroid Build Coastguard Worker                     'CAPITAL\n'
8486*cda5da8dSAndroid Build Coastguard Worker                     '    LETTER C), followed by a *combining character* at '
8487*cda5da8dSAndroid Build Coastguard Worker                     'code position\n'
8488*cda5da8dSAndroid Build Coastguard Worker                     '    U+0327 (COMBINING CEDILLA).\n'
8489*cda5da8dSAndroid Build Coastguard Worker                     '\n'
8490*cda5da8dSAndroid Build Coastguard Worker                     '    The comparison operators on strings compare at the '
8491*cda5da8dSAndroid Build Coastguard Worker                     'level of\n'
8492*cda5da8dSAndroid Build Coastguard Worker                     '    Unicode code points. This may be counter-intuitive '
8493*cda5da8dSAndroid Build Coastguard Worker                     'to humans.  For\n'
8494*cda5da8dSAndroid Build Coastguard Worker                     '    example, ""\\u00C7" == "\\u0043\\u0327"" is "False", '
8495*cda5da8dSAndroid Build Coastguard Worker                     'even though both\n'
8496*cda5da8dSAndroid Build Coastguard Worker                     '    strings represent the same abstract character “LATIN '
8497*cda5da8dSAndroid Build Coastguard Worker                     'CAPITAL\n'
8498*cda5da8dSAndroid Build Coastguard Worker                     '    LETTER C WITH CEDILLA”.\n'
8499*cda5da8dSAndroid Build Coastguard Worker                     '\n'
8500*cda5da8dSAndroid Build Coastguard Worker                     '    To compare strings at the level of abstract '
8501*cda5da8dSAndroid Build Coastguard Worker                     'characters (that is,\n'
8502*cda5da8dSAndroid Build Coastguard Worker                     '    in a way intuitive to humans), use '
8503*cda5da8dSAndroid Build Coastguard Worker                     '"unicodedata.normalize()".\n'
8504*cda5da8dSAndroid Build Coastguard Worker                     '\n'
8505*cda5da8dSAndroid Build Coastguard Worker                     '[4] Due to automatic garbage-collection, free lists, and '
8506*cda5da8dSAndroid Build Coastguard Worker                     'the dynamic\n'
8507*cda5da8dSAndroid Build Coastguard Worker                     '    nature of descriptors, you may notice seemingly '
8508*cda5da8dSAndroid Build Coastguard Worker                     'unusual behaviour\n'
8509*cda5da8dSAndroid Build Coastguard Worker                     '    in certain uses of the "is" operator, like those '
8510*cda5da8dSAndroid Build Coastguard Worker                     'involving\n'
8511*cda5da8dSAndroid Build Coastguard Worker                     '    comparisons between instance methods, or constants.  '
8512*cda5da8dSAndroid Build Coastguard Worker                     'Check their\n'
8513*cda5da8dSAndroid Build Coastguard Worker                     '    documentation for more info.\n'
8514*cda5da8dSAndroid Build Coastguard Worker                     '\n'
8515*cda5da8dSAndroid Build Coastguard Worker                     '[5] The power operator "**" binds less tightly than an '
8516*cda5da8dSAndroid Build Coastguard Worker                     'arithmetic or\n'
8517*cda5da8dSAndroid Build Coastguard Worker                     '    bitwise unary operator on its right, that is, '
8518*cda5da8dSAndroid Build Coastguard Worker                     '"2**-1" is "0.5".\n'
8519*cda5da8dSAndroid Build Coastguard Worker                     '\n'
8520*cda5da8dSAndroid Build Coastguard Worker                     '[6] The "%" operator is also used for string formatting; '
8521*cda5da8dSAndroid Build Coastguard Worker                     'the same\n'
8522*cda5da8dSAndroid Build Coastguard Worker                     '    precedence applies.\n',
8523*cda5da8dSAndroid Build Coastguard Worker 'pass': 'The "pass" statement\n'
8524*cda5da8dSAndroid Build Coastguard Worker         '********************\n'
8525*cda5da8dSAndroid Build Coastguard Worker         '\n'
8526*cda5da8dSAndroid Build Coastguard Worker         '   pass_stmt ::= "pass"\n'
8527*cda5da8dSAndroid Build Coastguard Worker         '\n'
8528*cda5da8dSAndroid Build Coastguard Worker         '"pass" is a null operation — when it is executed, nothing happens. '
8529*cda5da8dSAndroid Build Coastguard Worker         'It\n'
8530*cda5da8dSAndroid Build Coastguard Worker         'is useful as a placeholder when a statement is required '
8531*cda5da8dSAndroid Build Coastguard Worker         'syntactically,\n'
8532*cda5da8dSAndroid Build Coastguard Worker         'but no code needs to be executed, for example:\n'
8533*cda5da8dSAndroid Build Coastguard Worker         '\n'
8534*cda5da8dSAndroid Build Coastguard Worker         '   def f(arg): pass    # a function that does nothing (yet)\n'
8535*cda5da8dSAndroid Build Coastguard Worker         '\n'
8536*cda5da8dSAndroid Build Coastguard Worker         '   class C: pass       # a class with no methods (yet)\n',
8537*cda5da8dSAndroid Build Coastguard Worker 'power': 'The power operator\n'
8538*cda5da8dSAndroid Build Coastguard Worker          '******************\n'
8539*cda5da8dSAndroid Build Coastguard Worker          '\n'
8540*cda5da8dSAndroid Build Coastguard Worker          'The power operator binds more tightly than unary operators on its\n'
8541*cda5da8dSAndroid Build Coastguard Worker          'left; it binds less tightly than unary operators on its right.  '
8542*cda5da8dSAndroid Build Coastguard Worker          'The\n'
8543*cda5da8dSAndroid Build Coastguard Worker          'syntax is:\n'
8544*cda5da8dSAndroid Build Coastguard Worker          '\n'
8545*cda5da8dSAndroid Build Coastguard Worker          '   power ::= (await_expr | primary) ["**" u_expr]\n'
8546*cda5da8dSAndroid Build Coastguard Worker          '\n'
8547*cda5da8dSAndroid Build Coastguard Worker          'Thus, in an unparenthesized sequence of power and unary operators, '
8548*cda5da8dSAndroid Build Coastguard Worker          'the\n'
8549*cda5da8dSAndroid Build Coastguard Worker          'operators are evaluated from right to left (this does not '
8550*cda5da8dSAndroid Build Coastguard Worker          'constrain\n'
8551*cda5da8dSAndroid Build Coastguard Worker          'the evaluation order for the operands): "-1**2" results in "-1".\n'
8552*cda5da8dSAndroid Build Coastguard Worker          '\n'
8553*cda5da8dSAndroid Build Coastguard Worker          'The power operator has the same semantics as the built-in "pow()"\n'
8554*cda5da8dSAndroid Build Coastguard Worker          'function, when called with two arguments: it yields its left '
8555*cda5da8dSAndroid Build Coastguard Worker          'argument\n'
8556*cda5da8dSAndroid Build Coastguard Worker          'raised to the power of its right argument.  The numeric arguments '
8557*cda5da8dSAndroid Build Coastguard Worker          'are\n'
8558*cda5da8dSAndroid Build Coastguard Worker          'first converted to a common type, and the result is of that type.\n'
8559*cda5da8dSAndroid Build Coastguard Worker          '\n'
8560*cda5da8dSAndroid Build Coastguard Worker          'For int operands, the result has the same type as the operands '
8561*cda5da8dSAndroid Build Coastguard Worker          'unless\n'
8562*cda5da8dSAndroid Build Coastguard Worker          'the second argument is negative; in that case, all arguments are\n'
8563*cda5da8dSAndroid Build Coastguard Worker          'converted to float and a float result is delivered. For example,\n'
8564*cda5da8dSAndroid Build Coastguard Worker          '"10**2" returns "100", but "10**-2" returns "0.01".\n'
8565*cda5da8dSAndroid Build Coastguard Worker          '\n'
8566*cda5da8dSAndroid Build Coastguard Worker          'Raising "0.0" to a negative power results in a '
8567*cda5da8dSAndroid Build Coastguard Worker          '"ZeroDivisionError".\n'
8568*cda5da8dSAndroid Build Coastguard Worker          'Raising a negative number to a fractional power results in a '
8569*cda5da8dSAndroid Build Coastguard Worker          '"complex"\n'
8570*cda5da8dSAndroid Build Coastguard Worker          'number. (In earlier versions it raised a "ValueError".)\n'
8571*cda5da8dSAndroid Build Coastguard Worker          '\n'
8572*cda5da8dSAndroid Build Coastguard Worker          'This operation can be customized using the special "__pow__()" '
8573*cda5da8dSAndroid Build Coastguard Worker          'method.\n',
8574*cda5da8dSAndroid Build Coastguard Worker 'raise': 'The "raise" statement\n'
8575*cda5da8dSAndroid Build Coastguard Worker          '*********************\n'
8576*cda5da8dSAndroid Build Coastguard Worker          '\n'
8577*cda5da8dSAndroid Build Coastguard Worker          '   raise_stmt ::= "raise" [expression ["from" expression]]\n'
8578*cda5da8dSAndroid Build Coastguard Worker          '\n'
8579*cda5da8dSAndroid Build Coastguard Worker          'If no expressions are present, "raise" re-raises the exception that '
8580*cda5da8dSAndroid Build Coastguard Worker          'is\n'
8581*cda5da8dSAndroid Build Coastguard Worker          'currently being handled, which is also known as the *active\n'
8582*cda5da8dSAndroid Build Coastguard Worker          'exception*. If there isn’t currently an active exception, a\n'
8583*cda5da8dSAndroid Build Coastguard Worker          '"RuntimeError" exception is raised indicating that this is an '
8584*cda5da8dSAndroid Build Coastguard Worker          'error.\n'
8585*cda5da8dSAndroid Build Coastguard Worker          '\n'
8586*cda5da8dSAndroid Build Coastguard Worker          'Otherwise, "raise" evaluates the first expression as the exception\n'
8587*cda5da8dSAndroid Build Coastguard Worker          'object.  It must be either a subclass or an instance of\n'
8588*cda5da8dSAndroid Build Coastguard Worker          '"BaseException". If it is a class, the exception instance will be\n'
8589*cda5da8dSAndroid Build Coastguard Worker          'obtained when needed by instantiating the class with no arguments.\n'
8590*cda5da8dSAndroid Build Coastguard Worker          '\n'
8591*cda5da8dSAndroid Build Coastguard Worker          'The *type* of the exception is the exception instance’s class, the\n'
8592*cda5da8dSAndroid Build Coastguard Worker          '*value* is the instance itself.\n'
8593*cda5da8dSAndroid Build Coastguard Worker          '\n'
8594*cda5da8dSAndroid Build Coastguard Worker          'A traceback object is normally created automatically when an '
8595*cda5da8dSAndroid Build Coastguard Worker          'exception\n'
8596*cda5da8dSAndroid Build Coastguard Worker          'is raised and attached to it as the "__traceback__" attribute, '
8597*cda5da8dSAndroid Build Coastguard Worker          'which\n'
8598*cda5da8dSAndroid Build Coastguard Worker          'is writable. You can create an exception and set your own traceback '
8599*cda5da8dSAndroid Build Coastguard Worker          'in\n'
8600*cda5da8dSAndroid Build Coastguard Worker          'one step using the "with_traceback()" exception method (which '
8601*cda5da8dSAndroid Build Coastguard Worker          'returns\n'
8602*cda5da8dSAndroid Build Coastguard Worker          'the same exception instance, with its traceback set to its '
8603*cda5da8dSAndroid Build Coastguard Worker          'argument),\n'
8604*cda5da8dSAndroid Build Coastguard Worker          'like so:\n'
8605*cda5da8dSAndroid Build Coastguard Worker          '\n'
8606*cda5da8dSAndroid Build Coastguard Worker          '   raise Exception("foo occurred").with_traceback(tracebackobj)\n'
8607*cda5da8dSAndroid Build Coastguard Worker          '\n'
8608*cda5da8dSAndroid Build Coastguard Worker          'The "from" clause is used for exception chaining: if given, the '
8609*cda5da8dSAndroid Build Coastguard Worker          'second\n'
8610*cda5da8dSAndroid Build Coastguard Worker          '*expression* must be another exception class or instance. If the\n'
8611*cda5da8dSAndroid Build Coastguard Worker          'second expression is an exception instance, it will be attached to '
8612*cda5da8dSAndroid Build Coastguard Worker          'the\n'
8613*cda5da8dSAndroid Build Coastguard Worker          'raised exception as the "__cause__" attribute (which is writable). '
8614*cda5da8dSAndroid Build Coastguard Worker          'If\n'
8615*cda5da8dSAndroid Build Coastguard Worker          'the expression is an exception class, the class will be '
8616*cda5da8dSAndroid Build Coastguard Worker          'instantiated\n'
8617*cda5da8dSAndroid Build Coastguard Worker          'and the resulting exception instance will be attached to the '
8618*cda5da8dSAndroid Build Coastguard Worker          'raised\n'
8619*cda5da8dSAndroid Build Coastguard Worker          'exception as the "__cause__" attribute. If the raised exception is '
8620*cda5da8dSAndroid Build Coastguard Worker          'not\n'
8621*cda5da8dSAndroid Build Coastguard Worker          'handled, both exceptions will be printed:\n'
8622*cda5da8dSAndroid Build Coastguard Worker          '\n'
8623*cda5da8dSAndroid Build Coastguard Worker          '   >>> try:\n'
8624*cda5da8dSAndroid Build Coastguard Worker          '   ...     print(1 / 0)\n'
8625*cda5da8dSAndroid Build Coastguard Worker          '   ... except Exception as exc:\n'
8626*cda5da8dSAndroid Build Coastguard Worker          '   ...     raise RuntimeError("Something bad happened") from exc\n'
8627*cda5da8dSAndroid Build Coastguard Worker          '   ...\n'
8628*cda5da8dSAndroid Build Coastguard Worker          '   Traceback (most recent call last):\n'
8629*cda5da8dSAndroid Build Coastguard Worker          '     File "<stdin>", line 2, in <module>\n'
8630*cda5da8dSAndroid Build Coastguard Worker          '   ZeroDivisionError: division by zero\n'
8631*cda5da8dSAndroid Build Coastguard Worker          '\n'
8632*cda5da8dSAndroid Build Coastguard Worker          '   The above exception was the direct cause of the following '
8633*cda5da8dSAndroid Build Coastguard Worker          'exception:\n'
8634*cda5da8dSAndroid Build Coastguard Worker          '\n'
8635*cda5da8dSAndroid Build Coastguard Worker          '   Traceback (most recent call last):\n'
8636*cda5da8dSAndroid Build Coastguard Worker          '     File "<stdin>", line 4, in <module>\n'
8637*cda5da8dSAndroid Build Coastguard Worker          '   RuntimeError: Something bad happened\n'
8638*cda5da8dSAndroid Build Coastguard Worker          '\n'
8639*cda5da8dSAndroid Build Coastguard Worker          'A similar mechanism works implicitly if a new exception is raised '
8640*cda5da8dSAndroid Build Coastguard Worker          'when\n'
8641*cda5da8dSAndroid Build Coastguard Worker          'an exception is already being handled.  An exception may be '
8642*cda5da8dSAndroid Build Coastguard Worker          'handled\n'
8643*cda5da8dSAndroid Build Coastguard Worker          'when an "except" or "finally" clause, or a "with" statement, is '
8644*cda5da8dSAndroid Build Coastguard Worker          'used.\n'
8645*cda5da8dSAndroid Build Coastguard Worker          'The previous exception is then attached as the new exception’s\n'
8646*cda5da8dSAndroid Build Coastguard Worker          '"__context__" attribute:\n'
8647*cda5da8dSAndroid Build Coastguard Worker          '\n'
8648*cda5da8dSAndroid Build Coastguard Worker          '   >>> try:\n'
8649*cda5da8dSAndroid Build Coastguard Worker          '   ...     print(1 / 0)\n'
8650*cda5da8dSAndroid Build Coastguard Worker          '   ... except:\n'
8651*cda5da8dSAndroid Build Coastguard Worker          '   ...     raise RuntimeError("Something bad happened")\n'
8652*cda5da8dSAndroid Build Coastguard Worker          '   ...\n'
8653*cda5da8dSAndroid Build Coastguard Worker          '   Traceback (most recent call last):\n'
8654*cda5da8dSAndroid Build Coastguard Worker          '     File "<stdin>", line 2, in <module>\n'
8655*cda5da8dSAndroid Build Coastguard Worker          '   ZeroDivisionError: division by zero\n'
8656*cda5da8dSAndroid Build Coastguard Worker          '\n'
8657*cda5da8dSAndroid Build Coastguard Worker          '   During handling of the above exception, another exception '
8658*cda5da8dSAndroid Build Coastguard Worker          'occurred:\n'
8659*cda5da8dSAndroid Build Coastguard Worker          '\n'
8660*cda5da8dSAndroid Build Coastguard Worker          '   Traceback (most recent call last):\n'
8661*cda5da8dSAndroid Build Coastguard Worker          '     File "<stdin>", line 4, in <module>\n'
8662*cda5da8dSAndroid Build Coastguard Worker          '   RuntimeError: Something bad happened\n'
8663*cda5da8dSAndroid Build Coastguard Worker          '\n'
8664*cda5da8dSAndroid Build Coastguard Worker          'Exception chaining can be explicitly suppressed by specifying '
8665*cda5da8dSAndroid Build Coastguard Worker          '"None"\n'
8666*cda5da8dSAndroid Build Coastguard Worker          'in the "from" clause:\n'
8667*cda5da8dSAndroid Build Coastguard Worker          '\n'
8668*cda5da8dSAndroid Build Coastguard Worker          '   >>> try:\n'
8669*cda5da8dSAndroid Build Coastguard Worker          '   ...     print(1 / 0)\n'
8670*cda5da8dSAndroid Build Coastguard Worker          '   ... except:\n'
8671*cda5da8dSAndroid Build Coastguard Worker          '   ...     raise RuntimeError("Something bad happened") from None\n'
8672*cda5da8dSAndroid Build Coastguard Worker          '   ...\n'
8673*cda5da8dSAndroid Build Coastguard Worker          '   Traceback (most recent call last):\n'
8674*cda5da8dSAndroid Build Coastguard Worker          '     File "<stdin>", line 4, in <module>\n'
8675*cda5da8dSAndroid Build Coastguard Worker          '   RuntimeError: Something bad happened\n'
8676*cda5da8dSAndroid Build Coastguard Worker          '\n'
8677*cda5da8dSAndroid Build Coastguard Worker          'Additional information on exceptions can be found in section\n'
8678*cda5da8dSAndroid Build Coastguard Worker          'Exceptions, and information about handling exceptions is in '
8679*cda5da8dSAndroid Build Coastguard Worker          'section\n'
8680*cda5da8dSAndroid Build Coastguard Worker          'The try statement.\n'
8681*cda5da8dSAndroid Build Coastguard Worker          '\n'
8682*cda5da8dSAndroid Build Coastguard Worker          'Changed in version 3.3: "None" is now permitted as "Y" in "raise X\n'
8683*cda5da8dSAndroid Build Coastguard Worker          'from Y".\n'
8684*cda5da8dSAndroid Build Coastguard Worker          '\n'
8685*cda5da8dSAndroid Build Coastguard Worker          'New in version 3.3: The "__suppress_context__" attribute to '
8686*cda5da8dSAndroid Build Coastguard Worker          'suppress\n'
8687*cda5da8dSAndroid Build Coastguard Worker          'automatic display of the exception context.\n'
8688*cda5da8dSAndroid Build Coastguard Worker          '\n'
8689*cda5da8dSAndroid Build Coastguard Worker          'Changed in version 3.11: If the traceback of the active exception '
8690*cda5da8dSAndroid Build Coastguard Worker          'is\n'
8691*cda5da8dSAndroid Build Coastguard Worker          'modified in an "except" clause, a subsequent "raise" statement re-\n'
8692*cda5da8dSAndroid Build Coastguard Worker          'raises the exception with the modified traceback. Previously, the\n'
8693*cda5da8dSAndroid Build Coastguard Worker          'exception was re-raised with the traceback it had when it was '
8694*cda5da8dSAndroid Build Coastguard Worker          'caught.\n',
8695*cda5da8dSAndroid Build Coastguard Worker 'return': 'The "return" statement\n'
8696*cda5da8dSAndroid Build Coastguard Worker           '**********************\n'
8697*cda5da8dSAndroid Build Coastguard Worker           '\n'
8698*cda5da8dSAndroid Build Coastguard Worker           '   return_stmt ::= "return" [expression_list]\n'
8699*cda5da8dSAndroid Build Coastguard Worker           '\n'
8700*cda5da8dSAndroid Build Coastguard Worker           '"return" may only occur syntactically nested in a function '
8701*cda5da8dSAndroid Build Coastguard Worker           'definition,\n'
8702*cda5da8dSAndroid Build Coastguard Worker           'not within a nested class definition.\n'
8703*cda5da8dSAndroid Build Coastguard Worker           '\n'
8704*cda5da8dSAndroid Build Coastguard Worker           'If an expression list is present, it is evaluated, else "None" is\n'
8705*cda5da8dSAndroid Build Coastguard Worker           'substituted.\n'
8706*cda5da8dSAndroid Build Coastguard Worker           '\n'
8707*cda5da8dSAndroid Build Coastguard Worker           '"return" leaves the current function call with the expression list '
8708*cda5da8dSAndroid Build Coastguard Worker           '(or\n'
8709*cda5da8dSAndroid Build Coastguard Worker           '"None") as return value.\n'
8710*cda5da8dSAndroid Build Coastguard Worker           '\n'
8711*cda5da8dSAndroid Build Coastguard Worker           'When "return" passes control out of a "try" statement with a '
8712*cda5da8dSAndroid Build Coastguard Worker           '"finally"\n'
8713*cda5da8dSAndroid Build Coastguard Worker           'clause, that "finally" clause is executed before really leaving '
8714*cda5da8dSAndroid Build Coastguard Worker           'the\n'
8715*cda5da8dSAndroid Build Coastguard Worker           'function.\n'
8716*cda5da8dSAndroid Build Coastguard Worker           '\n'
8717*cda5da8dSAndroid Build Coastguard Worker           'In a generator function, the "return" statement indicates that '
8718*cda5da8dSAndroid Build Coastguard Worker           'the\n'
8719*cda5da8dSAndroid Build Coastguard Worker           'generator is done and will cause "StopIteration" to be raised. '
8720*cda5da8dSAndroid Build Coastguard Worker           'The\n'
8721*cda5da8dSAndroid Build Coastguard Worker           'returned value (if any) is used as an argument to construct\n'
8722*cda5da8dSAndroid Build Coastguard Worker           '"StopIteration" and becomes the "StopIteration.value" attribute.\n'
8723*cda5da8dSAndroid Build Coastguard Worker           '\n'
8724*cda5da8dSAndroid Build Coastguard Worker           'In an asynchronous generator function, an empty "return" '
8725*cda5da8dSAndroid Build Coastguard Worker           'statement\n'
8726*cda5da8dSAndroid Build Coastguard Worker           'indicates that the asynchronous generator is done and will cause\n'
8727*cda5da8dSAndroid Build Coastguard Worker           '"StopAsyncIteration" to be raised.  A non-empty "return" statement '
8728*cda5da8dSAndroid Build Coastguard Worker           'is\n'
8729*cda5da8dSAndroid Build Coastguard Worker           'a syntax error in an asynchronous generator function.\n',
8730*cda5da8dSAndroid Build Coastguard Worker 'sequence-types': 'Emulating container types\n'
8731*cda5da8dSAndroid Build Coastguard Worker                   '*************************\n'
8732*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8733*cda5da8dSAndroid Build Coastguard Worker                   'The following methods can be defined to implement '
8734*cda5da8dSAndroid Build Coastguard Worker                   'container objects.\n'
8735*cda5da8dSAndroid Build Coastguard Worker                   'Containers usually are *sequences* (such as "lists" or '
8736*cda5da8dSAndroid Build Coastguard Worker                   '"tuples") or\n'
8737*cda5da8dSAndroid Build Coastguard Worker                   '*mappings* (like "dictionaries"), but can represent other '
8738*cda5da8dSAndroid Build Coastguard Worker                   'containers\n'
8739*cda5da8dSAndroid Build Coastguard Worker                   'as well.  The first set of methods is used either to '
8740*cda5da8dSAndroid Build Coastguard Worker                   'emulate a\n'
8741*cda5da8dSAndroid Build Coastguard Worker                   'sequence or to emulate a mapping; the difference is that '
8742*cda5da8dSAndroid Build Coastguard Worker                   'for a\n'
8743*cda5da8dSAndroid Build Coastguard Worker                   'sequence, the allowable keys should be the integers *k* '
8744*cda5da8dSAndroid Build Coastguard Worker                   'for which "0\n'
8745*cda5da8dSAndroid Build Coastguard Worker                   '<= k < N" where *N* is the length of the sequence, or '
8746*cda5da8dSAndroid Build Coastguard Worker                   '"slice" objects,\n'
8747*cda5da8dSAndroid Build Coastguard Worker                   'which define a range of items.  It is also recommended '
8748*cda5da8dSAndroid Build Coastguard Worker                   'that mappings\n'
8749*cda5da8dSAndroid Build Coastguard Worker                   'provide the methods "keys()", "values()", "items()", '
8750*cda5da8dSAndroid Build Coastguard Worker                   '"get()",\n'
8751*cda5da8dSAndroid Build Coastguard Worker                   '"clear()", "setdefault()", "pop()", "popitem()", "copy()", '
8752*cda5da8dSAndroid Build Coastguard Worker                   'and\n'
8753*cda5da8dSAndroid Build Coastguard Worker                   '"update()" behaving similar to those for Python’s '
8754*cda5da8dSAndroid Build Coastguard Worker                   'standard\n'
8755*cda5da8dSAndroid Build Coastguard Worker                   '"dictionary" objects.  The "collections.abc" module '
8756*cda5da8dSAndroid Build Coastguard Worker                   'provides a\n'
8757*cda5da8dSAndroid Build Coastguard Worker                   '"MutableMapping" *abstract base class* to help create '
8758*cda5da8dSAndroid Build Coastguard Worker                   'those methods\n'
8759*cda5da8dSAndroid Build Coastguard Worker                   'from a base set of "__getitem__()", "__setitem__()", '
8760*cda5da8dSAndroid Build Coastguard Worker                   '"__delitem__()",\n'
8761*cda5da8dSAndroid Build Coastguard Worker                   'and "keys()". Mutable sequences should provide methods '
8762*cda5da8dSAndroid Build Coastguard Worker                   '"append()",\n'
8763*cda5da8dSAndroid Build Coastguard Worker                   '"count()", "index()", "extend()", "insert()", "pop()", '
8764*cda5da8dSAndroid Build Coastguard Worker                   '"remove()",\n'
8765*cda5da8dSAndroid Build Coastguard Worker                   '"reverse()" and "sort()", like Python standard "list" '
8766*cda5da8dSAndroid Build Coastguard Worker                   'objects.\n'
8767*cda5da8dSAndroid Build Coastguard Worker                   'Finally, sequence types should implement addition '
8768*cda5da8dSAndroid Build Coastguard Worker                   '(meaning\n'
8769*cda5da8dSAndroid Build Coastguard Worker                   'concatenation) and multiplication (meaning repetition) by '
8770*cda5da8dSAndroid Build Coastguard Worker                   'defining the\n'
8771*cda5da8dSAndroid Build Coastguard Worker                   'methods "__add__()", "__radd__()", "__iadd__()", '
8772*cda5da8dSAndroid Build Coastguard Worker                   '"__mul__()",\n'
8773*cda5da8dSAndroid Build Coastguard Worker                   '"__rmul__()" and "__imul__()" described below; they should '
8774*cda5da8dSAndroid Build Coastguard Worker                   'not define\n'
8775*cda5da8dSAndroid Build Coastguard Worker                   'other numerical operators.  It is recommended that both '
8776*cda5da8dSAndroid Build Coastguard Worker                   'mappings and\n'
8777*cda5da8dSAndroid Build Coastguard Worker                   'sequences implement the "__contains__()" method to allow '
8778*cda5da8dSAndroid Build Coastguard Worker                   'efficient use\n'
8779*cda5da8dSAndroid Build Coastguard Worker                   'of the "in" operator; for mappings, "in" should search the '
8780*cda5da8dSAndroid Build Coastguard Worker                   'mapping’s\n'
8781*cda5da8dSAndroid Build Coastguard Worker                   'keys; for sequences, it should search through the values.  '
8782*cda5da8dSAndroid Build Coastguard Worker                   'It is\n'
8783*cda5da8dSAndroid Build Coastguard Worker                   'further recommended that both mappings and sequences '
8784*cda5da8dSAndroid Build Coastguard Worker                   'implement the\n'
8785*cda5da8dSAndroid Build Coastguard Worker                   '"__iter__()" method to allow efficient iteration through '
8786*cda5da8dSAndroid Build Coastguard Worker                   'the\n'
8787*cda5da8dSAndroid Build Coastguard Worker                   'container; for mappings, "__iter__()" should iterate '
8788*cda5da8dSAndroid Build Coastguard Worker                   'through the\n'
8789*cda5da8dSAndroid Build Coastguard Worker                   'object’s keys; for sequences, it should iterate through '
8790*cda5da8dSAndroid Build Coastguard Worker                   'the values.\n'
8791*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8792*cda5da8dSAndroid Build Coastguard Worker                   'object.__len__(self)\n'
8793*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8794*cda5da8dSAndroid Build Coastguard Worker                   '   Called to implement the built-in function "len()".  '
8795*cda5da8dSAndroid Build Coastguard Worker                   'Should return\n'
8796*cda5da8dSAndroid Build Coastguard Worker                   '   the length of the object, an integer ">=" 0.  Also, an '
8797*cda5da8dSAndroid Build Coastguard Worker                   'object that\n'
8798*cda5da8dSAndroid Build Coastguard Worker                   '   doesn’t define a "__bool__()" method and whose '
8799*cda5da8dSAndroid Build Coastguard Worker                   '"__len__()" method\n'
8800*cda5da8dSAndroid Build Coastguard Worker                   '   returns zero is considered to be false in a Boolean '
8801*cda5da8dSAndroid Build Coastguard Worker                   'context.\n'
8802*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8803*cda5da8dSAndroid Build Coastguard Worker                   '   **CPython implementation detail:** In CPython, the '
8804*cda5da8dSAndroid Build Coastguard Worker                   'length is\n'
8805*cda5da8dSAndroid Build Coastguard Worker                   '   required to be at most "sys.maxsize". If the length is '
8806*cda5da8dSAndroid Build Coastguard Worker                   'larger than\n'
8807*cda5da8dSAndroid Build Coastguard Worker                   '   "sys.maxsize" some features (such as "len()") may '
8808*cda5da8dSAndroid Build Coastguard Worker                   'raise\n'
8809*cda5da8dSAndroid Build Coastguard Worker                   '   "OverflowError".  To prevent raising "OverflowError" by '
8810*cda5da8dSAndroid Build Coastguard Worker                   'truth value\n'
8811*cda5da8dSAndroid Build Coastguard Worker                   '   testing, an object must define a "__bool__()" method.\n'
8812*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8813*cda5da8dSAndroid Build Coastguard Worker                   'object.__length_hint__(self)\n'
8814*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8815*cda5da8dSAndroid Build Coastguard Worker                   '   Called to implement "operator.length_hint()". Should '
8816*cda5da8dSAndroid Build Coastguard Worker                   'return an\n'
8817*cda5da8dSAndroid Build Coastguard Worker                   '   estimated length for the object (which may be greater '
8818*cda5da8dSAndroid Build Coastguard Worker                   'or less than\n'
8819*cda5da8dSAndroid Build Coastguard Worker                   '   the actual length). The length must be an integer ">=" '
8820*cda5da8dSAndroid Build Coastguard Worker                   '0. The\n'
8821*cda5da8dSAndroid Build Coastguard Worker                   '   return value may also be "NotImplemented", which is '
8822*cda5da8dSAndroid Build Coastguard Worker                   'treated the\n'
8823*cda5da8dSAndroid Build Coastguard Worker                   '   same as if the "__length_hint__" method didn’t exist at '
8824*cda5da8dSAndroid Build Coastguard Worker                   'all. This\n'
8825*cda5da8dSAndroid Build Coastguard Worker                   '   method is purely an optimization and is never required '
8826*cda5da8dSAndroid Build Coastguard Worker                   'for\n'
8827*cda5da8dSAndroid Build Coastguard Worker                   '   correctness.\n'
8828*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8829*cda5da8dSAndroid Build Coastguard Worker                   '   New in version 3.4.\n'
8830*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8831*cda5da8dSAndroid Build Coastguard Worker                   'Note:\n'
8832*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8833*cda5da8dSAndroid Build Coastguard Worker                   '  Slicing is done exclusively with the following three '
8834*cda5da8dSAndroid Build Coastguard Worker                   'methods.  A\n'
8835*cda5da8dSAndroid Build Coastguard Worker                   '  call like\n'
8836*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8837*cda5da8dSAndroid Build Coastguard Worker                   '     a[1:2] = b\n'
8838*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8839*cda5da8dSAndroid Build Coastguard Worker                   '  is translated to\n'
8840*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8841*cda5da8dSAndroid Build Coastguard Worker                   '     a[slice(1, 2, None)] = b\n'
8842*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8843*cda5da8dSAndroid Build Coastguard Worker                   '  and so forth.  Missing slice items are always filled in '
8844*cda5da8dSAndroid Build Coastguard Worker                   'with "None".\n'
8845*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8846*cda5da8dSAndroid Build Coastguard Worker                   'object.__getitem__(self, key)\n'
8847*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8848*cda5da8dSAndroid Build Coastguard Worker                   '   Called to implement evaluation of "self[key]". For '
8849*cda5da8dSAndroid Build Coastguard Worker                   '*sequence*\n'
8850*cda5da8dSAndroid Build Coastguard Worker                   '   types, the accepted keys should be integers and slice '
8851*cda5da8dSAndroid Build Coastguard Worker                   'objects.\n'
8852*cda5da8dSAndroid Build Coastguard Worker                   '   Note that the special interpretation of negative '
8853*cda5da8dSAndroid Build Coastguard Worker                   'indexes (if the\n'
8854*cda5da8dSAndroid Build Coastguard Worker                   '   class wishes to emulate a *sequence* type) is up to '
8855*cda5da8dSAndroid Build Coastguard Worker                   'the\n'
8856*cda5da8dSAndroid Build Coastguard Worker                   '   "__getitem__()" method. If *key* is of an inappropriate '
8857*cda5da8dSAndroid Build Coastguard Worker                   'type,\n'
8858*cda5da8dSAndroid Build Coastguard Worker                   '   "TypeError" may be raised; if of a value outside the '
8859*cda5da8dSAndroid Build Coastguard Worker                   'set of indexes\n'
8860*cda5da8dSAndroid Build Coastguard Worker                   '   for the sequence (after any special interpretation of '
8861*cda5da8dSAndroid Build Coastguard Worker                   'negative\n'
8862*cda5da8dSAndroid Build Coastguard Worker                   '   values), "IndexError" should be raised. For *mapping* '
8863*cda5da8dSAndroid Build Coastguard Worker                   'types, if\n'
8864*cda5da8dSAndroid Build Coastguard Worker                   '   *key* is missing (not in the container), "KeyError" '
8865*cda5da8dSAndroid Build Coastguard Worker                   'should be\n'
8866*cda5da8dSAndroid Build Coastguard Worker                   '   raised.\n'
8867*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8868*cda5da8dSAndroid Build Coastguard Worker                   '   Note:\n'
8869*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8870*cda5da8dSAndroid Build Coastguard Worker                   '     "for" loops expect that an "IndexError" will be '
8871*cda5da8dSAndroid Build Coastguard Worker                   'raised for\n'
8872*cda5da8dSAndroid Build Coastguard Worker                   '     illegal indexes to allow proper detection of the end '
8873*cda5da8dSAndroid Build Coastguard Worker                   'of the\n'
8874*cda5da8dSAndroid Build Coastguard Worker                   '     sequence.\n'
8875*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8876*cda5da8dSAndroid Build Coastguard Worker                   '   Note:\n'
8877*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8878*cda5da8dSAndroid Build Coastguard Worker                   '     When subscripting a *class*, the special class '
8879*cda5da8dSAndroid Build Coastguard Worker                   'method\n'
8880*cda5da8dSAndroid Build Coastguard Worker                   '     "__class_getitem__()" may be called instead of '
8881*cda5da8dSAndroid Build Coastguard Worker                   '"__getitem__()".\n'
8882*cda5da8dSAndroid Build Coastguard Worker                   '     See __class_getitem__ versus __getitem__ for more '
8883*cda5da8dSAndroid Build Coastguard Worker                   'details.\n'
8884*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8885*cda5da8dSAndroid Build Coastguard Worker                   'object.__setitem__(self, key, value)\n'
8886*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8887*cda5da8dSAndroid Build Coastguard Worker                   '   Called to implement assignment to "self[key]".  Same '
8888*cda5da8dSAndroid Build Coastguard Worker                   'note as for\n'
8889*cda5da8dSAndroid Build Coastguard Worker                   '   "__getitem__()".  This should only be implemented for '
8890*cda5da8dSAndroid Build Coastguard Worker                   'mappings if\n'
8891*cda5da8dSAndroid Build Coastguard Worker                   '   the objects support changes to the values for keys, or '
8892*cda5da8dSAndroid Build Coastguard Worker                   'if new keys\n'
8893*cda5da8dSAndroid Build Coastguard Worker                   '   can be added, or for sequences if elements can be '
8894*cda5da8dSAndroid Build Coastguard Worker                   'replaced.  The\n'
8895*cda5da8dSAndroid Build Coastguard Worker                   '   same exceptions should be raised for improper *key* '
8896*cda5da8dSAndroid Build Coastguard Worker                   'values as for\n'
8897*cda5da8dSAndroid Build Coastguard Worker                   '   the "__getitem__()" method.\n'
8898*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8899*cda5da8dSAndroid Build Coastguard Worker                   'object.__delitem__(self, key)\n'
8900*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8901*cda5da8dSAndroid Build Coastguard Worker                   '   Called to implement deletion of "self[key]".  Same note '
8902*cda5da8dSAndroid Build Coastguard Worker                   'as for\n'
8903*cda5da8dSAndroid Build Coastguard Worker                   '   "__getitem__()".  This should only be implemented for '
8904*cda5da8dSAndroid Build Coastguard Worker                   'mappings if\n'
8905*cda5da8dSAndroid Build Coastguard Worker                   '   the objects support removal of keys, or for sequences '
8906*cda5da8dSAndroid Build Coastguard Worker                   'if elements\n'
8907*cda5da8dSAndroid Build Coastguard Worker                   '   can be removed from the sequence.  The same exceptions '
8908*cda5da8dSAndroid Build Coastguard Worker                   'should be\n'
8909*cda5da8dSAndroid Build Coastguard Worker                   '   raised for improper *key* values as for the '
8910*cda5da8dSAndroid Build Coastguard Worker                   '"__getitem__()" method.\n'
8911*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8912*cda5da8dSAndroid Build Coastguard Worker                   'object.__missing__(self, key)\n'
8913*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8914*cda5da8dSAndroid Build Coastguard Worker                   '   Called by "dict"."__getitem__()" to implement '
8915*cda5da8dSAndroid Build Coastguard Worker                   '"self[key]" for dict\n'
8916*cda5da8dSAndroid Build Coastguard Worker                   '   subclasses when key is not in the dictionary.\n'
8917*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8918*cda5da8dSAndroid Build Coastguard Worker                   'object.__iter__(self)\n'
8919*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8920*cda5da8dSAndroid Build Coastguard Worker                   '   This method is called when an *iterator* is required '
8921*cda5da8dSAndroid Build Coastguard Worker                   'for a\n'
8922*cda5da8dSAndroid Build Coastguard Worker                   '   container. This method should return a new iterator '
8923*cda5da8dSAndroid Build Coastguard Worker                   'object that can\n'
8924*cda5da8dSAndroid Build Coastguard Worker                   '   iterate over all the objects in the container.  For '
8925*cda5da8dSAndroid Build Coastguard Worker                   'mappings, it\n'
8926*cda5da8dSAndroid Build Coastguard Worker                   '   should iterate over the keys of the container.\n'
8927*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8928*cda5da8dSAndroid Build Coastguard Worker                   'object.__reversed__(self)\n'
8929*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8930*cda5da8dSAndroid Build Coastguard Worker                   '   Called (if present) by the "reversed()" built-in to '
8931*cda5da8dSAndroid Build Coastguard Worker                   'implement\n'
8932*cda5da8dSAndroid Build Coastguard Worker                   '   reverse iteration.  It should return a new iterator '
8933*cda5da8dSAndroid Build Coastguard Worker                   'object that\n'
8934*cda5da8dSAndroid Build Coastguard Worker                   '   iterates over all the objects in the container in '
8935*cda5da8dSAndroid Build Coastguard Worker                   'reverse order.\n'
8936*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8937*cda5da8dSAndroid Build Coastguard Worker                   '   If the "__reversed__()" method is not provided, the '
8938*cda5da8dSAndroid Build Coastguard Worker                   '"reversed()"\n'
8939*cda5da8dSAndroid Build Coastguard Worker                   '   built-in will fall back to using the sequence protocol '
8940*cda5da8dSAndroid Build Coastguard Worker                   '("__len__()"\n'
8941*cda5da8dSAndroid Build Coastguard Worker                   '   and "__getitem__()").  Objects that support the '
8942*cda5da8dSAndroid Build Coastguard Worker                   'sequence protocol\n'
8943*cda5da8dSAndroid Build Coastguard Worker                   '   should only provide "__reversed__()" if they can '
8944*cda5da8dSAndroid Build Coastguard Worker                   'provide an\n'
8945*cda5da8dSAndroid Build Coastguard Worker                   '   implementation that is more efficient than the one '
8946*cda5da8dSAndroid Build Coastguard Worker                   'provided by\n'
8947*cda5da8dSAndroid Build Coastguard Worker                   '   "reversed()".\n'
8948*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8949*cda5da8dSAndroid Build Coastguard Worker                   'The membership test operators ("in" and "not in") are '
8950*cda5da8dSAndroid Build Coastguard Worker                   'normally\n'
8951*cda5da8dSAndroid Build Coastguard Worker                   'implemented as an iteration through a container. However, '
8952*cda5da8dSAndroid Build Coastguard Worker                   'container\n'
8953*cda5da8dSAndroid Build Coastguard Worker                   'objects can supply the following special method with a '
8954*cda5da8dSAndroid Build Coastguard Worker                   'more efficient\n'
8955*cda5da8dSAndroid Build Coastguard Worker                   'implementation, which also does not require the object be '
8956*cda5da8dSAndroid Build Coastguard Worker                   'iterable.\n'
8957*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8958*cda5da8dSAndroid Build Coastguard Worker                   'object.__contains__(self, item)\n'
8959*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8960*cda5da8dSAndroid Build Coastguard Worker                   '   Called to implement membership test operators.  Should '
8961*cda5da8dSAndroid Build Coastguard Worker                   'return true\n'
8962*cda5da8dSAndroid Build Coastguard Worker                   '   if *item* is in *self*, false otherwise.  For mapping '
8963*cda5da8dSAndroid Build Coastguard Worker                   'objects, this\n'
8964*cda5da8dSAndroid Build Coastguard Worker                   '   should consider the keys of the mapping rather than the '
8965*cda5da8dSAndroid Build Coastguard Worker                   'values or\n'
8966*cda5da8dSAndroid Build Coastguard Worker                   '   the key-item pairs.\n'
8967*cda5da8dSAndroid Build Coastguard Worker                   '\n'
8968*cda5da8dSAndroid Build Coastguard Worker                   '   For objects that don’t define "__contains__()", the '
8969*cda5da8dSAndroid Build Coastguard Worker                   'membership test\n'
8970*cda5da8dSAndroid Build Coastguard Worker                   '   first tries iteration via "__iter__()", then the old '
8971*cda5da8dSAndroid Build Coastguard Worker                   'sequence\n'
8972*cda5da8dSAndroid Build Coastguard Worker                   '   iteration protocol via "__getitem__()", see this '
8973*cda5da8dSAndroid Build Coastguard Worker                   'section in the\n'
8974*cda5da8dSAndroid Build Coastguard Worker                   '   language reference.\n',
8975*cda5da8dSAndroid Build Coastguard Worker 'shifting': 'Shifting operations\n'
8976*cda5da8dSAndroid Build Coastguard Worker             '*******************\n'
8977*cda5da8dSAndroid Build Coastguard Worker             '\n'
8978*cda5da8dSAndroid Build Coastguard Worker             'The shifting operations have lower priority than the arithmetic\n'
8979*cda5da8dSAndroid Build Coastguard Worker             'operations:\n'
8980*cda5da8dSAndroid Build Coastguard Worker             '\n'
8981*cda5da8dSAndroid Build Coastguard Worker             '   shift_expr ::= a_expr | shift_expr ("<<" | ">>") a_expr\n'
8982*cda5da8dSAndroid Build Coastguard Worker             '\n'
8983*cda5da8dSAndroid Build Coastguard Worker             'These operators accept integers as arguments.  They shift the '
8984*cda5da8dSAndroid Build Coastguard Worker             'first\n'
8985*cda5da8dSAndroid Build Coastguard Worker             'argument to the left or right by the number of bits given by '
8986*cda5da8dSAndroid Build Coastguard Worker             'the\n'
8987*cda5da8dSAndroid Build Coastguard Worker             'second argument.\n'
8988*cda5da8dSAndroid Build Coastguard Worker             '\n'
8989*cda5da8dSAndroid Build Coastguard Worker             'This operation can be customized using the special '
8990*cda5da8dSAndroid Build Coastguard Worker             '"__lshift__()" and\n'
8991*cda5da8dSAndroid Build Coastguard Worker             '"__rshift__()" methods.\n'
8992*cda5da8dSAndroid Build Coastguard Worker             '\n'
8993*cda5da8dSAndroid Build Coastguard Worker             'A right shift by *n* bits is defined as floor division by '
8994*cda5da8dSAndroid Build Coastguard Worker             '"pow(2,n)".\n'
8995*cda5da8dSAndroid Build Coastguard Worker             'A left shift by *n* bits is defined as multiplication with '
8996*cda5da8dSAndroid Build Coastguard Worker             '"pow(2,n)".\n',
8997*cda5da8dSAndroid Build Coastguard Worker 'slicings': 'Slicings\n'
8998*cda5da8dSAndroid Build Coastguard Worker             '********\n'
8999*cda5da8dSAndroid Build Coastguard Worker             '\n'
9000*cda5da8dSAndroid Build Coastguard Worker             'A slicing selects a range of items in a sequence object (e.g., '
9001*cda5da8dSAndroid Build Coastguard Worker             'a\n'
9002*cda5da8dSAndroid Build Coastguard Worker             'string, tuple or list).  Slicings may be used as expressions or '
9003*cda5da8dSAndroid Build Coastguard Worker             'as\n'
9004*cda5da8dSAndroid Build Coastguard Worker             'targets in assignment or "del" statements.  The syntax for a '
9005*cda5da8dSAndroid Build Coastguard Worker             'slicing:\n'
9006*cda5da8dSAndroid Build Coastguard Worker             '\n'
9007*cda5da8dSAndroid Build Coastguard Worker             '   slicing      ::= primary "[" slice_list "]"\n'
9008*cda5da8dSAndroid Build Coastguard Worker             '   slice_list   ::= slice_item ("," slice_item)* [","]\n'
9009*cda5da8dSAndroid Build Coastguard Worker             '   slice_item   ::= expression | proper_slice\n'
9010*cda5da8dSAndroid Build Coastguard Worker             '   proper_slice ::= [lower_bound] ":" [upper_bound] [ ":" '
9011*cda5da8dSAndroid Build Coastguard Worker             '[stride] ]\n'
9012*cda5da8dSAndroid Build Coastguard Worker             '   lower_bound  ::= expression\n'
9013*cda5da8dSAndroid Build Coastguard Worker             '   upper_bound  ::= expression\n'
9014*cda5da8dSAndroid Build Coastguard Worker             '   stride       ::= expression\n'
9015*cda5da8dSAndroid Build Coastguard Worker             '\n'
9016*cda5da8dSAndroid Build Coastguard Worker             'There is ambiguity in the formal syntax here: anything that '
9017*cda5da8dSAndroid Build Coastguard Worker             'looks like\n'
9018*cda5da8dSAndroid Build Coastguard Worker             'an expression list also looks like a slice list, so any '
9019*cda5da8dSAndroid Build Coastguard Worker             'subscription\n'
9020*cda5da8dSAndroid Build Coastguard Worker             'can be interpreted as a slicing.  Rather than further '
9021*cda5da8dSAndroid Build Coastguard Worker             'complicating the\n'
9022*cda5da8dSAndroid Build Coastguard Worker             'syntax, this is disambiguated by defining that in this case the\n'
9023*cda5da8dSAndroid Build Coastguard Worker             'interpretation as a subscription takes priority over the\n'
9024*cda5da8dSAndroid Build Coastguard Worker             'interpretation as a slicing (this is the case if the slice list\n'
9025*cda5da8dSAndroid Build Coastguard Worker             'contains no proper slice).\n'
9026*cda5da8dSAndroid Build Coastguard Worker             '\n'
9027*cda5da8dSAndroid Build Coastguard Worker             'The semantics for a slicing are as follows.  The primary is '
9028*cda5da8dSAndroid Build Coastguard Worker             'indexed\n'
9029*cda5da8dSAndroid Build Coastguard Worker             '(using the same "__getitem__()" method as normal subscription) '
9030*cda5da8dSAndroid Build Coastguard Worker             'with a\n'
9031*cda5da8dSAndroid Build Coastguard Worker             'key that is constructed from the slice list, as follows.  If the '
9032*cda5da8dSAndroid Build Coastguard Worker             'slice\n'
9033*cda5da8dSAndroid Build Coastguard Worker             'list contains at least one comma, the key is a tuple containing '
9034*cda5da8dSAndroid Build Coastguard Worker             'the\n'
9035*cda5da8dSAndroid Build Coastguard Worker             'conversion of the slice items; otherwise, the conversion of the '
9036*cda5da8dSAndroid Build Coastguard Worker             'lone\n'
9037*cda5da8dSAndroid Build Coastguard Worker             'slice item is the key.  The conversion of a slice item that is '
9038*cda5da8dSAndroid Build Coastguard Worker             'an\n'
9039*cda5da8dSAndroid Build Coastguard Worker             'expression is that expression.  The conversion of a proper slice '
9040*cda5da8dSAndroid Build Coastguard Worker             'is a\n'
9041*cda5da8dSAndroid Build Coastguard Worker             'slice object (see section The standard type hierarchy) whose '
9042*cda5da8dSAndroid Build Coastguard Worker             '"start",\n'
9043*cda5da8dSAndroid Build Coastguard Worker             '"stop" and "step" attributes are the values of the expressions '
9044*cda5da8dSAndroid Build Coastguard Worker             'given\n'
9045*cda5da8dSAndroid Build Coastguard Worker             'as lower bound, upper bound and stride, respectively, '
9046*cda5da8dSAndroid Build Coastguard Worker             'substituting\n'
9047*cda5da8dSAndroid Build Coastguard Worker             '"None" for missing expressions.\n',
9048*cda5da8dSAndroid Build Coastguard Worker 'specialattrs': 'Special Attributes\n'
9049*cda5da8dSAndroid Build Coastguard Worker                 '******************\n'
9050*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9051*cda5da8dSAndroid Build Coastguard Worker                 'The implementation adds a few special read-only attributes '
9052*cda5da8dSAndroid Build Coastguard Worker                 'to several\n'
9053*cda5da8dSAndroid Build Coastguard Worker                 'object types, where they are relevant.  Some of these are '
9054*cda5da8dSAndroid Build Coastguard Worker                 'not reported\n'
9055*cda5da8dSAndroid Build Coastguard Worker                 'by the "dir()" built-in function.\n'
9056*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9057*cda5da8dSAndroid Build Coastguard Worker                 'object.__dict__\n'
9058*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9059*cda5da8dSAndroid Build Coastguard Worker                 '   A dictionary or other mapping object used to store an '
9060*cda5da8dSAndroid Build Coastguard Worker                 'object’s\n'
9061*cda5da8dSAndroid Build Coastguard Worker                 '   (writable) attributes.\n'
9062*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9063*cda5da8dSAndroid Build Coastguard Worker                 'instance.__class__\n'
9064*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9065*cda5da8dSAndroid Build Coastguard Worker                 '   The class to which a class instance belongs.\n'
9066*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9067*cda5da8dSAndroid Build Coastguard Worker                 'class.__bases__\n'
9068*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9069*cda5da8dSAndroid Build Coastguard Worker                 '   The tuple of base classes of a class object.\n'
9070*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9071*cda5da8dSAndroid Build Coastguard Worker                 'definition.__name__\n'
9072*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9073*cda5da8dSAndroid Build Coastguard Worker                 '   The name of the class, function, method, descriptor, or '
9074*cda5da8dSAndroid Build Coastguard Worker                 'generator\n'
9075*cda5da8dSAndroid Build Coastguard Worker                 '   instance.\n'
9076*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9077*cda5da8dSAndroid Build Coastguard Worker                 'definition.__qualname__\n'
9078*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9079*cda5da8dSAndroid Build Coastguard Worker                 '   The *qualified name* of the class, function, method, '
9080*cda5da8dSAndroid Build Coastguard Worker                 'descriptor, or\n'
9081*cda5da8dSAndroid Build Coastguard Worker                 '   generator instance.\n'
9082*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9083*cda5da8dSAndroid Build Coastguard Worker                 '   New in version 3.3.\n'
9084*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9085*cda5da8dSAndroid Build Coastguard Worker                 'class.__mro__\n'
9086*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9087*cda5da8dSAndroid Build Coastguard Worker                 '   This attribute is a tuple of classes that are considered '
9088*cda5da8dSAndroid Build Coastguard Worker                 'when\n'
9089*cda5da8dSAndroid Build Coastguard Worker                 '   looking for base classes during method resolution.\n'
9090*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9091*cda5da8dSAndroid Build Coastguard Worker                 'class.mro()\n'
9092*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9093*cda5da8dSAndroid Build Coastguard Worker                 '   This method can be overridden by a metaclass to customize '
9094*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
9095*cda5da8dSAndroid Build Coastguard Worker                 '   method resolution order for its instances.  It is called '
9096*cda5da8dSAndroid Build Coastguard Worker                 'at class\n'
9097*cda5da8dSAndroid Build Coastguard Worker                 '   instantiation, and its result is stored in "__mro__".\n'
9098*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9099*cda5da8dSAndroid Build Coastguard Worker                 'class.__subclasses__()\n'
9100*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9101*cda5da8dSAndroid Build Coastguard Worker                 '   Each class keeps a list of weak references to its '
9102*cda5da8dSAndroid Build Coastguard Worker                 'immediate\n'
9103*cda5da8dSAndroid Build Coastguard Worker                 '   subclasses.  This method returns a list of all those '
9104*cda5da8dSAndroid Build Coastguard Worker                 'references\n'
9105*cda5da8dSAndroid Build Coastguard Worker                 '   still alive.  The list is in definition order.  Example:\n'
9106*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9107*cda5da8dSAndroid Build Coastguard Worker                 '      >>> int.__subclasses__()\n'
9108*cda5da8dSAndroid Build Coastguard Worker                 "      [<class 'bool'>]\n",
9109*cda5da8dSAndroid Build Coastguard Worker 'specialnames': 'Special method names\n'
9110*cda5da8dSAndroid Build Coastguard Worker                 '********************\n'
9111*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9112*cda5da8dSAndroid Build Coastguard Worker                 'A class can implement certain operations that are invoked by '
9113*cda5da8dSAndroid Build Coastguard Worker                 'special\n'
9114*cda5da8dSAndroid Build Coastguard Worker                 'syntax (such as arithmetic operations or subscripting and '
9115*cda5da8dSAndroid Build Coastguard Worker                 'slicing) by\n'
9116*cda5da8dSAndroid Build Coastguard Worker                 'defining methods with special names. This is Python’s '
9117*cda5da8dSAndroid Build Coastguard Worker                 'approach to\n'
9118*cda5da8dSAndroid Build Coastguard Worker                 '*operator overloading*, allowing classes to define their own '
9119*cda5da8dSAndroid Build Coastguard Worker                 'behavior\n'
9120*cda5da8dSAndroid Build Coastguard Worker                 'with respect to language operators.  For instance, if a '
9121*cda5da8dSAndroid Build Coastguard Worker                 'class defines\n'
9122*cda5da8dSAndroid Build Coastguard Worker                 'a method named "__getitem__()", and "x" is an instance of '
9123*cda5da8dSAndroid Build Coastguard Worker                 'this class,\n'
9124*cda5da8dSAndroid Build Coastguard Worker                 'then "x[i]" is roughly equivalent to "type(x).__getitem__(x, '
9125*cda5da8dSAndroid Build Coastguard Worker                 'i)".\n'
9126*cda5da8dSAndroid Build Coastguard Worker                 'Except where mentioned, attempts to execute an operation '
9127*cda5da8dSAndroid Build Coastguard Worker                 'raise an\n'
9128*cda5da8dSAndroid Build Coastguard Worker                 'exception when no appropriate method is defined (typically\n'
9129*cda5da8dSAndroid Build Coastguard Worker                 '"AttributeError" or "TypeError").\n'
9130*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9131*cda5da8dSAndroid Build Coastguard Worker                 'Setting a special method to "None" indicates that the '
9132*cda5da8dSAndroid Build Coastguard Worker                 'corresponding\n'
9133*cda5da8dSAndroid Build Coastguard Worker                 'operation is not available.  For example, if a class sets '
9134*cda5da8dSAndroid Build Coastguard Worker                 '"__iter__()"\n'
9135*cda5da8dSAndroid Build Coastguard Worker                 'to "None", the class is not iterable, so calling "iter()" on '
9136*cda5da8dSAndroid Build Coastguard Worker                 'its\n'
9137*cda5da8dSAndroid Build Coastguard Worker                 'instances will raise a "TypeError" (without falling back to\n'
9138*cda5da8dSAndroid Build Coastguard Worker                 '"__getitem__()"). [2]\n'
9139*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9140*cda5da8dSAndroid Build Coastguard Worker                 'When implementing a class that emulates any built-in type, '
9141*cda5da8dSAndroid Build Coastguard Worker                 'it is\n'
9142*cda5da8dSAndroid Build Coastguard Worker                 'important that the emulation only be implemented to the '
9143*cda5da8dSAndroid Build Coastguard Worker                 'degree that it\n'
9144*cda5da8dSAndroid Build Coastguard Worker                 'makes sense for the object being modelled.  For example, '
9145*cda5da8dSAndroid Build Coastguard Worker                 'some\n'
9146*cda5da8dSAndroid Build Coastguard Worker                 'sequences may work well with retrieval of individual '
9147*cda5da8dSAndroid Build Coastguard Worker                 'elements, but\n'
9148*cda5da8dSAndroid Build Coastguard Worker                 'extracting a slice may not make sense.  (One example of this '
9149*cda5da8dSAndroid Build Coastguard Worker                 'is the\n'
9150*cda5da8dSAndroid Build Coastguard Worker                 '"NodeList" interface in the W3C’s Document Object Model.)\n'
9151*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9152*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9153*cda5da8dSAndroid Build Coastguard Worker                 'Basic customization\n'
9154*cda5da8dSAndroid Build Coastguard Worker                 '===================\n'
9155*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9156*cda5da8dSAndroid Build Coastguard Worker                 'object.__new__(cls[, ...])\n'
9157*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9158*cda5da8dSAndroid Build Coastguard Worker                 '   Called to create a new instance of class *cls*.  '
9159*cda5da8dSAndroid Build Coastguard Worker                 '"__new__()" is a\n'
9160*cda5da8dSAndroid Build Coastguard Worker                 '   static method (special-cased so you need not declare it '
9161*cda5da8dSAndroid Build Coastguard Worker                 'as such)\n'
9162*cda5da8dSAndroid Build Coastguard Worker                 '   that takes the class of which an instance was requested '
9163*cda5da8dSAndroid Build Coastguard Worker                 'as its\n'
9164*cda5da8dSAndroid Build Coastguard Worker                 '   first argument.  The remaining arguments are those passed '
9165*cda5da8dSAndroid Build Coastguard Worker                 'to the\n'
9166*cda5da8dSAndroid Build Coastguard Worker                 '   object constructor expression (the call to the class).  '
9167*cda5da8dSAndroid Build Coastguard Worker                 'The return\n'
9168*cda5da8dSAndroid Build Coastguard Worker                 '   value of "__new__()" should be the new object instance '
9169*cda5da8dSAndroid Build Coastguard Worker                 '(usually an\n'
9170*cda5da8dSAndroid Build Coastguard Worker                 '   instance of *cls*).\n'
9171*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9172*cda5da8dSAndroid Build Coastguard Worker                 '   Typical implementations create a new instance of the '
9173*cda5da8dSAndroid Build Coastguard Worker                 'class by\n'
9174*cda5da8dSAndroid Build Coastguard Worker                 '   invoking the superclass’s "__new__()" method using\n'
9175*cda5da8dSAndroid Build Coastguard Worker                 '   "super().__new__(cls[, ...])" with appropriate arguments '
9176*cda5da8dSAndroid Build Coastguard Worker                 'and then\n'
9177*cda5da8dSAndroid Build Coastguard Worker                 '   modifying the newly created instance as necessary before '
9178*cda5da8dSAndroid Build Coastguard Worker                 'returning\n'
9179*cda5da8dSAndroid Build Coastguard Worker                 '   it.\n'
9180*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9181*cda5da8dSAndroid Build Coastguard Worker                 '   If "__new__()" is invoked during object construction and '
9182*cda5da8dSAndroid Build Coastguard Worker                 'it returns\n'
9183*cda5da8dSAndroid Build Coastguard Worker                 '   an instance of *cls*, then the new instance’s '
9184*cda5da8dSAndroid Build Coastguard Worker                 '"__init__()" method\n'
9185*cda5da8dSAndroid Build Coastguard Worker                 '   will be invoked like "__init__(self[, ...])", where '
9186*cda5da8dSAndroid Build Coastguard Worker                 '*self* is the\n'
9187*cda5da8dSAndroid Build Coastguard Worker                 '   new instance and the remaining arguments are the same as '
9188*cda5da8dSAndroid Build Coastguard Worker                 'were\n'
9189*cda5da8dSAndroid Build Coastguard Worker                 '   passed to the object constructor.\n'
9190*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9191*cda5da8dSAndroid Build Coastguard Worker                 '   If "__new__()" does not return an instance of *cls*, then '
9192*cda5da8dSAndroid Build Coastguard Worker                 'the new\n'
9193*cda5da8dSAndroid Build Coastguard Worker                 '   instance’s "__init__()" method will not be invoked.\n'
9194*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9195*cda5da8dSAndroid Build Coastguard Worker                 '   "__new__()" is intended mainly to allow subclasses of '
9196*cda5da8dSAndroid Build Coastguard Worker                 'immutable\n'
9197*cda5da8dSAndroid Build Coastguard Worker                 '   types (like int, str, or tuple) to customize instance '
9198*cda5da8dSAndroid Build Coastguard Worker                 'creation.  It\n'
9199*cda5da8dSAndroid Build Coastguard Worker                 '   is also commonly overridden in custom metaclasses in '
9200*cda5da8dSAndroid Build Coastguard Worker                 'order to\n'
9201*cda5da8dSAndroid Build Coastguard Worker                 '   customize class creation.\n'
9202*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9203*cda5da8dSAndroid Build Coastguard Worker                 'object.__init__(self[, ...])\n'
9204*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9205*cda5da8dSAndroid Build Coastguard Worker                 '   Called after the instance has been created (by '
9206*cda5da8dSAndroid Build Coastguard Worker                 '"__new__()"), but\n'
9207*cda5da8dSAndroid Build Coastguard Worker                 '   before it is returned to the caller.  The arguments are '
9208*cda5da8dSAndroid Build Coastguard Worker                 'those\n'
9209*cda5da8dSAndroid Build Coastguard Worker                 '   passed to the class constructor expression.  If a base '
9210*cda5da8dSAndroid Build Coastguard Worker                 'class has an\n'
9211*cda5da8dSAndroid Build Coastguard Worker                 '   "__init__()" method, the derived class’s "__init__()" '
9212*cda5da8dSAndroid Build Coastguard Worker                 'method, if\n'
9213*cda5da8dSAndroid Build Coastguard Worker                 '   any, must explicitly call it to ensure proper '
9214*cda5da8dSAndroid Build Coastguard Worker                 'initialization of the\n'
9215*cda5da8dSAndroid Build Coastguard Worker                 '   base class part of the instance; for example:\n'
9216*cda5da8dSAndroid Build Coastguard Worker                 '   "super().__init__([args...])".\n'
9217*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9218*cda5da8dSAndroid Build Coastguard Worker                 '   Because "__new__()" and "__init__()" work together in '
9219*cda5da8dSAndroid Build Coastguard Worker                 'constructing\n'
9220*cda5da8dSAndroid Build Coastguard Worker                 '   objects ("__new__()" to create it, and "__init__()" to '
9221*cda5da8dSAndroid Build Coastguard Worker                 'customize\n'
9222*cda5da8dSAndroid Build Coastguard Worker                 '   it), no non-"None" value may be returned by "__init__()"; '
9223*cda5da8dSAndroid Build Coastguard Worker                 'doing so\n'
9224*cda5da8dSAndroid Build Coastguard Worker                 '   will cause a "TypeError" to be raised at runtime.\n'
9225*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9226*cda5da8dSAndroid Build Coastguard Worker                 'object.__del__(self)\n'
9227*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9228*cda5da8dSAndroid Build Coastguard Worker                 '   Called when the instance is about to be destroyed.  This '
9229*cda5da8dSAndroid Build Coastguard Worker                 'is also\n'
9230*cda5da8dSAndroid Build Coastguard Worker                 '   called a finalizer or (improperly) a destructor.  If a '
9231*cda5da8dSAndroid Build Coastguard Worker                 'base class\n'
9232*cda5da8dSAndroid Build Coastguard Worker                 '   has a "__del__()" method, the derived class’s "__del__()" '
9233*cda5da8dSAndroid Build Coastguard Worker                 'method,\n'
9234*cda5da8dSAndroid Build Coastguard Worker                 '   if any, must explicitly call it to ensure proper deletion '
9235*cda5da8dSAndroid Build Coastguard Worker                 'of the\n'
9236*cda5da8dSAndroid Build Coastguard Worker                 '   base class part of the instance.\n'
9237*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9238*cda5da8dSAndroid Build Coastguard Worker                 '   It is possible (though not recommended!) for the '
9239*cda5da8dSAndroid Build Coastguard Worker                 '"__del__()" method\n'
9240*cda5da8dSAndroid Build Coastguard Worker                 '   to postpone destruction of the instance by creating a new '
9241*cda5da8dSAndroid Build Coastguard Worker                 'reference\n'
9242*cda5da8dSAndroid Build Coastguard Worker                 '   to it.  This is called object *resurrection*.  It is\n'
9243*cda5da8dSAndroid Build Coastguard Worker                 '   implementation-dependent whether "__del__()" is called a '
9244*cda5da8dSAndroid Build Coastguard Worker                 'second\n'
9245*cda5da8dSAndroid Build Coastguard Worker                 '   time when a resurrected object is about to be destroyed; '
9246*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
9247*cda5da8dSAndroid Build Coastguard Worker                 '   current *CPython* implementation only calls it once.\n'
9248*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9249*cda5da8dSAndroid Build Coastguard Worker                 '   It is not guaranteed that "__del__()" methods are called '
9250*cda5da8dSAndroid Build Coastguard Worker                 'for\n'
9251*cda5da8dSAndroid Build Coastguard Worker                 '   objects that still exist when the interpreter exits.\n'
9252*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9253*cda5da8dSAndroid Build Coastguard Worker                 '   Note:\n'
9254*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9255*cda5da8dSAndroid Build Coastguard Worker                 '     "del x" doesn’t directly call "x.__del__()" — the '
9256*cda5da8dSAndroid Build Coastguard Worker                 'former\n'
9257*cda5da8dSAndroid Build Coastguard Worker                 '     decrements the reference count for "x" by one, and the '
9258*cda5da8dSAndroid Build Coastguard Worker                 'latter is\n'
9259*cda5da8dSAndroid Build Coastguard Worker                 '     only called when "x"’s reference count reaches zero.\n'
9260*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9261*cda5da8dSAndroid Build Coastguard Worker                 '   **CPython implementation detail:** It is possible for a '
9262*cda5da8dSAndroid Build Coastguard Worker                 'reference\n'
9263*cda5da8dSAndroid Build Coastguard Worker                 '   cycle to prevent the reference count of an object from '
9264*cda5da8dSAndroid Build Coastguard Worker                 'going to\n'
9265*cda5da8dSAndroid Build Coastguard Worker                 '   zero.  In this case, the cycle will be later detected and '
9266*cda5da8dSAndroid Build Coastguard Worker                 'deleted\n'
9267*cda5da8dSAndroid Build Coastguard Worker                 '   by the *cyclic garbage collector*.  A common cause of '
9268*cda5da8dSAndroid Build Coastguard Worker                 'reference\n'
9269*cda5da8dSAndroid Build Coastguard Worker                 '   cycles is when an exception has been caught in a local '
9270*cda5da8dSAndroid Build Coastguard Worker                 'variable.\n'
9271*cda5da8dSAndroid Build Coastguard Worker                 '   The frame’s locals then reference the exception, which '
9272*cda5da8dSAndroid Build Coastguard Worker                 'references\n'
9273*cda5da8dSAndroid Build Coastguard Worker                 '   its own traceback, which references the locals of all '
9274*cda5da8dSAndroid Build Coastguard Worker                 'frames caught\n'
9275*cda5da8dSAndroid Build Coastguard Worker                 '   in the traceback.\n'
9276*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9277*cda5da8dSAndroid Build Coastguard Worker                 '   See also: Documentation for the "gc" module.\n'
9278*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9279*cda5da8dSAndroid Build Coastguard Worker                 '   Warning:\n'
9280*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9281*cda5da8dSAndroid Build Coastguard Worker                 '     Due to the precarious circumstances under which '
9282*cda5da8dSAndroid Build Coastguard Worker                 '"__del__()"\n'
9283*cda5da8dSAndroid Build Coastguard Worker                 '     methods are invoked, exceptions that occur during their '
9284*cda5da8dSAndroid Build Coastguard Worker                 'execution\n'
9285*cda5da8dSAndroid Build Coastguard Worker                 '     are ignored, and a warning is printed to "sys.stderr" '
9286*cda5da8dSAndroid Build Coastguard Worker                 'instead.\n'
9287*cda5da8dSAndroid Build Coastguard Worker                 '     In particular:\n'
9288*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9289*cda5da8dSAndroid Build Coastguard Worker                 '     * "__del__()" can be invoked when arbitrary code is '
9290*cda5da8dSAndroid Build Coastguard Worker                 'being\n'
9291*cda5da8dSAndroid Build Coastguard Worker                 '       executed, including from any arbitrary thread.  If '
9292*cda5da8dSAndroid Build Coastguard Worker                 '"__del__()"\n'
9293*cda5da8dSAndroid Build Coastguard Worker                 '       needs to take a lock or invoke any other blocking '
9294*cda5da8dSAndroid Build Coastguard Worker                 'resource, it\n'
9295*cda5da8dSAndroid Build Coastguard Worker                 '       may deadlock as the resource may already be taken by '
9296*cda5da8dSAndroid Build Coastguard Worker                 'the code\n'
9297*cda5da8dSAndroid Build Coastguard Worker                 '       that gets interrupted to execute "__del__()".\n'
9298*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9299*cda5da8dSAndroid Build Coastguard Worker                 '     * "__del__()" can be executed during interpreter '
9300*cda5da8dSAndroid Build Coastguard Worker                 'shutdown.  As a\n'
9301*cda5da8dSAndroid Build Coastguard Worker                 '       consequence, the global variables it needs to access '
9302*cda5da8dSAndroid Build Coastguard Worker                 '(including\n'
9303*cda5da8dSAndroid Build Coastguard Worker                 '       other modules) may already have been deleted or set '
9304*cda5da8dSAndroid Build Coastguard Worker                 'to "None".\n'
9305*cda5da8dSAndroid Build Coastguard Worker                 '       Python guarantees that globals whose name begins with '
9306*cda5da8dSAndroid Build Coastguard Worker                 'a single\n'
9307*cda5da8dSAndroid Build Coastguard Worker                 '       underscore are deleted from their module before other '
9308*cda5da8dSAndroid Build Coastguard Worker                 'globals\n'
9309*cda5da8dSAndroid Build Coastguard Worker                 '       are deleted; if no other references to such globals '
9310*cda5da8dSAndroid Build Coastguard Worker                 'exist, this\n'
9311*cda5da8dSAndroid Build Coastguard Worker                 '       may help in assuring that imported modules are still '
9312*cda5da8dSAndroid Build Coastguard Worker                 'available\n'
9313*cda5da8dSAndroid Build Coastguard Worker                 '       at the time when the "__del__()" method is called.\n'
9314*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9315*cda5da8dSAndroid Build Coastguard Worker                 'object.__repr__(self)\n'
9316*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9317*cda5da8dSAndroid Build Coastguard Worker                 '   Called by the "repr()" built-in function to compute the '
9318*cda5da8dSAndroid Build Coastguard Worker                 '“official”\n'
9319*cda5da8dSAndroid Build Coastguard Worker                 '   string representation of an object.  If at all possible, '
9320*cda5da8dSAndroid Build Coastguard Worker                 'this\n'
9321*cda5da8dSAndroid Build Coastguard Worker                 '   should look like a valid Python expression that could be '
9322*cda5da8dSAndroid Build Coastguard Worker                 'used to\n'
9323*cda5da8dSAndroid Build Coastguard Worker                 '   recreate an object with the same value (given an '
9324*cda5da8dSAndroid Build Coastguard Worker                 'appropriate\n'
9325*cda5da8dSAndroid Build Coastguard Worker                 '   environment).  If this is not possible, a string of the '
9326*cda5da8dSAndroid Build Coastguard Worker                 'form\n'
9327*cda5da8dSAndroid Build Coastguard Worker                 '   "<...some useful description...>" should be returned. The '
9328*cda5da8dSAndroid Build Coastguard Worker                 'return\n'
9329*cda5da8dSAndroid Build Coastguard Worker                 '   value must be a string object. If a class defines '
9330*cda5da8dSAndroid Build Coastguard Worker                 '"__repr__()" but\n'
9331*cda5da8dSAndroid Build Coastguard Worker                 '   not "__str__()", then "__repr__()" is also used when an '
9332*cda5da8dSAndroid Build Coastguard Worker                 '“informal”\n'
9333*cda5da8dSAndroid Build Coastguard Worker                 '   string representation of instances of that class is '
9334*cda5da8dSAndroid Build Coastguard Worker                 'required.\n'
9335*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9336*cda5da8dSAndroid Build Coastguard Worker                 '   This is typically used for debugging, so it is important '
9337*cda5da8dSAndroid Build Coastguard Worker                 'that the\n'
9338*cda5da8dSAndroid Build Coastguard Worker                 '   representation is information-rich and unambiguous.\n'
9339*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9340*cda5da8dSAndroid Build Coastguard Worker                 'object.__str__(self)\n'
9341*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9342*cda5da8dSAndroid Build Coastguard Worker                 '   Called by "str(object)" and the built-in functions '
9343*cda5da8dSAndroid Build Coastguard Worker                 '"format()" and\n'
9344*cda5da8dSAndroid Build Coastguard Worker                 '   "print()" to compute the “informal” or nicely printable '
9345*cda5da8dSAndroid Build Coastguard Worker                 'string\n'
9346*cda5da8dSAndroid Build Coastguard Worker                 '   representation of an object.  The return value must be a '
9347*cda5da8dSAndroid Build Coastguard Worker                 'string\n'
9348*cda5da8dSAndroid Build Coastguard Worker                 '   object.\n'
9349*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9350*cda5da8dSAndroid Build Coastguard Worker                 '   This method differs from "object.__repr__()" in that '
9351*cda5da8dSAndroid Build Coastguard Worker                 'there is no\n'
9352*cda5da8dSAndroid Build Coastguard Worker                 '   expectation that "__str__()" return a valid Python '
9353*cda5da8dSAndroid Build Coastguard Worker                 'expression: a\n'
9354*cda5da8dSAndroid Build Coastguard Worker                 '   more convenient or concise representation can be used.\n'
9355*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9356*cda5da8dSAndroid Build Coastguard Worker                 '   The default implementation defined by the built-in type '
9357*cda5da8dSAndroid Build Coastguard Worker                 '"object"\n'
9358*cda5da8dSAndroid Build Coastguard Worker                 '   calls "object.__repr__()".\n'
9359*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9360*cda5da8dSAndroid Build Coastguard Worker                 'object.__bytes__(self)\n'
9361*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9362*cda5da8dSAndroid Build Coastguard Worker                 '   Called by bytes to compute a byte-string representation '
9363*cda5da8dSAndroid Build Coastguard Worker                 'of an\n'
9364*cda5da8dSAndroid Build Coastguard Worker                 '   object. This should return a "bytes" object.\n'
9365*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9366*cda5da8dSAndroid Build Coastguard Worker                 'object.__format__(self, format_spec)\n'
9367*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9368*cda5da8dSAndroid Build Coastguard Worker                 '   Called by the "format()" built-in function, and by '
9369*cda5da8dSAndroid Build Coastguard Worker                 'extension,\n'
9370*cda5da8dSAndroid Build Coastguard Worker                 '   evaluation of formatted string literals and the '
9371*cda5da8dSAndroid Build Coastguard Worker                 '"str.format()"\n'
9372*cda5da8dSAndroid Build Coastguard Worker                 '   method, to produce a “formatted” string representation of '
9373*cda5da8dSAndroid Build Coastguard Worker                 'an\n'
9374*cda5da8dSAndroid Build Coastguard Worker                 '   object. The *format_spec* argument is a string that '
9375*cda5da8dSAndroid Build Coastguard Worker                 'contains a\n'
9376*cda5da8dSAndroid Build Coastguard Worker                 '   description of the formatting options desired. The '
9377*cda5da8dSAndroid Build Coastguard Worker                 'interpretation\n'
9378*cda5da8dSAndroid Build Coastguard Worker                 '   of the *format_spec* argument is up to the type '
9379*cda5da8dSAndroid Build Coastguard Worker                 'implementing\n'
9380*cda5da8dSAndroid Build Coastguard Worker                 '   "__format__()", however most classes will either '
9381*cda5da8dSAndroid Build Coastguard Worker                 'delegate\n'
9382*cda5da8dSAndroid Build Coastguard Worker                 '   formatting to one of the built-in types, or use a '
9383*cda5da8dSAndroid Build Coastguard Worker                 'similar\n'
9384*cda5da8dSAndroid Build Coastguard Worker                 '   formatting option syntax.\n'
9385*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9386*cda5da8dSAndroid Build Coastguard Worker                 '   See Format Specification Mini-Language for a description '
9387*cda5da8dSAndroid Build Coastguard Worker                 'of the\n'
9388*cda5da8dSAndroid Build Coastguard Worker                 '   standard formatting syntax.\n'
9389*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9390*cda5da8dSAndroid Build Coastguard Worker                 '   The return value must be a string object.\n'
9391*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9392*cda5da8dSAndroid Build Coastguard Worker                 '   Changed in version 3.4: The __format__ method of "object" '
9393*cda5da8dSAndroid Build Coastguard Worker                 'itself\n'
9394*cda5da8dSAndroid Build Coastguard Worker                 '   raises a "TypeError" if passed any non-empty string.\n'
9395*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9396*cda5da8dSAndroid Build Coastguard Worker                 '   Changed in version 3.7: "object.__format__(x, \'\')" is '
9397*cda5da8dSAndroid Build Coastguard Worker                 'now\n'
9398*cda5da8dSAndroid Build Coastguard Worker                 '   equivalent to "str(x)" rather than "format(str(x), '
9399*cda5da8dSAndroid Build Coastguard Worker                 '\'\')".\n'
9400*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9401*cda5da8dSAndroid Build Coastguard Worker                 'object.__lt__(self, other)\n'
9402*cda5da8dSAndroid Build Coastguard Worker                 'object.__le__(self, other)\n'
9403*cda5da8dSAndroid Build Coastguard Worker                 'object.__eq__(self, other)\n'
9404*cda5da8dSAndroid Build Coastguard Worker                 'object.__ne__(self, other)\n'
9405*cda5da8dSAndroid Build Coastguard Worker                 'object.__gt__(self, other)\n'
9406*cda5da8dSAndroid Build Coastguard Worker                 'object.__ge__(self, other)\n'
9407*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9408*cda5da8dSAndroid Build Coastguard Worker                 '   These are the so-called “rich comparison” methods. The\n'
9409*cda5da8dSAndroid Build Coastguard Worker                 '   correspondence between operator symbols and method names '
9410*cda5da8dSAndroid Build Coastguard Worker                 'is as\n'
9411*cda5da8dSAndroid Build Coastguard Worker                 '   follows: "x<y" calls "x.__lt__(y)", "x<=y" calls '
9412*cda5da8dSAndroid Build Coastguard Worker                 '"x.__le__(y)",\n'
9413*cda5da8dSAndroid Build Coastguard Worker                 '   "x==y" calls "x.__eq__(y)", "x!=y" calls "x.__ne__(y)", '
9414*cda5da8dSAndroid Build Coastguard Worker                 '"x>y" calls\n'
9415*cda5da8dSAndroid Build Coastguard Worker                 '   "x.__gt__(y)", and "x>=y" calls "x.__ge__(y)".\n'
9416*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9417*cda5da8dSAndroid Build Coastguard Worker                 '   A rich comparison method may return the singleton '
9418*cda5da8dSAndroid Build Coastguard Worker                 '"NotImplemented"\n'
9419*cda5da8dSAndroid Build Coastguard Worker                 '   if it does not implement the operation for a given pair '
9420*cda5da8dSAndroid Build Coastguard Worker                 'of\n'
9421*cda5da8dSAndroid Build Coastguard Worker                 '   arguments. By convention, "False" and "True" are returned '
9422*cda5da8dSAndroid Build Coastguard Worker                 'for a\n'
9423*cda5da8dSAndroid Build Coastguard Worker                 '   successful comparison. However, these methods can return '
9424*cda5da8dSAndroid Build Coastguard Worker                 'any value,\n'
9425*cda5da8dSAndroid Build Coastguard Worker                 '   so if the comparison operator is used in a Boolean '
9426*cda5da8dSAndroid Build Coastguard Worker                 'context (e.g.,\n'
9427*cda5da8dSAndroid Build Coastguard Worker                 '   in the condition of an "if" statement), Python will call '
9428*cda5da8dSAndroid Build Coastguard Worker                 '"bool()"\n'
9429*cda5da8dSAndroid Build Coastguard Worker                 '   on the value to determine if the result is true or '
9430*cda5da8dSAndroid Build Coastguard Worker                 'false.\n'
9431*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9432*cda5da8dSAndroid Build Coastguard Worker                 '   By default, "object" implements "__eq__()" by using "is", '
9433*cda5da8dSAndroid Build Coastguard Worker                 'returning\n'
9434*cda5da8dSAndroid Build Coastguard Worker                 '   "NotImplemented" in the case of a false comparison: "True '
9435*cda5da8dSAndroid Build Coastguard Worker                 'if x is y\n'
9436*cda5da8dSAndroid Build Coastguard Worker                 '   else NotImplemented". For "__ne__()", by default it '
9437*cda5da8dSAndroid Build Coastguard Worker                 'delegates to\n'
9438*cda5da8dSAndroid Build Coastguard Worker                 '   "__eq__()" and inverts the result unless it is '
9439*cda5da8dSAndroid Build Coastguard Worker                 '"NotImplemented".\n'
9440*cda5da8dSAndroid Build Coastguard Worker                 '   There are no other implied relationships among the '
9441*cda5da8dSAndroid Build Coastguard Worker                 'comparison\n'
9442*cda5da8dSAndroid Build Coastguard Worker                 '   operators or default implementations; for example, the '
9443*cda5da8dSAndroid Build Coastguard Worker                 'truth of\n'
9444*cda5da8dSAndroid Build Coastguard Worker                 '   "(x<y or x==y)" does not imply "x<=y". To automatically '
9445*cda5da8dSAndroid Build Coastguard Worker                 'generate\n'
9446*cda5da8dSAndroid Build Coastguard Worker                 '   ordering operations from a single root operation, see\n'
9447*cda5da8dSAndroid Build Coastguard Worker                 '   "functools.total_ordering()".\n'
9448*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9449*cda5da8dSAndroid Build Coastguard Worker                 '   See the paragraph on "__hash__()" for some important '
9450*cda5da8dSAndroid Build Coastguard Worker                 'notes on\n'
9451*cda5da8dSAndroid Build Coastguard Worker                 '   creating *hashable* objects which support custom '
9452*cda5da8dSAndroid Build Coastguard Worker                 'comparison\n'
9453*cda5da8dSAndroid Build Coastguard Worker                 '   operations and are usable as dictionary keys.\n'
9454*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9455*cda5da8dSAndroid Build Coastguard Worker                 '   There are no swapped-argument versions of these methods '
9456*cda5da8dSAndroid Build Coastguard Worker                 '(to be used\n'
9457*cda5da8dSAndroid Build Coastguard Worker                 '   when the left argument does not support the operation but '
9458*cda5da8dSAndroid Build Coastguard Worker                 'the right\n'
9459*cda5da8dSAndroid Build Coastguard Worker                 '   argument does); rather, "__lt__()" and "__gt__()" are '
9460*cda5da8dSAndroid Build Coastguard Worker                 'each other’s\n'
9461*cda5da8dSAndroid Build Coastguard Worker                 '   reflection, "__le__()" and "__ge__()" are each other’s '
9462*cda5da8dSAndroid Build Coastguard Worker                 'reflection,\n'
9463*cda5da8dSAndroid Build Coastguard Worker                 '   and "__eq__()" and "__ne__()" are their own reflection. '
9464*cda5da8dSAndroid Build Coastguard Worker                 'If the\n'
9465*cda5da8dSAndroid Build Coastguard Worker                 '   operands are of different types, and right operand’s type '
9466*cda5da8dSAndroid Build Coastguard Worker                 'is a\n'
9467*cda5da8dSAndroid Build Coastguard Worker                 '   direct or indirect subclass of the left operand’s type, '
9468*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
9469*cda5da8dSAndroid Build Coastguard Worker                 '   reflected method of the right operand has priority, '
9470*cda5da8dSAndroid Build Coastguard Worker                 'otherwise the\n'
9471*cda5da8dSAndroid Build Coastguard Worker                 '   left operand’s method has priority.  Virtual subclassing '
9472*cda5da8dSAndroid Build Coastguard Worker                 'is not\n'
9473*cda5da8dSAndroid Build Coastguard Worker                 '   considered.\n'
9474*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9475*cda5da8dSAndroid Build Coastguard Worker                 'object.__hash__(self)\n'
9476*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9477*cda5da8dSAndroid Build Coastguard Worker                 '   Called by built-in function "hash()" and for operations '
9478*cda5da8dSAndroid Build Coastguard Worker                 'on members\n'
9479*cda5da8dSAndroid Build Coastguard Worker                 '   of hashed collections including "set", "frozenset", and '
9480*cda5da8dSAndroid Build Coastguard Worker                 '"dict".\n'
9481*cda5da8dSAndroid Build Coastguard Worker                 '   The "__hash__()" method should return an integer. The '
9482*cda5da8dSAndroid Build Coastguard Worker                 'only required\n'
9483*cda5da8dSAndroid Build Coastguard Worker                 '   property is that objects which compare equal have the '
9484*cda5da8dSAndroid Build Coastguard Worker                 'same hash\n'
9485*cda5da8dSAndroid Build Coastguard Worker                 '   value; it is advised to mix together the hash values of '
9486*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
9487*cda5da8dSAndroid Build Coastguard Worker                 '   components of the object that also play a part in '
9488*cda5da8dSAndroid Build Coastguard Worker                 'comparison of\n'
9489*cda5da8dSAndroid Build Coastguard Worker                 '   objects by packing them into a tuple and hashing the '
9490*cda5da8dSAndroid Build Coastguard Worker                 'tuple.\n'
9491*cda5da8dSAndroid Build Coastguard Worker                 '   Example:\n'
9492*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9493*cda5da8dSAndroid Build Coastguard Worker                 '      def __hash__(self):\n'
9494*cda5da8dSAndroid Build Coastguard Worker                 '          return hash((self.name, self.nick, self.color))\n'
9495*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9496*cda5da8dSAndroid Build Coastguard Worker                 '   Note:\n'
9497*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9498*cda5da8dSAndroid Build Coastguard Worker                 '     "hash()" truncates the value returned from an object’s '
9499*cda5da8dSAndroid Build Coastguard Worker                 'custom\n'
9500*cda5da8dSAndroid Build Coastguard Worker                 '     "__hash__()" method to the size of a "Py_ssize_t".  '
9501*cda5da8dSAndroid Build Coastguard Worker                 'This is\n'
9502*cda5da8dSAndroid Build Coastguard Worker                 '     typically 8 bytes on 64-bit builds and 4 bytes on '
9503*cda5da8dSAndroid Build Coastguard Worker                 '32-bit builds.\n'
9504*cda5da8dSAndroid Build Coastguard Worker                 '     If an object’s   "__hash__()" must interoperate on '
9505*cda5da8dSAndroid Build Coastguard Worker                 'builds of\n'
9506*cda5da8dSAndroid Build Coastguard Worker                 '     different bit sizes, be sure to check the width on all '
9507*cda5da8dSAndroid Build Coastguard Worker                 'supported\n'
9508*cda5da8dSAndroid Build Coastguard Worker                 '     builds.  An easy way to do this is with "python -c '
9509*cda5da8dSAndroid Build Coastguard Worker                 '"import sys;\n'
9510*cda5da8dSAndroid Build Coastguard Worker                 '     print(sys.hash_info.width)"".\n'
9511*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9512*cda5da8dSAndroid Build Coastguard Worker                 '   If a class does not define an "__eq__()" method it should '
9513*cda5da8dSAndroid Build Coastguard Worker                 'not\n'
9514*cda5da8dSAndroid Build Coastguard Worker                 '   define a "__hash__()" operation either; if it defines '
9515*cda5da8dSAndroid Build Coastguard Worker                 '"__eq__()"\n'
9516*cda5da8dSAndroid Build Coastguard Worker                 '   but not "__hash__()", its instances will not be usable as '
9517*cda5da8dSAndroid Build Coastguard Worker                 'items in\n'
9518*cda5da8dSAndroid Build Coastguard Worker                 '   hashable collections.  If a class defines mutable objects '
9519*cda5da8dSAndroid Build Coastguard Worker                 'and\n'
9520*cda5da8dSAndroid Build Coastguard Worker                 '   implements an "__eq__()" method, it should not implement\n'
9521*cda5da8dSAndroid Build Coastguard Worker                 '   "__hash__()", since the implementation of *hashable* '
9522*cda5da8dSAndroid Build Coastguard Worker                 'collections\n'
9523*cda5da8dSAndroid Build Coastguard Worker                 '   requires that a key’s hash value is immutable (if the '
9524*cda5da8dSAndroid Build Coastguard Worker                 'object’s hash\n'
9525*cda5da8dSAndroid Build Coastguard Worker                 '   value changes, it will be in the wrong hash bucket).\n'
9526*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9527*cda5da8dSAndroid Build Coastguard Worker                 '   User-defined classes have "__eq__()" and "__hash__()" '
9528*cda5da8dSAndroid Build Coastguard Worker                 'methods by\n'
9529*cda5da8dSAndroid Build Coastguard Worker                 '   default; with them, all objects compare unequal (except '
9530*cda5da8dSAndroid Build Coastguard Worker                 'with\n'
9531*cda5da8dSAndroid Build Coastguard Worker                 '   themselves) and "x.__hash__()" returns an appropriate '
9532*cda5da8dSAndroid Build Coastguard Worker                 'value such\n'
9533*cda5da8dSAndroid Build Coastguard Worker                 '   that "x == y" implies both that "x is y" and "hash(x) == '
9534*cda5da8dSAndroid Build Coastguard Worker                 'hash(y)".\n'
9535*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9536*cda5da8dSAndroid Build Coastguard Worker                 '   A class that overrides "__eq__()" and does not define '
9537*cda5da8dSAndroid Build Coastguard Worker                 '"__hash__()"\n'
9538*cda5da8dSAndroid Build Coastguard Worker                 '   will have its "__hash__()" implicitly set to "None".  '
9539*cda5da8dSAndroid Build Coastguard Worker                 'When the\n'
9540*cda5da8dSAndroid Build Coastguard Worker                 '   "__hash__()" method of a class is "None", instances of '
9541*cda5da8dSAndroid Build Coastguard Worker                 'the class\n'
9542*cda5da8dSAndroid Build Coastguard Worker                 '   will raise an appropriate "TypeError" when a program '
9543*cda5da8dSAndroid Build Coastguard Worker                 'attempts to\n'
9544*cda5da8dSAndroid Build Coastguard Worker                 '   retrieve their hash value, and will also be correctly '
9545*cda5da8dSAndroid Build Coastguard Worker                 'identified as\n'
9546*cda5da8dSAndroid Build Coastguard Worker                 '   unhashable when checking "isinstance(obj,\n'
9547*cda5da8dSAndroid Build Coastguard Worker                 '   collections.abc.Hashable)".\n'
9548*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9549*cda5da8dSAndroid Build Coastguard Worker                 '   If a class that overrides "__eq__()" needs to retain the\n'
9550*cda5da8dSAndroid Build Coastguard Worker                 '   implementation of "__hash__()" from a parent class, the '
9551*cda5da8dSAndroid Build Coastguard Worker                 'interpreter\n'
9552*cda5da8dSAndroid Build Coastguard Worker                 '   must be told this explicitly by setting "__hash__ =\n'
9553*cda5da8dSAndroid Build Coastguard Worker                 '   <ParentClass>.__hash__".\n'
9554*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9555*cda5da8dSAndroid Build Coastguard Worker                 '   If a class that does not override "__eq__()" wishes to '
9556*cda5da8dSAndroid Build Coastguard Worker                 'suppress\n'
9557*cda5da8dSAndroid Build Coastguard Worker                 '   hash support, it should include "__hash__ = None" in the '
9558*cda5da8dSAndroid Build Coastguard Worker                 'class\n'
9559*cda5da8dSAndroid Build Coastguard Worker                 '   definition. A class which defines its own "__hash__()" '
9560*cda5da8dSAndroid Build Coastguard Worker                 'that\n'
9561*cda5da8dSAndroid Build Coastguard Worker                 '   explicitly raises a "TypeError" would be incorrectly '
9562*cda5da8dSAndroid Build Coastguard Worker                 'identified as\n'
9563*cda5da8dSAndroid Build Coastguard Worker                 '   hashable by an "isinstance(obj, '
9564*cda5da8dSAndroid Build Coastguard Worker                 'collections.abc.Hashable)" call.\n'
9565*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9566*cda5da8dSAndroid Build Coastguard Worker                 '   Note:\n'
9567*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9568*cda5da8dSAndroid Build Coastguard Worker                 '     By default, the "__hash__()" values of str and bytes '
9569*cda5da8dSAndroid Build Coastguard Worker                 'objects are\n'
9570*cda5da8dSAndroid Build Coastguard Worker                 '     “salted” with an unpredictable random value.  Although '
9571*cda5da8dSAndroid Build Coastguard Worker                 'they\n'
9572*cda5da8dSAndroid Build Coastguard Worker                 '     remain constant within an individual Python process, '
9573*cda5da8dSAndroid Build Coastguard Worker                 'they are not\n'
9574*cda5da8dSAndroid Build Coastguard Worker                 '     predictable between repeated invocations of Python.This '
9575*cda5da8dSAndroid Build Coastguard Worker                 'is\n'
9576*cda5da8dSAndroid Build Coastguard Worker                 '     intended to provide protection against a '
9577*cda5da8dSAndroid Build Coastguard Worker                 'denial-of-service caused\n'
9578*cda5da8dSAndroid Build Coastguard Worker                 '     by carefully chosen inputs that exploit the worst case\n'
9579*cda5da8dSAndroid Build Coastguard Worker                 '     performance of a dict insertion, O(n^2) complexity.  '
9580*cda5da8dSAndroid Build Coastguard Worker                 'See\n'
9581*cda5da8dSAndroid Build Coastguard Worker                 '     http://ocert.org/advisories/ocert-2011-003.html for\n'
9582*cda5da8dSAndroid Build Coastguard Worker                 '     details.Changing hash values affects the iteration '
9583*cda5da8dSAndroid Build Coastguard Worker                 'order of sets.\n'
9584*cda5da8dSAndroid Build Coastguard Worker                 '     Python has never made guarantees about this ordering '
9585*cda5da8dSAndroid Build Coastguard Worker                 '(and it\n'
9586*cda5da8dSAndroid Build Coastguard Worker                 '     typically varies between 32-bit and 64-bit builds).See '
9587*cda5da8dSAndroid Build Coastguard Worker                 'also\n'
9588*cda5da8dSAndroid Build Coastguard Worker                 '     "PYTHONHASHSEED".\n'
9589*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9590*cda5da8dSAndroid Build Coastguard Worker                 '   Changed in version 3.3: Hash randomization is enabled by '
9591*cda5da8dSAndroid Build Coastguard Worker                 'default.\n'
9592*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9593*cda5da8dSAndroid Build Coastguard Worker                 'object.__bool__(self)\n'
9594*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9595*cda5da8dSAndroid Build Coastguard Worker                 '   Called to implement truth value testing and the built-in '
9596*cda5da8dSAndroid Build Coastguard Worker                 'operation\n'
9597*cda5da8dSAndroid Build Coastguard Worker                 '   "bool()"; should return "False" or "True".  When this '
9598*cda5da8dSAndroid Build Coastguard Worker                 'method is not\n'
9599*cda5da8dSAndroid Build Coastguard Worker                 '   defined, "__len__()" is called, if it is defined, and the '
9600*cda5da8dSAndroid Build Coastguard Worker                 'object is\n'
9601*cda5da8dSAndroid Build Coastguard Worker                 '   considered true if its result is nonzero.  If a class '
9602*cda5da8dSAndroid Build Coastguard Worker                 'defines\n'
9603*cda5da8dSAndroid Build Coastguard Worker                 '   neither "__len__()" nor "__bool__()", all its instances '
9604*cda5da8dSAndroid Build Coastguard Worker                 'are\n'
9605*cda5da8dSAndroid Build Coastguard Worker                 '   considered true.\n'
9606*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9607*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9608*cda5da8dSAndroid Build Coastguard Worker                 'Customizing attribute access\n'
9609*cda5da8dSAndroid Build Coastguard Worker                 '============================\n'
9610*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9611*cda5da8dSAndroid Build Coastguard Worker                 'The following methods can be defined to customize the '
9612*cda5da8dSAndroid Build Coastguard Worker                 'meaning of\n'
9613*cda5da8dSAndroid Build Coastguard Worker                 'attribute access (use of, assignment to, or deletion of '
9614*cda5da8dSAndroid Build Coastguard Worker                 '"x.name") for\n'
9615*cda5da8dSAndroid Build Coastguard Worker                 'class instances.\n'
9616*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9617*cda5da8dSAndroid Build Coastguard Worker                 'object.__getattr__(self, name)\n'
9618*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9619*cda5da8dSAndroid Build Coastguard Worker                 '   Called when the default attribute access fails with an\n'
9620*cda5da8dSAndroid Build Coastguard Worker                 '   "AttributeError" (either "__getattribute__()" raises an\n'
9621*cda5da8dSAndroid Build Coastguard Worker                 '   "AttributeError" because *name* is not an instance '
9622*cda5da8dSAndroid Build Coastguard Worker                 'attribute or an\n'
9623*cda5da8dSAndroid Build Coastguard Worker                 '   attribute in the class tree for "self"; or "__get__()" of '
9624*cda5da8dSAndroid Build Coastguard Worker                 'a *name*\n'
9625*cda5da8dSAndroid Build Coastguard Worker                 '   property raises "AttributeError").  This method should '
9626*cda5da8dSAndroid Build Coastguard Worker                 'either\n'
9627*cda5da8dSAndroid Build Coastguard Worker                 '   return the (computed) attribute value or raise an '
9628*cda5da8dSAndroid Build Coastguard Worker                 '"AttributeError"\n'
9629*cda5da8dSAndroid Build Coastguard Worker                 '   exception.\n'
9630*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9631*cda5da8dSAndroid Build Coastguard Worker                 '   Note that if the attribute is found through the normal '
9632*cda5da8dSAndroid Build Coastguard Worker                 'mechanism,\n'
9633*cda5da8dSAndroid Build Coastguard Worker                 '   "__getattr__()" is not called.  (This is an intentional '
9634*cda5da8dSAndroid Build Coastguard Worker                 'asymmetry\n'
9635*cda5da8dSAndroid Build Coastguard Worker                 '   between "__getattr__()" and "__setattr__()".) This is '
9636*cda5da8dSAndroid Build Coastguard Worker                 'done both for\n'
9637*cda5da8dSAndroid Build Coastguard Worker                 '   efficiency reasons and because otherwise "__getattr__()" '
9638*cda5da8dSAndroid Build Coastguard Worker                 'would have\n'
9639*cda5da8dSAndroid Build Coastguard Worker                 '   no way to access other attributes of the instance.  Note '
9640*cda5da8dSAndroid Build Coastguard Worker                 'that at\n'
9641*cda5da8dSAndroid Build Coastguard Worker                 '   least for instance variables, you can fake total control '
9642*cda5da8dSAndroid Build Coastguard Worker                 'by not\n'
9643*cda5da8dSAndroid Build Coastguard Worker                 '   inserting any values in the instance attribute dictionary '
9644*cda5da8dSAndroid Build Coastguard Worker                 '(but\n'
9645*cda5da8dSAndroid Build Coastguard Worker                 '   instead inserting them in another object).  See the\n'
9646*cda5da8dSAndroid Build Coastguard Worker                 '   "__getattribute__()" method below for a way to actually '
9647*cda5da8dSAndroid Build Coastguard Worker                 'get total\n'
9648*cda5da8dSAndroid Build Coastguard Worker                 '   control over attribute access.\n'
9649*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9650*cda5da8dSAndroid Build Coastguard Worker                 'object.__getattribute__(self, name)\n'
9651*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9652*cda5da8dSAndroid Build Coastguard Worker                 '   Called unconditionally to implement attribute accesses '
9653*cda5da8dSAndroid Build Coastguard Worker                 'for\n'
9654*cda5da8dSAndroid Build Coastguard Worker                 '   instances of the class. If the class also defines '
9655*cda5da8dSAndroid Build Coastguard Worker                 '"__getattr__()",\n'
9656*cda5da8dSAndroid Build Coastguard Worker                 '   the latter will not be called unless "__getattribute__()" '
9657*cda5da8dSAndroid Build Coastguard Worker                 'either\n'
9658*cda5da8dSAndroid Build Coastguard Worker                 '   calls it explicitly or raises an "AttributeError". This '
9659*cda5da8dSAndroid Build Coastguard Worker                 'method\n'
9660*cda5da8dSAndroid Build Coastguard Worker                 '   should return the (computed) attribute value or raise an\n'
9661*cda5da8dSAndroid Build Coastguard Worker                 '   "AttributeError" exception. In order to avoid infinite '
9662*cda5da8dSAndroid Build Coastguard Worker                 'recursion in\n'
9663*cda5da8dSAndroid Build Coastguard Worker                 '   this method, its implementation should always call the '
9664*cda5da8dSAndroid Build Coastguard Worker                 'base class\n'
9665*cda5da8dSAndroid Build Coastguard Worker                 '   method with the same name to access any attributes it '
9666*cda5da8dSAndroid Build Coastguard Worker                 'needs, for\n'
9667*cda5da8dSAndroid Build Coastguard Worker                 '   example, "object.__getattribute__(self, name)".\n'
9668*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9669*cda5da8dSAndroid Build Coastguard Worker                 '   Note:\n'
9670*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9671*cda5da8dSAndroid Build Coastguard Worker                 '     This method may still be bypassed when looking up '
9672*cda5da8dSAndroid Build Coastguard Worker                 'special methods\n'
9673*cda5da8dSAndroid Build Coastguard Worker                 '     as the result of implicit invocation via language '
9674*cda5da8dSAndroid Build Coastguard Worker                 'syntax or\n'
9675*cda5da8dSAndroid Build Coastguard Worker                 '     built-in functions. See Special method lookup.\n'
9676*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9677*cda5da8dSAndroid Build Coastguard Worker                 '   For certain sensitive attribute accesses, raises an '
9678*cda5da8dSAndroid Build Coastguard Worker                 'auditing event\n'
9679*cda5da8dSAndroid Build Coastguard Worker                 '   "object.__getattr__" with arguments "obj" and "name".\n'
9680*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9681*cda5da8dSAndroid Build Coastguard Worker                 'object.__setattr__(self, name, value)\n'
9682*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9683*cda5da8dSAndroid Build Coastguard Worker                 '   Called when an attribute assignment is attempted.  This '
9684*cda5da8dSAndroid Build Coastguard Worker                 'is called\n'
9685*cda5da8dSAndroid Build Coastguard Worker                 '   instead of the normal mechanism (i.e. store the value in '
9686*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
9687*cda5da8dSAndroid Build Coastguard Worker                 '   instance dictionary). *name* is the attribute name, '
9688*cda5da8dSAndroid Build Coastguard Worker                 '*value* is the\n'
9689*cda5da8dSAndroid Build Coastguard Worker                 '   value to be assigned to it.\n'
9690*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9691*cda5da8dSAndroid Build Coastguard Worker                 '   If "__setattr__()" wants to assign to an instance '
9692*cda5da8dSAndroid Build Coastguard Worker                 'attribute, it\n'
9693*cda5da8dSAndroid Build Coastguard Worker                 '   should call the base class method with the same name, for '
9694*cda5da8dSAndroid Build Coastguard Worker                 'example,\n'
9695*cda5da8dSAndroid Build Coastguard Worker                 '   "object.__setattr__(self, name, value)".\n'
9696*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9697*cda5da8dSAndroid Build Coastguard Worker                 '   For certain sensitive attribute assignments, raises an '
9698*cda5da8dSAndroid Build Coastguard Worker                 'auditing\n'
9699*cda5da8dSAndroid Build Coastguard Worker                 '   event "object.__setattr__" with arguments "obj", "name", '
9700*cda5da8dSAndroid Build Coastguard Worker                 '"value".\n'
9701*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9702*cda5da8dSAndroid Build Coastguard Worker                 'object.__delattr__(self, name)\n'
9703*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9704*cda5da8dSAndroid Build Coastguard Worker                 '   Like "__setattr__()" but for attribute deletion instead '
9705*cda5da8dSAndroid Build Coastguard Worker                 'of\n'
9706*cda5da8dSAndroid Build Coastguard Worker                 '   assignment.  This should only be implemented if "del '
9707*cda5da8dSAndroid Build Coastguard Worker                 'obj.name" is\n'
9708*cda5da8dSAndroid Build Coastguard Worker                 '   meaningful for the object.\n'
9709*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9710*cda5da8dSAndroid Build Coastguard Worker                 '   For certain sensitive attribute deletions, raises an '
9711*cda5da8dSAndroid Build Coastguard Worker                 'auditing event\n'
9712*cda5da8dSAndroid Build Coastguard Worker                 '   "object.__delattr__" with arguments "obj" and "name".\n'
9713*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9714*cda5da8dSAndroid Build Coastguard Worker                 'object.__dir__(self)\n'
9715*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9716*cda5da8dSAndroid Build Coastguard Worker                 '   Called when "dir()" is called on the object. A sequence '
9717*cda5da8dSAndroid Build Coastguard Worker                 'must be\n'
9718*cda5da8dSAndroid Build Coastguard Worker                 '   returned. "dir()" converts the returned sequence to a '
9719*cda5da8dSAndroid Build Coastguard Worker                 'list and\n'
9720*cda5da8dSAndroid Build Coastguard Worker                 '   sorts it.\n'
9721*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9722*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9723*cda5da8dSAndroid Build Coastguard Worker                 'Customizing module attribute access\n'
9724*cda5da8dSAndroid Build Coastguard Worker                 '-----------------------------------\n'
9725*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9726*cda5da8dSAndroid Build Coastguard Worker                 'Special names "__getattr__" and "__dir__" can be also used '
9727*cda5da8dSAndroid Build Coastguard Worker                 'to\n'
9728*cda5da8dSAndroid Build Coastguard Worker                 'customize access to module attributes. The "__getattr__" '
9729*cda5da8dSAndroid Build Coastguard Worker                 'function at\n'
9730*cda5da8dSAndroid Build Coastguard Worker                 'the module level should accept one argument which is the '
9731*cda5da8dSAndroid Build Coastguard Worker                 'name of an\n'
9732*cda5da8dSAndroid Build Coastguard Worker                 'attribute and return the computed value or raise an '
9733*cda5da8dSAndroid Build Coastguard Worker                 '"AttributeError".\n'
9734*cda5da8dSAndroid Build Coastguard Worker                 'If an attribute is not found on a module object through the '
9735*cda5da8dSAndroid Build Coastguard Worker                 'normal\n'
9736*cda5da8dSAndroid Build Coastguard Worker                 'lookup, i.e. "object.__getattribute__()", then "__getattr__" '
9737*cda5da8dSAndroid Build Coastguard Worker                 'is\n'
9738*cda5da8dSAndroid Build Coastguard Worker                 'searched in the module "__dict__" before raising an '
9739*cda5da8dSAndroid Build Coastguard Worker                 '"AttributeError".\n'
9740*cda5da8dSAndroid Build Coastguard Worker                 'If found, it is called with the attribute name and the '
9741*cda5da8dSAndroid Build Coastguard Worker                 'result is\n'
9742*cda5da8dSAndroid Build Coastguard Worker                 'returned.\n'
9743*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9744*cda5da8dSAndroid Build Coastguard Worker                 'The "__dir__" function should accept no arguments, and '
9745*cda5da8dSAndroid Build Coastguard Worker                 'return a\n'
9746*cda5da8dSAndroid Build Coastguard Worker                 'sequence of strings that represents the names accessible on '
9747*cda5da8dSAndroid Build Coastguard Worker                 'module. If\n'
9748*cda5da8dSAndroid Build Coastguard Worker                 'present, this function overrides the standard "dir()" search '
9749*cda5da8dSAndroid Build Coastguard Worker                 'on a\n'
9750*cda5da8dSAndroid Build Coastguard Worker                 'module.\n'
9751*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9752*cda5da8dSAndroid Build Coastguard Worker                 'For a more fine grained customization of the module behavior '
9753*cda5da8dSAndroid Build Coastguard Worker                 '(setting\n'
9754*cda5da8dSAndroid Build Coastguard Worker                 'attributes, properties, etc.), one can set the "__class__" '
9755*cda5da8dSAndroid Build Coastguard Worker                 'attribute\n'
9756*cda5da8dSAndroid Build Coastguard Worker                 'of a module object to a subclass of "types.ModuleType". For '
9757*cda5da8dSAndroid Build Coastguard Worker                 'example:\n'
9758*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9759*cda5da8dSAndroid Build Coastguard Worker                 '   import sys\n'
9760*cda5da8dSAndroid Build Coastguard Worker                 '   from types import ModuleType\n'
9761*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9762*cda5da8dSAndroid Build Coastguard Worker                 '   class VerboseModule(ModuleType):\n'
9763*cda5da8dSAndroid Build Coastguard Worker                 '       def __repr__(self):\n'
9764*cda5da8dSAndroid Build Coastguard Worker                 "           return f'Verbose {self.__name__}'\n"
9765*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9766*cda5da8dSAndroid Build Coastguard Worker                 '       def __setattr__(self, attr, value):\n'
9767*cda5da8dSAndroid Build Coastguard Worker                 "           print(f'Setting {attr}...')\n"
9768*cda5da8dSAndroid Build Coastguard Worker                 '           super().__setattr__(attr, value)\n'
9769*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9770*cda5da8dSAndroid Build Coastguard Worker                 '   sys.modules[__name__].__class__ = VerboseModule\n'
9771*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9772*cda5da8dSAndroid Build Coastguard Worker                 'Note:\n'
9773*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9774*cda5da8dSAndroid Build Coastguard Worker                 '  Defining module "__getattr__" and setting module '
9775*cda5da8dSAndroid Build Coastguard Worker                 '"__class__" only\n'
9776*cda5da8dSAndroid Build Coastguard Worker                 '  affect lookups made using the attribute access syntax – '
9777*cda5da8dSAndroid Build Coastguard Worker                 'directly\n'
9778*cda5da8dSAndroid Build Coastguard Worker                 '  accessing the module globals (whether by code within the '
9779*cda5da8dSAndroid Build Coastguard Worker                 'module, or\n'
9780*cda5da8dSAndroid Build Coastguard Worker                 '  via a reference to the module’s globals dictionary) is '
9781*cda5da8dSAndroid Build Coastguard Worker                 'unaffected.\n'
9782*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9783*cda5da8dSAndroid Build Coastguard Worker                 'Changed in version 3.5: "__class__" module attribute is now '
9784*cda5da8dSAndroid Build Coastguard Worker                 'writable.\n'
9785*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9786*cda5da8dSAndroid Build Coastguard Worker                 'New in version 3.7: "__getattr__" and "__dir__" module '
9787*cda5da8dSAndroid Build Coastguard Worker                 'attributes.\n'
9788*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9789*cda5da8dSAndroid Build Coastguard Worker                 'See also:\n'
9790*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9791*cda5da8dSAndroid Build Coastguard Worker                 '  **PEP 562** - Module __getattr__ and __dir__\n'
9792*cda5da8dSAndroid Build Coastguard Worker                 '     Describes the "__getattr__" and "__dir__" functions on '
9793*cda5da8dSAndroid Build Coastguard Worker                 'modules.\n'
9794*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9795*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9796*cda5da8dSAndroid Build Coastguard Worker                 'Implementing Descriptors\n'
9797*cda5da8dSAndroid Build Coastguard Worker                 '------------------------\n'
9798*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9799*cda5da8dSAndroid Build Coastguard Worker                 'The following methods only apply when an instance of the '
9800*cda5da8dSAndroid Build Coastguard Worker                 'class\n'
9801*cda5da8dSAndroid Build Coastguard Worker                 'containing the method (a so-called *descriptor* class) '
9802*cda5da8dSAndroid Build Coastguard Worker                 'appears in an\n'
9803*cda5da8dSAndroid Build Coastguard Worker                 '*owner* class (the descriptor must be in either the owner’s '
9804*cda5da8dSAndroid Build Coastguard Worker                 'class\n'
9805*cda5da8dSAndroid Build Coastguard Worker                 'dictionary or in the class dictionary for one of its '
9806*cda5da8dSAndroid Build Coastguard Worker                 'parents).  In the\n'
9807*cda5da8dSAndroid Build Coastguard Worker                 'examples below, “the attribute” refers to the attribute '
9808*cda5da8dSAndroid Build Coastguard Worker                 'whose name is\n'
9809*cda5da8dSAndroid Build Coastguard Worker                 'the key of the property in the owner class’ "__dict__".\n'
9810*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9811*cda5da8dSAndroid Build Coastguard Worker                 'object.__get__(self, instance, owner=None)\n'
9812*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9813*cda5da8dSAndroid Build Coastguard Worker                 '   Called to get the attribute of the owner class (class '
9814*cda5da8dSAndroid Build Coastguard Worker                 'attribute\n'
9815*cda5da8dSAndroid Build Coastguard Worker                 '   access) or of an instance of that class (instance '
9816*cda5da8dSAndroid Build Coastguard Worker                 'attribute\n'
9817*cda5da8dSAndroid Build Coastguard Worker                 '   access). The optional *owner* argument is the owner '
9818*cda5da8dSAndroid Build Coastguard Worker                 'class, while\n'
9819*cda5da8dSAndroid Build Coastguard Worker                 '   *instance* is the instance that the attribute was '
9820*cda5da8dSAndroid Build Coastguard Worker                 'accessed through,\n'
9821*cda5da8dSAndroid Build Coastguard Worker                 '   or "None" when the attribute is accessed through the '
9822*cda5da8dSAndroid Build Coastguard Worker                 '*owner*.\n'
9823*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9824*cda5da8dSAndroid Build Coastguard Worker                 '   This method should return the computed attribute value or '
9825*cda5da8dSAndroid Build Coastguard Worker                 'raise an\n'
9826*cda5da8dSAndroid Build Coastguard Worker                 '   "AttributeError" exception.\n'
9827*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9828*cda5da8dSAndroid Build Coastguard Worker                 '   **PEP 252** specifies that "__get__()" is callable with '
9829*cda5da8dSAndroid Build Coastguard Worker                 'one or two\n'
9830*cda5da8dSAndroid Build Coastguard Worker                 '   arguments.  Python’s own built-in descriptors support '
9831*cda5da8dSAndroid Build Coastguard Worker                 'this\n'
9832*cda5da8dSAndroid Build Coastguard Worker                 '   specification; however, it is likely that some '
9833*cda5da8dSAndroid Build Coastguard Worker                 'third-party tools\n'
9834*cda5da8dSAndroid Build Coastguard Worker                 '   have descriptors that require both arguments.  Python’s '
9835*cda5da8dSAndroid Build Coastguard Worker                 'own\n'
9836*cda5da8dSAndroid Build Coastguard Worker                 '   "__getattribute__()" implementation always passes in both '
9837*cda5da8dSAndroid Build Coastguard Worker                 'arguments\n'
9838*cda5da8dSAndroid Build Coastguard Worker                 '   whether they are required or not.\n'
9839*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9840*cda5da8dSAndroid Build Coastguard Worker                 'object.__set__(self, instance, value)\n'
9841*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9842*cda5da8dSAndroid Build Coastguard Worker                 '   Called to set the attribute on an instance *instance* of '
9843*cda5da8dSAndroid Build Coastguard Worker                 'the owner\n'
9844*cda5da8dSAndroid Build Coastguard Worker                 '   class to a new value, *value*.\n'
9845*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9846*cda5da8dSAndroid Build Coastguard Worker                 '   Note, adding "__set__()" or "__delete__()" changes the '
9847*cda5da8dSAndroid Build Coastguard Worker                 'kind of\n'
9848*cda5da8dSAndroid Build Coastguard Worker                 '   descriptor to a “data descriptor”.  See Invoking '
9849*cda5da8dSAndroid Build Coastguard Worker                 'Descriptors for\n'
9850*cda5da8dSAndroid Build Coastguard Worker                 '   more details.\n'
9851*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9852*cda5da8dSAndroid Build Coastguard Worker                 'object.__delete__(self, instance)\n'
9853*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9854*cda5da8dSAndroid Build Coastguard Worker                 '   Called to delete the attribute on an instance *instance* '
9855*cda5da8dSAndroid Build Coastguard Worker                 'of the\n'
9856*cda5da8dSAndroid Build Coastguard Worker                 '   owner class.\n'
9857*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9858*cda5da8dSAndroid Build Coastguard Worker                 'The attribute "__objclass__" is interpreted by the "inspect" '
9859*cda5da8dSAndroid Build Coastguard Worker                 'module as\n'
9860*cda5da8dSAndroid Build Coastguard Worker                 'specifying the class where this object was defined (setting '
9861*cda5da8dSAndroid Build Coastguard Worker                 'this\n'
9862*cda5da8dSAndroid Build Coastguard Worker                 'appropriately can assist in runtime introspection of dynamic '
9863*cda5da8dSAndroid Build Coastguard Worker                 'class\n'
9864*cda5da8dSAndroid Build Coastguard Worker                 'attributes). For callables, it may indicate that an instance '
9865*cda5da8dSAndroid Build Coastguard Worker                 'of the\n'
9866*cda5da8dSAndroid Build Coastguard Worker                 'given type (or a subclass) is expected or required as the '
9867*cda5da8dSAndroid Build Coastguard Worker                 'first\n'
9868*cda5da8dSAndroid Build Coastguard Worker                 'positional argument (for example, CPython sets this '
9869*cda5da8dSAndroid Build Coastguard Worker                 'attribute for\n'
9870*cda5da8dSAndroid Build Coastguard Worker                 'unbound methods that are implemented in C).\n'
9871*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9872*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9873*cda5da8dSAndroid Build Coastguard Worker                 'Invoking Descriptors\n'
9874*cda5da8dSAndroid Build Coastguard Worker                 '--------------------\n'
9875*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9876*cda5da8dSAndroid Build Coastguard Worker                 'In general, a descriptor is an object attribute with '
9877*cda5da8dSAndroid Build Coastguard Worker                 '“binding\n'
9878*cda5da8dSAndroid Build Coastguard Worker                 'behavior”, one whose attribute access has been overridden by '
9879*cda5da8dSAndroid Build Coastguard Worker                 'methods\n'
9880*cda5da8dSAndroid Build Coastguard Worker                 'in the descriptor protocol:  "__get__()", "__set__()", and\n'
9881*cda5da8dSAndroid Build Coastguard Worker                 '"__delete__()". If any of those methods are defined for an '
9882*cda5da8dSAndroid Build Coastguard Worker                 'object, it\n'
9883*cda5da8dSAndroid Build Coastguard Worker                 'is said to be a descriptor.\n'
9884*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9885*cda5da8dSAndroid Build Coastguard Worker                 'The default behavior for attribute access is to get, set, or '
9886*cda5da8dSAndroid Build Coastguard Worker                 'delete\n'
9887*cda5da8dSAndroid Build Coastguard Worker                 'the attribute from an object’s dictionary. For instance, '
9888*cda5da8dSAndroid Build Coastguard Worker                 '"a.x" has a\n'
9889*cda5da8dSAndroid Build Coastguard Worker                 'lookup chain starting with "a.__dict__[\'x\']", then\n'
9890*cda5da8dSAndroid Build Coastguard Worker                 '"type(a).__dict__[\'x\']", and continuing through the base '
9891*cda5da8dSAndroid Build Coastguard Worker                 'classes of\n'
9892*cda5da8dSAndroid Build Coastguard Worker                 '"type(a)" excluding metaclasses.\n'
9893*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9894*cda5da8dSAndroid Build Coastguard Worker                 'However, if the looked-up value is an object defining one of '
9895*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
9896*cda5da8dSAndroid Build Coastguard Worker                 'descriptor methods, then Python may override the default '
9897*cda5da8dSAndroid Build Coastguard Worker                 'behavior and\n'
9898*cda5da8dSAndroid Build Coastguard Worker                 'invoke the descriptor method instead.  Where this occurs in '
9899*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
9900*cda5da8dSAndroid Build Coastguard Worker                 'precedence chain depends on which descriptor methods were '
9901*cda5da8dSAndroid Build Coastguard Worker                 'defined and\n'
9902*cda5da8dSAndroid Build Coastguard Worker                 'how they were called.\n'
9903*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9904*cda5da8dSAndroid Build Coastguard Worker                 'The starting point for descriptor invocation is a binding, '
9905*cda5da8dSAndroid Build Coastguard Worker                 '"a.x". How\n'
9906*cda5da8dSAndroid Build Coastguard Worker                 'the arguments are assembled depends on "a":\n'
9907*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9908*cda5da8dSAndroid Build Coastguard Worker                 'Direct Call\n'
9909*cda5da8dSAndroid Build Coastguard Worker                 '   The simplest and least common call is when user code '
9910*cda5da8dSAndroid Build Coastguard Worker                 'directly\n'
9911*cda5da8dSAndroid Build Coastguard Worker                 '   invokes a descriptor method:    "x.__get__(a)".\n'
9912*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9913*cda5da8dSAndroid Build Coastguard Worker                 'Instance Binding\n'
9914*cda5da8dSAndroid Build Coastguard Worker                 '   If binding to an object instance, "a.x" is transformed '
9915*cda5da8dSAndroid Build Coastguard Worker                 'into the\n'
9916*cda5da8dSAndroid Build Coastguard Worker                 '   call: "type(a).__dict__[\'x\'].__get__(a, type(a))".\n'
9917*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9918*cda5da8dSAndroid Build Coastguard Worker                 'Class Binding\n'
9919*cda5da8dSAndroid Build Coastguard Worker                 '   If binding to a class, "A.x" is transformed into the '
9920*cda5da8dSAndroid Build Coastguard Worker                 'call:\n'
9921*cda5da8dSAndroid Build Coastguard Worker                 '   "A.__dict__[\'x\'].__get__(None, A)".\n'
9922*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9923*cda5da8dSAndroid Build Coastguard Worker                 'Super Binding\n'
9924*cda5da8dSAndroid Build Coastguard Worker                 '   A dotted lookup such as "super(A, a).x" searches\n'
9925*cda5da8dSAndroid Build Coastguard Worker                 '   "a.__class__.__mro__" for a base class "B" following "A" '
9926*cda5da8dSAndroid Build Coastguard Worker                 'and then\n'
9927*cda5da8dSAndroid Build Coastguard Worker                 '   returns "B.__dict__[\'x\'].__get__(a, A)".  If not a '
9928*cda5da8dSAndroid Build Coastguard Worker                 'descriptor, "x"\n'
9929*cda5da8dSAndroid Build Coastguard Worker                 '   is returned unchanged.\n'
9930*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9931*cda5da8dSAndroid Build Coastguard Worker                 'For instance bindings, the precedence of descriptor '
9932*cda5da8dSAndroid Build Coastguard Worker                 'invocation depends\n'
9933*cda5da8dSAndroid Build Coastguard Worker                 'on which descriptor methods are defined.  A descriptor can '
9934*cda5da8dSAndroid Build Coastguard Worker                 'define any\n'
9935*cda5da8dSAndroid Build Coastguard Worker                 'combination of "__get__()", "__set__()" and "__delete__()".  '
9936*cda5da8dSAndroid Build Coastguard Worker                 'If it\n'
9937*cda5da8dSAndroid Build Coastguard Worker                 'does not define "__get__()", then accessing the attribute '
9938*cda5da8dSAndroid Build Coastguard Worker                 'will return\n'
9939*cda5da8dSAndroid Build Coastguard Worker                 'the descriptor object itself unless there is a value in the '
9940*cda5da8dSAndroid Build Coastguard Worker                 'object’s\n'
9941*cda5da8dSAndroid Build Coastguard Worker                 'instance dictionary.  If the descriptor defines "__set__()" '
9942*cda5da8dSAndroid Build Coastguard Worker                 'and/or\n'
9943*cda5da8dSAndroid Build Coastguard Worker                 '"__delete__()", it is a data descriptor; if it defines '
9944*cda5da8dSAndroid Build Coastguard Worker                 'neither, it is\n'
9945*cda5da8dSAndroid Build Coastguard Worker                 'a non-data descriptor.  Normally, data descriptors define '
9946*cda5da8dSAndroid Build Coastguard Worker                 'both\n'
9947*cda5da8dSAndroid Build Coastguard Worker                 '"__get__()" and "__set__()", while non-data descriptors have '
9948*cda5da8dSAndroid Build Coastguard Worker                 'just the\n'
9949*cda5da8dSAndroid Build Coastguard Worker                 '"__get__()" method.  Data descriptors with "__get__()" and '
9950*cda5da8dSAndroid Build Coastguard Worker                 '"__set__()"\n'
9951*cda5da8dSAndroid Build Coastguard Worker                 '(and/or "__delete__()") defined always override a '
9952*cda5da8dSAndroid Build Coastguard Worker                 'redefinition in an\n'
9953*cda5da8dSAndroid Build Coastguard Worker                 'instance dictionary.  In contrast, non-data descriptors can '
9954*cda5da8dSAndroid Build Coastguard Worker                 'be\n'
9955*cda5da8dSAndroid Build Coastguard Worker                 'overridden by instances.\n'
9956*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9957*cda5da8dSAndroid Build Coastguard Worker                 'Python methods (including those decorated with '
9958*cda5da8dSAndroid Build Coastguard Worker                 '"@staticmethod" and\n'
9959*cda5da8dSAndroid Build Coastguard Worker                 '"@classmethod") are implemented as non-data descriptors.  '
9960*cda5da8dSAndroid Build Coastguard Worker                 'Accordingly,\n'
9961*cda5da8dSAndroid Build Coastguard Worker                 'instances can redefine and override methods.  This allows '
9962*cda5da8dSAndroid Build Coastguard Worker                 'individual\n'
9963*cda5da8dSAndroid Build Coastguard Worker                 'instances to acquire behaviors that differ from other '
9964*cda5da8dSAndroid Build Coastguard Worker                 'instances of the\n'
9965*cda5da8dSAndroid Build Coastguard Worker                 'same class.\n'
9966*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9967*cda5da8dSAndroid Build Coastguard Worker                 'The "property()" function is implemented as a data '
9968*cda5da8dSAndroid Build Coastguard Worker                 'descriptor.\n'
9969*cda5da8dSAndroid Build Coastguard Worker                 'Accordingly, instances cannot override the behavior of a '
9970*cda5da8dSAndroid Build Coastguard Worker                 'property.\n'
9971*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9972*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9973*cda5da8dSAndroid Build Coastguard Worker                 '__slots__\n'
9974*cda5da8dSAndroid Build Coastguard Worker                 '---------\n'
9975*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9976*cda5da8dSAndroid Build Coastguard Worker                 '*__slots__* allow us to explicitly declare data members '
9977*cda5da8dSAndroid Build Coastguard Worker                 '(like\n'
9978*cda5da8dSAndroid Build Coastguard Worker                 'properties) and deny the creation of "__dict__" and '
9979*cda5da8dSAndroid Build Coastguard Worker                 '*__weakref__*\n'
9980*cda5da8dSAndroid Build Coastguard Worker                 '(unless explicitly declared in *__slots__* or available in a '
9981*cda5da8dSAndroid Build Coastguard Worker                 'parent.)\n'
9982*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9983*cda5da8dSAndroid Build Coastguard Worker                 'The space saved over using "__dict__" can be significant. '
9984*cda5da8dSAndroid Build Coastguard Worker                 'Attribute\n'
9985*cda5da8dSAndroid Build Coastguard Worker                 'lookup speed can be significantly improved as well.\n'
9986*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9987*cda5da8dSAndroid Build Coastguard Worker                 'object.__slots__\n'
9988*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9989*cda5da8dSAndroid Build Coastguard Worker                 '   This class variable can be assigned a string, iterable, '
9990*cda5da8dSAndroid Build Coastguard Worker                 'or sequence\n'
9991*cda5da8dSAndroid Build Coastguard Worker                 '   of strings with variable names used by instances.  '
9992*cda5da8dSAndroid Build Coastguard Worker                 '*__slots__*\n'
9993*cda5da8dSAndroid Build Coastguard Worker                 '   reserves space for the declared variables and prevents '
9994*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
9995*cda5da8dSAndroid Build Coastguard Worker                 '   automatic creation of "__dict__" and *__weakref__* for '
9996*cda5da8dSAndroid Build Coastguard Worker                 'each\n'
9997*cda5da8dSAndroid Build Coastguard Worker                 '   instance.\n'
9998*cda5da8dSAndroid Build Coastguard Worker                 '\n'
9999*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10000*cda5da8dSAndroid Build Coastguard Worker                 'Notes on using *__slots__*\n'
10001*cda5da8dSAndroid Build Coastguard Worker                 '~~~~~~~~~~~~~~~~~~~~~~~~~~\n'
10002*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10003*cda5da8dSAndroid Build Coastguard Worker                 '* When inheriting from a class without *__slots__*, the '
10004*cda5da8dSAndroid Build Coastguard Worker                 '"__dict__" and\n'
10005*cda5da8dSAndroid Build Coastguard Worker                 '  *__weakref__* attribute of the instances will always be '
10006*cda5da8dSAndroid Build Coastguard Worker                 'accessible.\n'
10007*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10008*cda5da8dSAndroid Build Coastguard Worker                 '* Without a "__dict__" variable, instances cannot be '
10009*cda5da8dSAndroid Build Coastguard Worker                 'assigned new\n'
10010*cda5da8dSAndroid Build Coastguard Worker                 '  variables not listed in the *__slots__* definition.  '
10011*cda5da8dSAndroid Build Coastguard Worker                 'Attempts to\n'
10012*cda5da8dSAndroid Build Coastguard Worker                 '  assign to an unlisted variable name raises '
10013*cda5da8dSAndroid Build Coastguard Worker                 '"AttributeError". If\n'
10014*cda5da8dSAndroid Build Coastguard Worker                 '  dynamic assignment of new variables is desired, then add\n'
10015*cda5da8dSAndroid Build Coastguard Worker                 '  "\'__dict__\'" to the sequence of strings in the '
10016*cda5da8dSAndroid Build Coastguard Worker                 '*__slots__*\n'
10017*cda5da8dSAndroid Build Coastguard Worker                 '  declaration.\n'
10018*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10019*cda5da8dSAndroid Build Coastguard Worker                 '* Without a *__weakref__* variable for each instance, '
10020*cda5da8dSAndroid Build Coastguard Worker                 'classes defining\n'
10021*cda5da8dSAndroid Build Coastguard Worker                 '  *__slots__* do not support "weak references" to its '
10022*cda5da8dSAndroid Build Coastguard Worker                 'instances. If\n'
10023*cda5da8dSAndroid Build Coastguard Worker                 '  weak reference support is needed, then add '
10024*cda5da8dSAndroid Build Coastguard Worker                 '"\'__weakref__\'" to the\n'
10025*cda5da8dSAndroid Build Coastguard Worker                 '  sequence of strings in the *__slots__* declaration.\n'
10026*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10027*cda5da8dSAndroid Build Coastguard Worker                 '* *__slots__* are implemented at the class level by '
10028*cda5da8dSAndroid Build Coastguard Worker                 'creating\n'
10029*cda5da8dSAndroid Build Coastguard Worker                 '  descriptors for each variable name.  As a result, class '
10030*cda5da8dSAndroid Build Coastguard Worker                 'attributes\n'
10031*cda5da8dSAndroid Build Coastguard Worker                 '  cannot be used to set default values for instance '
10032*cda5da8dSAndroid Build Coastguard Worker                 'variables defined\n'
10033*cda5da8dSAndroid Build Coastguard Worker                 '  by *__slots__*; otherwise, the class attribute would '
10034*cda5da8dSAndroid Build Coastguard Worker                 'overwrite the\n'
10035*cda5da8dSAndroid Build Coastguard Worker                 '  descriptor assignment.\n'
10036*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10037*cda5da8dSAndroid Build Coastguard Worker                 '* The action of a *__slots__* declaration is not limited to '
10038*cda5da8dSAndroid Build Coastguard Worker                 'the class\n'
10039*cda5da8dSAndroid Build Coastguard Worker                 '  where it is defined.  *__slots__* declared in parents are '
10040*cda5da8dSAndroid Build Coastguard Worker                 'available\n'
10041*cda5da8dSAndroid Build Coastguard Worker                 '  in child classes. However, child subclasses will get a '
10042*cda5da8dSAndroid Build Coastguard Worker                 '"__dict__"\n'
10043*cda5da8dSAndroid Build Coastguard Worker                 '  and *__weakref__* unless they also define *__slots__* '
10044*cda5da8dSAndroid Build Coastguard Worker                 '(which should\n'
10045*cda5da8dSAndroid Build Coastguard Worker                 '  only contain names of any *additional* slots).\n'
10046*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10047*cda5da8dSAndroid Build Coastguard Worker                 '* If a class defines a slot also defined in a base class, '
10048*cda5da8dSAndroid Build Coastguard Worker                 'the instance\n'
10049*cda5da8dSAndroid Build Coastguard Worker                 '  variable defined by the base class slot is inaccessible '
10050*cda5da8dSAndroid Build Coastguard Worker                 '(except by\n'
10051*cda5da8dSAndroid Build Coastguard Worker                 '  retrieving its descriptor directly from the base class). '
10052*cda5da8dSAndroid Build Coastguard Worker                 'This\n'
10053*cda5da8dSAndroid Build Coastguard Worker                 '  renders the meaning of the program undefined.  In the '
10054*cda5da8dSAndroid Build Coastguard Worker                 'future, a\n'
10055*cda5da8dSAndroid Build Coastguard Worker                 '  check may be added to prevent this.\n'
10056*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10057*cda5da8dSAndroid Build Coastguard Worker                 '* "TypeError" will be raised if nonempty *__slots__* are '
10058*cda5da8dSAndroid Build Coastguard Worker                 'defined for a\n'
10059*cda5da8dSAndroid Build Coastguard Worker                 '  class derived from a ""variable-length" built-in type" '
10060*cda5da8dSAndroid Build Coastguard Worker                 'such as\n'
10061*cda5da8dSAndroid Build Coastguard Worker                 '  "int", "bytes", and "tuple".\n'
10062*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10063*cda5da8dSAndroid Build Coastguard Worker                 '* Any non-string *iterable* may be assigned to *__slots__*.\n'
10064*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10065*cda5da8dSAndroid Build Coastguard Worker                 '* If a "dictionary" is used to assign *__slots__*, the '
10066*cda5da8dSAndroid Build Coastguard Worker                 'dictionary keys\n'
10067*cda5da8dSAndroid Build Coastguard Worker                 '  will be used as the slot names. The values of the '
10068*cda5da8dSAndroid Build Coastguard Worker                 'dictionary can be\n'
10069*cda5da8dSAndroid Build Coastguard Worker                 '  used to provide per-attribute docstrings that will be '
10070*cda5da8dSAndroid Build Coastguard Worker                 'recognised by\n'
10071*cda5da8dSAndroid Build Coastguard Worker                 '  "inspect.getdoc()" and displayed in the output of '
10072*cda5da8dSAndroid Build Coastguard Worker                 '"help()".\n'
10073*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10074*cda5da8dSAndroid Build Coastguard Worker                 '* "__class__" assignment works only if both classes have the '
10075*cda5da8dSAndroid Build Coastguard Worker                 'same\n'
10076*cda5da8dSAndroid Build Coastguard Worker                 '  *__slots__*.\n'
10077*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10078*cda5da8dSAndroid Build Coastguard Worker                 '* Multiple inheritance with multiple slotted parent classes '
10079*cda5da8dSAndroid Build Coastguard Worker                 'can be\n'
10080*cda5da8dSAndroid Build Coastguard Worker                 '  used, but only one parent is allowed to have attributes '
10081*cda5da8dSAndroid Build Coastguard Worker                 'created by\n'
10082*cda5da8dSAndroid Build Coastguard Worker                 '  slots (the other bases must have empty slot layouts) - '
10083*cda5da8dSAndroid Build Coastguard Worker                 'violations\n'
10084*cda5da8dSAndroid Build Coastguard Worker                 '  raise "TypeError".\n'
10085*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10086*cda5da8dSAndroid Build Coastguard Worker                 '* If an *iterator* is used for *__slots__* then a '
10087*cda5da8dSAndroid Build Coastguard Worker                 '*descriptor* is\n'
10088*cda5da8dSAndroid Build Coastguard Worker                 '  created for each of the iterator’s values. However, the '
10089*cda5da8dSAndroid Build Coastguard Worker                 '*__slots__*\n'
10090*cda5da8dSAndroid Build Coastguard Worker                 '  attribute will be an empty iterator.\n'
10091*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10092*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10093*cda5da8dSAndroid Build Coastguard Worker                 'Customizing class creation\n'
10094*cda5da8dSAndroid Build Coastguard Worker                 '==========================\n'
10095*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10096*cda5da8dSAndroid Build Coastguard Worker                 'Whenever a class inherits from another class, '
10097*cda5da8dSAndroid Build Coastguard Worker                 '"__init_subclass__()" is\n'
10098*cda5da8dSAndroid Build Coastguard Worker                 'called on the parent class. This way, it is possible to '
10099*cda5da8dSAndroid Build Coastguard Worker                 'write classes\n'
10100*cda5da8dSAndroid Build Coastguard Worker                 'which change the behavior of subclasses. This is closely '
10101*cda5da8dSAndroid Build Coastguard Worker                 'related to\n'
10102*cda5da8dSAndroid Build Coastguard Worker                 'class decorators, but where class decorators only affect the '
10103*cda5da8dSAndroid Build Coastguard Worker                 'specific\n'
10104*cda5da8dSAndroid Build Coastguard Worker                 'class they’re applied to, "__init_subclass__" solely applies '
10105*cda5da8dSAndroid Build Coastguard Worker                 'to future\n'
10106*cda5da8dSAndroid Build Coastguard Worker                 'subclasses of the class defining the method.\n'
10107*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10108*cda5da8dSAndroid Build Coastguard Worker                 'classmethod object.__init_subclass__(cls)\n'
10109*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10110*cda5da8dSAndroid Build Coastguard Worker                 '   This method is called whenever the containing class is '
10111*cda5da8dSAndroid Build Coastguard Worker                 'subclassed.\n'
10112*cda5da8dSAndroid Build Coastguard Worker                 '   *cls* is then the new subclass. If defined as a normal '
10113*cda5da8dSAndroid Build Coastguard Worker                 'instance\n'
10114*cda5da8dSAndroid Build Coastguard Worker                 '   method, this method is implicitly converted to a class '
10115*cda5da8dSAndroid Build Coastguard Worker                 'method.\n'
10116*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10117*cda5da8dSAndroid Build Coastguard Worker                 '   Keyword arguments which are given to a new class are '
10118*cda5da8dSAndroid Build Coastguard Worker                 'passed to the\n'
10119*cda5da8dSAndroid Build Coastguard Worker                 '   parent’s class "__init_subclass__". For compatibility '
10120*cda5da8dSAndroid Build Coastguard Worker                 'with other\n'
10121*cda5da8dSAndroid Build Coastguard Worker                 '   classes using "__init_subclass__", one should take out '
10122*cda5da8dSAndroid Build Coastguard Worker                 'the needed\n'
10123*cda5da8dSAndroid Build Coastguard Worker                 '   keyword arguments and pass the others over to the base '
10124*cda5da8dSAndroid Build Coastguard Worker                 'class, as\n'
10125*cda5da8dSAndroid Build Coastguard Worker                 '   in:\n'
10126*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10127*cda5da8dSAndroid Build Coastguard Worker                 '      class Philosopher:\n'
10128*cda5da8dSAndroid Build Coastguard Worker                 '          def __init_subclass__(cls, /, default_name, '
10129*cda5da8dSAndroid Build Coastguard Worker                 '**kwargs):\n'
10130*cda5da8dSAndroid Build Coastguard Worker                 '              super().__init_subclass__(**kwargs)\n'
10131*cda5da8dSAndroid Build Coastguard Worker                 '              cls.default_name = default_name\n'
10132*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10133*cda5da8dSAndroid Build Coastguard Worker                 '      class AustralianPhilosopher(Philosopher, '
10134*cda5da8dSAndroid Build Coastguard Worker                 'default_name="Bruce"):\n'
10135*cda5da8dSAndroid Build Coastguard Worker                 '          pass\n'
10136*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10137*cda5da8dSAndroid Build Coastguard Worker                 '   The default implementation "object.__init_subclass__" '
10138*cda5da8dSAndroid Build Coastguard Worker                 'does nothing,\n'
10139*cda5da8dSAndroid Build Coastguard Worker                 '   but raises an error if it is called with any arguments.\n'
10140*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10141*cda5da8dSAndroid Build Coastguard Worker                 '   Note:\n'
10142*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10143*cda5da8dSAndroid Build Coastguard Worker                 '     The metaclass hint "metaclass" is consumed by the rest '
10144*cda5da8dSAndroid Build Coastguard Worker                 'of the\n'
10145*cda5da8dSAndroid Build Coastguard Worker                 '     type machinery, and is never passed to '
10146*cda5da8dSAndroid Build Coastguard Worker                 '"__init_subclass__"\n'
10147*cda5da8dSAndroid Build Coastguard Worker                 '     implementations. The actual metaclass (rather than the '
10148*cda5da8dSAndroid Build Coastguard Worker                 'explicit\n'
10149*cda5da8dSAndroid Build Coastguard Worker                 '     hint) can be accessed as "type(cls)".\n'
10150*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10151*cda5da8dSAndroid Build Coastguard Worker                 '   New in version 3.6.\n'
10152*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10153*cda5da8dSAndroid Build Coastguard Worker                 'When a class is created, "type.__new__()" scans the class '
10154*cda5da8dSAndroid Build Coastguard Worker                 'variables\n'
10155*cda5da8dSAndroid Build Coastguard Worker                 'and makes callbacks to those with a "__set_name__()" hook.\n'
10156*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10157*cda5da8dSAndroid Build Coastguard Worker                 'object.__set_name__(self, owner, name)\n'
10158*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10159*cda5da8dSAndroid Build Coastguard Worker                 '   Automatically called at the time the owning class *owner* '
10160*cda5da8dSAndroid Build Coastguard Worker                 'is\n'
10161*cda5da8dSAndroid Build Coastguard Worker                 '   created. The object has been assigned to *name* in that '
10162*cda5da8dSAndroid Build Coastguard Worker                 'class:\n'
10163*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10164*cda5da8dSAndroid Build Coastguard Worker                 '      class A:\n'
10165*cda5da8dSAndroid Build Coastguard Worker                 '          x = C()  # Automatically calls: x.__set_name__(A, '
10166*cda5da8dSAndroid Build Coastguard Worker                 "'x')\n"
10167*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10168*cda5da8dSAndroid Build Coastguard Worker                 '   If the class variable is assigned after the class is '
10169*cda5da8dSAndroid Build Coastguard Worker                 'created,\n'
10170*cda5da8dSAndroid Build Coastguard Worker                 '   "__set_name__()" will not be called automatically. If '
10171*cda5da8dSAndroid Build Coastguard Worker                 'needed,\n'
10172*cda5da8dSAndroid Build Coastguard Worker                 '   "__set_name__()" can be called directly:\n'
10173*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10174*cda5da8dSAndroid Build Coastguard Worker                 '      class A:\n'
10175*cda5da8dSAndroid Build Coastguard Worker                 '         pass\n'
10176*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10177*cda5da8dSAndroid Build Coastguard Worker                 '      c = C()\n'
10178*cda5da8dSAndroid Build Coastguard Worker                 '      A.x = c                  # The hook is not called\n'
10179*cda5da8dSAndroid Build Coastguard Worker                 "      c.__set_name__(A, 'x')   # Manually invoke the hook\n"
10180*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10181*cda5da8dSAndroid Build Coastguard Worker                 '   See Creating the class object for more details.\n'
10182*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10183*cda5da8dSAndroid Build Coastguard Worker                 '   New in version 3.6.\n'
10184*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10185*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10186*cda5da8dSAndroid Build Coastguard Worker                 'Metaclasses\n'
10187*cda5da8dSAndroid Build Coastguard Worker                 '-----------\n'
10188*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10189*cda5da8dSAndroid Build Coastguard Worker                 'By default, classes are constructed using "type()". The '
10190*cda5da8dSAndroid Build Coastguard Worker                 'class body is\n'
10191*cda5da8dSAndroid Build Coastguard Worker                 'executed in a new namespace and the class name is bound '
10192*cda5da8dSAndroid Build Coastguard Worker                 'locally to the\n'
10193*cda5da8dSAndroid Build Coastguard Worker                 'result of "type(name, bases, namespace)".\n'
10194*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10195*cda5da8dSAndroid Build Coastguard Worker                 'The class creation process can be customized by passing the\n'
10196*cda5da8dSAndroid Build Coastguard Worker                 '"metaclass" keyword argument in the class definition line, '
10197*cda5da8dSAndroid Build Coastguard Worker                 'or by\n'
10198*cda5da8dSAndroid Build Coastguard Worker                 'inheriting from an existing class that included such an '
10199*cda5da8dSAndroid Build Coastguard Worker                 'argument. In\n'
10200*cda5da8dSAndroid Build Coastguard Worker                 'the following example, both "MyClass" and "MySubclass" are '
10201*cda5da8dSAndroid Build Coastguard Worker                 'instances\n'
10202*cda5da8dSAndroid Build Coastguard Worker                 'of "Meta":\n'
10203*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10204*cda5da8dSAndroid Build Coastguard Worker                 '   class Meta(type):\n'
10205*cda5da8dSAndroid Build Coastguard Worker                 '       pass\n'
10206*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10207*cda5da8dSAndroid Build Coastguard Worker                 '   class MyClass(metaclass=Meta):\n'
10208*cda5da8dSAndroid Build Coastguard Worker                 '       pass\n'
10209*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10210*cda5da8dSAndroid Build Coastguard Worker                 '   class MySubclass(MyClass):\n'
10211*cda5da8dSAndroid Build Coastguard Worker                 '       pass\n'
10212*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10213*cda5da8dSAndroid Build Coastguard Worker                 'Any other keyword arguments that are specified in the class '
10214*cda5da8dSAndroid Build Coastguard Worker                 'definition\n'
10215*cda5da8dSAndroid Build Coastguard Worker                 'are passed through to all metaclass operations described '
10216*cda5da8dSAndroid Build Coastguard Worker                 'below.\n'
10217*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10218*cda5da8dSAndroid Build Coastguard Worker                 'When a class definition is executed, the following steps '
10219*cda5da8dSAndroid Build Coastguard Worker                 'occur:\n'
10220*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10221*cda5da8dSAndroid Build Coastguard Worker                 '* MRO entries are resolved;\n'
10222*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10223*cda5da8dSAndroid Build Coastguard Worker                 '* the appropriate metaclass is determined;\n'
10224*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10225*cda5da8dSAndroid Build Coastguard Worker                 '* the class namespace is prepared;\n'
10226*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10227*cda5da8dSAndroid Build Coastguard Worker                 '* the class body is executed;\n'
10228*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10229*cda5da8dSAndroid Build Coastguard Worker                 '* the class object is created.\n'
10230*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10231*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10232*cda5da8dSAndroid Build Coastguard Worker                 'Resolving MRO entries\n'
10233*cda5da8dSAndroid Build Coastguard Worker                 '---------------------\n'
10234*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10235*cda5da8dSAndroid Build Coastguard Worker                 'object.__mro_entries__(self, bases)\n'
10236*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10237*cda5da8dSAndroid Build Coastguard Worker                 '   If a base that appears in a class definition is not an '
10238*cda5da8dSAndroid Build Coastguard Worker                 'instance of\n'
10239*cda5da8dSAndroid Build Coastguard Worker                 '   "type", then an "__mro_entries__()" method is searched on '
10240*cda5da8dSAndroid Build Coastguard Worker                 'the base.\n'
10241*cda5da8dSAndroid Build Coastguard Worker                 '   If an "__mro_entries__()" method is found, the base is '
10242*cda5da8dSAndroid Build Coastguard Worker                 'substituted\n'
10243*cda5da8dSAndroid Build Coastguard Worker                 '   with the result of a call to "__mro_entries__()" when '
10244*cda5da8dSAndroid Build Coastguard Worker                 'creating the\n'
10245*cda5da8dSAndroid Build Coastguard Worker                 '   class. The method is called with the original bases tuple '
10246*cda5da8dSAndroid Build Coastguard Worker                 'passed to\n'
10247*cda5da8dSAndroid Build Coastguard Worker                 '   the *bases* parameter, and must return a tuple of classes '
10248*cda5da8dSAndroid Build Coastguard Worker                 'that will\n'
10249*cda5da8dSAndroid Build Coastguard Worker                 '   be used instead of the base. The returned tuple may be '
10250*cda5da8dSAndroid Build Coastguard Worker                 'empty: in\n'
10251*cda5da8dSAndroid Build Coastguard Worker                 '   these cases, the original base is ignored.\n'
10252*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10253*cda5da8dSAndroid Build Coastguard Worker                 'See also:\n'
10254*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10255*cda5da8dSAndroid Build Coastguard Worker                 '  "types.resolve_bases()"\n'
10256*cda5da8dSAndroid Build Coastguard Worker                 '     Dynamically resolve bases that are not instances of '
10257*cda5da8dSAndroid Build Coastguard Worker                 '"type".\n'
10258*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10259*cda5da8dSAndroid Build Coastguard Worker                 '  **PEP 560**\n'
10260*cda5da8dSAndroid Build Coastguard Worker                 '     Core support for typing module and generic types.\n'
10261*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10262*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10263*cda5da8dSAndroid Build Coastguard Worker                 'Determining the appropriate metaclass\n'
10264*cda5da8dSAndroid Build Coastguard Worker                 '-------------------------------------\n'
10265*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10266*cda5da8dSAndroid Build Coastguard Worker                 'The appropriate metaclass for a class definition is '
10267*cda5da8dSAndroid Build Coastguard Worker                 'determined as\n'
10268*cda5da8dSAndroid Build Coastguard Worker                 'follows:\n'
10269*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10270*cda5da8dSAndroid Build Coastguard Worker                 '* if no bases and no explicit metaclass are given, then '
10271*cda5da8dSAndroid Build Coastguard Worker                 '"type()" is\n'
10272*cda5da8dSAndroid Build Coastguard Worker                 '  used;\n'
10273*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10274*cda5da8dSAndroid Build Coastguard Worker                 '* if an explicit metaclass is given and it is *not* an '
10275*cda5da8dSAndroid Build Coastguard Worker                 'instance of\n'
10276*cda5da8dSAndroid Build Coastguard Worker                 '  "type()", then it is used directly as the metaclass;\n'
10277*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10278*cda5da8dSAndroid Build Coastguard Worker                 '* if an instance of "type()" is given as the explicit '
10279*cda5da8dSAndroid Build Coastguard Worker                 'metaclass, or\n'
10280*cda5da8dSAndroid Build Coastguard Worker                 '  bases are defined, then the most derived metaclass is '
10281*cda5da8dSAndroid Build Coastguard Worker                 'used.\n'
10282*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10283*cda5da8dSAndroid Build Coastguard Worker                 'The most derived metaclass is selected from the explicitly '
10284*cda5da8dSAndroid Build Coastguard Worker                 'specified\n'
10285*cda5da8dSAndroid Build Coastguard Worker                 'metaclass (if any) and the metaclasses (i.e. "type(cls)") of '
10286*cda5da8dSAndroid Build Coastguard Worker                 'all\n'
10287*cda5da8dSAndroid Build Coastguard Worker                 'specified base classes. The most derived metaclass is one '
10288*cda5da8dSAndroid Build Coastguard Worker                 'which is a\n'
10289*cda5da8dSAndroid Build Coastguard Worker                 'subtype of *all* of these candidate metaclasses. If none of '
10290*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
10291*cda5da8dSAndroid Build Coastguard Worker                 'candidate metaclasses meets that criterion, then the class '
10292*cda5da8dSAndroid Build Coastguard Worker                 'definition\n'
10293*cda5da8dSAndroid Build Coastguard Worker                 'will fail with "TypeError".\n'
10294*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10295*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10296*cda5da8dSAndroid Build Coastguard Worker                 'Preparing the class namespace\n'
10297*cda5da8dSAndroid Build Coastguard Worker                 '-----------------------------\n'
10298*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10299*cda5da8dSAndroid Build Coastguard Worker                 'Once the appropriate metaclass has been identified, then the '
10300*cda5da8dSAndroid Build Coastguard Worker                 'class\n'
10301*cda5da8dSAndroid Build Coastguard Worker                 'namespace is prepared. If the metaclass has a "__prepare__" '
10302*cda5da8dSAndroid Build Coastguard Worker                 'attribute,\n'
10303*cda5da8dSAndroid Build Coastguard Worker                 'it is called as "namespace = metaclass.__prepare__(name, '
10304*cda5da8dSAndroid Build Coastguard Worker                 'bases,\n'
10305*cda5da8dSAndroid Build Coastguard Worker                 '**kwds)" (where the additional keyword arguments, if any, '
10306*cda5da8dSAndroid Build Coastguard Worker                 'come from\n'
10307*cda5da8dSAndroid Build Coastguard Worker                 'the class definition). The "__prepare__" method should be '
10308*cda5da8dSAndroid Build Coastguard Worker                 'implemented\n'
10309*cda5da8dSAndroid Build Coastguard Worker                 'as a "classmethod". The namespace returned by "__prepare__" '
10310*cda5da8dSAndroid Build Coastguard Worker                 'is passed\n'
10311*cda5da8dSAndroid Build Coastguard Worker                 'in to "__new__", but when the final class object is created '
10312*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
10313*cda5da8dSAndroid Build Coastguard Worker                 'namespace is copied into a new "dict".\n'
10314*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10315*cda5da8dSAndroid Build Coastguard Worker                 'If the metaclass has no "__prepare__" attribute, then the '
10316*cda5da8dSAndroid Build Coastguard Worker                 'class\n'
10317*cda5da8dSAndroid Build Coastguard Worker                 'namespace is initialised as an empty ordered mapping.\n'
10318*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10319*cda5da8dSAndroid Build Coastguard Worker                 'See also:\n'
10320*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10321*cda5da8dSAndroid Build Coastguard Worker                 '  **PEP 3115** - Metaclasses in Python 3000\n'
10322*cda5da8dSAndroid Build Coastguard Worker                 '     Introduced the "__prepare__" namespace hook\n'
10323*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10324*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10325*cda5da8dSAndroid Build Coastguard Worker                 'Executing the class body\n'
10326*cda5da8dSAndroid Build Coastguard Worker                 '------------------------\n'
10327*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10328*cda5da8dSAndroid Build Coastguard Worker                 'The class body is executed (approximately) as "exec(body, '
10329*cda5da8dSAndroid Build Coastguard Worker                 'globals(),\n'
10330*cda5da8dSAndroid Build Coastguard Worker                 'namespace)". The key difference from a normal call to '
10331*cda5da8dSAndroid Build Coastguard Worker                 '"exec()" is that\n'
10332*cda5da8dSAndroid Build Coastguard Worker                 'lexical scoping allows the class body (including any '
10333*cda5da8dSAndroid Build Coastguard Worker                 'methods) to\n'
10334*cda5da8dSAndroid Build Coastguard Worker                 'reference names from the current and outer scopes when the '
10335*cda5da8dSAndroid Build Coastguard Worker                 'class\n'
10336*cda5da8dSAndroid Build Coastguard Worker                 'definition occurs inside a function.\n'
10337*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10338*cda5da8dSAndroid Build Coastguard Worker                 'However, even when the class definition occurs inside the '
10339*cda5da8dSAndroid Build Coastguard Worker                 'function,\n'
10340*cda5da8dSAndroid Build Coastguard Worker                 'methods defined inside the class still cannot see names '
10341*cda5da8dSAndroid Build Coastguard Worker                 'defined at the\n'
10342*cda5da8dSAndroid Build Coastguard Worker                 'class scope. Class variables must be accessed through the '
10343*cda5da8dSAndroid Build Coastguard Worker                 'first\n'
10344*cda5da8dSAndroid Build Coastguard Worker                 'parameter of instance or class methods, or through the '
10345*cda5da8dSAndroid Build Coastguard Worker                 'implicit\n'
10346*cda5da8dSAndroid Build Coastguard Worker                 'lexically scoped "__class__" reference described in the next '
10347*cda5da8dSAndroid Build Coastguard Worker                 'section.\n'
10348*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10349*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10350*cda5da8dSAndroid Build Coastguard Worker                 'Creating the class object\n'
10351*cda5da8dSAndroid Build Coastguard Worker                 '-------------------------\n'
10352*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10353*cda5da8dSAndroid Build Coastguard Worker                 'Once the class namespace has been populated by executing the '
10354*cda5da8dSAndroid Build Coastguard Worker                 'class\n'
10355*cda5da8dSAndroid Build Coastguard Worker                 'body, the class object is created by calling '
10356*cda5da8dSAndroid Build Coastguard Worker                 '"metaclass(name, bases,\n'
10357*cda5da8dSAndroid Build Coastguard Worker                 'namespace, **kwds)" (the additional keywords passed here are '
10358*cda5da8dSAndroid Build Coastguard Worker                 'the same\n'
10359*cda5da8dSAndroid Build Coastguard Worker                 'as those passed to "__prepare__").\n'
10360*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10361*cda5da8dSAndroid Build Coastguard Worker                 'This class object is the one that will be referenced by the '
10362*cda5da8dSAndroid Build Coastguard Worker                 'zero-\n'
10363*cda5da8dSAndroid Build Coastguard Worker                 'argument form of "super()". "__class__" is an implicit '
10364*cda5da8dSAndroid Build Coastguard Worker                 'closure\n'
10365*cda5da8dSAndroid Build Coastguard Worker                 'reference created by the compiler if any methods in a class '
10366*cda5da8dSAndroid Build Coastguard Worker                 'body refer\n'
10367*cda5da8dSAndroid Build Coastguard Worker                 'to either "__class__" or "super". This allows the zero '
10368*cda5da8dSAndroid Build Coastguard Worker                 'argument form\n'
10369*cda5da8dSAndroid Build Coastguard Worker                 'of "super()" to correctly identify the class being defined '
10370*cda5da8dSAndroid Build Coastguard Worker                 'based on\n'
10371*cda5da8dSAndroid Build Coastguard Worker                 'lexical scoping, while the class or instance that was used '
10372*cda5da8dSAndroid Build Coastguard Worker                 'to make the\n'
10373*cda5da8dSAndroid Build Coastguard Worker                 'current call is identified based on the first argument '
10374*cda5da8dSAndroid Build Coastguard Worker                 'passed to the\n'
10375*cda5da8dSAndroid Build Coastguard Worker                 'method.\n'
10376*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10377*cda5da8dSAndroid Build Coastguard Worker                 '**CPython implementation detail:** In CPython 3.6 and later, '
10378*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
10379*cda5da8dSAndroid Build Coastguard Worker                 '"__class__" cell is passed to the metaclass as a '
10380*cda5da8dSAndroid Build Coastguard Worker                 '"__classcell__" entry\n'
10381*cda5da8dSAndroid Build Coastguard Worker                 'in the class namespace. If present, this must be propagated '
10382*cda5da8dSAndroid Build Coastguard Worker                 'up to the\n'
10383*cda5da8dSAndroid Build Coastguard Worker                 '"type.__new__" call in order for the class to be '
10384*cda5da8dSAndroid Build Coastguard Worker                 'initialised\n'
10385*cda5da8dSAndroid Build Coastguard Worker                 'correctly. Failing to do so will result in a "RuntimeError" '
10386*cda5da8dSAndroid Build Coastguard Worker                 'in Python\n'
10387*cda5da8dSAndroid Build Coastguard Worker                 '3.8.\n'
10388*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10389*cda5da8dSAndroid Build Coastguard Worker                 'When using the default metaclass "type", or any metaclass '
10390*cda5da8dSAndroid Build Coastguard Worker                 'that\n'
10391*cda5da8dSAndroid Build Coastguard Worker                 'ultimately calls "type.__new__", the following additional\n'
10392*cda5da8dSAndroid Build Coastguard Worker                 'customization steps are invoked after creating the class '
10393*cda5da8dSAndroid Build Coastguard Worker                 'object:\n'
10394*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10395*cda5da8dSAndroid Build Coastguard Worker                 '1. The "type.__new__" method collects all of the attributes '
10396*cda5da8dSAndroid Build Coastguard Worker                 'in the\n'
10397*cda5da8dSAndroid Build Coastguard Worker                 '   class namespace that define a "__set_name__()" method;\n'
10398*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10399*cda5da8dSAndroid Build Coastguard Worker                 '2. Those "__set_name__" methods are called with the class '
10400*cda5da8dSAndroid Build Coastguard Worker                 'being\n'
10401*cda5da8dSAndroid Build Coastguard Worker                 '   defined and the assigned name of that particular '
10402*cda5da8dSAndroid Build Coastguard Worker                 'attribute;\n'
10403*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10404*cda5da8dSAndroid Build Coastguard Worker                 '3. The "__init_subclass__()" hook is called on the immediate '
10405*cda5da8dSAndroid Build Coastguard Worker                 'parent of\n'
10406*cda5da8dSAndroid Build Coastguard Worker                 '   the new class in its method resolution order.\n'
10407*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10408*cda5da8dSAndroid Build Coastguard Worker                 'After the class object is created, it is passed to the '
10409*cda5da8dSAndroid Build Coastguard Worker                 'class\n'
10410*cda5da8dSAndroid Build Coastguard Worker                 'decorators included in the class definition (if any) and the '
10411*cda5da8dSAndroid Build Coastguard Worker                 'resulting\n'
10412*cda5da8dSAndroid Build Coastguard Worker                 'object is bound in the local namespace as the defined '
10413*cda5da8dSAndroid Build Coastguard Worker                 'class.\n'
10414*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10415*cda5da8dSAndroid Build Coastguard Worker                 'When a new class is created by "type.__new__", the object '
10416*cda5da8dSAndroid Build Coastguard Worker                 'provided as\n'
10417*cda5da8dSAndroid Build Coastguard Worker                 'the namespace parameter is copied to a new ordered mapping '
10418*cda5da8dSAndroid Build Coastguard Worker                 'and the\n'
10419*cda5da8dSAndroid Build Coastguard Worker                 'original object is discarded. The new copy is wrapped in a '
10420*cda5da8dSAndroid Build Coastguard Worker                 'read-only\n'
10421*cda5da8dSAndroid Build Coastguard Worker                 'proxy, which becomes the "__dict__" attribute of the class '
10422*cda5da8dSAndroid Build Coastguard Worker                 'object.\n'
10423*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10424*cda5da8dSAndroid Build Coastguard Worker                 'See also:\n'
10425*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10426*cda5da8dSAndroid Build Coastguard Worker                 '  **PEP 3135** - New super\n'
10427*cda5da8dSAndroid Build Coastguard Worker                 '     Describes the implicit "__class__" closure reference\n'
10428*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10429*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10430*cda5da8dSAndroid Build Coastguard Worker                 'Uses for metaclasses\n'
10431*cda5da8dSAndroid Build Coastguard Worker                 '--------------------\n'
10432*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10433*cda5da8dSAndroid Build Coastguard Worker                 'The potential uses for metaclasses are boundless. Some ideas '
10434*cda5da8dSAndroid Build Coastguard Worker                 'that have\n'
10435*cda5da8dSAndroid Build Coastguard Worker                 'been explored include enum, logging, interface checking, '
10436*cda5da8dSAndroid Build Coastguard Worker                 'automatic\n'
10437*cda5da8dSAndroid Build Coastguard Worker                 'delegation, automatic property creation, proxies, '
10438*cda5da8dSAndroid Build Coastguard Worker                 'frameworks, and\n'
10439*cda5da8dSAndroid Build Coastguard Worker                 'automatic resource locking/synchronization.\n'
10440*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10441*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10442*cda5da8dSAndroid Build Coastguard Worker                 'Customizing instance and subclass checks\n'
10443*cda5da8dSAndroid Build Coastguard Worker                 '========================================\n'
10444*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10445*cda5da8dSAndroid Build Coastguard Worker                 'The following methods are used to override the default '
10446*cda5da8dSAndroid Build Coastguard Worker                 'behavior of the\n'
10447*cda5da8dSAndroid Build Coastguard Worker                 '"isinstance()" and "issubclass()" built-in functions.\n'
10448*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10449*cda5da8dSAndroid Build Coastguard Worker                 'In particular, the metaclass "abc.ABCMeta" implements these '
10450*cda5da8dSAndroid Build Coastguard Worker                 'methods in\n'
10451*cda5da8dSAndroid Build Coastguard Worker                 'order to allow the addition of Abstract Base Classes (ABCs) '
10452*cda5da8dSAndroid Build Coastguard Worker                 'as\n'
10453*cda5da8dSAndroid Build Coastguard Worker                 '“virtual base classes” to any class or type (including '
10454*cda5da8dSAndroid Build Coastguard Worker                 'built-in\n'
10455*cda5da8dSAndroid Build Coastguard Worker                 'types), including other ABCs.\n'
10456*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10457*cda5da8dSAndroid Build Coastguard Worker                 'class.__instancecheck__(self, instance)\n'
10458*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10459*cda5da8dSAndroid Build Coastguard Worker                 '   Return true if *instance* should be considered a (direct '
10460*cda5da8dSAndroid Build Coastguard Worker                 'or\n'
10461*cda5da8dSAndroid Build Coastguard Worker                 '   indirect) instance of *class*. If defined, called to '
10462*cda5da8dSAndroid Build Coastguard Worker                 'implement\n'
10463*cda5da8dSAndroid Build Coastguard Worker                 '   "isinstance(instance, class)".\n'
10464*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10465*cda5da8dSAndroid Build Coastguard Worker                 'class.__subclasscheck__(self, subclass)\n'
10466*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10467*cda5da8dSAndroid Build Coastguard Worker                 '   Return true if *subclass* should be considered a (direct '
10468*cda5da8dSAndroid Build Coastguard Worker                 'or\n'
10469*cda5da8dSAndroid Build Coastguard Worker                 '   indirect) subclass of *class*.  If defined, called to '
10470*cda5da8dSAndroid Build Coastguard Worker                 'implement\n'
10471*cda5da8dSAndroid Build Coastguard Worker                 '   "issubclass(subclass, class)".\n'
10472*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10473*cda5da8dSAndroid Build Coastguard Worker                 'Note that these methods are looked up on the type '
10474*cda5da8dSAndroid Build Coastguard Worker                 '(metaclass) of a\n'
10475*cda5da8dSAndroid Build Coastguard Worker                 'class.  They cannot be defined as class methods in the '
10476*cda5da8dSAndroid Build Coastguard Worker                 'actual class.\n'
10477*cda5da8dSAndroid Build Coastguard Worker                 'This is consistent with the lookup of special methods that '
10478*cda5da8dSAndroid Build Coastguard Worker                 'are called\n'
10479*cda5da8dSAndroid Build Coastguard Worker                 'on instances, only in this case the instance is itself a '
10480*cda5da8dSAndroid Build Coastguard Worker                 'class.\n'
10481*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10482*cda5da8dSAndroid Build Coastguard Worker                 'See also:\n'
10483*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10484*cda5da8dSAndroid Build Coastguard Worker                 '  **PEP 3119** - Introducing Abstract Base Classes\n'
10485*cda5da8dSAndroid Build Coastguard Worker                 '     Includes the specification for customizing '
10486*cda5da8dSAndroid Build Coastguard Worker                 '"isinstance()" and\n'
10487*cda5da8dSAndroid Build Coastguard Worker                 '     "issubclass()" behavior through "__instancecheck__()" '
10488*cda5da8dSAndroid Build Coastguard Worker                 'and\n'
10489*cda5da8dSAndroid Build Coastguard Worker                 '     "__subclasscheck__()", with motivation for this '
10490*cda5da8dSAndroid Build Coastguard Worker                 'functionality in\n'
10491*cda5da8dSAndroid Build Coastguard Worker                 '     the context of adding Abstract Base Classes (see the '
10492*cda5da8dSAndroid Build Coastguard Worker                 '"abc"\n'
10493*cda5da8dSAndroid Build Coastguard Worker                 '     module) to the language.\n'
10494*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10495*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10496*cda5da8dSAndroid Build Coastguard Worker                 'Emulating generic types\n'
10497*cda5da8dSAndroid Build Coastguard Worker                 '=======================\n'
10498*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10499*cda5da8dSAndroid Build Coastguard Worker                 'When using *type annotations*, it is often useful to '
10500*cda5da8dSAndroid Build Coastguard Worker                 '*parameterize* a\n'
10501*cda5da8dSAndroid Build Coastguard Worker                 '*generic type* using Python’s square-brackets notation. For '
10502*cda5da8dSAndroid Build Coastguard Worker                 'example,\n'
10503*cda5da8dSAndroid Build Coastguard Worker                 'the annotation "list[int]" might be used to signify a "list" '
10504*cda5da8dSAndroid Build Coastguard Worker                 'in which\n'
10505*cda5da8dSAndroid Build Coastguard Worker                 'all the elements are of type "int".\n'
10506*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10507*cda5da8dSAndroid Build Coastguard Worker                 'See also:\n'
10508*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10509*cda5da8dSAndroid Build Coastguard Worker                 '  **PEP 484** - Type Hints\n'
10510*cda5da8dSAndroid Build Coastguard Worker                 '     Introducing Python’s framework for type annotations\n'
10511*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10512*cda5da8dSAndroid Build Coastguard Worker                 '  Generic Alias Types\n'
10513*cda5da8dSAndroid Build Coastguard Worker                 '     Documentation for objects representing parameterized '
10514*cda5da8dSAndroid Build Coastguard Worker                 'generic\n'
10515*cda5da8dSAndroid Build Coastguard Worker                 '     classes\n'
10516*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10517*cda5da8dSAndroid Build Coastguard Worker                 '  Generics, user-defined generics and "typing.Generic"\n'
10518*cda5da8dSAndroid Build Coastguard Worker                 '     Documentation on how to implement generic classes that '
10519*cda5da8dSAndroid Build Coastguard Worker                 'can be\n'
10520*cda5da8dSAndroid Build Coastguard Worker                 '     parameterized at runtime and understood by static '
10521*cda5da8dSAndroid Build Coastguard Worker                 'type-checkers.\n'
10522*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10523*cda5da8dSAndroid Build Coastguard Worker                 'A class can *generally* only be parameterized if it defines '
10524*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
10525*cda5da8dSAndroid Build Coastguard Worker                 'special class method "__class_getitem__()".\n'
10526*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10527*cda5da8dSAndroid Build Coastguard Worker                 'classmethod object.__class_getitem__(cls, key)\n'
10528*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10529*cda5da8dSAndroid Build Coastguard Worker                 '   Return an object representing the specialization of a '
10530*cda5da8dSAndroid Build Coastguard Worker                 'generic class\n'
10531*cda5da8dSAndroid Build Coastguard Worker                 '   by type arguments found in *key*.\n'
10532*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10533*cda5da8dSAndroid Build Coastguard Worker                 '   When defined on a class, "__class_getitem__()" is '
10534*cda5da8dSAndroid Build Coastguard Worker                 'automatically a\n'
10535*cda5da8dSAndroid Build Coastguard Worker                 '   class method. As such, there is no need for it to be '
10536*cda5da8dSAndroid Build Coastguard Worker                 'decorated with\n'
10537*cda5da8dSAndroid Build Coastguard Worker                 '   "@classmethod" when it is defined.\n'
10538*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10539*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10540*cda5da8dSAndroid Build Coastguard Worker                 'The purpose of *__class_getitem__*\n'
10541*cda5da8dSAndroid Build Coastguard Worker                 '----------------------------------\n'
10542*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10543*cda5da8dSAndroid Build Coastguard Worker                 'The purpose of "__class_getitem__()" is to allow runtime\n'
10544*cda5da8dSAndroid Build Coastguard Worker                 'parameterization of standard-library generic classes in '
10545*cda5da8dSAndroid Build Coastguard Worker                 'order to more\n'
10546*cda5da8dSAndroid Build Coastguard Worker                 'easily apply *type hints* to these classes.\n'
10547*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10548*cda5da8dSAndroid Build Coastguard Worker                 'To implement custom generic classes that can be '
10549*cda5da8dSAndroid Build Coastguard Worker                 'parameterized at\n'
10550*cda5da8dSAndroid Build Coastguard Worker                 'runtime and understood by static type-checkers, users should '
10551*cda5da8dSAndroid Build Coastguard Worker                 'either\n'
10552*cda5da8dSAndroid Build Coastguard Worker                 'inherit from a standard library class that already '
10553*cda5da8dSAndroid Build Coastguard Worker                 'implements\n'
10554*cda5da8dSAndroid Build Coastguard Worker                 '"__class_getitem__()", or inherit from "typing.Generic", '
10555*cda5da8dSAndroid Build Coastguard Worker                 'which has its\n'
10556*cda5da8dSAndroid Build Coastguard Worker                 'own implementation of "__class_getitem__()".\n'
10557*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10558*cda5da8dSAndroid Build Coastguard Worker                 'Custom implementations of "__class_getitem__()" on classes '
10559*cda5da8dSAndroid Build Coastguard Worker                 'defined\n'
10560*cda5da8dSAndroid Build Coastguard Worker                 'outside of the standard library may not be understood by '
10561*cda5da8dSAndroid Build Coastguard Worker                 'third-party\n'
10562*cda5da8dSAndroid Build Coastguard Worker                 'type-checkers such as mypy. Using "__class_getitem__()" on '
10563*cda5da8dSAndroid Build Coastguard Worker                 'any class\n'
10564*cda5da8dSAndroid Build Coastguard Worker                 'for purposes other than type hinting is discouraged.\n'
10565*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10566*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10567*cda5da8dSAndroid Build Coastguard Worker                 '*__class_getitem__* versus *__getitem__*\n'
10568*cda5da8dSAndroid Build Coastguard Worker                 '----------------------------------------\n'
10569*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10570*cda5da8dSAndroid Build Coastguard Worker                 'Usually, the subscription of an object using square brackets '
10571*cda5da8dSAndroid Build Coastguard Worker                 'will call\n'
10572*cda5da8dSAndroid Build Coastguard Worker                 'the "__getitem__()" instance method defined on the object’s '
10573*cda5da8dSAndroid Build Coastguard Worker                 'class.\n'
10574*cda5da8dSAndroid Build Coastguard Worker                 'However, if the object being subscribed is itself a class, '
10575*cda5da8dSAndroid Build Coastguard Worker                 'the class\n'
10576*cda5da8dSAndroid Build Coastguard Worker                 'method "__class_getitem__()" may be called instead.\n'
10577*cda5da8dSAndroid Build Coastguard Worker                 '"__class_getitem__()" should return a GenericAlias object if '
10578*cda5da8dSAndroid Build Coastguard Worker                 'it is\n'
10579*cda5da8dSAndroid Build Coastguard Worker                 'properly defined.\n'
10580*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10581*cda5da8dSAndroid Build Coastguard Worker                 'Presented with the *expression* "obj[x]", the Python '
10582*cda5da8dSAndroid Build Coastguard Worker                 'interpreter\n'
10583*cda5da8dSAndroid Build Coastguard Worker                 'follows something like the following process to decide '
10584*cda5da8dSAndroid Build Coastguard Worker                 'whether\n'
10585*cda5da8dSAndroid Build Coastguard Worker                 '"__getitem__()" or "__class_getitem__()" should be called:\n'
10586*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10587*cda5da8dSAndroid Build Coastguard Worker                 '   from inspect import isclass\n'
10588*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10589*cda5da8dSAndroid Build Coastguard Worker                 '   def subscribe(obj, x):\n'
10590*cda5da8dSAndroid Build Coastguard Worker                 '       """Return the result of the expression \'obj[x]\'"""\n'
10591*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10592*cda5da8dSAndroid Build Coastguard Worker                 '       class_of_obj = type(obj)\n'
10593*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10594*cda5da8dSAndroid Build Coastguard Worker                 '       # If the class of obj defines __getitem__,\n'
10595*cda5da8dSAndroid Build Coastguard Worker                 '       # call class_of_obj.__getitem__(obj, x)\n'
10596*cda5da8dSAndroid Build Coastguard Worker                 "       if hasattr(class_of_obj, '__getitem__'):\n"
10597*cda5da8dSAndroid Build Coastguard Worker                 '           return class_of_obj.__getitem__(obj, x)\n'
10598*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10599*cda5da8dSAndroid Build Coastguard Worker                 '       # Else, if obj is a class and defines '
10600*cda5da8dSAndroid Build Coastguard Worker                 '__class_getitem__,\n'
10601*cda5da8dSAndroid Build Coastguard Worker                 '       # call obj.__class_getitem__(x)\n'
10602*cda5da8dSAndroid Build Coastguard Worker                 '       elif isclass(obj) and hasattr(obj, '
10603*cda5da8dSAndroid Build Coastguard Worker                 "'__class_getitem__'):\n"
10604*cda5da8dSAndroid Build Coastguard Worker                 '           return obj.__class_getitem__(x)\n'
10605*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10606*cda5da8dSAndroid Build Coastguard Worker                 '       # Else, raise an exception\n'
10607*cda5da8dSAndroid Build Coastguard Worker                 '       else:\n'
10608*cda5da8dSAndroid Build Coastguard Worker                 '           raise TypeError(\n'
10609*cda5da8dSAndroid Build Coastguard Worker                 '               f"\'{class_of_obj.__name__}\' object is not '
10610*cda5da8dSAndroid Build Coastguard Worker                 'subscriptable"\n'
10611*cda5da8dSAndroid Build Coastguard Worker                 '           )\n'
10612*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10613*cda5da8dSAndroid Build Coastguard Worker                 'In Python, all classes are themselves instances of other '
10614*cda5da8dSAndroid Build Coastguard Worker                 'classes. The\n'
10615*cda5da8dSAndroid Build Coastguard Worker                 'class of a class is known as that class’s *metaclass*, and '
10616*cda5da8dSAndroid Build Coastguard Worker                 'most\n'
10617*cda5da8dSAndroid Build Coastguard Worker                 'classes have the "type" class as their metaclass. "type" '
10618*cda5da8dSAndroid Build Coastguard Worker                 'does not\n'
10619*cda5da8dSAndroid Build Coastguard Worker                 'define "__getitem__()", meaning that expressions such as '
10620*cda5da8dSAndroid Build Coastguard Worker                 '"list[int]",\n'
10621*cda5da8dSAndroid Build Coastguard Worker                 '"dict[str, float]" and "tuple[str, bytes]" all result in\n'
10622*cda5da8dSAndroid Build Coastguard Worker                 '"__class_getitem__()" being called:\n'
10623*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10624*cda5da8dSAndroid Build Coastguard Worker                 '   >>> # list has class "type" as its metaclass, like most '
10625*cda5da8dSAndroid Build Coastguard Worker                 'classes:\n'
10626*cda5da8dSAndroid Build Coastguard Worker                 '   >>> type(list)\n'
10627*cda5da8dSAndroid Build Coastguard Worker                 "   <class 'type'>\n"
10628*cda5da8dSAndroid Build Coastguard Worker                 '   >>> type(dict) == type(list) == type(tuple) == type(str) '
10629*cda5da8dSAndroid Build Coastguard Worker                 '== type(bytes)\n'
10630*cda5da8dSAndroid Build Coastguard Worker                 '   True\n'
10631*cda5da8dSAndroid Build Coastguard Worker                 '   >>> # "list[int]" calls "list.__class_getitem__(int)"\n'
10632*cda5da8dSAndroid Build Coastguard Worker                 '   >>> list[int]\n'
10633*cda5da8dSAndroid Build Coastguard Worker                 '   list[int]\n'
10634*cda5da8dSAndroid Build Coastguard Worker                 '   >>> # list.__class_getitem__ returns a GenericAlias '
10635*cda5da8dSAndroid Build Coastguard Worker                 'object:\n'
10636*cda5da8dSAndroid Build Coastguard Worker                 '   >>> type(list[int])\n'
10637*cda5da8dSAndroid Build Coastguard Worker                 "   <class 'types.GenericAlias'>\n"
10638*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10639*cda5da8dSAndroid Build Coastguard Worker                 'However, if a class has a custom metaclass that defines\n'
10640*cda5da8dSAndroid Build Coastguard Worker                 '"__getitem__()", subscribing the class may result in '
10641*cda5da8dSAndroid Build Coastguard Worker                 'different\n'
10642*cda5da8dSAndroid Build Coastguard Worker                 'behaviour. An example of this can be found in the "enum" '
10643*cda5da8dSAndroid Build Coastguard Worker                 'module:\n'
10644*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10645*cda5da8dSAndroid Build Coastguard Worker                 '   >>> from enum import Enum\n'
10646*cda5da8dSAndroid Build Coastguard Worker                 '   >>> class Menu(Enum):\n'
10647*cda5da8dSAndroid Build Coastguard Worker                 '   ...     """A breakfast menu"""\n'
10648*cda5da8dSAndroid Build Coastguard Worker                 "   ...     SPAM = 'spam'\n"
10649*cda5da8dSAndroid Build Coastguard Worker                 "   ...     BACON = 'bacon'\n"
10650*cda5da8dSAndroid Build Coastguard Worker                 '   ...\n'
10651*cda5da8dSAndroid Build Coastguard Worker                 '   >>> # Enum classes have a custom metaclass:\n'
10652*cda5da8dSAndroid Build Coastguard Worker                 '   >>> type(Menu)\n'
10653*cda5da8dSAndroid Build Coastguard Worker                 "   <class 'enum.EnumMeta'>\n"
10654*cda5da8dSAndroid Build Coastguard Worker                 '   >>> # EnumMeta defines __getitem__,\n'
10655*cda5da8dSAndroid Build Coastguard Worker                 '   >>> # so __class_getitem__ is not called,\n'
10656*cda5da8dSAndroid Build Coastguard Worker                 '   >>> # and the result is not a GenericAlias object:\n'
10657*cda5da8dSAndroid Build Coastguard Worker                 "   >>> Menu['SPAM']\n"
10658*cda5da8dSAndroid Build Coastguard Worker                 "   <Menu.SPAM: 'spam'>\n"
10659*cda5da8dSAndroid Build Coastguard Worker                 "   >>> type(Menu['SPAM'])\n"
10660*cda5da8dSAndroid Build Coastguard Worker                 "   <enum 'Menu'>\n"
10661*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10662*cda5da8dSAndroid Build Coastguard Worker                 'See also:\n'
10663*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10664*cda5da8dSAndroid Build Coastguard Worker                 '  **PEP 560** - Core Support for typing module and generic '
10665*cda5da8dSAndroid Build Coastguard Worker                 'types\n'
10666*cda5da8dSAndroid Build Coastguard Worker                 '     Introducing "__class_getitem__()", and outlining when '
10667*cda5da8dSAndroid Build Coastguard Worker                 'a\n'
10668*cda5da8dSAndroid Build Coastguard Worker                 '     subscription results in "__class_getitem__()" being '
10669*cda5da8dSAndroid Build Coastguard Worker                 'called\n'
10670*cda5da8dSAndroid Build Coastguard Worker                 '     instead of "__getitem__()"\n'
10671*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10672*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10673*cda5da8dSAndroid Build Coastguard Worker                 'Emulating callable objects\n'
10674*cda5da8dSAndroid Build Coastguard Worker                 '==========================\n'
10675*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10676*cda5da8dSAndroid Build Coastguard Worker                 'object.__call__(self[, args...])\n'
10677*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10678*cda5da8dSAndroid Build Coastguard Worker                 '   Called when the instance is “called” as a function; if '
10679*cda5da8dSAndroid Build Coastguard Worker                 'this method\n'
10680*cda5da8dSAndroid Build Coastguard Worker                 '   is defined, "x(arg1, arg2, ...)" roughly translates to\n'
10681*cda5da8dSAndroid Build Coastguard Worker                 '   "type(x).__call__(x, arg1, ...)".\n'
10682*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10683*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10684*cda5da8dSAndroid Build Coastguard Worker                 'Emulating container types\n'
10685*cda5da8dSAndroid Build Coastguard Worker                 '=========================\n'
10686*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10687*cda5da8dSAndroid Build Coastguard Worker                 'The following methods can be defined to implement container '
10688*cda5da8dSAndroid Build Coastguard Worker                 'objects.\n'
10689*cda5da8dSAndroid Build Coastguard Worker                 'Containers usually are *sequences* (such as "lists" or '
10690*cda5da8dSAndroid Build Coastguard Worker                 '"tuples") or\n'
10691*cda5da8dSAndroid Build Coastguard Worker                 '*mappings* (like "dictionaries"), but can represent other '
10692*cda5da8dSAndroid Build Coastguard Worker                 'containers\n'
10693*cda5da8dSAndroid Build Coastguard Worker                 'as well.  The first set of methods is used either to emulate '
10694*cda5da8dSAndroid Build Coastguard Worker                 'a\n'
10695*cda5da8dSAndroid Build Coastguard Worker                 'sequence or to emulate a mapping; the difference is that for '
10696*cda5da8dSAndroid Build Coastguard Worker                 'a\n'
10697*cda5da8dSAndroid Build Coastguard Worker                 'sequence, the allowable keys should be the integers *k* for '
10698*cda5da8dSAndroid Build Coastguard Worker                 'which "0\n'
10699*cda5da8dSAndroid Build Coastguard Worker                 '<= k < N" where *N* is the length of the sequence, or '
10700*cda5da8dSAndroid Build Coastguard Worker                 '"slice" objects,\n'
10701*cda5da8dSAndroid Build Coastguard Worker                 'which define a range of items.  It is also recommended that '
10702*cda5da8dSAndroid Build Coastguard Worker                 'mappings\n'
10703*cda5da8dSAndroid Build Coastguard Worker                 'provide the methods "keys()", "values()", "items()", '
10704*cda5da8dSAndroid Build Coastguard Worker                 '"get()",\n'
10705*cda5da8dSAndroid Build Coastguard Worker                 '"clear()", "setdefault()", "pop()", "popitem()", "copy()", '
10706*cda5da8dSAndroid Build Coastguard Worker                 'and\n'
10707*cda5da8dSAndroid Build Coastguard Worker                 '"update()" behaving similar to those for Python’s standard\n'
10708*cda5da8dSAndroid Build Coastguard Worker                 '"dictionary" objects.  The "collections.abc" module provides '
10709*cda5da8dSAndroid Build Coastguard Worker                 'a\n'
10710*cda5da8dSAndroid Build Coastguard Worker                 '"MutableMapping" *abstract base class* to help create those '
10711*cda5da8dSAndroid Build Coastguard Worker                 'methods\n'
10712*cda5da8dSAndroid Build Coastguard Worker                 'from a base set of "__getitem__()", "__setitem__()", '
10713*cda5da8dSAndroid Build Coastguard Worker                 '"__delitem__()",\n'
10714*cda5da8dSAndroid Build Coastguard Worker                 'and "keys()". Mutable sequences should provide methods '
10715*cda5da8dSAndroid Build Coastguard Worker                 '"append()",\n'
10716*cda5da8dSAndroid Build Coastguard Worker                 '"count()", "index()", "extend()", "insert()", "pop()", '
10717*cda5da8dSAndroid Build Coastguard Worker                 '"remove()",\n'
10718*cda5da8dSAndroid Build Coastguard Worker                 '"reverse()" and "sort()", like Python standard "list" '
10719*cda5da8dSAndroid Build Coastguard Worker                 'objects.\n'
10720*cda5da8dSAndroid Build Coastguard Worker                 'Finally, sequence types should implement addition (meaning\n'
10721*cda5da8dSAndroid Build Coastguard Worker                 'concatenation) and multiplication (meaning repetition) by '
10722*cda5da8dSAndroid Build Coastguard Worker                 'defining the\n'
10723*cda5da8dSAndroid Build Coastguard Worker                 'methods "__add__()", "__radd__()", "__iadd__()", '
10724*cda5da8dSAndroid Build Coastguard Worker                 '"__mul__()",\n'
10725*cda5da8dSAndroid Build Coastguard Worker                 '"__rmul__()" and "__imul__()" described below; they should '
10726*cda5da8dSAndroid Build Coastguard Worker                 'not define\n'
10727*cda5da8dSAndroid Build Coastguard Worker                 'other numerical operators.  It is recommended that both '
10728*cda5da8dSAndroid Build Coastguard Worker                 'mappings and\n'
10729*cda5da8dSAndroid Build Coastguard Worker                 'sequences implement the "__contains__()" method to allow '
10730*cda5da8dSAndroid Build Coastguard Worker                 'efficient use\n'
10731*cda5da8dSAndroid Build Coastguard Worker                 'of the "in" operator; for mappings, "in" should search the '
10732*cda5da8dSAndroid Build Coastguard Worker                 'mapping’s\n'
10733*cda5da8dSAndroid Build Coastguard Worker                 'keys; for sequences, it should search through the values.  '
10734*cda5da8dSAndroid Build Coastguard Worker                 'It is\n'
10735*cda5da8dSAndroid Build Coastguard Worker                 'further recommended that both mappings and sequences '
10736*cda5da8dSAndroid Build Coastguard Worker                 'implement the\n'
10737*cda5da8dSAndroid Build Coastguard Worker                 '"__iter__()" method to allow efficient iteration through '
10738*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
10739*cda5da8dSAndroid Build Coastguard Worker                 'container; for mappings, "__iter__()" should iterate through '
10740*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
10741*cda5da8dSAndroid Build Coastguard Worker                 'object’s keys; for sequences, it should iterate through the '
10742*cda5da8dSAndroid Build Coastguard Worker                 'values.\n'
10743*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10744*cda5da8dSAndroid Build Coastguard Worker                 'object.__len__(self)\n'
10745*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10746*cda5da8dSAndroid Build Coastguard Worker                 '   Called to implement the built-in function "len()".  '
10747*cda5da8dSAndroid Build Coastguard Worker                 'Should return\n'
10748*cda5da8dSAndroid Build Coastguard Worker                 '   the length of the object, an integer ">=" 0.  Also, an '
10749*cda5da8dSAndroid Build Coastguard Worker                 'object that\n'
10750*cda5da8dSAndroid Build Coastguard Worker                 '   doesn’t define a "__bool__()" method and whose '
10751*cda5da8dSAndroid Build Coastguard Worker                 '"__len__()" method\n'
10752*cda5da8dSAndroid Build Coastguard Worker                 '   returns zero is considered to be false in a Boolean '
10753*cda5da8dSAndroid Build Coastguard Worker                 'context.\n'
10754*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10755*cda5da8dSAndroid Build Coastguard Worker                 '   **CPython implementation detail:** In CPython, the length '
10756*cda5da8dSAndroid Build Coastguard Worker                 'is\n'
10757*cda5da8dSAndroid Build Coastguard Worker                 '   required to be at most "sys.maxsize". If the length is '
10758*cda5da8dSAndroid Build Coastguard Worker                 'larger than\n'
10759*cda5da8dSAndroid Build Coastguard Worker                 '   "sys.maxsize" some features (such as "len()") may raise\n'
10760*cda5da8dSAndroid Build Coastguard Worker                 '   "OverflowError".  To prevent raising "OverflowError" by '
10761*cda5da8dSAndroid Build Coastguard Worker                 'truth value\n'
10762*cda5da8dSAndroid Build Coastguard Worker                 '   testing, an object must define a "__bool__()" method.\n'
10763*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10764*cda5da8dSAndroid Build Coastguard Worker                 'object.__length_hint__(self)\n'
10765*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10766*cda5da8dSAndroid Build Coastguard Worker                 '   Called to implement "operator.length_hint()". Should '
10767*cda5da8dSAndroid Build Coastguard Worker                 'return an\n'
10768*cda5da8dSAndroid Build Coastguard Worker                 '   estimated length for the object (which may be greater or '
10769*cda5da8dSAndroid Build Coastguard Worker                 'less than\n'
10770*cda5da8dSAndroid Build Coastguard Worker                 '   the actual length). The length must be an integer ">=" 0. '
10771*cda5da8dSAndroid Build Coastguard Worker                 'The\n'
10772*cda5da8dSAndroid Build Coastguard Worker                 '   return value may also be "NotImplemented", which is '
10773*cda5da8dSAndroid Build Coastguard Worker                 'treated the\n'
10774*cda5da8dSAndroid Build Coastguard Worker                 '   same as if the "__length_hint__" method didn’t exist at '
10775*cda5da8dSAndroid Build Coastguard Worker                 'all. This\n'
10776*cda5da8dSAndroid Build Coastguard Worker                 '   method is purely an optimization and is never required '
10777*cda5da8dSAndroid Build Coastguard Worker                 'for\n'
10778*cda5da8dSAndroid Build Coastguard Worker                 '   correctness.\n'
10779*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10780*cda5da8dSAndroid Build Coastguard Worker                 '   New in version 3.4.\n'
10781*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10782*cda5da8dSAndroid Build Coastguard Worker                 'Note:\n'
10783*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10784*cda5da8dSAndroid Build Coastguard Worker                 '  Slicing is done exclusively with the following three '
10785*cda5da8dSAndroid Build Coastguard Worker                 'methods.  A\n'
10786*cda5da8dSAndroid Build Coastguard Worker                 '  call like\n'
10787*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10788*cda5da8dSAndroid Build Coastguard Worker                 '     a[1:2] = b\n'
10789*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10790*cda5da8dSAndroid Build Coastguard Worker                 '  is translated to\n'
10791*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10792*cda5da8dSAndroid Build Coastguard Worker                 '     a[slice(1, 2, None)] = b\n'
10793*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10794*cda5da8dSAndroid Build Coastguard Worker                 '  and so forth.  Missing slice items are always filled in '
10795*cda5da8dSAndroid Build Coastguard Worker                 'with "None".\n'
10796*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10797*cda5da8dSAndroid Build Coastguard Worker                 'object.__getitem__(self, key)\n'
10798*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10799*cda5da8dSAndroid Build Coastguard Worker                 '   Called to implement evaluation of "self[key]". For '
10800*cda5da8dSAndroid Build Coastguard Worker                 '*sequence*\n'
10801*cda5da8dSAndroid Build Coastguard Worker                 '   types, the accepted keys should be integers and slice '
10802*cda5da8dSAndroid Build Coastguard Worker                 'objects.\n'
10803*cda5da8dSAndroid Build Coastguard Worker                 '   Note that the special interpretation of negative indexes '
10804*cda5da8dSAndroid Build Coastguard Worker                 '(if the\n'
10805*cda5da8dSAndroid Build Coastguard Worker                 '   class wishes to emulate a *sequence* type) is up to the\n'
10806*cda5da8dSAndroid Build Coastguard Worker                 '   "__getitem__()" method. If *key* is of an inappropriate '
10807*cda5da8dSAndroid Build Coastguard Worker                 'type,\n'
10808*cda5da8dSAndroid Build Coastguard Worker                 '   "TypeError" may be raised; if of a value outside the set '
10809*cda5da8dSAndroid Build Coastguard Worker                 'of indexes\n'
10810*cda5da8dSAndroid Build Coastguard Worker                 '   for the sequence (after any special interpretation of '
10811*cda5da8dSAndroid Build Coastguard Worker                 'negative\n'
10812*cda5da8dSAndroid Build Coastguard Worker                 '   values), "IndexError" should be raised. For *mapping* '
10813*cda5da8dSAndroid Build Coastguard Worker                 'types, if\n'
10814*cda5da8dSAndroid Build Coastguard Worker                 '   *key* is missing (not in the container), "KeyError" '
10815*cda5da8dSAndroid Build Coastguard Worker                 'should be\n'
10816*cda5da8dSAndroid Build Coastguard Worker                 '   raised.\n'
10817*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10818*cda5da8dSAndroid Build Coastguard Worker                 '   Note:\n'
10819*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10820*cda5da8dSAndroid Build Coastguard Worker                 '     "for" loops expect that an "IndexError" will be raised '
10821*cda5da8dSAndroid Build Coastguard Worker                 'for\n'
10822*cda5da8dSAndroid Build Coastguard Worker                 '     illegal indexes to allow proper detection of the end of '
10823*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
10824*cda5da8dSAndroid Build Coastguard Worker                 '     sequence.\n'
10825*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10826*cda5da8dSAndroid Build Coastguard Worker                 '   Note:\n'
10827*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10828*cda5da8dSAndroid Build Coastguard Worker                 '     When subscripting a *class*, the special class method\n'
10829*cda5da8dSAndroid Build Coastguard Worker                 '     "__class_getitem__()" may be called instead of '
10830*cda5da8dSAndroid Build Coastguard Worker                 '"__getitem__()".\n'
10831*cda5da8dSAndroid Build Coastguard Worker                 '     See __class_getitem__ versus __getitem__ for more '
10832*cda5da8dSAndroid Build Coastguard Worker                 'details.\n'
10833*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10834*cda5da8dSAndroid Build Coastguard Worker                 'object.__setitem__(self, key, value)\n'
10835*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10836*cda5da8dSAndroid Build Coastguard Worker                 '   Called to implement assignment to "self[key]".  Same note '
10837*cda5da8dSAndroid Build Coastguard Worker                 'as for\n'
10838*cda5da8dSAndroid Build Coastguard Worker                 '   "__getitem__()".  This should only be implemented for '
10839*cda5da8dSAndroid Build Coastguard Worker                 'mappings if\n'
10840*cda5da8dSAndroid Build Coastguard Worker                 '   the objects support changes to the values for keys, or if '
10841*cda5da8dSAndroid Build Coastguard Worker                 'new keys\n'
10842*cda5da8dSAndroid Build Coastguard Worker                 '   can be added, or for sequences if elements can be '
10843*cda5da8dSAndroid Build Coastguard Worker                 'replaced.  The\n'
10844*cda5da8dSAndroid Build Coastguard Worker                 '   same exceptions should be raised for improper *key* '
10845*cda5da8dSAndroid Build Coastguard Worker                 'values as for\n'
10846*cda5da8dSAndroid Build Coastguard Worker                 '   the "__getitem__()" method.\n'
10847*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10848*cda5da8dSAndroid Build Coastguard Worker                 'object.__delitem__(self, key)\n'
10849*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10850*cda5da8dSAndroid Build Coastguard Worker                 '   Called to implement deletion of "self[key]".  Same note '
10851*cda5da8dSAndroid Build Coastguard Worker                 'as for\n'
10852*cda5da8dSAndroid Build Coastguard Worker                 '   "__getitem__()".  This should only be implemented for '
10853*cda5da8dSAndroid Build Coastguard Worker                 'mappings if\n'
10854*cda5da8dSAndroid Build Coastguard Worker                 '   the objects support removal of keys, or for sequences if '
10855*cda5da8dSAndroid Build Coastguard Worker                 'elements\n'
10856*cda5da8dSAndroid Build Coastguard Worker                 '   can be removed from the sequence.  The same exceptions '
10857*cda5da8dSAndroid Build Coastguard Worker                 'should be\n'
10858*cda5da8dSAndroid Build Coastguard Worker                 '   raised for improper *key* values as for the '
10859*cda5da8dSAndroid Build Coastguard Worker                 '"__getitem__()" method.\n'
10860*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10861*cda5da8dSAndroid Build Coastguard Worker                 'object.__missing__(self, key)\n'
10862*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10863*cda5da8dSAndroid Build Coastguard Worker                 '   Called by "dict"."__getitem__()" to implement "self[key]" '
10864*cda5da8dSAndroid Build Coastguard Worker                 'for dict\n'
10865*cda5da8dSAndroid Build Coastguard Worker                 '   subclasses when key is not in the dictionary.\n'
10866*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10867*cda5da8dSAndroid Build Coastguard Worker                 'object.__iter__(self)\n'
10868*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10869*cda5da8dSAndroid Build Coastguard Worker                 '   This method is called when an *iterator* is required for '
10870*cda5da8dSAndroid Build Coastguard Worker                 'a\n'
10871*cda5da8dSAndroid Build Coastguard Worker                 '   container. This method should return a new iterator '
10872*cda5da8dSAndroid Build Coastguard Worker                 'object that can\n'
10873*cda5da8dSAndroid Build Coastguard Worker                 '   iterate over all the objects in the container.  For '
10874*cda5da8dSAndroid Build Coastguard Worker                 'mappings, it\n'
10875*cda5da8dSAndroid Build Coastguard Worker                 '   should iterate over the keys of the container.\n'
10876*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10877*cda5da8dSAndroid Build Coastguard Worker                 'object.__reversed__(self)\n'
10878*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10879*cda5da8dSAndroid Build Coastguard Worker                 '   Called (if present) by the "reversed()" built-in to '
10880*cda5da8dSAndroid Build Coastguard Worker                 'implement\n'
10881*cda5da8dSAndroid Build Coastguard Worker                 '   reverse iteration.  It should return a new iterator '
10882*cda5da8dSAndroid Build Coastguard Worker                 'object that\n'
10883*cda5da8dSAndroid Build Coastguard Worker                 '   iterates over all the objects in the container in reverse '
10884*cda5da8dSAndroid Build Coastguard Worker                 'order.\n'
10885*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10886*cda5da8dSAndroid Build Coastguard Worker                 '   If the "__reversed__()" method is not provided, the '
10887*cda5da8dSAndroid Build Coastguard Worker                 '"reversed()"\n'
10888*cda5da8dSAndroid Build Coastguard Worker                 '   built-in will fall back to using the sequence protocol '
10889*cda5da8dSAndroid Build Coastguard Worker                 '("__len__()"\n'
10890*cda5da8dSAndroid Build Coastguard Worker                 '   and "__getitem__()").  Objects that support the sequence '
10891*cda5da8dSAndroid Build Coastguard Worker                 'protocol\n'
10892*cda5da8dSAndroid Build Coastguard Worker                 '   should only provide "__reversed__()" if they can provide '
10893*cda5da8dSAndroid Build Coastguard Worker                 'an\n'
10894*cda5da8dSAndroid Build Coastguard Worker                 '   implementation that is more efficient than the one '
10895*cda5da8dSAndroid Build Coastguard Worker                 'provided by\n'
10896*cda5da8dSAndroid Build Coastguard Worker                 '   "reversed()".\n'
10897*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10898*cda5da8dSAndroid Build Coastguard Worker                 'The membership test operators ("in" and "not in") are '
10899*cda5da8dSAndroid Build Coastguard Worker                 'normally\n'
10900*cda5da8dSAndroid Build Coastguard Worker                 'implemented as an iteration through a container. However, '
10901*cda5da8dSAndroid Build Coastguard Worker                 'container\n'
10902*cda5da8dSAndroid Build Coastguard Worker                 'objects can supply the following special method with a more '
10903*cda5da8dSAndroid Build Coastguard Worker                 'efficient\n'
10904*cda5da8dSAndroid Build Coastguard Worker                 'implementation, which also does not require the object be '
10905*cda5da8dSAndroid Build Coastguard Worker                 'iterable.\n'
10906*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10907*cda5da8dSAndroid Build Coastguard Worker                 'object.__contains__(self, item)\n'
10908*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10909*cda5da8dSAndroid Build Coastguard Worker                 '   Called to implement membership test operators.  Should '
10910*cda5da8dSAndroid Build Coastguard Worker                 'return true\n'
10911*cda5da8dSAndroid Build Coastguard Worker                 '   if *item* is in *self*, false otherwise.  For mapping '
10912*cda5da8dSAndroid Build Coastguard Worker                 'objects, this\n'
10913*cda5da8dSAndroid Build Coastguard Worker                 '   should consider the keys of the mapping rather than the '
10914*cda5da8dSAndroid Build Coastguard Worker                 'values or\n'
10915*cda5da8dSAndroid Build Coastguard Worker                 '   the key-item pairs.\n'
10916*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10917*cda5da8dSAndroid Build Coastguard Worker                 '   For objects that don’t define "__contains__()", the '
10918*cda5da8dSAndroid Build Coastguard Worker                 'membership test\n'
10919*cda5da8dSAndroid Build Coastguard Worker                 '   first tries iteration via "__iter__()", then the old '
10920*cda5da8dSAndroid Build Coastguard Worker                 'sequence\n'
10921*cda5da8dSAndroid Build Coastguard Worker                 '   iteration protocol via "__getitem__()", see this section '
10922*cda5da8dSAndroid Build Coastguard Worker                 'in the\n'
10923*cda5da8dSAndroid Build Coastguard Worker                 '   language reference.\n'
10924*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10925*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10926*cda5da8dSAndroid Build Coastguard Worker                 'Emulating numeric types\n'
10927*cda5da8dSAndroid Build Coastguard Worker                 '=======================\n'
10928*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10929*cda5da8dSAndroid Build Coastguard Worker                 'The following methods can be defined to emulate numeric '
10930*cda5da8dSAndroid Build Coastguard Worker                 'objects.\n'
10931*cda5da8dSAndroid Build Coastguard Worker                 'Methods corresponding to operations that are not supported '
10932*cda5da8dSAndroid Build Coastguard Worker                 'by the\n'
10933*cda5da8dSAndroid Build Coastguard Worker                 'particular kind of number implemented (e.g., bitwise '
10934*cda5da8dSAndroid Build Coastguard Worker                 'operations for\n'
10935*cda5da8dSAndroid Build Coastguard Worker                 'non-integral numbers) should be left undefined.\n'
10936*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10937*cda5da8dSAndroid Build Coastguard Worker                 'object.__add__(self, other)\n'
10938*cda5da8dSAndroid Build Coastguard Worker                 'object.__sub__(self, other)\n'
10939*cda5da8dSAndroid Build Coastguard Worker                 'object.__mul__(self, other)\n'
10940*cda5da8dSAndroid Build Coastguard Worker                 'object.__matmul__(self, other)\n'
10941*cda5da8dSAndroid Build Coastguard Worker                 'object.__truediv__(self, other)\n'
10942*cda5da8dSAndroid Build Coastguard Worker                 'object.__floordiv__(self, other)\n'
10943*cda5da8dSAndroid Build Coastguard Worker                 'object.__mod__(self, other)\n'
10944*cda5da8dSAndroid Build Coastguard Worker                 'object.__divmod__(self, other)\n'
10945*cda5da8dSAndroid Build Coastguard Worker                 'object.__pow__(self, other[, modulo])\n'
10946*cda5da8dSAndroid Build Coastguard Worker                 'object.__lshift__(self, other)\n'
10947*cda5da8dSAndroid Build Coastguard Worker                 'object.__rshift__(self, other)\n'
10948*cda5da8dSAndroid Build Coastguard Worker                 'object.__and__(self, other)\n'
10949*cda5da8dSAndroid Build Coastguard Worker                 'object.__xor__(self, other)\n'
10950*cda5da8dSAndroid Build Coastguard Worker                 'object.__or__(self, other)\n'
10951*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10952*cda5da8dSAndroid Build Coastguard Worker                 '   These methods are called to implement the binary '
10953*cda5da8dSAndroid Build Coastguard Worker                 'arithmetic\n'
10954*cda5da8dSAndroid Build Coastguard Worker                 '   operations ("+", "-", "*", "@", "/", "//", "%", '
10955*cda5da8dSAndroid Build Coastguard Worker                 '"divmod()",\n'
10956*cda5da8dSAndroid Build Coastguard Worker                 '   "pow()", "**", "<<", ">>", "&", "^", "|").  For instance, '
10957*cda5da8dSAndroid Build Coastguard Worker                 'to\n'
10958*cda5da8dSAndroid Build Coastguard Worker                 '   evaluate the expression "x + y", where *x* is an instance '
10959*cda5da8dSAndroid Build Coastguard Worker                 'of a\n'
10960*cda5da8dSAndroid Build Coastguard Worker                 '   class that has an "__add__()" method, "type(x).__add__(x, '
10961*cda5da8dSAndroid Build Coastguard Worker                 'y)" is\n'
10962*cda5da8dSAndroid Build Coastguard Worker                 '   called.  The "__divmod__()" method should be the '
10963*cda5da8dSAndroid Build Coastguard Worker                 'equivalent to\n'
10964*cda5da8dSAndroid Build Coastguard Worker                 '   using "__floordiv__()" and "__mod__()"; it should not be '
10965*cda5da8dSAndroid Build Coastguard Worker                 'related to\n'
10966*cda5da8dSAndroid Build Coastguard Worker                 '   "__truediv__()".  Note that "__pow__()" should be defined '
10967*cda5da8dSAndroid Build Coastguard Worker                 'to accept\n'
10968*cda5da8dSAndroid Build Coastguard Worker                 '   an optional third argument if the ternary version of the '
10969*cda5da8dSAndroid Build Coastguard Worker                 'built-in\n'
10970*cda5da8dSAndroid Build Coastguard Worker                 '   "pow()" function is to be supported.\n'
10971*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10972*cda5da8dSAndroid Build Coastguard Worker                 '   If one of those methods does not support the operation '
10973*cda5da8dSAndroid Build Coastguard Worker                 'with the\n'
10974*cda5da8dSAndroid Build Coastguard Worker                 '   supplied arguments, it should return "NotImplemented".\n'
10975*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10976*cda5da8dSAndroid Build Coastguard Worker                 'object.__radd__(self, other)\n'
10977*cda5da8dSAndroid Build Coastguard Worker                 'object.__rsub__(self, other)\n'
10978*cda5da8dSAndroid Build Coastguard Worker                 'object.__rmul__(self, other)\n'
10979*cda5da8dSAndroid Build Coastguard Worker                 'object.__rmatmul__(self, other)\n'
10980*cda5da8dSAndroid Build Coastguard Worker                 'object.__rtruediv__(self, other)\n'
10981*cda5da8dSAndroid Build Coastguard Worker                 'object.__rfloordiv__(self, other)\n'
10982*cda5da8dSAndroid Build Coastguard Worker                 'object.__rmod__(self, other)\n'
10983*cda5da8dSAndroid Build Coastguard Worker                 'object.__rdivmod__(self, other)\n'
10984*cda5da8dSAndroid Build Coastguard Worker                 'object.__rpow__(self, other[, modulo])\n'
10985*cda5da8dSAndroid Build Coastguard Worker                 'object.__rlshift__(self, other)\n'
10986*cda5da8dSAndroid Build Coastguard Worker                 'object.__rrshift__(self, other)\n'
10987*cda5da8dSAndroid Build Coastguard Worker                 'object.__rand__(self, other)\n'
10988*cda5da8dSAndroid Build Coastguard Worker                 'object.__rxor__(self, other)\n'
10989*cda5da8dSAndroid Build Coastguard Worker                 'object.__ror__(self, other)\n'
10990*cda5da8dSAndroid Build Coastguard Worker                 '\n'
10991*cda5da8dSAndroid Build Coastguard Worker                 '   These methods are called to implement the binary '
10992*cda5da8dSAndroid Build Coastguard Worker                 'arithmetic\n'
10993*cda5da8dSAndroid Build Coastguard Worker                 '   operations ("+", "-", "*", "@", "/", "//", "%", '
10994*cda5da8dSAndroid Build Coastguard Worker                 '"divmod()",\n'
10995*cda5da8dSAndroid Build Coastguard Worker                 '   "pow()", "**", "<<", ">>", "&", "^", "|") with reflected '
10996*cda5da8dSAndroid Build Coastguard Worker                 '(swapped)\n'
10997*cda5da8dSAndroid Build Coastguard Worker                 '   operands.  These functions are only called if the left '
10998*cda5da8dSAndroid Build Coastguard Worker                 'operand does\n'
10999*cda5da8dSAndroid Build Coastguard Worker                 '   not support the corresponding operation [3] and the '
11000*cda5da8dSAndroid Build Coastguard Worker                 'operands are of\n'
11001*cda5da8dSAndroid Build Coastguard Worker                 '   different types. [4] For instance, to evaluate the '
11002*cda5da8dSAndroid Build Coastguard Worker                 'expression "x -\n'
11003*cda5da8dSAndroid Build Coastguard Worker                 '   y", where *y* is an instance of a class that has an '
11004*cda5da8dSAndroid Build Coastguard Worker                 '"__rsub__()"\n'
11005*cda5da8dSAndroid Build Coastguard Worker                 '   method, "type(y).__rsub__(y, x)" is called if '
11006*cda5da8dSAndroid Build Coastguard Worker                 '"type(x).__sub__(x,\n'
11007*cda5da8dSAndroid Build Coastguard Worker                 '   y)" returns *NotImplemented*.\n'
11008*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11009*cda5da8dSAndroid Build Coastguard Worker                 '   Note that ternary "pow()" will not try calling '
11010*cda5da8dSAndroid Build Coastguard Worker                 '"__rpow__()" (the\n'
11011*cda5da8dSAndroid Build Coastguard Worker                 '   coercion rules would become too complicated).\n'
11012*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11013*cda5da8dSAndroid Build Coastguard Worker                 '   Note:\n'
11014*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11015*cda5da8dSAndroid Build Coastguard Worker                 '     If the right operand’s type is a subclass of the left '
11016*cda5da8dSAndroid Build Coastguard Worker                 'operand’s\n'
11017*cda5da8dSAndroid Build Coastguard Worker                 '     type and that subclass provides a different '
11018*cda5da8dSAndroid Build Coastguard Worker                 'implementation of the\n'
11019*cda5da8dSAndroid Build Coastguard Worker                 '     reflected method for the operation, this method will be '
11020*cda5da8dSAndroid Build Coastguard Worker                 'called\n'
11021*cda5da8dSAndroid Build Coastguard Worker                 '     before the left operand’s non-reflected method. This '
11022*cda5da8dSAndroid Build Coastguard Worker                 'behavior\n'
11023*cda5da8dSAndroid Build Coastguard Worker                 '     allows subclasses to override their ancestors’ '
11024*cda5da8dSAndroid Build Coastguard Worker                 'operations.\n'
11025*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11026*cda5da8dSAndroid Build Coastguard Worker                 'object.__iadd__(self, other)\n'
11027*cda5da8dSAndroid Build Coastguard Worker                 'object.__isub__(self, other)\n'
11028*cda5da8dSAndroid Build Coastguard Worker                 'object.__imul__(self, other)\n'
11029*cda5da8dSAndroid Build Coastguard Worker                 'object.__imatmul__(self, other)\n'
11030*cda5da8dSAndroid Build Coastguard Worker                 'object.__itruediv__(self, other)\n'
11031*cda5da8dSAndroid Build Coastguard Worker                 'object.__ifloordiv__(self, other)\n'
11032*cda5da8dSAndroid Build Coastguard Worker                 'object.__imod__(self, other)\n'
11033*cda5da8dSAndroid Build Coastguard Worker                 'object.__ipow__(self, other[, modulo])\n'
11034*cda5da8dSAndroid Build Coastguard Worker                 'object.__ilshift__(self, other)\n'
11035*cda5da8dSAndroid Build Coastguard Worker                 'object.__irshift__(self, other)\n'
11036*cda5da8dSAndroid Build Coastguard Worker                 'object.__iand__(self, other)\n'
11037*cda5da8dSAndroid Build Coastguard Worker                 'object.__ixor__(self, other)\n'
11038*cda5da8dSAndroid Build Coastguard Worker                 'object.__ior__(self, other)\n'
11039*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11040*cda5da8dSAndroid Build Coastguard Worker                 '   These methods are called to implement the augmented '
11041*cda5da8dSAndroid Build Coastguard Worker                 'arithmetic\n'
11042*cda5da8dSAndroid Build Coastguard Worker                 '   assignments ("+=", "-=", "*=", "@=", "/=", "//=", "%=", '
11043*cda5da8dSAndroid Build Coastguard Worker                 '"**=",\n'
11044*cda5da8dSAndroid Build Coastguard Worker                 '   "<<=", ">>=", "&=", "^=", "|=").  These methods should '
11045*cda5da8dSAndroid Build Coastguard Worker                 'attempt to\n'
11046*cda5da8dSAndroid Build Coastguard Worker                 '   do the operation in-place (modifying *self*) and return '
11047*cda5da8dSAndroid Build Coastguard Worker                 'the result\n'
11048*cda5da8dSAndroid Build Coastguard Worker                 '   (which could be, but does not have to be, *self*).  If a '
11049*cda5da8dSAndroid Build Coastguard Worker                 'specific\n'
11050*cda5da8dSAndroid Build Coastguard Worker                 '   method is not defined, the augmented assignment falls '
11051*cda5da8dSAndroid Build Coastguard Worker                 'back to the\n'
11052*cda5da8dSAndroid Build Coastguard Worker                 '   normal methods.  For instance, if *x* is an instance of a '
11053*cda5da8dSAndroid Build Coastguard Worker                 'class\n'
11054*cda5da8dSAndroid Build Coastguard Worker                 '   with an "__iadd__()" method, "x += y" is equivalent to "x '
11055*cda5da8dSAndroid Build Coastguard Worker                 '=\n'
11056*cda5da8dSAndroid Build Coastguard Worker                 '   x.__iadd__(y)" . Otherwise, "x.__add__(y)" and '
11057*cda5da8dSAndroid Build Coastguard Worker                 '"y.__radd__(x)" are\n'
11058*cda5da8dSAndroid Build Coastguard Worker                 '   considered, as with the evaluation of "x + y". In '
11059*cda5da8dSAndroid Build Coastguard Worker                 'certain\n'
11060*cda5da8dSAndroid Build Coastguard Worker                 '   situations, augmented assignment can result in unexpected '
11061*cda5da8dSAndroid Build Coastguard Worker                 'errors\n'
11062*cda5da8dSAndroid Build Coastguard Worker                 '   (see Why does a_tuple[i] += [‘item’] raise an exception '
11063*cda5da8dSAndroid Build Coastguard Worker                 'when the\n'
11064*cda5da8dSAndroid Build Coastguard Worker                 '   addition works?), but this behavior is in fact part of '
11065*cda5da8dSAndroid Build Coastguard Worker                 'the data\n'
11066*cda5da8dSAndroid Build Coastguard Worker                 '   model.\n'
11067*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11068*cda5da8dSAndroid Build Coastguard Worker                 'object.__neg__(self)\n'
11069*cda5da8dSAndroid Build Coastguard Worker                 'object.__pos__(self)\n'
11070*cda5da8dSAndroid Build Coastguard Worker                 'object.__abs__(self)\n'
11071*cda5da8dSAndroid Build Coastguard Worker                 'object.__invert__(self)\n'
11072*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11073*cda5da8dSAndroid Build Coastguard Worker                 '   Called to implement the unary arithmetic operations ("-", '
11074*cda5da8dSAndroid Build Coastguard Worker                 '"+",\n'
11075*cda5da8dSAndroid Build Coastguard Worker                 '   "abs()" and "~").\n'
11076*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11077*cda5da8dSAndroid Build Coastguard Worker                 'object.__complex__(self)\n'
11078*cda5da8dSAndroid Build Coastguard Worker                 'object.__int__(self)\n'
11079*cda5da8dSAndroid Build Coastguard Worker                 'object.__float__(self)\n'
11080*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11081*cda5da8dSAndroid Build Coastguard Worker                 '   Called to implement the built-in functions "complex()", '
11082*cda5da8dSAndroid Build Coastguard Worker                 '"int()" and\n'
11083*cda5da8dSAndroid Build Coastguard Worker                 '   "float()".  Should return a value of the appropriate '
11084*cda5da8dSAndroid Build Coastguard Worker                 'type.\n'
11085*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11086*cda5da8dSAndroid Build Coastguard Worker                 'object.__index__(self)\n'
11087*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11088*cda5da8dSAndroid Build Coastguard Worker                 '   Called to implement "operator.index()", and whenever '
11089*cda5da8dSAndroid Build Coastguard Worker                 'Python needs\n'
11090*cda5da8dSAndroid Build Coastguard Worker                 '   to losslessly convert the numeric object to an integer '
11091*cda5da8dSAndroid Build Coastguard Worker                 'object (such\n'
11092*cda5da8dSAndroid Build Coastguard Worker                 '   as in slicing, or in the built-in "bin()", "hex()" and '
11093*cda5da8dSAndroid Build Coastguard Worker                 '"oct()"\n'
11094*cda5da8dSAndroid Build Coastguard Worker                 '   functions). Presence of this method indicates that the '
11095*cda5da8dSAndroid Build Coastguard Worker                 'numeric\n'
11096*cda5da8dSAndroid Build Coastguard Worker                 '   object is an integer type.  Must return an integer.\n'
11097*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11098*cda5da8dSAndroid Build Coastguard Worker                 '   If "__int__()", "__float__()" and "__complex__()" are not '
11099*cda5da8dSAndroid Build Coastguard Worker                 'defined\n'
11100*cda5da8dSAndroid Build Coastguard Worker                 '   then corresponding built-in functions "int()", "float()" '
11101*cda5da8dSAndroid Build Coastguard Worker                 'and\n'
11102*cda5da8dSAndroid Build Coastguard Worker                 '   "complex()" fall back to "__index__()".\n'
11103*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11104*cda5da8dSAndroid Build Coastguard Worker                 'object.__round__(self[, ndigits])\n'
11105*cda5da8dSAndroid Build Coastguard Worker                 'object.__trunc__(self)\n'
11106*cda5da8dSAndroid Build Coastguard Worker                 'object.__floor__(self)\n'
11107*cda5da8dSAndroid Build Coastguard Worker                 'object.__ceil__(self)\n'
11108*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11109*cda5da8dSAndroid Build Coastguard Worker                 '   Called to implement the built-in function "round()" and '
11110*cda5da8dSAndroid Build Coastguard Worker                 '"math"\n'
11111*cda5da8dSAndroid Build Coastguard Worker                 '   functions "trunc()", "floor()" and "ceil()". Unless '
11112*cda5da8dSAndroid Build Coastguard Worker                 '*ndigits* is\n'
11113*cda5da8dSAndroid Build Coastguard Worker                 '   passed to "__round__()" all these methods should return '
11114*cda5da8dSAndroid Build Coastguard Worker                 'the value\n'
11115*cda5da8dSAndroid Build Coastguard Worker                 '   of the object truncated to an "Integral" (typically an '
11116*cda5da8dSAndroid Build Coastguard Worker                 '"int").\n'
11117*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11118*cda5da8dSAndroid Build Coastguard Worker                 '   The built-in function "int()" falls back to "__trunc__()" '
11119*cda5da8dSAndroid Build Coastguard Worker                 'if\n'
11120*cda5da8dSAndroid Build Coastguard Worker                 '   neither "__int__()" nor "__index__()" is defined.\n'
11121*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11122*cda5da8dSAndroid Build Coastguard Worker                 '   Changed in version 3.11: The delegation of "int()" to '
11123*cda5da8dSAndroid Build Coastguard Worker                 '"__trunc__()"\n'
11124*cda5da8dSAndroid Build Coastguard Worker                 '   is deprecated.\n'
11125*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11126*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11127*cda5da8dSAndroid Build Coastguard Worker                 'With Statement Context Managers\n'
11128*cda5da8dSAndroid Build Coastguard Worker                 '===============================\n'
11129*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11130*cda5da8dSAndroid Build Coastguard Worker                 'A *context manager* is an object that defines the runtime '
11131*cda5da8dSAndroid Build Coastguard Worker                 'context to\n'
11132*cda5da8dSAndroid Build Coastguard Worker                 'be established when executing a "with" statement. The '
11133*cda5da8dSAndroid Build Coastguard Worker                 'context manager\n'
11134*cda5da8dSAndroid Build Coastguard Worker                 'handles the entry into, and the exit from, the desired '
11135*cda5da8dSAndroid Build Coastguard Worker                 'runtime context\n'
11136*cda5da8dSAndroid Build Coastguard Worker                 'for the execution of the block of code.  Context managers '
11137*cda5da8dSAndroid Build Coastguard Worker                 'are normally\n'
11138*cda5da8dSAndroid Build Coastguard Worker                 'invoked using the "with" statement (described in section The '
11139*cda5da8dSAndroid Build Coastguard Worker                 'with\n'
11140*cda5da8dSAndroid Build Coastguard Worker                 'statement), but can also be used by directly invoking their '
11141*cda5da8dSAndroid Build Coastguard Worker                 'methods.\n'
11142*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11143*cda5da8dSAndroid Build Coastguard Worker                 'Typical uses of context managers include saving and '
11144*cda5da8dSAndroid Build Coastguard Worker                 'restoring various\n'
11145*cda5da8dSAndroid Build Coastguard Worker                 'kinds of global state, locking and unlocking resources, '
11146*cda5da8dSAndroid Build Coastguard Worker                 'closing opened\n'
11147*cda5da8dSAndroid Build Coastguard Worker                 'files, etc.\n'
11148*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11149*cda5da8dSAndroid Build Coastguard Worker                 'For more information on context managers, see Context '
11150*cda5da8dSAndroid Build Coastguard Worker                 'Manager Types.\n'
11151*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11152*cda5da8dSAndroid Build Coastguard Worker                 'object.__enter__(self)\n'
11153*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11154*cda5da8dSAndroid Build Coastguard Worker                 '   Enter the runtime context related to this object. The '
11155*cda5da8dSAndroid Build Coastguard Worker                 '"with"\n'
11156*cda5da8dSAndroid Build Coastguard Worker                 '   statement will bind this method’s return value to the '
11157*cda5da8dSAndroid Build Coastguard Worker                 'target(s)\n'
11158*cda5da8dSAndroid Build Coastguard Worker                 '   specified in the "as" clause of the statement, if any.\n'
11159*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11160*cda5da8dSAndroid Build Coastguard Worker                 'object.__exit__(self, exc_type, exc_value, traceback)\n'
11161*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11162*cda5da8dSAndroid Build Coastguard Worker                 '   Exit the runtime context related to this object. The '
11163*cda5da8dSAndroid Build Coastguard Worker                 'parameters\n'
11164*cda5da8dSAndroid Build Coastguard Worker                 '   describe the exception that caused the context to be '
11165*cda5da8dSAndroid Build Coastguard Worker                 'exited. If the\n'
11166*cda5da8dSAndroid Build Coastguard Worker                 '   context was exited without an exception, all three '
11167*cda5da8dSAndroid Build Coastguard Worker                 'arguments will\n'
11168*cda5da8dSAndroid Build Coastguard Worker                 '   be "None".\n'
11169*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11170*cda5da8dSAndroid Build Coastguard Worker                 '   If an exception is supplied, and the method wishes to '
11171*cda5da8dSAndroid Build Coastguard Worker                 'suppress the\n'
11172*cda5da8dSAndroid Build Coastguard Worker                 '   exception (i.e., prevent it from being propagated), it '
11173*cda5da8dSAndroid Build Coastguard Worker                 'should\n'
11174*cda5da8dSAndroid Build Coastguard Worker                 '   return a true value. Otherwise, the exception will be '
11175*cda5da8dSAndroid Build Coastguard Worker                 'processed\n'
11176*cda5da8dSAndroid Build Coastguard Worker                 '   normally upon exit from this method.\n'
11177*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11178*cda5da8dSAndroid Build Coastguard Worker                 '   Note that "__exit__()" methods should not reraise the '
11179*cda5da8dSAndroid Build Coastguard Worker                 'passed-in\n'
11180*cda5da8dSAndroid Build Coastguard Worker                 '   exception; this is the caller’s responsibility.\n'
11181*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11182*cda5da8dSAndroid Build Coastguard Worker                 'See also:\n'
11183*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11184*cda5da8dSAndroid Build Coastguard Worker                 '  **PEP 343** - The “with” statement\n'
11185*cda5da8dSAndroid Build Coastguard Worker                 '     The specification, background, and examples for the '
11186*cda5da8dSAndroid Build Coastguard Worker                 'Python "with"\n'
11187*cda5da8dSAndroid Build Coastguard Worker                 '     statement.\n'
11188*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11189*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11190*cda5da8dSAndroid Build Coastguard Worker                 'Customizing positional arguments in class pattern matching\n'
11191*cda5da8dSAndroid Build Coastguard Worker                 '==========================================================\n'
11192*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11193*cda5da8dSAndroid Build Coastguard Worker                 'When using a class name in a pattern, positional arguments '
11194*cda5da8dSAndroid Build Coastguard Worker                 'in the\n'
11195*cda5da8dSAndroid Build Coastguard Worker                 'pattern are not allowed by default, i.e. "case MyClass(x, '
11196*cda5da8dSAndroid Build Coastguard Worker                 'y)" is\n'
11197*cda5da8dSAndroid Build Coastguard Worker                 'typically invalid without special support in "MyClass". To '
11198*cda5da8dSAndroid Build Coastguard Worker                 'be able to\n'
11199*cda5da8dSAndroid Build Coastguard Worker                 'use that kind of pattern, the class needs to define a '
11200*cda5da8dSAndroid Build Coastguard Worker                 '*__match_args__*\n'
11201*cda5da8dSAndroid Build Coastguard Worker                 'attribute.\n'
11202*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11203*cda5da8dSAndroid Build Coastguard Worker                 'object.__match_args__\n'
11204*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11205*cda5da8dSAndroid Build Coastguard Worker                 '   This class variable can be assigned a tuple of strings. '
11206*cda5da8dSAndroid Build Coastguard Worker                 'When this\n'
11207*cda5da8dSAndroid Build Coastguard Worker                 '   class is used in a class pattern with positional '
11208*cda5da8dSAndroid Build Coastguard Worker                 'arguments, each\n'
11209*cda5da8dSAndroid Build Coastguard Worker                 '   positional argument will be converted into a keyword '
11210*cda5da8dSAndroid Build Coastguard Worker                 'argument,\n'
11211*cda5da8dSAndroid Build Coastguard Worker                 '   using the corresponding value in *__match_args__* as the '
11212*cda5da8dSAndroid Build Coastguard Worker                 'keyword.\n'
11213*cda5da8dSAndroid Build Coastguard Worker                 '   The absence of this attribute is equivalent to setting it '
11214*cda5da8dSAndroid Build Coastguard Worker                 'to "()".\n'
11215*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11216*cda5da8dSAndroid Build Coastguard Worker                 'For example, if "MyClass.__match_args__" is "("left", '
11217*cda5da8dSAndroid Build Coastguard Worker                 '"center",\n'
11218*cda5da8dSAndroid Build Coastguard Worker                 '"right")" that means that "case MyClass(x, y)" is equivalent '
11219*cda5da8dSAndroid Build Coastguard Worker                 'to "case\n'
11220*cda5da8dSAndroid Build Coastguard Worker                 'MyClass(left=x, center=y)". Note that the number of '
11221*cda5da8dSAndroid Build Coastguard Worker                 'arguments in the\n'
11222*cda5da8dSAndroid Build Coastguard Worker                 'pattern must be smaller than or equal to the number of '
11223*cda5da8dSAndroid Build Coastguard Worker                 'elements in\n'
11224*cda5da8dSAndroid Build Coastguard Worker                 '*__match_args__*; if it is larger, the pattern match attempt '
11225*cda5da8dSAndroid Build Coastguard Worker                 'will\n'
11226*cda5da8dSAndroid Build Coastguard Worker                 'raise a "TypeError".\n'
11227*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11228*cda5da8dSAndroid Build Coastguard Worker                 'New in version 3.10.\n'
11229*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11230*cda5da8dSAndroid Build Coastguard Worker                 'See also:\n'
11231*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11232*cda5da8dSAndroid Build Coastguard Worker                 '  **PEP 634** - Structural Pattern Matching\n'
11233*cda5da8dSAndroid Build Coastguard Worker                 '     The specification for the Python "match" statement.\n'
11234*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11235*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11236*cda5da8dSAndroid Build Coastguard Worker                 'Special method lookup\n'
11237*cda5da8dSAndroid Build Coastguard Worker                 '=====================\n'
11238*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11239*cda5da8dSAndroid Build Coastguard Worker                 'For custom classes, implicit invocations of special methods '
11240*cda5da8dSAndroid Build Coastguard Worker                 'are only\n'
11241*cda5da8dSAndroid Build Coastguard Worker                 'guaranteed to work correctly if defined on an object’s type, '
11242*cda5da8dSAndroid Build Coastguard Worker                 'not in\n'
11243*cda5da8dSAndroid Build Coastguard Worker                 'the object’s instance dictionary.  That behaviour is the '
11244*cda5da8dSAndroid Build Coastguard Worker                 'reason why\n'
11245*cda5da8dSAndroid Build Coastguard Worker                 'the following code raises an exception:\n'
11246*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11247*cda5da8dSAndroid Build Coastguard Worker                 '   >>> class C:\n'
11248*cda5da8dSAndroid Build Coastguard Worker                 '   ...     pass\n'
11249*cda5da8dSAndroid Build Coastguard Worker                 '   ...\n'
11250*cda5da8dSAndroid Build Coastguard Worker                 '   >>> c = C()\n'
11251*cda5da8dSAndroid Build Coastguard Worker                 '   >>> c.__len__ = lambda: 5\n'
11252*cda5da8dSAndroid Build Coastguard Worker                 '   >>> len(c)\n'
11253*cda5da8dSAndroid Build Coastguard Worker                 '   Traceback (most recent call last):\n'
11254*cda5da8dSAndroid Build Coastguard Worker                 '     File "<stdin>", line 1, in <module>\n'
11255*cda5da8dSAndroid Build Coastguard Worker                 "   TypeError: object of type 'C' has no len()\n"
11256*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11257*cda5da8dSAndroid Build Coastguard Worker                 'The rationale behind this behaviour lies with a number of '
11258*cda5da8dSAndroid Build Coastguard Worker                 'special\n'
11259*cda5da8dSAndroid Build Coastguard Worker                 'methods such as "__hash__()" and "__repr__()" that are '
11260*cda5da8dSAndroid Build Coastguard Worker                 'implemented by\n'
11261*cda5da8dSAndroid Build Coastguard Worker                 'all objects, including type objects. If the implicit lookup '
11262*cda5da8dSAndroid Build Coastguard Worker                 'of these\n'
11263*cda5da8dSAndroid Build Coastguard Worker                 'methods used the conventional lookup process, they would '
11264*cda5da8dSAndroid Build Coastguard Worker                 'fail when\n'
11265*cda5da8dSAndroid Build Coastguard Worker                 'invoked on the type object itself:\n'
11266*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11267*cda5da8dSAndroid Build Coastguard Worker                 '   >>> 1 .__hash__() == hash(1)\n'
11268*cda5da8dSAndroid Build Coastguard Worker                 '   True\n'
11269*cda5da8dSAndroid Build Coastguard Worker                 '   >>> int.__hash__() == hash(int)\n'
11270*cda5da8dSAndroid Build Coastguard Worker                 '   Traceback (most recent call last):\n'
11271*cda5da8dSAndroid Build Coastguard Worker                 '     File "<stdin>", line 1, in <module>\n'
11272*cda5da8dSAndroid Build Coastguard Worker                 "   TypeError: descriptor '__hash__' of 'int' object needs an "
11273*cda5da8dSAndroid Build Coastguard Worker                 'argument\n'
11274*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11275*cda5da8dSAndroid Build Coastguard Worker                 'Incorrectly attempting to invoke an unbound method of a '
11276*cda5da8dSAndroid Build Coastguard Worker                 'class in this\n'
11277*cda5da8dSAndroid Build Coastguard Worker                 'way is sometimes referred to as ‘metaclass confusion’, and '
11278*cda5da8dSAndroid Build Coastguard Worker                 'is avoided\n'
11279*cda5da8dSAndroid Build Coastguard Worker                 'by bypassing the instance when looking up special methods:\n'
11280*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11281*cda5da8dSAndroid Build Coastguard Worker                 '   >>> type(1).__hash__(1) == hash(1)\n'
11282*cda5da8dSAndroid Build Coastguard Worker                 '   True\n'
11283*cda5da8dSAndroid Build Coastguard Worker                 '   >>> type(int).__hash__(int) == hash(int)\n'
11284*cda5da8dSAndroid Build Coastguard Worker                 '   True\n'
11285*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11286*cda5da8dSAndroid Build Coastguard Worker                 'In addition to bypassing any instance attributes in the '
11287*cda5da8dSAndroid Build Coastguard Worker                 'interest of\n'
11288*cda5da8dSAndroid Build Coastguard Worker                 'correctness, implicit special method lookup generally also '
11289*cda5da8dSAndroid Build Coastguard Worker                 'bypasses\n'
11290*cda5da8dSAndroid Build Coastguard Worker                 'the "__getattribute__()" method even of the object’s '
11291*cda5da8dSAndroid Build Coastguard Worker                 'metaclass:\n'
11292*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11293*cda5da8dSAndroid Build Coastguard Worker                 '   >>> class Meta(type):\n'
11294*cda5da8dSAndroid Build Coastguard Worker                 '   ...     def __getattribute__(*args):\n'
11295*cda5da8dSAndroid Build Coastguard Worker                 '   ...         print("Metaclass getattribute invoked")\n'
11296*cda5da8dSAndroid Build Coastguard Worker                 '   ...         return type.__getattribute__(*args)\n'
11297*cda5da8dSAndroid Build Coastguard Worker                 '   ...\n'
11298*cda5da8dSAndroid Build Coastguard Worker                 '   >>> class C(object, metaclass=Meta):\n'
11299*cda5da8dSAndroid Build Coastguard Worker                 '   ...     def __len__(self):\n'
11300*cda5da8dSAndroid Build Coastguard Worker                 '   ...         return 10\n'
11301*cda5da8dSAndroid Build Coastguard Worker                 '   ...     def __getattribute__(*args):\n'
11302*cda5da8dSAndroid Build Coastguard Worker                 '   ...         print("Class getattribute invoked")\n'
11303*cda5da8dSAndroid Build Coastguard Worker                 '   ...         return object.__getattribute__(*args)\n'
11304*cda5da8dSAndroid Build Coastguard Worker                 '   ...\n'
11305*cda5da8dSAndroid Build Coastguard Worker                 '   >>> c = C()\n'
11306*cda5da8dSAndroid Build Coastguard Worker                 '   >>> c.__len__()                 # Explicit lookup via '
11307*cda5da8dSAndroid Build Coastguard Worker                 'instance\n'
11308*cda5da8dSAndroid Build Coastguard Worker                 '   Class getattribute invoked\n'
11309*cda5da8dSAndroid Build Coastguard Worker                 '   10\n'
11310*cda5da8dSAndroid Build Coastguard Worker                 '   >>> type(c).__len__(c)          # Explicit lookup via '
11311*cda5da8dSAndroid Build Coastguard Worker                 'type\n'
11312*cda5da8dSAndroid Build Coastguard Worker                 '   Metaclass getattribute invoked\n'
11313*cda5da8dSAndroid Build Coastguard Worker                 '   10\n'
11314*cda5da8dSAndroid Build Coastguard Worker                 '   >>> len(c)                      # Implicit lookup\n'
11315*cda5da8dSAndroid Build Coastguard Worker                 '   10\n'
11316*cda5da8dSAndroid Build Coastguard Worker                 '\n'
11317*cda5da8dSAndroid Build Coastguard Worker                 'Bypassing the "__getattribute__()" machinery in this fashion '
11318*cda5da8dSAndroid Build Coastguard Worker                 'provides\n'
11319*cda5da8dSAndroid Build Coastguard Worker                 'significant scope for speed optimisations within the '
11320*cda5da8dSAndroid Build Coastguard Worker                 'interpreter, at\n'
11321*cda5da8dSAndroid Build Coastguard Worker                 'the cost of some flexibility in the handling of special '
11322*cda5da8dSAndroid Build Coastguard Worker                 'methods (the\n'
11323*cda5da8dSAndroid Build Coastguard Worker                 'special method *must* be set on the class object itself in '
11324*cda5da8dSAndroid Build Coastguard Worker                 'order to be\n'
11325*cda5da8dSAndroid Build Coastguard Worker                 'consistently invoked by the interpreter).\n',
11326*cda5da8dSAndroid Build Coastguard Worker 'string-methods': 'String Methods\n'
11327*cda5da8dSAndroid Build Coastguard Worker                   '**************\n'
11328*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11329*cda5da8dSAndroid Build Coastguard Worker                   'Strings implement all of the common sequence operations, '
11330*cda5da8dSAndroid Build Coastguard Worker                   'along with\n'
11331*cda5da8dSAndroid Build Coastguard Worker                   'the additional methods described below.\n'
11332*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11333*cda5da8dSAndroid Build Coastguard Worker                   'Strings also support two styles of string formatting, one '
11334*cda5da8dSAndroid Build Coastguard Worker                   'providing a\n'
11335*cda5da8dSAndroid Build Coastguard Worker                   'large degree of flexibility and customization (see '
11336*cda5da8dSAndroid Build Coastguard Worker                   '"str.format()",\n'
11337*cda5da8dSAndroid Build Coastguard Worker                   'Format String Syntax and Custom String Formatting) and the '
11338*cda5da8dSAndroid Build Coastguard Worker                   'other based\n'
11339*cda5da8dSAndroid Build Coastguard Worker                   'on C "printf" style formatting that handles a narrower '
11340*cda5da8dSAndroid Build Coastguard Worker                   'range of types\n'
11341*cda5da8dSAndroid Build Coastguard Worker                   'and is slightly harder to use correctly, but is often '
11342*cda5da8dSAndroid Build Coastguard Worker                   'faster for the\n'
11343*cda5da8dSAndroid Build Coastguard Worker                   'cases it can handle (printf-style String Formatting).\n'
11344*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11345*cda5da8dSAndroid Build Coastguard Worker                   'The Text Processing Services section of the standard '
11346*cda5da8dSAndroid Build Coastguard Worker                   'library covers a\n'
11347*cda5da8dSAndroid Build Coastguard Worker                   'number of other modules that provide various text related '
11348*cda5da8dSAndroid Build Coastguard Worker                   'utilities\n'
11349*cda5da8dSAndroid Build Coastguard Worker                   '(including regular expression support in the "re" '
11350*cda5da8dSAndroid Build Coastguard Worker                   'module).\n'
11351*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11352*cda5da8dSAndroid Build Coastguard Worker                   'str.capitalize()\n'
11353*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11354*cda5da8dSAndroid Build Coastguard Worker                   '   Return a copy of the string with its first character '
11355*cda5da8dSAndroid Build Coastguard Worker                   'capitalized\n'
11356*cda5da8dSAndroid Build Coastguard Worker                   '   and the rest lowercased.\n'
11357*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11358*cda5da8dSAndroid Build Coastguard Worker                   '   Changed in version 3.8: The first character is now put '
11359*cda5da8dSAndroid Build Coastguard Worker                   'into\n'
11360*cda5da8dSAndroid Build Coastguard Worker                   '   titlecase rather than uppercase. This means that '
11361*cda5da8dSAndroid Build Coastguard Worker                   'characters like\n'
11362*cda5da8dSAndroid Build Coastguard Worker                   '   digraphs will only have their first letter capitalized, '
11363*cda5da8dSAndroid Build Coastguard Worker                   'instead of\n'
11364*cda5da8dSAndroid Build Coastguard Worker                   '   the full character.\n'
11365*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11366*cda5da8dSAndroid Build Coastguard Worker                   'str.casefold()\n'
11367*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11368*cda5da8dSAndroid Build Coastguard Worker                   '   Return a casefolded copy of the string. Casefolded '
11369*cda5da8dSAndroid Build Coastguard Worker                   'strings may be\n'
11370*cda5da8dSAndroid Build Coastguard Worker                   '   used for caseless matching.\n'
11371*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11372*cda5da8dSAndroid Build Coastguard Worker                   '   Casefolding is similar to lowercasing but more '
11373*cda5da8dSAndroid Build Coastguard Worker                   'aggressive because\n'
11374*cda5da8dSAndroid Build Coastguard Worker                   '   it is intended to remove all case distinctions in a '
11375*cda5da8dSAndroid Build Coastguard Worker                   'string. For\n'
11376*cda5da8dSAndroid Build Coastguard Worker                   '   example, the German lowercase letter "\'ß\'" is '
11377*cda5da8dSAndroid Build Coastguard Worker                   'equivalent to ""ss"".\n'
11378*cda5da8dSAndroid Build Coastguard Worker                   '   Since it is already lowercase, "lower()" would do '
11379*cda5da8dSAndroid Build Coastguard Worker                   'nothing to "\'ß\'";\n'
11380*cda5da8dSAndroid Build Coastguard Worker                   '   "casefold()" converts it to ""ss"".\n'
11381*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11382*cda5da8dSAndroid Build Coastguard Worker                   '   The casefolding algorithm is described in section 3.13 '
11383*cda5da8dSAndroid Build Coastguard Worker                   'of the\n'
11384*cda5da8dSAndroid Build Coastguard Worker                   '   Unicode Standard.\n'
11385*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11386*cda5da8dSAndroid Build Coastguard Worker                   '   New in version 3.3.\n'
11387*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11388*cda5da8dSAndroid Build Coastguard Worker                   'str.center(width[, fillchar])\n'
11389*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11390*cda5da8dSAndroid Build Coastguard Worker                   '   Return centered in a string of length *width*. Padding '
11391*cda5da8dSAndroid Build Coastguard Worker                   'is done\n'
11392*cda5da8dSAndroid Build Coastguard Worker                   '   using the specified *fillchar* (default is an ASCII '
11393*cda5da8dSAndroid Build Coastguard Worker                   'space). The\n'
11394*cda5da8dSAndroid Build Coastguard Worker                   '   original string is returned if *width* is less than or '
11395*cda5da8dSAndroid Build Coastguard Worker                   'equal to\n'
11396*cda5da8dSAndroid Build Coastguard Worker                   '   "len(s)".\n'
11397*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11398*cda5da8dSAndroid Build Coastguard Worker                   'str.count(sub[, start[, end]])\n'
11399*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11400*cda5da8dSAndroid Build Coastguard Worker                   '   Return the number of non-overlapping occurrences of '
11401*cda5da8dSAndroid Build Coastguard Worker                   'substring *sub*\n'
11402*cda5da8dSAndroid Build Coastguard Worker                   '   in the range [*start*, *end*].  Optional arguments '
11403*cda5da8dSAndroid Build Coastguard Worker                   '*start* and\n'
11404*cda5da8dSAndroid Build Coastguard Worker                   '   *end* are interpreted as in slice notation.\n'
11405*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11406*cda5da8dSAndroid Build Coastguard Worker                   '   If *sub* is empty, returns the number of empty strings '
11407*cda5da8dSAndroid Build Coastguard Worker                   'between\n'
11408*cda5da8dSAndroid Build Coastguard Worker                   '   characters which is the length of the string plus one.\n'
11409*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11410*cda5da8dSAndroid Build Coastguard Worker                   "str.encode(encoding='utf-8', errors='strict')\n"
11411*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11412*cda5da8dSAndroid Build Coastguard Worker                   '   Return the string encoded to "bytes".\n'
11413*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11414*cda5da8dSAndroid Build Coastguard Worker                   '   *encoding* defaults to "\'utf-8\'"; see Standard '
11415*cda5da8dSAndroid Build Coastguard Worker                   'Encodings for\n'
11416*cda5da8dSAndroid Build Coastguard Worker                   '   possible values.\n'
11417*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11418*cda5da8dSAndroid Build Coastguard Worker                   '   *errors* controls how encoding errors are handled. If '
11419*cda5da8dSAndroid Build Coastguard Worker                   '"\'strict\'"\n'
11420*cda5da8dSAndroid Build Coastguard Worker                   '   (the default), a "UnicodeError" exception is raised. '
11421*cda5da8dSAndroid Build Coastguard Worker                   'Other possible\n'
11422*cda5da8dSAndroid Build Coastguard Worker                   '   values are "\'ignore\'", "\'replace\'", '
11423*cda5da8dSAndroid Build Coastguard Worker                   '"\'xmlcharrefreplace\'",\n'
11424*cda5da8dSAndroid Build Coastguard Worker                   '   "\'backslashreplace\'" and any other name registered '
11425*cda5da8dSAndroid Build Coastguard Worker                   'via\n'
11426*cda5da8dSAndroid Build Coastguard Worker                   '   "codecs.register_error()". See Error Handlers for '
11427*cda5da8dSAndroid Build Coastguard Worker                   'details.\n'
11428*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11429*cda5da8dSAndroid Build Coastguard Worker                   '   For performance reasons, the value of *errors* is not '
11430*cda5da8dSAndroid Build Coastguard Worker                   'checked for\n'
11431*cda5da8dSAndroid Build Coastguard Worker                   '   validity unless an encoding error actually occurs, '
11432*cda5da8dSAndroid Build Coastguard Worker                   'Python\n'
11433*cda5da8dSAndroid Build Coastguard Worker                   '   Development Mode is enabled or a debug build is used.\n'
11434*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11435*cda5da8dSAndroid Build Coastguard Worker                   '   Changed in version 3.1: Added support for keyword '
11436*cda5da8dSAndroid Build Coastguard Worker                   'arguments.\n'
11437*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11438*cda5da8dSAndroid Build Coastguard Worker                   '   Changed in version 3.9: The value of the *errors* '
11439*cda5da8dSAndroid Build Coastguard Worker                   'argument is now\n'
11440*cda5da8dSAndroid Build Coastguard Worker                   '   checked in Python Development Mode and in debug mode.\n'
11441*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11442*cda5da8dSAndroid Build Coastguard Worker                   'str.endswith(suffix[, start[, end]])\n'
11443*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11444*cda5da8dSAndroid Build Coastguard Worker                   '   Return "True" if the string ends with the specified '
11445*cda5da8dSAndroid Build Coastguard Worker                   '*suffix*,\n'
11446*cda5da8dSAndroid Build Coastguard Worker                   '   otherwise return "False".  *suffix* can also be a tuple '
11447*cda5da8dSAndroid Build Coastguard Worker                   'of suffixes\n'
11448*cda5da8dSAndroid Build Coastguard Worker                   '   to look for.  With optional *start*, test beginning at '
11449*cda5da8dSAndroid Build Coastguard Worker                   'that\n'
11450*cda5da8dSAndroid Build Coastguard Worker                   '   position.  With optional *end*, stop comparing at that '
11451*cda5da8dSAndroid Build Coastguard Worker                   'position.\n'
11452*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11453*cda5da8dSAndroid Build Coastguard Worker                   'str.expandtabs(tabsize=8)\n'
11454*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11455*cda5da8dSAndroid Build Coastguard Worker                   '   Return a copy of the string where all tab characters '
11456*cda5da8dSAndroid Build Coastguard Worker                   'are replaced\n'
11457*cda5da8dSAndroid Build Coastguard Worker                   '   by one or more spaces, depending on the current column '
11458*cda5da8dSAndroid Build Coastguard Worker                   'and the\n'
11459*cda5da8dSAndroid Build Coastguard Worker                   '   given tab size.  Tab positions occur every *tabsize* '
11460*cda5da8dSAndroid Build Coastguard Worker                   'characters\n'
11461*cda5da8dSAndroid Build Coastguard Worker                   '   (default is 8, giving tab positions at columns 0, 8, 16 '
11462*cda5da8dSAndroid Build Coastguard Worker                   'and so on).\n'
11463*cda5da8dSAndroid Build Coastguard Worker                   '   To expand the string, the current column is set to zero '
11464*cda5da8dSAndroid Build Coastguard Worker                   'and the\n'
11465*cda5da8dSAndroid Build Coastguard Worker                   '   string is examined character by character.  If the '
11466*cda5da8dSAndroid Build Coastguard Worker                   'character is a\n'
11467*cda5da8dSAndroid Build Coastguard Worker                   '   tab ("\\t"), one or more space characters are inserted '
11468*cda5da8dSAndroid Build Coastguard Worker                   'in the result\n'
11469*cda5da8dSAndroid Build Coastguard Worker                   '   until the current column is equal to the next tab '
11470*cda5da8dSAndroid Build Coastguard Worker                   'position. (The\n'
11471*cda5da8dSAndroid Build Coastguard Worker                   '   tab character itself is not copied.)  If the character '
11472*cda5da8dSAndroid Build Coastguard Worker                   'is a newline\n'
11473*cda5da8dSAndroid Build Coastguard Worker                   '   ("\\n") or return ("\\r"), it is copied and the current '
11474*cda5da8dSAndroid Build Coastguard Worker                   'column is\n'
11475*cda5da8dSAndroid Build Coastguard Worker                   '   reset to zero.  Any other character is copied unchanged '
11476*cda5da8dSAndroid Build Coastguard Worker                   'and the\n'
11477*cda5da8dSAndroid Build Coastguard Worker                   '   current column is incremented by one regardless of how '
11478*cda5da8dSAndroid Build Coastguard Worker                   'the\n'
11479*cda5da8dSAndroid Build Coastguard Worker                   '   character is represented when printed.\n'
11480*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11481*cda5da8dSAndroid Build Coastguard Worker                   "   >>> '01\\t012\\t0123\\t01234'.expandtabs()\n"
11482*cda5da8dSAndroid Build Coastguard Worker                   "   '01      012     0123    01234'\n"
11483*cda5da8dSAndroid Build Coastguard Worker                   "   >>> '01\\t012\\t0123\\t01234'.expandtabs(4)\n"
11484*cda5da8dSAndroid Build Coastguard Worker                   "   '01  012 0123    01234'\n"
11485*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11486*cda5da8dSAndroid Build Coastguard Worker                   'str.find(sub[, start[, end]])\n'
11487*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11488*cda5da8dSAndroid Build Coastguard Worker                   '   Return the lowest index in the string where substring '
11489*cda5da8dSAndroid Build Coastguard Worker                   '*sub* is\n'
11490*cda5da8dSAndroid Build Coastguard Worker                   '   found within the slice "s[start:end]".  Optional '
11491*cda5da8dSAndroid Build Coastguard Worker                   'arguments *start*\n'
11492*cda5da8dSAndroid Build Coastguard Worker                   '   and *end* are interpreted as in slice notation.  Return '
11493*cda5da8dSAndroid Build Coastguard Worker                   '"-1" if\n'
11494*cda5da8dSAndroid Build Coastguard Worker                   '   *sub* is not found.\n'
11495*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11496*cda5da8dSAndroid Build Coastguard Worker                   '   Note:\n'
11497*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11498*cda5da8dSAndroid Build Coastguard Worker                   '     The "find()" method should be used only if you need '
11499*cda5da8dSAndroid Build Coastguard Worker                   'to know the\n'
11500*cda5da8dSAndroid Build Coastguard Worker                   '     position of *sub*.  To check if *sub* is a substring '
11501*cda5da8dSAndroid Build Coastguard Worker                   'or not, use\n'
11502*cda5da8dSAndroid Build Coastguard Worker                   '     the "in" operator:\n'
11503*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11504*cda5da8dSAndroid Build Coastguard Worker                   "        >>> 'Py' in 'Python'\n"
11505*cda5da8dSAndroid Build Coastguard Worker                   '        True\n'
11506*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11507*cda5da8dSAndroid Build Coastguard Worker                   'str.format(*args, **kwargs)\n'
11508*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11509*cda5da8dSAndroid Build Coastguard Worker                   '   Perform a string formatting operation.  The string on '
11510*cda5da8dSAndroid Build Coastguard Worker                   'which this\n'
11511*cda5da8dSAndroid Build Coastguard Worker                   '   method is called can contain literal text or '
11512*cda5da8dSAndroid Build Coastguard Worker                   'replacement fields\n'
11513*cda5da8dSAndroid Build Coastguard Worker                   '   delimited by braces "{}".  Each replacement field '
11514*cda5da8dSAndroid Build Coastguard Worker                   'contains either\n'
11515*cda5da8dSAndroid Build Coastguard Worker                   '   the numeric index of a positional argument, or the name '
11516*cda5da8dSAndroid Build Coastguard Worker                   'of a\n'
11517*cda5da8dSAndroid Build Coastguard Worker                   '   keyword argument.  Returns a copy of the string where '
11518*cda5da8dSAndroid Build Coastguard Worker                   'each\n'
11519*cda5da8dSAndroid Build Coastguard Worker                   '   replacement field is replaced with the string value of '
11520*cda5da8dSAndroid Build Coastguard Worker                   'the\n'
11521*cda5da8dSAndroid Build Coastguard Worker                   '   corresponding argument.\n'
11522*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11523*cda5da8dSAndroid Build Coastguard Worker                   '   >>> "The sum of 1 + 2 is {0}".format(1+2)\n'
11524*cda5da8dSAndroid Build Coastguard Worker                   "   'The sum of 1 + 2 is 3'\n"
11525*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11526*cda5da8dSAndroid Build Coastguard Worker                   '   See Format String Syntax for a description of the '
11527*cda5da8dSAndroid Build Coastguard Worker                   'various\n'
11528*cda5da8dSAndroid Build Coastguard Worker                   '   formatting options that can be specified in format '
11529*cda5da8dSAndroid Build Coastguard Worker                   'strings.\n'
11530*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11531*cda5da8dSAndroid Build Coastguard Worker                   '   Note:\n'
11532*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11533*cda5da8dSAndroid Build Coastguard Worker                   '     When formatting a number ("int", "float", "complex",\n'
11534*cda5da8dSAndroid Build Coastguard Worker                   '     "decimal.Decimal" and subclasses) with the "n" type '
11535*cda5da8dSAndroid Build Coastguard Worker                   '(ex:\n'
11536*cda5da8dSAndroid Build Coastguard Worker                   '     "\'{:n}\'.format(1234)"), the function temporarily '
11537*cda5da8dSAndroid Build Coastguard Worker                   'sets the\n'
11538*cda5da8dSAndroid Build Coastguard Worker                   '     "LC_CTYPE" locale to the "LC_NUMERIC" locale to '
11539*cda5da8dSAndroid Build Coastguard Worker                   'decode\n'
11540*cda5da8dSAndroid Build Coastguard Worker                   '     "decimal_point" and "thousands_sep" fields of '
11541*cda5da8dSAndroid Build Coastguard Worker                   '"localeconv()" if\n'
11542*cda5da8dSAndroid Build Coastguard Worker                   '     they are non-ASCII or longer than 1 byte, and the '
11543*cda5da8dSAndroid Build Coastguard Worker                   '"LC_NUMERIC"\n'
11544*cda5da8dSAndroid Build Coastguard Worker                   '     locale is different than the "LC_CTYPE" locale.  This '
11545*cda5da8dSAndroid Build Coastguard Worker                   'temporary\n'
11546*cda5da8dSAndroid Build Coastguard Worker                   '     change affects other threads.\n'
11547*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11548*cda5da8dSAndroid Build Coastguard Worker                   '   Changed in version 3.7: When formatting a number with '
11549*cda5da8dSAndroid Build Coastguard Worker                   'the "n" type,\n'
11550*cda5da8dSAndroid Build Coastguard Worker                   '   the function sets temporarily the "LC_CTYPE" locale to '
11551*cda5da8dSAndroid Build Coastguard Worker                   'the\n'
11552*cda5da8dSAndroid Build Coastguard Worker                   '   "LC_NUMERIC" locale in some cases.\n'
11553*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11554*cda5da8dSAndroid Build Coastguard Worker                   'str.format_map(mapping)\n'
11555*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11556*cda5da8dSAndroid Build Coastguard Worker                   '   Similar to "str.format(**mapping)", except that '
11557*cda5da8dSAndroid Build Coastguard Worker                   '"mapping" is used\n'
11558*cda5da8dSAndroid Build Coastguard Worker                   '   directly and not copied to a "dict".  This is useful if '
11559*cda5da8dSAndroid Build Coastguard Worker                   'for example\n'
11560*cda5da8dSAndroid Build Coastguard Worker                   '   "mapping" is a dict subclass:\n'
11561*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11562*cda5da8dSAndroid Build Coastguard Worker                   '   >>> class Default(dict):\n'
11563*cda5da8dSAndroid Build Coastguard Worker                   '   ...     def __missing__(self, key):\n'
11564*cda5da8dSAndroid Build Coastguard Worker                   '   ...         return key\n'
11565*cda5da8dSAndroid Build Coastguard Worker                   '   ...\n'
11566*cda5da8dSAndroid Build Coastguard Worker                   "   >>> '{name} was born in "
11567*cda5da8dSAndroid Build Coastguard Worker                   "{country}'.format_map(Default(name='Guido'))\n"
11568*cda5da8dSAndroid Build Coastguard Worker                   "   'Guido was born in country'\n"
11569*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11570*cda5da8dSAndroid Build Coastguard Worker                   '   New in version 3.2.\n'
11571*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11572*cda5da8dSAndroid Build Coastguard Worker                   'str.index(sub[, start[, end]])\n'
11573*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11574*cda5da8dSAndroid Build Coastguard Worker                   '   Like "find()", but raise "ValueError" when the '
11575*cda5da8dSAndroid Build Coastguard Worker                   'substring is not\n'
11576*cda5da8dSAndroid Build Coastguard Worker                   '   found.\n'
11577*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11578*cda5da8dSAndroid Build Coastguard Worker                   'str.isalnum()\n'
11579*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11580*cda5da8dSAndroid Build Coastguard Worker                   '   Return "True" if all characters in the string are '
11581*cda5da8dSAndroid Build Coastguard Worker                   'alphanumeric and\n'
11582*cda5da8dSAndroid Build Coastguard Worker                   '   there is at least one character, "False" otherwise.  A '
11583*cda5da8dSAndroid Build Coastguard Worker                   'character\n'
11584*cda5da8dSAndroid Build Coastguard Worker                   '   "c" is alphanumeric if one of the following returns '
11585*cda5da8dSAndroid Build Coastguard Worker                   '"True":\n'
11586*cda5da8dSAndroid Build Coastguard Worker                   '   "c.isalpha()", "c.isdecimal()", "c.isdigit()", or '
11587*cda5da8dSAndroid Build Coastguard Worker                   '"c.isnumeric()".\n'
11588*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11589*cda5da8dSAndroid Build Coastguard Worker                   'str.isalpha()\n'
11590*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11591*cda5da8dSAndroid Build Coastguard Worker                   '   Return "True" if all characters in the string are '
11592*cda5da8dSAndroid Build Coastguard Worker                   'alphabetic and\n'
11593*cda5da8dSAndroid Build Coastguard Worker                   '   there is at least one character, "False" otherwise.  '
11594*cda5da8dSAndroid Build Coastguard Worker                   'Alphabetic\n'
11595*cda5da8dSAndroid Build Coastguard Worker                   '   characters are those characters defined in the Unicode '
11596*cda5da8dSAndroid Build Coastguard Worker                   'character\n'
11597*cda5da8dSAndroid Build Coastguard Worker                   '   database as “Letter”, i.e., those with general category '
11598*cda5da8dSAndroid Build Coastguard Worker                   'property\n'
11599*cda5da8dSAndroid Build Coastguard Worker                   '   being one of “Lm”, “Lt”, “Lu”, “Ll”, or “Lo”.  Note '
11600*cda5da8dSAndroid Build Coastguard Worker                   'that this is\n'
11601*cda5da8dSAndroid Build Coastguard Worker                   '   different from the “Alphabetic” property defined in the '
11602*cda5da8dSAndroid Build Coastguard Worker                   'Unicode\n'
11603*cda5da8dSAndroid Build Coastguard Worker                   '   Standard.\n'
11604*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11605*cda5da8dSAndroid Build Coastguard Worker                   'str.isascii()\n'
11606*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11607*cda5da8dSAndroid Build Coastguard Worker                   '   Return "True" if the string is empty or all characters '
11608*cda5da8dSAndroid Build Coastguard Worker                   'in the\n'
11609*cda5da8dSAndroid Build Coastguard Worker                   '   string are ASCII, "False" otherwise. ASCII characters '
11610*cda5da8dSAndroid Build Coastguard Worker                   'have code\n'
11611*cda5da8dSAndroid Build Coastguard Worker                   '   points in the range U+0000-U+007F.\n'
11612*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11613*cda5da8dSAndroid Build Coastguard Worker                   '   New in version 3.7.\n'
11614*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11615*cda5da8dSAndroid Build Coastguard Worker                   'str.isdecimal()\n'
11616*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11617*cda5da8dSAndroid Build Coastguard Worker                   '   Return "True" if all characters in the string are '
11618*cda5da8dSAndroid Build Coastguard Worker                   'decimal\n'
11619*cda5da8dSAndroid Build Coastguard Worker                   '   characters and there is at least one character, "False" '
11620*cda5da8dSAndroid Build Coastguard Worker                   'otherwise.\n'
11621*cda5da8dSAndroid Build Coastguard Worker                   '   Decimal characters are those that can be used to form '
11622*cda5da8dSAndroid Build Coastguard Worker                   'numbers in\n'
11623*cda5da8dSAndroid Build Coastguard Worker                   '   base 10, e.g. U+0660, ARABIC-INDIC DIGIT ZERO.  '
11624*cda5da8dSAndroid Build Coastguard Worker                   'Formally a decimal\n'
11625*cda5da8dSAndroid Build Coastguard Worker                   '   character is a character in the Unicode General '
11626*cda5da8dSAndroid Build Coastguard Worker                   'Category “Nd”.\n'
11627*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11628*cda5da8dSAndroid Build Coastguard Worker                   'str.isdigit()\n'
11629*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11630*cda5da8dSAndroid Build Coastguard Worker                   '   Return "True" if all characters in the string are '
11631*cda5da8dSAndroid Build Coastguard Worker                   'digits and there\n'
11632*cda5da8dSAndroid Build Coastguard Worker                   '   is at least one character, "False" otherwise.  Digits '
11633*cda5da8dSAndroid Build Coastguard Worker                   'include\n'
11634*cda5da8dSAndroid Build Coastguard Worker                   '   decimal characters and digits that need special '
11635*cda5da8dSAndroid Build Coastguard Worker                   'handling, such as\n'
11636*cda5da8dSAndroid Build Coastguard Worker                   '   the compatibility superscript digits. This covers '
11637*cda5da8dSAndroid Build Coastguard Worker                   'digits which\n'
11638*cda5da8dSAndroid Build Coastguard Worker                   '   cannot be used to form numbers in base 10, like the '
11639*cda5da8dSAndroid Build Coastguard Worker                   'Kharosthi\n'
11640*cda5da8dSAndroid Build Coastguard Worker                   '   numbers.  Formally, a digit is a character that has the '
11641*cda5da8dSAndroid Build Coastguard Worker                   'property\n'
11642*cda5da8dSAndroid Build Coastguard Worker                   '   value Numeric_Type=Digit or Numeric_Type=Decimal.\n'
11643*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11644*cda5da8dSAndroid Build Coastguard Worker                   'str.isidentifier()\n'
11645*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11646*cda5da8dSAndroid Build Coastguard Worker                   '   Return "True" if the string is a valid identifier '
11647*cda5da8dSAndroid Build Coastguard Worker                   'according to the\n'
11648*cda5da8dSAndroid Build Coastguard Worker                   '   language definition, section Identifiers and keywords.\n'
11649*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11650*cda5da8dSAndroid Build Coastguard Worker                   '   Call "keyword.iskeyword()" to test whether string "s" '
11651*cda5da8dSAndroid Build Coastguard Worker                   'is a reserved\n'
11652*cda5da8dSAndroid Build Coastguard Worker                   '   identifier, such as "def" and "class".\n'
11653*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11654*cda5da8dSAndroid Build Coastguard Worker                   '   Example:\n'
11655*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11656*cda5da8dSAndroid Build Coastguard Worker                   '      >>> from keyword import iskeyword\n'
11657*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11658*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'hello'.isidentifier(), iskeyword('hello')\n"
11659*cda5da8dSAndroid Build Coastguard Worker                   '      (True, False)\n'
11660*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'def'.isidentifier(), iskeyword('def')\n"
11661*cda5da8dSAndroid Build Coastguard Worker                   '      (True, True)\n'
11662*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11663*cda5da8dSAndroid Build Coastguard Worker                   'str.islower()\n'
11664*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11665*cda5da8dSAndroid Build Coastguard Worker                   '   Return "True" if all cased characters [4] in the string '
11666*cda5da8dSAndroid Build Coastguard Worker                   'are\n'
11667*cda5da8dSAndroid Build Coastguard Worker                   '   lowercase and there is at least one cased character, '
11668*cda5da8dSAndroid Build Coastguard Worker                   '"False"\n'
11669*cda5da8dSAndroid Build Coastguard Worker                   '   otherwise.\n'
11670*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11671*cda5da8dSAndroid Build Coastguard Worker                   'str.isnumeric()\n'
11672*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11673*cda5da8dSAndroid Build Coastguard Worker                   '   Return "True" if all characters in the string are '
11674*cda5da8dSAndroid Build Coastguard Worker                   'numeric\n'
11675*cda5da8dSAndroid Build Coastguard Worker                   '   characters, and there is at least one character, '
11676*cda5da8dSAndroid Build Coastguard Worker                   '"False" otherwise.\n'
11677*cda5da8dSAndroid Build Coastguard Worker                   '   Numeric characters include digit characters, and all '
11678*cda5da8dSAndroid Build Coastguard Worker                   'characters\n'
11679*cda5da8dSAndroid Build Coastguard Worker                   '   that have the Unicode numeric value property, e.g. '
11680*cda5da8dSAndroid Build Coastguard Worker                   'U+2155, VULGAR\n'
11681*cda5da8dSAndroid Build Coastguard Worker                   '   FRACTION ONE FIFTH.  Formally, numeric characters are '
11682*cda5da8dSAndroid Build Coastguard Worker                   'those with\n'
11683*cda5da8dSAndroid Build Coastguard Worker                   '   the property value Numeric_Type=Digit, '
11684*cda5da8dSAndroid Build Coastguard Worker                   'Numeric_Type=Decimal or\n'
11685*cda5da8dSAndroid Build Coastguard Worker                   '   Numeric_Type=Numeric.\n'
11686*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11687*cda5da8dSAndroid Build Coastguard Worker                   'str.isprintable()\n'
11688*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11689*cda5da8dSAndroid Build Coastguard Worker                   '   Return "True" if all characters in the string are '
11690*cda5da8dSAndroid Build Coastguard Worker                   'printable or the\n'
11691*cda5da8dSAndroid Build Coastguard Worker                   '   string is empty, "False" otherwise.  Nonprintable '
11692*cda5da8dSAndroid Build Coastguard Worker                   'characters are\n'
11693*cda5da8dSAndroid Build Coastguard Worker                   '   those characters defined in the Unicode character '
11694*cda5da8dSAndroid Build Coastguard Worker                   'database as\n'
11695*cda5da8dSAndroid Build Coastguard Worker                   '   “Other” or “Separator”, excepting the ASCII space '
11696*cda5da8dSAndroid Build Coastguard Worker                   '(0x20) which is\n'
11697*cda5da8dSAndroid Build Coastguard Worker                   '   considered printable.  (Note that printable characters '
11698*cda5da8dSAndroid Build Coastguard Worker                   'in this\n'
11699*cda5da8dSAndroid Build Coastguard Worker                   '   context are those which should not be escaped when '
11700*cda5da8dSAndroid Build Coastguard Worker                   '"repr()" is\n'
11701*cda5da8dSAndroid Build Coastguard Worker                   '   invoked on a string.  It has no bearing on the handling '
11702*cda5da8dSAndroid Build Coastguard Worker                   'of strings\n'
11703*cda5da8dSAndroid Build Coastguard Worker                   '   written to "sys.stdout" or "sys.stderr".)\n'
11704*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11705*cda5da8dSAndroid Build Coastguard Worker                   'str.isspace()\n'
11706*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11707*cda5da8dSAndroid Build Coastguard Worker                   '   Return "True" if there are only whitespace characters '
11708*cda5da8dSAndroid Build Coastguard Worker                   'in the string\n'
11709*cda5da8dSAndroid Build Coastguard Worker                   '   and there is at least one character, "False" '
11710*cda5da8dSAndroid Build Coastguard Worker                   'otherwise.\n'
11711*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11712*cda5da8dSAndroid Build Coastguard Worker                   '   A character is *whitespace* if in the Unicode character '
11713*cda5da8dSAndroid Build Coastguard Worker                   'database\n'
11714*cda5da8dSAndroid Build Coastguard Worker                   '   (see "unicodedata"), either its general category is '
11715*cda5da8dSAndroid Build Coastguard Worker                   '"Zs"\n'
11716*cda5da8dSAndroid Build Coastguard Worker                   '   (“Separator, space”), or its bidirectional class is one '
11717*cda5da8dSAndroid Build Coastguard Worker                   'of "WS",\n'
11718*cda5da8dSAndroid Build Coastguard Worker                   '   "B", or "S".\n'
11719*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11720*cda5da8dSAndroid Build Coastguard Worker                   'str.istitle()\n'
11721*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11722*cda5da8dSAndroid Build Coastguard Worker                   '   Return "True" if the string is a titlecased string and '
11723*cda5da8dSAndroid Build Coastguard Worker                   'there is at\n'
11724*cda5da8dSAndroid Build Coastguard Worker                   '   least one character, for example uppercase characters '
11725*cda5da8dSAndroid Build Coastguard Worker                   'may only\n'
11726*cda5da8dSAndroid Build Coastguard Worker                   '   follow uncased characters and lowercase characters only '
11727*cda5da8dSAndroid Build Coastguard Worker                   'cased ones.\n'
11728*cda5da8dSAndroid Build Coastguard Worker                   '   Return "False" otherwise.\n'
11729*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11730*cda5da8dSAndroid Build Coastguard Worker                   'str.isupper()\n'
11731*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11732*cda5da8dSAndroid Build Coastguard Worker                   '   Return "True" if all cased characters [4] in the string '
11733*cda5da8dSAndroid Build Coastguard Worker                   'are\n'
11734*cda5da8dSAndroid Build Coastguard Worker                   '   uppercase and there is at least one cased character, '
11735*cda5da8dSAndroid Build Coastguard Worker                   '"False"\n'
11736*cda5da8dSAndroid Build Coastguard Worker                   '   otherwise.\n'
11737*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11738*cda5da8dSAndroid Build Coastguard Worker                   "   >>> 'BANANA'.isupper()\n"
11739*cda5da8dSAndroid Build Coastguard Worker                   '   True\n'
11740*cda5da8dSAndroid Build Coastguard Worker                   "   >>> 'banana'.isupper()\n"
11741*cda5da8dSAndroid Build Coastguard Worker                   '   False\n'
11742*cda5da8dSAndroid Build Coastguard Worker                   "   >>> 'baNana'.isupper()\n"
11743*cda5da8dSAndroid Build Coastguard Worker                   '   False\n'
11744*cda5da8dSAndroid Build Coastguard Worker                   "   >>> ' '.isupper()\n"
11745*cda5da8dSAndroid Build Coastguard Worker                   '   False\n'
11746*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11747*cda5da8dSAndroid Build Coastguard Worker                   'str.join(iterable)\n'
11748*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11749*cda5da8dSAndroid Build Coastguard Worker                   '   Return a string which is the concatenation of the '
11750*cda5da8dSAndroid Build Coastguard Worker                   'strings in\n'
11751*cda5da8dSAndroid Build Coastguard Worker                   '   *iterable*. A "TypeError" will be raised if there are '
11752*cda5da8dSAndroid Build Coastguard Worker                   'any non-\n'
11753*cda5da8dSAndroid Build Coastguard Worker                   '   string values in *iterable*, including "bytes" '
11754*cda5da8dSAndroid Build Coastguard Worker                   'objects.  The\n'
11755*cda5da8dSAndroid Build Coastguard Worker                   '   separator between elements is the string providing this '
11756*cda5da8dSAndroid Build Coastguard Worker                   'method.\n'
11757*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11758*cda5da8dSAndroid Build Coastguard Worker                   'str.ljust(width[, fillchar])\n'
11759*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11760*cda5da8dSAndroid Build Coastguard Worker                   '   Return the string left justified in a string of length '
11761*cda5da8dSAndroid Build Coastguard Worker                   '*width*.\n'
11762*cda5da8dSAndroid Build Coastguard Worker                   '   Padding is done using the specified *fillchar* (default '
11763*cda5da8dSAndroid Build Coastguard Worker                   'is an ASCII\n'
11764*cda5da8dSAndroid Build Coastguard Worker                   '   space). The original string is returned if *width* is '
11765*cda5da8dSAndroid Build Coastguard Worker                   'less than or\n'
11766*cda5da8dSAndroid Build Coastguard Worker                   '   equal to "len(s)".\n'
11767*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11768*cda5da8dSAndroid Build Coastguard Worker                   'str.lower()\n'
11769*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11770*cda5da8dSAndroid Build Coastguard Worker                   '   Return a copy of the string with all the cased '
11771*cda5da8dSAndroid Build Coastguard Worker                   'characters [4]\n'
11772*cda5da8dSAndroid Build Coastguard Worker                   '   converted to lowercase.\n'
11773*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11774*cda5da8dSAndroid Build Coastguard Worker                   '   The lowercasing algorithm used is described in section '
11775*cda5da8dSAndroid Build Coastguard Worker                   '3.13 of the\n'
11776*cda5da8dSAndroid Build Coastguard Worker                   '   Unicode Standard.\n'
11777*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11778*cda5da8dSAndroid Build Coastguard Worker                   'str.lstrip([chars])\n'
11779*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11780*cda5da8dSAndroid Build Coastguard Worker                   '   Return a copy of the string with leading characters '
11781*cda5da8dSAndroid Build Coastguard Worker                   'removed.  The\n'
11782*cda5da8dSAndroid Build Coastguard Worker                   '   *chars* argument is a string specifying the set of '
11783*cda5da8dSAndroid Build Coastguard Worker                   'characters to be\n'
11784*cda5da8dSAndroid Build Coastguard Worker                   '   removed.  If omitted or "None", the *chars* argument '
11785*cda5da8dSAndroid Build Coastguard Worker                   'defaults to\n'
11786*cda5da8dSAndroid Build Coastguard Worker                   '   removing whitespace.  The *chars* argument is not a '
11787*cda5da8dSAndroid Build Coastguard Worker                   'prefix; rather,\n'
11788*cda5da8dSAndroid Build Coastguard Worker                   '   all combinations of its values are stripped:\n'
11789*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11790*cda5da8dSAndroid Build Coastguard Worker                   "      >>> '   spacious   '.lstrip()\n"
11791*cda5da8dSAndroid Build Coastguard Worker                   "      'spacious   '\n"
11792*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'www.example.com'.lstrip('cmowz.')\n"
11793*cda5da8dSAndroid Build Coastguard Worker                   "      'example.com'\n"
11794*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11795*cda5da8dSAndroid Build Coastguard Worker                   '   See "str.removeprefix()" for a method that will remove '
11796*cda5da8dSAndroid Build Coastguard Worker                   'a single\n'
11797*cda5da8dSAndroid Build Coastguard Worker                   '   prefix string rather than all of a set of characters.  '
11798*cda5da8dSAndroid Build Coastguard Worker                   'For example:\n'
11799*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11800*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'Arthur: three!'.lstrip('Arthur: ')\n"
11801*cda5da8dSAndroid Build Coastguard Worker                   "      'ee!'\n"
11802*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'Arthur: three!'.removeprefix('Arthur: ')\n"
11803*cda5da8dSAndroid Build Coastguard Worker                   "      'three!'\n"
11804*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11805*cda5da8dSAndroid Build Coastguard Worker                   'static str.maketrans(x[, y[, z]])\n'
11806*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11807*cda5da8dSAndroid Build Coastguard Worker                   '   This static method returns a translation table usable '
11808*cda5da8dSAndroid Build Coastguard Worker                   'for\n'
11809*cda5da8dSAndroid Build Coastguard Worker                   '   "str.translate()".\n'
11810*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11811*cda5da8dSAndroid Build Coastguard Worker                   '   If there is only one argument, it must be a dictionary '
11812*cda5da8dSAndroid Build Coastguard Worker                   'mapping\n'
11813*cda5da8dSAndroid Build Coastguard Worker                   '   Unicode ordinals (integers) or characters (strings of '
11814*cda5da8dSAndroid Build Coastguard Worker                   'length 1) to\n'
11815*cda5da8dSAndroid Build Coastguard Worker                   '   Unicode ordinals, strings (of arbitrary lengths) or '
11816*cda5da8dSAndroid Build Coastguard Worker                   '"None".\n'
11817*cda5da8dSAndroid Build Coastguard Worker                   '   Character keys will then be converted to ordinals.\n'
11818*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11819*cda5da8dSAndroid Build Coastguard Worker                   '   If there are two arguments, they must be strings of '
11820*cda5da8dSAndroid Build Coastguard Worker                   'equal length,\n'
11821*cda5da8dSAndroid Build Coastguard Worker                   '   and in the resulting dictionary, each character in x '
11822*cda5da8dSAndroid Build Coastguard Worker                   'will be mapped\n'
11823*cda5da8dSAndroid Build Coastguard Worker                   '   to the character at the same position in y.  If there '
11824*cda5da8dSAndroid Build Coastguard Worker                   'is a third\n'
11825*cda5da8dSAndroid Build Coastguard Worker                   '   argument, it must be a string, whose characters will be '
11826*cda5da8dSAndroid Build Coastguard Worker                   'mapped to\n'
11827*cda5da8dSAndroid Build Coastguard Worker                   '   "None" in the result.\n'
11828*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11829*cda5da8dSAndroid Build Coastguard Worker                   'str.partition(sep)\n'
11830*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11831*cda5da8dSAndroid Build Coastguard Worker                   '   Split the string at the first occurrence of *sep*, and '
11832*cda5da8dSAndroid Build Coastguard Worker                   'return a\n'
11833*cda5da8dSAndroid Build Coastguard Worker                   '   3-tuple containing the part before the separator, the '
11834*cda5da8dSAndroid Build Coastguard Worker                   'separator\n'
11835*cda5da8dSAndroid Build Coastguard Worker                   '   itself, and the part after the separator.  If the '
11836*cda5da8dSAndroid Build Coastguard Worker                   'separator is not\n'
11837*cda5da8dSAndroid Build Coastguard Worker                   '   found, return a 3-tuple containing the string itself, '
11838*cda5da8dSAndroid Build Coastguard Worker                   'followed by\n'
11839*cda5da8dSAndroid Build Coastguard Worker                   '   two empty strings.\n'
11840*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11841*cda5da8dSAndroid Build Coastguard Worker                   'str.removeprefix(prefix, /)\n'
11842*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11843*cda5da8dSAndroid Build Coastguard Worker                   '   If the string starts with the *prefix* string, return\n'
11844*cda5da8dSAndroid Build Coastguard Worker                   '   "string[len(prefix):]". Otherwise, return a copy of the '
11845*cda5da8dSAndroid Build Coastguard Worker                   'original\n'
11846*cda5da8dSAndroid Build Coastguard Worker                   '   string:\n'
11847*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11848*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'TestHook'.removeprefix('Test')\n"
11849*cda5da8dSAndroid Build Coastguard Worker                   "      'Hook'\n"
11850*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'BaseTestCase'.removeprefix('Test')\n"
11851*cda5da8dSAndroid Build Coastguard Worker                   "      'BaseTestCase'\n"
11852*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11853*cda5da8dSAndroid Build Coastguard Worker                   '   New in version 3.9.\n'
11854*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11855*cda5da8dSAndroid Build Coastguard Worker                   'str.removesuffix(suffix, /)\n'
11856*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11857*cda5da8dSAndroid Build Coastguard Worker                   '   If the string ends with the *suffix* string and that '
11858*cda5da8dSAndroid Build Coastguard Worker                   '*suffix* is\n'
11859*cda5da8dSAndroid Build Coastguard Worker                   '   not empty, return "string[:-len(suffix)]". Otherwise, '
11860*cda5da8dSAndroid Build Coastguard Worker                   'return a copy\n'
11861*cda5da8dSAndroid Build Coastguard Worker                   '   of the original string:\n'
11862*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11863*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'MiscTests'.removesuffix('Tests')\n"
11864*cda5da8dSAndroid Build Coastguard Worker                   "      'Misc'\n"
11865*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'TmpDirMixin'.removesuffix('Tests')\n"
11866*cda5da8dSAndroid Build Coastguard Worker                   "      'TmpDirMixin'\n"
11867*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11868*cda5da8dSAndroid Build Coastguard Worker                   '   New in version 3.9.\n'
11869*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11870*cda5da8dSAndroid Build Coastguard Worker                   'str.replace(old, new[, count])\n'
11871*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11872*cda5da8dSAndroid Build Coastguard Worker                   '   Return a copy of the string with all occurrences of '
11873*cda5da8dSAndroid Build Coastguard Worker                   'substring *old*\n'
11874*cda5da8dSAndroid Build Coastguard Worker                   '   replaced by *new*.  If the optional argument *count* is '
11875*cda5da8dSAndroid Build Coastguard Worker                   'given, only\n'
11876*cda5da8dSAndroid Build Coastguard Worker                   '   the first *count* occurrences are replaced.\n'
11877*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11878*cda5da8dSAndroid Build Coastguard Worker                   'str.rfind(sub[, start[, end]])\n'
11879*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11880*cda5da8dSAndroid Build Coastguard Worker                   '   Return the highest index in the string where substring '
11881*cda5da8dSAndroid Build Coastguard Worker                   '*sub* is\n'
11882*cda5da8dSAndroid Build Coastguard Worker                   '   found, such that *sub* is contained within '
11883*cda5da8dSAndroid Build Coastguard Worker                   '"s[start:end]".\n'
11884*cda5da8dSAndroid Build Coastguard Worker                   '   Optional arguments *start* and *end* are interpreted as '
11885*cda5da8dSAndroid Build Coastguard Worker                   'in slice\n'
11886*cda5da8dSAndroid Build Coastguard Worker                   '   notation.  Return "-1" on failure.\n'
11887*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11888*cda5da8dSAndroid Build Coastguard Worker                   'str.rindex(sub[, start[, end]])\n'
11889*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11890*cda5da8dSAndroid Build Coastguard Worker                   '   Like "rfind()" but raises "ValueError" when the '
11891*cda5da8dSAndroid Build Coastguard Worker                   'substring *sub* is\n'
11892*cda5da8dSAndroid Build Coastguard Worker                   '   not found.\n'
11893*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11894*cda5da8dSAndroid Build Coastguard Worker                   'str.rjust(width[, fillchar])\n'
11895*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11896*cda5da8dSAndroid Build Coastguard Worker                   '   Return the string right justified in a string of length '
11897*cda5da8dSAndroid Build Coastguard Worker                   '*width*.\n'
11898*cda5da8dSAndroid Build Coastguard Worker                   '   Padding is done using the specified *fillchar* (default '
11899*cda5da8dSAndroid Build Coastguard Worker                   'is an ASCII\n'
11900*cda5da8dSAndroid Build Coastguard Worker                   '   space). The original string is returned if *width* is '
11901*cda5da8dSAndroid Build Coastguard Worker                   'less than or\n'
11902*cda5da8dSAndroid Build Coastguard Worker                   '   equal to "len(s)".\n'
11903*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11904*cda5da8dSAndroid Build Coastguard Worker                   'str.rpartition(sep)\n'
11905*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11906*cda5da8dSAndroid Build Coastguard Worker                   '   Split the string at the last occurrence of *sep*, and '
11907*cda5da8dSAndroid Build Coastguard Worker                   'return a\n'
11908*cda5da8dSAndroid Build Coastguard Worker                   '   3-tuple containing the part before the separator, the '
11909*cda5da8dSAndroid Build Coastguard Worker                   'separator\n'
11910*cda5da8dSAndroid Build Coastguard Worker                   '   itself, and the part after the separator.  If the '
11911*cda5da8dSAndroid Build Coastguard Worker                   'separator is not\n'
11912*cda5da8dSAndroid Build Coastguard Worker                   '   found, return a 3-tuple containing two empty strings, '
11913*cda5da8dSAndroid Build Coastguard Worker                   'followed by\n'
11914*cda5da8dSAndroid Build Coastguard Worker                   '   the string itself.\n'
11915*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11916*cda5da8dSAndroid Build Coastguard Worker                   'str.rsplit(sep=None, maxsplit=- 1)\n'
11917*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11918*cda5da8dSAndroid Build Coastguard Worker                   '   Return a list of the words in the string, using *sep* '
11919*cda5da8dSAndroid Build Coastguard Worker                   'as the\n'
11920*cda5da8dSAndroid Build Coastguard Worker                   '   delimiter string. If *maxsplit* is given, at most '
11921*cda5da8dSAndroid Build Coastguard Worker                   '*maxsplit* splits\n'
11922*cda5da8dSAndroid Build Coastguard Worker                   '   are done, the *rightmost* ones.  If *sep* is not '
11923*cda5da8dSAndroid Build Coastguard Worker                   'specified or\n'
11924*cda5da8dSAndroid Build Coastguard Worker                   '   "None", any whitespace string is a separator.  Except '
11925*cda5da8dSAndroid Build Coastguard Worker                   'for splitting\n'
11926*cda5da8dSAndroid Build Coastguard Worker                   '   from the right, "rsplit()" behaves like "split()" which '
11927*cda5da8dSAndroid Build Coastguard Worker                   'is\n'
11928*cda5da8dSAndroid Build Coastguard Worker                   '   described in detail below.\n'
11929*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11930*cda5da8dSAndroid Build Coastguard Worker                   'str.rstrip([chars])\n'
11931*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11932*cda5da8dSAndroid Build Coastguard Worker                   '   Return a copy of the string with trailing characters '
11933*cda5da8dSAndroid Build Coastguard Worker                   'removed.  The\n'
11934*cda5da8dSAndroid Build Coastguard Worker                   '   *chars* argument is a string specifying the set of '
11935*cda5da8dSAndroid Build Coastguard Worker                   'characters to be\n'
11936*cda5da8dSAndroid Build Coastguard Worker                   '   removed.  If omitted or "None", the *chars* argument '
11937*cda5da8dSAndroid Build Coastguard Worker                   'defaults to\n'
11938*cda5da8dSAndroid Build Coastguard Worker                   '   removing whitespace.  The *chars* argument is not a '
11939*cda5da8dSAndroid Build Coastguard Worker                   'suffix; rather,\n'
11940*cda5da8dSAndroid Build Coastguard Worker                   '   all combinations of its values are stripped:\n'
11941*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11942*cda5da8dSAndroid Build Coastguard Worker                   "      >>> '   spacious   '.rstrip()\n"
11943*cda5da8dSAndroid Build Coastguard Worker                   "      '   spacious'\n"
11944*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'mississippi'.rstrip('ipz')\n"
11945*cda5da8dSAndroid Build Coastguard Worker                   "      'mississ'\n"
11946*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11947*cda5da8dSAndroid Build Coastguard Worker                   '   See "str.removesuffix()" for a method that will remove '
11948*cda5da8dSAndroid Build Coastguard Worker                   'a single\n'
11949*cda5da8dSAndroid Build Coastguard Worker                   '   suffix string rather than all of a set of characters.  '
11950*cda5da8dSAndroid Build Coastguard Worker                   'For example:\n'
11951*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11952*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'Monty Python'.rstrip(' Python')\n"
11953*cda5da8dSAndroid Build Coastguard Worker                   "      'M'\n"
11954*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'Monty Python'.removesuffix(' Python')\n"
11955*cda5da8dSAndroid Build Coastguard Worker                   "      'Monty'\n"
11956*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11957*cda5da8dSAndroid Build Coastguard Worker                   'str.split(sep=None, maxsplit=- 1)\n'
11958*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11959*cda5da8dSAndroid Build Coastguard Worker                   '   Return a list of the words in the string, using *sep* '
11960*cda5da8dSAndroid Build Coastguard Worker                   'as the\n'
11961*cda5da8dSAndroid Build Coastguard Worker                   '   delimiter string.  If *maxsplit* is given, at most '
11962*cda5da8dSAndroid Build Coastguard Worker                   '*maxsplit*\n'
11963*cda5da8dSAndroid Build Coastguard Worker                   '   splits are done (thus, the list will have at most '
11964*cda5da8dSAndroid Build Coastguard Worker                   '"maxsplit+1"\n'
11965*cda5da8dSAndroid Build Coastguard Worker                   '   elements).  If *maxsplit* is not specified or "-1", '
11966*cda5da8dSAndroid Build Coastguard Worker                   'then there is\n'
11967*cda5da8dSAndroid Build Coastguard Worker                   '   no limit on the number of splits (all possible splits '
11968*cda5da8dSAndroid Build Coastguard Worker                   'are made).\n'
11969*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11970*cda5da8dSAndroid Build Coastguard Worker                   '   If *sep* is given, consecutive delimiters are not '
11971*cda5da8dSAndroid Build Coastguard Worker                   'grouped together\n'
11972*cda5da8dSAndroid Build Coastguard Worker                   '   and are deemed to delimit empty strings (for example,\n'
11973*cda5da8dSAndroid Build Coastguard Worker                   '   "\'1,,2\'.split(\',\')" returns "[\'1\', \'\', '
11974*cda5da8dSAndroid Build Coastguard Worker                   '\'2\']").  The *sep* argument\n'
11975*cda5da8dSAndroid Build Coastguard Worker                   '   may consist of multiple characters (for example,\n'
11976*cda5da8dSAndroid Build Coastguard Worker                   '   "\'1<>2<>3\'.split(\'<>\')" returns "[\'1\', \'2\', '
11977*cda5da8dSAndroid Build Coastguard Worker                   '\'3\']"). Splitting an\n'
11978*cda5da8dSAndroid Build Coastguard Worker                   '   empty string with a specified separator returns '
11979*cda5da8dSAndroid Build Coastguard Worker                   '"[\'\']".\n'
11980*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11981*cda5da8dSAndroid Build Coastguard Worker                   '   For example:\n'
11982*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11983*cda5da8dSAndroid Build Coastguard Worker                   "      >>> '1,2,3'.split(',')\n"
11984*cda5da8dSAndroid Build Coastguard Worker                   "      ['1', '2', '3']\n"
11985*cda5da8dSAndroid Build Coastguard Worker                   "      >>> '1,2,3'.split(',', maxsplit=1)\n"
11986*cda5da8dSAndroid Build Coastguard Worker                   "      ['1', '2,3']\n"
11987*cda5da8dSAndroid Build Coastguard Worker                   "      >>> '1,2,,3,'.split(',')\n"
11988*cda5da8dSAndroid Build Coastguard Worker                   "      ['1', '2', '', '3', '']\n"
11989*cda5da8dSAndroid Build Coastguard Worker                   '\n'
11990*cda5da8dSAndroid Build Coastguard Worker                   '   If *sep* is not specified or is "None", a different '
11991*cda5da8dSAndroid Build Coastguard Worker                   'splitting\n'
11992*cda5da8dSAndroid Build Coastguard Worker                   '   algorithm is applied: runs of consecutive whitespace '
11993*cda5da8dSAndroid Build Coastguard Worker                   'are regarded\n'
11994*cda5da8dSAndroid Build Coastguard Worker                   '   as a single separator, and the result will contain no '
11995*cda5da8dSAndroid Build Coastguard Worker                   'empty strings\n'
11996*cda5da8dSAndroid Build Coastguard Worker                   '   at the start or end if the string has leading or '
11997*cda5da8dSAndroid Build Coastguard Worker                   'trailing\n'
11998*cda5da8dSAndroid Build Coastguard Worker                   '   whitespace.  Consequently, splitting an empty string or '
11999*cda5da8dSAndroid Build Coastguard Worker                   'a string\n'
12000*cda5da8dSAndroid Build Coastguard Worker                   '   consisting of just whitespace with a "None" separator '
12001*cda5da8dSAndroid Build Coastguard Worker                   'returns "[]".\n'
12002*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12003*cda5da8dSAndroid Build Coastguard Worker                   '   For example:\n'
12004*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12005*cda5da8dSAndroid Build Coastguard Worker                   "      >>> '1 2 3'.split()\n"
12006*cda5da8dSAndroid Build Coastguard Worker                   "      ['1', '2', '3']\n"
12007*cda5da8dSAndroid Build Coastguard Worker                   "      >>> '1 2 3'.split(maxsplit=1)\n"
12008*cda5da8dSAndroid Build Coastguard Worker                   "      ['1', '2 3']\n"
12009*cda5da8dSAndroid Build Coastguard Worker                   "      >>> '   1   2   3   '.split()\n"
12010*cda5da8dSAndroid Build Coastguard Worker                   "      ['1', '2', '3']\n"
12011*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12012*cda5da8dSAndroid Build Coastguard Worker                   'str.splitlines(keepends=False)\n'
12013*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12014*cda5da8dSAndroid Build Coastguard Worker                   '   Return a list of the lines in the string, breaking at '
12015*cda5da8dSAndroid Build Coastguard Worker                   'line\n'
12016*cda5da8dSAndroid Build Coastguard Worker                   '   boundaries.  Line breaks are not included in the '
12017*cda5da8dSAndroid Build Coastguard Worker                   'resulting list\n'
12018*cda5da8dSAndroid Build Coastguard Worker                   '   unless *keepends* is given and true.\n'
12019*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12020*cda5da8dSAndroid Build Coastguard Worker                   '   This method splits on the following line boundaries.  '
12021*cda5da8dSAndroid Build Coastguard Worker                   'In\n'
12022*cda5da8dSAndroid Build Coastguard Worker                   '   particular, the boundaries are a superset of *universal '
12023*cda5da8dSAndroid Build Coastguard Worker                   'newlines*.\n'
12024*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12025*cda5da8dSAndroid Build Coastguard Worker                   '   '
12026*cda5da8dSAndroid Build Coastguard Worker                   '+-------------------------+-------------------------------+\n'
12027*cda5da8dSAndroid Build Coastguard Worker                   '   | Representation          | '
12028*cda5da8dSAndroid Build Coastguard Worker                   'Description                   |\n'
12029*cda5da8dSAndroid Build Coastguard Worker                   '   '
12030*cda5da8dSAndroid Build Coastguard Worker                   '|=========================|===============================|\n'
12031*cda5da8dSAndroid Build Coastguard Worker                   '   | "\\n"                    | Line '
12032*cda5da8dSAndroid Build Coastguard Worker                   'Feed                     |\n'
12033*cda5da8dSAndroid Build Coastguard Worker                   '   '
12034*cda5da8dSAndroid Build Coastguard Worker                   '+-------------------------+-------------------------------+\n'
12035*cda5da8dSAndroid Build Coastguard Worker                   '   | "\\r"                    | Carriage '
12036*cda5da8dSAndroid Build Coastguard Worker                   'Return               |\n'
12037*cda5da8dSAndroid Build Coastguard Worker                   '   '
12038*cda5da8dSAndroid Build Coastguard Worker                   '+-------------------------+-------------------------------+\n'
12039*cda5da8dSAndroid Build Coastguard Worker                   '   | "\\r\\n"                  | Carriage Return + Line '
12040*cda5da8dSAndroid Build Coastguard Worker                   'Feed   |\n'
12041*cda5da8dSAndroid Build Coastguard Worker                   '   '
12042*cda5da8dSAndroid Build Coastguard Worker                   '+-------------------------+-------------------------------+\n'
12043*cda5da8dSAndroid Build Coastguard Worker                   '   | "\\v" or "\\x0b"          | Line '
12044*cda5da8dSAndroid Build Coastguard Worker                   'Tabulation               |\n'
12045*cda5da8dSAndroid Build Coastguard Worker                   '   '
12046*cda5da8dSAndroid Build Coastguard Worker                   '+-------------------------+-------------------------------+\n'
12047*cda5da8dSAndroid Build Coastguard Worker                   '   | "\\f" or "\\x0c"          | Form '
12048*cda5da8dSAndroid Build Coastguard Worker                   'Feed                     |\n'
12049*cda5da8dSAndroid Build Coastguard Worker                   '   '
12050*cda5da8dSAndroid Build Coastguard Worker                   '+-------------------------+-------------------------------+\n'
12051*cda5da8dSAndroid Build Coastguard Worker                   '   | "\\x1c"                  | File '
12052*cda5da8dSAndroid Build Coastguard Worker                   'Separator                |\n'
12053*cda5da8dSAndroid Build Coastguard Worker                   '   '
12054*cda5da8dSAndroid Build Coastguard Worker                   '+-------------------------+-------------------------------+\n'
12055*cda5da8dSAndroid Build Coastguard Worker                   '   | "\\x1d"                  | Group '
12056*cda5da8dSAndroid Build Coastguard Worker                   'Separator               |\n'
12057*cda5da8dSAndroid Build Coastguard Worker                   '   '
12058*cda5da8dSAndroid Build Coastguard Worker                   '+-------------------------+-------------------------------+\n'
12059*cda5da8dSAndroid Build Coastguard Worker                   '   | "\\x1e"                  | Record '
12060*cda5da8dSAndroid Build Coastguard Worker                   'Separator              |\n'
12061*cda5da8dSAndroid Build Coastguard Worker                   '   '
12062*cda5da8dSAndroid Build Coastguard Worker                   '+-------------------------+-------------------------------+\n'
12063*cda5da8dSAndroid Build Coastguard Worker                   '   | "\\x85"                  | Next Line (C1 Control '
12064*cda5da8dSAndroid Build Coastguard Worker                   'Code)   |\n'
12065*cda5da8dSAndroid Build Coastguard Worker                   '   '
12066*cda5da8dSAndroid Build Coastguard Worker                   '+-------------------------+-------------------------------+\n'
12067*cda5da8dSAndroid Build Coastguard Worker                   '   | "\\u2028"                | Line '
12068*cda5da8dSAndroid Build Coastguard Worker                   'Separator                |\n'
12069*cda5da8dSAndroid Build Coastguard Worker                   '   '
12070*cda5da8dSAndroid Build Coastguard Worker                   '+-------------------------+-------------------------------+\n'
12071*cda5da8dSAndroid Build Coastguard Worker                   '   | "\\u2029"                | Paragraph '
12072*cda5da8dSAndroid Build Coastguard Worker                   'Separator           |\n'
12073*cda5da8dSAndroid Build Coastguard Worker                   '   '
12074*cda5da8dSAndroid Build Coastguard Worker                   '+-------------------------+-------------------------------+\n'
12075*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12076*cda5da8dSAndroid Build Coastguard Worker                   '   Changed in version 3.2: "\\v" and "\\f" added to list '
12077*cda5da8dSAndroid Build Coastguard Worker                   'of line\n'
12078*cda5da8dSAndroid Build Coastguard Worker                   '   boundaries.\n'
12079*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12080*cda5da8dSAndroid Build Coastguard Worker                   '   For example:\n'
12081*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12082*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'ab c\\n\\nde fg\\rkl\\r\\n'.splitlines()\n"
12083*cda5da8dSAndroid Build Coastguard Worker                   "      ['ab c', '', 'de fg', 'kl']\n"
12084*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'ab c\\n\\nde "
12085*cda5da8dSAndroid Build Coastguard Worker                   "fg\\rkl\\r\\n'.splitlines(keepends=True)\n"
12086*cda5da8dSAndroid Build Coastguard Worker                   "      ['ab c\\n', '\\n', 'de fg\\r', 'kl\\r\\n']\n"
12087*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12088*cda5da8dSAndroid Build Coastguard Worker                   '   Unlike "split()" when a delimiter string *sep* is '
12089*cda5da8dSAndroid Build Coastguard Worker                   'given, this\n'
12090*cda5da8dSAndroid Build Coastguard Worker                   '   method returns an empty list for the empty string, and '
12091*cda5da8dSAndroid Build Coastguard Worker                   'a terminal\n'
12092*cda5da8dSAndroid Build Coastguard Worker                   '   line break does not result in an extra line:\n'
12093*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12094*cda5da8dSAndroid Build Coastguard Worker                   '      >>> "".splitlines()\n'
12095*cda5da8dSAndroid Build Coastguard Worker                   '      []\n'
12096*cda5da8dSAndroid Build Coastguard Worker                   '      >>> "One line\\n".splitlines()\n'
12097*cda5da8dSAndroid Build Coastguard Worker                   "      ['One line']\n"
12098*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12099*cda5da8dSAndroid Build Coastguard Worker                   '   For comparison, "split(\'\\n\')" gives:\n'
12100*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12101*cda5da8dSAndroid Build Coastguard Worker                   "      >>> ''.split('\\n')\n"
12102*cda5da8dSAndroid Build Coastguard Worker                   "      ['']\n"
12103*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'Two lines\\n'.split('\\n')\n"
12104*cda5da8dSAndroid Build Coastguard Worker                   "      ['Two lines', '']\n"
12105*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12106*cda5da8dSAndroid Build Coastguard Worker                   'str.startswith(prefix[, start[, end]])\n'
12107*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12108*cda5da8dSAndroid Build Coastguard Worker                   '   Return "True" if string starts with the *prefix*, '
12109*cda5da8dSAndroid Build Coastguard Worker                   'otherwise return\n'
12110*cda5da8dSAndroid Build Coastguard Worker                   '   "False". *prefix* can also be a tuple of prefixes to '
12111*cda5da8dSAndroid Build Coastguard Worker                   'look for.\n'
12112*cda5da8dSAndroid Build Coastguard Worker                   '   With optional *start*, test string beginning at that '
12113*cda5da8dSAndroid Build Coastguard Worker                   'position.\n'
12114*cda5da8dSAndroid Build Coastguard Worker                   '   With optional *end*, stop comparing string at that '
12115*cda5da8dSAndroid Build Coastguard Worker                   'position.\n'
12116*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12117*cda5da8dSAndroid Build Coastguard Worker                   'str.strip([chars])\n'
12118*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12119*cda5da8dSAndroid Build Coastguard Worker                   '   Return a copy of the string with the leading and '
12120*cda5da8dSAndroid Build Coastguard Worker                   'trailing\n'
12121*cda5da8dSAndroid Build Coastguard Worker                   '   characters removed. The *chars* argument is a string '
12122*cda5da8dSAndroid Build Coastguard Worker                   'specifying the\n'
12123*cda5da8dSAndroid Build Coastguard Worker                   '   set of characters to be removed. If omitted or "None", '
12124*cda5da8dSAndroid Build Coastguard Worker                   'the *chars*\n'
12125*cda5da8dSAndroid Build Coastguard Worker                   '   argument defaults to removing whitespace. The *chars* '
12126*cda5da8dSAndroid Build Coastguard Worker                   'argument is\n'
12127*cda5da8dSAndroid Build Coastguard Worker                   '   not a prefix or suffix; rather, all combinations of its '
12128*cda5da8dSAndroid Build Coastguard Worker                   'values are\n'
12129*cda5da8dSAndroid Build Coastguard Worker                   '   stripped:\n'
12130*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12131*cda5da8dSAndroid Build Coastguard Worker                   "      >>> '   spacious   '.strip()\n"
12132*cda5da8dSAndroid Build Coastguard Worker                   "      'spacious'\n"
12133*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'www.example.com'.strip('cmowz.')\n"
12134*cda5da8dSAndroid Build Coastguard Worker                   "      'example'\n"
12135*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12136*cda5da8dSAndroid Build Coastguard Worker                   '   The outermost leading and trailing *chars* argument '
12137*cda5da8dSAndroid Build Coastguard Worker                   'values are\n'
12138*cda5da8dSAndroid Build Coastguard Worker                   '   stripped from the string. Characters are removed from '
12139*cda5da8dSAndroid Build Coastguard Worker                   'the leading\n'
12140*cda5da8dSAndroid Build Coastguard Worker                   '   end until reaching a string character that is not '
12141*cda5da8dSAndroid Build Coastguard Worker                   'contained in the\n'
12142*cda5da8dSAndroid Build Coastguard Worker                   '   set of characters in *chars*. A similar action takes '
12143*cda5da8dSAndroid Build Coastguard Worker                   'place on the\n'
12144*cda5da8dSAndroid Build Coastguard Worker                   '   trailing end. For example:\n'
12145*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12146*cda5da8dSAndroid Build Coastguard Worker                   "      >>> comment_string = '#....... Section 3.2.1 Issue "
12147*cda5da8dSAndroid Build Coastguard Worker                   "#32 .......'\n"
12148*cda5da8dSAndroid Build Coastguard Worker                   "      >>> comment_string.strip('.#! ')\n"
12149*cda5da8dSAndroid Build Coastguard Worker                   "      'Section 3.2.1 Issue #32'\n"
12150*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12151*cda5da8dSAndroid Build Coastguard Worker                   'str.swapcase()\n'
12152*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12153*cda5da8dSAndroid Build Coastguard Worker                   '   Return a copy of the string with uppercase characters '
12154*cda5da8dSAndroid Build Coastguard Worker                   'converted to\n'
12155*cda5da8dSAndroid Build Coastguard Worker                   '   lowercase and vice versa. Note that it is not '
12156*cda5da8dSAndroid Build Coastguard Worker                   'necessarily true that\n'
12157*cda5da8dSAndroid Build Coastguard Worker                   '   "s.swapcase().swapcase() == s".\n'
12158*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12159*cda5da8dSAndroid Build Coastguard Worker                   'str.title()\n'
12160*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12161*cda5da8dSAndroid Build Coastguard Worker                   '   Return a titlecased version of the string where words '
12162*cda5da8dSAndroid Build Coastguard Worker                   'start with an\n'
12163*cda5da8dSAndroid Build Coastguard Worker                   '   uppercase character and the remaining characters are '
12164*cda5da8dSAndroid Build Coastguard Worker                   'lowercase.\n'
12165*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12166*cda5da8dSAndroid Build Coastguard Worker                   '   For example:\n'
12167*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12168*cda5da8dSAndroid Build Coastguard Worker                   "      >>> 'Hello world'.title()\n"
12169*cda5da8dSAndroid Build Coastguard Worker                   "      'Hello World'\n"
12170*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12171*cda5da8dSAndroid Build Coastguard Worker                   '   The algorithm uses a simple language-independent '
12172*cda5da8dSAndroid Build Coastguard Worker                   'definition of a\n'
12173*cda5da8dSAndroid Build Coastguard Worker                   '   word as groups of consecutive letters.  The definition '
12174*cda5da8dSAndroid Build Coastguard Worker                   'works in\n'
12175*cda5da8dSAndroid Build Coastguard Worker                   '   many contexts but it means that apostrophes in '
12176*cda5da8dSAndroid Build Coastguard Worker                   'contractions and\n'
12177*cda5da8dSAndroid Build Coastguard Worker                   '   possessives form word boundaries, which may not be the '
12178*cda5da8dSAndroid Build Coastguard Worker                   'desired\n'
12179*cda5da8dSAndroid Build Coastguard Worker                   '   result:\n'
12180*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12181*cda5da8dSAndroid Build Coastguard Worker                   '      >>> "they\'re bill\'s friends from the UK".title()\n'
12182*cda5da8dSAndroid Build Coastguard Worker                   '      "They\'Re Bill\'S Friends From The Uk"\n'
12183*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12184*cda5da8dSAndroid Build Coastguard Worker                   '   The "string.capwords()" function does not have this '
12185*cda5da8dSAndroid Build Coastguard Worker                   'problem, as it\n'
12186*cda5da8dSAndroid Build Coastguard Worker                   '   splits words on spaces only.\n'
12187*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12188*cda5da8dSAndroid Build Coastguard Worker                   '   Alternatively, a workaround for apostrophes can be '
12189*cda5da8dSAndroid Build Coastguard Worker                   'constructed\n'
12190*cda5da8dSAndroid Build Coastguard Worker                   '   using regular expressions:\n'
12191*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12192*cda5da8dSAndroid Build Coastguard Worker                   '      >>> import re\n'
12193*cda5da8dSAndroid Build Coastguard Worker                   '      >>> def titlecase(s):\n'
12194*cda5da8dSAndroid Build Coastguard Worker                   '      ...     return re.sub(r"[A-Za-z]+(\'[A-Za-z]+)?",\n'
12195*cda5da8dSAndroid Build Coastguard Worker                   '      ...                   lambda mo: '
12196*cda5da8dSAndroid Build Coastguard Worker                   'mo.group(0).capitalize(),\n'
12197*cda5da8dSAndroid Build Coastguard Worker                   '      ...                   s)\n'
12198*cda5da8dSAndroid Build Coastguard Worker                   '      ...\n'
12199*cda5da8dSAndroid Build Coastguard Worker                   '      >>> titlecase("they\'re bill\'s friends.")\n'
12200*cda5da8dSAndroid Build Coastguard Worker                   '      "They\'re Bill\'s Friends."\n'
12201*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12202*cda5da8dSAndroid Build Coastguard Worker                   'str.translate(table)\n'
12203*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12204*cda5da8dSAndroid Build Coastguard Worker                   '   Return a copy of the string in which each character has '
12205*cda5da8dSAndroid Build Coastguard Worker                   'been mapped\n'
12206*cda5da8dSAndroid Build Coastguard Worker                   '   through the given translation table.  The table must be '
12207*cda5da8dSAndroid Build Coastguard Worker                   'an object\n'
12208*cda5da8dSAndroid Build Coastguard Worker                   '   that implements indexing via "__getitem__()", typically '
12209*cda5da8dSAndroid Build Coastguard Worker                   'a *mapping*\n'
12210*cda5da8dSAndroid Build Coastguard Worker                   '   or *sequence*.  When indexed by a Unicode ordinal (an '
12211*cda5da8dSAndroid Build Coastguard Worker                   'integer), the\n'
12212*cda5da8dSAndroid Build Coastguard Worker                   '   table object can do any of the following: return a '
12213*cda5da8dSAndroid Build Coastguard Worker                   'Unicode ordinal\n'
12214*cda5da8dSAndroid Build Coastguard Worker                   '   or a string, to map the character to one or more other '
12215*cda5da8dSAndroid Build Coastguard Worker                   'characters;\n'
12216*cda5da8dSAndroid Build Coastguard Worker                   '   return "None", to delete the character from the return '
12217*cda5da8dSAndroid Build Coastguard Worker                   'string; or\n'
12218*cda5da8dSAndroid Build Coastguard Worker                   '   raise a "LookupError" exception, to map the character '
12219*cda5da8dSAndroid Build Coastguard Worker                   'to itself.\n'
12220*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12221*cda5da8dSAndroid Build Coastguard Worker                   '   You can use "str.maketrans()" to create a translation '
12222*cda5da8dSAndroid Build Coastguard Worker                   'map from\n'
12223*cda5da8dSAndroid Build Coastguard Worker                   '   character-to-character mappings in different formats.\n'
12224*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12225*cda5da8dSAndroid Build Coastguard Worker                   '   See also the "codecs" module for a more flexible '
12226*cda5da8dSAndroid Build Coastguard Worker                   'approach to custom\n'
12227*cda5da8dSAndroid Build Coastguard Worker                   '   character mappings.\n'
12228*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12229*cda5da8dSAndroid Build Coastguard Worker                   'str.upper()\n'
12230*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12231*cda5da8dSAndroid Build Coastguard Worker                   '   Return a copy of the string with all the cased '
12232*cda5da8dSAndroid Build Coastguard Worker                   'characters [4]\n'
12233*cda5da8dSAndroid Build Coastguard Worker                   '   converted to uppercase.  Note that '
12234*cda5da8dSAndroid Build Coastguard Worker                   '"s.upper().isupper()" might be\n'
12235*cda5da8dSAndroid Build Coastguard Worker                   '   "False" if "s" contains uncased characters or if the '
12236*cda5da8dSAndroid Build Coastguard Worker                   'Unicode\n'
12237*cda5da8dSAndroid Build Coastguard Worker                   '   category of the resulting character(s) is not “Lu” '
12238*cda5da8dSAndroid Build Coastguard Worker                   '(Letter,\n'
12239*cda5da8dSAndroid Build Coastguard Worker                   '   uppercase), but e.g. “Lt” (Letter, titlecase).\n'
12240*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12241*cda5da8dSAndroid Build Coastguard Worker                   '   The uppercasing algorithm used is described in section '
12242*cda5da8dSAndroid Build Coastguard Worker                   '3.13 of the\n'
12243*cda5da8dSAndroid Build Coastguard Worker                   '   Unicode Standard.\n'
12244*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12245*cda5da8dSAndroid Build Coastguard Worker                   'str.zfill(width)\n'
12246*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12247*cda5da8dSAndroid Build Coastguard Worker                   '   Return a copy of the string left filled with ASCII '
12248*cda5da8dSAndroid Build Coastguard Worker                   '"\'0\'" digits to\n'
12249*cda5da8dSAndroid Build Coastguard Worker                   '   make a string of length *width*. A leading sign prefix\n'
12250*cda5da8dSAndroid Build Coastguard Worker                   '   ("\'+\'"/"\'-\'") is handled by inserting the padding '
12251*cda5da8dSAndroid Build Coastguard Worker                   '*after* the sign\n'
12252*cda5da8dSAndroid Build Coastguard Worker                   '   character rather than before. The original string is '
12253*cda5da8dSAndroid Build Coastguard Worker                   'returned if\n'
12254*cda5da8dSAndroid Build Coastguard Worker                   '   *width* is less than or equal to "len(s)".\n'
12255*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12256*cda5da8dSAndroid Build Coastguard Worker                   '   For example:\n'
12257*cda5da8dSAndroid Build Coastguard Worker                   '\n'
12258*cda5da8dSAndroid Build Coastguard Worker                   '      >>> "42".zfill(5)\n'
12259*cda5da8dSAndroid Build Coastguard Worker                   "      '00042'\n"
12260*cda5da8dSAndroid Build Coastguard Worker                   '      >>> "-42".zfill(5)\n'
12261*cda5da8dSAndroid Build Coastguard Worker                   "      '-0042'\n",
12262*cda5da8dSAndroid Build Coastguard Worker 'strings': 'String and Bytes literals\n'
12263*cda5da8dSAndroid Build Coastguard Worker            '*************************\n'
12264*cda5da8dSAndroid Build Coastguard Worker            '\n'
12265*cda5da8dSAndroid Build Coastguard Worker            'String literals are described by the following lexical '
12266*cda5da8dSAndroid Build Coastguard Worker            'definitions:\n'
12267*cda5da8dSAndroid Build Coastguard Worker            '\n'
12268*cda5da8dSAndroid Build Coastguard Worker            '   stringliteral   ::= [stringprefix](shortstring | longstring)\n'
12269*cda5da8dSAndroid Build Coastguard Worker            '   stringprefix    ::= "r" | "u" | "R" | "U" | "f" | "F"\n'
12270*cda5da8dSAndroid Build Coastguard Worker            '                    | "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | '
12271*cda5da8dSAndroid Build Coastguard Worker            '"Rf" | "RF"\n'
12272*cda5da8dSAndroid Build Coastguard Worker            '   shortstring     ::= "\'" shortstringitem* "\'" | \'"\' '
12273*cda5da8dSAndroid Build Coastguard Worker            'shortstringitem* \'"\'\n'
12274*cda5da8dSAndroid Build Coastguard Worker            '   longstring      ::= "\'\'\'" longstringitem* "\'\'\'" | '
12275*cda5da8dSAndroid Build Coastguard Worker            '\'"""\' longstringitem* \'"""\'\n'
12276*cda5da8dSAndroid Build Coastguard Worker            '   shortstringitem ::= shortstringchar | stringescapeseq\n'
12277*cda5da8dSAndroid Build Coastguard Worker            '   longstringitem  ::= longstringchar | stringescapeseq\n'
12278*cda5da8dSAndroid Build Coastguard Worker            '   shortstringchar ::= <any source character except "\\" or '
12279*cda5da8dSAndroid Build Coastguard Worker            'newline or the quote>\n'
12280*cda5da8dSAndroid Build Coastguard Worker            '   longstringchar  ::= <any source character except "\\">\n'
12281*cda5da8dSAndroid Build Coastguard Worker            '   stringescapeseq ::= "\\" <any source character>\n'
12282*cda5da8dSAndroid Build Coastguard Worker            '\n'
12283*cda5da8dSAndroid Build Coastguard Worker            '   bytesliteral   ::= bytesprefix(shortbytes | longbytes)\n'
12284*cda5da8dSAndroid Build Coastguard Worker            '   bytesprefix    ::= "b" | "B" | "br" | "Br" | "bR" | "BR" | '
12285*cda5da8dSAndroid Build Coastguard Worker            '"rb" | "rB" | "Rb" | "RB"\n'
12286*cda5da8dSAndroid Build Coastguard Worker            '   shortbytes     ::= "\'" shortbytesitem* "\'" | \'"\' '
12287*cda5da8dSAndroid Build Coastguard Worker            'shortbytesitem* \'"\'\n'
12288*cda5da8dSAndroid Build Coastguard Worker            '   longbytes      ::= "\'\'\'" longbytesitem* "\'\'\'" | \'"""\' '
12289*cda5da8dSAndroid Build Coastguard Worker            'longbytesitem* \'"""\'\n'
12290*cda5da8dSAndroid Build Coastguard Worker            '   shortbytesitem ::= shortbyteschar | bytesescapeseq\n'
12291*cda5da8dSAndroid Build Coastguard Worker            '   longbytesitem  ::= longbyteschar | bytesescapeseq\n'
12292*cda5da8dSAndroid Build Coastguard Worker            '   shortbyteschar ::= <any ASCII character except "\\" or newline '
12293*cda5da8dSAndroid Build Coastguard Worker            'or the quote>\n'
12294*cda5da8dSAndroid Build Coastguard Worker            '   longbyteschar  ::= <any ASCII character except "\\">\n'
12295*cda5da8dSAndroid Build Coastguard Worker            '   bytesescapeseq ::= "\\" <any ASCII character>\n'
12296*cda5da8dSAndroid Build Coastguard Worker            '\n'
12297*cda5da8dSAndroid Build Coastguard Worker            'One syntactic restriction not indicated by these productions is '
12298*cda5da8dSAndroid Build Coastguard Worker            'that\n'
12299*cda5da8dSAndroid Build Coastguard Worker            'whitespace is not allowed between the "stringprefix" or '
12300*cda5da8dSAndroid Build Coastguard Worker            '"bytesprefix"\n'
12301*cda5da8dSAndroid Build Coastguard Worker            'and the rest of the literal. The source character set is defined '
12302*cda5da8dSAndroid Build Coastguard Worker            'by\n'
12303*cda5da8dSAndroid Build Coastguard Worker            'the encoding declaration; it is UTF-8 if no encoding declaration '
12304*cda5da8dSAndroid Build Coastguard Worker            'is\n'
12305*cda5da8dSAndroid Build Coastguard Worker            'given in the source file; see section Encoding declarations.\n'
12306*cda5da8dSAndroid Build Coastguard Worker            '\n'
12307*cda5da8dSAndroid Build Coastguard Worker            'In plain English: Both types of literals can be enclosed in '
12308*cda5da8dSAndroid Build Coastguard Worker            'matching\n'
12309*cda5da8dSAndroid Build Coastguard Worker            'single quotes ("\'") or double quotes (""").  They can also be '
12310*cda5da8dSAndroid Build Coastguard Worker            'enclosed\n'
12311*cda5da8dSAndroid Build Coastguard Worker            'in matching groups of three single or double quotes (these are\n'
12312*cda5da8dSAndroid Build Coastguard Worker            'generally referred to as *triple-quoted strings*).  The '
12313*cda5da8dSAndroid Build Coastguard Worker            'backslash\n'
12314*cda5da8dSAndroid Build Coastguard Worker            '("\\") character is used to escape characters that otherwise have '
12315*cda5da8dSAndroid Build Coastguard Worker            'a\n'
12316*cda5da8dSAndroid Build Coastguard Worker            'special meaning, such as newline, backslash itself, or the quote\n'
12317*cda5da8dSAndroid Build Coastguard Worker            'character.\n'
12318*cda5da8dSAndroid Build Coastguard Worker            '\n'
12319*cda5da8dSAndroid Build Coastguard Worker            'Bytes literals are always prefixed with "\'b\'" or "\'B\'"; they '
12320*cda5da8dSAndroid Build Coastguard Worker            'produce\n'
12321*cda5da8dSAndroid Build Coastguard Worker            'an instance of the "bytes" type instead of the "str" type.  They '
12322*cda5da8dSAndroid Build Coastguard Worker            'may\n'
12323*cda5da8dSAndroid Build Coastguard Worker            'only contain ASCII characters; bytes with a numeric value of 128 '
12324*cda5da8dSAndroid Build Coastguard Worker            'or\n'
12325*cda5da8dSAndroid Build Coastguard Worker            'greater must be expressed with escapes.\n'
12326*cda5da8dSAndroid Build Coastguard Worker            '\n'
12327*cda5da8dSAndroid Build Coastguard Worker            'Both string and bytes literals may optionally be prefixed with a\n'
12328*cda5da8dSAndroid Build Coastguard Worker            'letter "\'r\'" or "\'R\'"; such strings are called *raw strings* '
12329*cda5da8dSAndroid Build Coastguard Worker            'and treat\n'
12330*cda5da8dSAndroid Build Coastguard Worker            'backslashes as literal characters.  As a result, in string '
12331*cda5da8dSAndroid Build Coastguard Worker            'literals,\n'
12332*cda5da8dSAndroid Build Coastguard Worker            '"\'\\U\'" and "\'\\u\'" escapes in raw strings are not treated '
12333*cda5da8dSAndroid Build Coastguard Worker            'specially.\n'
12334*cda5da8dSAndroid Build Coastguard Worker            'Given that Python 2.x’s raw unicode literals behave differently '
12335*cda5da8dSAndroid Build Coastguard Worker            'than\n'
12336*cda5da8dSAndroid Build Coastguard Worker            'Python 3.x’s the "\'ur\'" syntax is not supported.\n'
12337*cda5da8dSAndroid Build Coastguard Worker            '\n'
12338*cda5da8dSAndroid Build Coastguard Worker            'New in version 3.3: The "\'rb\'" prefix of raw bytes literals has '
12339*cda5da8dSAndroid Build Coastguard Worker            'been\n'
12340*cda5da8dSAndroid Build Coastguard Worker            'added as a synonym of "\'br\'".\n'
12341*cda5da8dSAndroid Build Coastguard Worker            '\n'
12342*cda5da8dSAndroid Build Coastguard Worker            'New in version 3.3: Support for the unicode legacy literal\n'
12343*cda5da8dSAndroid Build Coastguard Worker            '("u\'value\'") was reintroduced to simplify the maintenance of '
12344*cda5da8dSAndroid Build Coastguard Worker            'dual\n'
12345*cda5da8dSAndroid Build Coastguard Worker            'Python 2.x and 3.x codebases. See **PEP 414** for more '
12346*cda5da8dSAndroid Build Coastguard Worker            'information.\n'
12347*cda5da8dSAndroid Build Coastguard Worker            '\n'
12348*cda5da8dSAndroid Build Coastguard Worker            'A string literal with "\'f\'" or "\'F\'" in its prefix is a '
12349*cda5da8dSAndroid Build Coastguard Worker            '*formatted\n'
12350*cda5da8dSAndroid Build Coastguard Worker            'string literal*; see Formatted string literals.  The "\'f\'" may '
12351*cda5da8dSAndroid Build Coastguard Worker            'be\n'
12352*cda5da8dSAndroid Build Coastguard Worker            'combined with "\'r\'", but not with "\'b\'" or "\'u\'", therefore '
12353*cda5da8dSAndroid Build Coastguard Worker            'raw\n'
12354*cda5da8dSAndroid Build Coastguard Worker            'formatted strings are possible, but formatted bytes literals are '
12355*cda5da8dSAndroid Build Coastguard Worker            'not.\n'
12356*cda5da8dSAndroid Build Coastguard Worker            '\n'
12357*cda5da8dSAndroid Build Coastguard Worker            'In triple-quoted literals, unescaped newlines and quotes are '
12358*cda5da8dSAndroid Build Coastguard Worker            'allowed\n'
12359*cda5da8dSAndroid Build Coastguard Worker            '(and are retained), except that three unescaped quotes in a row\n'
12360*cda5da8dSAndroid Build Coastguard Worker            'terminate the literal.  (A “quote” is the character used to open '
12361*cda5da8dSAndroid Build Coastguard Worker            'the\n'
12362*cda5da8dSAndroid Build Coastguard Worker            'literal, i.e. either "\'" or """.)\n'
12363*cda5da8dSAndroid Build Coastguard Worker            '\n'
12364*cda5da8dSAndroid Build Coastguard Worker            'Unless an "\'r\'" or "\'R\'" prefix is present, escape sequences '
12365*cda5da8dSAndroid Build Coastguard Worker            'in string\n'
12366*cda5da8dSAndroid Build Coastguard Worker            'and bytes literals are interpreted according to rules similar to '
12367*cda5da8dSAndroid Build Coastguard Worker            'those\n'
12368*cda5da8dSAndroid Build Coastguard Worker            'used by Standard C.  The recognized escape sequences are:\n'
12369*cda5da8dSAndroid Build Coastguard Worker            '\n'
12370*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12371*cda5da8dSAndroid Build Coastguard Worker            '| Escape Sequence   | Meaning                           | Notes   '
12372*cda5da8dSAndroid Build Coastguard Worker            '|\n'
12373*cda5da8dSAndroid Build Coastguard Worker            '|===================|===================================|=========|\n'
12374*cda5da8dSAndroid Build Coastguard Worker            '| "\\"<newline>      | Backslash and newline ignored     | '
12375*cda5da8dSAndroid Build Coastguard Worker            '(1)     |\n'
12376*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12377*cda5da8dSAndroid Build Coastguard Worker            '| "\\\\"              | Backslash ("\\")                   '
12378*cda5da8dSAndroid Build Coastguard Worker            '|         |\n'
12379*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12380*cda5da8dSAndroid Build Coastguard Worker            '| "\\\'"              | Single quote ("\'")                '
12381*cda5da8dSAndroid Build Coastguard Worker            '|         |\n'
12382*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12383*cda5da8dSAndroid Build Coastguard Worker            '| "\\""              | Double quote (""")                '
12384*cda5da8dSAndroid Build Coastguard Worker            '|         |\n'
12385*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12386*cda5da8dSAndroid Build Coastguard Worker            '| "\\a"              | ASCII Bell (BEL)                  '
12387*cda5da8dSAndroid Build Coastguard Worker            '|         |\n'
12388*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12389*cda5da8dSAndroid Build Coastguard Worker            '| "\\b"              | ASCII Backspace (BS)              '
12390*cda5da8dSAndroid Build Coastguard Worker            '|         |\n'
12391*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12392*cda5da8dSAndroid Build Coastguard Worker            '| "\\f"              | ASCII Formfeed (FF)               '
12393*cda5da8dSAndroid Build Coastguard Worker            '|         |\n'
12394*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12395*cda5da8dSAndroid Build Coastguard Worker            '| "\\n"              | ASCII Linefeed (LF)               '
12396*cda5da8dSAndroid Build Coastguard Worker            '|         |\n'
12397*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12398*cda5da8dSAndroid Build Coastguard Worker            '| "\\r"              | ASCII Carriage Return (CR)        '
12399*cda5da8dSAndroid Build Coastguard Worker            '|         |\n'
12400*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12401*cda5da8dSAndroid Build Coastguard Worker            '| "\\t"              | ASCII Horizontal Tab (TAB)        '
12402*cda5da8dSAndroid Build Coastguard Worker            '|         |\n'
12403*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12404*cda5da8dSAndroid Build Coastguard Worker            '| "\\v"              | ASCII Vertical Tab (VT)           '
12405*cda5da8dSAndroid Build Coastguard Worker            '|         |\n'
12406*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12407*cda5da8dSAndroid Build Coastguard Worker            '| "\\ooo"            | Character with octal value *ooo*  | '
12408*cda5da8dSAndroid Build Coastguard Worker            '(2,4)   |\n'
12409*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12410*cda5da8dSAndroid Build Coastguard Worker            '| "\\xhh"            | Character with hex value *hh*     | '
12411*cda5da8dSAndroid Build Coastguard Worker            '(3,4)   |\n'
12412*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12413*cda5da8dSAndroid Build Coastguard Worker            '\n'
12414*cda5da8dSAndroid Build Coastguard Worker            'Escape sequences only recognized in string literals are:\n'
12415*cda5da8dSAndroid Build Coastguard Worker            '\n'
12416*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12417*cda5da8dSAndroid Build Coastguard Worker            '| Escape Sequence   | Meaning                           | Notes   '
12418*cda5da8dSAndroid Build Coastguard Worker            '|\n'
12419*cda5da8dSAndroid Build Coastguard Worker            '|===================|===================================|=========|\n'
12420*cda5da8dSAndroid Build Coastguard Worker            '| "\\N{name}"        | Character named *name* in the     | '
12421*cda5da8dSAndroid Build Coastguard Worker            '(5)     |\n'
12422*cda5da8dSAndroid Build Coastguard Worker            '|                   | Unicode database                  |         '
12423*cda5da8dSAndroid Build Coastguard Worker            '|\n'
12424*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12425*cda5da8dSAndroid Build Coastguard Worker            '| "\\uxxxx"          | Character with 16-bit hex value   | '
12426*cda5da8dSAndroid Build Coastguard Worker            '(6)     |\n'
12427*cda5da8dSAndroid Build Coastguard Worker            '|                   | *xxxx*                            |         '
12428*cda5da8dSAndroid Build Coastguard Worker            '|\n'
12429*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12430*cda5da8dSAndroid Build Coastguard Worker            '| "\\Uxxxxxxxx"      | Character with 32-bit hex value   | '
12431*cda5da8dSAndroid Build Coastguard Worker            '(7)     |\n'
12432*cda5da8dSAndroid Build Coastguard Worker            '|                   | *xxxxxxxx*                        |         '
12433*cda5da8dSAndroid Build Coastguard Worker            '|\n'
12434*cda5da8dSAndroid Build Coastguard Worker            '+-------------------+-----------------------------------+---------+\n'
12435*cda5da8dSAndroid Build Coastguard Worker            '\n'
12436*cda5da8dSAndroid Build Coastguard Worker            'Notes:\n'
12437*cda5da8dSAndroid Build Coastguard Worker            '\n'
12438*cda5da8dSAndroid Build Coastguard Worker            '1. A backslash can be added at the end of a line to ignore the\n'
12439*cda5da8dSAndroid Build Coastguard Worker            '   newline:\n'
12440*cda5da8dSAndroid Build Coastguard Worker            '\n'
12441*cda5da8dSAndroid Build Coastguard Worker            "      >>> 'This string will not include \\\n"
12442*cda5da8dSAndroid Build Coastguard Worker            "      ... backslashes or newline characters.'\n"
12443*cda5da8dSAndroid Build Coastguard Worker            "      'This string will not include backslashes or newline "
12444*cda5da8dSAndroid Build Coastguard Worker            "characters.'\n"
12445*cda5da8dSAndroid Build Coastguard Worker            '\n'
12446*cda5da8dSAndroid Build Coastguard Worker            '   The same result can be achieved using triple-quoted strings, '
12447*cda5da8dSAndroid Build Coastguard Worker            'or\n'
12448*cda5da8dSAndroid Build Coastguard Worker            '   parentheses and string literal concatenation.\n'
12449*cda5da8dSAndroid Build Coastguard Worker            '\n'
12450*cda5da8dSAndroid Build Coastguard Worker            '2. As in Standard C, up to three octal digits are accepted.\n'
12451*cda5da8dSAndroid Build Coastguard Worker            '\n'
12452*cda5da8dSAndroid Build Coastguard Worker            '   Changed in version 3.11: Octal escapes with value larger than\n'
12453*cda5da8dSAndroid Build Coastguard Worker            '   "0o377" produce a "DeprecationWarning". In a future Python '
12454*cda5da8dSAndroid Build Coastguard Worker            'version\n'
12455*cda5da8dSAndroid Build Coastguard Worker            '   they will be a "SyntaxWarning" and eventually a '
12456*cda5da8dSAndroid Build Coastguard Worker            '"SyntaxError".\n'
12457*cda5da8dSAndroid Build Coastguard Worker            '\n'
12458*cda5da8dSAndroid Build Coastguard Worker            '3. Unlike in Standard C, exactly two hex digits are required.\n'
12459*cda5da8dSAndroid Build Coastguard Worker            '\n'
12460*cda5da8dSAndroid Build Coastguard Worker            '4. In a bytes literal, hexadecimal and octal escapes denote the '
12461*cda5da8dSAndroid Build Coastguard Worker            'byte\n'
12462*cda5da8dSAndroid Build Coastguard Worker            '   with the given value. In a string literal, these escapes '
12463*cda5da8dSAndroid Build Coastguard Worker            'denote a\n'
12464*cda5da8dSAndroid Build Coastguard Worker            '   Unicode character with the given value.\n'
12465*cda5da8dSAndroid Build Coastguard Worker            '\n'
12466*cda5da8dSAndroid Build Coastguard Worker            '5. Changed in version 3.3: Support for name aliases [1] has been\n'
12467*cda5da8dSAndroid Build Coastguard Worker            '   added.\n'
12468*cda5da8dSAndroid Build Coastguard Worker            '\n'
12469*cda5da8dSAndroid Build Coastguard Worker            '6. Exactly four hex digits are required.\n'
12470*cda5da8dSAndroid Build Coastguard Worker            '\n'
12471*cda5da8dSAndroid Build Coastguard Worker            '7. Any Unicode character can be encoded this way.  Exactly eight '
12472*cda5da8dSAndroid Build Coastguard Worker            'hex\n'
12473*cda5da8dSAndroid Build Coastguard Worker            '   digits are required.\n'
12474*cda5da8dSAndroid Build Coastguard Worker            '\n'
12475*cda5da8dSAndroid Build Coastguard Worker            'Unlike Standard C, all unrecognized escape sequences are left in '
12476*cda5da8dSAndroid Build Coastguard Worker            'the\n'
12477*cda5da8dSAndroid Build Coastguard Worker            'string unchanged, i.e., *the backslash is left in the result*.  '
12478*cda5da8dSAndroid Build Coastguard Worker            '(This\n'
12479*cda5da8dSAndroid Build Coastguard Worker            'behavior is useful when debugging: if an escape sequence is '
12480*cda5da8dSAndroid Build Coastguard Worker            'mistyped,\n'
12481*cda5da8dSAndroid Build Coastguard Worker            'the resulting output is more easily recognized as broken.)  It is '
12482*cda5da8dSAndroid Build Coastguard Worker            'also\n'
12483*cda5da8dSAndroid Build Coastguard Worker            'important to note that the escape sequences only recognized in '
12484*cda5da8dSAndroid Build Coastguard Worker            'string\n'
12485*cda5da8dSAndroid Build Coastguard Worker            'literals fall into the category of unrecognized escapes for '
12486*cda5da8dSAndroid Build Coastguard Worker            'bytes\n'
12487*cda5da8dSAndroid Build Coastguard Worker            'literals.\n'
12488*cda5da8dSAndroid Build Coastguard Worker            '\n'
12489*cda5da8dSAndroid Build Coastguard Worker            '   Changed in version 3.6: Unrecognized escape sequences produce '
12490*cda5da8dSAndroid Build Coastguard Worker            'a\n'
12491*cda5da8dSAndroid Build Coastguard Worker            '   "DeprecationWarning".  In a future Python version they will be '
12492*cda5da8dSAndroid Build Coastguard Worker            'a\n'
12493*cda5da8dSAndroid Build Coastguard Worker            '   "SyntaxWarning" and eventually a "SyntaxError".\n'
12494*cda5da8dSAndroid Build Coastguard Worker            '\n'
12495*cda5da8dSAndroid Build Coastguard Worker            'Even in a raw literal, quotes can be escaped with a backslash, '
12496*cda5da8dSAndroid Build Coastguard Worker            'but the\n'
12497*cda5da8dSAndroid Build Coastguard Worker            'backslash remains in the result; for example, "r"\\""" is a '
12498*cda5da8dSAndroid Build Coastguard Worker            'valid\n'
12499*cda5da8dSAndroid Build Coastguard Worker            'string literal consisting of two characters: a backslash and a '
12500*cda5da8dSAndroid Build Coastguard Worker            'double\n'
12501*cda5da8dSAndroid Build Coastguard Worker            'quote; "r"\\"" is not a valid string literal (even a raw string '
12502*cda5da8dSAndroid Build Coastguard Worker            'cannot\n'
12503*cda5da8dSAndroid Build Coastguard Worker            'end in an odd number of backslashes).  Specifically, *a raw '
12504*cda5da8dSAndroid Build Coastguard Worker            'literal\n'
12505*cda5da8dSAndroid Build Coastguard Worker            'cannot end in a single backslash* (since the backslash would '
12506*cda5da8dSAndroid Build Coastguard Worker            'escape\n'
12507*cda5da8dSAndroid Build Coastguard Worker            'the following quote character).  Note also that a single '
12508*cda5da8dSAndroid Build Coastguard Worker            'backslash\n'
12509*cda5da8dSAndroid Build Coastguard Worker            'followed by a newline is interpreted as those two characters as '
12510*cda5da8dSAndroid Build Coastguard Worker            'part\n'
12511*cda5da8dSAndroid Build Coastguard Worker            'of the literal, *not* as a line continuation.\n',
12512*cda5da8dSAndroid Build Coastguard Worker 'subscriptions': 'Subscriptions\n'
12513*cda5da8dSAndroid Build Coastguard Worker                  '*************\n'
12514*cda5da8dSAndroid Build Coastguard Worker                  '\n'
12515*cda5da8dSAndroid Build Coastguard Worker                  'The subscription of an instance of a container class will '
12516*cda5da8dSAndroid Build Coastguard Worker                  'generally\n'
12517*cda5da8dSAndroid Build Coastguard Worker                  'select an element from the container. The subscription of a '
12518*cda5da8dSAndroid Build Coastguard Worker                  '*generic\n'
12519*cda5da8dSAndroid Build Coastguard Worker                  'class* will generally return a GenericAlias object.\n'
12520*cda5da8dSAndroid Build Coastguard Worker                  '\n'
12521*cda5da8dSAndroid Build Coastguard Worker                  '   subscription ::= primary "[" expression_list "]"\n'
12522*cda5da8dSAndroid Build Coastguard Worker                  '\n'
12523*cda5da8dSAndroid Build Coastguard Worker                  'When an object is subscripted, the interpreter will '
12524*cda5da8dSAndroid Build Coastguard Worker                  'evaluate the\n'
12525*cda5da8dSAndroid Build Coastguard Worker                  'primary and the expression list.\n'
12526*cda5da8dSAndroid Build Coastguard Worker                  '\n'
12527*cda5da8dSAndroid Build Coastguard Worker                  'The primary must evaluate to an object that supports '
12528*cda5da8dSAndroid Build Coastguard Worker                  'subscription. An\n'
12529*cda5da8dSAndroid Build Coastguard Worker                  'object may support subscription through defining one or '
12530*cda5da8dSAndroid Build Coastguard Worker                  'both of\n'
12531*cda5da8dSAndroid Build Coastguard Worker                  '"__getitem__()" and "__class_getitem__()". When the primary '
12532*cda5da8dSAndroid Build Coastguard Worker                  'is\n'
12533*cda5da8dSAndroid Build Coastguard Worker                  'subscripted, the evaluated result of the expression list '
12534*cda5da8dSAndroid Build Coastguard Worker                  'will be\n'
12535*cda5da8dSAndroid Build Coastguard Worker                  'passed to one of these methods. For more details on when\n'
12536*cda5da8dSAndroid Build Coastguard Worker                  '"__class_getitem__" is called instead of "__getitem__", '
12537*cda5da8dSAndroid Build Coastguard Worker                  'see\n'
12538*cda5da8dSAndroid Build Coastguard Worker                  '__class_getitem__ versus __getitem__.\n'
12539*cda5da8dSAndroid Build Coastguard Worker                  '\n'
12540*cda5da8dSAndroid Build Coastguard Worker                  'If the expression list contains at least one comma, it will '
12541*cda5da8dSAndroid Build Coastguard Worker                  'evaluate\n'
12542*cda5da8dSAndroid Build Coastguard Worker                  'to a "tuple" containing the items of the expression list. '
12543*cda5da8dSAndroid Build Coastguard Worker                  'Otherwise,\n'
12544*cda5da8dSAndroid Build Coastguard Worker                  'the expression list will evaluate to the value of the '
12545*cda5da8dSAndroid Build Coastguard Worker                  'list’s sole\n'
12546*cda5da8dSAndroid Build Coastguard Worker                  'member.\n'
12547*cda5da8dSAndroid Build Coastguard Worker                  '\n'
12548*cda5da8dSAndroid Build Coastguard Worker                  'For built-in objects, there are two types of objects that '
12549*cda5da8dSAndroid Build Coastguard Worker                  'support\n'
12550*cda5da8dSAndroid Build Coastguard Worker                  'subscription via "__getitem__()":\n'
12551*cda5da8dSAndroid Build Coastguard Worker                  '\n'
12552*cda5da8dSAndroid Build Coastguard Worker                  '1. Mappings. If the primary is a *mapping*, the expression '
12553*cda5da8dSAndroid Build Coastguard Worker                  'list must\n'
12554*cda5da8dSAndroid Build Coastguard Worker                  '   evaluate to an object whose value is one of the keys of '
12555*cda5da8dSAndroid Build Coastguard Worker                  'the\n'
12556*cda5da8dSAndroid Build Coastguard Worker                  '   mapping, and the subscription selects the value in the '
12557*cda5da8dSAndroid Build Coastguard Worker                  'mapping that\n'
12558*cda5da8dSAndroid Build Coastguard Worker                  '   corresponds to that key. An example of a builtin mapping '
12559*cda5da8dSAndroid Build Coastguard Worker                  'class is\n'
12560*cda5da8dSAndroid Build Coastguard Worker                  '   the "dict" class.\n'
12561*cda5da8dSAndroid Build Coastguard Worker                  '\n'
12562*cda5da8dSAndroid Build Coastguard Worker                  '2. Sequences. If the primary is a *sequence*, the '
12563*cda5da8dSAndroid Build Coastguard Worker                  'expression list must\n'
12564*cda5da8dSAndroid Build Coastguard Worker                  '   evaluate to an "int" or a "slice" (as discussed in the '
12565*cda5da8dSAndroid Build Coastguard Worker                  'following\n'
12566*cda5da8dSAndroid Build Coastguard Worker                  '   section). Examples of builtin sequence classes include '
12567*cda5da8dSAndroid Build Coastguard Worker                  'the "str",\n'
12568*cda5da8dSAndroid Build Coastguard Worker                  '   "list" and "tuple" classes.\n'
12569*cda5da8dSAndroid Build Coastguard Worker                  '\n'
12570*cda5da8dSAndroid Build Coastguard Worker                  'The formal syntax makes no special provision for negative '
12571*cda5da8dSAndroid Build Coastguard Worker                  'indices in\n'
12572*cda5da8dSAndroid Build Coastguard Worker                  '*sequences*. However, built-in sequences all provide a '
12573*cda5da8dSAndroid Build Coastguard Worker                  '"__getitem__()"\n'
12574*cda5da8dSAndroid Build Coastguard Worker                  'method that interprets negative indices by adding the '
12575*cda5da8dSAndroid Build Coastguard Worker                  'length of the\n'
12576*cda5da8dSAndroid Build Coastguard Worker                  'sequence to the index so that, for example, "x[-1]" selects '
12577*cda5da8dSAndroid Build Coastguard Worker                  'the last\n'
12578*cda5da8dSAndroid Build Coastguard Worker                  'item of "x". The resulting value must be a nonnegative '
12579*cda5da8dSAndroid Build Coastguard Worker                  'integer less\n'
12580*cda5da8dSAndroid Build Coastguard Worker                  'than the number of items in the sequence, and the '
12581*cda5da8dSAndroid Build Coastguard Worker                  'subscription selects\n'
12582*cda5da8dSAndroid Build Coastguard Worker                  'the item whose index is that value (counting from zero). '
12583*cda5da8dSAndroid Build Coastguard Worker                  'Since the\n'
12584*cda5da8dSAndroid Build Coastguard Worker                  'support for negative indices and slicing occurs in the '
12585*cda5da8dSAndroid Build Coastguard Worker                  'object’s\n'
12586*cda5da8dSAndroid Build Coastguard Worker                  '"__getitem__()" method, subclasses overriding this method '
12587*cda5da8dSAndroid Build Coastguard Worker                  'will need to\n'
12588*cda5da8dSAndroid Build Coastguard Worker                  'explicitly add that support.\n'
12589*cda5da8dSAndroid Build Coastguard Worker                  '\n'
12590*cda5da8dSAndroid Build Coastguard Worker                  'A "string" is a special kind of sequence whose items are '
12591*cda5da8dSAndroid Build Coastguard Worker                  '*characters*.\n'
12592*cda5da8dSAndroid Build Coastguard Worker                  'A character is not a separate data type but a string of '
12593*cda5da8dSAndroid Build Coastguard Worker                  'exactly one\n'
12594*cda5da8dSAndroid Build Coastguard Worker                  'character.\n',
12595*cda5da8dSAndroid Build Coastguard Worker 'truth': 'Truth Value Testing\n'
12596*cda5da8dSAndroid Build Coastguard Worker          '*******************\n'
12597*cda5da8dSAndroid Build Coastguard Worker          '\n'
12598*cda5da8dSAndroid Build Coastguard Worker          'Any object can be tested for truth value, for use in an "if" or\n'
12599*cda5da8dSAndroid Build Coastguard Worker          '"while" condition or as operand of the Boolean operations below.\n'
12600*cda5da8dSAndroid Build Coastguard Worker          '\n'
12601*cda5da8dSAndroid Build Coastguard Worker          'By default, an object is considered true unless its class defines\n'
12602*cda5da8dSAndroid Build Coastguard Worker          'either a "__bool__()" method that returns "False" or a "__len__()"\n'
12603*cda5da8dSAndroid Build Coastguard Worker          'method that returns zero, when called with the object. [1]  Here '
12604*cda5da8dSAndroid Build Coastguard Worker          'are\n'
12605*cda5da8dSAndroid Build Coastguard Worker          'most of the built-in objects considered false:\n'
12606*cda5da8dSAndroid Build Coastguard Worker          '\n'
12607*cda5da8dSAndroid Build Coastguard Worker          '* constants defined to be false: "None" and "False".\n'
12608*cda5da8dSAndroid Build Coastguard Worker          '\n'
12609*cda5da8dSAndroid Build Coastguard Worker          '* zero of any numeric type: "0", "0.0", "0j", "Decimal(0)",\n'
12610*cda5da8dSAndroid Build Coastguard Worker          '  "Fraction(0, 1)"\n'
12611*cda5da8dSAndroid Build Coastguard Worker          '\n'
12612*cda5da8dSAndroid Build Coastguard Worker          '* empty sequences and collections: "\'\'", "()", "[]", "{}", '
12613*cda5da8dSAndroid Build Coastguard Worker          '"set()",\n'
12614*cda5da8dSAndroid Build Coastguard Worker          '  "range(0)"\n'
12615*cda5da8dSAndroid Build Coastguard Worker          '\n'
12616*cda5da8dSAndroid Build Coastguard Worker          'Operations and built-in functions that have a Boolean result '
12617*cda5da8dSAndroid Build Coastguard Worker          'always\n'
12618*cda5da8dSAndroid Build Coastguard Worker          'return "0" or "False" for false and "1" or "True" for true, unless\n'
12619*cda5da8dSAndroid Build Coastguard Worker          'otherwise stated. (Important exception: the Boolean operations '
12620*cda5da8dSAndroid Build Coastguard Worker          '"or"\n'
12621*cda5da8dSAndroid Build Coastguard Worker          'and "and" always return one of their operands.)\n',
12622*cda5da8dSAndroid Build Coastguard Worker 'try': 'The "try" statement\n'
12623*cda5da8dSAndroid Build Coastguard Worker        '*******************\n'
12624*cda5da8dSAndroid Build Coastguard Worker        '\n'
12625*cda5da8dSAndroid Build Coastguard Worker        'The "try" statement specifies exception handlers and/or cleanup code\n'
12626*cda5da8dSAndroid Build Coastguard Worker        'for a group of statements:\n'
12627*cda5da8dSAndroid Build Coastguard Worker        '\n'
12628*cda5da8dSAndroid Build Coastguard Worker        '   try_stmt  ::= try1_stmt | try2_stmt | try3_stmt\n'
12629*cda5da8dSAndroid Build Coastguard Worker        '   try1_stmt ::= "try" ":" suite\n'
12630*cda5da8dSAndroid Build Coastguard Worker        '                 ("except" [expression ["as" identifier]] ":" '
12631*cda5da8dSAndroid Build Coastguard Worker        'suite)+\n'
12632*cda5da8dSAndroid Build Coastguard Worker        '                 ["else" ":" suite]\n'
12633*cda5da8dSAndroid Build Coastguard Worker        '                 ["finally" ":" suite]\n'
12634*cda5da8dSAndroid Build Coastguard Worker        '   try2_stmt ::= "try" ":" suite\n'
12635*cda5da8dSAndroid Build Coastguard Worker        '                 ("except" "*" expression ["as" identifier] ":" '
12636*cda5da8dSAndroid Build Coastguard Worker        'suite)+\n'
12637*cda5da8dSAndroid Build Coastguard Worker        '                 ["else" ":" suite]\n'
12638*cda5da8dSAndroid Build Coastguard Worker        '                 ["finally" ":" suite]\n'
12639*cda5da8dSAndroid Build Coastguard Worker        '   try3_stmt ::= "try" ":" suite\n'
12640*cda5da8dSAndroid Build Coastguard Worker        '                 "finally" ":" suite\n'
12641*cda5da8dSAndroid Build Coastguard Worker        '\n'
12642*cda5da8dSAndroid Build Coastguard Worker        'Additional information on exceptions can be found in section\n'
12643*cda5da8dSAndroid Build Coastguard Worker        'Exceptions, and information on using the "raise" statement to '
12644*cda5da8dSAndroid Build Coastguard Worker        'generate\n'
12645*cda5da8dSAndroid Build Coastguard Worker        'exceptions may be found in section The raise statement.\n'
12646*cda5da8dSAndroid Build Coastguard Worker        '\n'
12647*cda5da8dSAndroid Build Coastguard Worker        '\n'
12648*cda5da8dSAndroid Build Coastguard Worker        '"except" clause\n'
12649*cda5da8dSAndroid Build Coastguard Worker        '===============\n'
12650*cda5da8dSAndroid Build Coastguard Worker        '\n'
12651*cda5da8dSAndroid Build Coastguard Worker        'The "except" clause(s) specify one or more exception handlers. When '
12652*cda5da8dSAndroid Build Coastguard Worker        'no\n'
12653*cda5da8dSAndroid Build Coastguard Worker        'exception occurs in the "try" clause, no exception handler is\n'
12654*cda5da8dSAndroid Build Coastguard Worker        'executed. When an exception occurs in the "try" suite, a search for '
12655*cda5da8dSAndroid Build Coastguard Worker        'an\n'
12656*cda5da8dSAndroid Build Coastguard Worker        'exception handler is started. This search inspects the "except"\n'
12657*cda5da8dSAndroid Build Coastguard Worker        'clauses in turn until one is found that matches the exception. An\n'
12658*cda5da8dSAndroid Build Coastguard Worker        'expression-less "except" clause, if present, must be last; it '
12659*cda5da8dSAndroid Build Coastguard Worker        'matches\n'
12660*cda5da8dSAndroid Build Coastguard Worker        'any exception. For an "except" clause with an expression, that\n'
12661*cda5da8dSAndroid Build Coastguard Worker        'expression is evaluated, and the clause matches the exception if the\n'
12662*cda5da8dSAndroid Build Coastguard Worker        'resulting object is “compatible” with the exception.  An object is\n'
12663*cda5da8dSAndroid Build Coastguard Worker        'compatible with an exception if the object is the class or a *non-\n'
12664*cda5da8dSAndroid Build Coastguard Worker        'virtual base class* of the exception object, or a tuple containing '
12665*cda5da8dSAndroid Build Coastguard Worker        'an\n'
12666*cda5da8dSAndroid Build Coastguard Worker        'item that is the class or a non-virtual base class of the exception\n'
12667*cda5da8dSAndroid Build Coastguard Worker        'object.\n'
12668*cda5da8dSAndroid Build Coastguard Worker        '\n'
12669*cda5da8dSAndroid Build Coastguard Worker        'If no "except" clause matches the exception, the search for an\n'
12670*cda5da8dSAndroid Build Coastguard Worker        'exception handler continues in the surrounding code and on the\n'
12671*cda5da8dSAndroid Build Coastguard Worker        'invocation stack.  [1]\n'
12672*cda5da8dSAndroid Build Coastguard Worker        '\n'
12673*cda5da8dSAndroid Build Coastguard Worker        'If the evaluation of an expression in the header of an "except" '
12674*cda5da8dSAndroid Build Coastguard Worker        'clause\n'
12675*cda5da8dSAndroid Build Coastguard Worker        'raises an exception, the original search for a handler is canceled '
12676*cda5da8dSAndroid Build Coastguard Worker        'and\n'
12677*cda5da8dSAndroid Build Coastguard Worker        'a search starts for the new exception in the surrounding code and on\n'
12678*cda5da8dSAndroid Build Coastguard Worker        'the call stack (it is treated as if the entire "try" statement '
12679*cda5da8dSAndroid Build Coastguard Worker        'raised\n'
12680*cda5da8dSAndroid Build Coastguard Worker        'the exception).\n'
12681*cda5da8dSAndroid Build Coastguard Worker        '\n'
12682*cda5da8dSAndroid Build Coastguard Worker        'When a matching "except" clause is found, the exception is assigned '
12683*cda5da8dSAndroid Build Coastguard Worker        'to\n'
12684*cda5da8dSAndroid Build Coastguard Worker        'the target specified after the "as" keyword in that "except" clause,\n'
12685*cda5da8dSAndroid Build Coastguard Worker        'if present, and the "except" clause’s suite is executed. All '
12686*cda5da8dSAndroid Build Coastguard Worker        '"except"\n'
12687*cda5da8dSAndroid Build Coastguard Worker        'clauses must have an executable block. When the end of this block is\n'
12688*cda5da8dSAndroid Build Coastguard Worker        'reached, execution continues normally after the entire "try"\n'
12689*cda5da8dSAndroid Build Coastguard Worker        'statement. (This means that if two nested handlers exist for the '
12690*cda5da8dSAndroid Build Coastguard Worker        'same\n'
12691*cda5da8dSAndroid Build Coastguard Worker        'exception, and the exception occurs in the "try" clause of the inner\n'
12692*cda5da8dSAndroid Build Coastguard Worker        'handler, the outer handler will not handle the exception.)\n'
12693*cda5da8dSAndroid Build Coastguard Worker        '\n'
12694*cda5da8dSAndroid Build Coastguard Worker        'When an exception has been assigned using "as target", it is cleared\n'
12695*cda5da8dSAndroid Build Coastguard Worker        'at the end of the "except" clause.  This is as if\n'
12696*cda5da8dSAndroid Build Coastguard Worker        '\n'
12697*cda5da8dSAndroid Build Coastguard Worker        '   except E as N:\n'
12698*cda5da8dSAndroid Build Coastguard Worker        '       foo\n'
12699*cda5da8dSAndroid Build Coastguard Worker        '\n'
12700*cda5da8dSAndroid Build Coastguard Worker        'was translated to\n'
12701*cda5da8dSAndroid Build Coastguard Worker        '\n'
12702*cda5da8dSAndroid Build Coastguard Worker        '   except E as N:\n'
12703*cda5da8dSAndroid Build Coastguard Worker        '       try:\n'
12704*cda5da8dSAndroid Build Coastguard Worker        '           foo\n'
12705*cda5da8dSAndroid Build Coastguard Worker        '       finally:\n'
12706*cda5da8dSAndroid Build Coastguard Worker        '           del N\n'
12707*cda5da8dSAndroid Build Coastguard Worker        '\n'
12708*cda5da8dSAndroid Build Coastguard Worker        'This means the exception must be assigned to a different name to be\n'
12709*cda5da8dSAndroid Build Coastguard Worker        'able to refer to it after the "except" clause. Exceptions are '
12710*cda5da8dSAndroid Build Coastguard Worker        'cleared\n'
12711*cda5da8dSAndroid Build Coastguard Worker        'because with the traceback attached to them, they form a reference\n'
12712*cda5da8dSAndroid Build Coastguard Worker        'cycle with the stack frame, keeping all locals in that frame alive\n'
12713*cda5da8dSAndroid Build Coastguard Worker        'until the next garbage collection occurs.\n'
12714*cda5da8dSAndroid Build Coastguard Worker        '\n'
12715*cda5da8dSAndroid Build Coastguard Worker        'Before an "except" clause’s suite is executed, the exception is '
12716*cda5da8dSAndroid Build Coastguard Worker        'stored\n'
12717*cda5da8dSAndroid Build Coastguard Worker        'in the "sys" module, where it can be accessed from within the body '
12718*cda5da8dSAndroid Build Coastguard Worker        'of\n'
12719*cda5da8dSAndroid Build Coastguard Worker        'the "except" clause by calling "sys.exception()". When leaving an\n'
12720*cda5da8dSAndroid Build Coastguard Worker        'exception handler, the exception stored in the "sys" module is reset\n'
12721*cda5da8dSAndroid Build Coastguard Worker        'to its previous value:\n'
12722*cda5da8dSAndroid Build Coastguard Worker        '\n'
12723*cda5da8dSAndroid Build Coastguard Worker        '   >>> print(sys.exception())\n'
12724*cda5da8dSAndroid Build Coastguard Worker        '   None\n'
12725*cda5da8dSAndroid Build Coastguard Worker        '   >>> try:\n'
12726*cda5da8dSAndroid Build Coastguard Worker        '   ...     raise TypeError\n'
12727*cda5da8dSAndroid Build Coastguard Worker        '   ... except:\n'
12728*cda5da8dSAndroid Build Coastguard Worker        '   ...     print(repr(sys.exception()))\n'
12729*cda5da8dSAndroid Build Coastguard Worker        '   ...     try:\n'
12730*cda5da8dSAndroid Build Coastguard Worker        '   ...          raise ValueError\n'
12731*cda5da8dSAndroid Build Coastguard Worker        '   ...     except:\n'
12732*cda5da8dSAndroid Build Coastguard Worker        '   ...         print(repr(sys.exception()))\n'
12733*cda5da8dSAndroid Build Coastguard Worker        '   ...     print(repr(sys.exception()))\n'
12734*cda5da8dSAndroid Build Coastguard Worker        '   ...\n'
12735*cda5da8dSAndroid Build Coastguard Worker        '   TypeError()\n'
12736*cda5da8dSAndroid Build Coastguard Worker        '   ValueError()\n'
12737*cda5da8dSAndroid Build Coastguard Worker        '   TypeError()\n'
12738*cda5da8dSAndroid Build Coastguard Worker        '   >>> print(sys.exception())\n'
12739*cda5da8dSAndroid Build Coastguard Worker        '   None\n'
12740*cda5da8dSAndroid Build Coastguard Worker        '\n'
12741*cda5da8dSAndroid Build Coastguard Worker        '\n'
12742*cda5da8dSAndroid Build Coastguard Worker        '"except*" clause\n'
12743*cda5da8dSAndroid Build Coastguard Worker        '================\n'
12744*cda5da8dSAndroid Build Coastguard Worker        '\n'
12745*cda5da8dSAndroid Build Coastguard Worker        'The "except*" clause(s) are used for handling "ExceptionGroup"s. The\n'
12746*cda5da8dSAndroid Build Coastguard Worker        'exception type for matching is interpreted as in the case of '
12747*cda5da8dSAndroid Build Coastguard Worker        '"except",\n'
12748*cda5da8dSAndroid Build Coastguard Worker        'but in the case of exception groups we can have partial matches when\n'
12749*cda5da8dSAndroid Build Coastguard Worker        'the type matches some of the exceptions in the group. This means '
12750*cda5da8dSAndroid Build Coastguard Worker        'that\n'
12751*cda5da8dSAndroid Build Coastguard Worker        'multiple "except*" clauses can execute, each handling part of the\n'
12752*cda5da8dSAndroid Build Coastguard Worker        'exception group. Each clause executes at most once and handles an\n'
12753*cda5da8dSAndroid Build Coastguard Worker        'exception group of all matching exceptions.  Each exception in the\n'
12754*cda5da8dSAndroid Build Coastguard Worker        'group is handled by at most one "except*" clause, the first that\n'
12755*cda5da8dSAndroid Build Coastguard Worker        'matches it.\n'
12756*cda5da8dSAndroid Build Coastguard Worker        '\n'
12757*cda5da8dSAndroid Build Coastguard Worker        '   >>> try:\n'
12758*cda5da8dSAndroid Build Coastguard Worker        '   ...     raise ExceptionGroup("eg",\n'
12759*cda5da8dSAndroid Build Coastguard Worker        '   ...         [ValueError(1), TypeError(2), OSError(3), '
12760*cda5da8dSAndroid Build Coastguard Worker        'OSError(4)])\n'
12761*cda5da8dSAndroid Build Coastguard Worker        '   ... except* TypeError as e:\n'
12762*cda5da8dSAndroid Build Coastguard Worker        "   ...     print(f'caught {type(e)} with nested {e.exceptions}')\n"
12763*cda5da8dSAndroid Build Coastguard Worker        '   ... except* OSError as e:\n'
12764*cda5da8dSAndroid Build Coastguard Worker        "   ...     print(f'caught {type(e)} with nested {e.exceptions}')\n"
12765*cda5da8dSAndroid Build Coastguard Worker        '   ...\n'
12766*cda5da8dSAndroid Build Coastguard Worker        "   caught <class 'ExceptionGroup'> with nested (TypeError(2),)\n"
12767*cda5da8dSAndroid Build Coastguard Worker        "   caught <class 'ExceptionGroup'> with nested (OSError(3), "
12768*cda5da8dSAndroid Build Coastguard Worker        'OSError(4))\n'
12769*cda5da8dSAndroid Build Coastguard Worker        '     + Exception Group Traceback (most recent call last):\n'
12770*cda5da8dSAndroid Build Coastguard Worker        '     |   File "<stdin>", line 2, in <module>\n'
12771*cda5da8dSAndroid Build Coastguard Worker        '     | ExceptionGroup: eg\n'
12772*cda5da8dSAndroid Build Coastguard Worker        '     +-+---------------- 1 ----------------\n'
12773*cda5da8dSAndroid Build Coastguard Worker        '       | ValueError: 1\n'
12774*cda5da8dSAndroid Build Coastguard Worker        '       +------------------------------------\n'
12775*cda5da8dSAndroid Build Coastguard Worker        '\n'
12776*cda5da8dSAndroid Build Coastguard Worker        'Any remaining exceptions that were not handled by any "except*" '
12777*cda5da8dSAndroid Build Coastguard Worker        'clause\n'
12778*cda5da8dSAndroid Build Coastguard Worker        'are re-raised at the end, combined into an exception group along '
12779*cda5da8dSAndroid Build Coastguard Worker        'with\n'
12780*cda5da8dSAndroid Build Coastguard Worker        'all exceptions that were raised from within "except*" clauses.\n'
12781*cda5da8dSAndroid Build Coastguard Worker        '\n'
12782*cda5da8dSAndroid Build Coastguard Worker        'From version 3.11.4, when the entire "ExceptionGroup" is handled and\n'
12783*cda5da8dSAndroid Build Coastguard Worker        'only one exception is raised from an "except*" clause, this '
12784*cda5da8dSAndroid Build Coastguard Worker        'exception\n'
12785*cda5da8dSAndroid Build Coastguard Worker        'is no longer wrapped to form a new "ExceptionGroup".\n'
12786*cda5da8dSAndroid Build Coastguard Worker        '\n'
12787*cda5da8dSAndroid Build Coastguard Worker        'If the raised exception is not an exception group and its type '
12788*cda5da8dSAndroid Build Coastguard Worker        'matches\n'
12789*cda5da8dSAndroid Build Coastguard Worker        'one of the "except*" clauses, it is caught and wrapped by an '
12790*cda5da8dSAndroid Build Coastguard Worker        'exception\n'
12791*cda5da8dSAndroid Build Coastguard Worker        'group with an empty message string.\n'
12792*cda5da8dSAndroid Build Coastguard Worker        '\n'
12793*cda5da8dSAndroid Build Coastguard Worker        '   >>> try:\n'
12794*cda5da8dSAndroid Build Coastguard Worker        '   ...     raise BlockingIOError\n'
12795*cda5da8dSAndroid Build Coastguard Worker        '   ... except* BlockingIOError as e:\n'
12796*cda5da8dSAndroid Build Coastguard Worker        '   ...     print(repr(e))\n'
12797*cda5da8dSAndroid Build Coastguard Worker        '   ...\n'
12798*cda5da8dSAndroid Build Coastguard Worker        "   ExceptionGroup('', (BlockingIOError()))\n"
12799*cda5da8dSAndroid Build Coastguard Worker        '\n'
12800*cda5da8dSAndroid Build Coastguard Worker        'An "except*" clause must have a matching type, and this type cannot '
12801*cda5da8dSAndroid Build Coastguard Worker        'be\n'
12802*cda5da8dSAndroid Build Coastguard Worker        'a subclass of "BaseExceptionGroup". It is not possible to mix '
12803*cda5da8dSAndroid Build Coastguard Worker        '"except"\n'
12804*cda5da8dSAndroid Build Coastguard Worker        'and "except*" in the same "try". "break", "continue" and "return"\n'
12805*cda5da8dSAndroid Build Coastguard Worker        'cannot appear in an "except*" clause.\n'
12806*cda5da8dSAndroid Build Coastguard Worker        '\n'
12807*cda5da8dSAndroid Build Coastguard Worker        '\n'
12808*cda5da8dSAndroid Build Coastguard Worker        '"else" clause\n'
12809*cda5da8dSAndroid Build Coastguard Worker        '=============\n'
12810*cda5da8dSAndroid Build Coastguard Worker        '\n'
12811*cda5da8dSAndroid Build Coastguard Worker        'The optional "else" clause is executed if the control flow leaves '
12812*cda5da8dSAndroid Build Coastguard Worker        'the\n'
12813*cda5da8dSAndroid Build Coastguard Worker        '"try" suite, no exception was raised, and no "return", "continue", '
12814*cda5da8dSAndroid Build Coastguard Worker        'or\n'
12815*cda5da8dSAndroid Build Coastguard Worker        '"break" statement was executed.  Exceptions in the "else" clause are\n'
12816*cda5da8dSAndroid Build Coastguard Worker        'not handled by the preceding "except" clauses.\n'
12817*cda5da8dSAndroid Build Coastguard Worker        '\n'
12818*cda5da8dSAndroid Build Coastguard Worker        '\n'
12819*cda5da8dSAndroid Build Coastguard Worker        '"finally" clause\n'
12820*cda5da8dSAndroid Build Coastguard Worker        '================\n'
12821*cda5da8dSAndroid Build Coastguard Worker        '\n'
12822*cda5da8dSAndroid Build Coastguard Worker        'If "finally" is present, it specifies a ‘cleanup’ handler.  The '
12823*cda5da8dSAndroid Build Coastguard Worker        '"try"\n'
12824*cda5da8dSAndroid Build Coastguard Worker        'clause is executed, including any "except" and "else" clauses.  If '
12825*cda5da8dSAndroid Build Coastguard Worker        'an\n'
12826*cda5da8dSAndroid Build Coastguard Worker        'exception occurs in any of the clauses and is not handled, the\n'
12827*cda5da8dSAndroid Build Coastguard Worker        'exception is temporarily saved. The "finally" clause is executed.  '
12828*cda5da8dSAndroid Build Coastguard Worker        'If\n'
12829*cda5da8dSAndroid Build Coastguard Worker        'there is a saved exception it is re-raised at the end of the '
12830*cda5da8dSAndroid Build Coastguard Worker        '"finally"\n'
12831*cda5da8dSAndroid Build Coastguard Worker        'clause.  If the "finally" clause raises another exception, the saved\n'
12832*cda5da8dSAndroid Build Coastguard Worker        'exception is set as the context of the new exception. If the '
12833*cda5da8dSAndroid Build Coastguard Worker        '"finally"\n'
12834*cda5da8dSAndroid Build Coastguard Worker        'clause executes a "return", "break" or "continue" statement, the '
12835*cda5da8dSAndroid Build Coastguard Worker        'saved\n'
12836*cda5da8dSAndroid Build Coastguard Worker        'exception is discarded:\n'
12837*cda5da8dSAndroid Build Coastguard Worker        '\n'
12838*cda5da8dSAndroid Build Coastguard Worker        '   >>> def f():\n'
12839*cda5da8dSAndroid Build Coastguard Worker        '   ...     try:\n'
12840*cda5da8dSAndroid Build Coastguard Worker        '   ...         1/0\n'
12841*cda5da8dSAndroid Build Coastguard Worker        '   ...     finally:\n'
12842*cda5da8dSAndroid Build Coastguard Worker        '   ...         return 42\n'
12843*cda5da8dSAndroid Build Coastguard Worker        '   ...\n'
12844*cda5da8dSAndroid Build Coastguard Worker        '   >>> f()\n'
12845*cda5da8dSAndroid Build Coastguard Worker        '   42\n'
12846*cda5da8dSAndroid Build Coastguard Worker        '\n'
12847*cda5da8dSAndroid Build Coastguard Worker        'The exception information is not available to the program during\n'
12848*cda5da8dSAndroid Build Coastguard Worker        'execution of the "finally" clause.\n'
12849*cda5da8dSAndroid Build Coastguard Worker        '\n'
12850*cda5da8dSAndroid Build Coastguard Worker        'When a "return", "break" or "continue" statement is executed in the\n'
12851*cda5da8dSAndroid Build Coastguard Worker        '"try" suite of a "try"…"finally" statement, the "finally" clause is\n'
12852*cda5da8dSAndroid Build Coastguard Worker        'also executed ‘on the way out.’\n'
12853*cda5da8dSAndroid Build Coastguard Worker        '\n'
12854*cda5da8dSAndroid Build Coastguard Worker        'The return value of a function is determined by the last "return"\n'
12855*cda5da8dSAndroid Build Coastguard Worker        'statement executed.  Since the "finally" clause always executes, a\n'
12856*cda5da8dSAndroid Build Coastguard Worker        '"return" statement executed in the "finally" clause will always be '
12857*cda5da8dSAndroid Build Coastguard Worker        'the\n'
12858*cda5da8dSAndroid Build Coastguard Worker        'last one executed:\n'
12859*cda5da8dSAndroid Build Coastguard Worker        '\n'
12860*cda5da8dSAndroid Build Coastguard Worker        '   >>> def foo():\n'
12861*cda5da8dSAndroid Build Coastguard Worker        '   ...     try:\n'
12862*cda5da8dSAndroid Build Coastguard Worker        "   ...         return 'try'\n"
12863*cda5da8dSAndroid Build Coastguard Worker        '   ...     finally:\n'
12864*cda5da8dSAndroid Build Coastguard Worker        "   ...         return 'finally'\n"
12865*cda5da8dSAndroid Build Coastguard Worker        '   ...\n'
12866*cda5da8dSAndroid Build Coastguard Worker        '   >>> foo()\n'
12867*cda5da8dSAndroid Build Coastguard Worker        "   'finally'\n"
12868*cda5da8dSAndroid Build Coastguard Worker        '\n'
12869*cda5da8dSAndroid Build Coastguard Worker        'Changed in version 3.8: Prior to Python 3.8, a "continue" statement\n'
12870*cda5da8dSAndroid Build Coastguard Worker        'was illegal in the "finally" clause due to a problem with the\n'
12871*cda5da8dSAndroid Build Coastguard Worker        'implementation.\n',
12872*cda5da8dSAndroid Build Coastguard Worker 'types': 'The standard type hierarchy\n'
12873*cda5da8dSAndroid Build Coastguard Worker          '***************************\n'
12874*cda5da8dSAndroid Build Coastguard Worker          '\n'
12875*cda5da8dSAndroid Build Coastguard Worker          'Below is a list of the types that are built into Python.  '
12876*cda5da8dSAndroid Build Coastguard Worker          'Extension\n'
12877*cda5da8dSAndroid Build Coastguard Worker          'modules (written in C, Java, or other languages, depending on the\n'
12878*cda5da8dSAndroid Build Coastguard Worker          'implementation) can define additional types.  Future versions of\n'
12879*cda5da8dSAndroid Build Coastguard Worker          'Python may add types to the type hierarchy (e.g., rational '
12880*cda5da8dSAndroid Build Coastguard Worker          'numbers,\n'
12881*cda5da8dSAndroid Build Coastguard Worker          'efficiently stored arrays of integers, etc.), although such '
12882*cda5da8dSAndroid Build Coastguard Worker          'additions\n'
12883*cda5da8dSAndroid Build Coastguard Worker          'will often be provided via the standard library instead.\n'
12884*cda5da8dSAndroid Build Coastguard Worker          '\n'
12885*cda5da8dSAndroid Build Coastguard Worker          'Some of the type descriptions below contain a paragraph listing\n'
12886*cda5da8dSAndroid Build Coastguard Worker          '‘special attributes.’  These are attributes that provide access to '
12887*cda5da8dSAndroid Build Coastguard Worker          'the\n'
12888*cda5da8dSAndroid Build Coastguard Worker          'implementation and are not intended for general use.  Their '
12889*cda5da8dSAndroid Build Coastguard Worker          'definition\n'
12890*cda5da8dSAndroid Build Coastguard Worker          'may change in the future.\n'
12891*cda5da8dSAndroid Build Coastguard Worker          '\n'
12892*cda5da8dSAndroid Build Coastguard Worker          'None\n'
12893*cda5da8dSAndroid Build Coastguard Worker          '   This type has a single value.  There is a single object with '
12894*cda5da8dSAndroid Build Coastguard Worker          'this\n'
12895*cda5da8dSAndroid Build Coastguard Worker          '   value. This object is accessed through the built-in name "None". '
12896*cda5da8dSAndroid Build Coastguard Worker          'It\n'
12897*cda5da8dSAndroid Build Coastguard Worker          '   is used to signify the absence of a value in many situations, '
12898*cda5da8dSAndroid Build Coastguard Worker          'e.g.,\n'
12899*cda5da8dSAndroid Build Coastguard Worker          '   it is returned from functions that don’t explicitly return\n'
12900*cda5da8dSAndroid Build Coastguard Worker          '   anything. Its truth value is false.\n'
12901*cda5da8dSAndroid Build Coastguard Worker          '\n'
12902*cda5da8dSAndroid Build Coastguard Worker          'NotImplemented\n'
12903*cda5da8dSAndroid Build Coastguard Worker          '   This type has a single value.  There is a single object with '
12904*cda5da8dSAndroid Build Coastguard Worker          'this\n'
12905*cda5da8dSAndroid Build Coastguard Worker          '   value. This object is accessed through the built-in name\n'
12906*cda5da8dSAndroid Build Coastguard Worker          '   "NotImplemented". Numeric methods and rich comparison methods\n'
12907*cda5da8dSAndroid Build Coastguard Worker          '   should return this value if they do not implement the operation '
12908*cda5da8dSAndroid Build Coastguard Worker          'for\n'
12909*cda5da8dSAndroid Build Coastguard Worker          '   the operands provided.  (The interpreter will then try the\n'
12910*cda5da8dSAndroid Build Coastguard Worker          '   reflected operation, or some other fallback, depending on the\n'
12911*cda5da8dSAndroid Build Coastguard Worker          '   operator.)  It should not be evaluated in a boolean context.\n'
12912*cda5da8dSAndroid Build Coastguard Worker          '\n'
12913*cda5da8dSAndroid Build Coastguard Worker          '   See Implementing the arithmetic operations for more details.\n'
12914*cda5da8dSAndroid Build Coastguard Worker          '\n'
12915*cda5da8dSAndroid Build Coastguard Worker          '   Changed in version 3.9: Evaluating "NotImplemented" in a '
12916*cda5da8dSAndroid Build Coastguard Worker          'boolean\n'
12917*cda5da8dSAndroid Build Coastguard Worker          '   context is deprecated. While it currently evaluates as true, it\n'
12918*cda5da8dSAndroid Build Coastguard Worker          '   will emit a "DeprecationWarning". It will raise a "TypeError" in '
12919*cda5da8dSAndroid Build Coastguard Worker          'a\n'
12920*cda5da8dSAndroid Build Coastguard Worker          '   future version of Python.\n'
12921*cda5da8dSAndroid Build Coastguard Worker          '\n'
12922*cda5da8dSAndroid Build Coastguard Worker          'Ellipsis\n'
12923*cda5da8dSAndroid Build Coastguard Worker          '   This type has a single value.  There is a single object with '
12924*cda5da8dSAndroid Build Coastguard Worker          'this\n'
12925*cda5da8dSAndroid Build Coastguard Worker          '   value. This object is accessed through the literal "..." or the\n'
12926*cda5da8dSAndroid Build Coastguard Worker          '   built-in name "Ellipsis".  Its truth value is true.\n'
12927*cda5da8dSAndroid Build Coastguard Worker          '\n'
12928*cda5da8dSAndroid Build Coastguard Worker          '"numbers.Number"\n'
12929*cda5da8dSAndroid Build Coastguard Worker          '   These are created by numeric literals and returned as results '
12930*cda5da8dSAndroid Build Coastguard Worker          'by\n'
12931*cda5da8dSAndroid Build Coastguard Worker          '   arithmetic operators and arithmetic built-in functions.  '
12932*cda5da8dSAndroid Build Coastguard Worker          'Numeric\n'
12933*cda5da8dSAndroid Build Coastguard Worker          '   objects are immutable; once created their value never changes.\n'
12934*cda5da8dSAndroid Build Coastguard Worker          '   Python numbers are of course strongly related to mathematical\n'
12935*cda5da8dSAndroid Build Coastguard Worker          '   numbers, but subject to the limitations of numerical '
12936*cda5da8dSAndroid Build Coastguard Worker          'representation\n'
12937*cda5da8dSAndroid Build Coastguard Worker          '   in computers.\n'
12938*cda5da8dSAndroid Build Coastguard Worker          '\n'
12939*cda5da8dSAndroid Build Coastguard Worker          '   The string representations of the numeric classes, computed by\n'
12940*cda5da8dSAndroid Build Coastguard Worker          '   "__repr__()" and "__str__()", have the following properties:\n'
12941*cda5da8dSAndroid Build Coastguard Worker          '\n'
12942*cda5da8dSAndroid Build Coastguard Worker          '   * They are valid numeric literals which, when passed to their '
12943*cda5da8dSAndroid Build Coastguard Worker          'class\n'
12944*cda5da8dSAndroid Build Coastguard Worker          '     constructor, produce an object having the value of the '
12945*cda5da8dSAndroid Build Coastguard Worker          'original\n'
12946*cda5da8dSAndroid Build Coastguard Worker          '     numeric.\n'
12947*cda5da8dSAndroid Build Coastguard Worker          '\n'
12948*cda5da8dSAndroid Build Coastguard Worker          '   * The representation is in base 10, when possible.\n'
12949*cda5da8dSAndroid Build Coastguard Worker          '\n'
12950*cda5da8dSAndroid Build Coastguard Worker          '   * Leading zeros, possibly excepting a single zero before a '
12951*cda5da8dSAndroid Build Coastguard Worker          'decimal\n'
12952*cda5da8dSAndroid Build Coastguard Worker          '     point, are not shown.\n'
12953*cda5da8dSAndroid Build Coastguard Worker          '\n'
12954*cda5da8dSAndroid Build Coastguard Worker          '   * Trailing zeros, possibly excepting a single zero after a '
12955*cda5da8dSAndroid Build Coastguard Worker          'decimal\n'
12956*cda5da8dSAndroid Build Coastguard Worker          '     point, are not shown.\n'
12957*cda5da8dSAndroid Build Coastguard Worker          '\n'
12958*cda5da8dSAndroid Build Coastguard Worker          '   * A sign is shown only when the number is negative.\n'
12959*cda5da8dSAndroid Build Coastguard Worker          '\n'
12960*cda5da8dSAndroid Build Coastguard Worker          '   Python distinguishes between integers, floating point numbers, '
12961*cda5da8dSAndroid Build Coastguard Worker          'and\n'
12962*cda5da8dSAndroid Build Coastguard Worker          '   complex numbers:\n'
12963*cda5da8dSAndroid Build Coastguard Worker          '\n'
12964*cda5da8dSAndroid Build Coastguard Worker          '   "numbers.Integral"\n'
12965*cda5da8dSAndroid Build Coastguard Worker          '      These represent elements from the mathematical set of '
12966*cda5da8dSAndroid Build Coastguard Worker          'integers\n'
12967*cda5da8dSAndroid Build Coastguard Worker          '      (positive and negative).\n'
12968*cda5da8dSAndroid Build Coastguard Worker          '\n'
12969*cda5da8dSAndroid Build Coastguard Worker          '      There are two types of integers:\n'
12970*cda5da8dSAndroid Build Coastguard Worker          '\n'
12971*cda5da8dSAndroid Build Coastguard Worker          '      Integers ("int")\n'
12972*cda5da8dSAndroid Build Coastguard Worker          '         These represent numbers in an unlimited range, subject to\n'
12973*cda5da8dSAndroid Build Coastguard Worker          '         available (virtual) memory only.  For the purpose of '
12974*cda5da8dSAndroid Build Coastguard Worker          'shift\n'
12975*cda5da8dSAndroid Build Coastguard Worker          '         and mask operations, a binary representation is assumed, '
12976*cda5da8dSAndroid Build Coastguard Worker          'and\n'
12977*cda5da8dSAndroid Build Coastguard Worker          '         negative numbers are represented in a variant of 2’s\n'
12978*cda5da8dSAndroid Build Coastguard Worker          '         complement which gives the illusion of an infinite string '
12979*cda5da8dSAndroid Build Coastguard Worker          'of\n'
12980*cda5da8dSAndroid Build Coastguard Worker          '         sign bits extending to the left.\n'
12981*cda5da8dSAndroid Build Coastguard Worker          '\n'
12982*cda5da8dSAndroid Build Coastguard Worker          '      Booleans ("bool")\n'
12983*cda5da8dSAndroid Build Coastguard Worker          '         These represent the truth values False and True.  The two\n'
12984*cda5da8dSAndroid Build Coastguard Worker          '         objects representing the values "False" and "True" are '
12985*cda5da8dSAndroid Build Coastguard Worker          'the\n'
12986*cda5da8dSAndroid Build Coastguard Worker          '         only Boolean objects. The Boolean type is a subtype of '
12987*cda5da8dSAndroid Build Coastguard Worker          'the\n'
12988*cda5da8dSAndroid Build Coastguard Worker          '         integer type, and Boolean values behave like the values 0 '
12989*cda5da8dSAndroid Build Coastguard Worker          'and\n'
12990*cda5da8dSAndroid Build Coastguard Worker          '         1, respectively, in almost all contexts, the exception '
12991*cda5da8dSAndroid Build Coastguard Worker          'being\n'
12992*cda5da8dSAndroid Build Coastguard Worker          '         that when converted to a string, the strings ""False"" or\n'
12993*cda5da8dSAndroid Build Coastguard Worker          '         ""True"" are returned, respectively.\n'
12994*cda5da8dSAndroid Build Coastguard Worker          '\n'
12995*cda5da8dSAndroid Build Coastguard Worker          '      The rules for integer representation are intended to give '
12996*cda5da8dSAndroid Build Coastguard Worker          'the\n'
12997*cda5da8dSAndroid Build Coastguard Worker          '      most meaningful interpretation of shift and mask operations\n'
12998*cda5da8dSAndroid Build Coastguard Worker          '      involving negative integers.\n'
12999*cda5da8dSAndroid Build Coastguard Worker          '\n'
13000*cda5da8dSAndroid Build Coastguard Worker          '   "numbers.Real" ("float")\n'
13001*cda5da8dSAndroid Build Coastguard Worker          '      These represent machine-level double precision floating '
13002*cda5da8dSAndroid Build Coastguard Worker          'point\n'
13003*cda5da8dSAndroid Build Coastguard Worker          '      numbers. You are at the mercy of the underlying machine\n'
13004*cda5da8dSAndroid Build Coastguard Worker          '      architecture (and C or Java implementation) for the accepted\n'
13005*cda5da8dSAndroid Build Coastguard Worker          '      range and handling of overflow. Python does not support '
13006*cda5da8dSAndroid Build Coastguard Worker          'single-\n'
13007*cda5da8dSAndroid Build Coastguard Worker          '      precision floating point numbers; the savings in processor '
13008*cda5da8dSAndroid Build Coastguard Worker          'and\n'
13009*cda5da8dSAndroid Build Coastguard Worker          '      memory usage that are usually the reason for using these are\n'
13010*cda5da8dSAndroid Build Coastguard Worker          '      dwarfed by the overhead of using objects in Python, so there '
13011*cda5da8dSAndroid Build Coastguard Worker          'is\n'
13012*cda5da8dSAndroid Build Coastguard Worker          '      no reason to complicate the language with two kinds of '
13013*cda5da8dSAndroid Build Coastguard Worker          'floating\n'
13014*cda5da8dSAndroid Build Coastguard Worker          '      point numbers.\n'
13015*cda5da8dSAndroid Build Coastguard Worker          '\n'
13016*cda5da8dSAndroid Build Coastguard Worker          '   "numbers.Complex" ("complex")\n'
13017*cda5da8dSAndroid Build Coastguard Worker          '      These represent complex numbers as a pair of machine-level\n'
13018*cda5da8dSAndroid Build Coastguard Worker          '      double precision floating point numbers.  The same caveats '
13019*cda5da8dSAndroid Build Coastguard Worker          'apply\n'
13020*cda5da8dSAndroid Build Coastguard Worker          '      as for floating point numbers. The real and imaginary parts '
13021*cda5da8dSAndroid Build Coastguard Worker          'of a\n'
13022*cda5da8dSAndroid Build Coastguard Worker          '      complex number "z" can be retrieved through the read-only\n'
13023*cda5da8dSAndroid Build Coastguard Worker          '      attributes "z.real" and "z.imag".\n'
13024*cda5da8dSAndroid Build Coastguard Worker          '\n'
13025*cda5da8dSAndroid Build Coastguard Worker          'Sequences\n'
13026*cda5da8dSAndroid Build Coastguard Worker          '   These represent finite ordered sets indexed by non-negative\n'
13027*cda5da8dSAndroid Build Coastguard Worker          '   numbers. The built-in function "len()" returns the number of '
13028*cda5da8dSAndroid Build Coastguard Worker          'items\n'
13029*cda5da8dSAndroid Build Coastguard Worker          '   of a sequence. When the length of a sequence is *n*, the index '
13030*cda5da8dSAndroid Build Coastguard Worker          'set\n'
13031*cda5da8dSAndroid Build Coastguard Worker          '   contains the numbers 0, 1, …, *n*-1.  Item *i* of sequence *a* '
13032*cda5da8dSAndroid Build Coastguard Worker          'is\n'
13033*cda5da8dSAndroid Build Coastguard Worker          '   selected by "a[i]".\n'
13034*cda5da8dSAndroid Build Coastguard Worker          '\n'
13035*cda5da8dSAndroid Build Coastguard Worker          '   Sequences also support slicing: "a[i:j]" selects all items with\n'
13036*cda5da8dSAndroid Build Coastguard Worker          '   index *k* such that *i* "<=" *k* "<" *j*.  When used as an\n'
13037*cda5da8dSAndroid Build Coastguard Worker          '   expression, a slice is a sequence of the same type.  This '
13038*cda5da8dSAndroid Build Coastguard Worker          'implies\n'
13039*cda5da8dSAndroid Build Coastguard Worker          '   that the index set is renumbered so that it starts at 0.\n'
13040*cda5da8dSAndroid Build Coastguard Worker          '\n'
13041*cda5da8dSAndroid Build Coastguard Worker          '   Some sequences also support “extended slicing” with a third '
13042*cda5da8dSAndroid Build Coastguard Worker          '“step”\n'
13043*cda5da8dSAndroid Build Coastguard Worker          '   parameter: "a[i:j:k]" selects all items of *a* with index *x* '
13044*cda5da8dSAndroid Build Coastguard Worker          'where\n'
13045*cda5da8dSAndroid Build Coastguard Worker          '   "x = i + n*k", *n* ">=" "0" and *i* "<=" *x* "<" *j*.\n'
13046*cda5da8dSAndroid Build Coastguard Worker          '\n'
13047*cda5da8dSAndroid Build Coastguard Worker          '   Sequences are distinguished according to their mutability:\n'
13048*cda5da8dSAndroid Build Coastguard Worker          '\n'
13049*cda5da8dSAndroid Build Coastguard Worker          '   Immutable sequences\n'
13050*cda5da8dSAndroid Build Coastguard Worker          '      An object of an immutable sequence type cannot change once it '
13051*cda5da8dSAndroid Build Coastguard Worker          'is\n'
13052*cda5da8dSAndroid Build Coastguard Worker          '      created.  (If the object contains references to other '
13053*cda5da8dSAndroid Build Coastguard Worker          'objects,\n'
13054*cda5da8dSAndroid Build Coastguard Worker          '      these other objects may be mutable and may be changed; '
13055*cda5da8dSAndroid Build Coastguard Worker          'however,\n'
13056*cda5da8dSAndroid Build Coastguard Worker          '      the collection of objects directly referenced by an '
13057*cda5da8dSAndroid Build Coastguard Worker          'immutable\n'
13058*cda5da8dSAndroid Build Coastguard Worker          '      object cannot change.)\n'
13059*cda5da8dSAndroid Build Coastguard Worker          '\n'
13060*cda5da8dSAndroid Build Coastguard Worker          '      The following types are immutable sequences:\n'
13061*cda5da8dSAndroid Build Coastguard Worker          '\n'
13062*cda5da8dSAndroid Build Coastguard Worker          '      Strings\n'
13063*cda5da8dSAndroid Build Coastguard Worker          '         A string is a sequence of values that represent Unicode '
13064*cda5da8dSAndroid Build Coastguard Worker          'code\n'
13065*cda5da8dSAndroid Build Coastguard Worker          '         points. All the code points in the range "U+0000 - '
13066*cda5da8dSAndroid Build Coastguard Worker          'U+10FFFF"\n'
13067*cda5da8dSAndroid Build Coastguard Worker          '         can be represented in a string.  Python doesn’t have a '
13068*cda5da8dSAndroid Build Coastguard Worker          'char\n'
13069*cda5da8dSAndroid Build Coastguard Worker          '         type; instead, every code point in the string is '
13070*cda5da8dSAndroid Build Coastguard Worker          'represented\n'
13071*cda5da8dSAndroid Build Coastguard Worker          '         as a string object with length "1".  The built-in '
13072*cda5da8dSAndroid Build Coastguard Worker          'function\n'
13073*cda5da8dSAndroid Build Coastguard Worker          '         "ord()" converts a code point from its string form to an\n'
13074*cda5da8dSAndroid Build Coastguard Worker          '         integer in the range "0 - 10FFFF"; "chr()" converts an\n'
13075*cda5da8dSAndroid Build Coastguard Worker          '         integer in the range "0 - 10FFFF" to the corresponding '
13076*cda5da8dSAndroid Build Coastguard Worker          'length\n'
13077*cda5da8dSAndroid Build Coastguard Worker          '         "1" string object. "str.encode()" can be used to convert '
13078*cda5da8dSAndroid Build Coastguard Worker          'a\n'
13079*cda5da8dSAndroid Build Coastguard Worker          '         "str" to "bytes" using the given text encoding, and\n'
13080*cda5da8dSAndroid Build Coastguard Worker          '         "bytes.decode()" can be used to achieve the opposite.\n'
13081*cda5da8dSAndroid Build Coastguard Worker          '\n'
13082*cda5da8dSAndroid Build Coastguard Worker          '      Tuples\n'
13083*cda5da8dSAndroid Build Coastguard Worker          '         The items of a tuple are arbitrary Python objects. Tuples '
13084*cda5da8dSAndroid Build Coastguard Worker          'of\n'
13085*cda5da8dSAndroid Build Coastguard Worker          '         two or more items are formed by comma-separated lists of\n'
13086*cda5da8dSAndroid Build Coastguard Worker          '         expressions.  A tuple of one item (a ‘singleton’) can be\n'
13087*cda5da8dSAndroid Build Coastguard Worker          '         formed by affixing a comma to an expression (an expression '
13088*cda5da8dSAndroid Build Coastguard Worker          'by\n'
13089*cda5da8dSAndroid Build Coastguard Worker          '         itself does not create a tuple, since parentheses must be\n'
13090*cda5da8dSAndroid Build Coastguard Worker          '         usable for grouping of expressions).  An empty tuple can '
13091*cda5da8dSAndroid Build Coastguard Worker          'be\n'
13092*cda5da8dSAndroid Build Coastguard Worker          '         formed by an empty pair of parentheses.\n'
13093*cda5da8dSAndroid Build Coastguard Worker          '\n'
13094*cda5da8dSAndroid Build Coastguard Worker          '      Bytes\n'
13095*cda5da8dSAndroid Build Coastguard Worker          '         A bytes object is an immutable array.  The items are '
13096*cda5da8dSAndroid Build Coastguard Worker          '8-bit\n'
13097*cda5da8dSAndroid Build Coastguard Worker          '         bytes, represented by integers in the range 0 <= x < 256.\n'
13098*cda5da8dSAndroid Build Coastguard Worker          '         Bytes literals (like "b\'abc\'") and the built-in '
13099*cda5da8dSAndroid Build Coastguard Worker          '"bytes()"\n'
13100*cda5da8dSAndroid Build Coastguard Worker          '         constructor can be used to create bytes objects.  Also, '
13101*cda5da8dSAndroid Build Coastguard Worker          'bytes\n'
13102*cda5da8dSAndroid Build Coastguard Worker          '         objects can be decoded to strings via the "decode()" '
13103*cda5da8dSAndroid Build Coastguard Worker          'method.\n'
13104*cda5da8dSAndroid Build Coastguard Worker          '\n'
13105*cda5da8dSAndroid Build Coastguard Worker          '   Mutable sequences\n'
13106*cda5da8dSAndroid Build Coastguard Worker          '      Mutable sequences can be changed after they are created.  '
13107*cda5da8dSAndroid Build Coastguard Worker          'The\n'
13108*cda5da8dSAndroid Build Coastguard Worker          '      subscription and slicing notations can be used as the target '
13109*cda5da8dSAndroid Build Coastguard Worker          'of\n'
13110*cda5da8dSAndroid Build Coastguard Worker          '      assignment and "del" (delete) statements.\n'
13111*cda5da8dSAndroid Build Coastguard Worker          '\n'
13112*cda5da8dSAndroid Build Coastguard Worker          '      There are currently two intrinsic mutable sequence types:\n'
13113*cda5da8dSAndroid Build Coastguard Worker          '\n'
13114*cda5da8dSAndroid Build Coastguard Worker          '      Lists\n'
13115*cda5da8dSAndroid Build Coastguard Worker          '         The items of a list are arbitrary Python objects.  Lists '
13116*cda5da8dSAndroid Build Coastguard Worker          'are\n'
13117*cda5da8dSAndroid Build Coastguard Worker          '         formed by placing a comma-separated list of expressions '
13118*cda5da8dSAndroid Build Coastguard Worker          'in\n'
13119*cda5da8dSAndroid Build Coastguard Worker          '         square brackets. (Note that there are no special cases '
13120*cda5da8dSAndroid Build Coastguard Worker          'needed\n'
13121*cda5da8dSAndroid Build Coastguard Worker          '         to form lists of length 0 or 1.)\n'
13122*cda5da8dSAndroid Build Coastguard Worker          '\n'
13123*cda5da8dSAndroid Build Coastguard Worker          '      Byte Arrays\n'
13124*cda5da8dSAndroid Build Coastguard Worker          '         A bytearray object is a mutable array. They are created '
13125*cda5da8dSAndroid Build Coastguard Worker          'by\n'
13126*cda5da8dSAndroid Build Coastguard Worker          '         the built-in "bytearray()" constructor.  Aside from being\n'
13127*cda5da8dSAndroid Build Coastguard Worker          '         mutable (and hence unhashable), byte arrays otherwise '
13128*cda5da8dSAndroid Build Coastguard Worker          'provide\n'
13129*cda5da8dSAndroid Build Coastguard Worker          '         the same interface and functionality as immutable "bytes"\n'
13130*cda5da8dSAndroid Build Coastguard Worker          '         objects.\n'
13131*cda5da8dSAndroid Build Coastguard Worker          '\n'
13132*cda5da8dSAndroid Build Coastguard Worker          '      The extension module "array" provides an additional example '
13133*cda5da8dSAndroid Build Coastguard Worker          'of a\n'
13134*cda5da8dSAndroid Build Coastguard Worker          '      mutable sequence type, as does the "collections" module.\n'
13135*cda5da8dSAndroid Build Coastguard Worker          '\n'
13136*cda5da8dSAndroid Build Coastguard Worker          'Set types\n'
13137*cda5da8dSAndroid Build Coastguard Worker          '   These represent unordered, finite sets of unique, immutable\n'
13138*cda5da8dSAndroid Build Coastguard Worker          '   objects. As such, they cannot be indexed by any subscript. '
13139*cda5da8dSAndroid Build Coastguard Worker          'However,\n'
13140*cda5da8dSAndroid Build Coastguard Worker          '   they can be iterated over, and the built-in function "len()"\n'
13141*cda5da8dSAndroid Build Coastguard Worker          '   returns the number of items in a set. Common uses for sets are '
13142*cda5da8dSAndroid Build Coastguard Worker          'fast\n'
13143*cda5da8dSAndroid Build Coastguard Worker          '   membership testing, removing duplicates from a sequence, and\n'
13144*cda5da8dSAndroid Build Coastguard Worker          '   computing mathematical operations such as intersection, union,\n'
13145*cda5da8dSAndroid Build Coastguard Worker          '   difference, and symmetric difference.\n'
13146*cda5da8dSAndroid Build Coastguard Worker          '\n'
13147*cda5da8dSAndroid Build Coastguard Worker          '   For set elements, the same immutability rules apply as for\n'
13148*cda5da8dSAndroid Build Coastguard Worker          '   dictionary keys. Note that numeric types obey the normal rules '
13149*cda5da8dSAndroid Build Coastguard Worker          'for\n'
13150*cda5da8dSAndroid Build Coastguard Worker          '   numeric comparison: if two numbers compare equal (e.g., "1" and\n'
13151*cda5da8dSAndroid Build Coastguard Worker          '   "1.0"), only one of them can be contained in a set.\n'
13152*cda5da8dSAndroid Build Coastguard Worker          '\n'
13153*cda5da8dSAndroid Build Coastguard Worker          '   There are currently two intrinsic set types:\n'
13154*cda5da8dSAndroid Build Coastguard Worker          '\n'
13155*cda5da8dSAndroid Build Coastguard Worker          '   Sets\n'
13156*cda5da8dSAndroid Build Coastguard Worker          '      These represent a mutable set. They are created by the '
13157*cda5da8dSAndroid Build Coastguard Worker          'built-in\n'
13158*cda5da8dSAndroid Build Coastguard Worker          '      "set()" constructor and can be modified afterwards by '
13159*cda5da8dSAndroid Build Coastguard Worker          'several\n'
13160*cda5da8dSAndroid Build Coastguard Worker          '      methods, such as "add()".\n'
13161*cda5da8dSAndroid Build Coastguard Worker          '\n'
13162*cda5da8dSAndroid Build Coastguard Worker          '   Frozen sets\n'
13163*cda5da8dSAndroid Build Coastguard Worker          '      These represent an immutable set.  They are created by the\n'
13164*cda5da8dSAndroid Build Coastguard Worker          '      built-in "frozenset()" constructor.  As a frozenset is '
13165*cda5da8dSAndroid Build Coastguard Worker          'immutable\n'
13166*cda5da8dSAndroid Build Coastguard Worker          '      and *hashable*, it can be used again as an element of '
13167*cda5da8dSAndroid Build Coastguard Worker          'another\n'
13168*cda5da8dSAndroid Build Coastguard Worker          '      set, or as a dictionary key.\n'
13169*cda5da8dSAndroid Build Coastguard Worker          '\n'
13170*cda5da8dSAndroid Build Coastguard Worker          'Mappings\n'
13171*cda5da8dSAndroid Build Coastguard Worker          '   These represent finite sets of objects indexed by arbitrary '
13172*cda5da8dSAndroid Build Coastguard Worker          'index\n'
13173*cda5da8dSAndroid Build Coastguard Worker          '   sets. The subscript notation "a[k]" selects the item indexed by '
13174*cda5da8dSAndroid Build Coastguard Worker          '"k"\n'
13175*cda5da8dSAndroid Build Coastguard Worker          '   from the mapping "a"; this can be used in expressions and as '
13176*cda5da8dSAndroid Build Coastguard Worker          'the\n'
13177*cda5da8dSAndroid Build Coastguard Worker          '   target of assignments or "del" statements. The built-in '
13178*cda5da8dSAndroid Build Coastguard Worker          'function\n'
13179*cda5da8dSAndroid Build Coastguard Worker          '   "len()" returns the number of items in a mapping.\n'
13180*cda5da8dSAndroid Build Coastguard Worker          '\n'
13181*cda5da8dSAndroid Build Coastguard Worker          '   There is currently a single intrinsic mapping type:\n'
13182*cda5da8dSAndroid Build Coastguard Worker          '\n'
13183*cda5da8dSAndroid Build Coastguard Worker          '   Dictionaries\n'
13184*cda5da8dSAndroid Build Coastguard Worker          '      These represent finite sets of objects indexed by nearly\n'
13185*cda5da8dSAndroid Build Coastguard Worker          '      arbitrary values.  The only types of values not acceptable '
13186*cda5da8dSAndroid Build Coastguard Worker          'as\n'
13187*cda5da8dSAndroid Build Coastguard Worker          '      keys are values containing lists or dictionaries or other\n'
13188*cda5da8dSAndroid Build Coastguard Worker          '      mutable types that are compared by value rather than by '
13189*cda5da8dSAndroid Build Coastguard Worker          'object\n'
13190*cda5da8dSAndroid Build Coastguard Worker          '      identity, the reason being that the efficient implementation '
13191*cda5da8dSAndroid Build Coastguard Worker          'of\n'
13192*cda5da8dSAndroid Build Coastguard Worker          '      dictionaries requires a key’s hash value to remain constant.\n'
13193*cda5da8dSAndroid Build Coastguard Worker          '      Numeric types used for keys obey the normal rules for '
13194*cda5da8dSAndroid Build Coastguard Worker          'numeric\n'
13195*cda5da8dSAndroid Build Coastguard Worker          '      comparison: if two numbers compare equal (e.g., "1" and '
13196*cda5da8dSAndroid Build Coastguard Worker          '"1.0")\n'
13197*cda5da8dSAndroid Build Coastguard Worker          '      then they can be used interchangeably to index the same\n'
13198*cda5da8dSAndroid Build Coastguard Worker          '      dictionary entry.\n'
13199*cda5da8dSAndroid Build Coastguard Worker          '\n'
13200*cda5da8dSAndroid Build Coastguard Worker          '      Dictionaries preserve insertion order, meaning that keys will '
13201*cda5da8dSAndroid Build Coastguard Worker          'be\n'
13202*cda5da8dSAndroid Build Coastguard Worker          '      produced in the same order they were added sequentially over '
13203*cda5da8dSAndroid Build Coastguard Worker          'the\n'
13204*cda5da8dSAndroid Build Coastguard Worker          '      dictionary. Replacing an existing key does not change the '
13205*cda5da8dSAndroid Build Coastguard Worker          'order,\n'
13206*cda5da8dSAndroid Build Coastguard Worker          '      however removing a key and re-inserting it will add it to '
13207*cda5da8dSAndroid Build Coastguard Worker          'the\n'
13208*cda5da8dSAndroid Build Coastguard Worker          '      end instead of keeping its old place.\n'
13209*cda5da8dSAndroid Build Coastguard Worker          '\n'
13210*cda5da8dSAndroid Build Coastguard Worker          '      Dictionaries are mutable; they can be created by the "{...}"\n'
13211*cda5da8dSAndroid Build Coastguard Worker          '      notation (see section Dictionary displays).\n'
13212*cda5da8dSAndroid Build Coastguard Worker          '\n'
13213*cda5da8dSAndroid Build Coastguard Worker          '      The extension modules "dbm.ndbm" and "dbm.gnu" provide\n'
13214*cda5da8dSAndroid Build Coastguard Worker          '      additional examples of mapping types, as does the '
13215*cda5da8dSAndroid Build Coastguard Worker          '"collections"\n'
13216*cda5da8dSAndroid Build Coastguard Worker          '      module.\n'
13217*cda5da8dSAndroid Build Coastguard Worker          '\n'
13218*cda5da8dSAndroid Build Coastguard Worker          '      Changed in version 3.7: Dictionaries did not preserve '
13219*cda5da8dSAndroid Build Coastguard Worker          'insertion\n'
13220*cda5da8dSAndroid Build Coastguard Worker          '      order in versions of Python before 3.6. In CPython 3.6,\n'
13221*cda5da8dSAndroid Build Coastguard Worker          '      insertion order was preserved, but it was considered an\n'
13222*cda5da8dSAndroid Build Coastguard Worker          '      implementation detail at that time rather than a language\n'
13223*cda5da8dSAndroid Build Coastguard Worker          '      guarantee.\n'
13224*cda5da8dSAndroid Build Coastguard Worker          '\n'
13225*cda5da8dSAndroid Build Coastguard Worker          'Callable types\n'
13226*cda5da8dSAndroid Build Coastguard Worker          '   These are the types to which the function call operation (see\n'
13227*cda5da8dSAndroid Build Coastguard Worker          '   section Calls) can be applied:\n'
13228*cda5da8dSAndroid Build Coastguard Worker          '\n'
13229*cda5da8dSAndroid Build Coastguard Worker          '   User-defined functions\n'
13230*cda5da8dSAndroid Build Coastguard Worker          '      A user-defined function object is created by a function\n'
13231*cda5da8dSAndroid Build Coastguard Worker          '      definition (see section Function definitions).  It should be\n'
13232*cda5da8dSAndroid Build Coastguard Worker          '      called with an argument list containing the same number of '
13233*cda5da8dSAndroid Build Coastguard Worker          'items\n'
13234*cda5da8dSAndroid Build Coastguard Worker          '      as the function’s formal parameter list.\n'
13235*cda5da8dSAndroid Build Coastguard Worker          '\n'
13236*cda5da8dSAndroid Build Coastguard Worker          '      Special attributes:\n'
13237*cda5da8dSAndroid Build Coastguard Worker          '\n'
13238*cda5da8dSAndroid Build Coastguard Worker          '      '
13239*cda5da8dSAndroid Build Coastguard Worker          '+---------------------------+---------------------------------+-------------+\n'
13240*cda5da8dSAndroid Build Coastguard Worker          '      | Attribute                 | Meaning                         '
13241*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13242*cda5da8dSAndroid Build Coastguard Worker          '      '
13243*cda5da8dSAndroid Build Coastguard Worker          '|===========================|=================================|=============|\n'
13244*cda5da8dSAndroid Build Coastguard Worker          '      | "__doc__"                 | The function’s documentation    '
13245*cda5da8dSAndroid Build Coastguard Worker          '| Writable    |\n'
13246*cda5da8dSAndroid Build Coastguard Worker          '      |                           | string, or "None" if            '
13247*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13248*cda5da8dSAndroid Build Coastguard Worker          '      |                           | unavailable; not inherited by   '
13249*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13250*cda5da8dSAndroid Build Coastguard Worker          '      |                           | subclasses.                     '
13251*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13252*cda5da8dSAndroid Build Coastguard Worker          '      '
13253*cda5da8dSAndroid Build Coastguard Worker          '+---------------------------+---------------------------------+-------------+\n'
13254*cda5da8dSAndroid Build Coastguard Worker          '      | "__name__"                | The function’s name.            '
13255*cda5da8dSAndroid Build Coastguard Worker          '| Writable    |\n'
13256*cda5da8dSAndroid Build Coastguard Worker          '      '
13257*cda5da8dSAndroid Build Coastguard Worker          '+---------------------------+---------------------------------+-------------+\n'
13258*cda5da8dSAndroid Build Coastguard Worker          '      | "__qualname__"            | The function’s *qualified       '
13259*cda5da8dSAndroid Build Coastguard Worker          '| Writable    |\n'
13260*cda5da8dSAndroid Build Coastguard Worker          '      |                           | name*.  New in version 3.3.     '
13261*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13262*cda5da8dSAndroid Build Coastguard Worker          '      '
13263*cda5da8dSAndroid Build Coastguard Worker          '+---------------------------+---------------------------------+-------------+\n'
13264*cda5da8dSAndroid Build Coastguard Worker          '      | "__module__"              | The name of the module the      '
13265*cda5da8dSAndroid Build Coastguard Worker          '| Writable    |\n'
13266*cda5da8dSAndroid Build Coastguard Worker          '      |                           | function was defined in, or     '
13267*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13268*cda5da8dSAndroid Build Coastguard Worker          '      |                           | "None" if unavailable.          '
13269*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13270*cda5da8dSAndroid Build Coastguard Worker          '      '
13271*cda5da8dSAndroid Build Coastguard Worker          '+---------------------------+---------------------------------+-------------+\n'
13272*cda5da8dSAndroid Build Coastguard Worker          '      | "__defaults__"            | A tuple containing default      '
13273*cda5da8dSAndroid Build Coastguard Worker          '| Writable    |\n'
13274*cda5da8dSAndroid Build Coastguard Worker          '      |                           | argument values for those       '
13275*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13276*cda5da8dSAndroid Build Coastguard Worker          '      |                           | arguments that have defaults,   '
13277*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13278*cda5da8dSAndroid Build Coastguard Worker          '      |                           | or "None" if no arguments have  '
13279*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13280*cda5da8dSAndroid Build Coastguard Worker          '      |                           | a default value.                '
13281*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13282*cda5da8dSAndroid Build Coastguard Worker          '      '
13283*cda5da8dSAndroid Build Coastguard Worker          '+---------------------------+---------------------------------+-------------+\n'
13284*cda5da8dSAndroid Build Coastguard Worker          '      | "__code__"                | The code object representing    '
13285*cda5da8dSAndroid Build Coastguard Worker          '| Writable    |\n'
13286*cda5da8dSAndroid Build Coastguard Worker          '      |                           | the compiled function body.     '
13287*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13288*cda5da8dSAndroid Build Coastguard Worker          '      '
13289*cda5da8dSAndroid Build Coastguard Worker          '+---------------------------+---------------------------------+-------------+\n'
13290*cda5da8dSAndroid Build Coastguard Worker          '      | "__globals__"             | A reference to the dictionary   '
13291*cda5da8dSAndroid Build Coastguard Worker          '| Read-only   |\n'
13292*cda5da8dSAndroid Build Coastguard Worker          '      |                           | that holds the function’s       '
13293*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13294*cda5da8dSAndroid Build Coastguard Worker          '      |                           | global variables — the global   '
13295*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13296*cda5da8dSAndroid Build Coastguard Worker          '      |                           | namespace of the module in      '
13297*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13298*cda5da8dSAndroid Build Coastguard Worker          '      |                           | which the function was defined. '
13299*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13300*cda5da8dSAndroid Build Coastguard Worker          '      '
13301*cda5da8dSAndroid Build Coastguard Worker          '+---------------------------+---------------------------------+-------------+\n'
13302*cda5da8dSAndroid Build Coastguard Worker          '      | "__dict__"                | The namespace supporting        '
13303*cda5da8dSAndroid Build Coastguard Worker          '| Writable    |\n'
13304*cda5da8dSAndroid Build Coastguard Worker          '      |                           | arbitrary function attributes.  '
13305*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13306*cda5da8dSAndroid Build Coastguard Worker          '      '
13307*cda5da8dSAndroid Build Coastguard Worker          '+---------------------------+---------------------------------+-------------+\n'
13308*cda5da8dSAndroid Build Coastguard Worker          '      | "__closure__"             | "None" or a tuple of cells that '
13309*cda5da8dSAndroid Build Coastguard Worker          '| Read-only   |\n'
13310*cda5da8dSAndroid Build Coastguard Worker          '      |                           | contain bindings for the        '
13311*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13312*cda5da8dSAndroid Build Coastguard Worker          '      |                           | function’s free variables. See  '
13313*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13314*cda5da8dSAndroid Build Coastguard Worker          '      |                           | below for information on the    '
13315*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13316*cda5da8dSAndroid Build Coastguard Worker          '      |                           | "cell_contents" attribute.      '
13317*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13318*cda5da8dSAndroid Build Coastguard Worker          '      '
13319*cda5da8dSAndroid Build Coastguard Worker          '+---------------------------+---------------------------------+-------------+\n'
13320*cda5da8dSAndroid Build Coastguard Worker          '      | "__annotations__"         | A dict containing annotations   '
13321*cda5da8dSAndroid Build Coastguard Worker          '| Writable    |\n'
13322*cda5da8dSAndroid Build Coastguard Worker          '      |                           | of parameters.  The keys of the '
13323*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13324*cda5da8dSAndroid Build Coastguard Worker          '      |                           | dict are the parameter names,   '
13325*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13326*cda5da8dSAndroid Build Coastguard Worker          '      |                           | and "\'return\'" for the '
13327*cda5da8dSAndroid Build Coastguard Worker          'return   |             |\n'
13328*cda5da8dSAndroid Build Coastguard Worker          '      |                           | annotation, if provided.  For   '
13329*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13330*cda5da8dSAndroid Build Coastguard Worker          '      |                           | more information on working     '
13331*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13332*cda5da8dSAndroid Build Coastguard Worker          '      |                           | with this attribute, see        '
13333*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13334*cda5da8dSAndroid Build Coastguard Worker          '      |                           | Annotations Best Practices.     '
13335*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13336*cda5da8dSAndroid Build Coastguard Worker          '      '
13337*cda5da8dSAndroid Build Coastguard Worker          '+---------------------------+---------------------------------+-------------+\n'
13338*cda5da8dSAndroid Build Coastguard Worker          '      | "__kwdefaults__"          | A dict containing defaults for  '
13339*cda5da8dSAndroid Build Coastguard Worker          '| Writable    |\n'
13340*cda5da8dSAndroid Build Coastguard Worker          '      |                           | keyword-only parameters.        '
13341*cda5da8dSAndroid Build Coastguard Worker          '|             |\n'
13342*cda5da8dSAndroid Build Coastguard Worker          '      '
13343*cda5da8dSAndroid Build Coastguard Worker          '+---------------------------+---------------------------------+-------------+\n'
13344*cda5da8dSAndroid Build Coastguard Worker          '\n'
13345*cda5da8dSAndroid Build Coastguard Worker          '      Most of the attributes labelled “Writable” check the type of '
13346*cda5da8dSAndroid Build Coastguard Worker          'the\n'
13347*cda5da8dSAndroid Build Coastguard Worker          '      assigned value.\n'
13348*cda5da8dSAndroid Build Coastguard Worker          '\n'
13349*cda5da8dSAndroid Build Coastguard Worker          '      Function objects also support getting and setting arbitrary\n'
13350*cda5da8dSAndroid Build Coastguard Worker          '      attributes, which can be used, for example, to attach '
13351*cda5da8dSAndroid Build Coastguard Worker          'metadata\n'
13352*cda5da8dSAndroid Build Coastguard Worker          '      to functions.  Regular attribute dot-notation is used to get '
13353*cda5da8dSAndroid Build Coastguard Worker          'and\n'
13354*cda5da8dSAndroid Build Coastguard Worker          '      set such attributes. *Note that the current implementation '
13355*cda5da8dSAndroid Build Coastguard Worker          'only\n'
13356*cda5da8dSAndroid Build Coastguard Worker          '      supports function attributes on user-defined functions. '
13357*cda5da8dSAndroid Build Coastguard Worker          'Function\n'
13358*cda5da8dSAndroid Build Coastguard Worker          '      attributes on built-in functions may be supported in the\n'
13359*cda5da8dSAndroid Build Coastguard Worker          '      future.*\n'
13360*cda5da8dSAndroid Build Coastguard Worker          '\n'
13361*cda5da8dSAndroid Build Coastguard Worker          '      A cell object has the attribute "cell_contents". This can be\n'
13362*cda5da8dSAndroid Build Coastguard Worker          '      used to get the value of the cell, as well as set the value.\n'
13363*cda5da8dSAndroid Build Coastguard Worker          '\n'
13364*cda5da8dSAndroid Build Coastguard Worker          '      Additional information about a function’s definition can be\n'
13365*cda5da8dSAndroid Build Coastguard Worker          '      retrieved from its code object; see the description of '
13366*cda5da8dSAndroid Build Coastguard Worker          'internal\n'
13367*cda5da8dSAndroid Build Coastguard Worker          '      types below. The "cell" type can be accessed in the "types"\n'
13368*cda5da8dSAndroid Build Coastguard Worker          '      module.\n'
13369*cda5da8dSAndroid Build Coastguard Worker          '\n'
13370*cda5da8dSAndroid Build Coastguard Worker          '   Instance methods\n'
13371*cda5da8dSAndroid Build Coastguard Worker          '      An instance method object combines a class, a class instance '
13372*cda5da8dSAndroid Build Coastguard Worker          'and\n'
13373*cda5da8dSAndroid Build Coastguard Worker          '      any callable object (normally a user-defined function).\n'
13374*cda5da8dSAndroid Build Coastguard Worker          '\n'
13375*cda5da8dSAndroid Build Coastguard Worker          '      Special read-only attributes: "__self__" is the class '
13376*cda5da8dSAndroid Build Coastguard Worker          'instance\n'
13377*cda5da8dSAndroid Build Coastguard Worker          '      object, "__func__" is the function object; "__doc__" is the\n'
13378*cda5da8dSAndroid Build Coastguard Worker          '      method’s documentation (same as "__func__.__doc__"); '
13379*cda5da8dSAndroid Build Coastguard Worker          '"__name__"\n'
13380*cda5da8dSAndroid Build Coastguard Worker          '      is the method name (same as "__func__.__name__"); '
13381*cda5da8dSAndroid Build Coastguard Worker          '"__module__"\n'
13382*cda5da8dSAndroid Build Coastguard Worker          '      is the name of the module the method was defined in, or '
13383*cda5da8dSAndroid Build Coastguard Worker          '"None"\n'
13384*cda5da8dSAndroid Build Coastguard Worker          '      if unavailable.\n'
13385*cda5da8dSAndroid Build Coastguard Worker          '\n'
13386*cda5da8dSAndroid Build Coastguard Worker          '      Methods also support accessing (but not setting) the '
13387*cda5da8dSAndroid Build Coastguard Worker          'arbitrary\n'
13388*cda5da8dSAndroid Build Coastguard Worker          '      function attributes on the underlying function object.\n'
13389*cda5da8dSAndroid Build Coastguard Worker          '\n'
13390*cda5da8dSAndroid Build Coastguard Worker          '      User-defined method objects may be created when getting an\n'
13391*cda5da8dSAndroid Build Coastguard Worker          '      attribute of a class (perhaps via an instance of that class), '
13392*cda5da8dSAndroid Build Coastguard Worker          'if\n'
13393*cda5da8dSAndroid Build Coastguard Worker          '      that attribute is a user-defined function object or a class\n'
13394*cda5da8dSAndroid Build Coastguard Worker          '      method object.\n'
13395*cda5da8dSAndroid Build Coastguard Worker          '\n'
13396*cda5da8dSAndroid Build Coastguard Worker          '      When an instance method object is created by retrieving a '
13397*cda5da8dSAndroid Build Coastguard Worker          'user-\n'
13398*cda5da8dSAndroid Build Coastguard Worker          '      defined function object from a class via one of its '
13399*cda5da8dSAndroid Build Coastguard Worker          'instances,\n'
13400*cda5da8dSAndroid Build Coastguard Worker          '      its "__self__" attribute is the instance, and the method '
13401*cda5da8dSAndroid Build Coastguard Worker          'object\n'
13402*cda5da8dSAndroid Build Coastguard Worker          '      is said to be bound.  The new method’s "__func__" attribute '
13403*cda5da8dSAndroid Build Coastguard Worker          'is\n'
13404*cda5da8dSAndroid Build Coastguard Worker          '      the original function object.\n'
13405*cda5da8dSAndroid Build Coastguard Worker          '\n'
13406*cda5da8dSAndroid Build Coastguard Worker          '      When an instance method object is created by retrieving a '
13407*cda5da8dSAndroid Build Coastguard Worker          'class\n'
13408*cda5da8dSAndroid Build Coastguard Worker          '      method object from a class or instance, its "__self__" '
13409*cda5da8dSAndroid Build Coastguard Worker          'attribute\n'
13410*cda5da8dSAndroid Build Coastguard Worker          '      is the class itself, and its "__func__" attribute is the\n'
13411*cda5da8dSAndroid Build Coastguard Worker          '      function object underlying the class method.\n'
13412*cda5da8dSAndroid Build Coastguard Worker          '\n'
13413*cda5da8dSAndroid Build Coastguard Worker          '      When an instance method object is called, the underlying\n'
13414*cda5da8dSAndroid Build Coastguard Worker          '      function ("__func__") is called, inserting the class '
13415*cda5da8dSAndroid Build Coastguard Worker          'instance\n'
13416*cda5da8dSAndroid Build Coastguard Worker          '      ("__self__") in front of the argument list.  For instance, '
13417*cda5da8dSAndroid Build Coastguard Worker          'when\n'
13418*cda5da8dSAndroid Build Coastguard Worker          '      "C" is a class which contains a definition for a function '
13419*cda5da8dSAndroid Build Coastguard Worker          '"f()",\n'
13420*cda5da8dSAndroid Build Coastguard Worker          '      and "x" is an instance of "C", calling "x.f(1)" is equivalent '
13421*cda5da8dSAndroid Build Coastguard Worker          'to\n'
13422*cda5da8dSAndroid Build Coastguard Worker          '      calling "C.f(x, 1)".\n'
13423*cda5da8dSAndroid Build Coastguard Worker          '\n'
13424*cda5da8dSAndroid Build Coastguard Worker          '      When an instance method object is derived from a class '
13425*cda5da8dSAndroid Build Coastguard Worker          'method\n'
13426*cda5da8dSAndroid Build Coastguard Worker          '      object, the “class instance” stored in "__self__" will '
13427*cda5da8dSAndroid Build Coastguard Worker          'actually\n'
13428*cda5da8dSAndroid Build Coastguard Worker          '      be the class itself, so that calling either "x.f(1)" or '
13429*cda5da8dSAndroid Build Coastguard Worker          '"C.f(1)"\n'
13430*cda5da8dSAndroid Build Coastguard Worker          '      is equivalent to calling "f(C,1)" where "f" is the '
13431*cda5da8dSAndroid Build Coastguard Worker          'underlying\n'
13432*cda5da8dSAndroid Build Coastguard Worker          '      function.\n'
13433*cda5da8dSAndroid Build Coastguard Worker          '\n'
13434*cda5da8dSAndroid Build Coastguard Worker          '      Note that the transformation from function object to '
13435*cda5da8dSAndroid Build Coastguard Worker          'instance\n'
13436*cda5da8dSAndroid Build Coastguard Worker          '      method object happens each time the attribute is retrieved '
13437*cda5da8dSAndroid Build Coastguard Worker          'from\n'
13438*cda5da8dSAndroid Build Coastguard Worker          '      the instance.  In some cases, a fruitful optimization is to\n'
13439*cda5da8dSAndroid Build Coastguard Worker          '      assign the attribute to a local variable and call that local\n'
13440*cda5da8dSAndroid Build Coastguard Worker          '      variable. Also notice that this transformation only happens '
13441*cda5da8dSAndroid Build Coastguard Worker          'for\n'
13442*cda5da8dSAndroid Build Coastguard Worker          '      user-defined functions; other callable objects (and all non-\n'
13443*cda5da8dSAndroid Build Coastguard Worker          '      callable objects) are retrieved without transformation.  It '
13444*cda5da8dSAndroid Build Coastguard Worker          'is\n'
13445*cda5da8dSAndroid Build Coastguard Worker          '      also important to note that user-defined functions which are\n'
13446*cda5da8dSAndroid Build Coastguard Worker          '      attributes of a class instance are not converted to bound\n'
13447*cda5da8dSAndroid Build Coastguard Worker          '      methods; this *only* happens when the function is an '
13448*cda5da8dSAndroid Build Coastguard Worker          'attribute\n'
13449*cda5da8dSAndroid Build Coastguard Worker          '      of the class.\n'
13450*cda5da8dSAndroid Build Coastguard Worker          '\n'
13451*cda5da8dSAndroid Build Coastguard Worker          '   Generator functions\n'
13452*cda5da8dSAndroid Build Coastguard Worker          '      A function or method which uses the "yield" statement (see\n'
13453*cda5da8dSAndroid Build Coastguard Worker          '      section The yield statement) is called a *generator '
13454*cda5da8dSAndroid Build Coastguard Worker          'function*.\n'
13455*cda5da8dSAndroid Build Coastguard Worker          '      Such a function, when called, always returns an *iterator*\n'
13456*cda5da8dSAndroid Build Coastguard Worker          '      object which can be used to execute the body of the '
13457*cda5da8dSAndroid Build Coastguard Worker          'function:\n'
13458*cda5da8dSAndroid Build Coastguard Worker          '      calling the iterator’s "iterator.__next__()" method will '
13459*cda5da8dSAndroid Build Coastguard Worker          'cause\n'
13460*cda5da8dSAndroid Build Coastguard Worker          '      the function to execute until it provides a value using the\n'
13461*cda5da8dSAndroid Build Coastguard Worker          '      "yield" statement.  When the function executes a "return"\n'
13462*cda5da8dSAndroid Build Coastguard Worker          '      statement or falls off the end, a "StopIteration" exception '
13463*cda5da8dSAndroid Build Coastguard Worker          'is\n'
13464*cda5da8dSAndroid Build Coastguard Worker          '      raised and the iterator will have reached the end of the set '
13465*cda5da8dSAndroid Build Coastguard Worker          'of\n'
13466*cda5da8dSAndroid Build Coastguard Worker          '      values to be returned.\n'
13467*cda5da8dSAndroid Build Coastguard Worker          '\n'
13468*cda5da8dSAndroid Build Coastguard Worker          '   Coroutine functions\n'
13469*cda5da8dSAndroid Build Coastguard Worker          '      A function or method which is defined using "async def" is\n'
13470*cda5da8dSAndroid Build Coastguard Worker          '      called a *coroutine function*.  Such a function, when '
13471*cda5da8dSAndroid Build Coastguard Worker          'called,\n'
13472*cda5da8dSAndroid Build Coastguard Worker          '      returns a *coroutine* object.  It may contain "await"\n'
13473*cda5da8dSAndroid Build Coastguard Worker          '      expressions, as well as "async with" and "async for" '
13474*cda5da8dSAndroid Build Coastguard Worker          'statements.\n'
13475*cda5da8dSAndroid Build Coastguard Worker          '      See also the Coroutine Objects section.\n'
13476*cda5da8dSAndroid Build Coastguard Worker          '\n'
13477*cda5da8dSAndroid Build Coastguard Worker          '   Asynchronous generator functions\n'
13478*cda5da8dSAndroid Build Coastguard Worker          '      A function or method which is defined using "async def" and\n'
13479*cda5da8dSAndroid Build Coastguard Worker          '      which uses the "yield" statement is called a *asynchronous\n'
13480*cda5da8dSAndroid Build Coastguard Worker          '      generator function*.  Such a function, when called, returns '
13481*cda5da8dSAndroid Build Coastguard Worker          'an\n'
13482*cda5da8dSAndroid Build Coastguard Worker          '      *asynchronous iterator* object which can be used in an '
13483*cda5da8dSAndroid Build Coastguard Worker          '"async\n'
13484*cda5da8dSAndroid Build Coastguard Worker          '      for" statement to execute the body of the function.\n'
13485*cda5da8dSAndroid Build Coastguard Worker          '\n'
13486*cda5da8dSAndroid Build Coastguard Worker          '      Calling the asynchronous iterator’s "aiterator.__anext__" '
13487*cda5da8dSAndroid Build Coastguard Worker          'method\n'
13488*cda5da8dSAndroid Build Coastguard Worker          '      will return an *awaitable* which when awaited will execute '
13489*cda5da8dSAndroid Build Coastguard Worker          'until\n'
13490*cda5da8dSAndroid Build Coastguard Worker          '      it provides a value using the "yield" expression.  When the\n'
13491*cda5da8dSAndroid Build Coastguard Worker          '      function executes an empty "return" statement or falls off '
13492*cda5da8dSAndroid Build Coastguard Worker          'the\n'
13493*cda5da8dSAndroid Build Coastguard Worker          '      end, a "StopAsyncIteration" exception is raised and the\n'
13494*cda5da8dSAndroid Build Coastguard Worker          '      asynchronous iterator will have reached the end of the set '
13495*cda5da8dSAndroid Build Coastguard Worker          'of\n'
13496*cda5da8dSAndroid Build Coastguard Worker          '      values to be yielded.\n'
13497*cda5da8dSAndroid Build Coastguard Worker          '\n'
13498*cda5da8dSAndroid Build Coastguard Worker          '   Built-in functions\n'
13499*cda5da8dSAndroid Build Coastguard Worker          '      A built-in function object is a wrapper around a C function.\n'
13500*cda5da8dSAndroid Build Coastguard Worker          '      Examples of built-in functions are "len()" and "math.sin()"\n'
13501*cda5da8dSAndroid Build Coastguard Worker          '      ("math" is a standard built-in module). The number and type '
13502*cda5da8dSAndroid Build Coastguard Worker          'of\n'
13503*cda5da8dSAndroid Build Coastguard Worker          '      the arguments are determined by the C function. Special '
13504*cda5da8dSAndroid Build Coastguard Worker          'read-\n'
13505*cda5da8dSAndroid Build Coastguard Worker          '      only attributes: "__doc__" is the function’s documentation\n'
13506*cda5da8dSAndroid Build Coastguard Worker          '      string, or "None" if unavailable; "__name__" is the '
13507*cda5da8dSAndroid Build Coastguard Worker          'function’s\n'
13508*cda5da8dSAndroid Build Coastguard Worker          '      name; "__self__" is set to "None" (but see the next item);\n'
13509*cda5da8dSAndroid Build Coastguard Worker          '      "__module__" is the name of the module the function was '
13510*cda5da8dSAndroid Build Coastguard Worker          'defined\n'
13511*cda5da8dSAndroid Build Coastguard Worker          '      in or "None" if unavailable.\n'
13512*cda5da8dSAndroid Build Coastguard Worker          '\n'
13513*cda5da8dSAndroid Build Coastguard Worker          '   Built-in methods\n'
13514*cda5da8dSAndroid Build Coastguard Worker          '      This is really a different disguise of a built-in function, '
13515*cda5da8dSAndroid Build Coastguard Worker          'this\n'
13516*cda5da8dSAndroid Build Coastguard Worker          '      time containing an object passed to the C function as an\n'
13517*cda5da8dSAndroid Build Coastguard Worker          '      implicit extra argument.  An example of a built-in method is\n'
13518*cda5da8dSAndroid Build Coastguard Worker          '      "alist.append()", assuming *alist* is a list object. In this\n'
13519*cda5da8dSAndroid Build Coastguard Worker          '      case, the special read-only attribute "__self__" is set to '
13520*cda5da8dSAndroid Build Coastguard Worker          'the\n'
13521*cda5da8dSAndroid Build Coastguard Worker          '      object denoted by *alist*.\n'
13522*cda5da8dSAndroid Build Coastguard Worker          '\n'
13523*cda5da8dSAndroid Build Coastguard Worker          '   Classes\n'
13524*cda5da8dSAndroid Build Coastguard Worker          '      Classes are callable.  These objects normally act as '
13525*cda5da8dSAndroid Build Coastguard Worker          'factories\n'
13526*cda5da8dSAndroid Build Coastguard Worker          '      for new instances of themselves, but variations are possible '
13527*cda5da8dSAndroid Build Coastguard Worker          'for\n'
13528*cda5da8dSAndroid Build Coastguard Worker          '      class types that override "__new__()".  The arguments of the\n'
13529*cda5da8dSAndroid Build Coastguard Worker          '      call are passed to "__new__()" and, in the typical case, to\n'
13530*cda5da8dSAndroid Build Coastguard Worker          '      "__init__()" to initialize the new instance.\n'
13531*cda5da8dSAndroid Build Coastguard Worker          '\n'
13532*cda5da8dSAndroid Build Coastguard Worker          '   Class Instances\n'
13533*cda5da8dSAndroid Build Coastguard Worker          '      Instances of arbitrary classes can be made callable by '
13534*cda5da8dSAndroid Build Coastguard Worker          'defining\n'
13535*cda5da8dSAndroid Build Coastguard Worker          '      a "__call__()" method in their class.\n'
13536*cda5da8dSAndroid Build Coastguard Worker          '\n'
13537*cda5da8dSAndroid Build Coastguard Worker          'Modules\n'
13538*cda5da8dSAndroid Build Coastguard Worker          '   Modules are a basic organizational unit of Python code, and are\n'
13539*cda5da8dSAndroid Build Coastguard Worker          '   created by the import system as invoked either by the "import"\n'
13540*cda5da8dSAndroid Build Coastguard Worker          '   statement, or by calling functions such as\n'
13541*cda5da8dSAndroid Build Coastguard Worker          '   "importlib.import_module()" and built-in "__import__()".  A '
13542*cda5da8dSAndroid Build Coastguard Worker          'module\n'
13543*cda5da8dSAndroid Build Coastguard Worker          '   object has a namespace implemented by a dictionary object (this '
13544*cda5da8dSAndroid Build Coastguard Worker          'is\n'
13545*cda5da8dSAndroid Build Coastguard Worker          '   the dictionary referenced by the "__globals__" attribute of\n'
13546*cda5da8dSAndroid Build Coastguard Worker          '   functions defined in the module).  Attribute references are\n'
13547*cda5da8dSAndroid Build Coastguard Worker          '   translated to lookups in this dictionary, e.g., "m.x" is '
13548*cda5da8dSAndroid Build Coastguard Worker          'equivalent\n'
13549*cda5da8dSAndroid Build Coastguard Worker          '   to "m.__dict__["x"]". A module object does not contain the code\n'
13550*cda5da8dSAndroid Build Coastguard Worker          '   object used to initialize the module (since it isn’t needed '
13551*cda5da8dSAndroid Build Coastguard Worker          'once\n'
13552*cda5da8dSAndroid Build Coastguard Worker          '   the initialization is done).\n'
13553*cda5da8dSAndroid Build Coastguard Worker          '\n'
13554*cda5da8dSAndroid Build Coastguard Worker          '   Attribute assignment updates the module’s namespace dictionary,\n'
13555*cda5da8dSAndroid Build Coastguard Worker          '   e.g., "m.x = 1" is equivalent to "m.__dict__["x"] = 1".\n'
13556*cda5da8dSAndroid Build Coastguard Worker          '\n'
13557*cda5da8dSAndroid Build Coastguard Worker          '   Predefined (writable) attributes:\n'
13558*cda5da8dSAndroid Build Coastguard Worker          '\n'
13559*cda5da8dSAndroid Build Coastguard Worker          '      "__name__"\n'
13560*cda5da8dSAndroid Build Coastguard Worker          '         The module’s name.\n'
13561*cda5da8dSAndroid Build Coastguard Worker          '\n'
13562*cda5da8dSAndroid Build Coastguard Worker          '      "__doc__"\n'
13563*cda5da8dSAndroid Build Coastguard Worker          '         The module’s documentation string, or "None" if '
13564*cda5da8dSAndroid Build Coastguard Worker          'unavailable.\n'
13565*cda5da8dSAndroid Build Coastguard Worker          '\n'
13566*cda5da8dSAndroid Build Coastguard Worker          '      "__file__"\n'
13567*cda5da8dSAndroid Build Coastguard Worker          '         The pathname of the file from which the module was loaded, '
13568*cda5da8dSAndroid Build Coastguard Worker          'if\n'
13569*cda5da8dSAndroid Build Coastguard Worker          '         it was loaded from a file. The "__file__" attribute may '
13570*cda5da8dSAndroid Build Coastguard Worker          'be\n'
13571*cda5da8dSAndroid Build Coastguard Worker          '         missing for certain types of modules, such as C modules '
13572*cda5da8dSAndroid Build Coastguard Worker          'that\n'
13573*cda5da8dSAndroid Build Coastguard Worker          '         are statically linked into the interpreter.  For '
13574*cda5da8dSAndroid Build Coastguard Worker          'extension\n'
13575*cda5da8dSAndroid Build Coastguard Worker          '         modules loaded dynamically from a shared library, it’s '
13576*cda5da8dSAndroid Build Coastguard Worker          'the\n'
13577*cda5da8dSAndroid Build Coastguard Worker          '         pathname of the shared library file.\n'
13578*cda5da8dSAndroid Build Coastguard Worker          '\n'
13579*cda5da8dSAndroid Build Coastguard Worker          '      "__annotations__"\n'
13580*cda5da8dSAndroid Build Coastguard Worker          '         A dictionary containing *variable annotations* collected\n'
13581*cda5da8dSAndroid Build Coastguard Worker          '         during module body execution.  For best practices on '
13582*cda5da8dSAndroid Build Coastguard Worker          'working\n'
13583*cda5da8dSAndroid Build Coastguard Worker          '         with "__annotations__", please see Annotations Best\n'
13584*cda5da8dSAndroid Build Coastguard Worker          '         Practices.\n'
13585*cda5da8dSAndroid Build Coastguard Worker          '\n'
13586*cda5da8dSAndroid Build Coastguard Worker          '   Special read-only attribute: "__dict__" is the module’s '
13587*cda5da8dSAndroid Build Coastguard Worker          'namespace\n'
13588*cda5da8dSAndroid Build Coastguard Worker          '   as a dictionary object.\n'
13589*cda5da8dSAndroid Build Coastguard Worker          '\n'
13590*cda5da8dSAndroid Build Coastguard Worker          '   **CPython implementation detail:** Because of the way CPython\n'
13591*cda5da8dSAndroid Build Coastguard Worker          '   clears module dictionaries, the module dictionary will be '
13592*cda5da8dSAndroid Build Coastguard Worker          'cleared\n'
13593*cda5da8dSAndroid Build Coastguard Worker          '   when the module falls out of scope even if the dictionary still '
13594*cda5da8dSAndroid Build Coastguard Worker          'has\n'
13595*cda5da8dSAndroid Build Coastguard Worker          '   live references.  To avoid this, copy the dictionary or keep '
13596*cda5da8dSAndroid Build Coastguard Worker          'the\n'
13597*cda5da8dSAndroid Build Coastguard Worker          '   module around while using its dictionary directly.\n'
13598*cda5da8dSAndroid Build Coastguard Worker          '\n'
13599*cda5da8dSAndroid Build Coastguard Worker          'Custom classes\n'
13600*cda5da8dSAndroid Build Coastguard Worker          '   Custom class types are typically created by class definitions '
13601*cda5da8dSAndroid Build Coastguard Worker          '(see\n'
13602*cda5da8dSAndroid Build Coastguard Worker          '   section Class definitions).  A class has a namespace implemented '
13603*cda5da8dSAndroid Build Coastguard Worker          'by\n'
13604*cda5da8dSAndroid Build Coastguard Worker          '   a dictionary object. Class attribute references are translated '
13605*cda5da8dSAndroid Build Coastguard Worker          'to\n'
13606*cda5da8dSAndroid Build Coastguard Worker          '   lookups in this dictionary, e.g., "C.x" is translated to\n'
13607*cda5da8dSAndroid Build Coastguard Worker          '   "C.__dict__["x"]" (although there are a number of hooks which '
13608*cda5da8dSAndroid Build Coastguard Worker          'allow\n'
13609*cda5da8dSAndroid Build Coastguard Worker          '   for other means of locating attributes). When the attribute name '
13610*cda5da8dSAndroid Build Coastguard Worker          'is\n'
13611*cda5da8dSAndroid Build Coastguard Worker          '   not found there, the attribute search continues in the base\n'
13612*cda5da8dSAndroid Build Coastguard Worker          '   classes. This search of the base classes uses the C3 method\n'
13613*cda5da8dSAndroid Build Coastguard Worker          '   resolution order which behaves correctly even in the presence '
13614*cda5da8dSAndroid Build Coastguard Worker          'of\n'
13615*cda5da8dSAndroid Build Coastguard Worker          '   ‘diamond’ inheritance structures where there are multiple\n'
13616*cda5da8dSAndroid Build Coastguard Worker          '   inheritance paths leading back to a common ancestor. Additional\n'
13617*cda5da8dSAndroid Build Coastguard Worker          '   details on the C3 MRO used by Python can be found in the\n'
13618*cda5da8dSAndroid Build Coastguard Worker          '   documentation accompanying the 2.3 release at\n'
13619*cda5da8dSAndroid Build Coastguard Worker          '   https://www.python.org/download/releases/2.3/mro/.\n'
13620*cda5da8dSAndroid Build Coastguard Worker          '\n'
13621*cda5da8dSAndroid Build Coastguard Worker          '   When a class attribute reference (for class "C", say) would '
13622*cda5da8dSAndroid Build Coastguard Worker          'yield a\n'
13623*cda5da8dSAndroid Build Coastguard Worker          '   class method object, it is transformed into an instance method\n'
13624*cda5da8dSAndroid Build Coastguard Worker          '   object whose "__self__" attribute is "C".  When it would yield '
13625*cda5da8dSAndroid Build Coastguard Worker          'a\n'
13626*cda5da8dSAndroid Build Coastguard Worker          '   static method object, it is transformed into the object wrapped '
13627*cda5da8dSAndroid Build Coastguard Worker          'by\n'
13628*cda5da8dSAndroid Build Coastguard Worker          '   the static method object. See section Implementing Descriptors '
13629*cda5da8dSAndroid Build Coastguard Worker          'for\n'
13630*cda5da8dSAndroid Build Coastguard Worker          '   another way in which attributes retrieved from a class may '
13631*cda5da8dSAndroid Build Coastguard Worker          'differ\n'
13632*cda5da8dSAndroid Build Coastguard Worker          '   from those actually contained in its "__dict__".\n'
13633*cda5da8dSAndroid Build Coastguard Worker          '\n'
13634*cda5da8dSAndroid Build Coastguard Worker          '   Class attribute assignments update the class’s dictionary, '
13635*cda5da8dSAndroid Build Coastguard Worker          'never\n'
13636*cda5da8dSAndroid Build Coastguard Worker          '   the dictionary of a base class.\n'
13637*cda5da8dSAndroid Build Coastguard Worker          '\n'
13638*cda5da8dSAndroid Build Coastguard Worker          '   A class object can be called (see above) to yield a class '
13639*cda5da8dSAndroid Build Coastguard Worker          'instance\n'
13640*cda5da8dSAndroid Build Coastguard Worker          '   (see below).\n'
13641*cda5da8dSAndroid Build Coastguard Worker          '\n'
13642*cda5da8dSAndroid Build Coastguard Worker          '   Special attributes:\n'
13643*cda5da8dSAndroid Build Coastguard Worker          '\n'
13644*cda5da8dSAndroid Build Coastguard Worker          '      "__name__"\n'
13645*cda5da8dSAndroid Build Coastguard Worker          '         The class name.\n'
13646*cda5da8dSAndroid Build Coastguard Worker          '\n'
13647*cda5da8dSAndroid Build Coastguard Worker          '      "__module__"\n'
13648*cda5da8dSAndroid Build Coastguard Worker          '         The name of the module in which the class was defined.\n'
13649*cda5da8dSAndroid Build Coastguard Worker          '\n'
13650*cda5da8dSAndroid Build Coastguard Worker          '      "__dict__"\n'
13651*cda5da8dSAndroid Build Coastguard Worker          '         The dictionary containing the class’s namespace.\n'
13652*cda5da8dSAndroid Build Coastguard Worker          '\n'
13653*cda5da8dSAndroid Build Coastguard Worker          '      "__bases__"\n'
13654*cda5da8dSAndroid Build Coastguard Worker          '         A tuple containing the base classes, in the order of '
13655*cda5da8dSAndroid Build Coastguard Worker          'their\n'
13656*cda5da8dSAndroid Build Coastguard Worker          '         occurrence in the base class list.\n'
13657*cda5da8dSAndroid Build Coastguard Worker          '\n'
13658*cda5da8dSAndroid Build Coastguard Worker          '      "__doc__"\n'
13659*cda5da8dSAndroid Build Coastguard Worker          '         The class’s documentation string, or "None" if undefined.\n'
13660*cda5da8dSAndroid Build Coastguard Worker          '\n'
13661*cda5da8dSAndroid Build Coastguard Worker          '      "__annotations__"\n'
13662*cda5da8dSAndroid Build Coastguard Worker          '         A dictionary containing *variable annotations* collected\n'
13663*cda5da8dSAndroid Build Coastguard Worker          '         during class body execution.  For best practices on '
13664*cda5da8dSAndroid Build Coastguard Worker          'working\n'
13665*cda5da8dSAndroid Build Coastguard Worker          '         with "__annotations__", please see Annotations Best\n'
13666*cda5da8dSAndroid Build Coastguard Worker          '         Practices.\n'
13667*cda5da8dSAndroid Build Coastguard Worker          '\n'
13668*cda5da8dSAndroid Build Coastguard Worker          'Class instances\n'
13669*cda5da8dSAndroid Build Coastguard Worker          '   A class instance is created by calling a class object (see '
13670*cda5da8dSAndroid Build Coastguard Worker          'above).\n'
13671*cda5da8dSAndroid Build Coastguard Worker          '   A class instance has a namespace implemented as a dictionary '
13672*cda5da8dSAndroid Build Coastguard Worker          'which\n'
13673*cda5da8dSAndroid Build Coastguard Worker          '   is the first place in which attribute references are searched.\n'
13674*cda5da8dSAndroid Build Coastguard Worker          '   When an attribute is not found there, and the instance’s class '
13675*cda5da8dSAndroid Build Coastguard Worker          'has\n'
13676*cda5da8dSAndroid Build Coastguard Worker          '   an attribute by that name, the search continues with the class\n'
13677*cda5da8dSAndroid Build Coastguard Worker          '   attributes.  If a class attribute is found that is a '
13678*cda5da8dSAndroid Build Coastguard Worker          'user-defined\n'
13679*cda5da8dSAndroid Build Coastguard Worker          '   function object, it is transformed into an instance method '
13680*cda5da8dSAndroid Build Coastguard Worker          'object\n'
13681*cda5da8dSAndroid Build Coastguard Worker          '   whose "__self__" attribute is the instance.  Static method and\n'
13682*cda5da8dSAndroid Build Coastguard Worker          '   class method objects are also transformed; see above under\n'
13683*cda5da8dSAndroid Build Coastguard Worker          '   “Classes”.  See section Implementing Descriptors for another way '
13684*cda5da8dSAndroid Build Coastguard Worker          'in\n'
13685*cda5da8dSAndroid Build Coastguard Worker          '   which attributes of a class retrieved via its instances may '
13686*cda5da8dSAndroid Build Coastguard Worker          'differ\n'
13687*cda5da8dSAndroid Build Coastguard Worker          '   from the objects actually stored in the class’s "__dict__".  If '
13688*cda5da8dSAndroid Build Coastguard Worker          'no\n'
13689*cda5da8dSAndroid Build Coastguard Worker          '   class attribute is found, and the object’s class has a\n'
13690*cda5da8dSAndroid Build Coastguard Worker          '   "__getattr__()" method, that is called to satisfy the lookup.\n'
13691*cda5da8dSAndroid Build Coastguard Worker          '\n'
13692*cda5da8dSAndroid Build Coastguard Worker          '   Attribute assignments and deletions update the instance’s\n'
13693*cda5da8dSAndroid Build Coastguard Worker          '   dictionary, never a class’s dictionary.  If the class has a\n'
13694*cda5da8dSAndroid Build Coastguard Worker          '   "__setattr__()" or "__delattr__()" method, this is called '
13695*cda5da8dSAndroid Build Coastguard Worker          'instead\n'
13696*cda5da8dSAndroid Build Coastguard Worker          '   of updating the instance dictionary directly.\n'
13697*cda5da8dSAndroid Build Coastguard Worker          '\n'
13698*cda5da8dSAndroid Build Coastguard Worker          '   Class instances can pretend to be numbers, sequences, or '
13699*cda5da8dSAndroid Build Coastguard Worker          'mappings\n'
13700*cda5da8dSAndroid Build Coastguard Worker          '   if they have methods with certain special names.  See section\n'
13701*cda5da8dSAndroid Build Coastguard Worker          '   Special method names.\n'
13702*cda5da8dSAndroid Build Coastguard Worker          '\n'
13703*cda5da8dSAndroid Build Coastguard Worker          '   Special attributes: "__dict__" is the attribute dictionary;\n'
13704*cda5da8dSAndroid Build Coastguard Worker          '   "__class__" is the instance’s class.\n'
13705*cda5da8dSAndroid Build Coastguard Worker          '\n'
13706*cda5da8dSAndroid Build Coastguard Worker          'I/O objects (also known as file objects)\n'
13707*cda5da8dSAndroid Build Coastguard Worker          '   A *file object* represents an open file.  Various shortcuts are\n'
13708*cda5da8dSAndroid Build Coastguard Worker          '   available to create file objects: the "open()" built-in '
13709*cda5da8dSAndroid Build Coastguard Worker          'function,\n'
13710*cda5da8dSAndroid Build Coastguard Worker          '   and also "os.popen()", "os.fdopen()", and the "makefile()" '
13711*cda5da8dSAndroid Build Coastguard Worker          'method\n'
13712*cda5da8dSAndroid Build Coastguard Worker          '   of socket objects (and perhaps by other functions or methods\n'
13713*cda5da8dSAndroid Build Coastguard Worker          '   provided by extension modules).\n'
13714*cda5da8dSAndroid Build Coastguard Worker          '\n'
13715*cda5da8dSAndroid Build Coastguard Worker          '   The objects "sys.stdin", "sys.stdout" and "sys.stderr" are\n'
13716*cda5da8dSAndroid Build Coastguard Worker          '   initialized to file objects corresponding to the interpreter’s\n'
13717*cda5da8dSAndroid Build Coastguard Worker          '   standard input, output and error streams; they are all open in '
13718*cda5da8dSAndroid Build Coastguard Worker          'text\n'
13719*cda5da8dSAndroid Build Coastguard Worker          '   mode and therefore follow the interface defined by the\n'
13720*cda5da8dSAndroid Build Coastguard Worker          '   "io.TextIOBase" abstract class.\n'
13721*cda5da8dSAndroid Build Coastguard Worker          '\n'
13722*cda5da8dSAndroid Build Coastguard Worker          'Internal types\n'
13723*cda5da8dSAndroid Build Coastguard Worker          '   A few types used internally by the interpreter are exposed to '
13724*cda5da8dSAndroid Build Coastguard Worker          'the\n'
13725*cda5da8dSAndroid Build Coastguard Worker          '   user. Their definitions may change with future versions of the\n'
13726*cda5da8dSAndroid Build Coastguard Worker          '   interpreter, but they are mentioned here for completeness.\n'
13727*cda5da8dSAndroid Build Coastguard Worker          '\n'
13728*cda5da8dSAndroid Build Coastguard Worker          '   Code objects\n'
13729*cda5da8dSAndroid Build Coastguard Worker          '      Code objects represent *byte-compiled* executable Python '
13730*cda5da8dSAndroid Build Coastguard Worker          'code,\n'
13731*cda5da8dSAndroid Build Coastguard Worker          '      or *bytecode*. The difference between a code object and a\n'
13732*cda5da8dSAndroid Build Coastguard Worker          '      function object is that the function object contains an '
13733*cda5da8dSAndroid Build Coastguard Worker          'explicit\n'
13734*cda5da8dSAndroid Build Coastguard Worker          '      reference to the function’s globals (the module in which it '
13735*cda5da8dSAndroid Build Coastguard Worker          'was\n'
13736*cda5da8dSAndroid Build Coastguard Worker          '      defined), while a code object contains no context; also the\n'
13737*cda5da8dSAndroid Build Coastguard Worker          '      default argument values are stored in the function object, '
13738*cda5da8dSAndroid Build Coastguard Worker          'not\n'
13739*cda5da8dSAndroid Build Coastguard Worker          '      in the code object (because they represent values calculated '
13740*cda5da8dSAndroid Build Coastguard Worker          'at\n'
13741*cda5da8dSAndroid Build Coastguard Worker          '      run-time).  Unlike function objects, code objects are '
13742*cda5da8dSAndroid Build Coastguard Worker          'immutable\n'
13743*cda5da8dSAndroid Build Coastguard Worker          '      and contain no references (directly or indirectly) to '
13744*cda5da8dSAndroid Build Coastguard Worker          'mutable\n'
13745*cda5da8dSAndroid Build Coastguard Worker          '      objects.\n'
13746*cda5da8dSAndroid Build Coastguard Worker          '\n'
13747*cda5da8dSAndroid Build Coastguard Worker          '      Special read-only attributes: "co_name" gives the function '
13748*cda5da8dSAndroid Build Coastguard Worker          'name;\n'
13749*cda5da8dSAndroid Build Coastguard Worker          '      "co_qualname" gives the fully qualified function name;\n'
13750*cda5da8dSAndroid Build Coastguard Worker          '      "co_argcount" is the total number of positional arguments\n'
13751*cda5da8dSAndroid Build Coastguard Worker          '      (including positional-only arguments and arguments with '
13752*cda5da8dSAndroid Build Coastguard Worker          'default\n'
13753*cda5da8dSAndroid Build Coastguard Worker          '      values); "co_posonlyargcount" is the number of '
13754*cda5da8dSAndroid Build Coastguard Worker          'positional-only\n'
13755*cda5da8dSAndroid Build Coastguard Worker          '      arguments (including arguments with default values);\n'
13756*cda5da8dSAndroid Build Coastguard Worker          '      "co_kwonlyargcount" is the number of keyword-only arguments\n'
13757*cda5da8dSAndroid Build Coastguard Worker          '      (including arguments with default values); "co_nlocals" is '
13758*cda5da8dSAndroid Build Coastguard Worker          'the\n'
13759*cda5da8dSAndroid Build Coastguard Worker          '      number of local variables used by the function (including\n'
13760*cda5da8dSAndroid Build Coastguard Worker          '      arguments); "co_varnames" is a tuple containing the names of '
13761*cda5da8dSAndroid Build Coastguard Worker          'the\n'
13762*cda5da8dSAndroid Build Coastguard Worker          '      local variables (starting with the argument names);\n'
13763*cda5da8dSAndroid Build Coastguard Worker          '      "co_cellvars" is a tuple containing the names of local '
13764*cda5da8dSAndroid Build Coastguard Worker          'variables\n'
13765*cda5da8dSAndroid Build Coastguard Worker          '      that are referenced by nested functions; "co_freevars" is a\n'
13766*cda5da8dSAndroid Build Coastguard Worker          '      tuple containing the names of free variables; "co_code" is a\n'
13767*cda5da8dSAndroid Build Coastguard Worker          '      string representing the sequence of bytecode instructions;\n'
13768*cda5da8dSAndroid Build Coastguard Worker          '      "co_consts" is a tuple containing the literals used by the\n'
13769*cda5da8dSAndroid Build Coastguard Worker          '      bytecode; "co_names" is a tuple containing the names used by '
13770*cda5da8dSAndroid Build Coastguard Worker          'the\n'
13771*cda5da8dSAndroid Build Coastguard Worker          '      bytecode; "co_filename" is the filename from which the code '
13772*cda5da8dSAndroid Build Coastguard Worker          'was\n'
13773*cda5da8dSAndroid Build Coastguard Worker          '      compiled; "co_firstlineno" is the first line number of the\n'
13774*cda5da8dSAndroid Build Coastguard Worker          '      function; "co_lnotab" is a string encoding the mapping from\n'
13775*cda5da8dSAndroid Build Coastguard Worker          '      bytecode offsets to line numbers (for details see the source\n'
13776*cda5da8dSAndroid Build Coastguard Worker          '      code of the interpreter); "co_stacksize" is the required '
13777*cda5da8dSAndroid Build Coastguard Worker          'stack\n'
13778*cda5da8dSAndroid Build Coastguard Worker          '      size; "co_flags" is an integer encoding a number of flags '
13779*cda5da8dSAndroid Build Coastguard Worker          'for\n'
13780*cda5da8dSAndroid Build Coastguard Worker          '      the interpreter.\n'
13781*cda5da8dSAndroid Build Coastguard Worker          '\n'
13782*cda5da8dSAndroid Build Coastguard Worker          '      The following flag bits are defined for "co_flags": bit '
13783*cda5da8dSAndroid Build Coastguard Worker          '"0x04"\n'
13784*cda5da8dSAndroid Build Coastguard Worker          '      is set if the function uses the "*arguments" syntax to accept '
13785*cda5da8dSAndroid Build Coastguard Worker          'an\n'
13786*cda5da8dSAndroid Build Coastguard Worker          '      arbitrary number of positional arguments; bit "0x08" is set '
13787*cda5da8dSAndroid Build Coastguard Worker          'if\n'
13788*cda5da8dSAndroid Build Coastguard Worker          '      the function uses the "**keywords" syntax to accept '
13789*cda5da8dSAndroid Build Coastguard Worker          'arbitrary\n'
13790*cda5da8dSAndroid Build Coastguard Worker          '      keyword arguments; bit "0x20" is set if the function is a\n'
13791*cda5da8dSAndroid Build Coastguard Worker          '      generator.\n'
13792*cda5da8dSAndroid Build Coastguard Worker          '\n'
13793*cda5da8dSAndroid Build Coastguard Worker          '      Future feature declarations ("from __future__ import '
13794*cda5da8dSAndroid Build Coastguard Worker          'division")\n'
13795*cda5da8dSAndroid Build Coastguard Worker          '      also use bits in "co_flags" to indicate whether a code '
13796*cda5da8dSAndroid Build Coastguard Worker          'object\n'
13797*cda5da8dSAndroid Build Coastguard Worker          '      was compiled with a particular feature enabled: bit "0x2000" '
13798*cda5da8dSAndroid Build Coastguard Worker          'is\n'
13799*cda5da8dSAndroid Build Coastguard Worker          '      set if the function was compiled with future division '
13800*cda5da8dSAndroid Build Coastguard Worker          'enabled;\n'
13801*cda5da8dSAndroid Build Coastguard Worker          '      bits "0x10" and "0x1000" were used in earlier versions of\n'
13802*cda5da8dSAndroid Build Coastguard Worker          '      Python.\n'
13803*cda5da8dSAndroid Build Coastguard Worker          '\n'
13804*cda5da8dSAndroid Build Coastguard Worker          '      Other bits in "co_flags" are reserved for internal use.\n'
13805*cda5da8dSAndroid Build Coastguard Worker          '\n'
13806*cda5da8dSAndroid Build Coastguard Worker          '      If a code object represents a function, the first item in\n'
13807*cda5da8dSAndroid Build Coastguard Worker          '      "co_consts" is the documentation string of the function, or\n'
13808*cda5da8dSAndroid Build Coastguard Worker          '      "None" if undefined.\n'
13809*cda5da8dSAndroid Build Coastguard Worker          '\n'
13810*cda5da8dSAndroid Build Coastguard Worker          '      codeobject.co_positions()\n'
13811*cda5da8dSAndroid Build Coastguard Worker          '\n'
13812*cda5da8dSAndroid Build Coastguard Worker          '         Returns an iterable over the source code positions of '
13813*cda5da8dSAndroid Build Coastguard Worker          'each\n'
13814*cda5da8dSAndroid Build Coastguard Worker          '         bytecode instruction in the code object.\n'
13815*cda5da8dSAndroid Build Coastguard Worker          '\n'
13816*cda5da8dSAndroid Build Coastguard Worker          '         The iterator returns tuples containing the "(start_line,\n'
13817*cda5da8dSAndroid Build Coastguard Worker          '         end_line, start_column, end_column)". The *i-th* tuple\n'
13818*cda5da8dSAndroid Build Coastguard Worker          '         corresponds to the position of the source code that '
13819*cda5da8dSAndroid Build Coastguard Worker          'compiled\n'
13820*cda5da8dSAndroid Build Coastguard Worker          '         to the *i-th* instruction. Column information is '
13821*cda5da8dSAndroid Build Coastguard Worker          '0-indexed\n'
13822*cda5da8dSAndroid Build Coastguard Worker          '         utf-8 byte offsets on the given source line.\n'
13823*cda5da8dSAndroid Build Coastguard Worker          '\n'
13824*cda5da8dSAndroid Build Coastguard Worker          '         This positional information can be missing. A '
13825*cda5da8dSAndroid Build Coastguard Worker          'non-exhaustive\n'
13826*cda5da8dSAndroid Build Coastguard Worker          '         lists of cases where this may happen:\n'
13827*cda5da8dSAndroid Build Coastguard Worker          '\n'
13828*cda5da8dSAndroid Build Coastguard Worker          '         * Running the interpreter with "-X" "no_debug_ranges".\n'
13829*cda5da8dSAndroid Build Coastguard Worker          '\n'
13830*cda5da8dSAndroid Build Coastguard Worker          '         * Loading a pyc file compiled while using "-X"\n'
13831*cda5da8dSAndroid Build Coastguard Worker          '           "no_debug_ranges".\n'
13832*cda5da8dSAndroid Build Coastguard Worker          '\n'
13833*cda5da8dSAndroid Build Coastguard Worker          '         * Position tuples corresponding to artificial '
13834*cda5da8dSAndroid Build Coastguard Worker          'instructions.\n'
13835*cda5da8dSAndroid Build Coastguard Worker          '\n'
13836*cda5da8dSAndroid Build Coastguard Worker          '         * Line and column numbers that can’t be represented due '
13837*cda5da8dSAndroid Build Coastguard Worker          'to\n'
13838*cda5da8dSAndroid Build Coastguard Worker          '           implementation specific limitations.\n'
13839*cda5da8dSAndroid Build Coastguard Worker          '\n'
13840*cda5da8dSAndroid Build Coastguard Worker          '         When this occurs, some or all of the tuple elements can '
13841*cda5da8dSAndroid Build Coastguard Worker          'be\n'
13842*cda5da8dSAndroid Build Coastguard Worker          '         "None".\n'
13843*cda5da8dSAndroid Build Coastguard Worker          '\n'
13844*cda5da8dSAndroid Build Coastguard Worker          '         New in version 3.11.\n'
13845*cda5da8dSAndroid Build Coastguard Worker          '\n'
13846*cda5da8dSAndroid Build Coastguard Worker          '         Note:\n'
13847*cda5da8dSAndroid Build Coastguard Worker          '\n'
13848*cda5da8dSAndroid Build Coastguard Worker          '           This feature requires storing column positions in code\n'
13849*cda5da8dSAndroid Build Coastguard Worker          '           objects which may result in a small increase of disk '
13850*cda5da8dSAndroid Build Coastguard Worker          'usage\n'
13851*cda5da8dSAndroid Build Coastguard Worker          '           of compiled Python files or interpreter memory usage. '
13852*cda5da8dSAndroid Build Coastguard Worker          'To\n'
13853*cda5da8dSAndroid Build Coastguard Worker          '           avoid storing the extra information and/or deactivate\n'
13854*cda5da8dSAndroid Build Coastguard Worker          '           printing the extra traceback information, the "-X"\n'
13855*cda5da8dSAndroid Build Coastguard Worker          '           "no_debug_ranges" command line flag or the\n'
13856*cda5da8dSAndroid Build Coastguard Worker          '           "PYTHONNODEBUGRANGES" environment variable can be used.\n'
13857*cda5da8dSAndroid Build Coastguard Worker          '\n'
13858*cda5da8dSAndroid Build Coastguard Worker          '   Frame objects\n'
13859*cda5da8dSAndroid Build Coastguard Worker          '      Frame objects represent execution frames.  They may occur in\n'
13860*cda5da8dSAndroid Build Coastguard Worker          '      traceback objects (see below), and are also passed to '
13861*cda5da8dSAndroid Build Coastguard Worker          'registered\n'
13862*cda5da8dSAndroid Build Coastguard Worker          '      trace functions.\n'
13863*cda5da8dSAndroid Build Coastguard Worker          '\n'
13864*cda5da8dSAndroid Build Coastguard Worker          '      Special read-only attributes: "f_back" is to the previous '
13865*cda5da8dSAndroid Build Coastguard Worker          'stack\n'
13866*cda5da8dSAndroid Build Coastguard Worker          '      frame (towards the caller), or "None" if this is the bottom\n'
13867*cda5da8dSAndroid Build Coastguard Worker          '      stack frame; "f_code" is the code object being executed in '
13868*cda5da8dSAndroid Build Coastguard Worker          'this\n'
13869*cda5da8dSAndroid Build Coastguard Worker          '      frame; "f_locals" is the dictionary used to look up local\n'
13870*cda5da8dSAndroid Build Coastguard Worker          '      variables; "f_globals" is used for global variables;\n'
13871*cda5da8dSAndroid Build Coastguard Worker          '      "f_builtins" is used for built-in (intrinsic) names; '
13872*cda5da8dSAndroid Build Coastguard Worker          '"f_lasti"\n'
13873*cda5da8dSAndroid Build Coastguard Worker          '      gives the precise instruction (this is an index into the\n'
13874*cda5da8dSAndroid Build Coastguard Worker          '      bytecode string of the code object).\n'
13875*cda5da8dSAndroid Build Coastguard Worker          '\n'
13876*cda5da8dSAndroid Build Coastguard Worker          '      Accessing "f_code" raises an auditing event '
13877*cda5da8dSAndroid Build Coastguard Worker          '"object.__getattr__"\n'
13878*cda5da8dSAndroid Build Coastguard Worker          '      with arguments "obj" and ""f_code"".\n'
13879*cda5da8dSAndroid Build Coastguard Worker          '\n'
13880*cda5da8dSAndroid Build Coastguard Worker          '      Special writable attributes: "f_trace", if not "None", is a\n'
13881*cda5da8dSAndroid Build Coastguard Worker          '      function called for various events during code execution '
13882*cda5da8dSAndroid Build Coastguard Worker          '(this\n'
13883*cda5da8dSAndroid Build Coastguard Worker          '      is used by the debugger). Normally an event is triggered for\n'
13884*cda5da8dSAndroid Build Coastguard Worker          '      each new source line - this can be disabled by setting\n'
13885*cda5da8dSAndroid Build Coastguard Worker          '      "f_trace_lines" to "False".\n'
13886*cda5da8dSAndroid Build Coastguard Worker          '\n'
13887*cda5da8dSAndroid Build Coastguard Worker          '      Implementations *may* allow per-opcode events to be requested '
13888*cda5da8dSAndroid Build Coastguard Worker          'by\n'
13889*cda5da8dSAndroid Build Coastguard Worker          '      setting "f_trace_opcodes" to "True". Note that this may lead '
13890*cda5da8dSAndroid Build Coastguard Worker          'to\n'
13891*cda5da8dSAndroid Build Coastguard Worker          '      undefined interpreter behaviour if exceptions raised by the\n'
13892*cda5da8dSAndroid Build Coastguard Worker          '      trace function escape to the function being traced.\n'
13893*cda5da8dSAndroid Build Coastguard Worker          '\n'
13894*cda5da8dSAndroid Build Coastguard Worker          '      "f_lineno" is the current line number of the frame — writing '
13895*cda5da8dSAndroid Build Coastguard Worker          'to\n'
13896*cda5da8dSAndroid Build Coastguard Worker          '      this from within a trace function jumps to the given line '
13897*cda5da8dSAndroid Build Coastguard Worker          '(only\n'
13898*cda5da8dSAndroid Build Coastguard Worker          '      for the bottom-most frame).  A debugger can implement a Jump\n'
13899*cda5da8dSAndroid Build Coastguard Worker          '      command (aka Set Next Statement) by writing to f_lineno.\n'
13900*cda5da8dSAndroid Build Coastguard Worker          '\n'
13901*cda5da8dSAndroid Build Coastguard Worker          '      Frame objects support one method:\n'
13902*cda5da8dSAndroid Build Coastguard Worker          '\n'
13903*cda5da8dSAndroid Build Coastguard Worker          '      frame.clear()\n'
13904*cda5da8dSAndroid Build Coastguard Worker          '\n'
13905*cda5da8dSAndroid Build Coastguard Worker          '         This method clears all references to local variables held '
13906*cda5da8dSAndroid Build Coastguard Worker          'by\n'
13907*cda5da8dSAndroid Build Coastguard Worker          '         the frame.  Also, if the frame belonged to a generator, '
13908*cda5da8dSAndroid Build Coastguard Worker          'the\n'
13909*cda5da8dSAndroid Build Coastguard Worker          '         generator is finalized.  This helps break reference '
13910*cda5da8dSAndroid Build Coastguard Worker          'cycles\n'
13911*cda5da8dSAndroid Build Coastguard Worker          '         involving frame objects (for example when catching an\n'
13912*cda5da8dSAndroid Build Coastguard Worker          '         exception and storing its traceback for later use).\n'
13913*cda5da8dSAndroid Build Coastguard Worker          '\n'
13914*cda5da8dSAndroid Build Coastguard Worker          '         "RuntimeError" is raised if the frame is currently '
13915*cda5da8dSAndroid Build Coastguard Worker          'executing.\n'
13916*cda5da8dSAndroid Build Coastguard Worker          '\n'
13917*cda5da8dSAndroid Build Coastguard Worker          '         New in version 3.4.\n'
13918*cda5da8dSAndroid Build Coastguard Worker          '\n'
13919*cda5da8dSAndroid Build Coastguard Worker          '   Traceback objects\n'
13920*cda5da8dSAndroid Build Coastguard Worker          '      Traceback objects represent a stack trace of an exception.  '
13921*cda5da8dSAndroid Build Coastguard Worker          'A\n'
13922*cda5da8dSAndroid Build Coastguard Worker          '      traceback object is implicitly created when an exception '
13923*cda5da8dSAndroid Build Coastguard Worker          'occurs,\n'
13924*cda5da8dSAndroid Build Coastguard Worker          '      and may also be explicitly created by calling\n'
13925*cda5da8dSAndroid Build Coastguard Worker          '      "types.TracebackType".\n'
13926*cda5da8dSAndroid Build Coastguard Worker          '\n'
13927*cda5da8dSAndroid Build Coastguard Worker          '      For implicitly created tracebacks, when the search for an\n'
13928*cda5da8dSAndroid Build Coastguard Worker          '      exception handler unwinds the execution stack, at each '
13929*cda5da8dSAndroid Build Coastguard Worker          'unwound\n'
13930*cda5da8dSAndroid Build Coastguard Worker          '      level a traceback object is inserted in front of the current\n'
13931*cda5da8dSAndroid Build Coastguard Worker          '      traceback.  When an exception handler is entered, the stack\n'
13932*cda5da8dSAndroid Build Coastguard Worker          '      trace is made available to the program. (See section The try\n'
13933*cda5da8dSAndroid Build Coastguard Worker          '      statement.) It is accessible as the third item of the tuple\n'
13934*cda5da8dSAndroid Build Coastguard Worker          '      returned by "sys.exc_info()", and as the "__traceback__"\n'
13935*cda5da8dSAndroid Build Coastguard Worker          '      attribute of the caught exception.\n'
13936*cda5da8dSAndroid Build Coastguard Worker          '\n'
13937*cda5da8dSAndroid Build Coastguard Worker          '      When the program contains no suitable handler, the stack '
13938*cda5da8dSAndroid Build Coastguard Worker          'trace\n'
13939*cda5da8dSAndroid Build Coastguard Worker          '      is written (nicely formatted) to the standard error stream; '
13940*cda5da8dSAndroid Build Coastguard Worker          'if\n'
13941*cda5da8dSAndroid Build Coastguard Worker          '      the interpreter is interactive, it is also made available to '
13942*cda5da8dSAndroid Build Coastguard Worker          'the\n'
13943*cda5da8dSAndroid Build Coastguard Worker          '      user as "sys.last_traceback".\n'
13944*cda5da8dSAndroid Build Coastguard Worker          '\n'
13945*cda5da8dSAndroid Build Coastguard Worker          '      For explicitly created tracebacks, it is up to the creator '
13946*cda5da8dSAndroid Build Coastguard Worker          'of\n'
13947*cda5da8dSAndroid Build Coastguard Worker          '      the traceback to determine how the "tb_next" attributes '
13948*cda5da8dSAndroid Build Coastguard Worker          'should\n'
13949*cda5da8dSAndroid Build Coastguard Worker          '      be linked to form a full stack trace.\n'
13950*cda5da8dSAndroid Build Coastguard Worker          '\n'
13951*cda5da8dSAndroid Build Coastguard Worker          '      Special read-only attributes: "tb_frame" points to the '
13952*cda5da8dSAndroid Build Coastguard Worker          'execution\n'
13953*cda5da8dSAndroid Build Coastguard Worker          '      frame of the current level; "tb_lineno" gives the line '
13954*cda5da8dSAndroid Build Coastguard Worker          'number\n'
13955*cda5da8dSAndroid Build Coastguard Worker          '      where the exception occurred; "tb_lasti" indicates the '
13956*cda5da8dSAndroid Build Coastguard Worker          'precise\n'
13957*cda5da8dSAndroid Build Coastguard Worker          '      instruction. The line number and last instruction in the\n'
13958*cda5da8dSAndroid Build Coastguard Worker          '      traceback may differ from the line number of its frame object '
13959*cda5da8dSAndroid Build Coastguard Worker          'if\n'
13960*cda5da8dSAndroid Build Coastguard Worker          '      the exception occurred in a "try" statement with no matching\n'
13961*cda5da8dSAndroid Build Coastguard Worker          '      except clause or with a finally clause.\n'
13962*cda5da8dSAndroid Build Coastguard Worker          '\n'
13963*cda5da8dSAndroid Build Coastguard Worker          '      Accessing "tb_frame" raises an auditing event\n'
13964*cda5da8dSAndroid Build Coastguard Worker          '      "object.__getattr__" with arguments "obj" and ""tb_frame"".\n'
13965*cda5da8dSAndroid Build Coastguard Worker          '\n'
13966*cda5da8dSAndroid Build Coastguard Worker          '      Special writable attribute: "tb_next" is the next level in '
13967*cda5da8dSAndroid Build Coastguard Worker          'the\n'
13968*cda5da8dSAndroid Build Coastguard Worker          '      stack trace (towards the frame where the exception occurred), '
13969*cda5da8dSAndroid Build Coastguard Worker          'or\n'
13970*cda5da8dSAndroid Build Coastguard Worker          '      "None" if there is no next level.\n'
13971*cda5da8dSAndroid Build Coastguard Worker          '\n'
13972*cda5da8dSAndroid Build Coastguard Worker          '      Changed in version 3.7: Traceback objects can now be '
13973*cda5da8dSAndroid Build Coastguard Worker          'explicitly\n'
13974*cda5da8dSAndroid Build Coastguard Worker          '      instantiated from Python code, and the "tb_next" attribute '
13975*cda5da8dSAndroid Build Coastguard Worker          'of\n'
13976*cda5da8dSAndroid Build Coastguard Worker          '      existing instances can be updated.\n'
13977*cda5da8dSAndroid Build Coastguard Worker          '\n'
13978*cda5da8dSAndroid Build Coastguard Worker          '   Slice objects\n'
13979*cda5da8dSAndroid Build Coastguard Worker          '      Slice objects are used to represent slices for '
13980*cda5da8dSAndroid Build Coastguard Worker          '"__getitem__()"\n'
13981*cda5da8dSAndroid Build Coastguard Worker          '      methods.  They are also created by the built-in "slice()"\n'
13982*cda5da8dSAndroid Build Coastguard Worker          '      function.\n'
13983*cda5da8dSAndroid Build Coastguard Worker          '\n'
13984*cda5da8dSAndroid Build Coastguard Worker          '      Special read-only attributes: "start" is the lower bound; '
13985*cda5da8dSAndroid Build Coastguard Worker          '"stop"\n'
13986*cda5da8dSAndroid Build Coastguard Worker          '      is the upper bound; "step" is the step value; each is "None" '
13987*cda5da8dSAndroid Build Coastguard Worker          'if\n'
13988*cda5da8dSAndroid Build Coastguard Worker          '      omitted.  These attributes can have any type.\n'
13989*cda5da8dSAndroid Build Coastguard Worker          '\n'
13990*cda5da8dSAndroid Build Coastguard Worker          '      Slice objects support one method:\n'
13991*cda5da8dSAndroid Build Coastguard Worker          '\n'
13992*cda5da8dSAndroid Build Coastguard Worker          '      slice.indices(self, length)\n'
13993*cda5da8dSAndroid Build Coastguard Worker          '\n'
13994*cda5da8dSAndroid Build Coastguard Worker          '         This method takes a single integer argument *length* and\n'
13995*cda5da8dSAndroid Build Coastguard Worker          '         computes information about the slice that the slice '
13996*cda5da8dSAndroid Build Coastguard Worker          'object\n'
13997*cda5da8dSAndroid Build Coastguard Worker          '         would describe if applied to a sequence of *length* '
13998*cda5da8dSAndroid Build Coastguard Worker          'items.\n'
13999*cda5da8dSAndroid Build Coastguard Worker          '         It returns a tuple of three integers; respectively these '
14000*cda5da8dSAndroid Build Coastguard Worker          'are\n'
14001*cda5da8dSAndroid Build Coastguard Worker          '         the *start* and *stop* indices and the *step* or stride\n'
14002*cda5da8dSAndroid Build Coastguard Worker          '         length of the slice. Missing or out-of-bounds indices are\n'
14003*cda5da8dSAndroid Build Coastguard Worker          '         handled in a manner consistent with regular slices.\n'
14004*cda5da8dSAndroid Build Coastguard Worker          '\n'
14005*cda5da8dSAndroid Build Coastguard Worker          '   Static method objects\n'
14006*cda5da8dSAndroid Build Coastguard Worker          '      Static method objects provide a way of defeating the\n'
14007*cda5da8dSAndroid Build Coastguard Worker          '      transformation of function objects to method objects '
14008*cda5da8dSAndroid Build Coastguard Worker          'described\n'
14009*cda5da8dSAndroid Build Coastguard Worker          '      above. A static method object is a wrapper around any other\n'
14010*cda5da8dSAndroid Build Coastguard Worker          '      object, usually a user-defined method object. When a static\n'
14011*cda5da8dSAndroid Build Coastguard Worker          '      method object is retrieved from a class or a class instance, '
14012*cda5da8dSAndroid Build Coastguard Worker          'the\n'
14013*cda5da8dSAndroid Build Coastguard Worker          '      object actually returned is the wrapped object, which is not\n'
14014*cda5da8dSAndroid Build Coastguard Worker          '      subject to any further transformation. Static method objects '
14015*cda5da8dSAndroid Build Coastguard Worker          'are\n'
14016*cda5da8dSAndroid Build Coastguard Worker          '      also callable. Static method objects are created by the '
14017*cda5da8dSAndroid Build Coastguard Worker          'built-in\n'
14018*cda5da8dSAndroid Build Coastguard Worker          '      "staticmethod()" constructor.\n'
14019*cda5da8dSAndroid Build Coastguard Worker          '\n'
14020*cda5da8dSAndroid Build Coastguard Worker          '   Class method objects\n'
14021*cda5da8dSAndroid Build Coastguard Worker          '      A class method object, like a static method object, is a '
14022*cda5da8dSAndroid Build Coastguard Worker          'wrapper\n'
14023*cda5da8dSAndroid Build Coastguard Worker          '      around another object that alters the way in which that '
14024*cda5da8dSAndroid Build Coastguard Worker          'object\n'
14025*cda5da8dSAndroid Build Coastguard Worker          '      is retrieved from classes and class instances. The behaviour '
14026*cda5da8dSAndroid Build Coastguard Worker          'of\n'
14027*cda5da8dSAndroid Build Coastguard Worker          '      class method objects upon such retrieval is described above,\n'
14028*cda5da8dSAndroid Build Coastguard Worker          '      under “User-defined methods”. Class method objects are '
14029*cda5da8dSAndroid Build Coastguard Worker          'created\n'
14030*cda5da8dSAndroid Build Coastguard Worker          '      by the built-in "classmethod()" constructor.\n',
14031*cda5da8dSAndroid Build Coastguard Worker 'typesfunctions': 'Functions\n'
14032*cda5da8dSAndroid Build Coastguard Worker                   '*********\n'
14033*cda5da8dSAndroid Build Coastguard Worker                   '\n'
14034*cda5da8dSAndroid Build Coastguard Worker                   'Function objects are created by function definitions.  The '
14035*cda5da8dSAndroid Build Coastguard Worker                   'only\n'
14036*cda5da8dSAndroid Build Coastguard Worker                   'operation on a function object is to call it: '
14037*cda5da8dSAndroid Build Coastguard Worker                   '"func(argument-list)".\n'
14038*cda5da8dSAndroid Build Coastguard Worker                   '\n'
14039*cda5da8dSAndroid Build Coastguard Worker                   'There are really two flavors of function objects: built-in '
14040*cda5da8dSAndroid Build Coastguard Worker                   'functions\n'
14041*cda5da8dSAndroid Build Coastguard Worker                   'and user-defined functions.  Both support the same '
14042*cda5da8dSAndroid Build Coastguard Worker                   'operation (to call\n'
14043*cda5da8dSAndroid Build Coastguard Worker                   'the function), but the implementation is different, hence '
14044*cda5da8dSAndroid Build Coastguard Worker                   'the\n'
14045*cda5da8dSAndroid Build Coastguard Worker                   'different object types.\n'
14046*cda5da8dSAndroid Build Coastguard Worker                   '\n'
14047*cda5da8dSAndroid Build Coastguard Worker                   'See Function definitions for more information.\n',
14048*cda5da8dSAndroid Build Coastguard Worker 'typesmapping': 'Mapping Types — "dict"\n'
14049*cda5da8dSAndroid Build Coastguard Worker                 '**********************\n'
14050*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14051*cda5da8dSAndroid Build Coastguard Worker                 'A *mapping* object maps *hashable* values to arbitrary '
14052*cda5da8dSAndroid Build Coastguard Worker                 'objects.\n'
14053*cda5da8dSAndroid Build Coastguard Worker                 'Mappings are mutable objects.  There is currently only one '
14054*cda5da8dSAndroid Build Coastguard Worker                 'standard\n'
14055*cda5da8dSAndroid Build Coastguard Worker                 'mapping type, the *dictionary*.  (For other containers see '
14056*cda5da8dSAndroid Build Coastguard Worker                 'the built-\n'
14057*cda5da8dSAndroid Build Coastguard Worker                 'in "list", "set", and "tuple" classes, and the "collections" '
14058*cda5da8dSAndroid Build Coastguard Worker                 'module.)\n'
14059*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14060*cda5da8dSAndroid Build Coastguard Worker                 'A dictionary’s keys are *almost* arbitrary values.  Values '
14061*cda5da8dSAndroid Build Coastguard Worker                 'that are\n'
14062*cda5da8dSAndroid Build Coastguard Worker                 'not *hashable*, that is, values containing lists, '
14063*cda5da8dSAndroid Build Coastguard Worker                 'dictionaries or\n'
14064*cda5da8dSAndroid Build Coastguard Worker                 'other mutable types (that are compared by value rather than '
14065*cda5da8dSAndroid Build Coastguard Worker                 'by object\n'
14066*cda5da8dSAndroid Build Coastguard Worker                 'identity) may not be used as keys. Values that compare equal '
14067*cda5da8dSAndroid Build Coastguard Worker                 '(such as\n'
14068*cda5da8dSAndroid Build Coastguard Worker                 '"1", "1.0", and "True") can be used interchangeably to index '
14069*cda5da8dSAndroid Build Coastguard Worker                 'the same\n'
14070*cda5da8dSAndroid Build Coastguard Worker                 'dictionary entry.\n'
14071*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14072*cda5da8dSAndroid Build Coastguard Worker                 'class dict(**kwargs)\n'
14073*cda5da8dSAndroid Build Coastguard Worker                 'class dict(mapping, **kwargs)\n'
14074*cda5da8dSAndroid Build Coastguard Worker                 'class dict(iterable, **kwargs)\n'
14075*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14076*cda5da8dSAndroid Build Coastguard Worker                 '   Return a new dictionary initialized from an optional '
14077*cda5da8dSAndroid Build Coastguard Worker                 'positional\n'
14078*cda5da8dSAndroid Build Coastguard Worker                 '   argument and a possibly empty set of keyword arguments.\n'
14079*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14080*cda5da8dSAndroid Build Coastguard Worker                 '   Dictionaries can be created by several means:\n'
14081*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14082*cda5da8dSAndroid Build Coastguard Worker                 '   * Use a comma-separated list of "key: value" pairs within '
14083*cda5da8dSAndroid Build Coastguard Worker                 'braces:\n'
14084*cda5da8dSAndroid Build Coastguard Worker                 '     "{\'jack\': 4098, \'sjoerd\': 4127}" or "{4098: '
14085*cda5da8dSAndroid Build Coastguard Worker                 "'jack', 4127:\n"
14086*cda5da8dSAndroid Build Coastguard Worker                 '     \'sjoerd\'}"\n'
14087*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14088*cda5da8dSAndroid Build Coastguard Worker                 '   * Use a dict comprehension: "{}", "{x: x ** 2 for x in '
14089*cda5da8dSAndroid Build Coastguard Worker                 'range(10)}"\n'
14090*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14091*cda5da8dSAndroid Build Coastguard Worker                 '   * Use the type constructor: "dict()", "dict([(\'foo\', '
14092*cda5da8dSAndroid Build Coastguard Worker                 "100), ('bar',\n"
14093*cda5da8dSAndroid Build Coastguard Worker                 '     200)])", "dict(foo=100, bar=200)"\n'
14094*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14095*cda5da8dSAndroid Build Coastguard Worker                 '   If no positional argument is given, an empty dictionary '
14096*cda5da8dSAndroid Build Coastguard Worker                 'is created.\n'
14097*cda5da8dSAndroid Build Coastguard Worker                 '   If a positional argument is given and it is a mapping '
14098*cda5da8dSAndroid Build Coastguard Worker                 'object, a\n'
14099*cda5da8dSAndroid Build Coastguard Worker                 '   dictionary is created with the same key-value pairs as '
14100*cda5da8dSAndroid Build Coastguard Worker                 'the mapping\n'
14101*cda5da8dSAndroid Build Coastguard Worker                 '   object.  Otherwise, the positional argument must be an '
14102*cda5da8dSAndroid Build Coastguard Worker                 '*iterable*\n'
14103*cda5da8dSAndroid Build Coastguard Worker                 '   object.  Each item in the iterable must itself be an '
14104*cda5da8dSAndroid Build Coastguard Worker                 'iterable with\n'
14105*cda5da8dSAndroid Build Coastguard Worker                 '   exactly two objects.  The first object of each item '
14106*cda5da8dSAndroid Build Coastguard Worker                 'becomes a key\n'
14107*cda5da8dSAndroid Build Coastguard Worker                 '   in the new dictionary, and the second object the '
14108*cda5da8dSAndroid Build Coastguard Worker                 'corresponding\n'
14109*cda5da8dSAndroid Build Coastguard Worker                 '   value.  If a key occurs more than once, the last value '
14110*cda5da8dSAndroid Build Coastguard Worker                 'for that key\n'
14111*cda5da8dSAndroid Build Coastguard Worker                 '   becomes the corresponding value in the new dictionary.\n'
14112*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14113*cda5da8dSAndroid Build Coastguard Worker                 '   If keyword arguments are given, the keyword arguments and '
14114*cda5da8dSAndroid Build Coastguard Worker                 'their\n'
14115*cda5da8dSAndroid Build Coastguard Worker                 '   values are added to the dictionary created from the '
14116*cda5da8dSAndroid Build Coastguard Worker                 'positional\n'
14117*cda5da8dSAndroid Build Coastguard Worker                 '   argument.  If a key being added is already present, the '
14118*cda5da8dSAndroid Build Coastguard Worker                 'value from\n'
14119*cda5da8dSAndroid Build Coastguard Worker                 '   the keyword argument replaces the value from the '
14120*cda5da8dSAndroid Build Coastguard Worker                 'positional\n'
14121*cda5da8dSAndroid Build Coastguard Worker                 '   argument.\n'
14122*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14123*cda5da8dSAndroid Build Coastguard Worker                 '   To illustrate, the following examples all return a '
14124*cda5da8dSAndroid Build Coastguard Worker                 'dictionary equal\n'
14125*cda5da8dSAndroid Build Coastguard Worker                 '   to "{"one": 1, "two": 2, "three": 3}":\n'
14126*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14127*cda5da8dSAndroid Build Coastguard Worker                 '      >>> a = dict(one=1, two=2, three=3)\n'
14128*cda5da8dSAndroid Build Coastguard Worker                 "      >>> b = {'one': 1, 'two': 2, 'three': 3}\n"
14129*cda5da8dSAndroid Build Coastguard Worker                 "      >>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))\n"
14130*cda5da8dSAndroid Build Coastguard Worker                 "      >>> d = dict([('two', 2), ('one', 1), ('three', 3)])\n"
14131*cda5da8dSAndroid Build Coastguard Worker                 "      >>> e = dict({'three': 3, 'one': 1, 'two': 2})\n"
14132*cda5da8dSAndroid Build Coastguard Worker                 "      >>> f = dict({'one': 1, 'three': 3}, two=2)\n"
14133*cda5da8dSAndroid Build Coastguard Worker                 '      >>> a == b == c == d == e == f\n'
14134*cda5da8dSAndroid Build Coastguard Worker                 '      True\n'
14135*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14136*cda5da8dSAndroid Build Coastguard Worker                 '   Providing keyword arguments as in the first example only '
14137*cda5da8dSAndroid Build Coastguard Worker                 'works for\n'
14138*cda5da8dSAndroid Build Coastguard Worker                 '   keys that are valid Python identifiers.  Otherwise, any '
14139*cda5da8dSAndroid Build Coastguard Worker                 'valid keys\n'
14140*cda5da8dSAndroid Build Coastguard Worker                 '   can be used.\n'
14141*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14142*cda5da8dSAndroid Build Coastguard Worker                 '   These are the operations that dictionaries support (and '
14143*cda5da8dSAndroid Build Coastguard Worker                 'therefore,\n'
14144*cda5da8dSAndroid Build Coastguard Worker                 '   custom mapping types should support too):\n'
14145*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14146*cda5da8dSAndroid Build Coastguard Worker                 '   list(d)\n'
14147*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14148*cda5da8dSAndroid Build Coastguard Worker                 '      Return a list of all the keys used in the dictionary '
14149*cda5da8dSAndroid Build Coastguard Worker                 '*d*.\n'
14150*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14151*cda5da8dSAndroid Build Coastguard Worker                 '   len(d)\n'
14152*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14153*cda5da8dSAndroid Build Coastguard Worker                 '      Return the number of items in the dictionary *d*.\n'
14154*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14155*cda5da8dSAndroid Build Coastguard Worker                 '   d[key]\n'
14156*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14157*cda5da8dSAndroid Build Coastguard Worker                 '      Return the item of *d* with key *key*.  Raises a '
14158*cda5da8dSAndroid Build Coastguard Worker                 '"KeyError" if\n'
14159*cda5da8dSAndroid Build Coastguard Worker                 '      *key* is not in the map.\n'
14160*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14161*cda5da8dSAndroid Build Coastguard Worker                 '      If a subclass of dict defines a method "__missing__()" '
14162*cda5da8dSAndroid Build Coastguard Worker                 'and *key*\n'
14163*cda5da8dSAndroid Build Coastguard Worker                 '      is not present, the "d[key]" operation calls that '
14164*cda5da8dSAndroid Build Coastguard Worker                 'method with\n'
14165*cda5da8dSAndroid Build Coastguard Worker                 '      the key *key* as argument.  The "d[key]" operation '
14166*cda5da8dSAndroid Build Coastguard Worker                 'then returns\n'
14167*cda5da8dSAndroid Build Coastguard Worker                 '      or raises whatever is returned or raised by the\n'
14168*cda5da8dSAndroid Build Coastguard Worker                 '      "__missing__(key)" call. No other operations or '
14169*cda5da8dSAndroid Build Coastguard Worker                 'methods invoke\n'
14170*cda5da8dSAndroid Build Coastguard Worker                 '      "__missing__()". If "__missing__()" is not defined, '
14171*cda5da8dSAndroid Build Coastguard Worker                 '"KeyError"\n'
14172*cda5da8dSAndroid Build Coastguard Worker                 '      is raised. "__missing__()" must be a method; it cannot '
14173*cda5da8dSAndroid Build Coastguard Worker                 'be an\n'
14174*cda5da8dSAndroid Build Coastguard Worker                 '      instance variable:\n'
14175*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14176*cda5da8dSAndroid Build Coastguard Worker                 '         >>> class Counter(dict):\n'
14177*cda5da8dSAndroid Build Coastguard Worker                 '         ...     def __missing__(self, key):\n'
14178*cda5da8dSAndroid Build Coastguard Worker                 '         ...         return 0\n'
14179*cda5da8dSAndroid Build Coastguard Worker                 '         >>> c = Counter()\n'
14180*cda5da8dSAndroid Build Coastguard Worker                 "         >>> c['red']\n"
14181*cda5da8dSAndroid Build Coastguard Worker                 '         0\n'
14182*cda5da8dSAndroid Build Coastguard Worker                 "         >>> c['red'] += 1\n"
14183*cda5da8dSAndroid Build Coastguard Worker                 "         >>> c['red']\n"
14184*cda5da8dSAndroid Build Coastguard Worker                 '         1\n'
14185*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14186*cda5da8dSAndroid Build Coastguard Worker                 '      The example above shows part of the implementation of\n'
14187*cda5da8dSAndroid Build Coastguard Worker                 '      "collections.Counter".  A different "__missing__" '
14188*cda5da8dSAndroid Build Coastguard Worker                 'method is used\n'
14189*cda5da8dSAndroid Build Coastguard Worker                 '      by "collections.defaultdict".\n'
14190*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14191*cda5da8dSAndroid Build Coastguard Worker                 '   d[key] = value\n'
14192*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14193*cda5da8dSAndroid Build Coastguard Worker                 '      Set "d[key]" to *value*.\n'
14194*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14195*cda5da8dSAndroid Build Coastguard Worker                 '   del d[key]\n'
14196*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14197*cda5da8dSAndroid Build Coastguard Worker                 '      Remove "d[key]" from *d*.  Raises a "KeyError" if '
14198*cda5da8dSAndroid Build Coastguard Worker                 '*key* is not\n'
14199*cda5da8dSAndroid Build Coastguard Worker                 '      in the map.\n'
14200*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14201*cda5da8dSAndroid Build Coastguard Worker                 '   key in d\n'
14202*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14203*cda5da8dSAndroid Build Coastguard Worker                 '      Return "True" if *d* has a key *key*, else "False".\n'
14204*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14205*cda5da8dSAndroid Build Coastguard Worker                 '   key not in d\n'
14206*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14207*cda5da8dSAndroid Build Coastguard Worker                 '      Equivalent to "not key in d".\n'
14208*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14209*cda5da8dSAndroid Build Coastguard Worker                 '   iter(d)\n'
14210*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14211*cda5da8dSAndroid Build Coastguard Worker                 '      Return an iterator over the keys of the dictionary.  '
14212*cda5da8dSAndroid Build Coastguard Worker                 'This is a\n'
14213*cda5da8dSAndroid Build Coastguard Worker                 '      shortcut for "iter(d.keys())".\n'
14214*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14215*cda5da8dSAndroid Build Coastguard Worker                 '   clear()\n'
14216*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14217*cda5da8dSAndroid Build Coastguard Worker                 '      Remove all items from the dictionary.\n'
14218*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14219*cda5da8dSAndroid Build Coastguard Worker                 '   copy()\n'
14220*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14221*cda5da8dSAndroid Build Coastguard Worker                 '      Return a shallow copy of the dictionary.\n'
14222*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14223*cda5da8dSAndroid Build Coastguard Worker                 '   classmethod fromkeys(iterable[, value])\n'
14224*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14225*cda5da8dSAndroid Build Coastguard Worker                 '      Create a new dictionary with keys from *iterable* and '
14226*cda5da8dSAndroid Build Coastguard Worker                 'values set\n'
14227*cda5da8dSAndroid Build Coastguard Worker                 '      to *value*.\n'
14228*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14229*cda5da8dSAndroid Build Coastguard Worker                 '      "fromkeys()" is a class method that returns a new '
14230*cda5da8dSAndroid Build Coastguard Worker                 'dictionary.\n'
14231*cda5da8dSAndroid Build Coastguard Worker                 '      *value* defaults to "None".  All of the values refer '
14232*cda5da8dSAndroid Build Coastguard Worker                 'to just a\n'
14233*cda5da8dSAndroid Build Coastguard Worker                 '      single instance, so it generally doesn’t make sense '
14234*cda5da8dSAndroid Build Coastguard Worker                 'for *value*\n'
14235*cda5da8dSAndroid Build Coastguard Worker                 '      to be a mutable object such as an empty list.  To get '
14236*cda5da8dSAndroid Build Coastguard Worker                 'distinct\n'
14237*cda5da8dSAndroid Build Coastguard Worker                 '      values, use a dict comprehension instead.\n'
14238*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14239*cda5da8dSAndroid Build Coastguard Worker                 '   get(key[, default])\n'
14240*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14241*cda5da8dSAndroid Build Coastguard Worker                 '      Return the value for *key* if *key* is in the '
14242*cda5da8dSAndroid Build Coastguard Worker                 'dictionary, else\n'
14243*cda5da8dSAndroid Build Coastguard Worker                 '      *default*. If *default* is not given, it defaults to '
14244*cda5da8dSAndroid Build Coastguard Worker                 '"None", so\n'
14245*cda5da8dSAndroid Build Coastguard Worker                 '      that this method never raises a "KeyError".\n'
14246*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14247*cda5da8dSAndroid Build Coastguard Worker                 '   items()\n'
14248*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14249*cda5da8dSAndroid Build Coastguard Worker                 '      Return a new view of the dictionary’s items ("(key, '
14250*cda5da8dSAndroid Build Coastguard Worker                 'value)"\n'
14251*cda5da8dSAndroid Build Coastguard Worker                 '      pairs). See the documentation of view objects.\n'
14252*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14253*cda5da8dSAndroid Build Coastguard Worker                 '   keys()\n'
14254*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14255*cda5da8dSAndroid Build Coastguard Worker                 '      Return a new view of the dictionary’s keys.  See the\n'
14256*cda5da8dSAndroid Build Coastguard Worker                 '      documentation of view objects.\n'
14257*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14258*cda5da8dSAndroid Build Coastguard Worker                 '   pop(key[, default])\n'
14259*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14260*cda5da8dSAndroid Build Coastguard Worker                 '      If *key* is in the dictionary, remove it and return '
14261*cda5da8dSAndroid Build Coastguard Worker                 'its value,\n'
14262*cda5da8dSAndroid Build Coastguard Worker                 '      else return *default*.  If *default* is not given and '
14263*cda5da8dSAndroid Build Coastguard Worker                 '*key* is\n'
14264*cda5da8dSAndroid Build Coastguard Worker                 '      not in the dictionary, a "KeyError" is raised.\n'
14265*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14266*cda5da8dSAndroid Build Coastguard Worker                 '   popitem()\n'
14267*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14268*cda5da8dSAndroid Build Coastguard Worker                 '      Remove and return a "(key, value)" pair from the '
14269*cda5da8dSAndroid Build Coastguard Worker                 'dictionary.\n'
14270*cda5da8dSAndroid Build Coastguard Worker                 '      Pairs are returned in LIFO (last-in, first-out) '
14271*cda5da8dSAndroid Build Coastguard Worker                 'order.\n'
14272*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14273*cda5da8dSAndroid Build Coastguard Worker                 '      "popitem()" is useful to destructively iterate over a\n'
14274*cda5da8dSAndroid Build Coastguard Worker                 '      dictionary, as often used in set algorithms.  If the '
14275*cda5da8dSAndroid Build Coastguard Worker                 'dictionary\n'
14276*cda5da8dSAndroid Build Coastguard Worker                 '      is empty, calling "popitem()" raises a "KeyError".\n'
14277*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14278*cda5da8dSAndroid Build Coastguard Worker                 '      Changed in version 3.7: LIFO order is now guaranteed. '
14279*cda5da8dSAndroid Build Coastguard Worker                 'In prior\n'
14280*cda5da8dSAndroid Build Coastguard Worker                 '      versions, "popitem()" would return an arbitrary '
14281*cda5da8dSAndroid Build Coastguard Worker                 'key/value pair.\n'
14282*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14283*cda5da8dSAndroid Build Coastguard Worker                 '   reversed(d)\n'
14284*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14285*cda5da8dSAndroid Build Coastguard Worker                 '      Return a reverse iterator over the keys of the '
14286*cda5da8dSAndroid Build Coastguard Worker                 'dictionary. This\n'
14287*cda5da8dSAndroid Build Coastguard Worker                 '      is a shortcut for "reversed(d.keys())".\n'
14288*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14289*cda5da8dSAndroid Build Coastguard Worker                 '      New in version 3.8.\n'
14290*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14291*cda5da8dSAndroid Build Coastguard Worker                 '   setdefault(key[, default])\n'
14292*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14293*cda5da8dSAndroid Build Coastguard Worker                 '      If *key* is in the dictionary, return its value.  If '
14294*cda5da8dSAndroid Build Coastguard Worker                 'not, insert\n'
14295*cda5da8dSAndroid Build Coastguard Worker                 '      *key* with a value of *default* and return *default*.  '
14296*cda5da8dSAndroid Build Coastguard Worker                 '*default*\n'
14297*cda5da8dSAndroid Build Coastguard Worker                 '      defaults to "None".\n'
14298*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14299*cda5da8dSAndroid Build Coastguard Worker                 '   update([other])\n'
14300*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14301*cda5da8dSAndroid Build Coastguard Worker                 '      Update the dictionary with the key/value pairs from '
14302*cda5da8dSAndroid Build Coastguard Worker                 '*other*,\n'
14303*cda5da8dSAndroid Build Coastguard Worker                 '      overwriting existing keys.  Return "None".\n'
14304*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14305*cda5da8dSAndroid Build Coastguard Worker                 '      "update()" accepts either another dictionary object or '
14306*cda5da8dSAndroid Build Coastguard Worker                 'an\n'
14307*cda5da8dSAndroid Build Coastguard Worker                 '      iterable of key/value pairs (as tuples or other '
14308*cda5da8dSAndroid Build Coastguard Worker                 'iterables of\n'
14309*cda5da8dSAndroid Build Coastguard Worker                 '      length two).  If keyword arguments are specified, the '
14310*cda5da8dSAndroid Build Coastguard Worker                 'dictionary\n'
14311*cda5da8dSAndroid Build Coastguard Worker                 '      is then updated with those key/value pairs: '
14312*cda5da8dSAndroid Build Coastguard Worker                 '"d.update(red=1,\n'
14313*cda5da8dSAndroid Build Coastguard Worker                 '      blue=2)".\n'
14314*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14315*cda5da8dSAndroid Build Coastguard Worker                 '   values()\n'
14316*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14317*cda5da8dSAndroid Build Coastguard Worker                 '      Return a new view of the dictionary’s values.  See '
14318*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
14319*cda5da8dSAndroid Build Coastguard Worker                 '      documentation of view objects.\n'
14320*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14321*cda5da8dSAndroid Build Coastguard Worker                 '      An equality comparison between one "dict.values()" '
14322*cda5da8dSAndroid Build Coastguard Worker                 'view and\n'
14323*cda5da8dSAndroid Build Coastguard Worker                 '      another will always return "False". This also applies '
14324*cda5da8dSAndroid Build Coastguard Worker                 'when\n'
14325*cda5da8dSAndroid Build Coastguard Worker                 '      comparing "dict.values()" to itself:\n'
14326*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14327*cda5da8dSAndroid Build Coastguard Worker                 "         >>> d = {'a': 1}\n"
14328*cda5da8dSAndroid Build Coastguard Worker                 '         >>> d.values() == d.values()\n'
14329*cda5da8dSAndroid Build Coastguard Worker                 '         False\n'
14330*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14331*cda5da8dSAndroid Build Coastguard Worker                 '   d | other\n'
14332*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14333*cda5da8dSAndroid Build Coastguard Worker                 '      Create a new dictionary with the merged keys and '
14334*cda5da8dSAndroid Build Coastguard Worker                 'values of *d*\n'
14335*cda5da8dSAndroid Build Coastguard Worker                 '      and *other*, which must both be dictionaries. The '
14336*cda5da8dSAndroid Build Coastguard Worker                 'values of\n'
14337*cda5da8dSAndroid Build Coastguard Worker                 '      *other* take priority when *d* and *other* share '
14338*cda5da8dSAndroid Build Coastguard Worker                 'keys.\n'
14339*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14340*cda5da8dSAndroid Build Coastguard Worker                 '      New in version 3.9.\n'
14341*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14342*cda5da8dSAndroid Build Coastguard Worker                 '   d |= other\n'
14343*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14344*cda5da8dSAndroid Build Coastguard Worker                 '      Update the dictionary *d* with keys and values from '
14345*cda5da8dSAndroid Build Coastguard Worker                 '*other*,\n'
14346*cda5da8dSAndroid Build Coastguard Worker                 '      which may be either a *mapping* or an *iterable* of '
14347*cda5da8dSAndroid Build Coastguard Worker                 'key/value\n'
14348*cda5da8dSAndroid Build Coastguard Worker                 '      pairs. The values of *other* take priority when *d* '
14349*cda5da8dSAndroid Build Coastguard Worker                 'and *other*\n'
14350*cda5da8dSAndroid Build Coastguard Worker                 '      share keys.\n'
14351*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14352*cda5da8dSAndroid Build Coastguard Worker                 '      New in version 3.9.\n'
14353*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14354*cda5da8dSAndroid Build Coastguard Worker                 '   Dictionaries compare equal if and only if they have the '
14355*cda5da8dSAndroid Build Coastguard Worker                 'same "(key,\n'
14356*cda5da8dSAndroid Build Coastguard Worker                 '   value)" pairs (regardless of ordering). Order comparisons '
14357*cda5da8dSAndroid Build Coastguard Worker                 '(‘<’,\n'
14358*cda5da8dSAndroid Build Coastguard Worker                 '   ‘<=’, ‘>=’, ‘>’) raise "TypeError".\n'
14359*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14360*cda5da8dSAndroid Build Coastguard Worker                 '   Dictionaries preserve insertion order.  Note that '
14361*cda5da8dSAndroid Build Coastguard Worker                 'updating a key\n'
14362*cda5da8dSAndroid Build Coastguard Worker                 '   does not affect the order.  Keys added after deletion are '
14363*cda5da8dSAndroid Build Coastguard Worker                 'inserted\n'
14364*cda5da8dSAndroid Build Coastguard Worker                 '   at the end.\n'
14365*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14366*cda5da8dSAndroid Build Coastguard Worker                 '      >>> d = {"one": 1, "two": 2, "three": 3, "four": 4}\n'
14367*cda5da8dSAndroid Build Coastguard Worker                 '      >>> d\n'
14368*cda5da8dSAndroid Build Coastguard Worker                 "      {'one': 1, 'two': 2, 'three': 3, 'four': 4}\n"
14369*cda5da8dSAndroid Build Coastguard Worker                 '      >>> list(d)\n'
14370*cda5da8dSAndroid Build Coastguard Worker                 "      ['one', 'two', 'three', 'four']\n"
14371*cda5da8dSAndroid Build Coastguard Worker                 '      >>> list(d.values())\n'
14372*cda5da8dSAndroid Build Coastguard Worker                 '      [1, 2, 3, 4]\n'
14373*cda5da8dSAndroid Build Coastguard Worker                 '      >>> d["one"] = 42\n'
14374*cda5da8dSAndroid Build Coastguard Worker                 '      >>> d\n'
14375*cda5da8dSAndroid Build Coastguard Worker                 "      {'one': 42, 'two': 2, 'three': 3, 'four': 4}\n"
14376*cda5da8dSAndroid Build Coastguard Worker                 '      >>> del d["two"]\n'
14377*cda5da8dSAndroid Build Coastguard Worker                 '      >>> d["two"] = None\n'
14378*cda5da8dSAndroid Build Coastguard Worker                 '      >>> d\n'
14379*cda5da8dSAndroid Build Coastguard Worker                 "      {'one': 42, 'three': 3, 'four': 4, 'two': None}\n"
14380*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14381*cda5da8dSAndroid Build Coastguard Worker                 '   Changed in version 3.7: Dictionary order is guaranteed to '
14382*cda5da8dSAndroid Build Coastguard Worker                 'be\n'
14383*cda5da8dSAndroid Build Coastguard Worker                 '   insertion order.  This behavior was an implementation '
14384*cda5da8dSAndroid Build Coastguard Worker                 'detail of\n'
14385*cda5da8dSAndroid Build Coastguard Worker                 '   CPython from 3.6.\n'
14386*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14387*cda5da8dSAndroid Build Coastguard Worker                 '   Dictionaries and dictionary views are reversible.\n'
14388*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14389*cda5da8dSAndroid Build Coastguard Worker                 '      >>> d = {"one": 1, "two": 2, "three": 3, "four": 4}\n'
14390*cda5da8dSAndroid Build Coastguard Worker                 '      >>> d\n'
14391*cda5da8dSAndroid Build Coastguard Worker                 "      {'one': 1, 'two': 2, 'three': 3, 'four': 4}\n"
14392*cda5da8dSAndroid Build Coastguard Worker                 '      >>> list(reversed(d))\n'
14393*cda5da8dSAndroid Build Coastguard Worker                 "      ['four', 'three', 'two', 'one']\n"
14394*cda5da8dSAndroid Build Coastguard Worker                 '      >>> list(reversed(d.values()))\n'
14395*cda5da8dSAndroid Build Coastguard Worker                 '      [4, 3, 2, 1]\n'
14396*cda5da8dSAndroid Build Coastguard Worker                 '      >>> list(reversed(d.items()))\n'
14397*cda5da8dSAndroid Build Coastguard Worker                 "      [('four', 4), ('three', 3), ('two', 2), ('one', 1)]\n"
14398*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14399*cda5da8dSAndroid Build Coastguard Worker                 '   Changed in version 3.8: Dictionaries are now reversible.\n'
14400*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14401*cda5da8dSAndroid Build Coastguard Worker                 'See also:\n'
14402*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14403*cda5da8dSAndroid Build Coastguard Worker                 '  "types.MappingProxyType" can be used to create a read-only '
14404*cda5da8dSAndroid Build Coastguard Worker                 'view of a\n'
14405*cda5da8dSAndroid Build Coastguard Worker                 '  "dict".\n'
14406*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14407*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14408*cda5da8dSAndroid Build Coastguard Worker                 'Dictionary view objects\n'
14409*cda5da8dSAndroid Build Coastguard Worker                 '=======================\n'
14410*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14411*cda5da8dSAndroid Build Coastguard Worker                 'The objects returned by "dict.keys()", "dict.values()" and\n'
14412*cda5da8dSAndroid Build Coastguard Worker                 '"dict.items()" are *view objects*.  They provide a dynamic '
14413*cda5da8dSAndroid Build Coastguard Worker                 'view on the\n'
14414*cda5da8dSAndroid Build Coastguard Worker                 'dictionary’s entries, which means that when the dictionary '
14415*cda5da8dSAndroid Build Coastguard Worker                 'changes,\n'
14416*cda5da8dSAndroid Build Coastguard Worker                 'the view reflects these changes.\n'
14417*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14418*cda5da8dSAndroid Build Coastguard Worker                 'Dictionary views can be iterated over to yield their '
14419*cda5da8dSAndroid Build Coastguard Worker                 'respective data,\n'
14420*cda5da8dSAndroid Build Coastguard Worker                 'and support membership tests:\n'
14421*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14422*cda5da8dSAndroid Build Coastguard Worker                 'len(dictview)\n'
14423*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14424*cda5da8dSAndroid Build Coastguard Worker                 '   Return the number of entries in the dictionary.\n'
14425*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14426*cda5da8dSAndroid Build Coastguard Worker                 'iter(dictview)\n'
14427*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14428*cda5da8dSAndroid Build Coastguard Worker                 '   Return an iterator over the keys, values or items '
14429*cda5da8dSAndroid Build Coastguard Worker                 '(represented as\n'
14430*cda5da8dSAndroid Build Coastguard Worker                 '   tuples of "(key, value)") in the dictionary.\n'
14431*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14432*cda5da8dSAndroid Build Coastguard Worker                 '   Keys and values are iterated over in insertion order. '
14433*cda5da8dSAndroid Build Coastguard Worker                 'This allows\n'
14434*cda5da8dSAndroid Build Coastguard Worker                 '   the creation of "(value, key)" pairs using "zip()": '
14435*cda5da8dSAndroid Build Coastguard Worker                 '"pairs =\n'
14436*cda5da8dSAndroid Build Coastguard Worker                 '   zip(d.values(), d.keys())".  Another way to create the '
14437*cda5da8dSAndroid Build Coastguard Worker                 'same list is\n'
14438*cda5da8dSAndroid Build Coastguard Worker                 '   "pairs = [(v, k) for (k, v) in d.items()]".\n'
14439*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14440*cda5da8dSAndroid Build Coastguard Worker                 '   Iterating views while adding or deleting entries in the '
14441*cda5da8dSAndroid Build Coastguard Worker                 'dictionary\n'
14442*cda5da8dSAndroid Build Coastguard Worker                 '   may raise a "RuntimeError" or fail to iterate over all '
14443*cda5da8dSAndroid Build Coastguard Worker                 'entries.\n'
14444*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14445*cda5da8dSAndroid Build Coastguard Worker                 '   Changed in version 3.7: Dictionary order is guaranteed to '
14446*cda5da8dSAndroid Build Coastguard Worker                 'be\n'
14447*cda5da8dSAndroid Build Coastguard Worker                 '   insertion order.\n'
14448*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14449*cda5da8dSAndroid Build Coastguard Worker                 'x in dictview\n'
14450*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14451*cda5da8dSAndroid Build Coastguard Worker                 '   Return "True" if *x* is in the underlying dictionary’s '
14452*cda5da8dSAndroid Build Coastguard Worker                 'keys, values\n'
14453*cda5da8dSAndroid Build Coastguard Worker                 '   or items (in the latter case, *x* should be a "(key, '
14454*cda5da8dSAndroid Build Coastguard Worker                 'value)"\n'
14455*cda5da8dSAndroid Build Coastguard Worker                 '   tuple).\n'
14456*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14457*cda5da8dSAndroid Build Coastguard Worker                 'reversed(dictview)\n'
14458*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14459*cda5da8dSAndroid Build Coastguard Worker                 '   Return a reverse iterator over the keys, values or items '
14460*cda5da8dSAndroid Build Coastguard Worker                 'of the\n'
14461*cda5da8dSAndroid Build Coastguard Worker                 '   dictionary. The view will be iterated in reverse order of '
14462*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
14463*cda5da8dSAndroid Build Coastguard Worker                 '   insertion.\n'
14464*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14465*cda5da8dSAndroid Build Coastguard Worker                 '   Changed in version 3.8: Dictionary views are now '
14466*cda5da8dSAndroid Build Coastguard Worker                 'reversible.\n'
14467*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14468*cda5da8dSAndroid Build Coastguard Worker                 'dictview.mapping\n'
14469*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14470*cda5da8dSAndroid Build Coastguard Worker                 '   Return a "types.MappingProxyType" that wraps the '
14471*cda5da8dSAndroid Build Coastguard Worker                 'original\n'
14472*cda5da8dSAndroid Build Coastguard Worker                 '   dictionary to which the view refers.\n'
14473*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14474*cda5da8dSAndroid Build Coastguard Worker                 '   New in version 3.10.\n'
14475*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14476*cda5da8dSAndroid Build Coastguard Worker                 'Keys views are set-like since their entries are unique and '
14477*cda5da8dSAndroid Build Coastguard Worker                 '*hashable*.\n'
14478*cda5da8dSAndroid Build Coastguard Worker                 'If all values are hashable, so that "(key, value)" pairs are '
14479*cda5da8dSAndroid Build Coastguard Worker                 'unique\n'
14480*cda5da8dSAndroid Build Coastguard Worker                 'and hashable, then the items view is also set-like.  (Values '
14481*cda5da8dSAndroid Build Coastguard Worker                 'views are\n'
14482*cda5da8dSAndroid Build Coastguard Worker                 'not treated as set-like since the entries are generally not '
14483*cda5da8dSAndroid Build Coastguard Worker                 'unique.)\n'
14484*cda5da8dSAndroid Build Coastguard Worker                 'For set-like views, all of the operations defined for the '
14485*cda5da8dSAndroid Build Coastguard Worker                 'abstract\n'
14486*cda5da8dSAndroid Build Coastguard Worker                 'base class "collections.abc.Set" are available (for example, '
14487*cda5da8dSAndroid Build Coastguard Worker                 '"==",\n'
14488*cda5da8dSAndroid Build Coastguard Worker                 '"<", or "^").\n'
14489*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14490*cda5da8dSAndroid Build Coastguard Worker                 'An example of dictionary view usage:\n'
14491*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14492*cda5da8dSAndroid Build Coastguard Worker                 "   >>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, "
14493*cda5da8dSAndroid Build Coastguard Worker                 "'spam': 500}\n"
14494*cda5da8dSAndroid Build Coastguard Worker                 '   >>> keys = dishes.keys()\n'
14495*cda5da8dSAndroid Build Coastguard Worker                 '   >>> values = dishes.values()\n'
14496*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14497*cda5da8dSAndroid Build Coastguard Worker                 '   >>> # iteration\n'
14498*cda5da8dSAndroid Build Coastguard Worker                 '   >>> n = 0\n'
14499*cda5da8dSAndroid Build Coastguard Worker                 '   >>> for val in values:\n'
14500*cda5da8dSAndroid Build Coastguard Worker                 '   ...     n += val\n'
14501*cda5da8dSAndroid Build Coastguard Worker                 '   >>> print(n)\n'
14502*cda5da8dSAndroid Build Coastguard Worker                 '   504\n'
14503*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14504*cda5da8dSAndroid Build Coastguard Worker                 '   >>> # keys and values are iterated over in the same order '
14505*cda5da8dSAndroid Build Coastguard Worker                 '(insertion order)\n'
14506*cda5da8dSAndroid Build Coastguard Worker                 '   >>> list(keys)\n'
14507*cda5da8dSAndroid Build Coastguard Worker                 "   ['eggs', 'sausage', 'bacon', 'spam']\n"
14508*cda5da8dSAndroid Build Coastguard Worker                 '   >>> list(values)\n'
14509*cda5da8dSAndroid Build Coastguard Worker                 '   [2, 1, 1, 500]\n'
14510*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14511*cda5da8dSAndroid Build Coastguard Worker                 '   >>> # view objects are dynamic and reflect dict changes\n'
14512*cda5da8dSAndroid Build Coastguard Worker                 "   >>> del dishes['eggs']\n"
14513*cda5da8dSAndroid Build Coastguard Worker                 "   >>> del dishes['sausage']\n"
14514*cda5da8dSAndroid Build Coastguard Worker                 '   >>> list(keys)\n'
14515*cda5da8dSAndroid Build Coastguard Worker                 "   ['bacon', 'spam']\n"
14516*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14517*cda5da8dSAndroid Build Coastguard Worker                 '   >>> # set operations\n'
14518*cda5da8dSAndroid Build Coastguard Worker                 "   >>> keys & {'eggs', 'bacon', 'salad'}\n"
14519*cda5da8dSAndroid Build Coastguard Worker                 "   {'bacon'}\n"
14520*cda5da8dSAndroid Build Coastguard Worker                 "   >>> keys ^ {'sausage', 'juice'}\n"
14521*cda5da8dSAndroid Build Coastguard Worker                 "   {'juice', 'sausage', 'bacon', 'spam'}\n"
14522*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14523*cda5da8dSAndroid Build Coastguard Worker                 '   >>> # get back a read-only proxy for the original '
14524*cda5da8dSAndroid Build Coastguard Worker                 'dictionary\n'
14525*cda5da8dSAndroid Build Coastguard Worker                 '   >>> values.mapping\n'
14526*cda5da8dSAndroid Build Coastguard Worker                 "   mappingproxy({'bacon': 1, 'spam': 500})\n"
14527*cda5da8dSAndroid Build Coastguard Worker                 "   >>> values.mapping['spam']\n"
14528*cda5da8dSAndroid Build Coastguard Worker                 '   500\n',
14529*cda5da8dSAndroid Build Coastguard Worker 'typesmethods': 'Methods\n'
14530*cda5da8dSAndroid Build Coastguard Worker                 '*******\n'
14531*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14532*cda5da8dSAndroid Build Coastguard Worker                 'Methods are functions that are called using the attribute '
14533*cda5da8dSAndroid Build Coastguard Worker                 'notation.\n'
14534*cda5da8dSAndroid Build Coastguard Worker                 'There are two flavors: built-in methods (such as "append()" '
14535*cda5da8dSAndroid Build Coastguard Worker                 'on lists)\n'
14536*cda5da8dSAndroid Build Coastguard Worker                 'and class instance methods.  Built-in methods are described '
14537*cda5da8dSAndroid Build Coastguard Worker                 'with the\n'
14538*cda5da8dSAndroid Build Coastguard Worker                 'types that support them.\n'
14539*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14540*cda5da8dSAndroid Build Coastguard Worker                 'If you access a method (a function defined in a class '
14541*cda5da8dSAndroid Build Coastguard Worker                 'namespace)\n'
14542*cda5da8dSAndroid Build Coastguard Worker                 'through an instance, you get a special object: a *bound '
14543*cda5da8dSAndroid Build Coastguard Worker                 'method* (also\n'
14544*cda5da8dSAndroid Build Coastguard Worker                 'called *instance method*) object. When called, it will add '
14545*cda5da8dSAndroid Build Coastguard Worker                 'the "self"\n'
14546*cda5da8dSAndroid Build Coastguard Worker                 'argument to the argument list.  Bound methods have two '
14547*cda5da8dSAndroid Build Coastguard Worker                 'special read-\n'
14548*cda5da8dSAndroid Build Coastguard Worker                 'only attributes: "m.__self__" is the object on which the '
14549*cda5da8dSAndroid Build Coastguard Worker                 'method\n'
14550*cda5da8dSAndroid Build Coastguard Worker                 'operates, and "m.__func__" is the function implementing the '
14551*cda5da8dSAndroid Build Coastguard Worker                 'method.\n'
14552*cda5da8dSAndroid Build Coastguard Worker                 'Calling "m(arg-1, arg-2, ..., arg-n)" is completely '
14553*cda5da8dSAndroid Build Coastguard Worker                 'equivalent to\n'
14554*cda5da8dSAndroid Build Coastguard Worker                 'calling "m.__func__(m.__self__, arg-1, arg-2, ..., arg-n)".\n'
14555*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14556*cda5da8dSAndroid Build Coastguard Worker                 'Like function objects, bound method objects support getting '
14557*cda5da8dSAndroid Build Coastguard Worker                 'arbitrary\n'
14558*cda5da8dSAndroid Build Coastguard Worker                 'attributes.  However, since method attributes are actually '
14559*cda5da8dSAndroid Build Coastguard Worker                 'stored on\n'
14560*cda5da8dSAndroid Build Coastguard Worker                 'the underlying function object ("meth.__func__"), setting '
14561*cda5da8dSAndroid Build Coastguard Worker                 'method\n'
14562*cda5da8dSAndroid Build Coastguard Worker                 'attributes on bound methods is disallowed.  Attempting to '
14563*cda5da8dSAndroid Build Coastguard Worker                 'set an\n'
14564*cda5da8dSAndroid Build Coastguard Worker                 'attribute on a method results in an "AttributeError" being '
14565*cda5da8dSAndroid Build Coastguard Worker                 'raised.  In\n'
14566*cda5da8dSAndroid Build Coastguard Worker                 'order to set a method attribute, you need to explicitly set '
14567*cda5da8dSAndroid Build Coastguard Worker                 'it on the\n'
14568*cda5da8dSAndroid Build Coastguard Worker                 'underlying function object:\n'
14569*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14570*cda5da8dSAndroid Build Coastguard Worker                 '   >>> class C:\n'
14571*cda5da8dSAndroid Build Coastguard Worker                 '   ...     def method(self):\n'
14572*cda5da8dSAndroid Build Coastguard Worker                 '   ...         pass\n'
14573*cda5da8dSAndroid Build Coastguard Worker                 '   ...\n'
14574*cda5da8dSAndroid Build Coastguard Worker                 '   >>> c = C()\n'
14575*cda5da8dSAndroid Build Coastguard Worker                 "   >>> c.method.whoami = 'my name is method'  # can't set on "
14576*cda5da8dSAndroid Build Coastguard Worker                 'the method\n'
14577*cda5da8dSAndroid Build Coastguard Worker                 '   Traceback (most recent call last):\n'
14578*cda5da8dSAndroid Build Coastguard Worker                 '     File "<stdin>", line 1, in <module>\n'
14579*cda5da8dSAndroid Build Coastguard Worker                 "   AttributeError: 'method' object has no attribute "
14580*cda5da8dSAndroid Build Coastguard Worker                 "'whoami'\n"
14581*cda5da8dSAndroid Build Coastguard Worker                 "   >>> c.method.__func__.whoami = 'my name is method'\n"
14582*cda5da8dSAndroid Build Coastguard Worker                 '   >>> c.method.whoami\n'
14583*cda5da8dSAndroid Build Coastguard Worker                 "   'my name is method'\n"
14584*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14585*cda5da8dSAndroid Build Coastguard Worker                 'See The standard type hierarchy for more information.\n',
14586*cda5da8dSAndroid Build Coastguard Worker 'typesmodules': 'Modules\n'
14587*cda5da8dSAndroid Build Coastguard Worker                 '*******\n'
14588*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14589*cda5da8dSAndroid Build Coastguard Worker                 'The only special operation on a module is attribute access: '
14590*cda5da8dSAndroid Build Coastguard Worker                 '"m.name",\n'
14591*cda5da8dSAndroid Build Coastguard Worker                 'where *m* is a module and *name* accesses a name defined in '
14592*cda5da8dSAndroid Build Coastguard Worker                 '*m*’s\n'
14593*cda5da8dSAndroid Build Coastguard Worker                 'symbol table. Module attributes can be assigned to.  (Note '
14594*cda5da8dSAndroid Build Coastguard Worker                 'that the\n'
14595*cda5da8dSAndroid Build Coastguard Worker                 '"import" statement is not, strictly speaking, an operation '
14596*cda5da8dSAndroid Build Coastguard Worker                 'on a module\n'
14597*cda5da8dSAndroid Build Coastguard Worker                 'object; "import foo" does not require a module object named '
14598*cda5da8dSAndroid Build Coastguard Worker                 '*foo* to\n'
14599*cda5da8dSAndroid Build Coastguard Worker                 'exist, rather it requires an (external) *definition* for a '
14600*cda5da8dSAndroid Build Coastguard Worker                 'module\n'
14601*cda5da8dSAndroid Build Coastguard Worker                 'named *foo* somewhere.)\n'
14602*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14603*cda5da8dSAndroid Build Coastguard Worker                 'A special attribute of every module is "__dict__". This is '
14604*cda5da8dSAndroid Build Coastguard Worker                 'the\n'
14605*cda5da8dSAndroid Build Coastguard Worker                 'dictionary containing the module’s symbol table. Modifying '
14606*cda5da8dSAndroid Build Coastguard Worker                 'this\n'
14607*cda5da8dSAndroid Build Coastguard Worker                 'dictionary will actually change the module’s symbol table, '
14608*cda5da8dSAndroid Build Coastguard Worker                 'but direct\n'
14609*cda5da8dSAndroid Build Coastguard Worker                 'assignment to the "__dict__" attribute is not possible (you '
14610*cda5da8dSAndroid Build Coastguard Worker                 'can write\n'
14611*cda5da8dSAndroid Build Coastguard Worker                 '"m.__dict__[\'a\'] = 1", which defines "m.a" to be "1", but '
14612*cda5da8dSAndroid Build Coastguard Worker                 'you can’t\n'
14613*cda5da8dSAndroid Build Coastguard Worker                 'write "m.__dict__ = {}").  Modifying "__dict__" directly is '
14614*cda5da8dSAndroid Build Coastguard Worker                 'not\n'
14615*cda5da8dSAndroid Build Coastguard Worker                 'recommended.\n'
14616*cda5da8dSAndroid Build Coastguard Worker                 '\n'
14617*cda5da8dSAndroid Build Coastguard Worker                 'Modules built into the interpreter are written like this: '
14618*cda5da8dSAndroid Build Coastguard Worker                 '"<module\n'
14619*cda5da8dSAndroid Build Coastguard Worker                 '\'sys\' (built-in)>".  If loaded from a file, they are '
14620*cda5da8dSAndroid Build Coastguard Worker                 'written as\n'
14621*cda5da8dSAndroid Build Coastguard Worker                 '"<module \'os\' from '
14622*cda5da8dSAndroid Build Coastguard Worker                 '\'/usr/local/lib/pythonX.Y/os.pyc\'>".\n',
14623*cda5da8dSAndroid Build Coastguard Worker 'typesseq': 'Sequence Types — "list", "tuple", "range"\n'
14624*cda5da8dSAndroid Build Coastguard Worker             '*****************************************\n'
14625*cda5da8dSAndroid Build Coastguard Worker             '\n'
14626*cda5da8dSAndroid Build Coastguard Worker             'There are three basic sequence types: lists, tuples, and range\n'
14627*cda5da8dSAndroid Build Coastguard Worker             'objects. Additional sequence types tailored for processing of '
14628*cda5da8dSAndroid Build Coastguard Worker             'binary\n'
14629*cda5da8dSAndroid Build Coastguard Worker             'data and text strings are described in dedicated sections.\n'
14630*cda5da8dSAndroid Build Coastguard Worker             '\n'
14631*cda5da8dSAndroid Build Coastguard Worker             '\n'
14632*cda5da8dSAndroid Build Coastguard Worker             'Common Sequence Operations\n'
14633*cda5da8dSAndroid Build Coastguard Worker             '==========================\n'
14634*cda5da8dSAndroid Build Coastguard Worker             '\n'
14635*cda5da8dSAndroid Build Coastguard Worker             'The operations in the following table are supported by most '
14636*cda5da8dSAndroid Build Coastguard Worker             'sequence\n'
14637*cda5da8dSAndroid Build Coastguard Worker             'types, both mutable and immutable. The '
14638*cda5da8dSAndroid Build Coastguard Worker             '"collections.abc.Sequence" ABC\n'
14639*cda5da8dSAndroid Build Coastguard Worker             'is provided to make it easier to correctly implement these '
14640*cda5da8dSAndroid Build Coastguard Worker             'operations\n'
14641*cda5da8dSAndroid Build Coastguard Worker             'on custom sequence types.\n'
14642*cda5da8dSAndroid Build Coastguard Worker             '\n'
14643*cda5da8dSAndroid Build Coastguard Worker             'This table lists the sequence operations sorted in ascending '
14644*cda5da8dSAndroid Build Coastguard Worker             'priority.\n'
14645*cda5da8dSAndroid Build Coastguard Worker             'In the table, *s* and *t* are sequences of the same type, *n*, '
14646*cda5da8dSAndroid Build Coastguard Worker             '*i*,\n'
14647*cda5da8dSAndroid Build Coastguard Worker             '*j* and *k* are integers and *x* is an arbitrary object that '
14648*cda5da8dSAndroid Build Coastguard Worker             'meets any\n'
14649*cda5da8dSAndroid Build Coastguard Worker             'type and value restrictions imposed by *s*.\n'
14650*cda5da8dSAndroid Build Coastguard Worker             '\n'
14651*cda5da8dSAndroid Build Coastguard Worker             'The "in" and "not in" operations have the same priorities as '
14652*cda5da8dSAndroid Build Coastguard Worker             'the\n'
14653*cda5da8dSAndroid Build Coastguard Worker             'comparison operations. The "+" (concatenation) and "*" '
14654*cda5da8dSAndroid Build Coastguard Worker             '(repetition)\n'
14655*cda5da8dSAndroid Build Coastguard Worker             'operations have the same priority as the corresponding numeric\n'
14656*cda5da8dSAndroid Build Coastguard Worker             'operations. [3]\n'
14657*cda5da8dSAndroid Build Coastguard Worker             '\n'
14658*cda5da8dSAndroid Build Coastguard Worker             '+----------------------------+----------------------------------+------------+\n'
14659*cda5da8dSAndroid Build Coastguard Worker             '| Operation                  | Result                           '
14660*cda5da8dSAndroid Build Coastguard Worker             '| Notes      |\n'
14661*cda5da8dSAndroid Build Coastguard Worker             '|============================|==================================|============|\n'
14662*cda5da8dSAndroid Build Coastguard Worker             '| "x in s"                   | "True" if an item of *s* is      '
14663*cda5da8dSAndroid Build Coastguard Worker             '| (1)        |\n'
14664*cda5da8dSAndroid Build Coastguard Worker             '|                            | equal to *x*, else "False"       '
14665*cda5da8dSAndroid Build Coastguard Worker             '|            |\n'
14666*cda5da8dSAndroid Build Coastguard Worker             '+----------------------------+----------------------------------+------------+\n'
14667*cda5da8dSAndroid Build Coastguard Worker             '| "x not in s"               | "False" if an item of *s* is     '
14668*cda5da8dSAndroid Build Coastguard Worker             '| (1)        |\n'
14669*cda5da8dSAndroid Build Coastguard Worker             '|                            | equal to *x*, else "True"        '
14670*cda5da8dSAndroid Build Coastguard Worker             '|            |\n'
14671*cda5da8dSAndroid Build Coastguard Worker             '+----------------------------+----------------------------------+------------+\n'
14672*cda5da8dSAndroid Build Coastguard Worker             '| "s + t"                    | the concatenation of *s* and *t* '
14673*cda5da8dSAndroid Build Coastguard Worker             '| (6)(7)     |\n'
14674*cda5da8dSAndroid Build Coastguard Worker             '+----------------------------+----------------------------------+------------+\n'
14675*cda5da8dSAndroid Build Coastguard Worker             '| "s * n" or "n * s"         | equivalent to adding *s* to      '
14676*cda5da8dSAndroid Build Coastguard Worker             '| (2)(7)     |\n'
14677*cda5da8dSAndroid Build Coastguard Worker             '|                            | itself *n* times                 '
14678*cda5da8dSAndroid Build Coastguard Worker             '|            |\n'
14679*cda5da8dSAndroid Build Coastguard Worker             '+----------------------------+----------------------------------+------------+\n'
14680*cda5da8dSAndroid Build Coastguard Worker             '| "s[i]"                     | *i*th item of *s*, origin 0      '
14681*cda5da8dSAndroid Build Coastguard Worker             '| (3)        |\n'
14682*cda5da8dSAndroid Build Coastguard Worker             '+----------------------------+----------------------------------+------------+\n'
14683*cda5da8dSAndroid Build Coastguard Worker             '| "s[i:j]"                   | slice of *s* from *i* to *j*     '
14684*cda5da8dSAndroid Build Coastguard Worker             '| (3)(4)     |\n'
14685*cda5da8dSAndroid Build Coastguard Worker             '+----------------------------+----------------------------------+------------+\n'
14686*cda5da8dSAndroid Build Coastguard Worker             '| "s[i:j:k]"                 | slice of *s* from *i* to *j*     '
14687*cda5da8dSAndroid Build Coastguard Worker             '| (3)(5)     |\n'
14688*cda5da8dSAndroid Build Coastguard Worker             '|                            | with step *k*                    '
14689*cda5da8dSAndroid Build Coastguard Worker             '|            |\n'
14690*cda5da8dSAndroid Build Coastguard Worker             '+----------------------------+----------------------------------+------------+\n'
14691*cda5da8dSAndroid Build Coastguard Worker             '| "len(s)"                   | length of *s*                    '
14692*cda5da8dSAndroid Build Coastguard Worker             '|            |\n'
14693*cda5da8dSAndroid Build Coastguard Worker             '+----------------------------+----------------------------------+------------+\n'
14694*cda5da8dSAndroid Build Coastguard Worker             '| "min(s)"                   | smallest item of *s*             '
14695*cda5da8dSAndroid Build Coastguard Worker             '|            |\n'
14696*cda5da8dSAndroid Build Coastguard Worker             '+----------------------------+----------------------------------+------------+\n'
14697*cda5da8dSAndroid Build Coastguard Worker             '| "max(s)"                   | largest item of *s*              '
14698*cda5da8dSAndroid Build Coastguard Worker             '|            |\n'
14699*cda5da8dSAndroid Build Coastguard Worker             '+----------------------------+----------------------------------+------------+\n'
14700*cda5da8dSAndroid Build Coastguard Worker             '| "s.index(x[, i[, j]])"     | index of the first occurrence of '
14701*cda5da8dSAndroid Build Coastguard Worker             '| (8)        |\n'
14702*cda5da8dSAndroid Build Coastguard Worker             '|                            | *x* in *s* (at or after index    '
14703*cda5da8dSAndroid Build Coastguard Worker             '|            |\n'
14704*cda5da8dSAndroid Build Coastguard Worker             '|                            | *i* and before index *j*)        '
14705*cda5da8dSAndroid Build Coastguard Worker             '|            |\n'
14706*cda5da8dSAndroid Build Coastguard Worker             '+----------------------------+----------------------------------+------------+\n'
14707*cda5da8dSAndroid Build Coastguard Worker             '| "s.count(x)"               | total number of occurrences of   '
14708*cda5da8dSAndroid Build Coastguard Worker             '|            |\n'
14709*cda5da8dSAndroid Build Coastguard Worker             '|                            | *x* in *s*                       '
14710*cda5da8dSAndroid Build Coastguard Worker             '|            |\n'
14711*cda5da8dSAndroid Build Coastguard Worker             '+----------------------------+----------------------------------+------------+\n'
14712*cda5da8dSAndroid Build Coastguard Worker             '\n'
14713*cda5da8dSAndroid Build Coastguard Worker             'Sequences of the same type also support comparisons.  In '
14714*cda5da8dSAndroid Build Coastguard Worker             'particular,\n'
14715*cda5da8dSAndroid Build Coastguard Worker             'tuples and lists are compared lexicographically by comparing\n'
14716*cda5da8dSAndroid Build Coastguard Worker             'corresponding elements. This means that to compare equal, every\n'
14717*cda5da8dSAndroid Build Coastguard Worker             'element must compare equal and the two sequences must be of the '
14718*cda5da8dSAndroid Build Coastguard Worker             'same\n'
14719*cda5da8dSAndroid Build Coastguard Worker             'type and have the same length.  (For full details see '
14720*cda5da8dSAndroid Build Coastguard Worker             'Comparisons in\n'
14721*cda5da8dSAndroid Build Coastguard Worker             'the language reference.)\n'
14722*cda5da8dSAndroid Build Coastguard Worker             '\n'
14723*cda5da8dSAndroid Build Coastguard Worker             'Forward and reversed iterators over mutable sequences access '
14724*cda5da8dSAndroid Build Coastguard Worker             'values\n'
14725*cda5da8dSAndroid Build Coastguard Worker             'using an index.  That index will continue to march forward (or\n'
14726*cda5da8dSAndroid Build Coastguard Worker             'backward) even if the underlying sequence is mutated.  The '
14727*cda5da8dSAndroid Build Coastguard Worker             'iterator\n'
14728*cda5da8dSAndroid Build Coastguard Worker             'terminates only when an "IndexError" or a "StopIteration" is\n'
14729*cda5da8dSAndroid Build Coastguard Worker             'encountered (or when the index drops below zero).\n'
14730*cda5da8dSAndroid Build Coastguard Worker             '\n'
14731*cda5da8dSAndroid Build Coastguard Worker             'Notes:\n'
14732*cda5da8dSAndroid Build Coastguard Worker             '\n'
14733*cda5da8dSAndroid Build Coastguard Worker             '1. While the "in" and "not in" operations are used only for '
14734*cda5da8dSAndroid Build Coastguard Worker             'simple\n'
14735*cda5da8dSAndroid Build Coastguard Worker             '   containment testing in the general case, some specialised '
14736*cda5da8dSAndroid Build Coastguard Worker             'sequences\n'
14737*cda5da8dSAndroid Build Coastguard Worker             '   (such as "str", "bytes" and "bytearray") also use them for\n'
14738*cda5da8dSAndroid Build Coastguard Worker             '   subsequence testing:\n'
14739*cda5da8dSAndroid Build Coastguard Worker             '\n'
14740*cda5da8dSAndroid Build Coastguard Worker             '      >>> "gg" in "eggs"\n'
14741*cda5da8dSAndroid Build Coastguard Worker             '      True\n'
14742*cda5da8dSAndroid Build Coastguard Worker             '\n'
14743*cda5da8dSAndroid Build Coastguard Worker             '2. Values of *n* less than "0" are treated as "0" (which yields '
14744*cda5da8dSAndroid Build Coastguard Worker             'an\n'
14745*cda5da8dSAndroid Build Coastguard Worker             '   empty sequence of the same type as *s*).  Note that items in '
14746*cda5da8dSAndroid Build Coastguard Worker             'the\n'
14747*cda5da8dSAndroid Build Coastguard Worker             '   sequence *s* are not copied; they are referenced multiple '
14748*cda5da8dSAndroid Build Coastguard Worker             'times.\n'
14749*cda5da8dSAndroid Build Coastguard Worker             '   This often haunts new Python programmers; consider:\n'
14750*cda5da8dSAndroid Build Coastguard Worker             '\n'
14751*cda5da8dSAndroid Build Coastguard Worker             '      >>> lists = [[]] * 3\n'
14752*cda5da8dSAndroid Build Coastguard Worker             '      >>> lists\n'
14753*cda5da8dSAndroid Build Coastguard Worker             '      [[], [], []]\n'
14754*cda5da8dSAndroid Build Coastguard Worker             '      >>> lists[0].append(3)\n'
14755*cda5da8dSAndroid Build Coastguard Worker             '      >>> lists\n'
14756*cda5da8dSAndroid Build Coastguard Worker             '      [[3], [3], [3]]\n'
14757*cda5da8dSAndroid Build Coastguard Worker             '\n'
14758*cda5da8dSAndroid Build Coastguard Worker             '   What has happened is that "[[]]" is a one-element list '
14759*cda5da8dSAndroid Build Coastguard Worker             'containing\n'
14760*cda5da8dSAndroid Build Coastguard Worker             '   an empty list, so all three elements of "[[]] * 3" are '
14761*cda5da8dSAndroid Build Coastguard Worker             'references\n'
14762*cda5da8dSAndroid Build Coastguard Worker             '   to this single empty list.  Modifying any of the elements of\n'
14763*cda5da8dSAndroid Build Coastguard Worker             '   "lists" modifies this single list. You can create a list of\n'
14764*cda5da8dSAndroid Build Coastguard Worker             '   different lists this way:\n'
14765*cda5da8dSAndroid Build Coastguard Worker             '\n'
14766*cda5da8dSAndroid Build Coastguard Worker             '      >>> lists = [[] for i in range(3)]\n'
14767*cda5da8dSAndroid Build Coastguard Worker             '      >>> lists[0].append(3)\n'
14768*cda5da8dSAndroid Build Coastguard Worker             '      >>> lists[1].append(5)\n'
14769*cda5da8dSAndroid Build Coastguard Worker             '      >>> lists[2].append(7)\n'
14770*cda5da8dSAndroid Build Coastguard Worker             '      >>> lists\n'
14771*cda5da8dSAndroid Build Coastguard Worker             '      [[3], [5], [7]]\n'
14772*cda5da8dSAndroid Build Coastguard Worker             '\n'
14773*cda5da8dSAndroid Build Coastguard Worker             '   Further explanation is available in the FAQ entry How do I '
14774*cda5da8dSAndroid Build Coastguard Worker             'create a\n'
14775*cda5da8dSAndroid Build Coastguard Worker             '   multidimensional list?.\n'
14776*cda5da8dSAndroid Build Coastguard Worker             '\n'
14777*cda5da8dSAndroid Build Coastguard Worker             '3. If *i* or *j* is negative, the index is relative to the end '
14778*cda5da8dSAndroid Build Coastguard Worker             'of\n'
14779*cda5da8dSAndroid Build Coastguard Worker             '   sequence *s*: "len(s) + i" or "len(s) + j" is substituted.  '
14780*cda5da8dSAndroid Build Coastguard Worker             'But\n'
14781*cda5da8dSAndroid Build Coastguard Worker             '   note that "-0" is still "0".\n'
14782*cda5da8dSAndroid Build Coastguard Worker             '\n'
14783*cda5da8dSAndroid Build Coastguard Worker             '4. The slice of *s* from *i* to *j* is defined as the sequence '
14784*cda5da8dSAndroid Build Coastguard Worker             'of\n'
14785*cda5da8dSAndroid Build Coastguard Worker             '   items with index *k* such that "i <= k < j".  If *i* or *j* '
14786*cda5da8dSAndroid Build Coastguard Worker             'is\n'
14787*cda5da8dSAndroid Build Coastguard Worker             '   greater than "len(s)", use "len(s)".  If *i* is omitted or '
14788*cda5da8dSAndroid Build Coastguard Worker             '"None",\n'
14789*cda5da8dSAndroid Build Coastguard Worker             '   use "0".  If *j* is omitted or "None", use "len(s)".  If *i* '
14790*cda5da8dSAndroid Build Coastguard Worker             'is\n'
14791*cda5da8dSAndroid Build Coastguard Worker             '   greater than or equal to *j*, the slice is empty.\n'
14792*cda5da8dSAndroid Build Coastguard Worker             '\n'
14793*cda5da8dSAndroid Build Coastguard Worker             '5. The slice of *s* from *i* to *j* with step *k* is defined as '
14794*cda5da8dSAndroid Build Coastguard Worker             'the\n'
14795*cda5da8dSAndroid Build Coastguard Worker             '   sequence of items with index  "x = i + n*k" such that "0 <= n '
14796*cda5da8dSAndroid Build Coastguard Worker             '<\n'
14797*cda5da8dSAndroid Build Coastguard Worker             '   (j-i)/k".  In other words, the indices are "i", "i+k", '
14798*cda5da8dSAndroid Build Coastguard Worker             '"i+2*k",\n'
14799*cda5da8dSAndroid Build Coastguard Worker             '   "i+3*k" and so on, stopping when *j* is reached (but never\n'
14800*cda5da8dSAndroid Build Coastguard Worker             '   including *j*).  When *k* is positive, *i* and *j* are '
14801*cda5da8dSAndroid Build Coastguard Worker             'reduced to\n'
14802*cda5da8dSAndroid Build Coastguard Worker             '   "len(s)" if they are greater. When *k* is negative, *i* and '
14803*cda5da8dSAndroid Build Coastguard Worker             '*j* are\n'
14804*cda5da8dSAndroid Build Coastguard Worker             '   reduced to "len(s) - 1" if they are greater.  If *i* or *j* '
14805*cda5da8dSAndroid Build Coastguard Worker             'are\n'
14806*cda5da8dSAndroid Build Coastguard Worker             '   omitted or "None", they become “end” values (which end '
14807*cda5da8dSAndroid Build Coastguard Worker             'depends on\n'
14808*cda5da8dSAndroid Build Coastguard Worker             '   the sign of *k*).  Note, *k* cannot be zero. If *k* is '
14809*cda5da8dSAndroid Build Coastguard Worker             '"None", it\n'
14810*cda5da8dSAndroid Build Coastguard Worker             '   is treated like "1".\n'
14811*cda5da8dSAndroid Build Coastguard Worker             '\n'
14812*cda5da8dSAndroid Build Coastguard Worker             '6. Concatenating immutable sequences always results in a new '
14813*cda5da8dSAndroid Build Coastguard Worker             'object.\n'
14814*cda5da8dSAndroid Build Coastguard Worker             '   This means that building up a sequence by repeated '
14815*cda5da8dSAndroid Build Coastguard Worker             'concatenation\n'
14816*cda5da8dSAndroid Build Coastguard Worker             '   will have a quadratic runtime cost in the total sequence '
14817*cda5da8dSAndroid Build Coastguard Worker             'length.\n'
14818*cda5da8dSAndroid Build Coastguard Worker             '   To get a linear runtime cost, you must switch to one of the\n'
14819*cda5da8dSAndroid Build Coastguard Worker             '   alternatives below:\n'
14820*cda5da8dSAndroid Build Coastguard Worker             '\n'
14821*cda5da8dSAndroid Build Coastguard Worker             '   * if concatenating "str" objects, you can build a list and '
14822*cda5da8dSAndroid Build Coastguard Worker             'use\n'
14823*cda5da8dSAndroid Build Coastguard Worker             '     "str.join()" at the end or else write to an "io.StringIO"\n'
14824*cda5da8dSAndroid Build Coastguard Worker             '     instance and retrieve its value when complete\n'
14825*cda5da8dSAndroid Build Coastguard Worker             '\n'
14826*cda5da8dSAndroid Build Coastguard Worker             '   * if concatenating "bytes" objects, you can similarly use\n'
14827*cda5da8dSAndroid Build Coastguard Worker             '     "bytes.join()" or "io.BytesIO", or you can do in-place\n'
14828*cda5da8dSAndroid Build Coastguard Worker             '     concatenation with a "bytearray" object.  "bytearray" '
14829*cda5da8dSAndroid Build Coastguard Worker             'objects are\n'
14830*cda5da8dSAndroid Build Coastguard Worker             '     mutable and have an efficient overallocation mechanism\n'
14831*cda5da8dSAndroid Build Coastguard Worker             '\n'
14832*cda5da8dSAndroid Build Coastguard Worker             '   * if concatenating "tuple" objects, extend a "list" instead\n'
14833*cda5da8dSAndroid Build Coastguard Worker             '\n'
14834*cda5da8dSAndroid Build Coastguard Worker             '   * for other types, investigate the relevant class '
14835*cda5da8dSAndroid Build Coastguard Worker             'documentation\n'
14836*cda5da8dSAndroid Build Coastguard Worker             '\n'
14837*cda5da8dSAndroid Build Coastguard Worker             '7. Some sequence types (such as "range") only support item '
14838*cda5da8dSAndroid Build Coastguard Worker             'sequences\n'
14839*cda5da8dSAndroid Build Coastguard Worker             '   that follow specific patterns, and hence don’t support '
14840*cda5da8dSAndroid Build Coastguard Worker             'sequence\n'
14841*cda5da8dSAndroid Build Coastguard Worker             '   concatenation or repetition.\n'
14842*cda5da8dSAndroid Build Coastguard Worker             '\n'
14843*cda5da8dSAndroid Build Coastguard Worker             '8. "index" raises "ValueError" when *x* is not found in *s*. Not '
14844*cda5da8dSAndroid Build Coastguard Worker             'all\n'
14845*cda5da8dSAndroid Build Coastguard Worker             '   implementations support passing the additional arguments *i* '
14846*cda5da8dSAndroid Build Coastguard Worker             'and\n'
14847*cda5da8dSAndroid Build Coastguard Worker             '   *j*. These arguments allow efficient searching of subsections '
14848*cda5da8dSAndroid Build Coastguard Worker             'of\n'
14849*cda5da8dSAndroid Build Coastguard Worker             '   the sequence. Passing the extra arguments is roughly '
14850*cda5da8dSAndroid Build Coastguard Worker             'equivalent to\n'
14851*cda5da8dSAndroid Build Coastguard Worker             '   using "s[i:j].index(x)", only without copying any data and '
14852*cda5da8dSAndroid Build Coastguard Worker             'with the\n'
14853*cda5da8dSAndroid Build Coastguard Worker             '   returned index being relative to the start of the sequence '
14854*cda5da8dSAndroid Build Coastguard Worker             'rather\n'
14855*cda5da8dSAndroid Build Coastguard Worker             '   than the start of the slice.\n'
14856*cda5da8dSAndroid Build Coastguard Worker             '\n'
14857*cda5da8dSAndroid Build Coastguard Worker             '\n'
14858*cda5da8dSAndroid Build Coastguard Worker             'Immutable Sequence Types\n'
14859*cda5da8dSAndroid Build Coastguard Worker             '========================\n'
14860*cda5da8dSAndroid Build Coastguard Worker             '\n'
14861*cda5da8dSAndroid Build Coastguard Worker             'The only operation that immutable sequence types generally '
14862*cda5da8dSAndroid Build Coastguard Worker             'implement\n'
14863*cda5da8dSAndroid Build Coastguard Worker             'that is not also implemented by mutable sequence types is '
14864*cda5da8dSAndroid Build Coastguard Worker             'support for\n'
14865*cda5da8dSAndroid Build Coastguard Worker             'the "hash()" built-in.\n'
14866*cda5da8dSAndroid Build Coastguard Worker             '\n'
14867*cda5da8dSAndroid Build Coastguard Worker             'This support allows immutable sequences, such as "tuple" '
14868*cda5da8dSAndroid Build Coastguard Worker             'instances, to\n'
14869*cda5da8dSAndroid Build Coastguard Worker             'be used as "dict" keys and stored in "set" and "frozenset" '
14870*cda5da8dSAndroid Build Coastguard Worker             'instances.\n'
14871*cda5da8dSAndroid Build Coastguard Worker             '\n'
14872*cda5da8dSAndroid Build Coastguard Worker             'Attempting to hash an immutable sequence that contains '
14873*cda5da8dSAndroid Build Coastguard Worker             'unhashable\n'
14874*cda5da8dSAndroid Build Coastguard Worker             'values will result in "TypeError".\n'
14875*cda5da8dSAndroid Build Coastguard Worker             '\n'
14876*cda5da8dSAndroid Build Coastguard Worker             '\n'
14877*cda5da8dSAndroid Build Coastguard Worker             'Mutable Sequence Types\n'
14878*cda5da8dSAndroid Build Coastguard Worker             '======================\n'
14879*cda5da8dSAndroid Build Coastguard Worker             '\n'
14880*cda5da8dSAndroid Build Coastguard Worker             'The operations in the following table are defined on mutable '
14881*cda5da8dSAndroid Build Coastguard Worker             'sequence\n'
14882*cda5da8dSAndroid Build Coastguard Worker             'types. The "collections.abc.MutableSequence" ABC is provided to '
14883*cda5da8dSAndroid Build Coastguard Worker             'make\n'
14884*cda5da8dSAndroid Build Coastguard Worker             'it easier to correctly implement these operations on custom '
14885*cda5da8dSAndroid Build Coastguard Worker             'sequence\n'
14886*cda5da8dSAndroid Build Coastguard Worker             'types.\n'
14887*cda5da8dSAndroid Build Coastguard Worker             '\n'
14888*cda5da8dSAndroid Build Coastguard Worker             'In the table *s* is an instance of a mutable sequence type, *t* '
14889*cda5da8dSAndroid Build Coastguard Worker             'is any\n'
14890*cda5da8dSAndroid Build Coastguard Worker             'iterable object and *x* is an arbitrary object that meets any '
14891*cda5da8dSAndroid Build Coastguard Worker             'type and\n'
14892*cda5da8dSAndroid Build Coastguard Worker             'value restrictions imposed by *s* (for example, "bytearray" '
14893*cda5da8dSAndroid Build Coastguard Worker             'only\n'
14894*cda5da8dSAndroid Build Coastguard Worker             'accepts integers that meet the value restriction "0 <= x <= '
14895*cda5da8dSAndroid Build Coastguard Worker             '255").\n'
14896*cda5da8dSAndroid Build Coastguard Worker             '\n'
14897*cda5da8dSAndroid Build Coastguard Worker             '+--------------------------------+----------------------------------+-----------------------+\n'
14898*cda5da8dSAndroid Build Coastguard Worker             '| Operation                      | '
14899*cda5da8dSAndroid Build Coastguard Worker             'Result                           | Notes                 |\n'
14900*cda5da8dSAndroid Build Coastguard Worker             '|================================|==================================|=======================|\n'
14901*cda5da8dSAndroid Build Coastguard Worker             '| "s[i] = x"                     | item *i* of *s* is replaced '
14902*cda5da8dSAndroid Build Coastguard Worker             'by   |                       |\n'
14903*cda5da8dSAndroid Build Coastguard Worker             '|                                | '
14904*cda5da8dSAndroid Build Coastguard Worker             '*x*                              |                       |\n'
14905*cda5da8dSAndroid Build Coastguard Worker             '+--------------------------------+----------------------------------+-----------------------+\n'
14906*cda5da8dSAndroid Build Coastguard Worker             '| "s[i:j] = t"                   | slice of *s* from *i* to *j* '
14907*cda5da8dSAndroid Build Coastguard Worker             'is  |                       |\n'
14908*cda5da8dSAndroid Build Coastguard Worker             '|                                | replaced by the contents of '
14909*cda5da8dSAndroid Build Coastguard Worker             'the  |                       |\n'
14910*cda5da8dSAndroid Build Coastguard Worker             '|                                | iterable '
14911*cda5da8dSAndroid Build Coastguard Worker             '*t*                     |                       |\n'
14912*cda5da8dSAndroid Build Coastguard Worker             '+--------------------------------+----------------------------------+-----------------------+\n'
14913*cda5da8dSAndroid Build Coastguard Worker             '| "del s[i:j]"                   | same as "s[i:j] = '
14914*cda5da8dSAndroid Build Coastguard Worker             '[]"            |                       |\n'
14915*cda5da8dSAndroid Build Coastguard Worker             '+--------------------------------+----------------------------------+-----------------------+\n'
14916*cda5da8dSAndroid Build Coastguard Worker             '| "s[i:j:k] = t"                 | the elements of "s[i:j:k]" '
14917*cda5da8dSAndroid Build Coastguard Worker             'are   | (1)                   |\n'
14918*cda5da8dSAndroid Build Coastguard Worker             '|                                | replaced by those of '
14919*cda5da8dSAndroid Build Coastguard Worker             '*t*         |                       |\n'
14920*cda5da8dSAndroid Build Coastguard Worker             '+--------------------------------+----------------------------------+-----------------------+\n'
14921*cda5da8dSAndroid Build Coastguard Worker             '| "del s[i:j:k]"                 | removes the elements '
14922*cda5da8dSAndroid Build Coastguard Worker             'of          |                       |\n'
14923*cda5da8dSAndroid Build Coastguard Worker             '|                                | "s[i:j:k]" from the '
14924*cda5da8dSAndroid Build Coastguard Worker             'list         |                       |\n'
14925*cda5da8dSAndroid Build Coastguard Worker             '+--------------------------------+----------------------------------+-----------------------+\n'
14926*cda5da8dSAndroid Build Coastguard Worker             '| "s.append(x)"                  | appends *x* to the end of '
14927*cda5da8dSAndroid Build Coastguard Worker             'the    |                       |\n'
14928*cda5da8dSAndroid Build Coastguard Worker             '|                                | sequence (same '
14929*cda5da8dSAndroid Build Coastguard Worker             'as                |                       |\n'
14930*cda5da8dSAndroid Build Coastguard Worker             '|                                | "s[len(s):len(s)] = '
14931*cda5da8dSAndroid Build Coastguard Worker             '[x]")        |                       |\n'
14932*cda5da8dSAndroid Build Coastguard Worker             '+--------------------------------+----------------------------------+-----------------------+\n'
14933*cda5da8dSAndroid Build Coastguard Worker             '| "s.clear()"                    | removes all items from *s* '
14934*cda5da8dSAndroid Build Coastguard Worker             '(same | (5)                   |\n'
14935*cda5da8dSAndroid Build Coastguard Worker             '|                                | as "del '
14936*cda5da8dSAndroid Build Coastguard Worker             's[:]")                   |                       |\n'
14937*cda5da8dSAndroid Build Coastguard Worker             '+--------------------------------+----------------------------------+-----------------------+\n'
14938*cda5da8dSAndroid Build Coastguard Worker             '| "s.copy()"                     | creates a shallow copy of '
14939*cda5da8dSAndroid Build Coastguard Worker             '*s*    | (5)                   |\n'
14940*cda5da8dSAndroid Build Coastguard Worker             '|                                | (same as '
14941*cda5da8dSAndroid Build Coastguard Worker             '"s[:]")                 |                       |\n'
14942*cda5da8dSAndroid Build Coastguard Worker             '+--------------------------------+----------------------------------+-----------------------+\n'
14943*cda5da8dSAndroid Build Coastguard Worker             '| "s.extend(t)" or "s += t"      | extends *s* with the contents '
14944*cda5da8dSAndroid Build Coastguard Worker             'of |                       |\n'
14945*cda5da8dSAndroid Build Coastguard Worker             '|                                | *t* (for the most part the '
14946*cda5da8dSAndroid Build Coastguard Worker             'same  |                       |\n'
14947*cda5da8dSAndroid Build Coastguard Worker             '|                                | as "s[len(s):len(s)] = '
14948*cda5da8dSAndroid Build Coastguard Worker             't")       |                       |\n'
14949*cda5da8dSAndroid Build Coastguard Worker             '+--------------------------------+----------------------------------+-----------------------+\n'
14950*cda5da8dSAndroid Build Coastguard Worker             '| "s *= n"                       | updates *s* with its '
14951*cda5da8dSAndroid Build Coastguard Worker             'contents    | (6)                   |\n'
14952*cda5da8dSAndroid Build Coastguard Worker             '|                                | repeated *n* '
14953*cda5da8dSAndroid Build Coastguard Worker             'times               |                       |\n'
14954*cda5da8dSAndroid Build Coastguard Worker             '+--------------------------------+----------------------------------+-----------------------+\n'
14955*cda5da8dSAndroid Build Coastguard Worker             '| "s.insert(i, x)"               | inserts *x* into *s* at '
14956*cda5da8dSAndroid Build Coastguard Worker             'the      |                       |\n'
14957*cda5da8dSAndroid Build Coastguard Worker             '|                                | index given by *i* (same '
14958*cda5da8dSAndroid Build Coastguard Worker             'as      |                       |\n'
14959*cda5da8dSAndroid Build Coastguard Worker             '|                                | "s[i:i] = '
14960*cda5da8dSAndroid Build Coastguard Worker             '[x]")                  |                       |\n'
14961*cda5da8dSAndroid Build Coastguard Worker             '+--------------------------------+----------------------------------+-----------------------+\n'
14962*cda5da8dSAndroid Build Coastguard Worker             '| "s.pop()" or "s.pop(i)"        | retrieves the item at *i* '
14963*cda5da8dSAndroid Build Coastguard Worker             'and    | (2)                   |\n'
14964*cda5da8dSAndroid Build Coastguard Worker             '|                                | also removes it from '
14965*cda5da8dSAndroid Build Coastguard Worker             '*s*         |                       |\n'
14966*cda5da8dSAndroid Build Coastguard Worker             '+--------------------------------+----------------------------------+-----------------------+\n'
14967*cda5da8dSAndroid Build Coastguard Worker             '| "s.remove(x)"                  | remove the first item from '
14968*cda5da8dSAndroid Build Coastguard Worker             '*s*   | (3)                   |\n'
14969*cda5da8dSAndroid Build Coastguard Worker             '|                                | where "s[i]" is equal to '
14970*cda5da8dSAndroid Build Coastguard Worker             '*x*     |                       |\n'
14971*cda5da8dSAndroid Build Coastguard Worker             '+--------------------------------+----------------------------------+-----------------------+\n'
14972*cda5da8dSAndroid Build Coastguard Worker             '| "s.reverse()"                  | reverses the items of *s* '
14973*cda5da8dSAndroid Build Coastguard Worker             'in     | (4)                   |\n'
14974*cda5da8dSAndroid Build Coastguard Worker             '|                                | '
14975*cda5da8dSAndroid Build Coastguard Worker             'place                            |                       |\n'
14976*cda5da8dSAndroid Build Coastguard Worker             '+--------------------------------+----------------------------------+-----------------------+\n'
14977*cda5da8dSAndroid Build Coastguard Worker             '\n'
14978*cda5da8dSAndroid Build Coastguard Worker             'Notes:\n'
14979*cda5da8dSAndroid Build Coastguard Worker             '\n'
14980*cda5da8dSAndroid Build Coastguard Worker             '1. *t* must have the same length as the slice it is replacing.\n'
14981*cda5da8dSAndroid Build Coastguard Worker             '\n'
14982*cda5da8dSAndroid Build Coastguard Worker             '2. The optional argument *i* defaults to "-1", so that by '
14983*cda5da8dSAndroid Build Coastguard Worker             'default the\n'
14984*cda5da8dSAndroid Build Coastguard Worker             '   last item is removed and returned.\n'
14985*cda5da8dSAndroid Build Coastguard Worker             '\n'
14986*cda5da8dSAndroid Build Coastguard Worker             '3. "remove()" raises "ValueError" when *x* is not found in *s*.\n'
14987*cda5da8dSAndroid Build Coastguard Worker             '\n'
14988*cda5da8dSAndroid Build Coastguard Worker             '4. The "reverse()" method modifies the sequence in place for '
14989*cda5da8dSAndroid Build Coastguard Worker             'economy\n'
14990*cda5da8dSAndroid Build Coastguard Worker             '   of space when reversing a large sequence.  To remind users '
14991*cda5da8dSAndroid Build Coastguard Worker             'that it\n'
14992*cda5da8dSAndroid Build Coastguard Worker             '   operates by side effect, it does not return the reversed '
14993*cda5da8dSAndroid Build Coastguard Worker             'sequence.\n'
14994*cda5da8dSAndroid Build Coastguard Worker             '\n'
14995*cda5da8dSAndroid Build Coastguard Worker             '5. "clear()" and "copy()" are included for consistency with the\n'
14996*cda5da8dSAndroid Build Coastguard Worker             '   interfaces of mutable containers that don’t support slicing\n'
14997*cda5da8dSAndroid Build Coastguard Worker             '   operations (such as "dict" and "set"). "copy()" is not part '
14998*cda5da8dSAndroid Build Coastguard Worker             'of the\n'
14999*cda5da8dSAndroid Build Coastguard Worker             '   "collections.abc.MutableSequence" ABC, but most concrete '
15000*cda5da8dSAndroid Build Coastguard Worker             'mutable\n'
15001*cda5da8dSAndroid Build Coastguard Worker             '   sequence classes provide it.\n'
15002*cda5da8dSAndroid Build Coastguard Worker             '\n'
15003*cda5da8dSAndroid Build Coastguard Worker             '   New in version 3.3: "clear()" and "copy()" methods.\n'
15004*cda5da8dSAndroid Build Coastguard Worker             '\n'
15005*cda5da8dSAndroid Build Coastguard Worker             '6. The value *n* is an integer, or an object implementing\n'
15006*cda5da8dSAndroid Build Coastguard Worker             '   "__index__()".  Zero and negative values of *n* clear the '
15007*cda5da8dSAndroid Build Coastguard Worker             'sequence.\n'
15008*cda5da8dSAndroid Build Coastguard Worker             '   Items in the sequence are not copied; they are referenced '
15009*cda5da8dSAndroid Build Coastguard Worker             'multiple\n'
15010*cda5da8dSAndroid Build Coastguard Worker             '   times, as explained for "s * n" under Common Sequence '
15011*cda5da8dSAndroid Build Coastguard Worker             'Operations.\n'
15012*cda5da8dSAndroid Build Coastguard Worker             '\n'
15013*cda5da8dSAndroid Build Coastguard Worker             '\n'
15014*cda5da8dSAndroid Build Coastguard Worker             'Lists\n'
15015*cda5da8dSAndroid Build Coastguard Worker             '=====\n'
15016*cda5da8dSAndroid Build Coastguard Worker             '\n'
15017*cda5da8dSAndroid Build Coastguard Worker             'Lists are mutable sequences, typically used to store collections '
15018*cda5da8dSAndroid Build Coastguard Worker             'of\n'
15019*cda5da8dSAndroid Build Coastguard Worker             'homogeneous items (where the precise degree of similarity will '
15020*cda5da8dSAndroid Build Coastguard Worker             'vary by\n'
15021*cda5da8dSAndroid Build Coastguard Worker             'application).\n'
15022*cda5da8dSAndroid Build Coastguard Worker             '\n'
15023*cda5da8dSAndroid Build Coastguard Worker             'class list([iterable])\n'
15024*cda5da8dSAndroid Build Coastguard Worker             '\n'
15025*cda5da8dSAndroid Build Coastguard Worker             '   Lists may be constructed in several ways:\n'
15026*cda5da8dSAndroid Build Coastguard Worker             '\n'
15027*cda5da8dSAndroid Build Coastguard Worker             '   * Using a pair of square brackets to denote the empty list: '
15028*cda5da8dSAndroid Build Coastguard Worker             '"[]"\n'
15029*cda5da8dSAndroid Build Coastguard Worker             '\n'
15030*cda5da8dSAndroid Build Coastguard Worker             '   * Using square brackets, separating items with commas: "[a]", '
15031*cda5da8dSAndroid Build Coastguard Worker             '"[a,\n'
15032*cda5da8dSAndroid Build Coastguard Worker             '     b, c]"\n'
15033*cda5da8dSAndroid Build Coastguard Worker             '\n'
15034*cda5da8dSAndroid Build Coastguard Worker             '   * Using a list comprehension: "[x for x in iterable]"\n'
15035*cda5da8dSAndroid Build Coastguard Worker             '\n'
15036*cda5da8dSAndroid Build Coastguard Worker             '   * Using the type constructor: "list()" or "list(iterable)"\n'
15037*cda5da8dSAndroid Build Coastguard Worker             '\n'
15038*cda5da8dSAndroid Build Coastguard Worker             '   The constructor builds a list whose items are the same and in '
15039*cda5da8dSAndroid Build Coastguard Worker             'the\n'
15040*cda5da8dSAndroid Build Coastguard Worker             '   same order as *iterable*’s items.  *iterable* may be either '
15041*cda5da8dSAndroid Build Coastguard Worker             'a\n'
15042*cda5da8dSAndroid Build Coastguard Worker             '   sequence, a container that supports iteration, or an '
15043*cda5da8dSAndroid Build Coastguard Worker             'iterator\n'
15044*cda5da8dSAndroid Build Coastguard Worker             '   object.  If *iterable* is already a list, a copy is made and\n'
15045*cda5da8dSAndroid Build Coastguard Worker             '   returned, similar to "iterable[:]". For example, '
15046*cda5da8dSAndroid Build Coastguard Worker             '"list(\'abc\')"\n'
15047*cda5da8dSAndroid Build Coastguard Worker             '   returns "[\'a\', \'b\', \'c\']" and "list( (1, 2, 3) )" '
15048*cda5da8dSAndroid Build Coastguard Worker             'returns "[1, 2,\n'
15049*cda5da8dSAndroid Build Coastguard Worker             '   3]". If no argument is given, the constructor creates a new '
15050*cda5da8dSAndroid Build Coastguard Worker             'empty\n'
15051*cda5da8dSAndroid Build Coastguard Worker             '   list, "[]".\n'
15052*cda5da8dSAndroid Build Coastguard Worker             '\n'
15053*cda5da8dSAndroid Build Coastguard Worker             '   Many other operations also produce lists, including the '
15054*cda5da8dSAndroid Build Coastguard Worker             '"sorted()"\n'
15055*cda5da8dSAndroid Build Coastguard Worker             '   built-in.\n'
15056*cda5da8dSAndroid Build Coastguard Worker             '\n'
15057*cda5da8dSAndroid Build Coastguard Worker             '   Lists implement all of the common and mutable sequence '
15058*cda5da8dSAndroid Build Coastguard Worker             'operations.\n'
15059*cda5da8dSAndroid Build Coastguard Worker             '   Lists also provide the following additional method:\n'
15060*cda5da8dSAndroid Build Coastguard Worker             '\n'
15061*cda5da8dSAndroid Build Coastguard Worker             '   sort(*, key=None, reverse=False)\n'
15062*cda5da8dSAndroid Build Coastguard Worker             '\n'
15063*cda5da8dSAndroid Build Coastguard Worker             '      This method sorts the list in place, using only "<" '
15064*cda5da8dSAndroid Build Coastguard Worker             'comparisons\n'
15065*cda5da8dSAndroid Build Coastguard Worker             '      between items. Exceptions are not suppressed - if any '
15066*cda5da8dSAndroid Build Coastguard Worker             'comparison\n'
15067*cda5da8dSAndroid Build Coastguard Worker             '      operations fail, the entire sort operation will fail (and '
15068*cda5da8dSAndroid Build Coastguard Worker             'the\n'
15069*cda5da8dSAndroid Build Coastguard Worker             '      list will likely be left in a partially modified state).\n'
15070*cda5da8dSAndroid Build Coastguard Worker             '\n'
15071*cda5da8dSAndroid Build Coastguard Worker             '      "sort()" accepts two arguments that can only be passed by\n'
15072*cda5da8dSAndroid Build Coastguard Worker             '      keyword (keyword-only arguments):\n'
15073*cda5da8dSAndroid Build Coastguard Worker             '\n'
15074*cda5da8dSAndroid Build Coastguard Worker             '      *key* specifies a function of one argument that is used '
15075*cda5da8dSAndroid Build Coastguard Worker             'to\n'
15076*cda5da8dSAndroid Build Coastguard Worker             '      extract a comparison key from each list element (for '
15077*cda5da8dSAndroid Build Coastguard Worker             'example,\n'
15078*cda5da8dSAndroid Build Coastguard Worker             '      "key=str.lower"). The key corresponding to each item in '
15079*cda5da8dSAndroid Build Coastguard Worker             'the list\n'
15080*cda5da8dSAndroid Build Coastguard Worker             '      is calculated once and then used for the entire sorting '
15081*cda5da8dSAndroid Build Coastguard Worker             'process.\n'
15082*cda5da8dSAndroid Build Coastguard Worker             '      The default value of "None" means that list items are '
15083*cda5da8dSAndroid Build Coastguard Worker             'sorted\n'
15084*cda5da8dSAndroid Build Coastguard Worker             '      directly without calculating a separate key value.\n'
15085*cda5da8dSAndroid Build Coastguard Worker             '\n'
15086*cda5da8dSAndroid Build Coastguard Worker             '      The "functools.cmp_to_key()" utility is available to '
15087*cda5da8dSAndroid Build Coastguard Worker             'convert a\n'
15088*cda5da8dSAndroid Build Coastguard Worker             '      2.x style *cmp* function to a *key* function.\n'
15089*cda5da8dSAndroid Build Coastguard Worker             '\n'
15090*cda5da8dSAndroid Build Coastguard Worker             '      *reverse* is a boolean value.  If set to "True", then the '
15091*cda5da8dSAndroid Build Coastguard Worker             'list\n'
15092*cda5da8dSAndroid Build Coastguard Worker             '      elements are sorted as if each comparison were reversed.\n'
15093*cda5da8dSAndroid Build Coastguard Worker             '\n'
15094*cda5da8dSAndroid Build Coastguard Worker             '      This method modifies the sequence in place for economy of '
15095*cda5da8dSAndroid Build Coastguard Worker             'space\n'
15096*cda5da8dSAndroid Build Coastguard Worker             '      when sorting a large sequence.  To remind users that it '
15097*cda5da8dSAndroid Build Coastguard Worker             'operates\n'
15098*cda5da8dSAndroid Build Coastguard Worker             '      by side effect, it does not return the sorted sequence '
15099*cda5da8dSAndroid Build Coastguard Worker             '(use\n'
15100*cda5da8dSAndroid Build Coastguard Worker             '      "sorted()" to explicitly request a new sorted list '
15101*cda5da8dSAndroid Build Coastguard Worker             'instance).\n'
15102*cda5da8dSAndroid Build Coastguard Worker             '\n'
15103*cda5da8dSAndroid Build Coastguard Worker             '      The "sort()" method is guaranteed to be stable.  A sort '
15104*cda5da8dSAndroid Build Coastguard Worker             'is\n'
15105*cda5da8dSAndroid Build Coastguard Worker             '      stable if it guarantees not to change the relative order '
15106*cda5da8dSAndroid Build Coastguard Worker             'of\n'
15107*cda5da8dSAndroid Build Coastguard Worker             '      elements that compare equal — this is helpful for sorting '
15108*cda5da8dSAndroid Build Coastguard Worker             'in\n'
15109*cda5da8dSAndroid Build Coastguard Worker             '      multiple passes (for example, sort by department, then by '
15110*cda5da8dSAndroid Build Coastguard Worker             'salary\n'
15111*cda5da8dSAndroid Build Coastguard Worker             '      grade).\n'
15112*cda5da8dSAndroid Build Coastguard Worker             '\n'
15113*cda5da8dSAndroid Build Coastguard Worker             '      For sorting examples and a brief sorting tutorial, see '
15114*cda5da8dSAndroid Build Coastguard Worker             'Sorting\n'
15115*cda5da8dSAndroid Build Coastguard Worker             '      HOW TO.\n'
15116*cda5da8dSAndroid Build Coastguard Worker             '\n'
15117*cda5da8dSAndroid Build Coastguard Worker             '      **CPython implementation detail:** While a list is being '
15118*cda5da8dSAndroid Build Coastguard Worker             'sorted,\n'
15119*cda5da8dSAndroid Build Coastguard Worker             '      the effect of attempting to mutate, or even inspect, the '
15120*cda5da8dSAndroid Build Coastguard Worker             'list is\n'
15121*cda5da8dSAndroid Build Coastguard Worker             '      undefined.  The C implementation of Python makes the list '
15122*cda5da8dSAndroid Build Coastguard Worker             'appear\n'
15123*cda5da8dSAndroid Build Coastguard Worker             '      empty for the duration, and raises "ValueError" if it can '
15124*cda5da8dSAndroid Build Coastguard Worker             'detect\n'
15125*cda5da8dSAndroid Build Coastguard Worker             '      that the list has been mutated during a sort.\n'
15126*cda5da8dSAndroid Build Coastguard Worker             '\n'
15127*cda5da8dSAndroid Build Coastguard Worker             '\n'
15128*cda5da8dSAndroid Build Coastguard Worker             'Tuples\n'
15129*cda5da8dSAndroid Build Coastguard Worker             '======\n'
15130*cda5da8dSAndroid Build Coastguard Worker             '\n'
15131*cda5da8dSAndroid Build Coastguard Worker             'Tuples are immutable sequences, typically used to store '
15132*cda5da8dSAndroid Build Coastguard Worker             'collections of\n'
15133*cda5da8dSAndroid Build Coastguard Worker             'heterogeneous data (such as the 2-tuples produced by the '
15134*cda5da8dSAndroid Build Coastguard Worker             '"enumerate()"\n'
15135*cda5da8dSAndroid Build Coastguard Worker             'built-in). Tuples are also used for cases where an immutable '
15136*cda5da8dSAndroid Build Coastguard Worker             'sequence\n'
15137*cda5da8dSAndroid Build Coastguard Worker             'of homogeneous data is needed (such as allowing storage in a '
15138*cda5da8dSAndroid Build Coastguard Worker             '"set" or\n'
15139*cda5da8dSAndroid Build Coastguard Worker             '"dict" instance).\n'
15140*cda5da8dSAndroid Build Coastguard Worker             '\n'
15141*cda5da8dSAndroid Build Coastguard Worker             'class tuple([iterable])\n'
15142*cda5da8dSAndroid Build Coastguard Worker             '\n'
15143*cda5da8dSAndroid Build Coastguard Worker             '   Tuples may be constructed in a number of ways:\n'
15144*cda5da8dSAndroid Build Coastguard Worker             '\n'
15145*cda5da8dSAndroid Build Coastguard Worker             '   * Using a pair of parentheses to denote the empty tuple: '
15146*cda5da8dSAndroid Build Coastguard Worker             '"()"\n'
15147*cda5da8dSAndroid Build Coastguard Worker             '\n'
15148*cda5da8dSAndroid Build Coastguard Worker             '   * Using a trailing comma for a singleton tuple: "a," or '
15149*cda5da8dSAndroid Build Coastguard Worker             '"(a,)"\n'
15150*cda5da8dSAndroid Build Coastguard Worker             '\n'
15151*cda5da8dSAndroid Build Coastguard Worker             '   * Separating items with commas: "a, b, c" or "(a, b, c)"\n'
15152*cda5da8dSAndroid Build Coastguard Worker             '\n'
15153*cda5da8dSAndroid Build Coastguard Worker             '   * Using the "tuple()" built-in: "tuple()" or '
15154*cda5da8dSAndroid Build Coastguard Worker             '"tuple(iterable)"\n'
15155*cda5da8dSAndroid Build Coastguard Worker             '\n'
15156*cda5da8dSAndroid Build Coastguard Worker             '   The constructor builds a tuple whose items are the same and '
15157*cda5da8dSAndroid Build Coastguard Worker             'in the\n'
15158*cda5da8dSAndroid Build Coastguard Worker             '   same order as *iterable*’s items.  *iterable* may be either '
15159*cda5da8dSAndroid Build Coastguard Worker             'a\n'
15160*cda5da8dSAndroid Build Coastguard Worker             '   sequence, a container that supports iteration, or an '
15161*cda5da8dSAndroid Build Coastguard Worker             'iterator\n'
15162*cda5da8dSAndroid Build Coastguard Worker             '   object.  If *iterable* is already a tuple, it is returned\n'
15163*cda5da8dSAndroid Build Coastguard Worker             '   unchanged. For example, "tuple(\'abc\')" returns "(\'a\', '
15164*cda5da8dSAndroid Build Coastguard Worker             '\'b\', \'c\')"\n'
15165*cda5da8dSAndroid Build Coastguard Worker             '   and "tuple( [1, 2, 3] )" returns "(1, 2, 3)". If no argument '
15166*cda5da8dSAndroid Build Coastguard Worker             'is\n'
15167*cda5da8dSAndroid Build Coastguard Worker             '   given, the constructor creates a new empty tuple, "()".\n'
15168*cda5da8dSAndroid Build Coastguard Worker             '\n'
15169*cda5da8dSAndroid Build Coastguard Worker             '   Note that it is actually the comma which makes a tuple, not '
15170*cda5da8dSAndroid Build Coastguard Worker             'the\n'
15171*cda5da8dSAndroid Build Coastguard Worker             '   parentheses. The parentheses are optional, except in the '
15172*cda5da8dSAndroid Build Coastguard Worker             'empty\n'
15173*cda5da8dSAndroid Build Coastguard Worker             '   tuple case, or when they are needed to avoid syntactic '
15174*cda5da8dSAndroid Build Coastguard Worker             'ambiguity.\n'
15175*cda5da8dSAndroid Build Coastguard Worker             '   For example, "f(a, b, c)" is a function call with three '
15176*cda5da8dSAndroid Build Coastguard Worker             'arguments,\n'
15177*cda5da8dSAndroid Build Coastguard Worker             '   while "f((a, b, c))" is a function call with a 3-tuple as the '
15178*cda5da8dSAndroid Build Coastguard Worker             'sole\n'
15179*cda5da8dSAndroid Build Coastguard Worker             '   argument.\n'
15180*cda5da8dSAndroid Build Coastguard Worker             '\n'
15181*cda5da8dSAndroid Build Coastguard Worker             '   Tuples implement all of the common sequence operations.\n'
15182*cda5da8dSAndroid Build Coastguard Worker             '\n'
15183*cda5da8dSAndroid Build Coastguard Worker             'For heterogeneous collections of data where access by name is '
15184*cda5da8dSAndroid Build Coastguard Worker             'clearer\n'
15185*cda5da8dSAndroid Build Coastguard Worker             'than access by index, "collections.namedtuple()" may be a more\n'
15186*cda5da8dSAndroid Build Coastguard Worker             'appropriate choice than a simple tuple object.\n'
15187*cda5da8dSAndroid Build Coastguard Worker             '\n'
15188*cda5da8dSAndroid Build Coastguard Worker             '\n'
15189*cda5da8dSAndroid Build Coastguard Worker             'Ranges\n'
15190*cda5da8dSAndroid Build Coastguard Worker             '======\n'
15191*cda5da8dSAndroid Build Coastguard Worker             '\n'
15192*cda5da8dSAndroid Build Coastguard Worker             'The "range" type represents an immutable sequence of numbers and '
15193*cda5da8dSAndroid Build Coastguard Worker             'is\n'
15194*cda5da8dSAndroid Build Coastguard Worker             'commonly used for looping a specific number of times in "for" '
15195*cda5da8dSAndroid Build Coastguard Worker             'loops.\n'
15196*cda5da8dSAndroid Build Coastguard Worker             '\n'
15197*cda5da8dSAndroid Build Coastguard Worker             'class range(stop)\n'
15198*cda5da8dSAndroid Build Coastguard Worker             'class range(start, stop[, step])\n'
15199*cda5da8dSAndroid Build Coastguard Worker             '\n'
15200*cda5da8dSAndroid Build Coastguard Worker             '   The arguments to the range constructor must be integers '
15201*cda5da8dSAndroid Build Coastguard Worker             '(either\n'
15202*cda5da8dSAndroid Build Coastguard Worker             '   built-in "int" or any object that implements the '
15203*cda5da8dSAndroid Build Coastguard Worker             '"__index__()"\n'
15204*cda5da8dSAndroid Build Coastguard Worker             '   special method).  If the *step* argument is omitted, it '
15205*cda5da8dSAndroid Build Coastguard Worker             'defaults to\n'
15206*cda5da8dSAndroid Build Coastguard Worker             '   "1". If the *start* argument is omitted, it defaults to "0". '
15207*cda5da8dSAndroid Build Coastguard Worker             'If\n'
15208*cda5da8dSAndroid Build Coastguard Worker             '   *step* is zero, "ValueError" is raised.\n'
15209*cda5da8dSAndroid Build Coastguard Worker             '\n'
15210*cda5da8dSAndroid Build Coastguard Worker             '   For a positive *step*, the contents of a range "r" are '
15211*cda5da8dSAndroid Build Coastguard Worker             'determined\n'
15212*cda5da8dSAndroid Build Coastguard Worker             '   by the formula "r[i] = start + step*i" where "i >= 0" and '
15213*cda5da8dSAndroid Build Coastguard Worker             '"r[i] <\n'
15214*cda5da8dSAndroid Build Coastguard Worker             '   stop".\n'
15215*cda5da8dSAndroid Build Coastguard Worker             '\n'
15216*cda5da8dSAndroid Build Coastguard Worker             '   For a negative *step*, the contents of the range are still\n'
15217*cda5da8dSAndroid Build Coastguard Worker             '   determined by the formula "r[i] = start + step*i", but the\n'
15218*cda5da8dSAndroid Build Coastguard Worker             '   constraints are "i >= 0" and "r[i] > stop".\n'
15219*cda5da8dSAndroid Build Coastguard Worker             '\n'
15220*cda5da8dSAndroid Build Coastguard Worker             '   A range object will be empty if "r[0]" does not meet the '
15221*cda5da8dSAndroid Build Coastguard Worker             'value\n'
15222*cda5da8dSAndroid Build Coastguard Worker             '   constraint. Ranges do support negative indices, but these '
15223*cda5da8dSAndroid Build Coastguard Worker             'are\n'
15224*cda5da8dSAndroid Build Coastguard Worker             '   interpreted as indexing from the end of the sequence '
15225*cda5da8dSAndroid Build Coastguard Worker             'determined by\n'
15226*cda5da8dSAndroid Build Coastguard Worker             '   the positive indices.\n'
15227*cda5da8dSAndroid Build Coastguard Worker             '\n'
15228*cda5da8dSAndroid Build Coastguard Worker             '   Ranges containing absolute values larger than "sys.maxsize" '
15229*cda5da8dSAndroid Build Coastguard Worker             'are\n'
15230*cda5da8dSAndroid Build Coastguard Worker             '   permitted but some features (such as "len()") may raise\n'
15231*cda5da8dSAndroid Build Coastguard Worker             '   "OverflowError".\n'
15232*cda5da8dSAndroid Build Coastguard Worker             '\n'
15233*cda5da8dSAndroid Build Coastguard Worker             '   Range examples:\n'
15234*cda5da8dSAndroid Build Coastguard Worker             '\n'
15235*cda5da8dSAndroid Build Coastguard Worker             '      >>> list(range(10))\n'
15236*cda5da8dSAndroid Build Coastguard Worker             '      [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n'
15237*cda5da8dSAndroid Build Coastguard Worker             '      >>> list(range(1, 11))\n'
15238*cda5da8dSAndroid Build Coastguard Worker             '      [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n'
15239*cda5da8dSAndroid Build Coastguard Worker             '      >>> list(range(0, 30, 5))\n'
15240*cda5da8dSAndroid Build Coastguard Worker             '      [0, 5, 10, 15, 20, 25]\n'
15241*cda5da8dSAndroid Build Coastguard Worker             '      >>> list(range(0, 10, 3))\n'
15242*cda5da8dSAndroid Build Coastguard Worker             '      [0, 3, 6, 9]\n'
15243*cda5da8dSAndroid Build Coastguard Worker             '      >>> list(range(0, -10, -1))\n'
15244*cda5da8dSAndroid Build Coastguard Worker             '      [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]\n'
15245*cda5da8dSAndroid Build Coastguard Worker             '      >>> list(range(0))\n'
15246*cda5da8dSAndroid Build Coastguard Worker             '      []\n'
15247*cda5da8dSAndroid Build Coastguard Worker             '      >>> list(range(1, 0))\n'
15248*cda5da8dSAndroid Build Coastguard Worker             '      []\n'
15249*cda5da8dSAndroid Build Coastguard Worker             '\n'
15250*cda5da8dSAndroid Build Coastguard Worker             '   Ranges implement all of the common sequence operations '
15251*cda5da8dSAndroid Build Coastguard Worker             'except\n'
15252*cda5da8dSAndroid Build Coastguard Worker             '   concatenation and repetition (due to the fact that range '
15253*cda5da8dSAndroid Build Coastguard Worker             'objects\n'
15254*cda5da8dSAndroid Build Coastguard Worker             '   can only represent sequences that follow a strict pattern '
15255*cda5da8dSAndroid Build Coastguard Worker             'and\n'
15256*cda5da8dSAndroid Build Coastguard Worker             '   repetition and concatenation will usually violate that '
15257*cda5da8dSAndroid Build Coastguard Worker             'pattern).\n'
15258*cda5da8dSAndroid Build Coastguard Worker             '\n'
15259*cda5da8dSAndroid Build Coastguard Worker             '   start\n'
15260*cda5da8dSAndroid Build Coastguard Worker             '\n'
15261*cda5da8dSAndroid Build Coastguard Worker             '      The value of the *start* parameter (or "0" if the '
15262*cda5da8dSAndroid Build Coastguard Worker             'parameter was\n'
15263*cda5da8dSAndroid Build Coastguard Worker             '      not supplied)\n'
15264*cda5da8dSAndroid Build Coastguard Worker             '\n'
15265*cda5da8dSAndroid Build Coastguard Worker             '   stop\n'
15266*cda5da8dSAndroid Build Coastguard Worker             '\n'
15267*cda5da8dSAndroid Build Coastguard Worker             '      The value of the *stop* parameter\n'
15268*cda5da8dSAndroid Build Coastguard Worker             '\n'
15269*cda5da8dSAndroid Build Coastguard Worker             '   step\n'
15270*cda5da8dSAndroid Build Coastguard Worker             '\n'
15271*cda5da8dSAndroid Build Coastguard Worker             '      The value of the *step* parameter (or "1" if the parameter '
15272*cda5da8dSAndroid Build Coastguard Worker             'was\n'
15273*cda5da8dSAndroid Build Coastguard Worker             '      not supplied)\n'
15274*cda5da8dSAndroid Build Coastguard Worker             '\n'
15275*cda5da8dSAndroid Build Coastguard Worker             'The advantage of the "range" type over a regular "list" or '
15276*cda5da8dSAndroid Build Coastguard Worker             '"tuple" is\n'
15277*cda5da8dSAndroid Build Coastguard Worker             'that a "range" object will always take the same (small) amount '
15278*cda5da8dSAndroid Build Coastguard Worker             'of\n'
15279*cda5da8dSAndroid Build Coastguard Worker             'memory, no matter the size of the range it represents (as it '
15280*cda5da8dSAndroid Build Coastguard Worker             'only\n'
15281*cda5da8dSAndroid Build Coastguard Worker             'stores the "start", "stop" and "step" values, calculating '
15282*cda5da8dSAndroid Build Coastguard Worker             'individual\n'
15283*cda5da8dSAndroid Build Coastguard Worker             'items and subranges as needed).\n'
15284*cda5da8dSAndroid Build Coastguard Worker             '\n'
15285*cda5da8dSAndroid Build Coastguard Worker             'Range objects implement the "collections.abc.Sequence" ABC, and\n'
15286*cda5da8dSAndroid Build Coastguard Worker             'provide features such as containment tests, element index '
15287*cda5da8dSAndroid Build Coastguard Worker             'lookup,\n'
15288*cda5da8dSAndroid Build Coastguard Worker             'slicing and support for negative indices (see Sequence Types — '
15289*cda5da8dSAndroid Build Coastguard Worker             'list,\n'
15290*cda5da8dSAndroid Build Coastguard Worker             'tuple, range):\n'
15291*cda5da8dSAndroid Build Coastguard Worker             '\n'
15292*cda5da8dSAndroid Build Coastguard Worker             '>>> r = range(0, 20, 2)\n'
15293*cda5da8dSAndroid Build Coastguard Worker             '>>> r\n'
15294*cda5da8dSAndroid Build Coastguard Worker             'range(0, 20, 2)\n'
15295*cda5da8dSAndroid Build Coastguard Worker             '>>> 11 in r\n'
15296*cda5da8dSAndroid Build Coastguard Worker             'False\n'
15297*cda5da8dSAndroid Build Coastguard Worker             '>>> 10 in r\n'
15298*cda5da8dSAndroid Build Coastguard Worker             'True\n'
15299*cda5da8dSAndroid Build Coastguard Worker             '>>> r.index(10)\n'
15300*cda5da8dSAndroid Build Coastguard Worker             '5\n'
15301*cda5da8dSAndroid Build Coastguard Worker             '>>> r[5]\n'
15302*cda5da8dSAndroid Build Coastguard Worker             '10\n'
15303*cda5da8dSAndroid Build Coastguard Worker             '>>> r[:5]\n'
15304*cda5da8dSAndroid Build Coastguard Worker             'range(0, 10, 2)\n'
15305*cda5da8dSAndroid Build Coastguard Worker             '>>> r[-1]\n'
15306*cda5da8dSAndroid Build Coastguard Worker             '18\n'
15307*cda5da8dSAndroid Build Coastguard Worker             '\n'
15308*cda5da8dSAndroid Build Coastguard Worker             'Testing range objects for equality with "==" and "!=" compares '
15309*cda5da8dSAndroid Build Coastguard Worker             'them as\n'
15310*cda5da8dSAndroid Build Coastguard Worker             'sequences.  That is, two range objects are considered equal if '
15311*cda5da8dSAndroid Build Coastguard Worker             'they\n'
15312*cda5da8dSAndroid Build Coastguard Worker             'represent the same sequence of values.  (Note that two range '
15313*cda5da8dSAndroid Build Coastguard Worker             'objects\n'
15314*cda5da8dSAndroid Build Coastguard Worker             'that compare equal might have different "start", "stop" and '
15315*cda5da8dSAndroid Build Coastguard Worker             '"step"\n'
15316*cda5da8dSAndroid Build Coastguard Worker             'attributes, for example "range(0) == range(2, 1, 3)" or '
15317*cda5da8dSAndroid Build Coastguard Worker             '"range(0, 3,\n'
15318*cda5da8dSAndroid Build Coastguard Worker             '2) == range(0, 4, 2)".)\n'
15319*cda5da8dSAndroid Build Coastguard Worker             '\n'
15320*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.2: Implement the Sequence ABC. Support '
15321*cda5da8dSAndroid Build Coastguard Worker             'slicing\n'
15322*cda5da8dSAndroid Build Coastguard Worker             'and negative indices. Test "int" objects for membership in '
15323*cda5da8dSAndroid Build Coastguard Worker             'constant\n'
15324*cda5da8dSAndroid Build Coastguard Worker             'time instead of iterating through all items.\n'
15325*cda5da8dSAndroid Build Coastguard Worker             '\n'
15326*cda5da8dSAndroid Build Coastguard Worker             'Changed in version 3.3: Define ‘==’ and ‘!=’ to compare range '
15327*cda5da8dSAndroid Build Coastguard Worker             'objects\n'
15328*cda5da8dSAndroid Build Coastguard Worker             'based on the sequence of values they define (instead of '
15329*cda5da8dSAndroid Build Coastguard Worker             'comparing\n'
15330*cda5da8dSAndroid Build Coastguard Worker             'based on object identity).\n'
15331*cda5da8dSAndroid Build Coastguard Worker             '\n'
15332*cda5da8dSAndroid Build Coastguard Worker             'New in version 3.3: The "start", "stop" and "step" attributes.\n'
15333*cda5da8dSAndroid Build Coastguard Worker             '\n'
15334*cda5da8dSAndroid Build Coastguard Worker             'See also:\n'
15335*cda5da8dSAndroid Build Coastguard Worker             '\n'
15336*cda5da8dSAndroid Build Coastguard Worker             '  * The linspace recipe shows how to implement a lazy version of '
15337*cda5da8dSAndroid Build Coastguard Worker             'range\n'
15338*cda5da8dSAndroid Build Coastguard Worker             '    suitable for floating point applications.\n',
15339*cda5da8dSAndroid Build Coastguard Worker 'typesseq-mutable': 'Mutable Sequence Types\n'
15340*cda5da8dSAndroid Build Coastguard Worker                     '**********************\n'
15341*cda5da8dSAndroid Build Coastguard Worker                     '\n'
15342*cda5da8dSAndroid Build Coastguard Worker                     'The operations in the following table are defined on '
15343*cda5da8dSAndroid Build Coastguard Worker                     'mutable sequence\n'
15344*cda5da8dSAndroid Build Coastguard Worker                     'types. The "collections.abc.MutableSequence" ABC is '
15345*cda5da8dSAndroid Build Coastguard Worker                     'provided to make\n'
15346*cda5da8dSAndroid Build Coastguard Worker                     'it easier to correctly implement these operations on '
15347*cda5da8dSAndroid Build Coastguard Worker                     'custom sequence\n'
15348*cda5da8dSAndroid Build Coastguard Worker                     'types.\n'
15349*cda5da8dSAndroid Build Coastguard Worker                     '\n'
15350*cda5da8dSAndroid Build Coastguard Worker                     'In the table *s* is an instance of a mutable sequence '
15351*cda5da8dSAndroid Build Coastguard Worker                     'type, *t* is any\n'
15352*cda5da8dSAndroid Build Coastguard Worker                     'iterable object and *x* is an arbitrary object that '
15353*cda5da8dSAndroid Build Coastguard Worker                     'meets any type and\n'
15354*cda5da8dSAndroid Build Coastguard Worker                     'value restrictions imposed by *s* (for example, '
15355*cda5da8dSAndroid Build Coastguard Worker                     '"bytearray" only\n'
15356*cda5da8dSAndroid Build Coastguard Worker                     'accepts integers that meet the value restriction "0 <= x '
15357*cda5da8dSAndroid Build Coastguard Worker                     '<= 255").\n'
15358*cda5da8dSAndroid Build Coastguard Worker                     '\n'
15359*cda5da8dSAndroid Build Coastguard Worker                     '+--------------------------------+----------------------------------+-----------------------+\n'
15360*cda5da8dSAndroid Build Coastguard Worker                     '| Operation                      | '
15361*cda5da8dSAndroid Build Coastguard Worker                     'Result                           | Notes                 '
15362*cda5da8dSAndroid Build Coastguard Worker                     '|\n'
15363*cda5da8dSAndroid Build Coastguard Worker                     '|================================|==================================|=======================|\n'
15364*cda5da8dSAndroid Build Coastguard Worker                     '| "s[i] = x"                     | item *i* of *s* is '
15365*cda5da8dSAndroid Build Coastguard Worker                     'replaced by   |                       |\n'
15366*cda5da8dSAndroid Build Coastguard Worker                     '|                                | '
15367*cda5da8dSAndroid Build Coastguard Worker                     '*x*                              |                       '
15368*cda5da8dSAndroid Build Coastguard Worker                     '|\n'
15369*cda5da8dSAndroid Build Coastguard Worker                     '+--------------------------------+----------------------------------+-----------------------+\n'
15370*cda5da8dSAndroid Build Coastguard Worker                     '| "s[i:j] = t"                   | slice of *s* from *i* '
15371*cda5da8dSAndroid Build Coastguard Worker                     'to *j* is  |                       |\n'
15372*cda5da8dSAndroid Build Coastguard Worker                     '|                                | replaced by the '
15373*cda5da8dSAndroid Build Coastguard Worker                     'contents of the  |                       |\n'
15374*cda5da8dSAndroid Build Coastguard Worker                     '|                                | iterable '
15375*cda5da8dSAndroid Build Coastguard Worker                     '*t*                     |                       |\n'
15376*cda5da8dSAndroid Build Coastguard Worker                     '+--------------------------------+----------------------------------+-----------------------+\n'
15377*cda5da8dSAndroid Build Coastguard Worker                     '| "del s[i:j]"                   | same as "s[i:j] = '
15378*cda5da8dSAndroid Build Coastguard Worker                     '[]"            |                       |\n'
15379*cda5da8dSAndroid Build Coastguard Worker                     '+--------------------------------+----------------------------------+-----------------------+\n'
15380*cda5da8dSAndroid Build Coastguard Worker                     '| "s[i:j:k] = t"                 | the elements of '
15381*cda5da8dSAndroid Build Coastguard Worker                     '"s[i:j:k]" are   | (1)                   |\n'
15382*cda5da8dSAndroid Build Coastguard Worker                     '|                                | replaced by those of '
15383*cda5da8dSAndroid Build Coastguard Worker                     '*t*         |                       |\n'
15384*cda5da8dSAndroid Build Coastguard Worker                     '+--------------------------------+----------------------------------+-----------------------+\n'
15385*cda5da8dSAndroid Build Coastguard Worker                     '| "del s[i:j:k]"                 | removes the elements '
15386*cda5da8dSAndroid Build Coastguard Worker                     'of          |                       |\n'
15387*cda5da8dSAndroid Build Coastguard Worker                     '|                                | "s[i:j:k]" from the '
15388*cda5da8dSAndroid Build Coastguard Worker                     'list         |                       |\n'
15389*cda5da8dSAndroid Build Coastguard Worker                     '+--------------------------------+----------------------------------+-----------------------+\n'
15390*cda5da8dSAndroid Build Coastguard Worker                     '| "s.append(x)"                  | appends *x* to the '
15391*cda5da8dSAndroid Build Coastguard Worker                     'end of the    |                       |\n'
15392*cda5da8dSAndroid Build Coastguard Worker                     '|                                | sequence (same '
15393*cda5da8dSAndroid Build Coastguard Worker                     'as                |                       |\n'
15394*cda5da8dSAndroid Build Coastguard Worker                     '|                                | "s[len(s):len(s)] = '
15395*cda5da8dSAndroid Build Coastguard Worker                     '[x]")        |                       |\n'
15396*cda5da8dSAndroid Build Coastguard Worker                     '+--------------------------------+----------------------------------+-----------------------+\n'
15397*cda5da8dSAndroid Build Coastguard Worker                     '| "s.clear()"                    | removes all items '
15398*cda5da8dSAndroid Build Coastguard Worker                     'from *s* (same | (5)                   |\n'
15399*cda5da8dSAndroid Build Coastguard Worker                     '|                                | as "del '
15400*cda5da8dSAndroid Build Coastguard Worker                     's[:]")                   |                       |\n'
15401*cda5da8dSAndroid Build Coastguard Worker                     '+--------------------------------+----------------------------------+-----------------------+\n'
15402*cda5da8dSAndroid Build Coastguard Worker                     '| "s.copy()"                     | creates a shallow '
15403*cda5da8dSAndroid Build Coastguard Worker                     'copy of *s*    | (5)                   |\n'
15404*cda5da8dSAndroid Build Coastguard Worker                     '|                                | (same as '
15405*cda5da8dSAndroid Build Coastguard Worker                     '"s[:]")                 |                       |\n'
15406*cda5da8dSAndroid Build Coastguard Worker                     '+--------------------------------+----------------------------------+-----------------------+\n'
15407*cda5da8dSAndroid Build Coastguard Worker                     '| "s.extend(t)" or "s += t"      | extends *s* with the '
15408*cda5da8dSAndroid Build Coastguard Worker                     'contents of |                       |\n'
15409*cda5da8dSAndroid Build Coastguard Worker                     '|                                | *t* (for the most '
15410*cda5da8dSAndroid Build Coastguard Worker                     'part the same  |                       |\n'
15411*cda5da8dSAndroid Build Coastguard Worker                     '|                                | as "s[len(s):len(s)] '
15412*cda5da8dSAndroid Build Coastguard Worker                     '= t")       |                       |\n'
15413*cda5da8dSAndroid Build Coastguard Worker                     '+--------------------------------+----------------------------------+-----------------------+\n'
15414*cda5da8dSAndroid Build Coastguard Worker                     '| "s *= n"                       | updates *s* with its '
15415*cda5da8dSAndroid Build Coastguard Worker                     'contents    | (6)                   |\n'
15416*cda5da8dSAndroid Build Coastguard Worker                     '|                                | repeated *n* '
15417*cda5da8dSAndroid Build Coastguard Worker                     'times               |                       |\n'
15418*cda5da8dSAndroid Build Coastguard Worker                     '+--------------------------------+----------------------------------+-----------------------+\n'
15419*cda5da8dSAndroid Build Coastguard Worker                     '| "s.insert(i, x)"               | inserts *x* into *s* '
15420*cda5da8dSAndroid Build Coastguard Worker                     'at the      |                       |\n'
15421*cda5da8dSAndroid Build Coastguard Worker                     '|                                | index given by *i* '
15422*cda5da8dSAndroid Build Coastguard Worker                     '(same as      |                       |\n'
15423*cda5da8dSAndroid Build Coastguard Worker                     '|                                | "s[i:i] = '
15424*cda5da8dSAndroid Build Coastguard Worker                     '[x]")                  |                       |\n'
15425*cda5da8dSAndroid Build Coastguard Worker                     '+--------------------------------+----------------------------------+-----------------------+\n'
15426*cda5da8dSAndroid Build Coastguard Worker                     '| "s.pop()" or "s.pop(i)"        | retrieves the item at '
15427*cda5da8dSAndroid Build Coastguard Worker                     '*i* and    | (2)                   |\n'
15428*cda5da8dSAndroid Build Coastguard Worker                     '|                                | also removes it from '
15429*cda5da8dSAndroid Build Coastguard Worker                     '*s*         |                       |\n'
15430*cda5da8dSAndroid Build Coastguard Worker                     '+--------------------------------+----------------------------------+-----------------------+\n'
15431*cda5da8dSAndroid Build Coastguard Worker                     '| "s.remove(x)"                  | remove the first item '
15432*cda5da8dSAndroid Build Coastguard Worker                     'from *s*   | (3)                   |\n'
15433*cda5da8dSAndroid Build Coastguard Worker                     '|                                | where "s[i]" is equal '
15434*cda5da8dSAndroid Build Coastguard Worker                     'to *x*     |                       |\n'
15435*cda5da8dSAndroid Build Coastguard Worker                     '+--------------------------------+----------------------------------+-----------------------+\n'
15436*cda5da8dSAndroid Build Coastguard Worker                     '| "s.reverse()"                  | reverses the items of '
15437*cda5da8dSAndroid Build Coastguard Worker                     '*s* in     | (4)                   |\n'
15438*cda5da8dSAndroid Build Coastguard Worker                     '|                                | '
15439*cda5da8dSAndroid Build Coastguard Worker                     'place                            |                       '
15440*cda5da8dSAndroid Build Coastguard Worker                     '|\n'
15441*cda5da8dSAndroid Build Coastguard Worker                     '+--------------------------------+----------------------------------+-----------------------+\n'
15442*cda5da8dSAndroid Build Coastguard Worker                     '\n'
15443*cda5da8dSAndroid Build Coastguard Worker                     'Notes:\n'
15444*cda5da8dSAndroid Build Coastguard Worker                     '\n'
15445*cda5da8dSAndroid Build Coastguard Worker                     '1. *t* must have the same length as the slice it is '
15446*cda5da8dSAndroid Build Coastguard Worker                     'replacing.\n'
15447*cda5da8dSAndroid Build Coastguard Worker                     '\n'
15448*cda5da8dSAndroid Build Coastguard Worker                     '2. The optional argument *i* defaults to "-1", so that '
15449*cda5da8dSAndroid Build Coastguard Worker                     'by default the\n'
15450*cda5da8dSAndroid Build Coastguard Worker                     '   last item is removed and returned.\n'
15451*cda5da8dSAndroid Build Coastguard Worker                     '\n'
15452*cda5da8dSAndroid Build Coastguard Worker                     '3. "remove()" raises "ValueError" when *x* is not found '
15453*cda5da8dSAndroid Build Coastguard Worker                     'in *s*.\n'
15454*cda5da8dSAndroid Build Coastguard Worker                     '\n'
15455*cda5da8dSAndroid Build Coastguard Worker                     '4. The "reverse()" method modifies the sequence in place '
15456*cda5da8dSAndroid Build Coastguard Worker                     'for economy\n'
15457*cda5da8dSAndroid Build Coastguard Worker                     '   of space when reversing a large sequence.  To remind '
15458*cda5da8dSAndroid Build Coastguard Worker                     'users that it\n'
15459*cda5da8dSAndroid Build Coastguard Worker                     '   operates by side effect, it does not return the '
15460*cda5da8dSAndroid Build Coastguard Worker                     'reversed sequence.\n'
15461*cda5da8dSAndroid Build Coastguard Worker                     '\n'
15462*cda5da8dSAndroid Build Coastguard Worker                     '5. "clear()" and "copy()" are included for consistency '
15463*cda5da8dSAndroid Build Coastguard Worker                     'with the\n'
15464*cda5da8dSAndroid Build Coastguard Worker                     '   interfaces of mutable containers that don’t support '
15465*cda5da8dSAndroid Build Coastguard Worker                     'slicing\n'
15466*cda5da8dSAndroid Build Coastguard Worker                     '   operations (such as "dict" and "set"). "copy()" is '
15467*cda5da8dSAndroid Build Coastguard Worker                     'not part of the\n'
15468*cda5da8dSAndroid Build Coastguard Worker                     '   "collections.abc.MutableSequence" ABC, but most '
15469*cda5da8dSAndroid Build Coastguard Worker                     'concrete mutable\n'
15470*cda5da8dSAndroid Build Coastguard Worker                     '   sequence classes provide it.\n'
15471*cda5da8dSAndroid Build Coastguard Worker                     '\n'
15472*cda5da8dSAndroid Build Coastguard Worker                     '   New in version 3.3: "clear()" and "copy()" methods.\n'
15473*cda5da8dSAndroid Build Coastguard Worker                     '\n'
15474*cda5da8dSAndroid Build Coastguard Worker                     '6. The value *n* is an integer, or an object '
15475*cda5da8dSAndroid Build Coastguard Worker                     'implementing\n'
15476*cda5da8dSAndroid Build Coastguard Worker                     '   "__index__()".  Zero and negative values of *n* clear '
15477*cda5da8dSAndroid Build Coastguard Worker                     'the sequence.\n'
15478*cda5da8dSAndroid Build Coastguard Worker                     '   Items in the sequence are not copied; they are '
15479*cda5da8dSAndroid Build Coastguard Worker                     'referenced multiple\n'
15480*cda5da8dSAndroid Build Coastguard Worker                     '   times, as explained for "s * n" under Common Sequence '
15481*cda5da8dSAndroid Build Coastguard Worker                     'Operations.\n',
15482*cda5da8dSAndroid Build Coastguard Worker 'unary': 'Unary arithmetic and bitwise operations\n'
15483*cda5da8dSAndroid Build Coastguard Worker          '***************************************\n'
15484*cda5da8dSAndroid Build Coastguard Worker          '\n'
15485*cda5da8dSAndroid Build Coastguard Worker          'All unary arithmetic and bitwise operations have the same '
15486*cda5da8dSAndroid Build Coastguard Worker          'priority:\n'
15487*cda5da8dSAndroid Build Coastguard Worker          '\n'
15488*cda5da8dSAndroid Build Coastguard Worker          '   u_expr ::= power | "-" u_expr | "+" u_expr | "~" u_expr\n'
15489*cda5da8dSAndroid Build Coastguard Worker          '\n'
15490*cda5da8dSAndroid Build Coastguard Worker          'The unary "-" (minus) operator yields the negation of its numeric\n'
15491*cda5da8dSAndroid Build Coastguard Worker          'argument; the operation can be overridden with the "__neg__()" '
15492*cda5da8dSAndroid Build Coastguard Worker          'special\n'
15493*cda5da8dSAndroid Build Coastguard Worker          'method.\n'
15494*cda5da8dSAndroid Build Coastguard Worker          '\n'
15495*cda5da8dSAndroid Build Coastguard Worker          'The unary "+" (plus) operator yields its numeric argument '
15496*cda5da8dSAndroid Build Coastguard Worker          'unchanged;\n'
15497*cda5da8dSAndroid Build Coastguard Worker          'the operation can be overridden with the "__pos__()" special '
15498*cda5da8dSAndroid Build Coastguard Worker          'method.\n'
15499*cda5da8dSAndroid Build Coastguard Worker          '\n'
15500*cda5da8dSAndroid Build Coastguard Worker          'The unary "~" (invert) operator yields the bitwise inversion of '
15501*cda5da8dSAndroid Build Coastguard Worker          'its\n'
15502*cda5da8dSAndroid Build Coastguard Worker          'integer argument.  The bitwise inversion of "x" is defined as\n'
15503*cda5da8dSAndroid Build Coastguard Worker          '"-(x+1)".  It only applies to integral numbers or to custom '
15504*cda5da8dSAndroid Build Coastguard Worker          'objects\n'
15505*cda5da8dSAndroid Build Coastguard Worker          'that override the "__invert__()" special method.\n'
15506*cda5da8dSAndroid Build Coastguard Worker          '\n'
15507*cda5da8dSAndroid Build Coastguard Worker          'In all three cases, if the argument does not have the proper type, '
15508*cda5da8dSAndroid Build Coastguard Worker          'a\n'
15509*cda5da8dSAndroid Build Coastguard Worker          '"TypeError" exception is raised.\n',
15510*cda5da8dSAndroid Build Coastguard Worker 'while': 'The "while" statement\n'
15511*cda5da8dSAndroid Build Coastguard Worker          '*********************\n'
15512*cda5da8dSAndroid Build Coastguard Worker          '\n'
15513*cda5da8dSAndroid Build Coastguard Worker          'The "while" statement is used for repeated execution as long as an\n'
15514*cda5da8dSAndroid Build Coastguard Worker          'expression is true:\n'
15515*cda5da8dSAndroid Build Coastguard Worker          '\n'
15516*cda5da8dSAndroid Build Coastguard Worker          '   while_stmt ::= "while" assignment_expression ":" suite\n'
15517*cda5da8dSAndroid Build Coastguard Worker          '                  ["else" ":" suite]\n'
15518*cda5da8dSAndroid Build Coastguard Worker          '\n'
15519*cda5da8dSAndroid Build Coastguard Worker          'This repeatedly tests the expression and, if it is true, executes '
15520*cda5da8dSAndroid Build Coastguard Worker          'the\n'
15521*cda5da8dSAndroid Build Coastguard Worker          'first suite; if the expression is false (which may be the first '
15522*cda5da8dSAndroid Build Coastguard Worker          'time\n'
15523*cda5da8dSAndroid Build Coastguard Worker          'it is tested) the suite of the "else" clause, if present, is '
15524*cda5da8dSAndroid Build Coastguard Worker          'executed\n'
15525*cda5da8dSAndroid Build Coastguard Worker          'and the loop terminates.\n'
15526*cda5da8dSAndroid Build Coastguard Worker          '\n'
15527*cda5da8dSAndroid Build Coastguard Worker          'A "break" statement executed in the first suite terminates the '
15528*cda5da8dSAndroid Build Coastguard Worker          'loop\n'
15529*cda5da8dSAndroid Build Coastguard Worker          'without executing the "else" clause’s suite.  A "continue" '
15530*cda5da8dSAndroid Build Coastguard Worker          'statement\n'
15531*cda5da8dSAndroid Build Coastguard Worker          'executed in the first suite skips the rest of the suite and goes '
15532*cda5da8dSAndroid Build Coastguard Worker          'back\n'
15533*cda5da8dSAndroid Build Coastguard Worker          'to testing the expression.\n',
15534*cda5da8dSAndroid Build Coastguard Worker 'with': 'The "with" statement\n'
15535*cda5da8dSAndroid Build Coastguard Worker         '********************\n'
15536*cda5da8dSAndroid Build Coastguard Worker         '\n'
15537*cda5da8dSAndroid Build Coastguard Worker         'The "with" statement is used to wrap the execution of a block with\n'
15538*cda5da8dSAndroid Build Coastguard Worker         'methods defined by a context manager (see section With Statement\n'
15539*cda5da8dSAndroid Build Coastguard Worker         'Context Managers). This allows common "try"…"except"…"finally" '
15540*cda5da8dSAndroid Build Coastguard Worker         'usage\n'
15541*cda5da8dSAndroid Build Coastguard Worker         'patterns to be encapsulated for convenient reuse.\n'
15542*cda5da8dSAndroid Build Coastguard Worker         '\n'
15543*cda5da8dSAndroid Build Coastguard Worker         '   with_stmt          ::= "with" ( "(" with_stmt_contents ","? ")" | '
15544*cda5da8dSAndroid Build Coastguard Worker         'with_stmt_contents ) ":" suite\n'
15545*cda5da8dSAndroid Build Coastguard Worker         '   with_stmt_contents ::= with_item ("," with_item)*\n'
15546*cda5da8dSAndroid Build Coastguard Worker         '   with_item          ::= expression ["as" target]\n'
15547*cda5da8dSAndroid Build Coastguard Worker         '\n'
15548*cda5da8dSAndroid Build Coastguard Worker         'The execution of the "with" statement with one “item” proceeds as\n'
15549*cda5da8dSAndroid Build Coastguard Worker         'follows:\n'
15550*cda5da8dSAndroid Build Coastguard Worker         '\n'
15551*cda5da8dSAndroid Build Coastguard Worker         '1. The context expression (the expression given in the "with_item") '
15552*cda5da8dSAndroid Build Coastguard Worker         'is\n'
15553*cda5da8dSAndroid Build Coastguard Worker         '   evaluated to obtain a context manager.\n'
15554*cda5da8dSAndroid Build Coastguard Worker         '\n'
15555*cda5da8dSAndroid Build Coastguard Worker         '2. The context manager’s "__enter__()" is loaded for later use.\n'
15556*cda5da8dSAndroid Build Coastguard Worker         '\n'
15557*cda5da8dSAndroid Build Coastguard Worker         '3. The context manager’s "__exit__()" is loaded for later use.\n'
15558*cda5da8dSAndroid Build Coastguard Worker         '\n'
15559*cda5da8dSAndroid Build Coastguard Worker         '4. The context manager’s "__enter__()" method is invoked.\n'
15560*cda5da8dSAndroid Build Coastguard Worker         '\n'
15561*cda5da8dSAndroid Build Coastguard Worker         '5. If a target was included in the "with" statement, the return '
15562*cda5da8dSAndroid Build Coastguard Worker         'value\n'
15563*cda5da8dSAndroid Build Coastguard Worker         '   from "__enter__()" is assigned to it.\n'
15564*cda5da8dSAndroid Build Coastguard Worker         '\n'
15565*cda5da8dSAndroid Build Coastguard Worker         '   Note:\n'
15566*cda5da8dSAndroid Build Coastguard Worker         '\n'
15567*cda5da8dSAndroid Build Coastguard Worker         '     The "with" statement guarantees that if the "__enter__()" '
15568*cda5da8dSAndroid Build Coastguard Worker         'method\n'
15569*cda5da8dSAndroid Build Coastguard Worker         '     returns without an error, then "__exit__()" will always be\n'
15570*cda5da8dSAndroid Build Coastguard Worker         '     called. Thus, if an error occurs during the assignment to the\n'
15571*cda5da8dSAndroid Build Coastguard Worker         '     target list, it will be treated the same as an error occurring\n'
15572*cda5da8dSAndroid Build Coastguard Worker         '     within the suite would be. See step 7 below.\n'
15573*cda5da8dSAndroid Build Coastguard Worker         '\n'
15574*cda5da8dSAndroid Build Coastguard Worker         '6. The suite is executed.\n'
15575*cda5da8dSAndroid Build Coastguard Worker         '\n'
15576*cda5da8dSAndroid Build Coastguard Worker         '7. The context manager’s "__exit__()" method is invoked.  If an\n'
15577*cda5da8dSAndroid Build Coastguard Worker         '   exception caused the suite to be exited, its type, value, and\n'
15578*cda5da8dSAndroid Build Coastguard Worker         '   traceback are passed as arguments to "__exit__()". Otherwise, '
15579*cda5da8dSAndroid Build Coastguard Worker         'three\n'
15580*cda5da8dSAndroid Build Coastguard Worker         '   "None" arguments are supplied.\n'
15581*cda5da8dSAndroid Build Coastguard Worker         '\n'
15582*cda5da8dSAndroid Build Coastguard Worker         '   If the suite was exited due to an exception, and the return '
15583*cda5da8dSAndroid Build Coastguard Worker         'value\n'
15584*cda5da8dSAndroid Build Coastguard Worker         '   from the "__exit__()" method was false, the exception is '
15585*cda5da8dSAndroid Build Coastguard Worker         'reraised.\n'
15586*cda5da8dSAndroid Build Coastguard Worker         '   If the return value was true, the exception is suppressed, and\n'
15587*cda5da8dSAndroid Build Coastguard Worker         '   execution continues with the statement following the "with"\n'
15588*cda5da8dSAndroid Build Coastguard Worker         '   statement.\n'
15589*cda5da8dSAndroid Build Coastguard Worker         '\n'
15590*cda5da8dSAndroid Build Coastguard Worker         '   If the suite was exited for any reason other than an exception, '
15591*cda5da8dSAndroid Build Coastguard Worker         'the\n'
15592*cda5da8dSAndroid Build Coastguard Worker         '   return value from "__exit__()" is ignored, and execution '
15593*cda5da8dSAndroid Build Coastguard Worker         'proceeds\n'
15594*cda5da8dSAndroid Build Coastguard Worker         '   at the normal location for the kind of exit that was taken.\n'
15595*cda5da8dSAndroid Build Coastguard Worker         '\n'
15596*cda5da8dSAndroid Build Coastguard Worker         'The following code:\n'
15597*cda5da8dSAndroid Build Coastguard Worker         '\n'
15598*cda5da8dSAndroid Build Coastguard Worker         '   with EXPRESSION as TARGET:\n'
15599*cda5da8dSAndroid Build Coastguard Worker         '       SUITE\n'
15600*cda5da8dSAndroid Build Coastguard Worker         '\n'
15601*cda5da8dSAndroid Build Coastguard Worker         'is semantically equivalent to:\n'
15602*cda5da8dSAndroid Build Coastguard Worker         '\n'
15603*cda5da8dSAndroid Build Coastguard Worker         '   manager = (EXPRESSION)\n'
15604*cda5da8dSAndroid Build Coastguard Worker         '   enter = type(manager).__enter__\n'
15605*cda5da8dSAndroid Build Coastguard Worker         '   exit = type(manager).__exit__\n'
15606*cda5da8dSAndroid Build Coastguard Worker         '   value = enter(manager)\n'
15607*cda5da8dSAndroid Build Coastguard Worker         '   hit_except = False\n'
15608*cda5da8dSAndroid Build Coastguard Worker         '\n'
15609*cda5da8dSAndroid Build Coastguard Worker         '   try:\n'
15610*cda5da8dSAndroid Build Coastguard Worker         '       TARGET = value\n'
15611*cda5da8dSAndroid Build Coastguard Worker         '       SUITE\n'
15612*cda5da8dSAndroid Build Coastguard Worker         '   except:\n'
15613*cda5da8dSAndroid Build Coastguard Worker         '       hit_except = True\n'
15614*cda5da8dSAndroid Build Coastguard Worker         '       if not exit(manager, *sys.exc_info()):\n'
15615*cda5da8dSAndroid Build Coastguard Worker         '           raise\n'
15616*cda5da8dSAndroid Build Coastguard Worker         '   finally:\n'
15617*cda5da8dSAndroid Build Coastguard Worker         '       if not hit_except:\n'
15618*cda5da8dSAndroid Build Coastguard Worker         '           exit(manager, None, None, None)\n'
15619*cda5da8dSAndroid Build Coastguard Worker         '\n'
15620*cda5da8dSAndroid Build Coastguard Worker         'With more than one item, the context managers are processed as if\n'
15621*cda5da8dSAndroid Build Coastguard Worker         'multiple "with" statements were nested:\n'
15622*cda5da8dSAndroid Build Coastguard Worker         '\n'
15623*cda5da8dSAndroid Build Coastguard Worker         '   with A() as a, B() as b:\n'
15624*cda5da8dSAndroid Build Coastguard Worker         '       SUITE\n'
15625*cda5da8dSAndroid Build Coastguard Worker         '\n'
15626*cda5da8dSAndroid Build Coastguard Worker         'is semantically equivalent to:\n'
15627*cda5da8dSAndroid Build Coastguard Worker         '\n'
15628*cda5da8dSAndroid Build Coastguard Worker         '   with A() as a:\n'
15629*cda5da8dSAndroid Build Coastguard Worker         '       with B() as b:\n'
15630*cda5da8dSAndroid Build Coastguard Worker         '           SUITE\n'
15631*cda5da8dSAndroid Build Coastguard Worker         '\n'
15632*cda5da8dSAndroid Build Coastguard Worker         'You can also write multi-item context managers in multiple lines if\n'
15633*cda5da8dSAndroid Build Coastguard Worker         'the items are surrounded by parentheses. For example:\n'
15634*cda5da8dSAndroid Build Coastguard Worker         '\n'
15635*cda5da8dSAndroid Build Coastguard Worker         '   with (\n'
15636*cda5da8dSAndroid Build Coastguard Worker         '       A() as a,\n'
15637*cda5da8dSAndroid Build Coastguard Worker         '       B() as b,\n'
15638*cda5da8dSAndroid Build Coastguard Worker         '   ):\n'
15639*cda5da8dSAndroid Build Coastguard Worker         '       SUITE\n'
15640*cda5da8dSAndroid Build Coastguard Worker         '\n'
15641*cda5da8dSAndroid Build Coastguard Worker         'Changed in version 3.1: Support for multiple context expressions.\n'
15642*cda5da8dSAndroid Build Coastguard Worker         '\n'
15643*cda5da8dSAndroid Build Coastguard Worker         'Changed in version 3.10: Support for using grouping parentheses to\n'
15644*cda5da8dSAndroid Build Coastguard Worker         'break the statement in multiple lines.\n'
15645*cda5da8dSAndroid Build Coastguard Worker         '\n'
15646*cda5da8dSAndroid Build Coastguard Worker         'See also:\n'
15647*cda5da8dSAndroid Build Coastguard Worker         '\n'
15648*cda5da8dSAndroid Build Coastguard Worker         '  **PEP 343** - The “with” statement\n'
15649*cda5da8dSAndroid Build Coastguard Worker         '     The specification, background, and examples for the Python '
15650*cda5da8dSAndroid Build Coastguard Worker         '"with"\n'
15651*cda5da8dSAndroid Build Coastguard Worker         '     statement.\n',
15652*cda5da8dSAndroid Build Coastguard Worker 'yield': 'The "yield" statement\n'
15653*cda5da8dSAndroid Build Coastguard Worker          '*********************\n'
15654*cda5da8dSAndroid Build Coastguard Worker          '\n'
15655*cda5da8dSAndroid Build Coastguard Worker          '   yield_stmt ::= yield_expression\n'
15656*cda5da8dSAndroid Build Coastguard Worker          '\n'
15657*cda5da8dSAndroid Build Coastguard Worker          'A "yield" statement is semantically equivalent to a yield '
15658*cda5da8dSAndroid Build Coastguard Worker          'expression.\n'
15659*cda5da8dSAndroid Build Coastguard Worker          'The yield statement can be used to omit the parentheses that would\n'
15660*cda5da8dSAndroid Build Coastguard Worker          'otherwise be required in the equivalent yield expression '
15661*cda5da8dSAndroid Build Coastguard Worker          'statement.\n'
15662*cda5da8dSAndroid Build Coastguard Worker          'For example, the yield statements\n'
15663*cda5da8dSAndroid Build Coastguard Worker          '\n'
15664*cda5da8dSAndroid Build Coastguard Worker          '   yield <expr>\n'
15665*cda5da8dSAndroid Build Coastguard Worker          '   yield from <expr>\n'
15666*cda5da8dSAndroid Build Coastguard Worker          '\n'
15667*cda5da8dSAndroid Build Coastguard Worker          'are equivalent to the yield expression statements\n'
15668*cda5da8dSAndroid Build Coastguard Worker          '\n'
15669*cda5da8dSAndroid Build Coastguard Worker          '   (yield <expr>)\n'
15670*cda5da8dSAndroid Build Coastguard Worker          '   (yield from <expr>)\n'
15671*cda5da8dSAndroid Build Coastguard Worker          '\n'
15672*cda5da8dSAndroid Build Coastguard Worker          'Yield expressions and statements are only used when defining a\n'
15673*cda5da8dSAndroid Build Coastguard Worker          '*generator* function, and are only used in the body of the '
15674*cda5da8dSAndroid Build Coastguard Worker          'generator\n'
15675*cda5da8dSAndroid Build Coastguard Worker          'function.  Using yield in a function definition is sufficient to '
15676*cda5da8dSAndroid Build Coastguard Worker          'cause\n'
15677*cda5da8dSAndroid Build Coastguard Worker          'that definition to create a generator function instead of a normal\n'
15678*cda5da8dSAndroid Build Coastguard Worker          'function.\n'
15679*cda5da8dSAndroid Build Coastguard Worker          '\n'
15680*cda5da8dSAndroid Build Coastguard Worker          'For full details of "yield" semantics, refer to the Yield '
15681*cda5da8dSAndroid Build Coastguard Worker          'expressions\n'
15682*cda5da8dSAndroid Build Coastguard Worker          'section.\n'}
15683