question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Fatal error with snippet using `np.random` and `scipy.linalg`

See original GitHub issue

🐛 Bug

I get a fatal error when trying to run a snippet using numpy.random and scipy.linalg inside node.

I get somewhat similar issues when trying to run the snippet in Chromium or Firefox.

Note the behaviour is not always the same on each run. In particular, the error does not happen on the same loop iteration. I have seen this kind of variations:

  • Pyodide fatal error: memory access out of bounds or table index out of bounds or null function or function signature mismatch
  • weird Python error that does not make sense (since the code works in previous loop iterations) e.g. TypeError: my_make_regression() got multiple values for argument 'n_features' or SystemError: Type does not define the tp_name field.
  • in Chromium: the tab crashes with a “Aw snap” message
  • what seems like a hang, i.e. the loop counter is not printed anymore

I tried to get more info by building Pyodide myself with -g2 flags on commit https://github.com/pyodide/pyodide/commit/2326c05d83bb172d3a8b3d267d3440ed687f5c8d. Out of 20 runs, here is the kind of stack-trace I got (with some kind of grouping):

memory access out of bounds dlfree (3 times) </summary
Stack (most recent call first):
  File "<exec>", line 9 in my_make_regression
  File "<exec>", line 5 in <module>
  File "/lib/python3.10/_pyodide/_base.py", line 357 in run_async
  File "/lib/python3.10/_pyodide/_base.py", line 531 in eval_code_async
  File "/lib/python3.10/asyncio/tasks.py", line 232 in __step
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: memory access out of bounds
    at dlfree (wasm://wasm/01f433ea:wasm-function[8627]:0x3a2b27)
    at _PyMem_RawFree (wasm://wasm/01f433ea:wasm-function[2006]:0x15b64f)
    at PyObject_Free (wasm://wasm/01f433ea:wasm-function[2038]:0x15c899)
    at object_dealloc (wasm://wasm/01f433ea:wasm-function[2259]:0x16cad1)
    at _Py_Dealloc (wasm://wasm/01f433ea:wasm-function[1992]:0x15b407)
    at __pyx_pw_5numpy_6random_13bit_generator_1_int_to_uint32_array (wasm://wasm/00087946:wasm-function[237]:0x14cb3)
    at __pyx_pw_5numpy_6random_13bit_generator_3_coerce_to_uint32_array (wasm://wasm/00087946:wasm-function[238]:0x162b3)
    at __pyx_f_5numpy_6random_13bit_generator_12SeedSequence_get_assembled_entropy (wasm://wasm/00087946:wasm-function[147]:0x8f88)
    at __pyx_pw_5numpy_6random_13bit_generator_12SeedSequence_1__init__ (wasm://wasm/00087946:wasm-function[213]:0xff93)
    at type_call (wasm://wasm/01f433ea:wasm-function[2243]:0x16aba2) {
  pyodide_fatal_error: true
}
Stack (most recent call first):
  File "<exec>", line 9 in my_make_regression
  File "<exec>", line 5 in <module>
  File "/lib/python3.10/_pyodide/_base.py", line 357 in run_async
  File "/lib/python3.10/_pyodide/_base.py", line 531 in eval_code_async
  File "/lib/python3.10/asyncio/tasks.py", line 232 in __step
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: memory access out of bounds
    at dlfree (wasm://wasm/01f433ea:wasm-function[8627]:0x3a2b27)
    at _PyMem_RawFree (wasm://wasm/01f433ea:wasm-function[2006]:0x15b64f)
    at PyObject_Free (wasm://wasm/01f433ea:wasm-function[2038]:0x15c899)
    at PyObject_GC_Del (wasm://wasm/01f433ea:wasm-function[3969]:0x234a30)
    at tb_dealloc (wasm://wasm/01f433ea:wasm-function[3847]:0x226a7c)
    at _Py_Dealloc (wasm://wasm/01f433ea:wasm-function[1992]:0x15b407)
    at PyTraceBack_Here (wasm://wasm/01f433ea:wasm-function[3849]:0x226d2f)
    at __Pyx_AddTraceback (wasm://wasm/00087946:wasm-function[133]:0x83f9)
    at __pyx_pw_5numpy_6random_13bit_generator_12BitGenerator_1__init__ (wasm://wasm/00087946:wasm-function[189]:0xc4e2)
    at wrap_init (wasm://wasm/01f433ea:wasm-function[2345]:0x1727e0) {
  pyodide_fatal_error: true
}
Stack (most recent call first):
  File "/lib/python3.10/site-packages/scipy/linalg/_basic.py", line 1192 in lstsq
  File "<exec>", line 6 in <module>
  File "/lib/python3.10/_pyodide/_base.py", line 357 in run_async
  File "/lib/python3.10/_pyodide/_base.py", line 531 in eval_code_async
  File "/lib/python3.10/asyncio/tasks.py", line 232 in __step
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: memory access out of bounds
    at dlfree (wasm://wasm/01f433ea:wasm-function[8627]:0x3a29df)
    at _PyMem_RawFree (wasm://wasm/01f433ea:wasm-function[2006]:0x15b64f)
    at PyObject_Free (wasm://wasm/01f433ea:wasm-function[2038]:0x15c899)
    at unicode_dealloc (wasm://wasm/01f433ea:wasm-function[2597]:0x19574b)
    at _Py_Dealloc (wasm://wasm/01f433ea:wasm-function[1992]:0x15b407)
    at _Py_DisplaySourceLine (wasm://wasm/01f433ea:wasm-function[3851]:0x22740e)
    at PyTraceBack_Print (wasm://wasm/01f433ea:wasm-function[3852]:0x22789c)
    at write_unraisable_exc (wasm://wasm/01f433ea:wasm-function[3258]:0x1ed01d)
    at sys_unraisablehook (wasm://wasm/01f433ea:wasm-function[3818]:0x2260bb)
    at method_call_trampoline (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1410:82) {
  pyodide_fatal_error: true
}
memory access out of bounds `dlmalloc` (4 times)
Stack (most recent call first):
  File "/lib/python3.10/site-packages/numpy/lib/function_base.py", line 602 in asarray_chkfinite
  File "/lib/python3.10/site-packages/scipy/ ###_lib/_util.py", line 287 in _asarray_validated
  File "/lib/python3.10/site-packages/scipy/linalg/_basic.py", line 1134 in lstsq
  File "<exec>", line 6 in <module>
  File "/lib/python3.10/_pyodide/_base.py", line 357 in run_async
  File "/lib/python3.10/_pyodide/_base.py", line 531 in eval_code_async
  File "/lib/python3.10/asyncio/tasks.py", line 232 in __step
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: memory access out of bounds
    at dlmalloc (wasm://wasm/01f433ea:wasm-function[8626]:0x3a14c7)
    at default_malloc (wasm://wasm/00978c1e:wasm-function[550]:0x1da38)
    at PyDataMem_UserNEW (wasm://wasm/00978c1e:wasm-function[554]:0x1db3b)
    at PyArray_NewFromDescr_int (wasm://wasm/00978c1e:wasm-function[1283]:0x50151)
    at PyArray_NewFromDescr (wasm://wasm/00978c1e:wasm-function[1285]:0x50611)
    at ufunc_generic_fastcall (wasm://wasm/00978c1e:wasm-function[4380]:0x1a6be0)
    at ufunc_generic_vectorcall (wasm://wasm/00978c1e:wasm-function[4379]:0x1a510c)
    at call_function (wasm://wasm/01f433ea:wasm-function[3041]:0x1d6566)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d418d)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce77e) {
  pyodide_fatal_error: true
}
Stack (most recent call first):
  File "/lib/python3.10/contextlib.py", line 79 in inner
  File "<exec>", line 9 in my_make_regression
  File "<exec>", line 5 in <module>
  File "/lib/python3.10/_pyodide/_base.py", line 357 in run_async
  File "/lib/python3.10/_pyodide/_base.py", line 531 in eval_code_async
  File "/lib/python3.10/asyncio/tasks.py", line 232 in __step
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: memory access out of bounds
    at dlmalloc (wasm://wasm/01f433ea:wasm-function[8626]:0x3a123e)
    at _PyMem_RawMalloc (wasm://wasm/01f433ea:wasm-function[2003]:0x15b61d)
    at PyObject_Malloc (wasm://wasm/01f433ea:wasm-function[2035]:0x15c819)
    at PyUnicode_New (wasm://wasm/01f433ea:wasm-function[2407]:0x1763c1)
    at _PyUnicodeWriter_PrepareInternal (wasm://wasm/01f433ea:wasm-function[2441]:0x17b316)
    at _PyUnicodeWriter_WriteASCIIString (wasm://wasm/01f433ea:wasm-function[2440]:0x17afdc)
    at PyUnicode_FromFormatV (wasm://wasm/01f433ea:wasm-function[2438]:0x17a55f)
    at PyErr_Format (wasm://wasm/01f433ea:wasm-function[3219]:0x1ebc6c)
    at array_item (wasm://wasm/00978c1e:wasm-function[2717]:0xc9217)
    at PySequence_GetItem (wasm://wasm/01f433ea:wasm-function[629]:0x102c9c) {
  pyodide_fatal_error: true
}
Stack (most recent call first):
  File "/lib/python3.10/linecache.py", line 137 in updatecache
  File "/lib/python3.10/linecache.py", line 46 in getlines
  File "/lib/python3.10/linecache.py", line 30 in getline
  File "/lib/python3.10/traceback.py", line 306 in line
  File "/lib/python3.10/traceback.py", line 383 in extract
  File "/lib/python3.10/traceback.py", line 502 in __init__
  File "/lib/python3.10/traceback.py", line 135 in format_exception
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: memory access out of bounds
    at dlmalloc (wasm://wasm/01f433ea:wasm-function[8626]:0x3a14c7)
    at dlrealloc (wasm://wasm/01f433ea:wasm-function[8628]:0x3a2eaf)
    at _PyMem_RawRealloc (wasm://wasm/01f433ea:wasm-function[2005]:0x15b647)
    at PyMem_Realloc (wasm://wasm/01f433ea:wasm-function[2030]:0x15c70d)
    at list_extend (wasm://wasm/01f433ea:wasm-function[1504]:0x1364b1)
    at method_call_trampoline (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1410:82)
    at method_vectorcall_O (wasm://wasm/01f433ea:wasm-function[1100]:0x122ca5)
    at object_vacall (wasm://wasm/01f433ea:wasm-function[977]:0x11b925)
    at _PyObject_CallMethodIdObjArgs (wasm://wasm/01f433ea:wasm-function[978]:0x11ba49)
    at _io__IOBase_readlines (wasm://wasm/01f433ea:wasm-function[6755]:0x331e21) {
  pyodide_fatal_error: true
}
Stack (most recent call first):
  File "/lib/python3.10/linecache.py", line 137 in updatecache
  File "/lib/python3.10/linecache.py", line 46 in getlines
  File "/lib/python3.10/linecache.py", line 30 in getline
  File "/lib/python3.10/traceback.py", line 306 in line
  File "/lib/python3.10/traceback.py", line 383 in extract
  File "/lib/python3.10/traceback.py", line 502 in __init__
  File "/lib/python3.10/traceback.py", line 135 in format_exception
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: memory access out of bounds
    at dlmalloc (wasm://wasm/01f433ea:wasm-function[8626]:0x3a0fd8)
    at _PyMem_RawMalloc (wasm://wasm/01f433ea:wasm-function[2003]:0x15b61d)
    at PyObject_Malloc (wasm://wasm/01f433ea:wasm-function[2035]:0x15c819)
    at PyUnicode_New (wasm://wasm/01f433ea:wasm-function[2407]:0x1763c1)
    at _PyUnicode_FromASCII (wasm://wasm/01f433ea:wasm-function[2427]:0x17937b)
    at PyUnicode_Substring (wasm://wasm/01f433ea:wasm-function[2582]:0x18e575)
    at _textiowrapper_readline (wasm://wasm/01f433ea:wasm-function[6890]:0x33b0c5)
    at textiowrapper_iternext (wasm://wasm/01f433ea:wasm-function[6889]:0x33ac14)
    at list_extend (wasm://wasm/01f433ea:wasm-function[1504]:0x13651f)
    at method_call_trampoline (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1410:82) {
  pyodide_fatal_error: true
}
memory access out of bounds in Fortran code (3 times)
Stack (most recent call first):
  File "/lib/python3.10/asyncio/tasks.py", line 246 in __step
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: memory access out of bounds
    at dlacpy_ (wasm://wasm/00e47a32:wasm-function[1601]:0x353aa9)
    at dlals0_ (wasm://wasm/00e47a32:wasm-function[610]:0x1397c5)
    at dlalsa_ (wasm://wasm/00e47a32:wasm-function[611]:0x13a013)
    at dlalsd_ (wasm://wasm/00e47a32:wasm-function[612]:0x13ad53)
    at dgelsd_ (wasm://wasm/00e47a32:wasm-function[550]:0x10f9a9)
    at f2py_rout__flapack_dgelsd (wasm://wasm/006793d6:wasm-function[248]:0x30f3f)
    at fortran_call (wasm://wasm/0003dbea:wasm-function[103]:0x664d)
    at method_call_trampoline (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1410:82)
    at _PyObject_MakeTpCall (wasm://wasm/01f433ea:wasm-function[956]:0x11a5e6)
    at call_function (wasm://wasm/01f433ea:wasm-function[3041]:0x1d6549) {
  pyodide_fatal_error: true
}
Stack (most recent call first):
  File "/lib/python3.10/site-packages/scipy/linalg/_basic.py", line 1192 in lstsq
  File "<exec>", line 6 in <module>
  File "/lib/python3.10/_pyodide/_base.py", line 357 in run_async
  File "/lib/python3.10/_pyodide/_base.py", line 531 in eval_code_async
  File "/lib/python3.10/asyncio/tasks.py", line 232 in __step
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: memory access out of bounds
    at dlacpy_ (wasm://wasm/00e47a32:wasm-function[1601]:0x353aa9)
    at dlals0_ (wasm://wasm/00e47a32:wasm-function[610]:0x1397c5)
    at dlalsa_ (wasm://wasm/00e47a32:wasm-function[611]:0x13a013)
    at dlalsd_ (wasm://wasm/00e47a32:wasm-function[612]:0x13ad53)
    at dgelsd_ (wasm://wasm/00e47a32:wasm-function[550]:0x10f9a9)
    at f2py_rout__flapack_dgelsd (wasm://wasm/006793d6:wasm-function[248]:0x30f3f)
    at fortran_call (wasm://wasm/0003dbea:wasm-function[103]:0x664d)
    at method_call_trampoline (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1410:82)
    at _PyObject_MakeTpCall (wasm://wasm/01f433ea:wasm-function[956]:0x11a5e6)
    at call_function (wasm://wasm/01f433ea:wasm-function[3041]:0x1d6549) {
  pyodide_fatal_error: true
}
Stack (most recent call first):
  File "/lib/python3.10/site-packages/scipy/linalg/_basic.py", line 1192 in lstsq
  File "<exec>", line 6 in <module>
  File "/lib/python3.10/_pyodide/_base.py", line 357 in run_async
  File "/lib/python3.10/_pyodide/_base.py", line 531 in eval_code_async
  File "/lib/python3.10/asyncio/tasks.py", line 232 in __step
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: memory access out of bounds
    at dlasd7_ (wasm://wasm/00e47a32:wasm-function[1645]:0x36894c)
    at dlasd6_ (wasm://wasm/00e47a32:wasm-function[1644]:0x36841e)
    at dlasda_ (wasm://wasm/00e47a32:wasm-function[1647]:0x369ffd)
    at dlalsd_ (wasm://wasm/00e47a32:wasm-function[612]:0x13acfc)
    at dgelsd_ (wasm://wasm/00e47a32:wasm-function[550]:0x10f9a9)
    at f2py_rout__flapack_dgelsd (wasm://wasm/006793d6:wasm-function[248]:0x30f3f)
    at fortran_call (wasm://wasm/0003dbea:wasm-function[103]:0x664d)
    at method_call_trampoline (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1410:82)
    at _PyObject_MakeTpCall (wasm://wasm/01f433ea:wasm-function[956]:0x11a5e6)
    at call_function (wasm://wasm/01f433ea:wasm-function[3041]:0x1d6549) {
  pyodide_fatal_error: true
}
memory access out of bounds `PyUnicode_FromFormatV` (1 time)
Stack (most recent call first):
  File "/lib/python3.10/contextlib.py", line 79 in inner
  File "<exec>", line 9 in my_make_regression
  File "<exec>", line 5 in <module>
  File "/lib/python3.10/_pyodide/_base.py", line 357 in run_async
  File "/lib/python3.10/_pyodide/_base.py", line 531 in eval_code_async
  File "/lib/python3.10/asyncio/tasks.py", line 232 in __step
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: memory access out of bounds
    at PyUnicode_FromFormatV (wasm://wasm/01f433ea:wasm-function[2438]:0x17aa7f)
    at _PyErr_Format (wasm://wasm/01f433ea:wasm-function[3216]:0x1eb9b4)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d43d1)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce77e)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at PyVectorcall_Call (wasm://wasm/01f433ea:wasm-function[961]:0x11aafa)
    at __pyx_pw_5numpy_6random_8_mt19937_7MT19937_1__init__ (wasm://wasm/0003b756:wasm-function[110]:0x4dcd)
    at type_call (wasm://wasm/01f433ea:wasm-function[2243]:0x16aba2)
    at __Pyx_PyObject_Call (wasm://wasm/00207e6e:wasm-function[138]:0xe488)
    at __pyx_pw_5numpy_6random_6mtrand_11RandomState_1__init__ (wasm://wasm/00207e6e:wasm-function[148]:0xf51f) {
  pyodide_fatal_error: true
}
table index is out of bounds in `_Py_Dealloc` (2 times)
Stack (most recent call first):
  File "/lib/python3.10/asyncio/tasks.py", line 246 in __step
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: table index is out of bounds
    at _Py_Dealloc (wasm://wasm/01f433ea:wasm-function[1992]:0x15b407)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d253b)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce77e)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at method_vectorcall (wasm://wasm/01f433ea:wasm-function[1007]:0x11c6a9)
    at context_run (wasm://wasm/01f433ea:wasm-function[3206]:0x1eb3ea)
    at cfunction_vectorcall_FASTCALL_KEYWORDS (wasm://wasm/01f433ea:wasm-function[1869]:0x155cea)
    at PyVectorcall_Call (wasm://wasm/01f433ea:wasm-function[961]:0x11aafa)
    at _PyObject_Call (wasm://wasm/01f433ea:wasm-function[962]:0x11abf4)
    at PyObject_Call (wasm://wasm/01f433ea:wasm-function[963]:0x11ac97) {
  pyodide_fatal_error: true
}
Stack (most recent call first):
  File "<__array_function__ internals>", line 179 in copyto
  File "/lib/python3.10/site-packages/numpy/core/numeric.py", line 205 in ones
  File "<exec>", line 11 in my_make_regression
  File "<exec>", line 5 in <module>
  File "/lib/python3.10/_pyodide/_base.py", line 357 in run_async
  File "/lib/python3.10/_pyodide/_base.py", line 531 in eval_code_async
  File "/lib/python3.10/asyncio/tasks.py", line 232 in __step
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: table index is out of bounds
    at _Py_Dealloc (wasm://wasm/01f433ea:wasm-function[1992]:0x15b407)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce60d)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at PyVectorcall_Call (wasm://wasm/01f433ea:wasm-function[961]:0x11ab37)
    at _PyObject_Call (wasm://wasm/01f433ea:wasm-function[962]:0x11abf4)
    at PyObject_Call (wasm://wasm/01f433ea:wasm-function[963]:0x11ac97)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d4771)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce77e)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at call_function (wasm://wasm/01f433ea:wasm-function[3041]:0x1d6566) {
  pyodide_fatal_error: true
}
null function or function signature mismatch in `_PyDealloc` (4 times)
Stack (most recent call first):
  File "/lib/python3.10/site-packages/scipy/_lib/_util.py", line 284 in _asarray_validated
  File "/lib/python3.10/site-packages/scipy/linalg/_basic.py", line 1134 in lstsq
  File "<exec>", line 6 in <module>
  File "/lib/python3.10/_pyodide/_base.py", line 357 in run_async
  File "/lib/python3.10/_pyodide/_base.py", line 531 in eval_code_async
  File "/lib/python3.10/asyncio/tasks.py", line 232 in __step
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: null function or function signature mismatch
    at _Py_Dealloc (wasm://wasm/01f433ea:wasm-function[1992]:0x15b407)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce805)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at call_function (wasm://wasm/01f433ea:wasm-function[3041]:0x1d6566)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d418d)
    at _PyEval_Vector (wasm-->://wasm/01f433ea:wasm-function[3029]:0x1ce77e)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at call_function (wasm://wasm/01f433ea:wasm-function[3041]:0x1d6566)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d4239)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce77e) {
  pyodide_fatal_error: true
}
Stack (most recent call first):
  File "<__array_function__ internals>", line 179 in copyto
  File "/lib/python3.10/site-packages/numpy/core/numeric.py", line 205 in ones
  File "<exec>", line 11 in my_make_regression
  File "<exec>", line 5 in <module>
  File "/lib/python3.10/_pyodide/_base.py", line 357 in run_async
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: null function or function signature mismatch
    at _Py_Dealloc (wasm://wasm/01f433ea:wasm-function[1992]:0x15b407)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d478d)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce77e)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at call_function (wasm://wasm/01f433ea:wasm-function[3041]:0x1d6566)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d4239)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce77e)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at call_function (wasm://wasm/01f433ea:wasm-function[3041]:0x1d6566)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d418d) {
  pyodide_fatal_error: true
}
Stack (most recent call first):
  File "/lib/python3.10/asyncio/futures.py", line 269 in set_exception
  File "/lib/python3.10/asyncio/tasks.py", line 250 in __step
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: null function or function signature mismatch
    at PyDict_GetItemWithError (wasm://wasm/01f433ea:wasm-function[1666]:0x146ccc)
    at _PyObject_GenericGetAttrWithDict (wasm://wasm/01f433ea:wasm-function[1965]:0x159ec6)
    at PyObject_GenericGetAttr (wasm://wasm/01f433ea:wasm-function[1964]:0x159db2)
    at PyObject_GetAttr (wasm://wasm/01f433ea:wasm-function[1956]:0x159893)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d4bb9)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce77e)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at method_vectorcall (wasm://wasm/01f433ea:wasm-function[1007]:0x11c639)
    at call_function (wasm://wasm/01f433ea:wasm-function[3041]:0x1d6566)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d418d) {
  pyodide_fatal_error: true
}
Stack (most recent call first):
  File "/lib/python3.10/site-packages/numpy/core/_methods.py", line 62 in _all
  File "/lib/python3.10/site-packages/numpy/lib/function_base.py", line 602 in asarray_chkfinite
  File "/lib/python3.10/site-packages/scipy/_lib/_util.py", line 287 in _asarray_validated
  File "/lib/python3.10/site-packages/scipy/linalg/_basic.py", line 1134 in lstsq
  File "<exec>", line 6 in <module>
  File "/lib/python3.10/_pyodide/_base.py", line 357 in run_async
  File "/lib/python3.10/_pyodide/_base.py", line 531 in eval_code_async
  File "/lib/python3.10/asyncio/tasks.py", line 232 in __step
  File "/lib/python3.10/asyncio/events.py", line 80 in _run
  File "/lib/python3.10/pyodide/webloop.py", line 267 in run_handle
/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:452
      throw ex;
      ^

RuntimeError: null function or function signature mismatch
    at _Py_Dealloc (wasm://wasm/01f433ea:wasm-function[1992]:0x15b407)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d22bb)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce77e)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at PyVectorcall_Call (wasm://wasm/01f433ea:wasm-function[961]:0x11aafa)
    at _PyObject_Call (wasm://wasm/01f433ea:wasm-function[962]:0x11abf4)
    at PyObject_Call (wasm://wasm/01f433ea:wasm-function[963]:0x11ac97)
    at array_all (wasm://wasm/00978c1e:wasm-function[2751]:0xd21af)
    at method_call_trampoline (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1410:82)
    at method_vectorcall_VARARGS_KEYWORDS (wasm://wasm/01f433ea:wasm-function[1101]:0x122e5f) {
  pyodide_fatal_error: true
}
`PythonError` that does not make sense (3 times)
PythonError: Traceback (most recent call last):
  File "/lib/python3.10/asyncio/futures.py", line 201, in result
    raise self._exception
  File "/lib/python3.10/asyncio/tasks.py", line 232, in __step
    result = coro.send(None)
  File "/lib/python3.10/_pyodide/_base.py", line 531, in eval_code_async
    await CodeRunner(
  File "/lib/python3.10/_pyodide/_base.py", line 357, in run_async
    coroutine = eval(self.code, globals, locals)
  File "<exec>", line 5, in <module>
  File "<exec>", line 13, in my_make_regression
ValueError: matmul: Input operand 1 does not have enough dimensions (has 1, gufunc core with signature (n?,k),(k,m?)->(n?,m?) requires 2)

    at new_error (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1295:75)
    at wrap_exception (wasm://wasm/01f433ea:wasm-function[281]:0xd2f26)
    at FutureDoneCallback_call (wasm://wasm/01f433ea:wasm-function[391]:0xd7ada)
    at method_call_trampoline (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1410:82)
    at _PyObject_MakeTpCall (wasm://wasm/01f433ea:wasm-function[956]:0x11a5e6)
    at context_run (wasm://wasm/01f433ea:wasm-function[3206]:0x1eb3d6)
    at cfunction_vectorcall_FASTCALL_KEYWORDS (wasm://wasm/01f433ea:wasm-function[1869]:0x155cea)
    at PyVectorcall_Call (wasm://wasm/01f433ea:wasm-function[961]:0x11aafa)
    at _PyObject_Call (wasm://wasm/01f433ea:wasm-function[962]:0x11abf4)
    at PyObject_Call (wasm://wasm/01f433ea:wasm-function[963]:0x11ac97)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d4771)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce77e)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at call_function (wasm://wasm/01f433ea:wasm-function[3041]:0x1d6566)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d41b3)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce77e)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at _pyproxy_apply (wasm://wasm/01f433ea:wasm-function[386]:0xd77a6)
    at Object.Module.callPyObjectKwargs (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:338:5838)
    at Object.Module.callPyObject (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:338:6216)
    at Timeout.wrapper [as _onTimeout] (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1394:228)
    at listOnTimeout (node:internal/timers:559:17)
    at processTimers (node:internal/timers:502:7) {
  __error_address: 34329224
}
PythonError: Traceback (most recent call last):
  File "/lib/python3.10/asyncio/futures.py", line 201, in result
    raise self._exception
  File "/lib/python3.10/asyncio/tasks.py", line 232, in __step
    result = coro.send(None)
  File "/lib/python3.10/_pyodide/_base.py", line 531, in eval_code_async
    await CodeRunner(
  File "/lib/python3.10/_pyodide/_base.py", line 357, in run_async
    coroutine = eval(self.code, globals, locals)
  File "<exec>", line 6, in <module>
  File "/lib/python3.10/site-packages/scipy/linalg/_basic.py", line 1134, in lstsq
    a1 = _asarray_validated(a, check_finite=check_finite)
  File "/lib/python3.10/site-packages/scipy/_lib/_util.py", line 287, in _asarray_validated
    a = toarray(a)
  File "/lib/python3.10/site-packages/numpy/lib/function_base.py", line 602, in asarray_chkfinite
    if a.dtype.char in typecodes['AllFloat'] and not np.isfinite(a).all():
SystemError: Type does not define the tp_name field.

    at new_error (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1295:75)
    at wrap_exception (wasm://wasm/01f433ea:wasm-function[281]:0xd2f26)
    at FutureDoneCallback_call (wasm://wasm/01f433ea:wasm-function[391]:0xd7ada)
    at method_call_trampoline (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1410:82)
    at _PyObject_MakeTpCall (wasm://wasm/01f433ea:wasm-function[956]:0x11a5e6)
    at context_run (wasm://wasm/01f433ea:wasm-function[3206]:0x1eb3d6)
    at cfunction_vectorcall_FASTCALL_KEYWORDS (wasm://wasm/01f433ea:wasm-function[1869]:0x155cea)
    at PyVectorcall_Call (wasm://wasm/01f433ea:wasm-function[961]:0x11aafa)
    at _PyObject_Call (wasm://wasm/01f433ea:wasm-function[962]:0x11abf4)
    at PyObject_Call (wasm://wasm/01f433ea:wasm-function[963]:0x11ac97)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d4771)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce77e)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at call_function (wasm://wasm/01f433ea:wasm-function[3041]:0x1d6566)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d41b3)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce77e)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at _pyproxy_apply (wasm://wasm/01f433ea:wasm-function[386]:0xd77a6)
    at Object.Module.callPyObjectKwargs (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:338:5838)
    at Object.Module.callPyObject (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:338:6216)
    at Timeout.wrapper [as _onTimeout] (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1394:228)
    at listOnTimeout (node:internal/timers:559:17)
    at processTimers (node:internal/timers:502:7) {
  __error_address: 18010544
}
PythonError: Traceback (most recent call last):
  File "/lib/python3.10/asyncio/futures.py", line 201, in result
    raise self._exception
  File "/lib/python3.10/asyncio/tasks.py", line 232, in __step
    result = coro.send(None)
  File "/lib/python3.10/_pyodide/_base.py", line 531, in eval_code_async
    await CodeRunner(
  File "/lib/python3.10/_pyodide/_base.py", line 357, in run_async
    coroutine = eval(self.code, globals, locals)
  File "<exec>", line 6, in <module>
  File "/lib/python3.10/site-packages/scipy/linalg/_basic.py", line 1204, in lstsq
    resids = np.asarray([], dtype=x.dtype)
SystemError: Objects/dictobject.c:1514: bad argument to internal function

    at new_error (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1295:75)
    at wrap_exception (wasm://wasm/01f433ea:wasm-function[281]:0xd2f26)
    at FutureDoneCallback_call (wasm://wasm/01f433ea:wasm-function[391]:0xd7ada)
    at method_call_trampoline (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1410:82)
    at _PyObject_MakeTpCall (wasm://wasm/01f433ea:wasm-function[956]:0x11a5e6)
    at context_run (wasm://wasm/01f433ea:wasm-function[3206]:0x1eb3d6)
    at cfunction_vectorcall_FASTCALL_KEYWORDS (wasm://wasm/01f433ea:wasm-function[1869]:0x155cea)
    at PyVectorcall_Call (wasm://wasm/01f433ea:wasm-function[961]:0x11aafa)
    at _PyObject_Call (wasm://wasm/01f433ea:wasm-function[962]:0x11abf4)
    at PyObject_Call (wasm://wasm/01f433ea:wasm-function[963]:0x11ac97)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d4771)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce77e)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at call_function (wasm://wasm/01f433ea:wasm-function[3041]:0x1d6566)
    at _PyEval_EvalFrameDefault (wasm://wasm/01f433ea:wasm-function[3032]:0x1d41b3)
    at _PyEval_Vector (wasm://wasm/01f433ea:wasm-function[3029]:0x1ce77e)
    at _PyFunction_Vectorcall (wasm://wasm/01f433ea:wasm-function[964]:0x11acda)
    at _pyproxy_apply (wasm://wasm/01f433ea:wasm-function[386]:0xd77a6)
    at Object.Module.callPyObjectKwargs (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:338:5838)
    at Object.Module.callPyObject (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:338:6216)
    at Timeout.wrapper [as _onTimeout] (/home/lesteve/dev/scikit-learn-tests-pyodide/node_modules/pyodide/pyodide.asm.js:1394:228)
    at listOnTimeout (node:internal/timers:559:17)
    at processTimers (node:internal/timers:502:7) {
  __error_address: 29290792
}

To Reproduce

node test.js

where test.js has the following content:

const { loadPyodide } = require("pyodide");

async function main() {
    let exitcode = 0;
    try {
        let pyodide = await loadPyodide();

        await pyodide.loadPackage(["micropip"]);
        await pyodide.runPythonAsync(`import micropip; micropip.install('scipy')`);

        await pyodide.runPythonAsync(`
            import numpy as np
            from scipy import linalg
            from js import console

            def my_make_regression(n_samples, n_features, n_informative):
                n_non_informative = n_features - n_informative

                rng = np.random.RandomState(0)
                X = rng.randn(n_samples, n_informative)
                w = np.ones(n_informative)
                noise = rng.randn(n_samples)
                y = X @ w + 0.05 * noise
                X = np.concatenate([X, rng.randn(n_samples, n_non_informative)], axis=1)

                return X, y
        `);
        await pyodide.runPythonAsync(`
            for i in range(10_000):
                if i % 20 == 0:
                    console.log(f"{i}")
                X, y = my_make_regression(n_features=50, n_informative=10, n_samples=100)
                _ = linalg.lstsq(X, y)
    `);

    } catch (e) {
        console.error(e);
        exitcode = 1;
    } finally {
        process.exit(exitcode);
    }
}

main();

Snippet easier to copy and paste in a Pyodide console e.g. https://pyodide.org/en/latest/console.html

import numpy as np
from scipy import linalg
from js import console

func_str = """
def my_make_regression(n_samples, n_features, n_informative):
    n_non_informative = n_features - n_informative

    rng = np.random.RandomState(0)
    X = rng.randn(n_samples, n_informative)
    w = np.ones(n_informative)
    noise = rng.randn(n_samples)
    y = X @ w + 0.05 * noise
    X = np.concatenate([X, rng.randn(n_samples, n_non_informative)], axis=1)

    return X, y
"""

exec(func_str)

for i in range(10_000):
    if i % 20 == 0:
        console.log(f"{i}")
    X, y = my_make_regression(n_features=50, n_informative=10, n_samples=100)
    _ = linalg.lstsq(X, y)


Expected behavior

The snippet runs without error

Environment

Additional context

This snippet was put together to try to track down some of the errors we were seeing when running the scikit-learn tests in https://github.com/lesteve/scikit-learn-tests-pyodide.

Issue Analytics

  • State:open
  • Created a year ago
  • Reactions:1
  • Comments:11 (10 by maintainers)

github_iconTop GitHub Comments

1reaction
ogriselcommented, Dec 8, 2022

I tried to build libopenblas for wasm by following the instructions of this comment: https://github.com/xianyi/OpenBLAS/issues/3640#issuecomment-1144029630 to try to see if we could use openblas in the scipy wheel but I got a crash when building the so file. I reported the problem in the linked issue.

0reactions
hoodmanecommented, Nov 11, 2022

Hi @lesteve,

I am guessing address sanitizers is this kind of things: emscripten.org/docs/debugging/Sanitizers.html

Yes.

when you are talking about static linking, are we talking about only numpy and scipy or do we need to use static linking when compiling CPython too

Numpy and scipy. In effect, we are already statically linking CPython =)

I spent some time trying this just now with numpy and I’ve made a little progress but it is quite hard to do this. I grepped out all of the object files from numpy/build/numpy-1.23.0/build/temp.emscripten_3_1_25_wasm32-3.10 and linked them directly into the main module, then found all the PyInit_ symbols and added them to the inittab in main.c:

inittab
PyObject* PyInit_bit_generator(void);
PyObject* PyInit__bounded_integers(void);
PyObject* PyInit__common(void);
// ... about 13 more

struct _inittab inittab[] = {
  { "bit_generator", PyInit_bit_generator},
  { "_bounded_integers", PyInit__bounded_integers},
  { "_common", PyInit__common},
  // ...
  {NULL},
};

int
main(int argc, char** argv)
{
  // This exits and prints a message to stderr on failure,
  // no status code to check.

  PyImport_ExtendInittab(inittab);

And this almost works, but the problem is that it doesn’t respect the file system structure: numpy uses relative imports so we need the files to know they are imported as part of a package.

So I think instead we would need to patch _PyImport_FindSharedFuncptr. I’m pretty confident this would fix the problem, and then it would be possible to load statically linked versions of numpy and scipy. There’s a separate question of how to link Pyodide with dynamic linking turned off. I think -sMAIN_MODULE=0 --whole-archive would work, but we probably also need to provide stub definitions of dlopen and dlsym. So altogether it’s a bit complicated but I think it’s possible.

Read more comments on GitHub >

github_iconTop Results From Across the Web

TSNE is broken in pyodide · Issue #23707 - GitHub
I have tried to change the value of the ilp64 argument and I get the same error. import numpy as np from scipy.linalg.blas...
Read more >
np.where issue above a certain value (#Numpy)
I'm facing to 2 issues in the following snippet using np.where (looking for indexes where A[:,0] is identical to B). Numpy error when...
Read more >
Linear Algebra (scipy.linalg) — SciPy v1.9.3 Manual
Another advantage of using scipy.linalg over numpy.linalg is that it is always compiled with BLAS/LAPACK support, while for numpy this is optional.
Read more >
numpy.random.rand — NumPy v1.24 Manual
Random values in a given shape. ... Create an array of the given shape and populate it with random samples from a uniform...
Read more >
pycse - Python3 Computations in Science and Engineering
This is handy in cases where it is an error to change the value. ... The we simply use numpy.linalg.solve to get the...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found