def add_compute(self, kind=compute.phoebe, **kwargs):
        """
        Add a set of computeoptions for a given backend to the bundle.
        The label ('compute') can then be sent to :meth:`run_compute`.

        If not provided, 'compute' will be created for you and can be
        accessed by the 'compute' attribute of the returned
        ParameterSet.

        Available kinds include:
            * :func:`phoebe.parameters.compute.phoebe`
            * :func:`phoebe.parameters.compute.legacy`
            * :func:`phoebe.parameters.compute.photodynam`
            * :func:`phoebe.parameters.compute.jktebop`

        :parameter kind: function to call that returns a
            ParameterSet or list of parameters.  This must either be
            a callable function that accepts nothing but default
            values, or the name of a function (as a string) that can
            be found in the :mod:`phoebe.parameters.compute` module
        :type kind: str or callable
        :parameter str compute: (optional) name of the newly-created
            compute optins
        :parameter **kwargs: default values for any of the newly-created
            parameters
        :return: :class:`phoebe.parameters.parameters.ParameterSet` of
            all parameters that have been added
        :raises NotImplementedError: if required constraint is not implemented
        """
        func = _get_add_func(_compute, kind)

        kwargs.setdefault('compute',
                          self._default_label(func.func_name,
                                              **{'context': 'compute',
                                                 'kind': func.func_name}))

        self._check_label(kwargs['compute'])

        params = func(**kwargs)
        # TODO: similar kwargs logic as in add_dataset (option to pass dict to
        # apply to different components this would be more complicated here if
        # allowing to also pass to different datasets

        metawargs = {'context': 'compute',
                     'kind': func.func_name,
                     'compute': kwargs['compute']}

        logger.info("adding {} '{}' compute to bundle".format(metawargs['kind'], metawargs['compute']))
        self._attach_params(params, **metawargs)

        redo_kwargs = deepcopy(kwargs)
        redo_kwargs['func'] = func.func_name
        self._add_history(redo_func='add_compute',
                          redo_kwargs=redo_kwargs,
                          undo_func='remove_compute',
                          undo_kwargs={'compute': kwargs['compute']})


        # since we've already processed (so that we can get the new qualifiers),
        # we'll only raise a warning
        self._kwargs_checks(kwargs, warning_only=True)

        return self.get_compute(**metawargs)
Add a set of computeoptions for a given backend to the bundle.
        The label ('compute') can then be sent to :meth:`run_compute`.

        If not provided, 'compute' will be created for you and can be
        accessed by the 'compute' attribute of the returned
        ParameterSet.

        Available kinds include:
            * :func:`phoebe.parameters.compute.phoebe`
            * :func:`phoebe.parameters.compute.legacy`
            * :func:`phoebe.parameters.compute.photodynam`
            * :func:`phoebe.parameters.compute.jktebop`

        :parameter kind: function to call that returns a
            ParameterSet or list of parameters.  This must either be
            a callable function that accepts nothing but default
            values, or the name of a function (as a string) that can
            be found in the :mod:`phoebe.parameters.compute` module
        :type kind: str or callable
        :parameter str compute: (optional) name of the newly-created
            compute optins
        :parameter **kwargs: default values for any of the newly-created
            parameters
        :return: :class:`phoebe.parameters.parameters.ParameterSet` of
            all parameters that have been added
        :raises NotImplementedError: if required constraint is not implemented