docs: @Override
      @Deprecated
      public void iterateSample(T w1, T w2, AtomicLong nextRandom, double alpha) {
          if (w2 == null || w2.getIndex() < 0 || w1.getIndex() == w2.getIndex() || w1.getLabel().equals("STOP")
                          || w2.getLabel().equals("STOP") || w1.getLabel().equals("UNK") || w2.getLabel().equals("UNK"))
              return;
          //current word vector
          INDArray l1 = this.syn0.slice(w2.getIndex());
  
  
          //error for current word and context
          INDArray neu1e = Nd4j.create(vectorLength);
  
  
          for (int i = 0; i < w1.getCodeLength(); i++) {
              int code = w1.getCodes().get(i);
              int point = w1.getPoints().get(i);
              if (point >= syn0.rows() || point < 0)
                  throw new IllegalStateException("Illegal point " + point);
              //other word vector
  
              INDArray syn1 = this.syn1.slice(point);
  
  
              double dot = Nd4j.getBlasWrapper().dot(l1, syn1);
  
              if (dot < -MAX_EXP || dot >= MAX_EXP)
                  continue;
  
  
              int idx = (int) ((dot + MAX_EXP) * ((double) expTable.length / MAX_EXP / 2.0));
              if (idx >= expTable.length)
                  continue;
  
              //score
              double f = expTable[idx];
              //gradient
              double g = useAdaGrad ? w1.getGradient(i, (1 - code - f), lr.get()) : (1 - code - f) * alpha;
  
              Nd4j.getBlasWrapper().level1().axpy(syn1.length(), g, syn1, neu1e);
              Nd4j.getBlasWrapper().level1().axpy(syn1.length(), g, l1, syn1);
  
          }
  
  
          int target = w1.getIndex();
          int label;
          //negative sampling
          if (negative > 0)
              for (int d = 0; d < negative + 1; d++) {
                  if (d == 0)
                      label = 1;
                  else {
                      nextRandom.set(nextRandom.get() * 25214903917L + 11);
  
                      // FIXME: int cast
                      int idx = (int) Math.abs((int) (nextRandom.get() >> 16) % table.length());
  
                      target = table.getInt(idx);
                      if (target <= 0)
                          target = (int) nextRandom.get() % (vocab.numWords() - 1) + 1;
  
                      if (target == w1.getIndex())
                          continue;
                      label = 0;
                  }
  
  
                  if (target >= syn1Neg.rows() || target < 0)
                      continue;
  
                  double f = Nd4j.getBlasWrapper().dot(l1, syn1Neg.slice(target));
                  double g;
                  if (f > MAX_EXP)
                      g = useAdaGrad ? w1.getGradient(target, (label - 1), alpha) : (label - 1) * alpha;
                  else if (f < -MAX_EXP)
                      g = label * (useAdaGrad ? w1.getGradient(target, alpha, alpha) : alpha);
                  else
                      g = useAdaGrad ? w1
                                      .getGradient(target,
                                                      label - expTable[(int) ((f + MAX_EXP)
                                                                      * (expTable.length / MAX_EXP / 2))],
                                                      alpha)
                                      : (label - expTable[(int) ((f + MAX_EXP) * (expTable.length / MAX_EXP / 2))])
                                                      * alpha;
                  if (syn0.data().dataType() == DataType.DOUBLE)
                      Nd4j.getBlasWrapper().axpy(g, syn1Neg.slice(target), neu1e);
                  else
                      Nd4j.getBlasWrapper().axpy((float) g, syn1Neg.slice(target), neu1e);
  
                  if (syn0.data().dataType() == DataType.DOUBLE)
                      Nd4j.getBlasWrapper().axpy(g, l1, syn1Neg.slice(target));
                  else
                      Nd4j.getBlasWrapper().axpy((float) g, l1, syn1Neg.slice(target));
              }
  
          if (syn0.data().dataType() == DataType.DOUBLE)
              Nd4j.getBlasWrapper().axpy(1.0, neu1e, l1);
  
          else
              Nd4j.getBlasWrapper().axpy(1.0f, neu1e, l1);
  
      }