While compiling a very simple function to train and predict a linear regression model, I encountered an error from the datasets module:
#[wasm_bindgen]
pub fn basic_prediction() -> f64 {
let x = DenseMatrix::from_2d_array(&[
&[234.289, 235.6, 159.0, 107.608, 1947., 60.323],
&[259.426, 232.5, 145.6, 108.632, 1948., 61.122],
&[258.054, 368.2, 161.6, 109.773, 1949., 60.171],
&[284.599, 335.1, 165.0, 110.929, 1950., 61.187],
&[328.975, 209.9, 309.9, 112.075, 1951., 63.221],
&[346.999, 193.2, 359.4, 113.270, 1952., 63.639],
&[365.385, 187.0, 354.7, 115.094, 1953., 64.989],
&[363.112, 357.8, 335.0, 116.219, 1954., 63.761],
&[397.469, 290.4, 304.8, 117.388, 1955., 66.019],
&[419.180, 282.2, 285.7, 118.734, 1956., 67.857],
&[442.769, 293.6, 279.8, 120.445, 1957., 68.169],
&[444.546, 468.1, 263.7, 121.950, 1958., 66.513],
&[482.704, 381.3, 255.2, 123.366, 1959., 68.655],
&[502.601, 393.1, 251.4, 125.368, 1960., 69.564],
&[518.173, 480.6, 257.2, 127.852, 1961., 69.331],
&[554.894, 400.7, 282.7, 130.081, 1962., 70.551],
]);
let y: Vec<f64> = vec![
83.0, 88.5, 88.2, 89.5, 96.2, 98.1, 99.0, 100.0, 101.2, 104.6, 108.4, 110.8, 112.6, 114.2,
115.7, 116.9,
];
let (x_train, x_test, y_train, y_test) = train_test_split(&x, &y, 0.2, true);
let y_hat_lr = LinearRegression::fit(&x_train, &y_train, Default::default())
.and_then(|lr| lr.predict(&x_test)).unwrap();
let mse = mean_squared_error(&y_test, &y_hat_lr);
return mse;
}
direnc@direnc-VirtualBox:~/workspace/nodejs-rust$ wasm-pack build --target nodejs
[INFO]: Checking for the Wasm target...
[INFO]: Compiling to Wasm...
Compiling smartcore v0.2.0
error[E0308]: mismatched types
--> /home/direnc/.cargo/registry/src/github.com-1ecc6299db9ec823/smartcore-0.2.0/src/dataset/mod.rs:88:49
|
88 | let num_features = usize::from_le_bytes(buffer);
| ^^^^^^ expected an array with a fixed size of 4 elements, found one with 8 elements
error[E0308]: mismatched types
--> /home/direnc/.cargo/registry/src/github.com-1ecc6299db9ec823/smartcore-0.2.0/src/dataset/mod.rs:90:48
|
90 | let num_samples = usize::from_le_bytes(buffer);
| ^^^^^^ expected an array with a fixed size of 4 elements, found one with 8 elements
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0308`.
error: could not compile `smartcore`
To learn more, run the command again with --verbose.
Error: Compiling your crate to WebAssembly failed
Caused by: failed to execute `cargo build`: exited with exit code: 101
full command: "cargo" "build" "--lib" "--release" "--target" "wasm32-unknown-unknown"
The error occurs in mod.rs inside the deserialize_data function. When changing the buffers from 8 to 4 as shown below, the code builds, but throws a RuntimeError somewhere.
wasm://wasm/0003e286:1
RuntimeError: unreachable
at <anonymous>:wasm-function[56]:0xb419
at <anonymous>:wasm-function[73]:0xbf1e
at <anonymous>:wasm-function[128]:0xd073
at <anonymous>:wasm-function[117]:0xce92
at <anonymous>:wasm-function[124]:0xcfd6
at <anonymous>:wasm-function[101]:0xca19
at <anonymous>:wasm-function[20]:0x89ea
at <anonymous>:wasm-function[9]:0x68ac
at <anonymous>:wasm-function[15]:0x7cad
at basic_prediction (<anonymous>:wasm-function[189]:0xd537)
I'm compiling to WASM with wasm-pack for nodejs.