#NEWLINE# def join( self , other , join_type = 'inner' ) : #NEWLINE# #INDENT# '\n        Sequence and other must be composed of (Key, Value) pairs. If self.sequence contains (K, V)\n        pairs and other contains (K, W) pairs, the return result is a sequence of (K, (V, W)) pairs.\n        If join_type is "left", V values will always be present, W values may be present or None.\n        If join_type is "right", W values will always be present, W values may be present or None.\n        If join_type is "outer", V or W may be present or None,\n        but never at the same time.\n\n        >>> seq([(\'a\', 1), (\'b\', 2), (\'c\', 3)]).join([(\'a\', 2), (\'c\', 5)], "inner")\n        [(\'a\', (1, 2)), (\'c\', (3, 5))]\n\n        >>> seq([(\'a\', 1), (\'b\', 2), (\'c\', 3)]).join([(\'a\', 2), (\'c\', 5)])\n        [(\'a\', (1, 2)), (\'c\', (3, 5))]\n\n        >>> seq([(\'a\', 1), (\'b\', 2)]).join([(\'a\', 3), (\'c\', 4)], "left")\n        [(\'a\', (1, 3)), (\'b\', (2, None)]\n\n        >>> seq([(\'a\', 1), (\'b\', 2)]).join([(\'a\', 3), (\'c\', 4)], "right")\n        [(\'a\', (1, 3)), (\'c\', (None, 4)]\n\n        >>> seq([(\'a\', 1), (\'b\', 2)]).join([(\'a\', 3), (\'c\', 4)], "outer")\n        [(\'a\', (1, 3)), (\'b\', (2, None)), (\'c\', (None, 4))]\n\n        :param other: sequence to join with\n        :param join_type: specifies join_type, may be "left", "right", or "outer"\n        :return: side joined sequence of (K, (V, W)) pairs\n        ' #NEWLINE# return self . _transform ( transformations . join_t ( other , join_type ) )