Wrapper for :func:`merge`.

        It merges `constraint` with current ones and returns the list of
        merged constraints.
        It does not modify the current object.

        :param constraint: The constraint(s) to merge with current constraints.
        :type: :class:`Constraint`, :class:`Constraints` or `str`
        :returns: List of :class:`Constraint` objects.
        :rtype: list

def _merge(self, constraint):
        """Wrapper for :func:`merge`.

        It merges `constraint` with current ones and returns the list of
        merged constraints.
        It does not modify the current object.

        :param constraint: The constraint(s) to merge with current constraints.
        :type: :class:`Constraint`, :class:`Constraints` or `str`
        :returns: List of :class:`Constraint` objects.
        :rtype: list

        """
        if isinstance(constraint, basestring):
            constraints = Constraints.parse(constraint).constraints
        elif isinstance(constraint, Constraint):
            constraints = [constraint]
        elif isinstance(constraint, Constraints):
            constraints = constraint.constraints
        else:
            raise TypeError(constraint)

        return merge(self.constraints + constraints)