JuliaData / JuliaData/DataAPI.jl
Confusing `levels` fallback
Nobody has claimed this yet.
- Dominant language
- Julia
- Stars
- 35
- Forks
- 13
- PR merge metrics
- No merged PRs in 30d
Description
Looking at the concrete implementation of levels in CategoricalArrays, I see that this function conveniently extracts possible levels from both arrays and individual values:
julia> a = CategoricalArray(["abc", "def", "abc"])
3-element CategoricalArray{String,1,UInt32}:
"abc"
"def"
"abc"
julia> x = a[1]
CategoricalValue{String, UInt32} "abc"
julia> levels(a)
2-element Vector{String}:
"abc"
"def"
julia> levels(x)
2-element Vector{String}:
"abc"
"def"
However, the fallback implemented in DataAPI itself is only correct for collections, not individual values:
# like unique(x), makes sense?
julia> levels(["abc", "def", "abc"])
2-element Vector{String}:
"abc"
"def"
# makes no sense:
julia> levels("abc")
3-element Vector{Char}:
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
'b': ASCII/Unicode U+0062 (category Ll: Letter, lowercase)
'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
# especially confusing given that:
julia> x == "abc"
true
Maybe, the fallback shouldn't exist at all, and something like haslevels(x)::Bool added instead?
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the DataAPI levels fallback and the Julia examples in this issue. Decide the intended behavior for individual values versus collections, including whether a haslevels API is needed, then define focused tests for the chosen contract; no specific file or test is named.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- julia
- Domain
- api, data
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100