diff --git a/Project.toml b/Project.toml index 0a64b638..3e5a53bb 100644 --- a/Project.toml +++ b/Project.toml @@ -6,12 +6,22 @@ version = "0.9.0-dev" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +[weakdeps] +Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[extensions] +FixedPointNumbersStatisticsExt = "Statistics" + [compat] +# Update this version specifier when Statistics.jl v1.11.2 is released. +# https://github.com/JuliaStats/Statistics.jl/issues/165 +Statistics = "< 1.11.2" julia = "1" [extras] Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" +Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["Documenter", "Test"] +test = ["Documenter", "Statistics", "Test"] diff --git a/ext/FixedPointNumbersStatisticsExt.jl b/ext/FixedPointNumbersStatisticsExt.jl new file mode 100644 index 00000000..5cf777fa --- /dev/null +++ b/ext/FixedPointNumbersStatisticsExt.jl @@ -0,0 +1,13 @@ +module FixedPointNumbersStatisticsExt + +using FixedPointNumbers +import FixedPointNumbers: Treduce +using Statistics + +import Statistics +if isdefined(Statistics, :_mean_promote) + # https://github.com/JuliaMath/FixedPointNumbers.jl/pull/183 + Statistics._mean_promote(x::Real, y::FixedPoint) = Treduce(y) +end + +end diff --git a/src/FixedPointNumbers.jl b/src/FixedPointNumbers.jl index 927d84a5..bcfc56e7 100644 --- a/src/FixedPointNumbers.jl +++ b/src/FixedPointNumbers.jl @@ -9,7 +9,6 @@ import Base: ==, <, <=, -, +, *, /, ~, isapprox, signed, unsigned, copysign, flipsign, signbit, length -import Statistics # for _mean_promote import Random: Random, AbstractRNG, SamplerType, rand! import Base.Checked: checked_neg, checked_abs, checked_add, checked_sub, checked_mul, @@ -557,10 +556,6 @@ Base.mul_prod(x::FixedPoint, y::FixedPoint) = Treduce(x) * Treduce(y) Base.reduce_empty(::typeof(Base.mul_prod), ::Type{F}) where {F<:FixedPoint} = one(Treduce) Base.reduce_first(::typeof(Base.mul_prod), x::FixedPoint) = Treduce(x) -if isdefined(Statistics, :_mean_promote) - Statistics._mean_promote(x::Real, y::FixedPoint) = Treduce(y) -end - """ sd, ad = scaledual(s::Number, a) @@ -624,6 +619,10 @@ function rand!(r::AbstractRNG, A::Array{X}, ::SamplerType{X}) where {T, X <: Fix A end +if !isdefined(Base, :get_extension) + include("../ext/FixedPointNumbersStatisticsExt.jl") +end + if VERSION >= v"1.1" # work around https://github.com/JuliaLang/julia/issues/34121 include("precompile.jl") _precompile_()