AbstractNumbers.jl

Define your own number types in Julia super easily!
Author SimonDanisch
Popularity
12 Stars
Updated Last
5 Months Ago
Started In
November 2017

AbstractNumbers

Build Status

Coverage Status

codecov.io

There are a lot of functions one needs to define on a custom number type to make it work just like a julia Base number. Namely, around 160 functions, with quite a few methods.

With AbstractNumbers, this is all you need to start the life of a new, wonderful Number type:

using AbstractNumbers, SpecialFunctions
using Base.Test

struct MyNumber{T} <: AbstractNumbers.AbstractNumber{T}
    number::T
end

Base.convert(::Type{Number}, x::MyNumber) = x.number
AbstractNumbers.basetype(::Type{<: MyNumber}) = MyNumber

Now, MyNumber will have all functions defined for it :) If you need some functions to behave diferently, just overload those functions with your concrete type!

Implementation

Right now, the overloads of the AbstractNumber types are generated with a script that prints out the expressions as string. I purposefully decided against the usage of a macro for two reasons:

  1. I got quickly annoyed by the stack traces and not being able to immediately see what's going on - which is much easier when having all functions written out

  2. I need to dynamically extract some attributes from the functions before emitting methods for it. This needs some supervision and should just be done everytime Julia Base changes - so it shouldn't be part of a macro, hence I'm stuck with some kind of generator script anyways. Instead of mixing the macro approach with a generator approach, I just went full generator!

Used By Packages

No packages found.