Skip to content

Commit bab9b35

Browse files
committed
prevent broadcasting over eachcol
1 parent 5361387 commit bab9b35

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

src/abstractdataset/iteration.jl

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -391,14 +391,15 @@ Base.show(dfcs::DatasetColumns;
391391
summary=summary, eltypes=eltypes, truncate=truncate, kwargs...)
392392

393393

394-
395-
396394
# prevent using broadcasting to mutate columns e.g. in pop!.(eachcol(ds))
397-
Base.broadcasted(::typeof(pop!), ::DatasetColumns, args...) = throw(ArgumentError("broadcasting `pop!` over DatasetColums is reserved."))
398-
Base.broadcasted(::typeof(popfirst!), ::DatasetColumns, args...) = throw(ArgumentError("broadcasting `popfirst!` over DatasetColums is reserved."))
399-
Base.broadcasted(::typeof(pushfirst!), ::DatasetColumns, args...) = throw(ArgumentError("broadcasting `pushfirst!` over DatasetColums is reserved."))
400-
Base.broadcasted(::typeof(fill!), ::DatasetColumns, args...) = throw(ArgumentError("broadcasting `fill!` over DatasetColums is reserved."))
401-
Base.broadcasted(::typeof(Statistics.median!), ::DatasetColumns, args...) = throw(ArgumentError("broadcasting `median!` over DatasetColums is reserved."))
402-
Base.broadcasted(::typeof(sort!), ::DatasetColumns, args...) = throw(ArgumentError("broadcasting `sort!` over DatasetColums is reserved."))
403-
Base.broadcasted(::typeof(lag!), ::DatasetColumns, args...) = throw(ArgumentError("broadcasting `lag!` over DatasetColums is reserved."))
404-
Base.broadcasted(::typeof(lead!), ::DatasetColumns, args...) = throw(ArgumentError("broadcasting `lead!` over DatasetColums is reserved."))
395+
# TODO customise Base.broadcasted to handle the situation
396+
for f in filter(x->occursin(r"!$", String(x)), names(Base))
397+
@eval Base.broadcasted(::typeof($f), ::DatasetColumns, args...) = throw(ArgumentError("broadcasting `$(nameof($f))` over DatasetColums is reserved."))
398+
end
399+
for f in filter(x->occursin(r"!$", String(x)), names(Statistics))
400+
@eval Base.broadcasted(::typeof($f), ::DatasetColumns, args...) = throw(ArgumentError("broadcasting `$(nameof($f))` over DatasetColums is reserved."))
401+
end
402+
for f in [:bfill!, :ffill!, :lag!, :lead!]
403+
@eval Base.broadcasted(::typeof($f), ::DatasetColumns, args...) = throw(ArgumentError("broadcasting `$(nameof($f))` over DatasetColums is reserved."))
404+
end
405+

0 commit comments

Comments
 (0)