anchor.diff:                      yield Some res
             }
   
  -        member x.trainThread(src, threadId : int, thread : int, verbose : int) =
  -
  -
  +        static member trainThread(start : Stopwatch, tokenCount : int64 ref, state, src, threadId : int, thread : int, verbose : int) =
             let model = Model(state.input_, state.output_, state.args_, threadId)
             if state.args_.model = model_name.sup
             then model.setTargetCounts(state.dict_.getCounts(entry_type.label).ToArray())
  
positive.code:           let mutable localTokenCount = 0
  
            let lineSrc = state.dict_.getLines(src, model.rng).GetEnumerator()
            while tokenCount < int64(state.args_.epoch * ntokens) do
              let progress = float32(tokenCount) / float32(state.args_.epoch * ntokens)
              let lr = state.args_.lr * (1.0f - progress)
              lineSrc.MoveNext() |> ignore
              let line, labels = lineSrc.Current
  
negative.code:             if state.args_.model = model_name.sup
              then
                state.dict_.addNgrams(line, state.args_.wordNgrams)
                FastText.supervised(model, lr, line, labels)
              else if state.args_.model = model_name.cbow
              then FastText.cbow(state, model, lr, line)
              else if state.args_.model = model_name.sg
              then FastText.skipgram(state, model, lr, line)
              if localTokenCount > state.args_.lrUpdateRate
              then
                tokenCount := !tokenCount + int64(localTokenCount)
                localTokenCount <- 0
                if threadId = 0 && verbose > 1
                then FastText.printInfo(start, !tokenCount, state, progress, model.getLoss(), thread)
            if threadId = 0 
            then FastText.printInfo(start, !tokenCount, state, 1.0f, model.getLoss(), thread)
                 printfn ""
  
          member x.train words (args : TrainArgs) streamToLines =
  