CC calculation: add - arnthor89/pygame GitHub Wiki

CC calculation add

Function

def add(self, *sprites, **kwargs):
        """add a sprite or sequence of sprites to a group

        LayeredUpdates.add(*sprites, **kwargs): return None

        If the sprite you add has an attribute _layer, then that layer will be
        used. If **kwarg contains 'layer', then the passed sprites will be
        added to that layer (overriding the sprite._layer attribute). If
        neither the sprite nor **kwarg has a 'layer', then the default layer is
        used to add the sprites.

        """

        if not sprites:
            return
        if 'layer' in kwargs:
            layer = kwargs['layer']
        else:
            layer = None
        for sprite in sprites:
            # It's possible that some sprite is also an iterator.
            # If this is the case, we should add the sprite itself,
            # and not the iterator object.
            if isinstance(sprite, Sprite):
                if not self.has_internal(sprite):
                    self.add_internal(sprite, layer)
                    sprite.add_internal(self)
            else:
                try:
                    # See if sprite is an iterator, like a list or sprite
                    # group.
                    self.add(*sprite, **kwargs)
                except (TypeError, AttributeError):
                    # Not iterable. This is probably a sprite that is not an
                    # instance of the Sprite class or is not an instance of a
                    # subclass of the Sprite class. Alternately, it could be an
                    # old-style sprite group.
                    if hasattr(sprite, '_spritegroup'):
                        for spr in sprite.sprites():
                            if not self.has_internal(spr):
                                self.add_internal(spr, layer)
                                spr.add_internal(self)
                    elif not self.has_internal(sprite):
                        self.add_internal(sprite, layer)
                        sprite.add_internal(self)

Control flow graph

def add(self, *sprites, **kwargs):
    #1    
    if not sprites:
        #3
        return
    #2
    if 'layer' in kwargs:
        #5
        layer = kwargs['layer']
    else:
        #6
        layer = None
    #4
    for sprite in sprites:
        #8
        if isinstance(sprite, Sprite):
            #10
            if not self.has_internal(sprite):
                #13
                self.add_internal(sprite, layer)
                sprite.add_internal(self)
            #12
        else:
            #11
            try:
                #15
                self.add(*sprite, **kwargs)
            except (TypeError, AttributeError):
                #16
                if hasattr(sprite, '_spritegroup'):
                    #18
                    for spr in sprite.sprites():
                        #21
                        if not self.has_internal(spr):
                            #23
                            self.add_internal(spr, layer)
                            spr.add_internal(self)
                        #22
                    #20
                elif not self.has_internal(sprite):
                    #19
                    self.add_internal(sprite, layer)
                    sprite.add_internal(self)
                #17
            #14
        #9
    #7

https://i.imgur.com/viADGzt.png

Calculation

  • Edges = 33
  • Nodes = 23
  • Connected components = 1
    33 - 23 + 2*1 = 12

CC from hand calculation = 12

CC from Lizard = 11