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)
>   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