def _identify_iterable(core):
    """Specification for a list, tuple, numpy.ndarray."""
    if isinstance(core, numpy.ndarray) and not core.shape:
        return {(0,):core}, 1, (), core.dtype

    core = [chaospy.poly.base.Poly(a) for a in core]
    shape = (len(core),) + core[0].shape

    dtype = chaospy.poly.typing.dtyping(*[_.dtype for _ in core])

    dims = numpy.array([a.dim for a in core])
    dim = numpy.max(dims)
    if dim != numpy.min(dims):
        core = [chaospy.poly.dimension.setdim(a, dim) for a in core]

    out = {}
    for idx, core_ in enumerate(core):

        for key in core_.keys:

            if not key in out:
                out[key] = numpy.zeros(shape, dtype=dtype)
            out[key][idx] = core_.A[key]

    return out, dim, shape, dtype
Specification for a list, tuple, numpy.ndarray.