1
2cdef class VerboseGetItem(object):
3    cdef object sequence
4    def __init__(self, seq):
5        self.sequence = seq
6    def __getitem__(self, i):
7        print i
8        return self.sequence[i] # may raise IndexError
9
10
11cimport cython
12
13@cython.test_assert_path_exists("//SimpleCallNode")
14@cython.test_fail_if_path_exists("//ForInStatNode")
15def any_item(x):
16    """
17    >>> any_item([0,0,1,0,0])
18    True
19    >>> any_item([0,0,0,0,1])
20    True
21    >>> any_item([0,0,0,0,0])
22    False
23
24    >>> any(VerboseGetItem([0,0,1,0,0]))
25    0
26    1
27    2
28    True
29    >>> any_item(VerboseGetItem([0,0,1,0,0]))
30    0
31    1
32    2
33    True
34
35    >>> any(VerboseGetItem([0,0,0,0,0]))
36    0
37    1
38    2
39    3
40    4
41    5
42    False
43    >>> any_item(VerboseGetItem([0,0,0,0,0]))
44    0
45    1
46    2
47    3
48    4
49    5
50    False
51    """
52    return any(x)
53
54
55@cython.test_assert_path_exists(
56    "//ForInStatNode",
57    "//InlinedGeneratorExpressionNode"
58)
59@cython.test_fail_if_path_exists(
60    "//SimpleCallNode",
61    "//YieldExprNode"
62)
63def any_in_simple_gen(seq):
64    """
65    >>> any_in_simple_gen([0,1,0])
66    True
67    >>> any_in_simple_gen([0,0,0])
68    False
69
70    >>> any_in_simple_gen(VerboseGetItem([0,0,1,0,0]))
71    0
72    1
73    2
74    True
75    >>> any_in_simple_gen(VerboseGetItem([0,0,0,0,0]))
76    0
77    1
78    2
79    3
80    4
81    5
82    False
83    """
84    return any(x for x in seq)
85
86
87@cython.test_assert_path_exists(
88    "//ForInStatNode",
89    "//InlinedGeneratorExpressionNode"
90)
91@cython.test_fail_if_path_exists(
92    "//SimpleCallNode",
93    "//YieldExprNode"
94)
95def any_in_simple_gen_scope(seq):
96    """
97    >>> any_in_simple_gen_scope([0,1,0])
98    True
99    >>> any_in_simple_gen_scope([0,0,0])
100    False
101
102    >>> any_in_simple_gen_scope(VerboseGetItem([0,0,1,0,0]))
103    0
104    1
105    2
106    True
107    >>> any_in_simple_gen_scope(VerboseGetItem([0,0,0,0,0]))
108    0
109    1
110    2
111    3
112    4
113    5
114    False
115    """
116    x = 'abc'
117    result = any(x for x in seq)
118    assert x == 'abc'
119    return result
120
121
122@cython.test_assert_path_exists(
123    "//ForInStatNode",
124    "//InlinedGeneratorExpressionNode"
125)
126@cython.test_fail_if_path_exists(
127    "//SimpleCallNode",
128    "//YieldExprNode"
129)
130def any_in_conditional_gen(seq):
131    """
132    >>> any_in_conditional_gen([3,6,9])
133    False
134    >>> any_in_conditional_gen([0,3,7])
135    True
136    >>> any_in_conditional_gen([1,0,1])
137    True
138
139    >>> any_in_conditional_gen(VerboseGetItem([0,0,3,0,0]))
140    0
141    1
142    2
143    3
144    4
145    5
146    False
147    >>> any_in_conditional_gen(VerboseGetItem([0,3,0,1,1]))
148    0
149    1
150    2
151    3
152    True
153    """
154    return any(x%3 for x in seq if x%2 == 1)
155
156mixed_ustring = u'AbcDefGhIjKlmnoP'
157lower_ustring = mixed_ustring.lower()
158upper_ustring = mixed_ustring.upper()
159
160
161@cython.test_assert_path_exists(
162    '//PythonCapiCallNode',
163    '//ForFromStatNode',
164    "//InlinedGeneratorExpressionNode"
165)
166@cython.test_fail_if_path_exists(
167    '//SimpleCallNode',
168    '//ForInStatNode'
169)
170def any_lower_case_characters(unicode ustring):
171    """
172    >>> any_lower_case_characters(upper_ustring)
173    False
174    >>> any_lower_case_characters(mixed_ustring)
175    True
176    >>> any_lower_case_characters(lower_ustring)
177    True
178    """
179    return any(uchar.islower() for uchar in ustring)
180
181
182@cython.test_assert_path_exists(
183    "//ForInStatNode",
184    "//InlinedGeneratorExpressionNode",
185    "//InlinedGeneratorExpressionNode//IfStatNode"
186)
187@cython.test_fail_if_path_exists(
188    "//SimpleCallNode",
189    "//YieldExprNode",
190#    "//IfStatNode//CoerceToBooleanNode"
191)
192def any_in_typed_gen(seq):
193    """
194    >>> any_in_typed_gen([0,1,0])
195    True
196    >>> any_in_typed_gen([0,0,0])
197    False
198
199    >>> any_in_typed_gen(VerboseGetItem([0,0,1,0,0]))
200    0
201    1
202    2
203    True
204    >>> any_in_typed_gen(VerboseGetItem([0,0,0,0,0]))
205    0
206    1
207    2
208    3
209    4
210    5
211    False
212    """
213    cdef int x
214    return any(x for x in seq)
215
216
217@cython.test_assert_path_exists(
218    "//ForInStatNode",
219    "//InlinedGeneratorExpressionNode",
220    "//InlinedGeneratorExpressionNode//IfStatNode"
221)
222@cython.test_fail_if_path_exists(
223    "//SimpleCallNode",
224    "//YieldExprNode"
225)
226def any_in_gen_builtin_name(seq):
227    """
228    >>> any_in_gen_builtin_name([0,1,0])
229    True
230    >>> any_in_gen_builtin_name([0,0,0])
231    False
232
233    >>> any_in_gen_builtin_name(VerboseGetItem([0,0,1,0,0]))
234    0
235    1
236    2
237    True
238    >>> any_in_gen_builtin_name(VerboseGetItem([0,0,0,0,0]))
239    0
240    1
241    2
242    3
243    4
244    5
245    False
246    """
247    return any(type for type in seq)
248
249
250@cython.test_assert_path_exists(
251    "//ForInStatNode",
252    "//InlinedGeneratorExpressionNode",
253    "//InlinedGeneratorExpressionNode//IfStatNode"
254)
255@cython.test_fail_if_path_exists(
256    "//SimpleCallNode",
257    "//YieldExprNode",
258#    "//IfStatNode//CoerceToBooleanNode"
259)
260def any_in_double_gen(seq):
261    """
262    >>> any(x for L in [[0,0,0],[0,0,1],[0,0,0]] for x in L)
263    True
264    >>> any_in_double_gen([[0,0,0],[0,0,1],[0,0,0]])
265    True
266
267    >>> any(x for L in [[0,0,0],[0,0,0],[0,0,0]] for x in L)
268    False
269    >>> any_in_double_gen([[0,0,0],[0,0,0],[0,0,0]])
270    False
271
272    >>> any_in_double_gen([VerboseGetItem([0,0,0]), VerboseGetItem([0,0,1,0,0])])
273    0
274    1
275    2
276    3
277    0
278    1
279    2
280    True
281    >>> any_in_double_gen([VerboseGetItem([0,0,0]),VerboseGetItem([0,0]),VerboseGetItem([0,0,0])])
282    0
283    1
284    2
285    3
286    0
287    1
288    2
289    0
290    1
291    2
292    3
293    False
294    """
295    cdef int x
296    return any(x for L in seq for x in L)
297