Hello, I'm using this package through LsqFit.jl. I have a 3d parameter vector, and would like to speed up the code by leveraging StaticArrays.jl, which basically come for free by passing a StaticVector instead of a Vector. In order to support in-place operations, we can further pass an MVector, i.e. a modifiable statically sized array. However, as seen below, Static Arrays always lead to ImmutableDiffResults.
|
""" |
|
DiffResult(value::Union{Number,AbstractArray}, derivs::Tuple{Vararg{Number}}) |
|
DiffResult(value::Union{Number,AbstractArray}, derivs::Tuple{Vararg{AbstractArray}}) |
|
|
|
Return `r::DiffResult`, with output value storage provided by `value` and output derivative |
|
storage provided by `derivs`. |
|
|
|
In reality, `DiffResult` is an abstract supertype of two concrete types, `MutableDiffResult` |
|
and `ImmutableDiffResult`. If all `value`/`derivs` are all `Number`s or `StaticArray`s, |
|
then `r` will be immutable (i.e. `r::ImmutableDiffResult`). Otherwise, `r` will be mutable |
|
(i.e. `r::MutableDiffResult`). |
|
|
|
Note that `derivs` can be provide in splatted form, i.e. `DiffResult(value, derivs...)`. |
|
""" |
|
DiffResult |
|
|
|
DiffResult(value::Number, derivs::Tuple{Vararg{Number}}) = ImmutableDiffResult(value, derivs) |
|
DiffResult(value::Number, derivs::Tuple{Vararg{StaticArray}}) = ImmutableDiffResult(value, derivs) |
|
DiffResult(value::StaticArray, derivs::Tuple{Vararg{StaticArray}}) = ImmutableDiffResult(value, derivs) |
|
DiffResult(value::Number, derivs::Tuple{Vararg{AbstractArray}}) = MutableDiffResult(value, derivs) |
|
DiffResult(value::AbstractArray, derivs::Tuple{Vararg{AbstractArray}}) = MutableDiffResult(value, derivs) |
|
DiffResult(value::Union{Number,AbstractArray}, derivs::Union{Number,AbstractArray}...) = DiffResult(value, derivs) |
I've done the following overloads to make it work for my case:
DiffResult(value::MArray, derivs::Tuple{Vararg{MArray}}) = MutableDiffResult(value, derivs)
DiffResult(value::Union{Number, AbstractArray}, derivs::Tuple{Vararg{MVector}}) = MutableDiffResult(value, derivs)
I think this is a useful feature and currently can be considered a bug. If there's interest in merging this I can also open a PR.
Hello, I'm using this package through
LsqFit.jl. I have a 3d parameter vector, and would like to speed up the code by leveragingStaticArrays.jl, which basically come for free by passing aStaticVectorinstead of aVector. In order to support in-place operations, we can further pass anMVector, i.e. a modifiable statically sized array. However, as seen below, Static Arrays always lead toImmutableDiffResults.DiffResults.jl/src/DiffResults.jl
Lines 31 to 52 in 80f085e
I've done the following overloads to make it work for my case:
I think this is a useful feature and currently can be considered a bug. If there's interest in merging this I can also open a PR.