I am seeing what looks like a similar problem trying to use PyPlot in 
version 0.4. When I issue 'using PyPlot', I get 

ERROR: LoadError: LoadError: LoadError: MethodError: `convert` has no 
method matching convert(::Type{Ptr{UInt8}}, ::ASCIIString)
This may have arisen from a call to the constructor Ptr{UInt8}(...),
since type constructors fall back to convert methods.
Closest candidates are:
  convert{T}(::Type{Ptr{T}}, ::UInt32)
  convert{T}(::Type{Ptr{T}}, ::Int32)
  convert{T}(::Type{Ptr{T}}, ::Ptr{T})

in call at /home/ian/.julia/v0.4/PyCall/src/pytype.jl:92. 

I made a couple of feeble attempts to fix this but no luck.

julia> versioninfo()
Julia Version 0.4.0-dev+3825
Commit 8cb0c50* (2015-03-14 23:55 UTC)
Platform Info:
  System: Linux (i686-linux-gnu)
  CPU: Intel(R) Core(TM)2 Duo CPU     E7500  @ 2.93GHz
  WORD_SIZE: 32
  BLAS: libopenblas (DYNAMIC_ARCH NO_AFFINITY Penryn)
  LAPACK: libopenblas
  LIBM: libopenlibm
  LLVM: libLLVM-3.3

Ian



On Friday, March 13, 2015 at 1:56:03 PM UTC-4, René Donner wrote:
>
> That string does represent a filename, doesn't it? Do you obtain that by 
> calling readdir() at some point perhaps? This can now return a 
> Array{Union(UTF8String,ASCIIString),1}, which I believe was not the case in 
> 0.3. (At least I had to adapt my code at some point to deal with this) 
>
>
>
> Am 13.03.2015 um 18:43 schrieb Phil Tomson <[email protected] 
> <javascript:>>: 
>
> > 
> > 
> > On Thursday, March 12, 2015 at 9:00:45 PM UTC-7, Avik Sengupta wrote: 
> > I think this is simply due to your passing a UTF8String, while your 
> function defined only for ASCIIString. Since there is no function defined 
> for UTF8String, julia falls back to the default constructor that calls 
> convert. 
> > 
> > julia> type A 
> >          a::ASCIIString 
> >          b::Int 
> >        end 
> > 
> > julia> function A(fn::ASCIIString) 
> >            A(fn, length(fn) 
> >        end 
> > ERROR: syntax: missing comma or ) in argument list 
> > 
> > julia> function A(fn::ASCIIString) 
> >            A(fn, length(fn)) 
> >        end 
> > A 
> > 
> > julia> A("X") 
> > A("X",1) 
> > 
> > julia> A("∞") 
> > ERROR: MethodError: `convert` has no method matching convert(::Type{A}, 
> ::UTF8String) 
> > This may have arisen from a call to the constructor A(...), 
> > since type constructors fall back to convert methods. 
> > Closest candidates are: 
> >   convert{T}(::Type{T}, ::T) 
> > 
> >  in call at no file 
> > 
> > 
> > #Now try this: 
> > 
> > julia> type A 
> >          a::AbstractString 
> >          b::Int 
> >        end 
> > 
> > julia> function A(fn::AbstractString) 
> >            A(fn, length(fn)) 
> >        end 
> > A 
> > 
> > julia> A("X") 
> > A("X",1) 
> > 
> > julia> A("∞") 
> > A("∞",1) 
> > 
> > Not that using AbstractString is only one way to solve this, which may 
> or may not be appropriate for your use case. The code above is simply to 
> demonstrate the issue at hand. 
> > 
> > 
> > Why would this have changed in 0.4, though? 
> > 
> > Running in Julia 0.4: 
> > julia> typeof("string") 
> > ASCIIString 
> > 
> > so a quoted string still has the same type as it did before. 
> > 
> > 
> >   
> > 
> > 
> > On Thursday, 12 March 2015 23:43:58 UTC, Phil Tomson wrote: 
> > I thought I'd give 0.4 a spin to try out the new garbage collector. 
> > 
> > On my current codebase developed with 0.3 I ran into several warnings 
> (float32() should now be Float32() - that sort of thing) 
> > 
> > And then this error: 
> > 
> > ERROR: LoadError: LoadError: LoadError: LoadError: LoadError: 
> MethodError: `convert` has no method matching convert(::Type{Img.ImgHSV}, 
> ::UTF8String) 
> > This may have arisen from a call to the constructor Img.ImgHSV(...), 
> > since type constructors fall back to convert methods. 
> > Closest candidates are: 
> >   convert{T}(::Type{T}, ::T) 
> > 
> > After poking around New Language Features and the list here a bit it 
> seems that there are changes to how overloaded constructors work. 
> > 
> > In my case I've got: 
> > 
> > type ImgHSV 
> >   name::ASCIIString 
> >   data::Array{HSV{Float32},2}   
> >   #data::Array{IntHSV,2}   
> >   height::Int64 
> >   wid::Int64 
> >   h_mean::Float32 
> >   s_mean::Float32 
> >   v_mean::Float32 
> >   h_std::Float32 
> >   s_std::Float32 
> >   v_std::Float32 
> > end 
> > 
> > # Given a filename of an image file, construct an ImgHSV 
> > function ImgHSV(fn::ASCIIString) 
> >   name,ext = splitext(basename(fn)) 
> >   source_img_hsv = Images.data(convert(Image{HSV{Float64}},imread(fn))) 
> >   #scale all the values up from (0->1) to (0->255) 
> >   source_img_scaled = map(x-> HSV( ((x.h/360)*255),(x.s*255),(x.v*255)), 
> >                           source_img_hsv) 
> >   img_ht  = size(source_img_hsv,2) 
> >   img_wid = size(source_img_hsv,1) 
> >   h_mean = (mean(map(x-> x.h,source_img_hsv)/360)*255) 
> >   s_mean = (mean(map(x-> x.s,source_img_hsv))*255) 
> >   v_mean = (mean(map(x-> x.v,source_img_hsv))*255) 
> >   h_std  = (std(map(x-> x.h,source_img_hsv)/360)*255) 
> >   s_std  = (std(map(x-> x.s,source_img_hsv))*255) 
> >   v_std  = (std(map(x-> x.v,source_img_hsv))*255) 
> >   ImgHSV( 
> >     name, 
> >     float32(source_img_scaled), 
> >     img_ht, 
> >     img_wid, 
> >     h_mean, 
> >     s_mean, 
> >     v_mean, 
> >     h_std, 
> >     s_std, 
> >     v_std 
> >   ) 
> > end 
> > 
> > Should I rename this function to something like buildImgHSV so it's not 
> actually a constructor and convert doesn't enter the picture? 
> > 
> > Phil 
>
>

Reply via email to