def obfuscation_machine(use_unicode=False, identifier_length=<NUM_LIT:1>):
<EOL>lowercase = list(map(chr, range(<NUM_LIT>, <NUM_LIT>)))<EOL>uppercase = list(map(chr, range(<NUM_LIT>, <NUM_LIT>)))<EOL>if use_unicode:<EOL><INDENT>allowed_categories = ('<STR_LIT>', '<STR_LIT>', '<STR_LIT>', '<STR_LIT>', '<STR_LIT>')<EOL>big_list = list(map(chr, range(<NUM_LIT>, HIGHEST_UNICODE)))<EOL>max_chars = <NUM_LIT:1000> <EOL>combined = []<EOL>rtl_categories = ('<STR_LIT>', '<STR_LIT:R>') <EOL>last_orientation = '<STR_LIT:L>'       <EOL>while len(combined) < max_chars:<EOL><INDENT>char = choice(big_list)<EOL>if unicodedata.category(char) in allowed_categories:<EOL><INDENT>orientation = unicodedata.bidirectional(char)<EOL>if last_orientation in rtl_categories:<EOL><INDENT>if orientation not in rtl_categories:<EOL><INDENT>combined.append(char)<EOL><DEDENT><DEDENT>else:<EOL><INDENT>if orientation in rtl_categories:<EOL><INDENT>combined.append(char)<EOL><DEDENT><DEDENT>last_orientation = orientation<EOL><DEDENT><DEDENT><DEDENT>else:<EOL><INDENT>combined = lowercase + uppercase<EOL><DEDENT>shuffle(combined) <EOL>while True:<EOL><INDENT>for perm in permutations(combined, identifier_length):<EOL><INDENT>perm = "<STR_LIT>".join(perm)<EOL>if perm not in RESERVED_WORDS: <EOL><INDENT>yield perm<EOL><DEDENT><DEDENT>identifier_length += <NUM_LIT:1><EOL><DEDENT>
A generator that returns short sequential combinations of lower and
upper-case letters that will never repeat.

If *use_unicode* is ``True``, use nonlatin cryllic, arabic, and syriac
letters instead of the usual ABCs.

The *identifier_length* represents the length of the string to return using
the aforementioned characters.