numbl 0.4.6 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist-cli/cli.js +2363 -220
  2. package/dist-graphics/graphics/FigureView.d.ts +6 -0
  3. package/dist-graphics/graphics/SurfView.d.ts +18 -0
  4. package/dist-graphics/graphics/axisLimits.d.ts +23 -0
  5. package/dist-graphics/graphics/drawPlot.d.ts +2 -0
  6. package/dist-graphics/graphics/exportFigureHdf5.d.ts +21 -0
  7. package/dist-graphics/graphics/figureHashTransport.d.ts +24 -0
  8. package/dist-graphics/graphics/figureHdf5Schema.d.ts +19 -0
  9. package/dist-graphics/graphics/figureUpload.d.ts +45 -0
  10. package/dist-graphics/graphics/figuresReducer.d.ts +86 -0
  11. package/dist-graphics/graphics/importFigureHdf5.d.ts +9 -0
  12. package/dist-graphics/graphics/openInFigureViewer.d.ts +26 -0
  13. package/dist-graphics/graphics/plotHelpers.d.ts +6 -0
  14. package/dist-graphics/graphics/plotLegend.d.ts +2 -0
  15. package/dist-graphics/graphics/plotMarkers.d.ts +2 -0
  16. package/dist-graphics/graphics/restoreNaNs.d.ts +2 -0
  17. package/dist-graphics/graphics/surfColormap.d.ts +2 -0
  18. package/dist-graphics/graphics/types.d.ts +423 -0
  19. package/dist-graphics/graphics/uihtmlSrcDoc.d.ts +23 -0
  20. package/dist-graphics/graphics-lib.d.ts +21 -0
  21. package/dist-graphics/index.js +35334 -0
  22. package/dist-lib/lib.js +2349 -216
  23. package/dist-lib/numbl-core/interpreter/builtins/gallery.d.ts +7 -0
  24. package/dist-lib/numbl-core/interpreter/builtins/geometry.d.ts +3 -3
  25. package/dist-lib/numbl-core/interpreter/builtins/graph.d.ts +29 -0
  26. package/dist-lib/numbl-core/interpreter/builtins/index.d.ts +2 -0
  27. package/dist-lib/numbl-core/interpreter/interpreter.d.ts +5 -0
  28. package/dist-lib/numbl-core/interpreter/interpreterExec.d.ts +14 -1
  29. package/dist-lib/numbl-core/interpreter/interpreterFunctions.d.ts +6 -0
  30. package/dist-lib/numbl-core/interpreter/interpreterSpecialBuiltins.d.ts +4 -0
  31. package/dist-lib/numbl-core/interpreter/types.d.ts +13 -0
  32. package/dist-lib/numbl-core/lowering/classInfo.d.ts +19 -2
  33. package/dist-lib/numbl-core/native/geometry-bridge.d.ts +10 -0
  34. package/dist-lib/numbl-core/parser/ArgumentsParser.d.ts +6 -1
  35. package/dist-lib/numbl-core/runtime/constructors.d.ts +2 -1
  36. package/dist-lib/numbl-core/runtime/runtime.d.ts +2 -1
  37. package/dist-lib/numbl-core/runtime/runtimeMemberAccess.d.ts +1 -1
  38. package/dist-lib/numbl-core/version.d.ts +1 -1
  39. package/dist-plot-viewer/assets/hdf5_hl-C9YUKPMe.js +24296 -0
  40. package/dist-plot-viewer/assets/index-YeXWXIxH.js +4504 -0
  41. package/dist-plot-viewer/index.html +1 -1
  42. package/dist-site-viewer/assets/hdf5_hl-C9YUKPMe.js +24296 -0
  43. package/dist-site-viewer/assets/index-RucHpf4b.js +4826 -0
  44. package/dist-site-viewer/assets/numbl-worker-IO39kohI.js +5228 -0
  45. package/dist-site-viewer/index.html +1 -1
  46. package/native/lapack_svd.cpp +50 -0
  47. package/package.json +21 -2
  48. package/dist-plot-viewer/assets/index-D4grNz8m.js +0 -4504
  49. package/dist-site-viewer/assets/index-B2mCFC55.js +0 -4826
  50. package/dist-site-viewer/assets/numbl-worker-DWZE29ck.js +0 -5116
@@ -0,0 +1,423 @@
1
+ /**
2
+ * Shared graphics types used by both numbl-core and the rendering layer.
3
+ *
4
+ * This file is the single source of truth for plot trace interfaces and
5
+ * PlotInstruction. numbl-core re-exports these types so that internal
6
+ * runtime code can import them without reaching into src/graphics/.
7
+ *
8
+ * The numbl-vscode extension syncs this file (and the rest of src/graphics/)
9
+ * via devel/sync-graphics.sh.
10
+ */
11
+ export interface PlotTrace {
12
+ x: number[];
13
+ y: number[];
14
+ lineStyle?: string;
15
+ marker?: string;
16
+ color?: [number, number, number];
17
+ lineWidth?: number;
18
+ markerSize?: number;
19
+ markerEdgeColor?: [number, number, number];
20
+ markerFaceColor?: [number, number, number];
21
+ markerIndices?: number[];
22
+ /** Stable identity for a trace returned as a graphics handle (e.g. from
23
+ * `line`). Lets `set(h,'XData',...)` / `update_trace` find and mutate this
24
+ * exact trace in the renderer's accumulated state across `drawnow`. */
25
+ id?: number;
26
+ }
27
+ export interface Plot3Trace {
28
+ x: number[];
29
+ y: number[];
30
+ z: number[];
31
+ lineStyle?: string;
32
+ marker?: string;
33
+ color?: [number, number, number];
34
+ lineWidth?: number;
35
+ markerSize?: number;
36
+ markerEdgeColor?: [number, number, number];
37
+ markerFaceColor?: [number, number, number];
38
+ markerIndices?: number[];
39
+ /** See PlotTrace.id. */
40
+ id?: number;
41
+ }
42
+ /** A patch object: one or more colored polygons sharing a single set of
43
+ * vertices. Mirrors MATLAB's Faces/Vertices model — `patch(X,Y,C)` and the
44
+ * name-value forms are all canonicalized to this shape at parse time. */
45
+ export interface PatchTrace {
46
+ /** Unique vertices: `vertices[k] = [x, y]` (2-D) or `[x, y, z]` (3-D). */
47
+ vertices: number[][];
48
+ /** Faces as 0-based vertex-index arrays — one polygon per face. */
49
+ faces: number[][];
50
+ /** Single RGB for all faces, a colormap keyword, or 'none'. */
51
+ faceColor?: [number, number, number] | "flat" | "interp" | "none";
52
+ /** Edge color (default black [0,0,0]). */
53
+ edgeColor?: [number, number, number] | "flat" | "interp" | "none";
54
+ /** Face transparency in [0,1]. */
55
+ faceAlpha?: number;
56
+ lineWidth?: number;
57
+ lineStyle?: string;
58
+ marker?: string;
59
+ markerFaceColor?: [number, number, number] | "flat" | "none";
60
+ /** Color data driving 'flat'/'interp': one entry per face (flat) or per
61
+ * vertex (interp). Each entry is a scalar (mapped through the colormap) or
62
+ * an RGB triplet. */
63
+ faceVertexCData?: (number | [number, number, number])[];
64
+ /** True when vertices carry a z-coordinate (3-D patch). */
65
+ is3D?: boolean;
66
+ /** See PlotTrace.id — lets `set(p,...)` live-update this patch. */
67
+ id?: number;
68
+ }
69
+ export interface SurfTrace {
70
+ /** X coordinates: flat array of length rows*cols (column-major) */
71
+ x: number[];
72
+ /** Y coordinates: flat array of length rows*cols (column-major) */
73
+ y: number[];
74
+ /** Z values: flat array of length rows*cols (column-major) */
75
+ z: number[];
76
+ /** Number of rows in the grid */
77
+ rows: number;
78
+ /** Number of columns in the grid */
79
+ cols: number;
80
+ /** Optional color data (same shape as Z) */
81
+ c?: number[];
82
+ edgeColor?: [number, number, number] | "none" | "flat" | "interp";
83
+ faceColor?: [number, number, number] | "flat" | "interp" | "none" | "texturemap";
84
+ faceAlpha?: number;
85
+ }
86
+ export interface ImagescTrace {
87
+ /** X limits [xmin, xmax] */
88
+ x: [number, number];
89
+ /** Y limits [ymin, ymax] */
90
+ y: [number, number];
91
+ /** Z data: flat array (column-major), rows × cols */
92
+ z: number[];
93
+ rows: number;
94
+ cols: number;
95
+ }
96
+ export interface PcolorTrace {
97
+ /** X coordinates: flat array of length rows*cols (column-major) */
98
+ x: number[];
99
+ /** Y coordinates: flat array of length rows*cols (column-major) */
100
+ y: number[];
101
+ /** Color values: flat array of length rows*cols (column-major) */
102
+ c: number[];
103
+ /** Number of rows in the grid */
104
+ rows: number;
105
+ /** Number of columns in the grid */
106
+ cols: number;
107
+ edgeColor?: [number, number, number] | "none";
108
+ faceAlpha?: number;
109
+ }
110
+ export interface ContourTrace {
111
+ /** X coordinates: flat array (column-major) */
112
+ x: number[];
113
+ /** Y coordinates: flat array (column-major) */
114
+ y: number[];
115
+ /** Z values: flat array (column-major) */
116
+ z: number[];
117
+ rows: number;
118
+ cols: number;
119
+ /** Number of contour levels (used only when `levels` is not given) */
120
+ nLevels: number;
121
+ /** Explicit contour levels (from `contour(...,V)` or `LevelList`). When
122
+ * absent, levels are chosen automatically from the data range. */
123
+ levels?: number[];
124
+ /** Line width from a `'LineWidth'` name-value pair. */
125
+ lineWidth?: number;
126
+ /** Line style from a `'LineStyle'` name-value pair (e.g. '-', '--'). */
127
+ lineStyle?: string;
128
+ /** Line color: an RGB triple, or a colormap keyword like 'flat'. */
129
+ lineColor?: number[] | string;
130
+ /** Whether this is a filled contour (contourf) */
131
+ filled: boolean;
132
+ }
133
+ export interface BarTrace {
134
+ /** X positions for each bar */
135
+ x: number[];
136
+ /** Y values (bar heights) for each bar */
137
+ y: number[];
138
+ /** Relative bar width (0–1, default 0.8) */
139
+ width: number;
140
+ /** Bar color as RGB triple [0–1] */
141
+ color?: [number, number, number];
142
+ }
143
+ export interface Bar3Trace {
144
+ /** X positions for each bar (column index) */
145
+ x: number[];
146
+ /** Y positions for each bar (row index) */
147
+ y: number[];
148
+ /** Z values (bar heights) for each bar */
149
+ z: number[];
150
+ /** Number of rows in the grid */
151
+ rows: number;
152
+ /** Number of columns in the grid */
153
+ cols: number;
154
+ /** Relative bar width (0–1, default 0.8) */
155
+ width: number;
156
+ /** Bar color as RGB triple [0–1] */
157
+ color?: [number, number, number];
158
+ }
159
+ export interface ErrorBarTrace {
160
+ x: number[];
161
+ y: number[];
162
+ /** Error below each data point */
163
+ yNeg: number[];
164
+ /** Error above each data point */
165
+ yPos: number[];
166
+ /** Error left of each data point (horizontal error bars) */
167
+ xNeg?: number[];
168
+ /** Error right of each data point (horizontal error bars) */
169
+ xPos?: number[];
170
+ color?: [number, number, number];
171
+ lineStyle?: string;
172
+ marker?: string;
173
+ lineWidth?: number;
174
+ }
175
+ export interface BoxTrace {
176
+ /** X position for this box */
177
+ x: number;
178
+ /** Median value */
179
+ median: number;
180
+ /** Lower quartile (Q1, 25th percentile) */
181
+ q1: number;
182
+ /** Upper quartile (Q3, 75th percentile) */
183
+ q3: number;
184
+ /** Lower whisker end (min non-outlier) */
185
+ whiskerLow: number;
186
+ /** Upper whisker end (max non-outlier) */
187
+ whiskerHigh: number;
188
+ /** Outlier values */
189
+ outliers: number[];
190
+ /** Relative box width */
191
+ width: number;
192
+ /** Box color as RGB triple [0–1] */
193
+ color?: [number, number, number];
194
+ }
195
+ export interface PieTrace {
196
+ /** Slice values (absolute, not percentages) */
197
+ values: number[];
198
+ /** Optional slice names */
199
+ names?: string[];
200
+ /** Inner radius as fraction of outer radius (0 = pie, >0 = donut) */
201
+ innerRadius: number;
202
+ /** Per-slice colors as RGB triples [0–1] */
203
+ colors?: [number, number, number][];
204
+ }
205
+ export interface QuiverTrace {
206
+ /** Tail x-coordinates (flat array) */
207
+ x: number[];
208
+ /** Tail y-coordinates (flat array) */
209
+ y: number[];
210
+ /** x-component of each arrow (already scaled to data units) */
211
+ u: number[];
212
+ /** y-component of each arrow (already scaled to data units) */
213
+ v: number[];
214
+ /** Whether to draw arrowheads */
215
+ showArrowHead: boolean;
216
+ /** Arrow color as RGB triple [0–1] */
217
+ color?: [number, number, number];
218
+ lineStyle?: string;
219
+ lineWidth?: number;
220
+ marker?: string;
221
+ /** Whether the marker should be filled */
222
+ markerFilled?: boolean;
223
+ }
224
+ export interface Quiver3Trace {
225
+ /** Tail coordinates (flat arrays) */
226
+ x: number[];
227
+ y: number[];
228
+ z: number[];
229
+ /** Directional components, already scaled to data units */
230
+ u: number[];
231
+ v: number[];
232
+ w: number[];
233
+ /** Whether to draw arrowheads */
234
+ showArrowHead: boolean;
235
+ /** Arrow color as RGB triple [0–1] */
236
+ color?: [number, number, number];
237
+ lineStyle?: string;
238
+ lineWidth?: number;
239
+ marker?: string;
240
+ markerFilled?: boolean;
241
+ /** Whether auto-scaling was applied (for handle queries) */
242
+ autoScale?: boolean;
243
+ autoScaleFactor?: number;
244
+ }
245
+ export interface HeatmapTrace {
246
+ /** Cell values: flat array (column-major), rows × cols */
247
+ data: number[];
248
+ rows: number;
249
+ cols: number;
250
+ /** X-axis labels (one per column) */
251
+ xLabels?: string[];
252
+ /** Y-axis labels (one per row) */
253
+ yLabels?: string[];
254
+ }
255
+ /** A single axis's limit request from `axis([...])` / `axis auto`.
256
+ * - A `[lo, hi]` pair, where either bound may be `null` to mean "keep the
257
+ * automatically-chosen bound" (from `inf`/`-inf` in the limits vector).
258
+ * - The string `"auto"` clears any explicit limit so the axis refits to its
259
+ * data (from `axis auto` / `axis 'auto x'`). */
260
+ export type AxisLimitSpec = [number | null, number | null] | "auto";
261
+ export type PlotInstruction = {
262
+ type: "set_figure_handle";
263
+ handle: number;
264
+ } | {
265
+ /** An HTML UI component (MATLAB `uihtml`): renders self-contained HTML
266
+ * markup in an iframe, bypassing the axes/trace model. `html` is the
267
+ * full HTMLSource string; `id` is a stable per-component key. `data`, when
268
+ * present, is the `Data` property JSON-encoded (via `jsonencode`); the
269
+ * renderer parses it and pushes it to the page's `htmlComponent` so the
270
+ * `setup`/`"DataChanged"` bridge fires (MATLAB `h.Data` → JavaScript). */
271
+ type: "uihtml";
272
+ id: string;
273
+ html: string;
274
+ data?: string;
275
+ } | {
276
+ type: "plot";
277
+ traces: PlotTrace[];
278
+ } | {
279
+ type: "plot3";
280
+ traces: Plot3Trace[];
281
+ } | {
282
+ type: "line";
283
+ traces: PlotTrace[];
284
+ } | {
285
+ type: "line3";
286
+ traces: Plot3Trace[];
287
+ } | {
288
+ type: "patch";
289
+ trace: PatchTrace;
290
+ newplot?: boolean;
291
+ } | {
292
+ type: "update_trace";
293
+ id: number;
294
+ props: Record<string, unknown>;
295
+ } | {
296
+ type: "surf";
297
+ trace: SurfTrace;
298
+ } | {
299
+ type: "surface";
300
+ trace: SurfTrace;
301
+ } | {
302
+ type: "imagesc";
303
+ trace: ImagescTrace;
304
+ } | {
305
+ type: "pcolor";
306
+ trace: PcolorTrace;
307
+ } | {
308
+ type: "contour";
309
+ trace: ContourTrace;
310
+ } | {
311
+ type: "mesh";
312
+ trace: SurfTrace;
313
+ } | {
314
+ type: "bar";
315
+ traces: BarTrace[];
316
+ } | {
317
+ type: "barh";
318
+ traces: BarTrace[];
319
+ } | {
320
+ type: "bar3";
321
+ trace: Bar3Trace;
322
+ } | {
323
+ type: "bar3h";
324
+ trace: Bar3Trace;
325
+ } | {
326
+ type: "errorbar";
327
+ traces: ErrorBarTrace[];
328
+ } | {
329
+ type: "area";
330
+ traces: PlotTrace[];
331
+ baseValue: number;
332
+ } | {
333
+ type: "boxchart";
334
+ traces: BoxTrace[];
335
+ } | {
336
+ type: "piechart";
337
+ trace: PieTrace;
338
+ } | {
339
+ type: "heatmap";
340
+ trace: HeatmapTrace;
341
+ } | {
342
+ type: "quiver";
343
+ traces: QuiverTrace[];
344
+ } | {
345
+ type: "quiver3";
346
+ trace: Quiver3Trace;
347
+ } | {
348
+ type: "set_hold";
349
+ value: boolean;
350
+ } | {
351
+ type: "set_title";
352
+ text: string;
353
+ } | {
354
+ type: "set_xlabel";
355
+ text: string;
356
+ } | {
357
+ type: "set_ylabel";
358
+ text: string;
359
+ } | {
360
+ type: "set_zlabel";
361
+ text: string;
362
+ } | {
363
+ type: "set_shading";
364
+ shading: "faceted" | "flat" | "interp";
365
+ } | {
366
+ type: "close";
367
+ } | {
368
+ type: "close_all";
369
+ } | {
370
+ type: "clf";
371
+ } | {
372
+ type: "cla";
373
+ reset: boolean;
374
+ } | {
375
+ type: "set_subplot";
376
+ rows: number;
377
+ cols: number;
378
+ index: number;
379
+ } | {
380
+ type: "set_legend";
381
+ labels: string[];
382
+ } | {
383
+ type: "set_sgtitle";
384
+ text: string;
385
+ } | {
386
+ type: "set_grid";
387
+ value: boolean;
388
+ } | {
389
+ type: "set_box";
390
+ value: boolean;
391
+ } | {
392
+ type: "set_colorbar";
393
+ value: string;
394
+ location?: string;
395
+ } | {
396
+ type: "set_colormap";
397
+ name: string;
398
+ data?: number[][];
399
+ } | {
400
+ type: "set_axis";
401
+ value: string;
402
+ } | {
403
+ type: "set_axis_limits";
404
+ xlim?: AxisLimitSpec;
405
+ ylim?: AxisLimitSpec;
406
+ zlim?: AxisLimitSpec;
407
+ } | {
408
+ type: "set_axis_ydir";
409
+ dir: "normal" | "reverse";
410
+ } | {
411
+ type: "set_axis_visible";
412
+ value: boolean;
413
+ } | {
414
+ type: "set_axis_scale";
415
+ value: "linear" | "semilogx" | "semilogy" | "loglog";
416
+ } | {
417
+ type: "set_view";
418
+ az: number;
419
+ el: number;
420
+ } | {
421
+ type: "set_caxis";
422
+ limits: [number, number];
423
+ };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Builds the iframe `srcdoc` for a `uihtml` component (MATLAB `uihtml`).
3
+ *
4
+ * The user's HTMLSource is left intact; a small bootstrap `<script>` is
5
+ * injected that provides the standard MATLAB `htmlComponent` JavaScript object
6
+ * and wires up the `Data` bridge so the same `.m` runs in numbl and real MATLAB.
7
+ *
8
+ * The numbl-vscode extension syncs src/graphics/ via devel/sync-graphics.sh.
9
+ */
10
+ /** Build the iframe `srcdoc` for a `uihtml` component. The user's HTML is left
11
+ * intact; a small bootstrap `<script>` is appended that provides the standard
12
+ * MATLAB `htmlComponent` JavaScript object, calls the page's
13
+ * `setup(htmlComponent)` (if defined), and then — if `Data` was supplied —
14
+ * parses it and pushes it onto `htmlComponent.Data`, firing the page's
15
+ * `"DataChanged"` listeners. This mirrors MATLAB's `h.Data` → JavaScript path.
16
+ *
17
+ * The reverse direction (JavaScript → MATLAB) is also wired: `sendEventToMATLAB`
18
+ * and the `Data` setter post a message (tagged with `compId`) to the parent;
19
+ * the host relays it into the worker, which re-enters the interpreter to fire
20
+ * the registered `HTMLEventReceivedFcn` / `DataChangedFcn`. The host's
21
+ * `sendEventToHTMLSource` comes back as a `numbl-host` message that this
22
+ * bootstrap delivers to the page's `addEventListener(name)` listeners. */
23
+ export declare function buildUihtmlSrcDoc(html: string, data?: string, compId?: string): string;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Browser entry point for the `numbl/graphics` subpath export.
3
+ *
4
+ * Exposes numbl's React figure renderer and the HDF5 figure import/export so
5
+ * external apps can display numbl figures (e.g. open a downloaded `.h5`) without
6
+ * the rest of numbl-core. Built for the browser (ESM); `react`/`react-dom` are
7
+ * peer dependencies and `h5wasm` is loaded lazily inside the import/export
8
+ * helpers. See docs/figure-hdf5-format.md for the file format.
9
+ */
10
+ export { FigureView } from "./graphics/FigureView.js";
11
+ export { figuresReducer, initialFiguresState, } from "./graphics/figuresReducer.js";
12
+ export type { FigureState, AxesState, FiguresState, FiguresAction, } from "./graphics/figuresReducer.js";
13
+ export type * from "./graphics/types.js";
14
+ export { exportFigureHdf5, downloadFigureHdf5, } from "./graphics/exportFigureHdf5.js";
15
+ export { importFigureHdf5 } from "./graphics/importFigureHdf5.js";
16
+ export { FIGURE_HDF5_VERSION } from "./graphics/figureHdf5Schema.js";
17
+ export { buildFigureViewerLink, DEFAULT_FIGURE_VIEWER_URL, } from "./graphics/openInFigureViewer.js";
18
+ export type { FigureViewerLink } from "./graphics/openInFigureViewer.js";
19
+ export { uploadFigureForViewer, loadFigureFromHash, numblStoreUploader, setFigureUploader, DEFAULT_FIGURE_STORE_URL, } from "./graphics/figureUpload.js";
20
+ export type { FigureUploader } from "./graphics/figureUpload.js";
21
+ export { encodeFigureToHash, decodeFigureFromHash, } from "./graphics/figureHashTransport.js";