On Fri, Jul 10, 2015 at 9:35 AM, Seth <[email protected]> wrote:
> Andrew, would you mind sharing your insight here? It made things more
> confusing for me, and I don't know how to troubleshott this any further.
>

Well, since we already have an issue for this
https://github.com/JuliaLang/julia/issues/12063, let's continue all
discussions overthere.

>
> On Thursday, July 9, 2015 at 10:29:03 AM UTC-7, andrew cooke wrote:
>>
>>
>> ah, that makes a certain kind of sense.  thanks for the follow-up.
>>
>> On Wednesday, 8 July 2015 11:43:51 UTC-3, 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)
W>>>   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?

Reply via email to