def treefall(iterable):
num_elems = len(iterable)<EOL>for i in range(num_elems, -<NUM_LIT:1>, -<NUM_LIT:1>):<EOL><INDENT>for c in combinations(iterable, i):<EOL><INDENT>yield c<EOL><DEDENT><DEDENT>
Generate all combinations of the elements of iterable and its subsets.

Parameters
----------
iterable: list, set or dict or any iterable object

Returns
-------
A generator of all possible combinations of the iterable.

Example:
-------
>>> for i in treefall([1, 2, 3, 4, 5]): print(i)
>>> (1, 2, 3)
>>> (1, 2)
>>> (1, 3)
>>> (2, 3)
>>> (1,)
>>> (2,)
>>> (3,)
>>> ()