code: def test_convolve_hrf():
      # Check that using an HRF convolution on two events is the same as doing the
      # same convolution on each of them and summing
      t = Term("t")
      glover_t = hrf.glover(t)
      # dt is exactly representable in floating point here
      glover_conv = TimeConvolver(glover_t, [0, 26], 1.0 / 32)
      event0 = blocks(((1, 2),), (2.0,))
      event1 = blocks(((15, 20),), (1.0,))
      conved0 = glover_conv.convolve(event0, [0, 3])
      conved1 = glover_conv.convolve(event1, [14, 21])
      times = np.arange(0, 50, 0.1)
      e0_e1 = lambdify_t(conved0)(times) + lambdify_t(conved1)(times)
      # Same thing in one shot
      events = blocks(((1, 2), (15, 20)), (2.0, 1))
      conved = glover_conv.convolve(events, [0, 21])
      assert_almost_equal(lambdify_t(conved)(times), e0_e1)
      # Same thing with convolve_functions
      conved_cf = convolve_functions(
          events, glover_t, [0, 21], [0, 26], 1 / 32.0
      )
      assert_almost_equal(lambdify_t(conved_cf)(times), e0_e1)
  
imports: import re
  import numpy
  import pytest
  import sympy
  from numpy.testing import assert_almost_equal, assert_array_almost_equal, assert_array_equal
  from sympy import DiracDelta, Dummy, Function, Symbol
  from sympy.utilities.lambdify import implemented_function, lambdify
  from nipy.algorithms.statistics.formula import Term
  from ..None import hrf
  from ..utils import Interp1dNumeric, TimeConvolver, blocks, convolve_functions, define, events, interp, lambdify_t, linear_interp, step_function
label_desc: Use image node_id 10 for calling a global function with example usage: test_convolve_hrf() without return types