1# ticket: 316
2
3cimport cython
4
5@cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
6def go_py_enumerate():
7    """
8    >>> go_py_enumerate()
9    0 1
10    1 2
11    2 3
12    3 4
13    """
14    for i,k in enumerate(range(1,5)):
15        print i, k
16
17@cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
18def py_enumerate_list_index_target():
19    """
20    >>> py_enumerate_list_index_target()
21    [0] 1
22    [1] 2
23    [2] 3
24    [3] 4
25    """
26    target = [None]
27    for target[0],k in enumerate(range(1,5)):
28        print target, k
29
30@cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
31def go_py_enumerate_start():
32    """
33    >>> go_py_enumerate_start()
34    5 1
35    6 2
36    7 3
37    8 4
38    """
39    for i,k in enumerate(range(1,5), 5):
40        print i, k
41
42@cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
43def go_c_enumerate():
44    """
45    >>> go_c_enumerate()
46    0 1
47    1 2
48    2 3
49    3 4
50    """
51    cdef int i,k
52    for i,k in enumerate(range(1,5)):
53        print i, k
54
55@cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
56def c_enumerate_carray_target():
57    """
58    >>> c_enumerate_carray_target()
59    0 1
60    1 2
61    2 3
62    3 4
63    """
64    cdef int k
65    cdef int[1] i
66    for i[0],k in enumerate(range(1,5)):
67        print i[0], k
68
69@cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
70def go_c_enumerate_step():
71    """
72    >>> go_c_enumerate_step()
73    0 1
74    1 3
75    2 5
76    """
77    cdef int i,k
78    for i,k in enumerate(range(1,7,2)):
79        print i, k
80
81@cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
82def py_enumerate_dict(dict d):
83    """
84    >>> py_enumerate_dict({})
85    :: 55 99
86    >>> py_enumerate_dict(dict(a=1, b=2, c=3))
87    0 True
88    1 True
89    2 True
90    :: 2 True
91    """
92    cdef int i = 55
93    k = 99
94    keys = list(d.keys())
95    for i,k in enumerate(d):
96        k = keys[i] == k
97        print i, k
98    print u"::", i, k
99
100@cython.test_fail_if_path_exists("//SimpleCallNode")
101def py_enumerate_break(*t):
102    """
103    >>> py_enumerate_break(1,2,3,4)
104    0 1
105    :: 0 1
106    """
107    i,k = 55,99
108    for i,k in enumerate(t):
109        print i, k
110        break
111    print u"::", i, k
112
113@cython.test_fail_if_path_exists("//SimpleCallNode")
114def py_enumerate_return(*t):
115    """
116    >>> py_enumerate_return()
117    :: 55 99
118    >>> py_enumerate_return(1,2,3,4)
119    0 1
120    """
121    i,k = 55,99
122    for i,k in enumerate(t):
123        print i, k
124        return
125    print u"::", i, k
126
127@cython.test_fail_if_path_exists("//SimpleCallNode")
128def py_enumerate_continue(*t):
129    """
130    >>> py_enumerate_continue(1,2,3,4)
131    0 1
132    1 2
133    2 3
134    3 4
135    :: 3 4
136    """
137    i,k = 55,99
138    for i,k in enumerate(t):
139        print i, k
140        continue
141    print u"::", i, k
142
143@cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
144def empty_c_enumerate():
145    """
146    >>> empty_c_enumerate()
147    (55, 99)
148    """
149    cdef int i = 55, k = 99
150    for i,k in enumerate(range(0)):
151        print i, k
152    return i, k
153
154# not currently optimised
155def single_target_enumerate():
156    """
157    >>> single_target_enumerate()
158    0 1
159    1 2
160    2 3
161    3 4
162    """
163    for t in enumerate(range(1,5)):
164        print t[0], t[1]
165
166@cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
167def multi_enumerate():
168    """
169    >>> multi_enumerate()
170    0 0 0 1
171    1 1 1 2
172    2 2 2 3
173    3 3 3 4
174    """
175    for a,(b,(c,d)) in enumerate(enumerate(enumerate(range(1,5)))):
176        print a,b,c,d
177
178@cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']")
179def multi_enumerate_start():
180    """
181    >>> multi_enumerate_start()
182    0 2 0 1
183    1 3 1 2
184    2 4 2 3
185    3 5 3 4
186    """
187    for a,(b,(c,d)) in enumerate(enumerate(enumerate(range(1,5)), 2)):
188        print a,b,c,d
189
190@cython.test_fail_if_path_exists("//SimpleCallNode")
191def multi_c_enumerate():
192    """
193    >>> multi_c_enumerate()
194    0 0 0 1
195    1 1 1 2
196    2 2 2 3
197    3 3 3 4
198    """
199    cdef int a,b,c,d
200    for a,(b,(c,d)) in enumerate(enumerate(enumerate(range(1,5)))):
201        print a,b,c,d
202
203@cython.test_fail_if_path_exists("//SimpleCallNode")
204def convert_target_enumerate(L):
205    """
206    >>> convert_target_enumerate([2,3,5])
207    0 2
208    1 3
209    2 5
210    """
211    cdef int a,b
212    for a, b in enumerate(L):
213        print a,b
214
215@cython.test_fail_if_path_exists("//SimpleCallNode")
216def convert_target_enumerate_start(L, int n):
217    """
218    >>> convert_target_enumerate_start([2,3,5], 3)
219    3 2
220    4 3
221    5 5
222    """
223    cdef int a,b
224    for a, b in enumerate(L, n):
225        print a,b
226