[RFC] Make ForwardDiffNumbers subtypes of Real #73
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR resolve #66 by defining
ForwardDiffNumber <: Real
, and does some definition bookkeeping to resolve ambiguity warnings and get the tests to pass.The most notable change (besides the titular one) is that some methods previously defined between
Real
andForwardDiffNumber
are now defined betweenExternalReal
andForwardDiffNumber
.ExternalReal
is defined in ForwardDiff as:This means that (in theory) custom
T<:Real
types should work, but only if they're defined before ForwardDiff is used/imported. It might be best to add "ForwardDiff doesn't support customT<:Real
types" in the docs to avoid this confusion all together. Thoughts? On a related note, it'd be helpful if someone else wanted to give the docs a once-over to make sure nothing else needs to be changed in the wake of this PR.Additionally, this PR (once again, in theory) allows one to have
Complex{T<:ForwardDiffNumber}
types, so if anybody wants to play around with those, I'd be interested to see how it turns out. I don't think the API methods (gradient
,hessian
, etc.) will work with complex functions, but experiments that work directly with the number types should be feasible.