code: def normxcorr2(template, image):
      
      array_xcorr = get_array_xcorr()
      # Check that we have been passed numpy arrays
      if type(template) != np.ndarray or type(image) != np.ndarray:
          print('You have not provided numpy arrays, I will not convert them')
          return 'NaN'
      if len(template) > len(image):
          ccc = array_xcorr(
              templates=np.array([image]).astype(np.float32),
              stream=template.astype(np.float32), pads=[0],
              threaded=False)[0][0]
      else:
          ccc = array_xcorr(
              templates=np.array([template]).astype(np.float32),
              stream=image.astype(np.float32), pads=[0], threaded=False)[0][0]
      ccc = ccc.reshape((1, len(ccc)))
      return ccc
docs: Thin wrapper to eqcorrscan.utils.correlate functions.
  
      :type template: numpy.ndarray
      :param template: Template array
      :type image: numpy.ndarray
      :param image:
          Image to scan the template through.  The order of these
          matters, if you put the template after the image you will get a
          reversed correlation matrix
  
      :return:
          New :class:`numpy.ndarray` of the correlation values for the
          correlation of the image with the template.
      :rtype: numpy.ndarray
  
      .. note::
          If your data contain gaps these must be padded with zeros before
          using this function. The `eqcorrscan.utils.pre_processing` functions
          will provide gap-filled data in the appropriate format.  Note that if
          you pad your data with zeros before filtering or resampling the gaps
          will not be all zeros after filtering. This will result in the
          calculation of spurious correlations in the gaps.