def symmetric_difference(self, other, result_name=None, sort=None):
        self._validate_sort_keyword(sort)
        self._assert_can_do_setop(other)
        other, result_name_update = self._convert_can_do_setop(other)
        if result_name is None:
            result_name = result_name_update
        this = self._get_unique_index()
        other = other._get_unique_index()
        indexer = this.get_indexer(other)
        common_indexer = indexer.take((indexer != -1).nonzero()[0])
        left_indexer = np.setdiff1d(np.arange(this.size), common_indexer,
                                    assume_unique=True)
        left_diff = this.values.take(left_indexer)
        right_indexer = (indexer == -1).nonzero()[0]
        right_diff = other.values.take(right_indexer)
        the_diff = _concat._concat_compat([left_diff, right_diff])
        if sort is None:
            try:
                the_diff = sorting.safe_sort(the_diff)
            except TypeError:
                pass
        attribs = self._get_attributes_dict()
        attribs['name'] = result_name
        if 'freq' in attribs:
            attribs['freq'] = None
        return self._shallow_copy_with_infer(the_diff, **attribs)