Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Slicing a Python list converted from Java fails #24

Open
ctrueden opened this issue Feb 5, 2021 · 4 comments
Open

Slicing a Python list converted from Java fails #24

ctrueden opened this issue Feb 5, 2021 · 4 comments

Comments

@ctrueden
Copy link
Member

ctrueden commented Feb 5, 2021

>>> jl = ArrayList([1, 3, 5, 7, 9])
>>> jl.toString()
'[1, 3, 5, 7, 9]'
>>> pl = scyjava.to_python(jl)
>>> type(pl)
<class 'scyjava.JavaList'>
>>> print(pl)
[1, 3, 5, 7, 9]
>>> pl[:]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/curtis/miniconda3/envs/i2k-2020-pyimagej/lib/python3.8/site-packages/scyjava/__init__.py", line 330, in __getitem__
    return to_python(self.jobj.get(key), gentle=True)
TypeError: No matching overloads found for java.util.ArrayList.get(slice), options are:
	public java.lang.Object java.util.ArrayList.get(int)
@imagejan
Copy link
Member

Interestingly, the following both work:

>>> jl[:]
<java object 'java.util.ArrayList.SubList'>
>>> print(jl[:])
[1, 3, 5, 7, 9]
>>> nl = list(pl)
>>> nl[:]
[1, 3, 5, 7, 9]

@imagejan
Copy link
Member

Probably would require copying the slice logic from here:

https://github.com/jpype-project/jpype/blob/8a32c42373ca10e0aa587d5fab0065dab52f94c6/jpype/_jcollection.py#L89-L96

@ctrueden what's the reason we still have JavaCollection, JavaList etc. in scyjava? Is there additional functionality to what JPype brings?

@ctrueden
Copy link
Member Author

ctrueden commented Feb 19, 2021

what's the reason we still have JavaCollection, JavaList etc. in scyjava? Is there additional functionality to what JPype brings?

Lack of testing, and maintenance of the status quo. I'd be happy to get rid of them if we beef up unit tests to prove that JPype is strictly better. Or if we find advantages to keeping them, perhaps they could be slimmed down to extend some JPype data structures where feasible.

@Thrameos
Copy link

JPype collections should be fully supporting of Python collections API or at least as much as it is possible using Java's available functions. You can add additional functionality through customizers like the ones in _jcollection.

For example, if you wish to add a toPython() method to String[] which returns a "list of str" just define the function in a class and add the JImplementationFor decorator so it monkey patches it in. I don't generally add anything beyond the minimum to satisfy the Python contracts, but jpype does support multiple user installed customizer to any Java type so long as there are no implementation conflicts. In some projects I have "jdouble[]" overloaded with math operations.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants