Re: Jython question: RealTupleType throws TypeException(components must be non-null)

Hi Frank & Tom,

Actually, this problem appears to be a quirk in VisAD,
demonstrated by the following code snippet:

import visad.*;
public class GetRealTypeTest {
  public static void main(String[] args) {
    System.out.println(RealType.getRealType("r1", SI.second));
    System.out.println(RealType.getRealType("r1"));
    System.out.println(RealType.getRealType("r2"));
    System.out.println(RealType.getRealType("r2", SI.meter));
  }
}

This program outputs:
r1
r1
r2
null

What this means is that getRealType returns null if you try to
obtain a RealType with a given unit, when that RealType already
exists without the proper unit.

Indeed, checking the RealType.java source confirms this:

    RealType rt = getRealTypeByName(name);
    if (rt != null)
    {
      /*
       * Ensure that the previously-created instance
       * conforms to the input arguments.
       */
      if (!Unit.canConvert(u, rt.DefaultUnit))
        rt = null;
    }

So, since the JPython editor doesn't run the code in a
separate JVM by default, the RealTypes created when executing
Frank's code remain in memory, and if you run the program
again with the "SI.meter.divide(SI.second)" part uncommented,
speed will be null because it doesn't have a convertible unit.

My advice is to settle on which units your RealTypes will use
so that this problem doesn't come up.  If you need to fiddle
with the units for testing, I suggest you either use the
editor's "Launch JPython in a separate process" option, or
else from the command line, test your script with:

       java visad.python.RunJPython yo.py

-Curtis

At 01:23 PM 6/21/2002, Tom Whittaker wrote:
>So....it looks like there is some problem with the name "speed" related
>to the editor - have no ideas at this point, so I'll have to leave it to
>Curtis to comment on.
>
>On Fri, 21 Jun 2002, Frank Gibbons wrote:
>> from visad import *
>> from visad.python.JPythonMethods import *
>>
>> from visad.java2d import DisplayImplJ2D
>>
>> t = getRealType("time", SI.second)
>> h = getRealType("height", SI.meter)
>> speed = getRealType("speed")#, SI.meter.divide(SI.second))
>>
>> h_s_tuple = RealTupleType(h, speed)
>> func_t_tuple = FunctionType(t, h_s_tuple)
>>
>> throws:
>>
>> Traceback (innermost last):
>>    File "C:\VisADJython\example2_07.py", line 11, in ?
>> visad.TypeException: TupleType: components must be non-null
>>          at visad.TupleType.<init>(TupleType.java:58)
>>          at visad.RealTupleType.<init>(RealTupleType.java:171)


  • 2002 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the visad archives: