@@ -2,25 +2,21 @@ import DataAPI: All, Between, BroadcastedSelector, Cols
22import DataFrames: AsTable, ByRow, ColumnIndex, MultiColumnIndex, normalize_selection
33import InvertedIndices: BroadcastedInvertedIndex
44
5-
6-
7- make_pair_concrete (@nospecialize (x:: Pair )) =
8- make_pair_concrete (x. first) => make_pair_concrete (x. second)
5+ function make_pair_concrete (@nospecialize (x:: Pair ))
6+ return make_pair_concrete (x. first) => make_pair_concrete (x. second)
7+ end
98make_pair_concrete (@nospecialize (x)) = x
109
1110broadcast_pair (df:: DTable , @nospecialize (p:: Any )) = p
1211
1312# Copied as is from DataFrames.jl
1413function broadcast_pair (df:: DTable , @nospecialize (p:: Pair ))
1514 src, second = p
16- src_broadcast = src isa Union{BroadcastedInvertedIndex,
17- BroadcastedSelector}
18- second_broadcast = second isa Union{BroadcastedInvertedIndex,
19- BroadcastedSelector}
15+ src_broadcast = src isa Union{BroadcastedInvertedIndex,BroadcastedSelector}
16+ second_broadcast = second isa Union{BroadcastedInvertedIndex,BroadcastedSelector}
2017 if second isa Pair
2118 fun, dst = second
22- dst_broadcast = dst isa Union{BroadcastedInvertedIndex,
23- BroadcastedSelector}
19+ dst_broadcast = dst isa Union{BroadcastedInvertedIndex,BroadcastedSelector}
2420 if src_broadcast || dst_broadcast
2521 new_src = src_broadcast ? names (df, src. sel) : src
2622 new_dst = dst_broadcast ? names (df, dst. sel) : dst
4541# as then broadcasting produces Matrix{Any} rather than Matrix{<:Pair}
4642broadcast_pair (df:: DTable , @nospecialize (p:: AbstractMatrix )) = isempty (p) ? [] : p
4743
48-
4944# Copied as is from DataFrames.jl
5045function broadcast_pair (df:: DTable , @nospecialize (p:: AbstractVecOrMat{<:Pair} ))
5146 isempty (p) && return []
5247 need_broadcast = false
5348
5449 src = first .(p)
5550 first_src = first (src)
56- if first_src isa Union{BroadcastedInvertedIndex,
57- BroadcastedSelector}
51+ if first_src isa Union{BroadcastedInvertedIndex,BroadcastedSelector}
5852 if any (!= (first_src), src)
59- throw (ArgumentError (" when broadcasting column selector it must " *
60- " have a constant value" ))
53+ throw (
54+ ArgumentError (
55+ " when broadcasting column selector it must " * " have a constant value"
56+ ),
57+ )
6158 end
6259 need_broadcast = true
6360 new_names = names (df, first_src. sel)
6461 if ! (length (new_names) == size (p, 1 ) || size (p, 1 ) == 1 )
65- throw (ArgumentError (" broadcasted dimension does not match the " *
66- " number of selected columns" ))
62+ throw (
63+ ArgumentError (
64+ " broadcasted dimension does not match the " * " number of selected columns"
65+ ),
66+ )
6767 end
6868 new_src = new_names
6969 else
@@ -72,33 +72,45 @@ function broadcast_pair(df::DTable, @nospecialize(p::AbstractVecOrMat{<:Pair}))
7272
7373 second = last .(p)
7474 first_second = first (second)
75- if first_second isa Union{BroadcastedInvertedIndex,
76- BroadcastedSelector}
75+ if first_second isa Union{BroadcastedInvertedIndex,BroadcastedSelector}
7776 if any (!= (first_second), second)
78- throw (ArgumentError (" when using broadcasted column selector it " *
79- " must have a constant value" ))
77+ throw (
78+ ArgumentError (
79+ " when using broadcasted column selector it " * " must have a constant value"
80+ ),
81+ )
8082 end
8183 need_broadcast = true
8284 new_names = names (df, first_second. sel)
8385 if ! (length (new_names) == size (p, 1 ) || size (p, 1 ) == 1 )
84- throw (ArgumentError (" broadcasted dimension does not match the " *
85- " number of selected columns" ))
86+ throw (
87+ ArgumentError (
88+ " broadcasted dimension does not match the " * " number of selected columns"
89+ ),
90+ )
8691 end
8792 new_second = new_names
8893 else
8994 if first_second isa Pair
9095 fun, dst = first_second
91- if dst isa Union{BroadcastedInvertedIndex,
92- BroadcastedSelector}
96+ if dst isa Union{BroadcastedInvertedIndex,BroadcastedSelector}
9397 if ! all (x -> x isa Pair && last (x) == dst, second)
94- throw (ArgumentError (" when using broadcasted column selector " *
95- " it must have a constant value" ))
98+ throw (
99+ ArgumentError (
100+ " when using broadcasted column selector " *
101+ " it must have a constant value" ,
102+ ),
103+ )
96104 end
97105 need_broadcast = true
98106 new_names = names (df, dst. sel)
99107 if ! (length (new_names) == size (p, 1 ) || size (p, 1 ) == 1 )
100- throw (ArgumentError (" broadcasted dimension does not match the " *
101- " number of selected columns" ))
108+ throw (
109+ ArgumentError (
110+ " broadcasted dimension does not match the " *
111+ " number of selected columns" ,
112+ ),
113+ )
102114 end
103115 new_dst = new_names
104116 new_second = first .(second) .=> new_dst
@@ -119,7 +131,9 @@ function broadcast_pair(df::DTable, @nospecialize(p::AbstractVecOrMat{<:Pair}))
119131end
120132
121133# Copied as is from DataFrames.jl
122- function manipulate (df:: DTable , @nospecialize (cs... ); copycols:: Bool , keeprows:: Bool , renamecols:: Bool )
134+ function manipulate (
135+ df:: DTable , @nospecialize (cs... ); copycols:: Bool , keeprows:: Bool , renamecols:: Bool
136+ )
123137 cs_vec = []
124138 for v in cs
125139 if v isa AbstractVecOrMat{<: Pair }
@@ -128,8 +142,12 @@ function manipulate(df::DTable, @nospecialize(cs...); copycols::Bool, keeprows::
128142 push! (cs_vec, v)
129143 end
130144 end
131- return _manipulate (df, Any[normalize_selection (index (df), make_pair_concrete (c), renamecols) for c in cs_vec],
132- copycols, keeprows)
145+ return _manipulate (
146+ df,
147+ Any[normalize_selection (index (df), make_pair_concrete (c), renamecols) for c in cs_vec],
148+ copycols,
149+ keeprows,
150+ )
133151end
134152
135153# Not copied - full custom implementation
@@ -156,13 +174,12 @@ function _manipulate(df::DTable, normalized_cs::Vector{Any}, copycols::Bool, kee
156174 # ########
157175
158176 colresults = Dict {Int,Any} (
159- k => fetch (Dagger. spawn (length, v)) == 1 ? fetch (v) : v
160- for (k, v) in colresults
177+ k => fetch (Dagger. spawn (length, v)) == 1 ? fetch (v) : v for (k, v) in colresults
161178 )
162179
163180 mapmask = [
164- haskey (colresults, x) && colresults[x] isa Dagger. EagerThunk
165- for (x, _) in enumerate (normalized_cs)
181+ haskey (colresults, x) && colresults[x] isa Dagger. EagerThunk for
182+ (x, _) in enumerate (normalized_cs)
166183 ]
167184
168185 mappable_part_of_normalized_cs = filter (x -> ! mapmask[x[1 ]], collect (enumerate (normalized_cs)))
@@ -204,28 +221,33 @@ function _manipulate(df::DTable, normalized_cs::Vector{Any}, copycols::Bool, kee
204221end
205222
206223# Not copied - full custom implementation
207- function manipulate (dt:: DTable , args:: AbstractVector{Int} ; copycols:: Bool , keeprows:: Bool , renamecols:: Bool )
224+ function manipulate (
225+ dt:: DTable , args:: AbstractVector{Int} ; copycols:: Bool , keeprows:: Bool , renamecols:: Bool
226+ )
208227 colidx = first (args)
209228 colname = Tables. columnnames (Tables. columns (dt))[colidx]
210- map (r -> (; colname => Tables. getcolumn (r, colidx)), dt)
229+ return map (r -> (; colname => Tables. getcolumn (r, colidx)), dt)
211230end
212231
213232# Copied as is from DataFrames.jl
214- function manipulate (df:: DTable , c:: MultiColumnIndex ; copycols:: Bool , keeprows:: Bool ,
215- renamecols:: Bool )
233+ function manipulate (
234+ df:: DTable , c:: MultiColumnIndex ; copycols:: Bool , keeprows:: Bool , renamecols:: Bool
235+ )
216236 if c isa AbstractVector{<: Pair }
217- return manipulate (df, c... , copycols= copycols, keeprows= keeprows,
218- renamecols= renamecols)
237+ return manipulate (df, c... ; copycols= copycols, keeprows= keeprows, renamecols= renamecols)
219238 else
220- return manipulate (df, index (df)[c], copycols= copycols, keeprows= keeprows,
221- renamecols= renamecols)
239+ return manipulate (
240+ df, index (df)[c]; copycols= copycols, keeprows= keeprows, renamecols= renamecols
241+ )
222242 end
223243end
224244
225245# Copied as is from DataFrames.jl
226- manipulate (df:: DTable , c:: ColumnIndex ; copycols:: Bool , keeprows:: Bool , renamecols:: Bool ) =
227- manipulate (df, Int[index (df)[c]], copycols= copycols, keeprows= keeprows, renamecols= renamecols)
228-
246+ function manipulate (df:: DTable , c:: ColumnIndex ; copycols:: Bool , keeprows:: Bool , renamecols:: Bool )
247+ return manipulate (
248+ df, Int[index (df)[c]]; copycols= copycols, keeprows= keeprows, renamecols= renamecols
249+ )
250+ end
229251
230252"""
231253 select(df::DTable, args...; copycols::Bool=true, renamecols::Bool=true)
@@ -241,6 +263,12 @@ please file an issue with reproduction steps and data.
241263
242264Please refer to DataFrames documentation for more details on usage.
243265"""
244- select (df:: DTable , @nospecialize (args... ); copycols:: Bool = true , renamecols:: Bool = true ) =
245- manipulate (df, map (x -> broadcast_pair (df, x), args)... ,
246- copycols= copycols, keeprows= true , renamecols= renamecols)
266+ function select (df:: DTable , @nospecialize (args... ); copycols:: Bool = true , renamecols:: Bool = true )
267+ return manipulate (
268+ df,
269+ map (x -> broadcast_pair (df, x), args)... ;
270+ copycols= copycols,
271+ keeprows= true ,
272+ renamecols= renamecols,
273+ )
274+ end
0 commit comments