A type is defined as 
type Coefficients{T}
    raw::Vector{T}
    σ_0::T
    σ_T::T
    ρ::T
    ν::T
    Σ::Matrix{T}
    # because of this c'tor the type must be mutable 
    function Coefficients(vals::Vector{T})
        if length(vals) ≠ 10
            error("Must have exactly 10 parameters")
        end
        self = new(vals)
        self.σ_0 = exp(lnσ_0(self))
        self.σ_T = exp(lnσ_T(self))
        self.ρ = tanh(atanhρ(self))
        self.ν = exp(lnν(self))
        # chol doesn't work on SymTridiagonal                      
        self.Σ = Matrix(SymTridiagonal([ self.σ_0, self.σ_T].^2, [self.ρ * 
self.σ_0 * self.σ_T]))
        self
    end
end

But
julia> @time g = Calculus.gradient(RB.mylike, RB.troubleParamsInit.raw)
 ERROR: MethodError: `convert` has no method matching 
convert(::Type{RB.Coefficients{T}}, ::Array{Float64,1})
 This may have arisen from a call to the constructor RB.Coefficients{T}(...),
 since type constructors fall back to convert methods.
 Closest candidates are:
   call{T}(::Type{T}, ::Any)
   convert{T}(::Type{T}, !Matched::T)
  in logitlite at /home/ross/PCORI/trouble.jl:316
  in mylike at /home/ross/PCORI/trouble.jl:345
  in finite_difference! at 
/home/ross/.julia/v0.4/Calculus/src/finite_difference.jl:126
  in gradient at /home/ross/.julia/v0.4/Calculus/src/derivative.jl:14

The triggering line was
c = Coefficients(params)

Since Array{Float64,1} = Vector{Float64} I am puzzled that the inner 
constructor isn't called.
I also tried with  the inner constructor defined as 
  function Coefficients{T}(vals::Vector{T})

When I call this from my own code things work  OK.

Can anyone help me identify the problem, or even the solution :)

Thanks.
Ross Boylan

Reply via email to