import collections
import numpy as np
import pytest

from psyneulink.globals.utilities import convert_all_elements_to_np_array


@pytest.mark.parametrize(
    'arr, expected',
    [
        ([[0], [0, 0]], np.array([np.array([0]), np.array([0, 0])])),
        # should test these but numpy cannot easily create an array from them
        # [np.ones((2,2)), np.zeros((2,1))]
        # [np.array([[0]]), np.array([[[ 1.,  1.,  1.], [ 1.,  1.,  1.]]])]

    ]
)
def test_convert_all_elements_to_np_array(arr, expected):
    converted = convert_all_elements_to_np_array(arr)

    # no current numpy methods can test this
    def check_equality_recursive(arr, expected):
        if (
            not isinstance(arr, collections.Iterable)
            or (isinstance(arr, np.ndarray) and arr.ndim == 0)
        ):
            assert arr == expected
        else:
            assert isinstance(expected, type(arr))
            assert len(arr) == len(expected)

            for i in range(len(arr)):
                check_equality_recursive(arr[i], expected[i])

    check_equality_recursive(converted, expected)
