-
Notifications
You must be signed in to change notification settings - Fork 2.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add a frame viewer #11
Conversation
Thank you very much! Previously I investigated several possible GUI frameworks including TKinter, and Kivy. In the future, I think we are going to need an interactive GUI for parameter tuning (for example, in rendering, adjustment of exposure, gamma, color temperature, tint, e.t.c., please see The downside of Kivy is that we are going to need OpenGL ES as a new dependency. However, I guess OpenGL dep. will be added sooner or later, since rapid preview via real-time rendering is necessary. Kivy also has lots of choices of sliders which I think suits better with Taichi. The TKinter image viewer is definitely useful, since installation of Kivy is more complicated than TKinter. For users who do not want to install Kivy (especially for whom who CANNOT use OpenGL, like in a VM), it's more convenient. Thanks. :-) |
I still recommend lovecat (which I made; see https://github.com/CoffeeKitty/lovecat) for parameter tuning purposes:
lovecat currently only has a lua backend. I plan to add more backends, e.g. Rust and Python. |
Related Issue: #7140 ### Brief Summary On macOS, when test worker hard fails (abort, EXC_BAD_ACCESS, etc.), backward_cpp's signal handler will re-raise the signal and catch it afterwards, make it an infinite loop, at the moment the offending process can't be terminated easily (except a SIGKILL), eat CPU cycles and blocks test runner. ``` (lldb) bt * thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT * frame #0: 0x00000001a04f0e28 libsystem_kernel.dylib`__pthread_kill + 8 frame #1: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #2: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #3: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #4: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #5: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #6: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #7: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #8: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #9: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #10: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #11: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #12: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #13: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #14: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #15: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #16: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #17: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #18: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #19: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #20: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #21: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #22: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #23: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #24: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #25: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #26: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #27: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #28: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #29: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #30: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #31: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #32: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #33: 0x00000001a046b454 libsystem_c.dylib`abort + 124 frame #34: 0x0000000100194fc0 python`os_abort + 12 frame #35: 0x00000001000758a8 python`cfunction_vectorcall_NOARGS + 324 frame #36: 0x00000001001140f0 python`call_function + 460 frame #37: 0x000000010011086c python`_PyEval_EvalFrameDefault + 27176 frame #38: 0x00000001000287e4 python`function_code_fastcall + 128 frame #39: 0x0000000100028008 python`PyVectorcall_Call + 120 frame #40: 0x0000000100110b20 python`_PyEval_EvalFrameDefault + 27868 frame #41: 0x000000010010982c python`_PyEval_EvalCodeWithName + 3008 frame #42: 0x0000000100028948 python`_PyFunction_Vectorcall + 208 frame #43: 0x0000000100028008 python`PyVectorcall_Call + 120 ```
Related Issue: #7140 ### Brief Summary On macOS, when test worker hard fails (abort, EXC_BAD_ACCESS, etc.), backward_cpp's signal handler will re-raise the signal and catch it afterwards, make it an infinite loop, at the moment the offending process can't be terminated easily (except a SIGKILL), eat CPU cycles and blocks test runner. ``` (lldb) bt * thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT * frame #0: 0x00000001a04f0e28 libsystem_kernel.dylib`__pthread_kill + 8 frame #1: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #2: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #3: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #4: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #5: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #6: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #7: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #8: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #9: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #10: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #11: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #12: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #13: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #14: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #15: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #16: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #17: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #18: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #19: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #20: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #21: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #22: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #23: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #24: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #25: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #26: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #27: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #28: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #29: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #30: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #31: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #32: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #33: 0x00000001a046b454 libsystem_c.dylib`abort + 124 frame #34: 0x0000000100194fc0 python`os_abort + 12 frame #35: 0x00000001000758a8 python`cfunction_vectorcall_NOARGS + 324 frame #36: 0x00000001001140f0 python`call_function + 460 frame #37: 0x000000010011086c python`_PyEval_EvalFrameDefault + 27176 frame #38: 0x00000001000287e4 python`function_code_fastcall + 128 frame #39: 0x0000000100028008 python`PyVectorcall_Call + 120 frame #40: 0x0000000100110b20 python`_PyEval_EvalFrameDefault + 27868 frame #41: 0x000000010010982c python`_PyEval_EvalCodeWithName + 3008 frame #42: 0x0000000100028948 python`_PyFunction_Vectorcall + 208 frame #43: 0x0000000100028008 python`PyVectorcall_Call + 120 ```
Related Issue: #7140 ### Brief Summary On macOS, when test worker hard fails (abort, EXC_BAD_ACCESS, etc.), backward_cpp's signal handler will re-raise the signal and catch it afterwards, make it an infinite loop, at the moment the offending process can't be terminated easily (except a SIGKILL), eat CPU cycles and blocks test runner. ``` (lldb) bt * thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT * frame #0: 0x00000001a04f0e28 libsystem_kernel.dylib`__pthread_kill + 8 frame #1: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #2: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #3: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #4: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #5: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #6: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #7: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #8: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #9: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #10: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #11: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #12: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #13: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #14: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #15: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #16: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #17: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #18: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #19: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #20: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #21: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #22: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #23: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #24: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #25: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #26: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #27: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #28: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #29: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #30: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #31: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #32: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #33: 0x00000001a046b454 libsystem_c.dylib`abort + 124 frame #34: 0x0000000100194fc0 python`os_abort + 12 frame #35: 0x00000001000758a8 python`cfunction_vectorcall_NOARGS + 324 frame #36: 0x00000001001140f0 python`call_function + 460 frame #37: 0x000000010011086c python`_PyEval_EvalFrameDefault + 27176 frame #38: 0x00000001000287e4 python`function_code_fastcall + 128 frame #39: 0x0000000100028008 python`PyVectorcall_Call + 120 frame #40: 0x0000000100110b20 python`_PyEval_EvalFrameDefault + 27868 frame #41: 0x000000010010982c python`_PyEval_EvalCodeWithName + 3008 frame #42: 0x0000000100028948 python`_PyFunction_Vectorcall + 208 frame #43: 0x0000000100028008 python`PyVectorcall_Call + 120 ```
Related Issue: #7140 ### Brief Summary On macOS, when test worker hard fails (abort, EXC_BAD_ACCESS, etc.), backward_cpp's signal handler will re-raise the signal and catch it afterwards, make it an infinite loop, at the moment the offending process can't be terminated easily (except a SIGKILL), eat CPU cycles and blocks test runner. ``` (lldb) bt * thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT * frame #0: 0x00000001a04f0e28 libsystem_kernel.dylib`__pthread_kill + 8 frame #1: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #2: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #3: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #4: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #5: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #6: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #7: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #8: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #9: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #10: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #11: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #12: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #13: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #14: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #15: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #16: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #17: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #18: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #19: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #20: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #21: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #22: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #23: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #24: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #25: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #26: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #27: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame #28: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #29: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #30: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame #31: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame #32: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame #33: 0x00000001a046b454 libsystem_c.dylib`abort + 124 frame #34: 0x0000000100194fc0 python`os_abort + 12 frame #35: 0x00000001000758a8 python`cfunction_vectorcall_NOARGS + 324 frame #36: 0x00000001001140f0 python`call_function + 460 frame #37: 0x000000010011086c python`_PyEval_EvalFrameDefault + 27176 frame #38: 0x00000001000287e4 python`function_code_fastcall + 128 frame #39: 0x0000000100028008 python`PyVectorcall_Call + 120 frame #40: 0x0000000100110b20 python`_PyEval_EvalFrameDefault + 27868 frame #41: 0x000000010010982c python`_PyEval_EvalCodeWithName + 3008 frame #42: 0x0000000100028948 python`_PyFunction_Vectorcall + 208 frame #43: 0x0000000100028008 python`PyVectorcall_Call + 120 ```
Related Issue: taichi-dev#7140 ### Brief Summary On macOS, when test worker hard fails (abort, EXC_BAD_ACCESS, etc.), backward_cpp's signal handler will re-raise the signal and catch it afterwards, make it an infinite loop, at the moment the offending process can't be terminated easily (except a SIGKILL), eat CPU cycles and blocks test runner. ``` (lldb) bt * thread taichi-dev#1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT * frame #0: 0x00000001a04f0e28 libsystem_kernel.dylib`__pthread_kill + 8 frame taichi-dev#1: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame taichi-dev#2: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame taichi-dev#3: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame taichi-dev#4: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame taichi-dev#5: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame taichi-dev#6: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame taichi-dev#7: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame taichi-dev#8: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame taichi-dev#9: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame taichi-dev#10: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame taichi-dev#11: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame taichi-dev#12: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame taichi-dev#13: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame taichi-dev#14: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame taichi-dev#15: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame taichi-dev#16: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame taichi-dev#17: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame taichi-dev#18: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame taichi-dev#19: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame taichi-dev#20: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame taichi-dev#21: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame taichi-dev#22: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame taichi-dev#23: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame taichi-dev#24: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame taichi-dev#25: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame taichi-dev#26: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame taichi-dev#27: 0x00000001283a0848 taichi_python.cpython-38-darwin.so`backward::SignalHandling::sig_handler(int, __siginfo*, void*) + 28 frame taichi-dev#28: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame taichi-dev#29: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame taichi-dev#30: 0x00000001a0402e10 libsystem_c.dylib`raise + 32 frame taichi-dev#31: 0x00000001a056ec44 libsystem_platform.dylib`_sigtramp + 56 frame taichi-dev#32: 0x00000001a052343c libsystem_pthread.dylib`pthread_kill + 292 frame taichi-dev#33: 0x00000001a046b454 libsystem_c.dylib`abort + 124 frame taichi-dev#34: 0x0000000100194fc0 python`os_abort + 12 frame taichi-dev#35: 0x00000001000758a8 python`cfunction_vectorcall_NOARGS + 324 frame taichi-dev#36: 0x00000001001140f0 python`call_function + 460 frame taichi-dev#37: 0x000000010011086c python`_PyEval_EvalFrameDefault + 27176 frame taichi-dev#38: 0x00000001000287e4 python`function_code_fastcall + 128 frame taichi-dev#39: 0x0000000100028008 python`PyVectorcall_Call + 120 frame taichi-dev#40: 0x0000000100110b20 python`_PyEval_EvalFrameDefault + 27868 frame taichi-dev#41: 0x000000010010982c python`_PyEval_EvalCodeWithName + 3008 frame taichi-dev#42: 0x0000000100028948 python`_PyFunction_Vectorcall + 208 frame taichi-dev#43: 0x0000000100028008 python`PyVectorcall_Call + 120 ```
Removes the dependency on opencv from the renderer in favor of TKinter (which is included with Python) and adds a new dependency on Pillow.
The frame viewer automatically updates for each frame and can be disabled by invoking a script like
python bubbles.py --no-viewer
.