def translate_abstract_actions_to_keys(self, abstract):
<EOL>if len(abstract) >= <NUM_LIT:2> and not isinstance(abstract[<NUM_LIT:1>], (list, tuple)):<EOL><INDENT>abstract = list((abstract,))<EOL><DEDENT>actions, axes = [], []<EOL>for a in abstract:<EOL><INDENT>first_key = self.action_space_desc[a[<NUM_LIT:0>]]["<STR_LIT>"][<NUM_LIT:0>]<EOL>if isinstance(first_key, (bytes, str)):<EOL><INDENT>actions.append((first_key, a[<NUM_LIT:1>]))<EOL><DEDENT>elif isinstance(first_key, tuple):<EOL><INDENT>axes.append((first_key[<NUM_LIT:0>], a[<NUM_LIT:1>] * first_key[<NUM_LIT:1>]))<EOL><DEDENT>else:<EOL><INDENT>raise TensorForceError("<STR_LIT>".format(a[<NUM_LIT:0>]))<EOL><DEDENT><DEDENT>return actions, axes<EOL>
Translates a list of tuples ([pretty mapping], [value]) to a list of tuples ([some key], [translated value])
each single item in abstract will undergo the following translation:

Example1:
we want: "MoveRight": 5.0
possible keys for the action are: ("Right", 1.0), ("Left", -1.0)
result: "Right": 5.0 * 1.0 = 5.0

Example2:
we want: "MoveRight": -0.5
possible keys for the action are: ("Left", -1.0), ("Right", 1.0)
result: "Left": -0.5 * -1.0 = 0.5 (same as "Right": -0.5)