// File: ddu1[P]polarizedtext/src/fasttext.cc
// Function: fasttext::FastText::pwv(fasttext::Model&, float, std::vector<int, std::allocator<int>> const&)
void FastText::pwv(Model& model, real lr,
                        const std::vector<int32_t>& line) {
  std::uniform_int_distribution<> uniform(1, args_->ws);
  for (int32_t w = 0; w < line.size(); w++) {
    int32_t boundary = uniform(model.rng);
    model.setHiddenLabels( dict_->getLabels(line[w]));
    model.updatePolarization(line[w], lr);
    const std::vector<int32_t>& ngrams = dict_->getNgrams(line[w]);
    for (int32_t c = -boundary; c <= boundary; c++) {
      if (c != 0 && w + c >= 0 && w + c < line.size()) {
        model.update(ngrams, line[w + c], lr);
      }
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movss %xmm0, -0x14(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x70(%rbp)
callq 0xa170
movl 0x70(%rax), %edx
leaq -0x28(%rbp), %rdi
movl $0x1, %esi
callq 0x203b0
movl $0x0, -0x2c(%rbp)
movslq -0x2c(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x20(%rbp), %rdi
callq 0xad50
movq %rax, %rcx
movq -0x78(%rbp), %rax
cmpq %rcx, %rax
jae 0x1d643
movq -0x10(%rbp), %rsi
addq $0x108, %rsi            # imm = 0x108
leaq -0x28(%rbp), %rdi
callq 0x203e0
movq -0x70(%rbp), %rdi
movl %eax, -0x30(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x88(%rbp)
addq $0x10, %rdi
callq 0x1ff50
movq %rax, -0x90(%rbp)
movq -0x20(%rbp), %rdi
movslq -0x2c(%rbp), %rsi
callq 0xa0c0
movq -0x90(%rbp), %rsi
movl (%rax), %edx
leaq -0x48(%rbp), %rdi
movq %rdi, -0x80(%rbp)
callq 0x6bf0
movq -0x88(%rbp), %rdi
movq -0x80(%rbp), %rsi
callq 0x157a0
jmp 0x1d50d
leaq -0x48(%rbp), %rdi
callq 0xa040
movq -0x10(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x20(%rbp), %rdi
movslq -0x2c(%rbp), %rsi
callq 0xa0c0
movq -0xa0(%rbp), %rdi
movl (%rax), %esi
movss -0x14(%rbp), %xmm0
callq 0x14f80
movq -0x70(%rbp), %rdi
addq $0x10, %rdi
callq 0x1ff50
movq %rax, -0x98(%rbp)
movq -0x20(%rbp), %rdi
movslq -0x2c(%rbp), %rsi
callq 0xa0c0
movq -0x98(%rbp), %rdi
movl (%rax), %esi
callq 0x6e90
movq %rax, -0x60(%rbp)
xorl %eax, %eax
subl -0x30(%rbp), %eax
movl %eax, -0x64(%rbp)
movl -0x64(%rbp), %eax
cmpl -0x30(%rbp), %eax
jg 0x1d633
cmpl $0x0, -0x64(%rbp)
je 0x1d623
movl -0x2c(%rbp), %eax
addl -0x64(%rbp), %eax
cmpl $0x0, %eax
jl 0x1d623
movl -0x2c(%rbp), %eax
addl -0x64(%rbp), %eax
cltq
movq %rax, -0xa8(%rbp)
movq -0x20(%rbp), %rdi
callq 0xad50
movq %rax, %rcx
movq -0xa8(%rbp), %rax
cmpq %rcx, %rax
jae 0x1d623
movq -0x10(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq -0x20(%rbp), %rdi
movl -0x2c(%rbp), %eax
addl -0x64(%rbp), %eax
movslq %eax, %rsi
callq 0xa0c0
movq -0xb8(%rbp), %rdi
movq -0xb0(%rbp), %rsi
movl (%rax), %edx
movss -0x14(%rbp), %xmm0
callq 0x14d30
jmp 0x1d623
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x50(%rbp)
movl %eax, -0x54(%rbp)
leaq -0x48(%rbp), %rdi
callq 0xa040
jmp 0x1d64c
jmp 0x1d625
movl -0x64(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x64(%rbp)
jmp 0x1d57c
jmp 0x1d635
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x1d481
addq $0xc0, %rsp
popq %rbp
retq
movq -0x50(%rbp), %rdi
callq 0x45b0
nopw %cs:(%rax,%rax)