From 75be96e1d9cd381577352d60aacb5211c9de93ee Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sun, 29 Mar 2020 22:42:41 -0700 Subject: [PATCH 1/5] Use Transducers#extract_transducer --- test/environments/main/Manifest.toml | 6 ++++-- test/environments/main/Project.toml | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/test/environments/main/Manifest.toml b/test/environments/main/Manifest.toml index 98471230..f708c0c3 100644 --- a/test/environments/main/Manifest.toml +++ b/test/environments/main/Manifest.toml @@ -205,9 +205,11 @@ version = "0.1.2-DEV" [[Transducers]] deps = ["ArgCheck", "BangBang", "Distributed", "InitialValues", "Logging", "Markdown", "Requires", "Setfield", "SplittablesBase", "Tables"] -git-tree-sha1 = "191319eb863d595c1e4e2fc27896c32d55aae4aa" +git-tree-sha1 = "a4ba6941b31faec8dbc400f177109b1b0a846e46" +repo-rev = "extract_transducer" +repo-url = "https://github.com/tkf/Transducers.jl.git" uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" -version = "0.4.24" +version = "0.4.25-DEV" [[UUIDs]] deps = ["Random", "SHA"] diff --git a/test/environments/main/Project.toml b/test/environments/main/Project.toml index 55d03df4..e508918b 100644 --- a/test/environments/main/Project.toml +++ b/test/environments/main/Project.toml @@ -5,6 +5,7 @@ Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" ThreadsX = "ac1d9e8a-700a-412c-b207-f0111f4b6c0d" +Transducers = "28d57a85-8fef-5791-bfe6-a80928e7c999" [compat] Aqua = "0.4.1" From 78951105ececf0b6519ac2cc940aef52e0513c8c Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sun, 29 Mar 2020 22:46:36 -0700 Subject: [PATCH 2/5] Support iterators as input to `reduce` etc. --- src/ThreadsX.jl | 3 +-- src/reduce.jl | 18 +++++++++++++----- test/test_with_base.jl | 9 +++++++++ 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/ThreadsX.jl b/src/ThreadsX.jl index 9d8e0fc3..6e24d30d 100644 --- a/src/ThreadsX.jl +++ b/src/ThreadsX.jl @@ -51,8 +51,7 @@ using Transducers: OnInit, ReduceIf, Transducers, - eduction, - induction, + extract_transducer, reduced, right, tcollect, diff --git a/src/reduce.jl b/src/reduce.jl index 5bd0d9ed..e0375590 100644 --- a/src/reduce.jl +++ b/src/reduce.jl @@ -1,12 +1,13 @@ without_basesize(; basesize = nothing, kw...) = kw function ThreadsX.reduce(op, itr; kw...) + xf, reducible = extract_transducer(itr) result = reduce( op, - Map(identity), - itr; + xf, + reducible; init = Init(op), - basesize = default_basesize(itr), + basesize = default_basesize(reducible), kw..., ) result === Init(op) && return reduce_empty(op, eltype(itr)) @@ -14,8 +15,15 @@ function ThreadsX.reduce(op, itr; kw...) end function ThreadsX.mapreduce(f, op, itr; kw...) - result = - reduce(op, Map(f), itr; init = Init(op), basesize = default_basesize(itr), kw...) + xf, reducible = extract_transducer(itr) + result = reduce( + op, + Map(f) |> xf, + reducible; + init = Init(op), + basesize = default_basesize(reducible), + kw..., + ) result === Init(op) && return mapreduce_empty(f, op, eltype(itr)) return result end diff --git a/test/test_with_base.jl b/test/test_with_base.jl index 5a4e0366..04d47201 100644 --- a/test/test_with_base.jl +++ b/test/test_with_base.jl @@ -20,12 +20,21 @@ map(*, ones(0, 3), ones(0, 3)) reduce(+, 1:10) reduce(+, 1:0) reduce(+, Bool[]) +reduce(+, (x^2 for x in 1:10)) +reduce(+, (x for x in 1:10 if isodd(x))) +reduce(+, (y for x in 1:10 for y in 1:x)) mapreduce(inc, +, 1:10) mapreduce(*, +, 1:10, 11:20) mapreduce(*, +, 1:0, 11:10) +mapreduce(inc, +, (x^2 for x in 1:10)) +mapreduce(inc, +, (x for x in 1:10 if isodd(x))) +mapreduce(inc, +, (y for x in 1:10 for y in 1:x)) sum(1:10) sum(1:0) sum(x -> x^2, 1:10) +sum(x^2 for x in 1:10) +sum(x for x in 1:10 if isodd(x)) +sum(y for x in 1:10 for y in 1:x) prod(1:10) prod(1:0) prod(x -> x + 1, 1:10) From fb9a598ac8bff22b739e9796c8d9a3b875b955d2 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Mon, 30 Mar 2020 19:33:35 -0700 Subject: [PATCH 3/5] Fix mapreduce --- src/reduce.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/reduce.jl b/src/reduce.jl index e0375590..2e1db9f7 100644 --- a/src/reduce.jl +++ b/src/reduce.jl @@ -18,7 +18,7 @@ function ThreadsX.mapreduce(f, op, itr; kw...) xf, reducible = extract_transducer(itr) result = reduce( op, - Map(f) |> xf, + xf |> Map(f), reducible; init = Init(op), basesize = default_basesize(reducible), From 04eb13a2cdebf27a44bf9a48d34c74ceb367ec41 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Mon, 30 Mar 2020 20:11:18 -0700 Subject: [PATCH 4/5] Use Transducers#extract_transducer --- benchmark/Manifest.toml | 4 ++-- docs/Manifest.toml | 6 ++++-- docs/Project.toml | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/benchmark/Manifest.toml b/benchmark/Manifest.toml index 8e445b8d..e76f74ba 100644 --- a/benchmark/Manifest.toml +++ b/benchmark/Manifest.toml @@ -226,8 +226,8 @@ version = "0.1.1-DEV" [[Transducers]] deps = ["ArgCheck", "BangBang", "Distributed", "InitialValues", "Logging", "Markdown", "Requires", "Setfield", "SplittablesBase", "Tables"] -git-tree-sha1 = "b574e0045e478875aa6b40282cf6321d8152bc58" -repo-rev = "master" +git-tree-sha1 = "a4ba6941b31faec8dbc400f177109b1b0a846e46" +repo-rev = "extract_transducer" repo-url = "https://github.com/tkf/Transducers.jl.git" uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" version = "0.4.25-DEV" diff --git a/docs/Manifest.toml b/docs/Manifest.toml index 46c86fa8..061a1a6f 100644 --- a/docs/Manifest.toml +++ b/docs/Manifest.toml @@ -199,9 +199,11 @@ version = "0.1.2-DEV" [[Transducers]] deps = ["ArgCheck", "BangBang", "Distributed", "InitialValues", "Logging", "Markdown", "Requires", "Setfield", "SplittablesBase", "Tables"] -git-tree-sha1 = "191319eb863d595c1e4e2fc27896c32d55aae4aa" +git-tree-sha1 = "a4ba6941b31faec8dbc400f177109b1b0a846e46" +repo-rev = "extract_transducer" +repo-url = "https://github.com/tkf/Transducers.jl.git" uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" -version = "0.4.24" +version = "0.4.25-DEV" [[UUIDs]] deps = ["Random", "SHA"] diff --git a/docs/Project.toml b/docs/Project.toml index 02f7317a..a319eee4 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -1,3 +1,4 @@ [deps] Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" ThreadsX = "ac1d9e8a-700a-412c-b207-f0111f4b6c0d" +Transducers = "28d57a85-8fef-5791-bfe6-a80928e7c999" From 6dbca6a3366416bc2233fbab1fd22491beaf9711 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Mon, 30 Mar 2020 20:34:50 -0700 Subject: [PATCH 5/5] Use Transducers#master --- benchmark/Manifest.toml | 2 +- docs/Manifest.toml | 2 +- test/environments/main/Manifest.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/benchmark/Manifest.toml b/benchmark/Manifest.toml index e76f74ba..5b2ebcc1 100644 --- a/benchmark/Manifest.toml +++ b/benchmark/Manifest.toml @@ -227,7 +227,7 @@ version = "0.1.1-DEV" [[Transducers]] deps = ["ArgCheck", "BangBang", "Distributed", "InitialValues", "Logging", "Markdown", "Requires", "Setfield", "SplittablesBase", "Tables"] git-tree-sha1 = "a4ba6941b31faec8dbc400f177109b1b0a846e46" -repo-rev = "extract_transducer" +repo-rev = "master" repo-url = "https://github.com/tkf/Transducers.jl.git" uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" version = "0.4.25-DEV" diff --git a/docs/Manifest.toml b/docs/Manifest.toml index 061a1a6f..61805388 100644 --- a/docs/Manifest.toml +++ b/docs/Manifest.toml @@ -200,7 +200,7 @@ version = "0.1.2-DEV" [[Transducers]] deps = ["ArgCheck", "BangBang", "Distributed", "InitialValues", "Logging", "Markdown", "Requires", "Setfield", "SplittablesBase", "Tables"] git-tree-sha1 = "a4ba6941b31faec8dbc400f177109b1b0a846e46" -repo-rev = "extract_transducer" +repo-rev = "master" repo-url = "https://github.com/tkf/Transducers.jl.git" uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" version = "0.4.25-DEV" diff --git a/test/environments/main/Manifest.toml b/test/environments/main/Manifest.toml index f708c0c3..9af2cc99 100644 --- a/test/environments/main/Manifest.toml +++ b/test/environments/main/Manifest.toml @@ -206,7 +206,7 @@ version = "0.1.2-DEV" [[Transducers]] deps = ["ArgCheck", "BangBang", "Distributed", "InitialValues", "Logging", "Markdown", "Requires", "Setfield", "SplittablesBase", "Tables"] git-tree-sha1 = "a4ba6941b31faec8dbc400f177109b1b0a846e46" -repo-rev = "extract_transducer" +repo-rev = "master" repo-url = "https://github.com/tkf/Transducers.jl.git" uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" version = "0.4.25-DEV"