Skip to content

Commit 11346a9

Browse files
committed
remove special clauses for input timeseries
1 parent ef23961 commit 11346a9

File tree

1 file changed

+19
-62
lines changed

1 file changed

+19
-62
lines changed

src/probabilities_estimators/histograms/rectangular_binning.jl

+19-62
Original file line numberDiff line numberDiff line change
@@ -112,17 +112,14 @@ function decode(bin::Int, e::RectangularBinEncoding{B, V}) where {B, V}
112112
return (V(Tuple(cartesian)) .- 1) .* edgelengths .+ mini
113113
end
114114

115-
function decode_from_bin(bin, b::RectangularBinEncoding{B, T}) where {B, T<:Real}
116-
(; mini, edgelengths) = b
117-
return (T(Tuple(bin)[1]) - 1)*edgelengths + mini
118-
end
119-
120115
##################################################################
121-
# Encoding bins using a *floating* (i.e. controlled by data) grid
116+
# Initialization of encodings
122117
##################################################################
123-
function RectangularBinEncoding(x::AbstractDataset{D,T}, b::RectangularBinning;
124-
n_eps = 2) where {D, T}
118+
# Data-controlled grid
119+
function RectangularBinEncoding(x, b::RectangularBinning; n_eps = 2)
125120
# This function always returns static vectors and is type stable
121+
D = dimension(x)
122+
T = eltype(x)
126123
ϵ = b.ϵ
127124
mini, maxi = minmaxima(x)
128125
v = ones(SVector{D,T})
@@ -144,72 +141,32 @@ function RectangularBinEncoding(x::AbstractDataset{D,T}, b::RectangularBinning;
144141
RectangularBinEncoding(b, mini, edgelengths, ci, li)
145142
end
146143

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}
144+
# fixed grid
145+
function RectangularBinEncoding(x, b::FixedRectangularBinning{E}; n_eps = 2) where {E}
146+
D = dimension(x)
147+
T = eltype(x)
148+
D length(E) && error("Dimension of data and fixed rectangular binning don't match!")
186149
# This function always returns static vectors and is type stable
187150
ϵ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))
151+
if E <: Real
152+
mini = SVector{D, T}(repeat([ϵmin], D))
153+
maxi = SVector{D, T}(repeat([ϵmax], D))
191154
elseif E <: NTuple{D}
192-
mini = SVector{D, Float64}(ϵmin)
193-
maxi = SVector{D, Float64}(ϵmax)
155+
mini = SVector{D, T}(ϵmin)
156+
maxi = SVector{D, T}(ϵmax)
194157
else
195158
error("Invalid ϵmin or ϵmax for binning of a dataset")
196159
end
197-
198160
edgelengths_nonadjusted = @. (maxi .- mini) / b.N
199161
edgelengths = nextfloat.(edgelengths_nonadjusted, n_eps)
200-
201162
RectangularBinEncoding(b, mini, edgelengths)
202163
end
164+
203165
# This version exists if the given `ϵ`s are already tuples.
204166
# 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)
167+
function RectangularBinEncoding(b::FixedRectangularBinning{<:NTuple}; n_eps = 2)
168+
D = length(E)
169+
return RectangularBinEncoding(Dataset{D,Float64}(), b; n_eps)
213170
end
214171

215172
##################################################################

0 commit comments

Comments
 (0)