Re: Help - Compile[] problems
- To: mathgroup at smc.vnet.net
- Subject: [mg4897] Re: Help - Compile[] problems
- From: "David B. Wagner" <dbwagner at princon.com>
- Date: Fri, 4 Oct 1996 00:17:36 -0400
- Organization: Principia Consulting
- Sender: owner-wri-mathgroup at wolfram.com
(Please ignore the extra level of quoting in this message; my mail reader refused to do the right thing.) > FrankEye wrote: > > > > Compile[{{inputimage,_Real,2},{aA,_Real,2}, ...} > > ....etc.... > > , > > {{i,_Integer},{j,_Integer},{k,_Integer},{m,_Integer}, > > {indices,_Integer,2},{halfWts,_Integer},...etc...}] > > > > So, I try to Enter this Compile[] request, and get back messages such as > > the following: > > > > Compile::"cpintlt": > > "Range[i-halfWts,i+halfWts] at position <<2>> of > > image[[ Range[i-halfWts,i+halfWts], > > Range[j-halfWts,j+halfWts] ]] > > should be either a non-zero integer or a vector of non-zero integers; > > evaluation will use the uncompiled function." > > > > Well, I thought that my declaration of sub-expression types in the > > trailing portion of the Compile[] request would tell Mathematica what it > > is apparently not understanding. I *am* using Version 3.0 beta 3. > > It's not surprising that the compiler doesn't know what type Range will return, > since depending on the arguments, it could be a list of nearly any numeric types. > (I know, you could argue that the compiler ought to be able to infer this from the > declared types of the arguments to Range, but apparently it doesn't.) > > The way around this problem (in theory) is to add a declaration like > > {Range[__], _Integer, 1} > > in the last (declaration-list) argument to compile. This tells Compile that any > expression matching the pattern Range[__] returns a rank-1 tensor of integers. > > I say "in theory", because in Beta 2 this didn't always work. > > >Would the more bulletproof version 2.2.2 > > work? > > Version 2.2.2 doesn't understand tensor arguments. > > Dave Wagner > Principia Consulting > http://www.princon.com/princon ==== [MESSAGE SEPARATOR] ====