cimport cython
def dictcomp():
"""
>>> sorted(dictcomp().items())
[(2, 0), (4, 4), (6, 8)]
>>> sorted(dictcomp().items())
[(2, 0), (4, 4), (6, 8)]
"""
x = 'abc'
result = { x+2:x*2
for x in range(5)
if x % 2 == 0 }
assert x == 'abc' # do not leak!
return result
@cython.test_assert_path_exists(
"//InlinedGeneratorExpressionNode",
"//DictComprehensionAppendNode")
def genexpr():
"""
>>> type(genexpr()) is dict
True
>>> type(genexpr()) is dict
True
"""
x = 'abc'
result = dict( (x+2,x*2)
for x in range(5)
if x % 2 == 0 )
assert x == 'abc'
return result
cdef class A:
def __repr__(self): return u"A"
def __richcmp__(one, other, int op): return one is other
def __hash__(self): return id(self) % 65536
def typed_dictcomp():
"""
>>> list(typed_dictcomp().items())
[(A, 1), (A, 1), (A, 1)]
"""
cdef A obj
return {obj:1 for obj in [A(), A(), A()]}
def iterdict_dictcomp():
"""
>>> sorted(iterdict_dictcomp().items())
[(1, 'a'), (2, 'b'), (3, 'c')]
"""
cdef dict d = dict(a=1,b=2,c=3)
return {d[key]:key for key in d}
def sorted(it):
l = list(it)
l.sort()
return l
# Copied from sre_compile.py in CPython 3.7. Previously failed to detect variable initialisation.
_equivalences = (
# LATIN SMALL LETTER I, LATIN SMALL LETTER DOTLESS I
(0x69, 0x131), # iı
# LATIN SMALL LETTER S, LATIN SMALL LETTER LONG S
(0x73, 0x17f), # sſ
# MICRO SIGN, GREEK SMALL LETTER MU
(0xb5, 0x3bc), # µμ
# COMBINING GREEK YPOGEGRAMMENI, GREEK SMALL LETTER IOTA, GREEK PROSGEGRAMMENI
(0x345, 0x3b9, 0x1fbe), # \u0345ιι
# ...
)
_ignorecase_fixes = {
i: tuple(j for j in t if i != j)
for t in _equivalences for i in t
}
def nested_tuple():
"""
>>> modlevel, funclevel = nested_tuple()
>>> modlevel == funclevel or (modlevel, funclevel)
True
"""
inner_ignorecase_fixes = {
i: tuple(j for j in t if i != j)
for t in _equivalences for i in t
}
return sorted(_ignorecase_fixes.items()), sorted(inner_ignorecase_fixes.items())