Another followup: replacing spzeros(Float64,8,8) with zeros(Float64,8,8) in
the test results in a pass, even though both of them are derived
(evenually) from AbstractArray{Float64, 2}. I'm so confused.
On Wednesday, July 8, 2015 at 9:43:51 AM UTC-5, Seth wrote:
>
> As a followup: referencing T via info() in
> the MinCutVisitor(graph::SimpleGraph, distmx::AbstractArray) results in an
> error ("UndefVarError: T not defined"), but if I don't explicitly reference
> it, the tests pass. It appears that T is not "evaluated" if it's within the
> call to the inner constructor. Here's the code that works, and I can't
> explain it:
>
> function MinCutVisitor(graph::SimpleGraph, distmx::AbstractArray)
> n = nv(graph)
> MinCutVisitor(
> graph,
> falses(n),
> zeros(Int,n),
> typemax(T),
> zero(T),
> zero(Int),
> distmx,
> @compat(Vector{Int}())
> )
> end
>
>
>
> On Wednesday, July 8, 2015 at 7:45:40 AM UTC-5, Seth wrote:
>>
>> I don't have T as a global that I know of.
>>
>> Bug report (for reference) is
>> https://github.com/JuliaLang/julia/issues/12063
>>
>> Thanks.
>>
>> On Wednesday, July 8, 2015 at 7:42:59 AM UTC-5, Yichao Yu wrote:
>>>
>>> On Wed, Jul 8, 2015 at 8:32 AM, Seth <[email protected]> wrote:
>>> > Yichao,
>>> >
>>> > That works - thanks. Why does it work, though?
>>>
>>> My guess is that the default constructor couldn't infer the type
>>> parameter T so explicitly supplying it should make it work.
>>>
>>> Not sure what is the expected behavior (what should the default
>>> constructor be able to infer).
>>>
>>> P.S. do you have T as a global variable somewhere?
>>>
>>> P.P.S. I see your bug report.
>>>
>>> >
>>> >
>>> > On Tuesday, July 7, 2015 at 8:47:30 PM UTC-5, Yichao Yu wrote:
>>> >>
>>> >> Not sure what changed so it might worth a bug report/doc update but
>>> >> can you try this?
>>> >>
>>> >> function MinCutVisitor{T}(graph::SimpleGraph,
>>> distmx::AbstractArray{T, 2})
>>> >> n = nv(graph)
>>> >> MinCutVisitor{T}(
>>> >> graph,
>>> >> falses(n),
>>> >> zeros(Int,n),
>>> >> typemax(T),
>>> >> zero(T),
>>> >> zero(Int),
>>> >> distmx,
>>> >> @compat(Vector{Int}())
>>> >> )
>>> >> end
>>> >>
>>> >> I.e. add `{T}` to the call to the default constructor
>>> >>
>>> >>
>>> >> On Tue, Jul 7, 2015 at 8:05 PM, andrew cooke <[email protected]>
>>> wrote:
>>> >> >
>>> >> > what's T in the last chunk of code? you have typemax(T), but no T
>>> as a
>>> >> > type
>>> >> > parameter. is that really working?
>>> >> >
>>> >> >
>>> >> > On Tuesday, 7 July 2015 20:03:24 UTC-3, Seth wrote:
>>> >> >>
>>> >> >> I have the following code:
>>> >> >>
>>> >> >> type MinCutVisitor{T} <: AbstractMASVisitor
>>> >> >> graph::SimpleGraph
>>> >> >> parities::AbstractArray{Bool,1}
>>> >> >> colormap::Vector{Int}
>>> >> >> bestweight::T
>>> >> >> cutweight::T
>>> >> >> visited::Integer
>>> >> >> distmx::AbstractArray{T, 2}
>>> >> >> vertices::Vector{Int}
>>> >> >> end
>>> >> >>
>>> >> >> function MinCutVisitor{T}(graph::SimpleGraph,
>>> distmx::AbstractArray{T,
>>> >> >> 2})
>>> >> >> n = nv(graph)
>>> >> >> MinCutVisitor(
>>> >> >> graph,
>>> >> >> falses(n),
>>> >> >> zeros(Int,n),
>>> >> >> typemax(T),
>>> >> >> zero(T),
>>> >> >> zero(Int),
>>> >> >> distmx,
>>> >> >> @compat(Vector{Int}())
>>> >> >> )
>>> >> >> end
>>> >> >>
>>> >> >>
>>> >> >> and up until June 30th the outer constructor was working in 0.4:
>>> >> >>
>>> >> >> julia> g = Graph(8)
>>> >> >> {8, 0} undirected graph
>>> >> >>
>>> >> >>
>>> >> >> julia> LightGraphs.MinCutVisitor(g,spzeros(Float64,8,8))
>>> >> >> LightGraphs.MinCutVisitor{Float64}({8, 0} undirected
>>> >> >>
>>> >> >>
>>> graph,Bool[false,false,false,false,false,false,false,false],[0,0,0,0,0,0,0,0],Inf,0.0,0,8x8
>>>
>>>
>>> >> >> sparse matrix with 0 Float64 entries:,Int64[])
>>> >> >>
>>> >> >>
>>> >> >> Now it fails on Float64 but not with Int:
>>> >> >>
>>> >> >> julia> LightGraphs.MinCutVisitor(g,spzeros(Float64,8,8))
>>> >> >> ERROR: MethodError: `convert` has no method matching
>>> >> >> convert(::Type{LightGraphs.MinCutVisitor{T}}, ::LightGraphs.Graph,
>>> >> >> ::BitArray{1}, ::Array{Int64,1}, ::Float64, ::Float64, ::Int64,
>>> >> >> ::Base.SparseMatrix.SparseMatrixCSC{Float64,Int64},
>>> ::Array{Int64,1})
>>> >> >> This may have arisen from a call to the constructor
>>> >> >> LightGraphs.MinCutVisitor{T}(...),
>>> >> >> since type constructors fall back to convert methods.
>>> >> >> Closest candidates are:
>>> >> >>
>>> >> >>
>>> >> >>
>>> LightGraphs.MinCutVisitor{T}(::Union{LightGraphs.Graph,LightGraphs.DiGraph},
>>>
>>>
>>> >> >> ::AbstractArray{Bool,1}, ::Array{Int64,1}, ::T, ::T, ::Integer,
>>> >> >> ::AbstractArray{T,2}, ::Array{Int64,1})
>>> >> >>
>>> >> >>
>>> >> >>
>>> LightGraphs.MinCutVisitor{T}(::Union{LightGraphs.Graph,LightGraphs.DiGraph},
>>>
>>>
>>> >> >> ::AbstractArray{T,2})
>>> >> >> call{T}(::Type{T}, ::Any)
>>> >> >> ...
>>> >> >> in call at
>>> /Users/seth/.julia/v0.4/LightGraphs/src/maxadjvisit.jl:99
>>> >> >>
>>> >> >>
>>> >> >> julia> LightGraphs.MinCutVisitor(g,spzeros(Int,8,8))
>>> >> >> LightGraphs.MinCutVisitor{Int64}({8, 0} undirected
>>> >> >>
>>> >> >>
>>> graph,Bool[false,false,false,false,false,false,false,false],[0,0,0,0,0,0,0,0],9223372036854775807,0,0,8x8
>>>
>>>
>>> >> >> sparse matrix with 0 Int64 entries:,Int64[])
>>> >> >>
>>> >> >> However, if I remove the type parameterization from the outer
>>> >> >> constructor:
>>> >> >>
>>> >> >> function MinCutVisitor(graph::SimpleGraph, distmx::AbstractArray)
>>> >> >>
>>> >> >> n = nv(graph)
>>> >> >> MinCutVisitor(
>>> >> >> graph,
>>> >> >> falses(n),
>>> >> >> zeros(Int,n),
>>> >> >> typemax(T),
>>> >> >> zero(T),
>>> >> >> zero(Int),
>>> >> >> distmx,
>>> >> >> @compat(Vector{Int}())
>>> >> >> )
>>> >> >> end
>>> >> >>
>>> >> >>
>>> >> >> it works. Can someone tell me why this is?
>>>
>>