SciNim / nim-plotly

plotly wrapper for nim-lang
https://scinim.github.io/nim-plotly/
MIT License
173 stars 15 forks source link

saveImage with `.png` filename causes assertion failure #51

Open cwpearson opened 4 years ago

cwpearson commented 4 years ago
Nim Compiler Version 0.20.2 [MacOSX: amd64]
Compiled at 2019-07-17
Copyright (c) 2006-2019 by Andreas Rumpf

git hash: 88a0edba4b1a3d535b54336fd589746add54e937
active boot switches: -d:release

Modifying examples/fig12_save_figure.nim to save a file with the png extension, then running

Running nim c -r -d:webview --threads:on -d:debug examples/fig12_save_figure.nim

produces

Starting server
Plotly connected successfully!
/Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(150) listenForImage
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1562) poll
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1328) runOnce
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(210) processPendingCallbacks
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncmacro.nim(34) cbNimAsyncContinue
/Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(109) cbIter
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/base64.nim(184) decode
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/system/assertions.nim(27) failedAssertImpl
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/system/assertions.nim(20) raiseAssert
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/system/fatal.nim(39) sysFatal
[[reraised from:
/Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(150) listenForImage
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1562) poll
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1328) runOnce
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(210) processPendingCallbacks
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncmacro.nim(34) processRequestNimAsyncContinue
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asynchttpserver.nim(261) processRequestIter
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncfutures.nim(374) read
]]
[[reraised from:
/Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(150) listenForImage
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1562) poll
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1328) runOnce
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(210) processPendingCallbacks
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncmacro.nim(34) processClientNimAsyncContinue
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asynchttpserver.nim(293) processClientIter
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncfutures.nim(374) read
]]
[[reraised from:
/Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(150) listenForImage
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1562) poll
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1328) runOnce
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(210) processPendingCallbacks
/Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncfutures.nim(422) asyncCheckCallback
]]
Error: unhandled exception: /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/base64.nim(184, 10) `i == s.len` 
Async traceback:
  /Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(150)                listenForImage
  /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1562)  poll
  /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1328)  runOnce
  /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(210)   processPendingCallbacks
  /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncmacro.nim(34)       cbNimAsyncContinue
  /Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(109)                cbIter
  /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/base64.nim(184)          decode
  /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/system/assertions.nim(27)     failedAssertImpl
  /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/system/assertions.nim(20)     raiseAssert
  /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/system/fatal.nim(39)          sysFatal
  #[
    /Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(150)                listenForImage
    /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1562)  poll
    /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1328)  runOnce
    /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(210)   processPendingCallbacks
    /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncmacro.nim(34)       processRequestNimAsyncContinue
    /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asynchttpserver.nim(261) processRequestIter
    /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncfutures.nim(374)    read
  ]#
  #[
    /Users/pearson/repos/nim-plotly/src/plotly/image_retrieve.nim(150)                listenForImage
    /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1562)  poll
    /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(1328)  runOnce
    /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncdispatch.nim(210)   processPendingCallbacks
    /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncmacro.nim(34)       processClientNimAsyncContinue
    /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asynchttpserver.nim(293) processClientIter
    /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/asyncfutures.nim(374)    read
  ]#
Exception message: /Users/pearson/.choosenim/toolchains/nim-0.20.2/lib/pure/base64.nim(184, 10) `i == s.len` 
Exception type: [AssertionError]
Vindaar commented 4 years ago

Hm, weird. It's been a while since I tried to save an image to png. I'll take a look at it in a few days.

Vindaar commented 4 years ago

Damn, this also runs perfectly fine on my linux machine. :/

Vindaar commented 4 years ago

But it's weird that it fails in decode here https://github.com/nim-lang/Nim/blob/devel/lib/pure/base64.nim#L184.

Would you be willing to test decoding the image manually on your machine? Data as base64: http://ix.io/1TOx

save it somewhere and then just run the following:

import base64
writeFile("test.png", readFile("pngAsBase64.txt").decode)

and see if that works flawlessly. It should simply create that fig12 example as test.png.

cwpearson commented 4 years ago

Running the snippet on the base64 data you provided works fine!

cwpearson commented 4 years ago

I ran

nim c -r -d:webview --threads:on -d:debug examples/fig12_save_figure.nim

again, and I noticed that the webview pops up momentarily with what looks like a complete image rendered before the exceptions I posted before are emitted