def traverse(self, index=<NUM_LIT:0>):
if index < len(self.nodes):<EOL><INDENT>for entity in self.nodes[index]:<EOL><INDENT>for next_result in self.traverse(index=index+<NUM_LIT:1>):<EOL><INDENT>if isinstance(entity, list):<EOL><INDENT>yield entity + next_result<EOL><DEDENT>else:<EOL><INDENT>yield [entity] + next_result<EOL><DEDENT><DEDENT><DEDENT><DEDENT>else:<EOL><INDENT>yield []<EOL><DEDENT>
This is used to produce a list of lists where each each item
        in that list is a diffrent combination of items from the lists
        within with every combination of such values.

        Args:
            index (int) : the index at witch to start the list.
                Note this is used only in the function as a processing

        Returns:
            list : is every combination.