def add(self, new_child, label=None, containment=True, replace=False,
            inherit_periodicity=True, reset_rigid_ids=True):
        """Add a part to the Compound.

        Note:
            This does not necessarily add the part to self.children but may
            instead be used to add a reference to the part to self.labels. See
            'containment' argument.

        Parameters
        ----------
        new_child : mb.Compound or list-like of mb.Compound
            The object(s) to be added to this Compound.
        label : str, optional
            A descriptive string for the part.
        containment : bool, optional, default=True
            Add the part to self.children.
        replace : bool, optional, default=True
            Replace the label if it already exists.
        inherit_periodicity : bool, optional, default=True
            Replace the periodicity of self with the periodicity of the
            Compound being added
        reset_rigid_ids : bool, optional, default=True
            If the Compound to be added contains rigid bodies, reset the
            rigid_ids such that values remain distinct from rigid_ids
            already present in `self`. Can be set to False if attempting
            to add Compounds to an existing rigid body.

        """
        # Support batch add via lists, tuples and sets.
        if (isinstance(new_child, collections.Iterable) and
                not isinstance(new_child, string_types)):
            for child in new_child:
                self.add(child, reset_rigid_ids=reset_rigid_ids)
            return

        if not isinstance(new_child, Compound):
            raise ValueError('Only objects that inherit from mbuild.Compound '
                             'can be added to Compounds. You tried to add '
                             '"{}".'.format(new_child))

        if new_child.contains_rigid or new_child.rigid_id is not None:
            if self.contains_rigid and reset_rigid_ids:
                new_child._increment_rigid_ids(increment=self.max_rigid_id + 1)
            self._check_if_contains_rigid_bodies = True
        if self.rigid_id is not None:
            self.rigid_id = None

        # Create children and labels on the first add operation
        if self.children is None:
            self.children = OrderedSet()
        if self.labels is None:
            self.labels = OrderedDict()

        if containment:
            if new_child.parent is not None:
                raise MBuildError('Part {} already has a parent: {}'.format(
                    new_child, new_child.parent))
            self.children.add(new_child)
            new_child.parent = self

            if new_child.bond_graph is not None:
                if self.root.bond_graph is None:
                    self.root.bond_graph = new_child.bond_graph
                else:
                    self.root.bond_graph.compose(new_child.bond_graph)

                new_child.bond_graph = None

        # Add new_part to labels. Does not currently support batch add.
        if label is None:
            label = '{0}[$]'.format(new_child.__class__.__name__)

        if label.endswith('[$]'):
            label = label[:-3]
            if label not in self.labels:
                self.labels[label] = []
            label_pattern = label + '[{}]'

            count = len(self.labels[label])
            self.labels[label].append(new_child)
            label = label_pattern.format(count)

        if not replace and label in self.labels:
            raise MBuildError('Label "{0}" already exists in {1}.'.format(
                label, self))
        else:
            self.labels[label] = new_child
        new_child.referrers.add(self)

        if (inherit_periodicity and isinstance(new_child, Compound) and
                new_child.periodicity.any()):
            self.periodicity = new_child.periodicity
def add ( self , new_child , label = None , containment = True , replace = False , inherit_periodicity = True , reset_rigid_ids = True ) : if ( isinstance ( new_child , collections . Iterable ) and not isinstance ( new_child , string_types ) ) : for child in new_child : self . add ( child , reset_rigid_ids = reset_rigid_ids ) return if not isinstance ( new_child , Compound ) : raise ValueError ( 'Only objects that inherit from mbuild.Compound ' 'can be added to Compounds. You tried to add ' '"{}".' . format ( new_child ) ) if new_child . contains_rigid or new_child . rigid_id is not None : if self . contains_rigid and reset_rigid_ids : new_child . _increment_rigid_ids ( increment = self . max_rigid_id + 1 ) self . _check_if_contains_rigid_bodies = True if self . rigid_id is not None : self . rigid_id = None if self . children is None : self . children = OrderedSet ( ) if self . labels is None : self . labels = OrderedDict ( ) if containment : if new_child . parent is not None : raise MBuildError ( 'Part {} already has a parent: {}' . format ( new_child , new_child . parent ) ) self . children . add ( new_child ) new_child . parent = self if new_child . bond_graph is not None : if self . root . bond_graph is None : self . root . bond_graph = new_child . bond_graph else : self . root . bond_graph . compose ( new_child . bond_graph ) new_child . bond_graph = None if label is None : label = '{0}[$]' . format ( new_child . __class__ . __name__ ) if label . endswith ( '[$]' ) : label = label [ : - 3 ] if label not in self . labels : self . labels [ label ] = [ ] label_pattern = label + '[{}]' count = len ( self . labels [ label ] ) self . labels [ label ] . append ( new_child ) label = label_pattern . format ( count ) if not replace and label in self . labels : raise MBuildError ( 'Label "{0}" already exists in {1}.' . format ( label , self ) ) else : self . labels [ label ] = new_child new_child . referrers . add ( self ) if ( inherit_periodicity and isinstance ( new_child , Compound ) and new_child . periodicity . any ( ) ) : self . periodicity = new_child . periodicity
Add a part to the Compound.

        Note:
            This does not necessarily add the part to self.children but may
            instead be used to add a reference to the part to self.labels. See
            'containment' argument.

        Parameters
        ----------
        new_child : mb.Compound or list-like of mb.Compound
            The object(s) to be added to this Compound.
        label : str, optional
            A descriptive string for the part.
        containment : bool, optional, default=True
            Add the part to self.children.
        replace : bool, optional, default=True
            Replace the label if it already exists.
        inherit_periodicity : bool, optional, default=True
            Replace the periodicity of self with the periodicity of the
            Compound being added
        reset_rigid_ids : bool, optional, default=True
            If the Compound to be added contains rigid bodies, reset the
            rigid_ids such that values remain distinct from rigid_ids
            already present in `self`. Can be set to False if attempting
            to add Compounds to an existing rigid body.