Yichao,

That works - thanks. Why does it work, though?


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] 
> <javascript:>> 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