Skip to content

Commit b8a90fc

Browse files
committed
[GR-33928] intrinsify itertools.
PullRequest: graalpython/2002
2 parents 4025521 + 01a5d90 commit b8a90fc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+5335
-1056
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_itertools.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,32 @@ def keyfunc(obj):
101101

102102
data = [None, None, None, 20]
103103
assert list(map(lambda x: x[0], list(groupby(data)))) == [None, 20]
104+
105+
def test_generators(self):
106+
# test that generators are accepted like input values
107+
108+
def g(seqn):
109+
for i in seqn:
110+
yield i
111+
112+
def g2(seqn):
113+
for i in seqn:
114+
yield (i, i)
115+
116+
self.assertEqual(list(accumulate(g([1,2]))), [1, 3])
117+
self.assertEqual(list(chain(g([1,2]), g([3,4]))), [1, 2, 3, 4])
118+
self.assertEqual(list(combinations(g([1,2]), 2)), [(1, 2)])
119+
self.assertEqual(list(combinations_with_replacement(g([1,2]), 2)), [(1, 1), (1, 2), (2, 2)])
120+
self.assertEqual(list(dropwhile(lambda a:0, g([1,2]))), [1, 2])
121+
self.assertEqual(list(filterfalse(lambda a:0, g([1,2]))), [1, 2])
122+
self.assertEqual(list(groupby(g([1,2])))[0][0], 1)
123+
self.assertEqual(list(islice(g([1,2,3]),2)), [1, 2])
124+
self.assertEqual(list(permutations(g([1,2]), 2)), [(1, 2), (2, 1)])
125+
self.assertEqual(list(product(g([1,2]), repeat=2)), [(1, 1), (1, 2), (2, 1), (2, 2)])
126+
self.assertEqual(list(starmap(pow, g2([2,3]))), [4, 27])
127+
c = cycle(g([1,2]))
128+
self.assertEqual(next(c), 1)
129+
self.assertEqual(list(takewhile(lambda a:a, g([1,2]))), [1, 2])
130+
self.assertEqual(list(tee(g([1, 2]))[0]), [1, 2])
131+
self.assertEqual(list(zip_longest(g2([2,3]))), [((2, 2),), ((3, 3),)])
132+

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_gc.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
*graalpython.lib-python.3.test.test_gc.GCCallbackTests.test_collect_garbage
22
*graalpython.lib-python.3.test.test_gc.GCCallbackTests.test_refcount_errors
3-
*graalpython.lib-python.3.test.test_gc.GCTests.test_bug1055820b
43
*graalpython.lib-python.3.test.test_gc.GCTests.test_bug21435
54
*graalpython.lib-python.3.test.test_gc.GCTests.test_collect_generations
65
*graalpython.lib-python.3.test.test_gc.GCTests.test_frame

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_itertools.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
*graalpython.lib-python.3.test.test_itertools.SizeofTest.test_product_sizeof
1212
*graalpython.lib-python.3.test.test_itertools.SubclassWithKwargsTest.test_keywords_in_subclass
1313
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_StopIteration
14+
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_accumulate
1415
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_bug_7244
1516
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_chain
1617
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_chain_from_iterable
@@ -31,6 +32,7 @@
3132
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_dropwhile
3233
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_filter
3334
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_filterfalse
35+
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_groupby
3436
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_islice
3537
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_map
3638
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_permutations
@@ -43,7 +45,9 @@
4345
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_product_tuple_reuse
4446
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_repeat
4547
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_repeat_with_negative_times
48+
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_starmap
4649
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_takewhile
50+
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_tee
4751
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_tee_concurrent
4852
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_tee_del_backward
4953
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_tee_reenter
@@ -54,6 +58,8 @@
5458
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_zip_tuple_reuse
5559
*graalpython.lib-python.3.test.test_itertools.TestBasicOps.test_ziplongest
5660
*graalpython.lib-python.3.test.test_itertools.TestExamples.test_accumulate
61+
*graalpython.lib-python.3.test.test_itertools.TestExamples.test_accumulate_reducible
62+
*graalpython.lib-python.3.test.test_itertools.TestExamples.test_accumulate_reducible_none
5763
*graalpython.lib-python.3.test.test_itertools.TestExamples.test_chain
5864
*graalpython.lib-python.3.test.test_itertools.TestExamples.test_chain_from_iterable
5965
*graalpython.lib-python.3.test.test_itertools.TestExamples.test_combinations
@@ -96,6 +102,7 @@
96102
*graalpython.lib-python.3.test.test_itertools.TestGC.test_takewhile
97103
*graalpython.lib-python.3.test.test_itertools.TestGC.test_zip
98104
*graalpython.lib-python.3.test.test_itertools.TestGC.test_zip_longest
105+
*graalpython.lib-python.3.test.test_itertools.TestMain.test_main
99106
*graalpython.lib-python.3.test.test_itertools.TestPurePythonRoughEquivalents.test_islice_recipe
100107
*graalpython.lib-python.3.test.test_itertools.TestVariousIteratorArgs.test_accumulate
101108
*graalpython.lib-python.3.test.test_itertools.TestVariousIteratorArgs.test_chain

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,25 @@
196196
import com.oracle.graal.python.builtins.objects.iterator.IteratorBuiltins;
197197
import com.oracle.graal.python.builtins.objects.iterator.PZipBuiltins;
198198
import com.oracle.graal.python.builtins.objects.iterator.SentinelIteratorBuiltins;
199+
import com.oracle.graal.python.builtins.objects.itertools.AccumulateBuiltins;
199200
import com.oracle.graal.python.builtins.objects.itertools.ChainBuiltins;
201+
import com.oracle.graal.python.builtins.objects.itertools.CombinationsBuiltins;
202+
import com.oracle.graal.python.builtins.objects.itertools.CompressBuiltins;
203+
import com.oracle.graal.python.builtins.objects.itertools.CountBuiltins;
204+
import com.oracle.graal.python.builtins.objects.itertools.CycleBuiltins;
205+
import com.oracle.graal.python.builtins.objects.itertools.DropwhileBuiltins;
206+
import com.oracle.graal.python.builtins.objects.itertools.FilterfalseBuiltins;
207+
import com.oracle.graal.python.builtins.objects.itertools.GroupByBuiltins;
208+
import com.oracle.graal.python.builtins.objects.itertools.GrouperBuiltins;
209+
import com.oracle.graal.python.builtins.objects.itertools.IsliceBuiltins;
210+
import com.oracle.graal.python.builtins.objects.itertools.PermutationsBuiltins;
211+
import com.oracle.graal.python.builtins.objects.itertools.ProductBuiltins;
200212
import com.oracle.graal.python.builtins.objects.itertools.RepeatBuiltins;
213+
import com.oracle.graal.python.builtins.objects.itertools.StarmapBuiltins;
214+
import com.oracle.graal.python.builtins.objects.itertools.TakewhileBuiltins;
201215
import com.oracle.graal.python.builtins.objects.itertools.TeeBuiltins;
202216
import com.oracle.graal.python.builtins.objects.itertools.TeeDataObjectBuiltins;
217+
import com.oracle.graal.python.builtins.objects.itertools.ZipLongestBuiltins;
203218
import com.oracle.graal.python.builtins.objects.keywrapper.KeyWrapperBuiltins;
204219
import com.oracle.graal.python.builtins.objects.list.ListBuiltins;
205220
import com.oracle.graal.python.builtins.objects.map.MapBuiltins;
@@ -305,7 +320,6 @@ private static String[] initializeCoreFiles() {
305320
"_frozen_importlib",
306321
"__graalpython__",
307322
"_weakref",
308-
"itertools",
309323
"faulthandler",
310324
PythonCextBuiltins.PYTHON_CEXT,
311325
"bytearray",
@@ -500,10 +514,25 @@ private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed)
500514
new ZipImportModuleBuiltins(),
501515

502516
// itertools
517+
new AccumulateBuiltins(),
518+
new CombinationsBuiltins(),
519+
new CompressBuiltins(),
520+
new DropwhileBuiltins(),
503521
new ChainBuiltins(),
522+
new CountBuiltins(),
523+
new CycleBuiltins(),
524+
new FilterfalseBuiltins(),
525+
new GroupByBuiltins(),
526+
new GrouperBuiltins(),
527+
new IsliceBuiltins(),
528+
new PermutationsBuiltins(),
529+
new ProductBuiltins(),
504530
new RepeatBuiltins(),
531+
new StarmapBuiltins(),
532+
new TakewhileBuiltins(),
505533
new TeeBuiltins(),
506534
new TeeDataObjectBuiltins(),
535+
new ZipLongestBuiltins(),
507536

508537
// zlib
509538
new ZLibModuleBuiltins(),

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/PythonBuiltinClassType.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,8 +211,24 @@ public enum PythonBuiltinClassType implements TruffleObject {
211211
// itertools
212212
PTee("_tee", "itertools", Flags.PUBLIC_DERIVED_WODICT),
213213
PTeeDataObject("_tee_dataobject", "itertools", Flags.PUBLIC_DERIVED_WODICT),
214+
PAccumulate("accumulate", "itertools"),
215+
PCombinations("combinations", "itertools"),
216+
PCombinationsWithReplacement("combinations_with_replacement", "itertools"),
217+
PCompress("compress", "itertools"),
218+
PCycle("cycle", "itertools"),
219+
PDropwhile("dropwhile", "itertools"),
220+
PFilterfalse("filterfalse", "itertools"),
221+
PGroupBy("groupby", "itertools"),
222+
PGrouper("grouper", "itertools", Flags.PUBLIC_DERIVED_WODICT),
223+
PPermutations("permutations", "itertools"),
224+
PProduct("product", "itertools"),
214225
PRepeat("repeat", "itertools"),
215226
PChain("chain", "itertools"),
227+
PCount("count", "itertools"),
228+
PIslice("islice", "itertools"),
229+
PStarmap("starmap", "itertools"),
230+
PTakewhile("takewhile", "itertools"),
231+
PZipLongest("zip_longest", "itertools"),
216232

217233
// json
218234
JSONScanner("Scanner", "_json", Flags.PUBLIC_BASE_WODICT),

0 commit comments

Comments
 (0)