Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
# This file:
#   http://anggtwu.net/PYTHON/flatten_iterable.py.html
#   http://anggtwu.net/PYTHON/flatten_iterable.py
#          (find-angg "PYTHON/flatten_iterable.py")
# Author: Eduardo Ochs <eduardoochs@gmail.com>
#
# (defun e () (interactive) (find-angg "PYTHON/flatten_iterable.py"))
#
# (find-es "sympy" "luatree-matrices")
# (find-fline "~/LOGS/2024feb24.python" "https://bpa.st/B6J4K")

IGNORE_TYPE = (str, bytes)


def is_iterable(value):
    ''' Check if value is Iterable

        Type
            value: iterable
            return: bool

        Example
            >>> is_iterable('a')
            >>> is_iterable([1, 2, 3])
            True

            >>> is_iterable(1)
            >>> is_iterable(None)
            False
    '''
    try:
        iter(value)
    except TypeError:
        return False  # Time: 0.000004
    else:
        return True  # Time: 0.000002


def flatten(iterable, recursive=False, ignore_type=IGNORE_TYPE):
    ''' Flatten First or All Layers of "iterable"

        Type
            iterable:       Iterable
            recursive:      bool
            ignore_type:    tuple
            yeild:          iter
            return:         None

        Note
            version:        0.0.1

        Example
            >>> tuple(flatten(('key', ('value',))))
            ('key', 'value')

            >>> list(flatten(
            ... ['one', [b'two', b'three'], ['four', (5, (1, {'e': 'ee'}, (2, (3, ))), ['six'])]])
            ... )
            ['one', b'two', b'three', 'four', (5, (1, {'e': 'ee'}, (2, (3,))), ['six'])]

            >>> list(flatten(
            ... ['one', [b'two', b'three'], ['four', (5, (1, {'e': 'ee'}, (2, (3,))),
            ... ['six'])]], recursive=True))
            ['one', b'two', b'three', 'four', 5, 1, 'e', 2, 3, 'six']

            >>> list(flatten('one')
            >>> list(flatten('one', recursive=True)
            ['one']
    '''
    if is_iterable(iterable) and not isinstance(iterable, ignore_type):
        for it in iterable:
            if recursive:
                yield from flatten(it, recursive, ignore_type)
            elif is_iterable(it) and not isinstance(it, ignore_type):
                yield from it
            else:
                yield it
    else:  # As is.
        yield iterable


def func(*o):
    print(list(flatten(o)))



"""
* (eepitch-python)
* (eepitch-kill)
* (eepitch-python)
exec(open("flatten_iterable.py").read(), globals())
func(1)         # [1]
func((1, 2))    # [1, 2]
func([1, 2])    # [1, 2]

"""





# Local Variables:
# coding:  utf-8-unix
# End: