On Thu, 24 Jan 2013, Alexey Ryabukhin wrote:

Just installed new version, but it still not works.
Could you show me your java and python code example?
Thank you.

Did you rebuild and resinstall JCC, then rebuild and resinstall your python extensions ?

------ foo.java ---------

public class foo {
    public double[][] getArrayPixels(int nx, int ny)
    {
        double array[][] = new double[nx][ny];
        int k = 0;
        for(int j = 0; j < ny; j++)
        {
            for(int i = 0; i < nx; i++)
                array[i][j] = k++;
        }
        return array;
    }


    public void putArrayPixels(double array[][])
    {
        int bx = array.length;
        int by = array[0].length;
        int k = 0;
        for(int j = 0; j < by; j++)
        {
            for(int i = 0; i < bx; i++)
                System.out.println("j: " + j + ", i: " + i + ": " + 
array[i][j]);
        }
} }

----- build ------
  $ javac foo.java
  $ python -m jcc --shared --arch x86_64 --classpath `pwd` foo --python foo 
--build
  $ python -m jcc --shared --arch x86_64 --classpath `pwd` foo --python foo 
--install
----- run ----------
  $ python
  >>> from foo import *
  >>> initVM()
  >>> a=foo()
  >>> a.putArrayPixels(a.getArrayPixels(5,5))

Andi..


2013/1/23 Andi Vajda <va...@apache.org>:

On Mon, 21 Jan 2013, Alexey Ryabukhin wrote:

Here is a Java part:

public double[][] getArrayPixels()
   {
       double array[][] = new double[nx][ny];
       int k = 0;
       for(int j = 0; j < ny; j++)
       {
           for(int i = 0; i < nx; i++)
               array[i][j] = pixels[k++];
       }

       return array;
   }


public void putArrayPixels(double array[][])
   {
       int bx = array.length;
       int by = array[0].length;
       int k = 0;
       for(int j = 0; j < by; j++)
       {
           for(int i = 0; i < bx; i++)
               pixels[k++] = array[i][j];
       }

   }



Python part:

a = p.ImageAccess(5, 5).getArrayPixels()
print a
JArray<object>[<Object: [D@14efcb0>, <Object: [D@af8eaa>, <Object:
[D@1bf4061>, <Object: [D@11ba64d>, <Object: [D@432685>]
This part works fine, I can cast each object as JArray double



ijresize.ImageAccess(5, 5).putArrayPixels(a)
Produces error:

p.InvalidArgsError: (<type 'ImageAccess'>, 'putArrayPixels',
JArray<object>[<Object: [D@af8eaa>, <Object: [D@1bf4061>, <Object:
[D@11ba64d>, <Object: [D@432685>, <Object: [D@9609cc>])


The code parsing python parameter tuples didn't allow for nested arrays.
I added code to bypass array element checking when the array is in fact a
nested array and treat it as an array of java.lang.Object.

This is checked into rev 1437761 of pylucene trunk.
I modified your code to actually build and was able to pass a nested array
back and forth and examine its contents in both the Java and Python sides.

Andi..



2013/1/21 Andi Vajda <va...@apache.org>:


On Mon, 21 Jan 2013, Alexey Ryabukhin wrote:

I have a function in java code that returns double array[][].
In python I have this:
JArray<object>[<Object: [D@11ba64d>, <Object: [D@14efcb0>, <Object:
[D@432685>, <Object: [D@9609cc>, <Object: [D@5d62a4>]
Works fine.

But when I put it back to java it shows error:
self.putArrayPixels(self.getArrayPixels())
ijresize.InvalidArgsError: (<class '__main__.ia'>, 'putArrayPixels',
JArray<object>[<Object: [D@1869971>, <Object: [D@1c3cd93>, <Object:
[D@1ed790e>, <Object: [D@1a6bc76>, <Object: [D@19f1b1d>])





Is it possible somehow to do this?


I'm not sure I know what you mean. Could you please include a small Java
class + Python program that reproduces the problem ?

Thanks !

Andi..




Reply via email to