@@ -19,30 +19,56 @@ byrow(ds::AbstractDataset, ::typeof(count), col::ColumnIndex; by = isequal(true)
1919
2020# byrow(ds::AbstractDataset, ::typeof(anymissing), cols::MultiColumnIndex = names(ds, Union{Missing, Number})) = row_anymissing(ds, cols)
2121
22- function byrow(ds:: AbstractDataset , :: typeof (any), cols:: MultiColumnIndex = :; by = x-> isequal(true , x), threads = nrow(ds)> 1000 )
22+ function expand_Base_Fix(f, f2)
23+ if f isa Base. Fix2
24+ return _bool(x-> f. f(f2(x), f. x))
25+ elseif f isa Base. Fix1
26+ return _bool(x-> f. f(f. x, f2(x)))
27+ else
28+ return x-> f(f2(x))
29+ end
30+ end
31+
32+ function byrow(ds:: AbstractDataset , :: typeof (any), cols:: MultiColumnIndex = :; by = isequal(true ), threads = nrow(ds)> 1000 , mapformats = false )
2333 colsidx = index(ds)[cols]
2434 if by isa AbstractVector
25- bys = map(_bool, by)
35+ if mapformats
36+ bys = map((x,y)-> _bool(z-> x(getformat(ds, y)(z))), by, colsidx)
37+ else
38+ bys = map(_bool, by)
39+ end
2640 threads ? hp_row_any_multi(ds, bys, colsidx) : row_any_multi(ds, bys, colsidx)
2741 else
28- bys = repeat([_bool(by)], length(colsidx))
42+ if mapformats
43+ bys = map(y-> _bool(z-> by(getformat(ds, y)(z))), colsidx)
44+ else
45+ bys = repeat([_bool(by)], length(colsidx))
46+ end
2947 threads ? hp_row_any_multi(ds, bys, colsidx) : row_any_multi(ds, bys, colsidx)
3048 end
3149end
3250
33- byrow(ds:: AbstractDataset , :: typeof (any), col:: ColumnIndex ; by = x -> isequal(true , x ), threads = nrow(ds)> 1000 ) = byrow(ds, any, [col]; by = by, threads = threads)
51+ byrow(ds:: AbstractDataset , :: typeof (any), col:: ColumnIndex ; by = isequal(true ), threads = nrow(ds)> 1000 , mapformats = false ) = byrow(ds, any, [col]; by = by, threads = threads, mapformats = mapformats )
3452
35- function byrow(ds:: AbstractDataset , :: typeof (all), cols:: MultiColumnIndex = :; by = x -> isequal(true , x ), threads = nrow(ds)> 1000 )
53+ function byrow(ds:: AbstractDataset , :: typeof (all), cols:: MultiColumnIndex = :; by = isequal(true ), threads = nrow(ds)> 1000 , mapformats = false )
3654 colsidx = index(ds)[cols]
3755 if by isa AbstractVector
38- bys = map(_bool, by)
56+ if mapformats
57+ bys = map((x,y)-> expand_Base_Fix(x, getformat(ds, y)), by, colsidx)
58+ else
59+ bys = map(_bool, by)
60+ end
3961 threads ? hp_row_all_multi(ds, bys, colsidx) : row_all_multi(ds, bys, colsidx)
4062 else
41- bys = repeat([_bool(by)], length(colsidx))
63+ if mapformats
64+ bys = map(y-> expand_Base_Fix(by, getformat(ds, y)), colsidx)
65+ else
66+ bys = repeat([_bool(by)], length(colsidx))
67+ end
4268 threads ? hp_row_all_multi(ds, bys, colsidx) : row_all_multi(ds, bys, colsidx)
4369 end
4470end
45- byrow(ds:: AbstractDataset , :: typeof (all), col:: ColumnIndex ; by = x -> isequal(true , x ), threads = nrow(ds)> 1000 ) = byrow(ds, all, [col]; by = by, threads = threads)
71+ byrow(ds:: AbstractDataset , :: typeof (all), col:: ColumnIndex ; by = isequal(true ), threads = nrow(ds)> 1000 , mapformats = false ) = byrow(ds, all, [col]; by = by, threads = threads, mapformats = mapformats )
4672
4773byrow(ds:: AbstractDataset , :: typeof (isequal), cols:: MultiColumnIndex ; threads = nrow(ds)> 1000 ) = row_isequal(ds, cols, threads = threads)
4874byrow(ds:: AbstractDataset , :: typeof (findfirst), cols:: MultiColumnIndex ; by = identity, threads = nrow(ds)> 1000 ) = row_findfirst(ds, by, cols; threads = threads)
0 commit comments