docs: def hist(hist_function, *, options={}, **interact_params):
      """
      Generates an interactive histogram that allows users to change the
      parameters of the input hist_function.
  
      Args:
          hist_function (Array | (*args -> Array int | Array float)):
              Function that takes in parameters to interact with and returns an
              array of numbers. These numbers will be plotted in the resulting
              histogram.
  
      Kwargs:
          {options}
  
          interact_params (dict): Keyword arguments in the same format as
              `ipywidgets.interact`. One argument is required for each argument
              of `hist_function`.
  
      Returns:
          VBox with two children: the interactive controls and the figure.
  
      >>> def gen_random(n_points):
      ...     return np.random.normal(size=n_points)
      >>> hist(gen_random, n_points=(0, 1000, 10))
      VBox(...)
      """
      params = {
          'marks': [{
              'sample': _array_or_placeholder(hist_function),
              'bins': _get_option('bins'),
              'normalized': _get_option('normalized'),
              'scales': (
                  lambda opts: {'sample': opts['x_sc'], 'count': opts['y_sc']}
              ),
          }],
      }
      fig = options.get('_fig', False) or _create_fig(options=options)
      [hist] = _create_marks(
          fig=fig, marks=[bq.Hist], options=options, params=params
      )
      _add_marks(fig, [hist])
  
      def wrapped(**interact_params):
          hist.sample = util.maybe_call(hist_function, interact_params)
  
      controls = widgets.interactive(wrapped, **interact_params)
  
      return widgets.VBox([controls, fig])