1#![allow(clippy::result_large_err)]
2
3#[cfg(all(test, target_arch = "wasm32"))]
4wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser);
5
6pub mod abi;
7mod diagnostic_path;
8mod error;
9mod execution;
10mod fusion;
11mod profiling;
12mod session;
13mod source_pool;
14mod telemetry;
15mod value_metadata;
16mod workspace;
17
18pub use error::{runtime_error_telemetry_failure_info, RunError};
19pub use execution::*;
20pub use fusion::*;
21pub use runmat_parser::CompatMode;
22pub use session::RunMatSession;
23pub use telemetry::{
24 TelemetryFailureInfo, TelemetryHost, TelemetryPlatformInfo, TelemetryRunConfig,
25 TelemetryRunFinish, TelemetryRunGuard, TelemetrySink,
26};
27pub use value_metadata::{
28 approximate_size_bytes, matlab_class_name, numeric_dtype_label, preview_numeric_values,
29 sparse_tensor_memory_bytes, value_shape,
30};
31pub use workspace::*;
32
33#[cfg(test)]
34mod tests;
35
36#[cfg(not(target_arch = "wasm32"))]
38pub fn execute_text_request_for_testing(
39 session: &mut RunMatSession,
40 source_text: &str,
41) -> Result<SessionExecutionResult, RunError> {
42 let request = abi::ExecutionRequest::for_source(
43 abi::SourceInput::Text {
44 name: "<test>".to_string(),
45 text: source_text.to_string(),
46 },
47 session.compat_mode(),
48 abi::HostExecutionPolicy::default(),
49 session.workspace_handle(),
50 );
51 let response = futures::executor::block_on(session.execute_request(request));
52 let outcome = response.result?;
53 let workspace = session.workspace_snapshot();
54 let warnings = outcome
55 .diagnostics
56 .iter()
57 .filter(|diag| diag.severity == abi::DiagnosticSeverity::Warning)
58 .map(|diag| runmat_runtime::warning_store::RuntimeWarning {
59 identifier: diag.code.clone(),
60 message: diag.message.clone(),
61 })
62 .collect();
63 let error = outcome
64 .diagnostics
65 .iter()
66 .find(|diag| diag.severity == abi::DiagnosticSeverity::Error)
67 .map(|diag| {
68 runmat_runtime::build_runtime_error(diag.message.clone())
69 .with_identifier(diag.code.clone())
70 .with_call_stack(diag.callstack.clone())
71 .with_call_frames_elided(diag.callstack_elided)
72 .build()
73 });
74 Ok(SessionExecutionResult {
75 value: outcome.flow.durable_workspace_value().cloned(),
76 execution_time_ms: outcome.execution_time_ms,
77 used_jit: outcome.used_jit,
78 error,
79 type_info: outcome.type_info,
80 streams: outcome.streams,
81 workspace,
82 figures_touched: outcome.figures_touched,
83 warnings,
84 profiling: outcome.profiling,
85 fusion_plan: outcome.fusion_plan,
86 stdin_events: outcome.stdin_events,
87 })
88}