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?
