Hi Madeleine,
Is there any chance you have two versions of julia installed, and are running
the wrong one? (Confession: I make that mistake surprisingly frequently!) The
reason I ask is that on current master:
julia> methodswith(Array, kron)
0-element Array{Method,1}
In master (which is what you linked to) they have all been abstract-ized, yet
in the julia session you showed, the "closest candidates" list includes
several methods specific for `Array`.
Best,
--Tim
On Thursday, July 14, 2016 1:53:28 PM CDT Madeleine Udell wrote:
> Convex.jl defines an abstract type AbstractExpr, from which all important
> concrete types in the package are descended. We've defined a bunch of
> functions that allow users to treat AbstractExprs as though they were
> matrices: indexing, hcat, vcat, multiplication, addition, subtraction, etc.
> Can we use these to automatically get more advanced functions, like (for
> example) kron?
>
> The code for kron
> <https://github.com/JuliaLang/julia/blob/master/base/linalg/dense.jl#L134>
> uses only indexing and multiplication operators. But I'm not sure how to
> make AbstractExpr (and its subtypes) subtype AbstractMatrix{Float64} or
> subtype AbstractArray{Float64,2} to make this transition seamless.
>
> Simply defining
>
> abstract AbstractExpr <: AbstractArray{Float64,2}
>
> results in a method error: (Variable is defined as a subtype of
> AbstractExpr)
>
> julia> kron(A,B)
> ERROR: MethodError: `kron` has no method matching kron(::Array{Float64,2},
>
> ::Convex.Variable)
>
> Closest candidates are:
> kron(::Any, ::Any, ::Any, ::Any...)
> kron{T,S}(::Array{T,2}, ::Array{S,2})
> kron(::Union{Array{T,1},Array{T,2}}, ::Number)
>
> 1) Is it possible to have Convex's AbstractExpr inherit from AbstractArray?
> What other methods would we need to implement to make this work?
> 2) Is it a terrible idea, for reasons I haven't thought of?
>
> Thanks!
> Madeleine