(self, *others)
return widened, widening_occurred
Perform a widening between self and other states
        :param others:
        :return:
Perform a widening between self and other states
        :param others:
        :return:
Perform a widening between self and other states : param others : : return :
def widen(self, *others):
        """
        Perform a widening between self and other states
        :param others:
        :return:
        """

        if len(set(frozenset(o.plugins.keys()) for o in others)) != 1:
            raise SimMergeError("Unable to widen due to different sets of plugins.")
        if len(set(o.arch.name for o in others)) != 1:
            raise SimMergeError("Unable to widen due to different architectures.")

        widened = self.copy()
        widening_occurred = False

        # plugins
        for p in self.plugins:
            if p in ('solver', 'unicorn'):
                continue
            plugin_state_widened = widened.plugins[p].widen([_.plugins[p] for _ in others])
            if plugin_state_widened:
                l.debug('Widening occurred in %s', p)
                widening_occurred = True

        return widened, widening_occurred
def widen ( self , * others ) : if len ( set ( frozenset ( o . plugins . keys ( ) ) for o in others ) ) != 1 : raise SimMergeError ( "Unable to widen due to different sets of plugins." ) if len ( set ( o . arch . name for o in others ) ) != 1 : raise SimMergeError ( "Unable to widen due to different architectures." ) widened = self . copy ( ) widening_occurred = False # plugins for p in self . plugins : if p in ( 'solver' , 'unicorn' ) : continue plugin_state_widened = widened . plugins [ p ] . widen ( [ _ . plugins [ p ] for _ in others ] ) if plugin_state_widened : l . debug ( 'Widening occurred in %s' , p ) widening_occurred = True return widened , widening_occurred