docs: def symmetric_difference(self, other):
          r"""Return a new set with elements in either the set or other but not both.
  
          >>> ms = Multiset('aab')
          >>> sorted(ms.symmetric_difference('abc'))
          ['a', 'c']
  
          You can also use the ``^`` operator for the same effect. However, the operator version
          will only accept a set as other operator, not any iterable, to avoid errors.
  
          >>> ms = Multiset('aab')
          >>> sorted(ms ^ Multiset('aaac'))
          ['a', 'b', 'c']
  
          For a variant of the operation which modifies the multiset in place see
          :meth:`symmetric_difference_update`.
  
          Args:
              other: The other set to take the symmetric difference with. Can also be any :class:`~typing.Iterable`\[~T]
                  or :class:`~typing.Mapping`\[~T, :class:`int`] which are then converted to :class:`Multiset`\[~T].
  
          Returns:
              The resulting symmetric difference multiset.
          """
          other = self._as_multiset(other)
          result = self.__class__()
          _total = 0
          _elements = result._elements
          self_elements = self._elements
          other_elements = other._elements
          dist_elements = set(self_elements.keys()) | set(other_elements.keys())
          for element in dist_elements:
              multiplicity = self_elements.get(element, 0)
              other_multiplicity = other_elements.get(element, 0)
              new_multiplicity = (multiplicity - other_multiplicity
                                  if multiplicity > other_multiplicity else other_multiplicity - multiplicity)
              _total += new_multiplicity
              if new_multiplicity > 0:
                  _elements[element] = new_multiplicity
          result._total = _total
          return result