codon icon indicating copy to clipboard operation
codon copied to clipboard

Bug:List to tuple conversion

Open jordi-petit opened this issue 1 year ago • 4 comments

Dear developers,

It seems to me that Codon is unable to perform a simple conversion from a list to a tuple. Here is a minimal example:

l = [1, 2]
t = tuple[int, int](l)
print(t)

The Python output is obviously (1, 2), but Codon 0.16.3 complains with this error:

b.py:2:5-23: error: 'Tuple[int,int]' object has no method '__new__' with arguments (List[int])

This is a major nuissance as, many times, lists must be converted to tuples to insert them into dicts.

jordi-petit avatar Aug 01 '24 09:08 jordi-petit

From Codon stdlib source I see it has DynamicTuple that can be initialized from the list (Codon 0.17.0).

On the other side, lists in Codon are hashable (with the hash based on all the values in the list), so they can be used as keys in maps. Any other list that is equal to the key list in the map will match.

lst = [1,2,3]
tup = DynamicTuple(lst)

print(lst)
print(tup)

map_lst_key = {lst: 1}
map_tup_key = {tup: 1}

print(map_lst_key)
print(map_tup_key)

output

[1, 2, 3]
(1, 2, 3)
{[1, 2, 3]: 1}
{(1, 2, 3): 1}

avitkauskas avatar Aug 28 '24 08:08 avitkauskas

Thanks for your answer and mentioning DynamicTuple and lists as hashable keys, which I did not know about.

However, DynamicTuple is a Codon only feature not available in regular Python. It would still be nice to have a way to convert homogenous lists to tuples to improve compatibility.

jordi-petit avatar Sep 05 '24 07:09 jordi-petit

From the documentation (https://docs.exaloop.io/codon/general/differences):

  • Tuples: Since tuples compile down to structs, tuple lengths must be known at compile time, meaning you can't convert an arbitrarily-sized list to a tuple, for instance.

That's why DynamicTuple exists, and why no convertion of lists to tuples.

avitkauskas avatar Sep 20 '24 07:09 avitkauskas

Hello @jordi-petit

DynamicTuple is not yet intended for use in production.

I will need to add special constructors for this; should be done in the next release.

inumanag avatar Sep 23 '24 05:09 inumanag