cereja-project / cereja

Cereja is a bundle of useful functions we don't want to rewrite and .. just pure fun!
MIT License
28 stars 12 forks source link

Flatten fix #178

Closed dennymarcels closed 2 years ago

dennymarcels commented 2 years ago

Comportamento antes: (depth, array)

0 [[1, 2, 3], [], [[2, [3], 4], 6], [], [[[3, 4, [8], [[9, 10]]]]]] # array original
1 [1, 2, 3, [2, [3], 4], 6, [[3, 4, [8], [[9, 10]]]]]
2 [1, 2, 3, 2, [3], 4, 6, [[3, 4, [8], [[9, 10]]]]] # aqui era pra ter flattenizado a lista que começa com [[3, 4...
3 [1, 2, 3, 2, 3, 4, 6, [[3, 4, [8], [[9, 10]]]]]
4 [1, 2, 3, 2, 3, 4, 6, [3, 4, [8], [[9, 10]]]]

Comportamento agora:

0 [[1, 2, 3], [], [[2, [3], 4], 6], [], [[[3, 4, [8], [[9, 10]]]]]]
1 [1, 2, 3, [2, [3], 4], 6, [[3, 4, [8], [[9, 10]]]]]
2 [1, 2, 3, 2, [3], 4, 6, [3, 4, [8], [[9, 10]]]]
3 [1, 2, 3, 2, 3, 4, 6, 3, 4, [8], [[9, 10]]]
4 [1, 2, 3, 2, 3, 4, 6, 3, 4, 8, [9, 10]]

Também permite que a função flatten retorne o shape da lista ou array original, o que é necessário se a versão flattenizada precisa ser reshapeada depois para o shape original. O formato será um dicionário com cada nível (depth) e o respectivo comprimento de cada elemento. Por exemplo, para o array acima: {0: [5], 1: [3, 0, 2, 0, 1], 2: [3, 1], 3: [1, 4], 4: [1, 1], 5: [2]}

Se o depth passado como parâmetro da função for diferente de -1 ou menor que o depth máximo, o shape será abortado até aquele nível, por exemplo, para depth = 2: {0: [5], 1: [3, 0, 2, 0, 1], 2: [3, 1]}