// File: epfml[P]Bi-Sent2Vec/src/fasttext.cc
// Function: fasttext::FastText::printInfo(float, float)
void FastText::printInfo(real progress, real loss) {
  real t = real(clock() - start) / CLOCKS_PER_SEC;
  real wst = real(tokenCount) / t;
  real lr = args_->lr * (1.0 - progress);
  int eta = int(t / progress * (1 - progress) / args_->thread);
  int etah = eta / 3600;
  int etam = (eta - etah * 3600) / 60;
  std::cerr << std::fixed;
  std::cerr << "\rProgress: " << std::setprecision(1) << 100 * progress << "%";
  std::cerr << "  words/sec/thread: " << std::setprecision(0) << wst;
  std::cerr << "  lr: " << std::setprecision(6) << lr;
  std::cerr << "  loss: " << std::setprecision(6) << loss;
  std::cerr << "  eta: " << etah << "h" << etam << "m ";
  std::cerr << std::flush;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x8(%rbp)
movss %xmm0, -0xc(%rbp)
movss %xmm1, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x68(%rbp)
callq 0x52e0
movq -0x68(%rbp), %rdi
subq 0x78(%rdi), %rax
cvtsi2ss %rax, %xmm0
movss 0x19684(%rip), %xmm1    # 0x4369c
divss %xmm1, %xmm0
movss %xmm0, -0x14(%rbp)
addq $0x70, %rdi
callq 0x34720
movq -0x68(%rbp), %rdi
cvtsi2ss %rax, %xmm0
divss -0x14(%rbp), %xmm0
movss %xmm0, -0x18(%rbp)
callq 0xe6e0
movq -0x68(%rbp), %rdi
movsd 0x80(%rax), %xmm0
movss -0xc(%rbp), %xmm1
cvtss2sd %xmm1, %xmm2
movsd 0x18859(%rip), %xmm1    # 0x428b8
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x1c(%rbp)
movss -0x14(%rbp), %xmm0
divss -0xc(%rbp), %xmm0
movss 0x18846(%rip), %xmm1    # 0x428c8
subss -0xc(%rbp), %xmm1
mulss %xmm1, %xmm0
movss %xmm0, -0x5c(%rbp)
callq 0xe6e0
movss -0x5c(%rbp), %xmm0
cvtsi2ssl 0xd4(%rax), %xmm1
divss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movl %eax, -0x20(%rbp)
movl -0x20(%rbp), %eax
movl $0xe10, %ecx            # imm = 0xE10
cltd
idivl %ecx
movl %eax, -0x24(%rbp)
movl -0x20(%rbp), %eax
imull $0xe10, -0x24(%rbp), %ecx # imm = 0xE10
subl %ecx, %eax
movl $0x3c, %ecx
cltd
idivl %ecx
movl %eax, -0x28(%rbp)
movq 0x34f17(%rip), %rdi     # 0x5eff0
leaq 0xa6d0(%rip), %rsi      # 0x347b0
callq 0x5170
movq 0x34f04(%rip), %rdi     # 0x5eff0
leaq 0x19695(%rip), %rsi     # 0x43788
callq 0x5420
movq %rax, -0x58(%rbp)
movl $0x1, %edi
callq 0x214f0
movq -0x58(%rbp), %rdi
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %esi
callq 0x56a0
movq %rax, %rdi
movss 0x19578(%rip), %xmm0    # 0x43698
mulss -0xc(%rbp), %xmm0
callq 0x5330
movq %rax, %rdi
leaq 0x19660(%rip), %rsi     # 0x43794
callq 0x5420
movq 0x34eb0(%rip), %rdi     # 0x5eff0
leaq 0x1964f(%rip), %rsi     # 0x43796
callq 0x5420
movq %rax, -0x50(%rbp)
xorl %edi, %edi
callq 0x214f0
movq -0x50(%rbp), %rdi
movl %eax, -0x30(%rbp)
movl -0x30(%rbp), %esi
callq 0x56a0
movq %rax, %rdi
movss -0x18(%rbp), %xmm0
callq 0x5330
movq 0x34e76(%rip), %rdi     # 0x5eff0
leaq 0x1962a(%rip), %rsi     # 0x437ab
callq 0x5420
movq %rax, -0x48(%rbp)
movl $0x6, %edi
callq 0x214f0
movq -0x48(%rbp), %rdi
movl %eax, -0x34(%rbp)
movl -0x34(%rbp), %esi
callq 0x56a0
movq %rax, %rdi
movss -0x1c(%rbp), %xmm0
callq 0x5330
movq 0x34e39(%rip), %rdi     # 0x5eff0
leaq 0x195f4(%rip), %rsi     # 0x437b2
callq 0x5420
movq %rax, -0x40(%rbp)
movl $0x6, %edi
callq 0x214f0
movq -0x40(%rbp), %rdi
movl %eax, -0x38(%rbp)
movl -0x38(%rbp), %esi
callq 0x56a0
movq %rax, %rdi
movss -0x10(%rbp), %xmm0
callq 0x5330
movq 0x34dfc(%rip), %rdi     # 0x5eff0
leaq 0x195c0(%rip), %rsi     # 0x437bb
callq 0x5420
movq %rax, %rdi
movl -0x24(%rbp), %esi
callq 0x5770
movq %rax, %rdi
leaq 0x17e3a(%rip), %rsi     # 0x4204f
callq 0x5420
movq %rax, %rdi
movl -0x28(%rbp), %esi
callq 0x5770
movq %rax, %rdi
leaq 0x19594(%rip), %rsi     # 0x437c3
callq 0x5420
movq 0x34db5(%rip), %rdi     # 0x5eff0
movq 0x34d7e(%rip), %rsi     # 0x5efc0
callq 0x5460
addq $0x70, %rsp
popq %rbp
retq
nopl (%rax)