code: def train_eq(E, TrSyms, os, mu, wx, errfctprs, adapt):
      Ntaps = wx.shape[1]
      pols = wx.shape[0]
      R, symbs = errfctprs
      err = np.zeros(TrSyms, dtype=E.dtype)
      for i in range(TrSyms):
          X = E[:, i * os : i * os + Ntaps]
          Xest = np.sum(np.conj(wx) * X)
          err[i] = (R.real - abs(Xest) ** 2) * Xest
          wx += mu * np.conj(err[i]) * X
          if adapt and i > 0:
              if (
                  err[i].real * err[i - 1].real > 0
                  and err[i].imag * err[i - 1].imag > 0
              ):
                  # commented out because this raises a warning caught by -Werror
                  # mu = mu
                  pass
              else:
                  mu = np.float32(
                      mu
                      / (
                          1
                          + mu
                          * (
                              err[i].real * err[i].real
                              + err[i].imag * err[i].imag
                          )
                      )
                  )
      return err, wx, mu
  
imports: import numpy
label_desc: Use image node_id 1 for calling a global function with example usage: train_eq(E, TrSyms, os, mu, wx, errfctprs, adapt) and returns: err,  wx,  mu