@staticmethod<EOL><INDENT>def _duplicated_isinstance_types(node):<DEDENT>
duplicated_objects = set()<EOL>all_types = collections.defaultdict(set)<EOL>for call in node.values:<EOL><INDENT>if not isinstance(call, astroid.Call) or len(call.args) != <NUM_LIT:2>:<EOL><INDENT>continue<EOL><DEDENT>inferred = utils.safe_infer(call.func)<EOL>if not inferred or not utils.is_builtin_object(inferred):<EOL><INDENT>continue<EOL><DEDENT>if inferred.name != "<STR_LIT>":<EOL><INDENT>continue<EOL><DEDENT>isinstance_object = call.args[<NUM_LIT:0>].as_string()<EOL>isinstance_types = call.args[<NUM_LIT:1>]<EOL>if isinstance_object in all_types:<EOL><INDENT>duplicated_objects.add(isinstance_object)<EOL><DEDENT>if isinstance(isinstance_types, astroid.Tuple):<EOL><INDENT>elems = [<EOL>class_type.as_string() for class_type in isinstance_types.itered()<EOL>]<EOL><DEDENT>else:<EOL><INDENT>elems = [isinstance_types.as_string()]<EOL><DEDENT>all_types[isinstance_object].update(elems)<EOL><DEDENT>return {<EOL>key: value for key, value in all_types.items() if key in duplicated_objects<EOL>}<EOL>
Get the duplicated types from the underlying isinstance calls.

        :param astroid.BoolOp node: Node which should contain a bunch of isinstance calls.
        :returns: Dictionary of the comparison objects from the isinstance calls,
                  to duplicate values from consecutive calls.
        :rtype: dict