Skip to content

Commit 512d1ec

Browse files
committed
remove special clauses for input timeseries
1 parent ef23961 commit 512d1ec

File tree

1 file changed

+19
-57
lines changed

1 file changed

+19
-57
lines changed

src/probabilities_estimators/histograms/rectangular_binning.jl

+19-57
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,13 @@ function decode_from_bin(bin, b::RectangularBinEncoding{B, T}) where {B, T<:Real
118118
end
119119

120120
##################################################################
121-
# Encoding bins using a *floating* (i.e. controlled by data) grid
121+
# Initialization of encodings
122122
##################################################################
123-
function RectangularBinEncoding(x::AbstractDataset{D,T}, b::RectangularBinning;
124-
n_eps = 2) where {D, T}
123+
# Data-controlled grid
124+
function RectangularBinEncoding(x, b::RectangularBinning; n_eps = 2)
125125
# This function always returns static vectors and is type stable
126+
D = dimension(x)
127+
T = eltype(x)
126128
ϵ = b.ϵ
127129
mini, maxi = minmaxima(x)
128130
v = ones(SVector{D,T})
@@ -144,72 +146,32 @@ function RectangularBinEncoding(x::AbstractDataset{D,T}, b::RectangularBinning;
144146
RectangularBinEncoding(b, mini, edgelengths, ci, li)
145147
end
146148

147-
function RectangularBinEncoding(x::AbstractVector{<:Real}, b::RectangularBinning; n_eps = 2)
148-
# This function always returns numbers and is type stable
149-
ϵ = b.ϵ
150-
mini, maxi = extrema(x)
151-
if ϵ isa AbstractFloat
152-
edgelength = ϵ
153-
elseif ϵ isa Int
154-
edgeslength_nonadjusted = (maxi - mini)/ϵ
155-
# Round-off occurs when encoding bins. Applying `nextfloat` twice seems to still
156-
# ensure that bins cover data. See comment above.
157-
edgelength = nextfloat(edgeslength_nonadjusted, n_eps)
158-
else
159-
error("Invalid ϵ for binning of a vector")
160-
end
161-
162-
RectangularBinEncoding(b, mini, edgelength)
163-
end
164-
165-
##################################################################
166-
# Encoding bins using a fixed (user-specified) grid
167-
##################################################################
168-
function RectangularBinEncoding(::AbstractVector{<:Real},
169-
b::FixedRectangularBinning{E}; n_eps = 2) where E
170-
171-
# This function always returns numbers and is type stable
172-
ϵmin, ϵmax = b.ϵmin, b.ϵmax
173-
mini = ϵmin
174-
if ϵmin isa AbstractFloat && ϵmax isa AbstractFloat
175-
edgelength_nonadjusted = (ϵmax - ϵmin) / b.N
176-
edgelength = nextfloat(edgelength_nonadjusted, n_eps)
177-
else
178-
error("Invalid ϵmin or ϵmax for binning of a vector")
179-
end
180-
181-
RectangularBinEncoding(b, mini, edgelength)
182-
end
183-
184-
function RectangularBinEncoding(::AbstractDataset{D, T},
185-
b::FixedRectangularBinning{E}, n_eps = 2) where {D, T, E}
149+
# fixed grid
150+
function RectangularBinEncoding(x, b::FixedRectangularBinning{E}; n_eps = 2) where {E}
151+
D = dimension(x)
152+
T = eltype(x)
153+
D length(E) && error("Dimension of data and fixed rectangular binning don't match!")
186154
# This function always returns static vectors and is type stable
187155
ϵmin, ϵmax = b.ϵmin, b.ϵmax
188-
if E <: Float64
189-
mini = SVector{D, Float64}(repeat([ϵmin], D))
190-
maxi = SVector{D, Float64}(repeat([ϵmax], D))
156+
if E <: Real
157+
mini = SVector{D, T}(repeat([ϵmin], D))
158+
maxi = SVector{D, T}(repeat([ϵmax], D))
191159
elseif E <: NTuple{D}
192-
mini = SVector{D, Float64}(ϵmin)
193-
maxi = SVector{D, Float64}(ϵmax)
160+
mini = SVector{D, T}(ϵmin)
161+
maxi = SVector{D, T}(ϵmax)
194162
else
195163
error("Invalid ϵmin or ϵmax for binning of a dataset")
196164
end
197-
198165
edgelengths_nonadjusted = @. (maxi .- mini) / b.N
199166
edgelengths = nextfloat.(edgelengths_nonadjusted, n_eps)
200-
201167
RectangularBinEncoding(b, mini, edgelengths)
202168
end
169+
203170
# This version exists if the given `ϵ`s are already tuples.
204171
# Then, the dataset doesn't need to be provided.
205-
function RectangularBinEncoding(b::FixedRectangularBinning{<:NTuple}, n_eps = 2)
206-
ϵmin, ϵmax = b.ϵmin, b.ϵmax
207-
D = length(ϵmin)
208-
mini = SVector{D, Float64}(ϵmin)
209-
maxi = SVector{D, Float64}(ϵmax)
210-
edgelengths_nonadjusted = @. (maxi .- mini) / b.N
211-
edgelengths = nextfloat.(edgelengths_nonadjusted, n_eps)
212-
RectangularBinEncoding(b, mini, edgelengths)
172+
function RectangularBinEncoding(b::FixedRectangularBinning{<:NTuple}; n_eps = 2)
173+
D = length(E)
174+
return RectangularBinEncoding(Dataset{D,Float64}(), b; n_eps)
213175
end
214176

215177
##################################################################

0 commit comments

Comments
 (0)