Skip to content

Issue when running some scipy.sparse.linalg code inside Pyodide venv #3865

@lesteve

Description

@lesteve

🐛 Bug

Running Scipy code inside a Pyodide venv yields to somme Error: Dynamic linking error: cannot resolve symbol s_cmp. Running inside a browser works fine and I am pretty sure running a .js with node explicitly does work as well since I have been doing it for a while in https://github.com/lesteve/scipy-tests-pyodide. Maybe the issue is with the Pyodide venv python nodejs wrapper?

To Reproduce

pyodide venv .pyodide-venv
source .pyodide-venv/bin/activate
pip install scipy
python test.py

Where test.py has the following content:

import numpy as np

from scipy.sparse.linalg import svds

rng = np.random.default_rng(0)
A = rng.random((10, 10))

res = svds(A, k=3, which='LM', random_state=0)
Stack (most recent call first):
  File "/home/lesteve/test/.pyodide-venv/lib/python3.12/site-packages/scipy/sparse/linalg/_eigen/arpack/arpack.py", line 537 in iterate
  File "/home/lesteve/test/.pyodide-venv/lib/python3.12/site-packages/scipy/sparse/linalg/_eigen/arpack/arpack.py", line 1700 in eigsh
  File "/home/lesteve/test/.pyodide-venv/lib/python3.12/site-packages/scipy/sparse/linalg/_eigen/_svds.py", line 525 in svds
  File "/home/lesteve/test/test.py", line 8 in <module>
Error: Dynamic linking error: cannot resolve symbol s_cmp
    at stubs.<computed> (/home/lesteve/test/.pyodide-xbuildenv-0.26.0/0.26.0/xbuildenv/pyodide-root/dist/pyodide.asm.js:10:148862)
    at wasm://wasm/000fb3c2:wasm-function[207]:0x173c0
    at wasm://wasm/000fb3c2:wasm-function[180]:0x4472
    at wasm://wasm/0003e6d6:wasm-function[107]:0xbfa0
    at _PyEM_TrampolineCall_JS (/home/lesteve/test/.pyodide-xbuildenv-0.26.0/0.26.0/xbuildenv/pyodide-root/dist/pyodide.asm.js:10:125866)
    at wasm://wasm/0267d6e2:wasm-function[1134]:0x1c2db7
    at wasm://wasm/0267d6e2:wasm-function[1143]:0x1c35c8
    at wasm://wasm/0267d6e2:wasm-function[3408]:0x2a05c2
    at wasm://wasm/0267d6e2:wasm-function[3406]:0x2960a0
    at wasm://wasm/0267d6e2:wasm-function[4211]:0x30a9c5

Edit: for compleness as I was mentioning, the same code run with node directly node test.js does work:

const { opendir } = require('node:fs/promises');
const { loadPyodide } = require("pyodide");

async function main() {
  let pyodide = await loadPyodide();
  
  await pyodide.loadPackage(["scipy"]);
  await pyodide.runPythonAsync(`
  import numpy as np
  
  from scipy.sparse.linalg import svds
  
  rng = np.random.default_rng(0)
  A = rng.random((10, 10))
  
  res = svds(A, k=3, which='LM', random_state=0)
  `);

}

main();

Expected behavior

No error

Environment

  • Pyodide Version: 0.26.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions