code: def ihaar(f, preserve_energy=True, inline=False):
      """
      t = ihaar(f, preserve_energy=True, inline=False)
  
      Reverse Haar transform
  
      ``ihaar(haar(f))`` is more or less equal to ``f`` (equal, except for
      possible rounding issues).
  
      Parameters
      ----------
      f : 2-D ndarray
          Input image. If it is an integer image, it is converted to floating
          point (double).
      preserve_energy : bool, optional
          Whether to normalise the result so that energy is preserved (the
          default).
      inline : bool, optional
          Whether to write the results to the input image. By default, a new
          image is returned. Integer images are always converted to floating
          point and copied.
  
      Returns
      -------
      f : ndarray
  
      See Also
      --------
      haar : function
          Forward Haar transform
      """
      f = _wavelet_array(f, inline, "ihaar")
      _convolve.ihaar(f)
      _convolve.ihaar(f.T)
      if preserve_energy:
          f *= 2.0
      return f
  
imports: import numpy
  from .None import _convolve
  from .None import morph
  from .internal import _get_output, _normalize_sequence, _verify_is_floatingpoint_type, _as_floating_point_array
  from ._filters import mode2int, modes, _check_mode
label_desc: Use image node_id 18 for calling a global function with example usage: ihaar(f, preserve_energy, inline) and returns: f