diff --git a/benchmark/Manifest.toml b/benchmark/Manifest.toml index 8e445b8d..5b2ebcc1 100644 --- a/benchmark/Manifest.toml +++ b/benchmark/Manifest.toml @@ -226,7 +226,7 @@ version = "0.1.1-DEV" [[Transducers]] deps = ["ArgCheck", "BangBang", "Distributed", "InitialValues", "Logging", "Markdown", "Requires", "Setfield", "SplittablesBase", "Tables"] -git-tree-sha1 = "b574e0045e478875aa6b40282cf6321d8152bc58" +git-tree-sha1 = "a4ba6941b31faec8dbc400f177109b1b0a846e46" repo-rev = "master" repo-url = "https://github.com/tkf/Transducers.jl.git" uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" diff --git a/docs/Manifest.toml b/docs/Manifest.toml index 46c86fa8..61805388 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 = "master" +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" 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..2e1db9f7 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, + xf |> Map(f), + 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/environments/main/Manifest.toml b/test/environments/main/Manifest.toml index 98471230..9af2cc99 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 = "master" +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" 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)