All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
14 True and False and None
15 (Name1 and Name2) or Name3
16 Name1 and Name2 or Name3
17 Name1 or (Name2 and Name3)
18 Name1 or Name2 and Name3
19 (Name1 and Name2) or (Name3 and Name4)
20 Name1 and Name2 or Name3 and Name4
21 Name1 or (Name2 and Name3) or Name4
22 Name1 or Name2 and Name3 or Name4
26 1 + v2 - v3 * 4 ^ 5 ** v6 / 7 // 8
27 ((1 + v2) - (v3 * 4)) ^ (((5 ** v6) / 7) // 8)
32 ~int and not v1 ^ 123 + v2 | True
33 (~int) and (not ((v1 ^ (123 + v2)) | True))
34 +really ** -confusing ** ~operator ** -precedence
35 flags & ~ select.EPOLLIN and waiters.write_task is not None
38 lambda a, b, c=True: a
39 lambda a, b, c=True, *, d=(1 << v2), e='str': a
40 lambda a, b, c=True, *vararg, d=(v1 << 2), e='str', **kwargs: a + b
41 manylambdas = lambda x=lambda y=lambda z=1: z: y(): x()
42 foo = (lambda port_id, ignore_missing: {"port1": port1_resource, "port2": port2_resource}[port_id])
44 str or None if True else str or bytes or None
45 (str or None) if True else (str or bytes or None)
46 str or None if (1 if True else 2) else str or bytes or None
47 (str or None) if (1 if True else 2) else (str or bytes or None)
48 ((super_long_variable_name or None) if (1 if super_long_test_name else 2) else (str or bytes or None))
49 {'2.7': dead, '3.7': (long_live or die_hard)}
50 {'2.7': dead, '3.7': (long_live or die_hard), **{'3.6': verygood}}
52 {'2.7', '3.6', '3.7', '3.8', '3.9', ('4.0' if gilectomy else '3.10')}
53 ({'a': 'b'}, (True or False), (+value), 'string', b'bytes') or None
59 [1, 2, 3, 4, 5, 6, 7, 8, 9, (10 or A), (11 or B), (12 or C)]
65 [this_is_a_very_long_variable_which_will_force_a_delimiter_split, element, another, *more]
66 {i for i in (1, 2, 3)}
67 {(i ** 2) for i in (1, 2, 3)}
68 {(i ** 2) for i, _ in ((1, 'a'), (2, 'b'), (3, 'c'))}
69 {((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)}
70 [i for i in (1, 2, 3)]
71 [(i ** 2) for i in (1, 2, 3)]
72 [(i ** 2) for i, _ in ((1, 'a'), (2, 'b'), (3, 'c'))]
73 [((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)]
74 {i: 0 for i in (1, 2, 3)}
75 {i: j for i, j in ((1, 'a'), (2, 'b'), (3, 'c'))}
76 {a: b * 2 for a, b in dictionary.items()}
77 {a: b * -2 for a, b in dictionary.items()}
78 {k: v for k, v in this_is_a_very_long_variable_which_will_cause_a_trailing_comma_which_breaks_the_comprehension}
79 Python3 > Python2 > COBOL
84 call(arg, kwarg='hey')
85 call(arg, another, kwarg='hey', **kwargs)
86 call(this_is_a_very_long_variable_which_will_force_a_delimiter_split, arg, another, kwarg='hey', **kwargs) # note: no trailing comma pre-3.6
89 call(**self.screen_kwargs)
90 call(b, **self.screen_kwargs)
100 str, int, float, dict[str, int]
102 tuple[str, int, float, dict[str, int],]
103 very_long_variable_name_filters: t.List[
104 t.Tuple[str, t.Union[str, t.List[t.Optional[str]]]],
106 xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore
107 sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
109 xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore
110 sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
112 xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[
114 ] = classmethod(sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)) # type: ignore
133 numpy[:, (0, 1, 2, 5)]
141 (str or None) if (sys.version_info[0] > (3,)) else (str or bytes or None)
142 {'2.7': dead, '3.7': long_live or die_hard}
143 {'2.7', '3.6', '3.7', '3.8', '3.9', '4.0' if gilectomy else '3.10'}
144 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10 or A, 11 or B, 12 or C]
148 (i for i in (1, 2, 3))
149 ((i ** 2) for i in (1, 2, 3))
150 ((i ** 2) for i, _ in ((1, 'a'), (2, 'b'), (3, 'c')))
151 (((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3))
153 {"id": "1","type": "type","started_at": now(),"ended_at": now() + timedelta(days=10),"priority": 1,"import_session_id": 1,**kwargs}
161 what_is_up_with_those_new_coord_names = (coord_names + set(vars_to_create)) + set(vars_to_remove)
162 what_is_up_with_those_new_coord_names = (coord_names | set(vars_to_create)) - set(vars_to_remove)
163 result = session.query(models.Customer.id).filter(models.Customer.account_id == account_id, models.Customer.email == email_address).order_by(models.Customer.id.asc()).all()
164 result = session.query(models.Customer.id).filter(models.Customer.account_id == account_id, models.Customer.email == email_address).order_by(models.Customer.id.asc(),).all()
166 authors.łukasz.say_thanks()
168 A: 0.25 * (10.0 / 12),
169 B: 0.1 * (10.0 / 12),
170 C: 0.1 * (10.0 / 12),
171 D: 0.1 * (10.0 / 12),
175 yield from outside_of_generator
181 await some.complicated[0].call(with_args=(True or (1 is not 1)))
183 print(**{1: 3} if False else {x: x for x in range(3)})
185 assert(not Test),("Short message")
186 assert this is ComplexTest and not requirements.fit_in_a_single_line(force=False), "Short message"
187 assert(((parens is TooMany)))
188 for x, in (1,), (2,), (3,): ...
190 for z in (i for i in (1, 2, 3)): ...
191 for i in (call()): ...
192 for j in (1 + (2 + 3)): ...
193 while(this and that): ...
194 for addr_family, addr_type, addr_proto, addr_canonname, addr_sockaddr in socket.getaddrinfo('google.com', 'http'):
196 a = aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp in qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
197 a = aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp not in qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
198 a = aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp is qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
199 a = aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp is not qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
201 threading.current_thread() != threading.main_thread() and
202 threading.current_thread() != threading.main_thread() or
203 signal.getsignal(signal.SIGINT) != signal.default_int_handler
207 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
208 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
212 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &
213 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
217 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +
218 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
222 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -
223 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
227 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa *
228 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
232 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa /
233 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
237 ~ aaaa.a + aaaa.b - aaaa.c * aaaa.d / aaaa.e | aaaa.f & aaaa.g % aaaa.h ^ aaaa.i << aaaa.k >> aaaa.l ** aaaa.m // aaaa.n
241 ~ aaaaaaaa.a + aaaaaaaa.b - aaaaaaaa.c @ aaaaaaaa.d / aaaaaaaa.e | aaaaaaaa.f & aaaaaaaa.g % aaaaaaaa.h ^ aaaaaaaa.i << aaaaaaaa.k >> aaaaaaaa.l ** aaaaaaaa.m // aaaaaaaa.n
245 ~ aaaaaaaaaaaaaaaa.a + aaaaaaaaaaaaaaaa.b - aaaaaaaaaaaaaaaa.c * aaaaaaaaaaaaaaaa.d @ aaaaaaaaaaaaaaaa.e | aaaaaaaaaaaaaaaa.f & aaaaaaaaaaaaaaaa.g % aaaaaaaaaaaaaaaa.h ^ aaaaaaaaaaaaaaaa.i << aaaaaaaaaaaaaaaa.k >> aaaaaaaaaaaaaaaa.l ** aaaaaaaaaaaaaaaa.m // aaaaaaaaaaaaaaaa.n
248 aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa - aaaaaaaaaaaaaaaa * (aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa) / (aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa)
249 aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa
250 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa << aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
252 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ^bbbb.a & aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa^aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
254 # standalone comment at ENDMARKER
271 True or False or None
273 True and False and None
274 (Name1 and Name2) or Name3
275 Name1 and Name2 or Name3
276 Name1 or (Name2 and Name3)
277 Name1 or Name2 and Name3
278 (Name1 and Name2) or (Name3 and Name4)
279 Name1 and Name2 or Name3 and Name4
280 Name1 or (Name2 and Name3) or Name4
281 Name1 or Name2 and Name3 or Name4
285 1 + v2 - v3 * 4 ^ 5 ** v6 / 7 // 8
286 ((1 + v2) - (v3 * 4)) ^ (((5 ** v6) / 7) // 8)
291 ~int and not v1 ^ 123 + v2 | True
292 (~int) and (not ((v1 ^ (123 + v2)) | True))
293 +(really ** -(confusing ** ~(operator ** -precedence)))
294 flags & ~select.EPOLLIN and waiters.write_task is not None
297 lambda a, b, c=True: a
298 lambda a, b, c=True, *, d=(1 << v2), e="str": a
299 lambda a, b, c=True, *vararg, d=(v1 << 2), e="str", **kwargs: a + b
300 manylambdas = lambda x=lambda y=lambda z=1: z: y(): x()
301 foo = lambda port_id, ignore_missing: {
302 "port1": port1_resource,
303 "port2": port2_resource,
306 str or None if True else str or bytes or None
307 (str or None) if True else (str or bytes or None)
308 str or None if (1 if True else 2) else str or bytes or None
309 (str or None) if (1 if True else 2) else (str or bytes or None)
311 (super_long_variable_name or None)
312 if (1 if super_long_test_name else 2)
313 else (str or bytes or None)
315 {"2.7": dead, "3.7": (long_live or die_hard)}
316 {"2.7": dead, "3.7": (long_live or die_hard), **{"3.6": verygood}}
318 {"2.7", "3.6", "3.7", "3.8", "3.9", ("4.0" if gilectomy else "3.10")}
319 ({"a": "b"}, (True or False), (+value), "string", b"bytes") or None
325 [1, 2, 3, 4, 5, 6, 7, 8, 9, (10 or A), (11 or B), (12 or C)]
344 this_is_a_very_long_variable_which_will_force_a_delimiter_split,
349 {i for i in (1, 2, 3)}
350 {(i ** 2) for i in (1, 2, 3)}
351 {(i ** 2) for i, _ in ((1, "a"), (2, "b"), (3, "c"))}
352 {((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)}
353 [i for i in (1, 2, 3)]
354 [(i ** 2) for i in (1, 2, 3)]
355 [(i ** 2) for i, _ in ((1, "a"), (2, "b"), (3, "c"))]
356 [((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3)]
357 {i: 0 for i in (1, 2, 3)}
358 {i: j for i, j in ((1, "a"), (2, "b"), (3, "c"))}
359 {a: b * 2 for a, b in dictionary.items()}
360 {a: b * -2 for a, b in dictionary.items()}
363 for k, v in this_is_a_very_long_variable_which_will_cause_a_trailing_comma_which_breaks_the_comprehension
365 Python3 > Python2 > COBOL
370 call(arg, kwarg="hey")
371 call(arg, another, kwarg="hey", **kwargs)
373 this_is_a_very_long_variable_which_will_force_a_delimiter_split,
378 ) # note: no trailing comma pre-3.6
380 call(a, *gidgets[:2])
381 call(**self.screen_kwargs)
382 call(b, **self.screen_kwargs)
391 tuple[str, int, float, dict[str, int]]
398 very_long_variable_name_filters: t.List[
399 t.Tuple[str, t.Union[str, t.List[t.Optional[str]]]],
401 xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore
402 sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
404 xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore
405 sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
407 xxxx_xxx_xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod(
408 sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
428 numpy[:, (0, 1, 2, 5)]
436 (str or None) if (sys.version_info[0] > (3,)) else (str or bytes or None)
437 {"2.7": dead, "3.7": long_live or die_hard}
438 {"2.7", "3.6", "3.7", "3.8", "3.9", "4.0" if gilectomy else "3.10"}
439 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10 or A, 11 or B, 12 or C]
443 (i for i in (1, 2, 3))
444 ((i ** 2) for i in (1, 2, 3))
445 ((i ** 2) for i, _ in ((1, "a"), (2, "b"), (3, "c")))
446 (((i ** 2) + j) for i in (1, 2, 3) for j in (1, 2, 3))
452 "ended_at": now() + timedelta(days=10),
454 "import_session_id": 1,
464 what_is_up_with_those_new_coord_names = (coord_names + set(vars_to_create)) + set(
467 what_is_up_with_those_new_coord_names = (coord_names | set(vars_to_create)) - set(
471 session.query(models.Customer.id)
473 models.Customer.account_id == account_id, models.Customer.email == email_address
475 .order_by(models.Customer.id.asc())
479 session.query(models.Customer.id)
481 models.Customer.account_id == account_id, models.Customer.email == email_address
484 models.Customer.id.asc(),
489 authors.łukasz.say_thanks()
491 A: 0.25 * (10.0 / 12),
492 B: 0.1 * (10.0 / 12),
493 C: 0.1 * (10.0 / 12),
494 D: 0.1 * (10.0 / 12),
499 yield from outside_of_generator
506 await some.complicated[0].call(with_args=(True or (1 is not 1)))
510 print(**{1: 3} if False else {x: x for x in range(3)})
512 assert not Test, "Short message"
513 assert this is ComplexTest and not requirements.fit_in_a_single_line(
516 assert parens is TooMany
517 for (x,) in (1,), (2,), (3,):
521 for z in (i for i in (1, 2, 3)):
525 for j in 1 + (2 + 3):
535 ) in socket.getaddrinfo("google.com", "http"):
538 aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp
539 in qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
542 aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp
543 not in qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
546 aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp
547 is qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
550 aaaa.bbbb.cccc.dddd.eeee.ffff.gggg.hhhh.iiii.jjjj.kkkk.llll.mmmm.nnnn.oooo.pppp
551 is not qqqq.rrrr.ssss.tttt.uuuu.vvvv.xxxx.yyyy.zzzz
554 threading.current_thread() != threading.main_thread()
555 and threading.current_thread() != threading.main_thread()
556 or signal.getsignal(signal.SIGINT) != signal.default_int_handler
560 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
561 | aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
565 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
566 & aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
570 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
571 + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
575 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
576 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
580 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
581 * aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
585 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
586 / aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
590 ~aaaa.a + aaaa.b - aaaa.c * aaaa.d / aaaa.e
591 | aaaa.f & aaaa.g % aaaa.h ^ aaaa.i << aaaa.k >> aaaa.l ** aaaa.m // aaaa.n
595 ~aaaaaaaa.a + aaaaaaaa.b - aaaaaaaa.c @ aaaaaaaa.d / aaaaaaaa.e
596 | aaaaaaaa.f & aaaaaaaa.g % aaaaaaaa.h
597 ^ aaaaaaaa.i << aaaaaaaa.k >> aaaaaaaa.l ** aaaaaaaa.m // aaaaaaaa.n
603 - aaaaaaaaaaaaaaaa.c * aaaaaaaaaaaaaaaa.d @ aaaaaaaaaaaaaaaa.e
604 | aaaaaaaaaaaaaaaa.f & aaaaaaaaaaaaaaaa.g % aaaaaaaaaaaaaaaa.h
606 << aaaaaaaaaaaaaaaa.k
607 >> aaaaaaaaaaaaaaaa.l ** aaaaaaaaaaaaaaaa.m // aaaaaaaaaaaaaaaa.n
614 * (aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa)
615 / (aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa)
617 aaaaaaaaaaaaaaaa + aaaaaaaaaaaaaaaa
619 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
620 >> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
621 << aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
625 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
626 ^ bbbb.a & aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
627 ^ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
630 # standalone comment at ENDMARKER