Giter Site home page Giter Site logo

Comments (11)

ashley-hh avatar ashley-hh commented on August 31, 2024 1

Oh, of course! My bad -- here you go!

const script = `
import micropip
import numpy as np
import os
os.environ['MPLBACKEND'] = 'AGG'
import io, base64
import sys
sys.setrecursionlimit(1000)
await micropip.install('seaborn==0.9.0')
import seaborn as sns

data = np.asarray([[1, 0, .5], [1, 0, .5], [1, 0, .5]])
fig = sns.clustermap(data)

buf = io.BytesIO()
fig.savefig(buf, format='png')`

await self.pyodide.loadPackagesFromImports(script);
const res = await self.pyodide.runPythonAsync(script);

from matplotlib-pyodide.

hoodmane avatar hoodmane commented on August 31, 2024 1

I think so. For a function with an i64 argument, dynCall always gets a BigInt. But to load or store BigInt into the wasm memory without BigUint64Array requires some bitwise operations. See here in my libffi port:

https://github.com/hoodmane/libffi-emscripten/blob/1fd79801595a43e26b65b59030a9040ba124ee24/src/wasm32/ffi.c#L51]

Both with and without WASM_BIGINT, we are expected to handle BigInt but without it HEAPU64 doesn't exist. Without BigInt support at all, it's just impossible to call functions with an i64 argument from Javascript as the error message says.

from matplotlib-pyodide.

ryanking13 avatar ryanking13 commented on August 31, 2024

Thanks for the report, could you provide a minimal code example to reproduce this error?

from matplotlib-pyodide.

hoodmane avatar hoodmane commented on August 31, 2024

We still don't fully support Safari: we don't run Safari tests in the continuous integration and I don't think any of the core devs use macs so we don't test things locally in Safari. I frequently do manual experiments in both Firefox and Chrome but not in Safari. So it may be a long time before issues like this are addressed.

from matplotlib-pyodide.

rth avatar rth commented on August 31, 2024

use macs so we don't test things locally in Safari

Actually once pyodide/pyodide#1912 is resolved, we could potentially run Safari in CI. It adds more maintenance work, but then we do have recurrent requests to for better Safari support as well...

from matplotlib-pyodide.

ashley-hh avatar ashley-hh commented on August 31, 2024

Thanks for the report, could you provide a minimal code example to reproduce this error?

Thank you for your prompt response!! I believe this should do it:

Screen Shot 2021-11-02 at 3 01 06 PM

I'm using Version 14.1.2 of Safari.

from matplotlib-pyodide.

rth avatar rth commented on August 31, 2024

Thanks @ashley-hh ! Could you please copy paste it as a code snippet so that we wouldn't have to re-type it manually?

from matplotlib-pyodide.

rth avatar rth commented on August 31, 2024

Thanks! I can reproduce on Safari 14.1. As far as I can tell the error happens when calling sns.clustermap, even without the savefig part.

BTW, in Safari 13.1 I get,

Error: WebAssembly function with an i64 argument can't be called from JavaScript (
      evaluating `dynCall("viiii", index, [a1, a2, a3, a4])`

The error is likely different because 14.1 got BigInt support. So far not much ideas of how to fix it, but clearly some argument is not being converted while it should be, since we are building without WASM_BIGINT as far as I know.

from matplotlib-pyodide.

hoodmane avatar hoodmane commented on August 31, 2024

The flag WASM_BIGINT says that BigUint64Array and BigInt64Array exist. Emscripten always assumes that BigInt exists.

from matplotlib-pyodide.

rth avatar rth commented on August 31, 2024

@hoodmane Are you sure? https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-pass-int64-t-and-uint64-t-values-from-js-into-wasm-functions doesn't sound like it.

from matplotlib-pyodide.

hoodmane avatar hoodmane commented on August 31, 2024

It's funny, grepping around the emscripten source, I don't find much evidence for my claim that WASM_BIGINT works this way, but the libffi tests pass when built without WASM_BIGINT so that makes me think it's probably true anyways.

from matplotlib-pyodide.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.