Skip to content

Enhance promotion of SimpleRatio to work with FixedPointNumbers #18

@mkitti

Description

@mkitti

Could we enhance the promotion of SimpleRatio so that it can work with FixedPointNumbers? Many images are encoded in FixedPointNumbers and this would be useful to apply Interpolations to them directly.

Minimum Working Example:

julia> using Ratios, FixedPointNumbers

julia> SimpleRatio(5,3) * 0.035N0f8
ERROR: promotion of types SimpleRatio{Int64} and N0f8 failed to change any arguments
Stacktrace:
 [1] error(::String, ::String, ::String)
   @ Base .\error.jl:42
 [2] sametype_error(input::Tuple{SimpleRatio{Int64}, N0f8})
   @ Base .\promotion.jl:316
 [3] not_sametype(x::Tuple{SimpleRatio{Int64}, N0f8}, y::Tuple{SimpleRatio{Int64}, N0f8})
   @ Base .\promotion.jl:310
 [4] promote
   @ .\promotion.jl:293 [inlined]
 [5] *(x::SimpleRatio{Int64}, y::N0f8)
   @ Base .\promotion.jl:322
 [6] top-level scope
   @ REPL[51]:1

Motivating Example:
xref: JuliaMath/Interpolations.jl#413
cc: @johnnychen94

julia> using FixedPointNumbers, Interpolations

julia> r = reinterpret(N0f8,[0x73, 0x94, 0x66, 0x1e])
4-element reinterpret(N0f8, ::Vector{UInt8}):
 0.451N0f8
 0.58N0f8
 0.4N0f8
 0.118N0f8

julia> itp = interpolate(r, BSpline(Quadratic(Flat(OnGrid()))));

julia> itp
4-element interpolate(OffsetArray(::Array{N0f8,1}, 0:5), BSpline(Quadratic(Flat(OnGrid())))) with element type Float64:
Error showing value of type Interpolations.BSplineInterpolation{Float64, 1, OffsetArrays.OffsetVector{N0f8, Vector{N0f8}}, BSpline{Quadratic{Flat{OnGrid}}}, Tuple{Base.OneTo{Int64}}}:
ERROR: promotion of types Ratios.SimpleRatio{Int64} and N0f8 failed to change any arguments
Stacktrace:
  [1] error(::String, ::String, ::String)
    @ Base .\error.jl:42
  [2] sametype_error(input::Tuple{Ratios.SimpleRatio{Int64}, N0f8})
    @ Base .\promotion.jl:316
  [3] not_sametype(x::Tuple{Ratios.SimpleRatio{Int64}, N0f8}, y::Tuple{Ratios.SimpleRatio{Int64}, N0f8})
    @ Base .\promotion.jl:310
  [4] promote
    @ .\promotion.jl:293 [inlined]
  [5] *(x::Ratios.SimpleRatio{Int64}, y::N0f8)
    @ Base .\promotion.jl:322

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions