1# -----------------
2# lambdas
3# -----------------
4a = lambda: 3
5#? int()
6a()
7
8x = []
9a = lambda x: x
10#? int()
11a(0)
12
13#? float()
14(lambda x: x)(3.0)
15
16arg_l = lambda x, y: y, x
17#? float()
18arg_l[0]('', 1.0)
19#? list()
20arg_l[1]
21
22arg_l = lambda x, y: (y, x)
23args = 1,""
24result = arg_l(*args)
25#? tuple()
26result
27#? str()
28result[0]
29#? int()
30result[1]
31
32def with_lambda(callable_lambda, *args, **kwargs):
33    return callable_lambda(1, *args, **kwargs)
34
35#? int()
36with_lambda(arg_l, 1.0)[1]
37#? float()
38with_lambda(arg_l, 1.0)[0]
39#? float()
40with_lambda(arg_l, y=1.0)[0]
41#? int()
42with_lambda(lambda x: x)
43#? float()
44with_lambda(lambda x, y: y, y=1.0)
45
46arg_func = lambda *args, **kwargs: (args[0], kwargs['a'])
47#? int()
48arg_func(1, 2, a='', b=10)[0]
49#? list()
50arg_func(1, 2, a=[], b=10)[1]
51
52# magic method
53a = lambda: 3
54#? ['__closure__']
55a.__closure__
56
57class C():
58    def __init__(self, foo=1.0):
59        self.a = lambda: 1
60        self.foo = foo
61
62    def ret(self):
63        return lambda: self.foo
64
65    def with_param(self):
66        return lambda x: x + self.a()
67
68    lambd = lambda self: self.foo
69
70#? int()
71C().a()
72
73#? str()
74C('foo').ret()()
75
76index = C().with_param()(1)
77#? float()
78['', 1, 1.0][index]
79
80#? float()
81C().lambd()
82#? int()
83C(1).lambd()
84
85
86def xy(param):
87    def ret(a, b):
88        return a + b
89
90    return lambda b: ret(param, b)
91
92#? int()
93xy(1)(2)
94
95# -----------------
96# lambda param (#379)
97# -----------------
98class Test(object):
99    def __init__(self, pred=lambda a, b: a):
100        self.a = 1
101        #? int()
102        self.a
103        #? float()
104        pred(1.0, 2)
105
106# -----------------
107# test_nocond in grammar (happens in list comprehensions with `if`)
108# -----------------
109# Doesn't need to do anything yet. It should just not raise an error. These
110# nocond lambdas make no sense at all.
111
112#? int()
113[a for a in [1,2] if lambda: 3][0]
114