@@ -361,18 +361,25 @@ Maximum and minimum.
361361 maximum(o)
362362 minimum(o)
363363"""
364+ # T is type to store data, S is type of single observation.
365+ # E.g. you may want to accept any Number even if you are storing values as Float64
364366mutable struct Extrema{T,S} <: OnlineStat{S}
365367 min:: T
366368 max:: T
367369 n:: Int
370+ function Extrema (T:: Type = Float64)
371+ a, b, S = extrema_init (T)
372+ new {T,S} (a, b, 0 )
373+ end
368374end
369- Extrema (T:: Type{<:Number} = Float64) = Extrema {T,Number} (typemax .(T), typemin .(T), 0 )
370- Extrema (T:: Type ) = Extrema {T,T} (typemax .(T), typemin .(T), 0 )
371- Extrema (initmin:: T , initmax:: T ) where {T} = Extrema {T} (initmin, initmax, 0 )
375+ extrema_init (T:: Type{<:Number} ) = typemax (T), typemin (T), Number
376+ extrema_init (T:: Type{String} ) = " " , " " , String
377+ extrema_init (T:: Type{Date} ) = typemax (Date), typemin (Date), Date
378+ extrema_init (T:: Type ) = rand (T), rand (T), T
372379function _fit! (o:: Extrema , y)
380+ (o. n += 1 ) == 1 && (o. min = o. max = y)
373381 o. min = min (o. min, y)
374382 o. max = max (o. max, y)
375- o. n += 1
376383end
377384function _merge! (o:: Extrema , o2:: Extrema )
378385 o. min = min (o. min, o2. min)
0 commit comments