ComplexityMeasures.jl
ComplexityMeasures.jl copied to clipboard
The function `lt` in `OrdinalPatternEncoding` isn't actually used
The OrdinalPatterns
documentation string promises that the user can provide a comparator function (defaults to lt = isless
) to determine how two elements of a state are deemed to be "equal" (useful to prevent bias when there are tied values).
This function lt
gets stored in the encoding::OrdinalPatternEncoding
field of the OrdinalPatterns
struct. However, the function isn't actually used in encode
. We did use it before, but after we transitioned to the formal encode
/decode
interface, we forgot to pass the argument on to the underlying sortperm!
call.
The fix is easy. Here's the source code:
function encode(encoding::OrdinalPatternEncoding{m}, χ::AbstractVector) where {m}
if m != length(χ)
throw(ArgumentError("Permutation order and length of input must match!"))
end
perm = sortperm!(encoding.perm, χ)
return permutation_to_integer(perm)
end
TODO:
- [ ] Pass on
lt
tosortperm!
when computing the permutation pattern.
We should add a simple test for this case, like for the permutation entropy of ones(1000)
; one would give 0 (the one with isless) while the other one would give maximum (with the random comparison).