'A `tuple` of length `n_inputs` defining the bounding box limits, or
`None` for no bounding box.
The default limits are given by a ``bounding_box`` property or method
defined in the class body of a specific model.  If not defined then
this property just raises `NotImplementedError` by default (but may be
assigned a custom value by a user).  ``bounding_box`` can be set
manually to an array-like object of shape ``(model.n_inputs, 2)``. For
further usage, see :ref:`bounding-boxes`
The limits are ordered according to the `numpy` indexing
convention, and are the reverse of the model input order,
e.g. for inputs ``(\'x\', \'y\', \'z\')``, ``bounding_box`` is defined:
* for 1D: ``(x_low, x_high)``
* for 2D: ``((y_low, y_high), (x_low, x_high))``
* for 3D: ``((z_low, z_high), (y_low, y_high), (x_low, x_high))``
Examples
Setting the ``bounding_box`` limits for a 1D and 2D model:
>>> from astropy.modeling.models import Gaussian1D, Gaussian2D
>>> model_1d = Gaussian1D()
>>> model_2d = Gaussian2D(x_stddev=1, y_stddev=1)
>>> model_1d.bounding_box = (-5, 5)
>>> model_2d.bounding_box = ((-6, 6), (-5, 5))
Setting the bounding_box limits for a user-defined 3D `custom_model`:
>>> from astropy.modeling.models import custom_model
>>> def const3d(x, y, z, amp=1):
...    return amp
>>> Const3D = custom_model(const3d)
>>> model_3d = Const3D()
>>> model_3d.bounding_box = ((-6, 6), (-5, 5), (-4, 4))
To reset ``bounding_box`` to its default limits just delete the
user-defined value--this will reset it back to the default defined
on the class:
>>> del model_1d.bounding_box
To disable the bounding box entirely (including the default),
set ``bounding_box`` to `None`:
>>> model_1d.bounding_box = None
>>> model_1d.bounding_box  # doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "astropy\modeling\core.py", line 980, in bounding_box
"No bounding box is defined for this model (note: the "
NotImplementedError: No bounding box is defined for this model (note:
the bounding box was explicitly disabled for this model; use `del
model.bounding_box` to restore the default bounding box, if one is
defined for this model).'

@property
def bounding_box(self):

    if (self._user_bounding_box is not None):
        if (self._user_bounding_box is NotImplemented):
            raise NotImplementedError(u'No    bounding    box    is    defined    for    this    model    (note:    the    bounding    box    was    explicitly    disabled    for    this    model;    use    `del    model.bounding_box`    to    restore    the    default    bounding    box,    if    one    is    defined    for    this    model).')
        return self._user_bounding_box
    elif (self._bounding_box is None):
        raise NotImplementedError(u'No    bounding    box    is    defined    for    this    model.')
    elif isinstance(self._bounding_box, _BoundingBox):
        return self._bounding_box
    elif isinstance(self._bounding_box, types.MethodType):
        return self._bounding_box()
    else:
        bounding_box = self._bounding_box((), _model=self)()
        return self._bounding_box(bounding_box, _model=self)
