def symmetric_difference_update ( self, value ):
        if not hasattr(self, 'trait'):
            return set.symmetric_difference_update(self, value)
        removed = self.intersection( value )
        added   = value.difference( self )
        if (len( removed ) > 0) or (len( added ) > 0):
            object = self.object()
            set.difference_update( self, removed )

            if len( added ) > 0:
                validate = self.trait.item_trait.handler.validate
                if validate is not None:
                    name  = self.name
                    added = set( [ validate( object, name, item )
                                   for item in added ] )

                set.update( self, added )

            if self.name_items is not None:
                self._send_trait_items_event( self.name_items,
                    TraitSetEvent( removed, added ) )
dataset/ETHPy150Open enthought/traits/traits/trait_handlers.py/TraitSetObject.symmetric_difference_update/original