code: def is_inside_bounds(value, params):
      
      if value in params:
          # Single parameter
          return True
      else:
          if params.ndim == 1:
              return params.contains_all(np.ravel(value))
          else:
              # Flesh out and flatten to check bounds
              bcast_value = np.broadcast_arrays(*value)
              stacked_value = np.vstack(bcast_value)
              flat_value = stacked_value.reshape(params.ndim, -1)
              return params.contains_all(flat_value)
docs: Return ``True`` if ``value`` is contained in ``params``.
  
      This method supports broadcasting in the sense that for
      ``params.ndim >= 2``, if more than one value is given, the inputs
      are broadcast against each other.
  
      Parameters
      ----------
      value : `array-like`
          Value(s) to be checked. For several inputs, the final bool
          tells whether all inputs pass the check or not.
      params : `IntervalProd`
          Set in which the value is / the values are supposed to lie.
  
      Returns
      -------
      is_inside_bounds : bool
          ``True`` is all values lie in ``params``, ``False`` otherwise.
  
      Examples
      --------
      Check a single point:
  
      >>> params = odl.IntervalProd([0, 0], [1, 2])
      >>> is_inside_bounds([0, 0], params)
      True
      >>> is_inside_bounds([0, -1], params)
      False
  
      Using broadcasting:
  
      >>> pts_ax0 = np.array([0, 0, 1, 0, 1])[:, None]
      >>> pts_ax1 = np.array([2, 0, 1])[None, :]
      >>> is_inside_bounds([pts_ax0, pts_ax1], params)
      True
      >>> pts_ax1 = np.array([-2, 1])[None, :]
      >>> is_inside_bounds([pts_ax0, pts_ax1], params)
      False