numbl 0.4.8 → 0.4.10
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.
- package/dist-browser/browser/index.d.ts +21 -0
- package/dist-browser/browser/mip.d.ts +10 -0
- package/dist-browser/browser/protocol.d.ts +69 -0
- package/dist-browser/browser/session.d.ts +60 -0
- package/dist-browser/browser/system-store.d.ts +30 -0
- package/dist-browser/browser/worker.d.ts +1 -0
- package/dist-browser/browser.js +151 -0
- package/dist-browser/db/operations.d.ts +25 -0
- package/dist-browser/db/schema.d.ts +26 -0
- package/dist-browser/graphics/axisLimits.d.ts +23 -0
- package/dist-browser/graphics/figuresReducer.d.ts +86 -0
- package/dist-browser/graphics/types.d.ts +423 -0
- package/dist-browser/hooks/useProjectFiles.d.ts +45 -0
- package/dist-browser/numbl-core/diagnostics/errors.d.ts +8 -0
- package/dist-browser/numbl-core/diagnostics/index.d.ts +27 -0
- package/dist-browser/numbl-core/executeCode.d.ts +108 -0
- package/dist-browser/numbl-core/executors/cache.d.ts +26 -0
- package/dist-browser/numbl-core/executors/classification.d.ts +134 -0
- package/dist-browser/numbl-core/executors/context.d.ts +76 -0
- package/dist-browser/numbl-core/executors/handleInline.d.ts +58 -0
- package/dist-browser/numbl-core/executors/index.d.ts +14 -0
- package/dist-browser/numbl-core/executors/jit/cJitCallExecutor.d.ts +35 -0
- package/dist-browser/numbl-core/executors/jit/cJitLoopExecutor.d.ts +31 -0
- package/dist-browser/numbl-core/executors/jit/cJitTopLevelExecutor.d.ts +29 -0
- package/dist-browser/numbl-core/executors/jit/callExecutor.d.ts +45 -0
- package/dist-browser/numbl-core/executors/jit/compileC.d.ts +51 -0
- package/dist-browser/numbl-core/executors/jit/compileC.node.d.ts +25 -0
- package/dist-browser/numbl-core/executors/jit/hostHelpers.d.ts +31 -0
- package/dist-browser/numbl-core/executors/jit/loopExecutor.d.ts +41 -0
- package/dist-browser/numbl-core/executors/jit/session.d.ts +17 -0
- package/dist-browser/numbl-core/executors/jit/topLevelExecutor.d.ts +36 -0
- package/dist-browser/numbl-core/executors/jit/typeAdapter.d.ts +28 -0
- package/dist-browser/numbl-core/executors/jit/typeAdapterC.d.ts +73 -0
- package/dist-browser/numbl-core/executors/jit/valueAdapter.d.ts +55 -0
- package/dist-browser/numbl-core/executors/jit/valueAdapterC.d.ts +108 -0
- package/dist-browser/numbl-core/executors/lowering.d.ts +120 -0
- package/dist-browser/numbl-core/executors/plugins.d.ts +41 -0
- package/dist-browser/numbl-core/executors/registry.d.ts +148 -0
- package/dist-browser/numbl-core/executors/types.d.ts +103 -0
- package/dist-browser/numbl-core/externalAccessDirective.d.ts +6 -0
- package/dist-browser/numbl-core/fileIOAdapter.d.ts +88 -0
- package/dist-browser/numbl-core/functionResolve.d.ts +70 -0
- package/dist-browser/numbl-core/helpers/arithmetic.d.ts +47 -0
- package/dist-browser/numbl-core/helpers/bessel.d.ts +49 -0
- package/dist-browser/numbl-core/helpers/check-helpers.d.ts +49 -0
- package/dist-browser/numbl-core/helpers/constants.d.ts +6 -0
- package/dist-browser/numbl-core/helpers/dummy.d.ts +5 -0
- package/dist-browser/numbl-core/helpers/effectively-real.d.ts +25 -0
- package/dist-browser/numbl-core/helpers/eigs-select.d.ts +25 -0
- package/dist-browser/numbl-core/helpers/erf.d.ts +5 -0
- package/dist-browser/numbl-core/helpers/gmres.d.ts +51 -0
- package/dist-browser/numbl-core/helpers/linsolve.d.ts +25 -0
- package/dist-browser/numbl-core/helpers/marching-cubes-tables.d.ts +10 -0
- package/dist-browser/numbl-core/helpers/marching-cubes.d.ts +46 -0
- package/dist-browser/numbl-core/helpers/ode-rk.d.ts +83 -0
- package/dist-browser/numbl-core/helpers/prng.d.ts +19 -0
- package/dist-browser/numbl-core/helpers/quadgk.d.ts +32 -0
- package/dist-browser/numbl-core/helpers/reduction/cumulative.d.ts +8 -0
- package/dist-browser/numbl-core/helpers/reduction/min-max.d.ts +5 -0
- package/dist-browser/numbl-core/helpers/reduction-helpers.d.ts +66 -0
- package/dist-browser/numbl-core/helpers/registry.d.ts +7 -0
- package/dist-browser/numbl-core/helpers/scanFormat.d.ts +11 -0
- package/dist-browser/numbl-core/helpers/shape-utils.d.ts +7 -0
- package/dist-browser/numbl-core/helpers/sparse-arithmetic.d.ts +16 -0
- package/dist-browser/numbl-core/helpers/string.d.ts +11 -0
- package/dist-browser/numbl-core/interpreter/builtins/arithmetic.d.ts +4 -0
- package/dist-browser/numbl-core/interpreter/builtins/array-construction.d.ts +10 -0
- package/dist-browser/numbl-core/interpreter/builtins/array-extras.d.ts +5 -0
- package/dist-browser/numbl-core/interpreter/builtins/array-manipulation.d.ts +7 -0
- package/dist-browser/numbl-core/interpreter/builtins/cell-struct.d.ts +5 -0
- package/dist-browser/numbl-core/interpreter/builtins/complex.d.ts +4 -0
- package/dist-browser/numbl-core/interpreter/builtins/datetime.d.ts +40 -0
- package/dist-browser/numbl-core/interpreter/builtins/dictionary.d.ts +15 -0
- package/dist-browser/numbl-core/interpreter/builtins/fft.d.ts +7 -0
- package/dist-browser/numbl-core/interpreter/builtins/gallery.d.ts +7 -0
- package/dist-browser/numbl-core/interpreter/builtins/geometry.d.ts +10 -0
- package/dist-browser/numbl-core/interpreter/builtins/graph.d.ts +29 -0
- package/dist-browser/numbl-core/interpreter/builtins/help-text.d.ts +5 -0
- package/dist-browser/numbl-core/interpreter/builtins/index.d.ts +39 -0
- package/dist-browser/numbl-core/interpreter/builtins/introspection.d.ts +6 -0
- package/dist-browser/numbl-core/interpreter/builtins/linear-algebra.d.ts +9 -0
- package/dist-browser/numbl-core/interpreter/builtins/logical.d.ts +9 -0
- package/dist-browser/numbl-core/interpreter/builtins/math.d.ts +4 -0
- package/dist-browser/numbl-core/interpreter/builtins/misc.d.ts +7 -0
- package/dist-browser/numbl-core/interpreter/builtins/numerical.d.ts +10 -0
- package/dist-browser/numbl-core/interpreter/builtins/predicates.d.ts +4 -0
- package/dist-browser/numbl-core/interpreter/builtins/prng.d.ts +4 -0
- package/dist-browser/numbl-core/interpreter/builtins/reductions.d.ts +6 -0
- package/dist-browser/numbl-core/interpreter/builtins/set-operations.d.ts +4 -0
- package/dist-browser/numbl-core/interpreter/builtins/sparse.d.ts +4 -0
- package/dist-browser/numbl-core/interpreter/builtins/special-math.d.ts +4 -0
- package/dist-browser/numbl-core/interpreter/builtins/string-extras.d.ts +5 -0
- package/dist-browser/numbl-core/interpreter/builtins/strings.d.ts +7 -0
- package/dist-browser/numbl-core/interpreter/builtins/time-system.d.ts +6 -0
- package/dist-browser/numbl-core/interpreter/builtins/type-constructors.d.ts +5 -0
- package/dist-browser/numbl-core/interpreter/builtins/types.d.ts +98 -0
- package/dist-browser/numbl-core/interpreter/builtins/utility.d.ts +4 -0
- package/dist-browser/numbl-core/interpreter/builtins/validation.d.ts +4 -0
- package/dist-browser/numbl-core/interpreter/interpreter.d.ts +199 -0
- package/dist-browser/numbl-core/interpreter/interpreterExec.d.ts +81 -0
- package/dist-browser/numbl-core/interpreter/interpreterFunctions.d.ts +62 -0
- package/dist-browser/numbl-core/interpreter/interpreterSpecialBuiltins.d.ts +35 -0
- package/dist-browser/numbl-core/interpreter/types.d.ts +114 -0
- package/dist-browser/numbl-core/jit/builtins/defs/_shared.d.ts +43 -0
- package/dist-browser/numbl-core/jit/builtins/defs/arithmetic/_elemwise.d.ts +123 -0
- package/dist-browser/numbl-core/jit/builtins/defs/arithmetic/minus.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/arithmetic/mpower.d.ts +12 -0
- package/dist-browser/numbl-core/jit/builtins/defs/arithmetic/mrdivide.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/defs/arithmetic/mtimes.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/arithmetic/plus.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/arithmetic/power.d.ts +30 -0
- package/dist-browser/numbl-core/jit/builtins/defs/arithmetic/rdivide.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/arithmetic/times.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/arithmetic/uminus.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/compare/_compare.d.ts +12 -0
- package/dist-browser/numbl-core/jit/builtins/defs/compare/eq.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/compare/ge.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/compare/gt.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/compare/le.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/compare/lt.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/compare/ne.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/diag/assert.d.ts +6 -0
- package/dist-browser/numbl-core/jit/builtins/defs/io/_format_args.d.ts +17 -0
- package/dist-browser/numbl-core/jit/builtins/defs/io/disp.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/io/error.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/io/fprintf.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/io/sprintf.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/io/warning.d.ts +15 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/_shortcircuit.d.ts +30 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/_unary_pred.d.ts +30 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/and.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/andand.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/boolconst.d.ts +3 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/classBuiltin.d.ts +21 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/fieldnames.d.ts +15 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/isa.d.ts +13 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/iscell.d.ts +8 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/isempty.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/isequal.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/isfield.d.ts +20 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/isinf.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/isnan.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/isnumeric.d.ts +7 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/isreal.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/isscalar.d.ts +20 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/isstruct.d.ts +7 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/logical.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/not.d.ts +15 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/or.d.ts +11 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/oror.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/strcmp.d.ts +21 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/typequery.d.ts +10 -0
- package/dist-browser/numbl-core/jit/builtins/defs/logical/xor.d.ts +12 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/_complex_fold.d.ts +34 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/_unary_real.d.ts +51 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/abs.d.ts +7 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/angle.d.ts +7 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/asinh.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/atan.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/atan2.d.ts +3 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/besselh.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/ceil.d.ts +4 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/conj.d.ts +7 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/constants.d.ts +7 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/cos.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/cosh.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/dot.d.ts +20 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/double.d.ts +28 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/exp.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/fix.d.ts +4 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/floor.d.ts +4 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/hypot.d.ts +3 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/imag.d.ts +7 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/linspace.d.ts +6 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/log.d.ts +4 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/log10.d.ts +3 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/log2.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/logspace.d.ts +8 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/mod.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/norm.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/rand.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/real.d.ts +7 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/rem.d.ts +3 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/round.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/sign.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/sin.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/sinh.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/sqrt.d.ts +11 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/tan.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/tanh.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/math/uniquetol.d.ts +22 -0
- package/dist-browser/numbl-core/jit/builtins/defs/plot/dispatch.d.ts +6 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/_cumulative.d.ts +49 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/_shape.d.ts +126 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/_variance.d.ts +17 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/all.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/any.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/cummax.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/cummin.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/cumprod.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/cumsum.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/diff.d.ts +16 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/length.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/max.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/mean.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/min.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/numel.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/prod.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/std.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/sum.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/reduction/var.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/_construct.d.ts +67 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/_triangular.d.ts +34 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/cat.d.ts +33 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/diag.d.ts +29 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/eye.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/flip.d.ts +7 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/meshgrid.d.ts +12 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/ones.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/repmat.d.ts +37 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/reshape.d.ts +39 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/size.d.ts +20 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/sort.d.ts +19 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/transpose.d.ts +6 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/tril.d.ts +16 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/triu.d.ts +16 -0
- package/dist-browser/numbl-core/jit/builtins/defs/shape/zeros.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/defs/system/deal.d.ts +20 -0
- package/dist-browser/numbl-core/jit/builtins/defs/system/feval.d.ts +36 -0
- package/dist-browser/numbl-core/jit/builtins/defs/system/pathBuiltins.d.ts +4 -0
- package/dist-browser/numbl-core/jit/builtins/defs/system/tic.d.ts +8 -0
- package/dist-browser/numbl-core/jit/builtins/defs/system/toc.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/index.d.ts +16 -0
- package/dist-browser/numbl-core/jit/builtins/registry.d.ts +138 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/cell/cell.d.ts +24 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/indexing/loop_count.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/indexing/range_value.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/indexing/scalar_index.d.ts +11 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/indexing/tensor_make_range.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/io/assert_fmt.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/io/disp_complex.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/io/disp_double.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/io/disp_struct.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/io/disp_tensor.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/io/disp_tensor_complex.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/io/error_fmt.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/io/format_complex.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/io/format_double.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/io/format_engine.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/io/fprintf.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/io/sprintf.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/io/warning_fmt.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/plot/plot_dispatch.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/snippets.c.gen.d.ts +4 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/snippets.gen.d.ts +85 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/system/cdiv.d.ts +4 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/system/cscalar.d.ts +103 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/system/deep_clone.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/system/isequal.d.ts +2 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/system/tictoc.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor/tensor.d.ts +6 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor/tensor_alloc.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor/tensor_alloc_complex.d.ts +6 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor/tensor_alloc_nd.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor/tensor_alloc_nd_complex.d.ts +6 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor/tensor_copy_complex.d.ts +6 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor/tensor_from_matrix.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor/tensor_from_matrix_complex.d.ts +6 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor/tensor_from_row.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor/tensor_from_row_complex.d.ts +6 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_cat.d.ts +11 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_cumulative.d.ts +32 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_diag.d.ts +33 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_diff.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_dot.d.ts +16 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_elemwise_complex.d.ts +90 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_elemwise_real.d.ts +75 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_elemwise_real_fn.d.ts +95 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_eye.d.ts +10 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_fill_nd.d.ts +11 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_fill_square.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_flip.d.ts +11 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_imag_all_zero.d.ts +1 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_linspace.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_logical_real.d.ts +10 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_logspace.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_meshgrid.d.ts +29 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_mtimes_complex.d.ts +10 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_mtimes_real.d.ts +6 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_norm.d.ts +4 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_ones_nd.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_ones_square.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_predicate.d.ts +42 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_reduce_complex.d.ts +53 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_reduce_real.d.ts +42 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_repmat.d.ts +11 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_reshape_nd.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_reshape_nd_complex.d.ts +6 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_size.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_sort_real.d.ts +36 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_transpose.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_transpose_complex.d.ts +6 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_triangular.d.ts +22 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_unary_complex_math.d.ts +128 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_unary_real_math.d.ts +95 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_uniquetol.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_var.d.ts +12 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_zeros_nd.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/tensor_ops/tensor_zeros_square.d.ts +5 -0
- package/dist-browser/numbl-core/jit/builtins/runtime/text/strcmp.d.ts +2 -0
- package/dist-browser/numbl-core/jit/codegen/cFormat.d.ts +36 -0
- package/dist-browser/numbl-core/jit/codegen/cHelpers.d.ts +48 -0
- package/dist-browser/numbl-core/jit/codegen/emit.d.ts +55 -0
- package/dist-browser/numbl-core/jit/codegen/emitCellTypedef.d.ts +23 -0
- package/dist-browser/numbl-core/jit/codegen/emitExpr.d.ts +33 -0
- package/dist-browser/numbl-core/jit/codegen/emitIndex.d.ts +56 -0
- package/dist-browser/numbl-core/jit/codegen/emitJs.d.ts +64 -0
- package/dist-browser/numbl-core/jit/codegen/emitNamedTypedef.d.ts +58 -0
- package/dist-browser/numbl-core/jit/codegen/emitStmt.d.ts +76 -0
- package/dist-browser/numbl-core/jit/codegen/emitTensorConcat.d.ts +23 -0
- package/dist-browser/numbl-core/jit/codegen/emitTensorConcatJs.d.ts +16 -0
- package/dist-browser/numbl-core/jit/codegen/emitTensorFused.d.ts +77 -0
- package/dist-browser/numbl-core/jit/codegen/inlinePass.d.ts +66 -0
- package/dist-browser/numbl-core/jit/codegen/liveness.d.ts +58 -0
- package/dist-browser/numbl-core/jit/codegen/prettyIR.d.ts +24 -0
- package/dist-browser/numbl-core/jit/codegen/runtime.d.ts +152 -0
- package/dist-browser/numbl-core/jit/compileSpec.d.ts +84 -0
- package/dist-browser/numbl-core/jit/compileSpecC.d.ts +100 -0
- package/dist-browser/numbl-core/jit/index.d.ts +15 -0
- package/dist-browser/numbl-core/jit/lowering/classDefs.d.ts +109 -0
- package/dist-browser/numbl-core/jit/lowering/definiteAssign.d.ts +42 -0
- package/dist-browser/numbl-core/jit/lowering/errors.d.ts +35 -0
- package/dist-browser/numbl-core/jit/lowering/indexFold.d.ts +31 -0
- package/dist-browser/numbl-core/jit/lowering/indexResolve.d.ts +100 -0
- package/dist-browser/numbl-core/jit/lowering/ir.d.ts +584 -0
- package/dist-browser/numbl-core/jit/lowering/lower.d.ts +271 -0
- package/dist-browser/numbl-core/jit/lowering/lowerCellIndex.d.ts +41 -0
- package/dist-browser/numbl-core/jit/lowering/lowerCellLit.d.ts +19 -0
- package/dist-browser/numbl-core/jit/lowering/lowerClassConstructor.d.ts +55 -0
- package/dist-browser/numbl-core/jit/lowering/lowerFuncCall.d.ts +34 -0
- package/dist-browser/numbl-core/jit/lowering/lowerHandle.d.ts +57 -0
- package/dist-browser/numbl-core/jit/lowering/lowerIndexLoad.d.ts +16 -0
- package/dist-browser/numbl-core/jit/lowering/lowerIndexSlice.d.ts +29 -0
- package/dist-browser/numbl-core/jit/lowering/lowerIndexSliceStore.d.ts +19 -0
- package/dist-browser/numbl-core/jit/lowering/lowerIndexStore.d.ts +14 -0
- package/dist-browser/numbl-core/jit/lowering/lowerMethodCall.d.ts +45 -0
- package/dist-browser/numbl-core/jit/lowering/lowerMultiAssign.d.ts +36 -0
- package/dist-browser/numbl-core/jit/lowering/lowerTensorLit.d.ts +25 -0
- package/dist-browser/numbl-core/jit/lowering/rangeCount.d.ts +19 -0
- package/dist-browser/numbl-core/jit/lowering/specialize.d.ts +93 -0
- package/dist-browser/numbl-core/jit/lowering/types.d.ts +503 -0
- package/dist-browser/numbl-core/jit/lowering/walk.d.ts +17 -0
- package/dist-browser/numbl-core/jit/numbl/index.d.ts +30 -0
- package/dist-browser/numbl-core/jit/parser/astUtils.d.ts +43 -0
- package/dist-browser/numbl-core/jit/parser/index.d.ts +12 -0
- package/dist-browser/numbl-core/jit/parser/sourceLoc.d.ts +12 -0
- package/dist-browser/numbl-core/jit/runtime/context.d.ts +23 -0
- package/dist-browser/numbl-core/jit/runtime/inferType.d.ts +10 -0
- package/dist-browser/numbl-core/jit/runtime/value.d.ts +101 -0
- package/dist-browser/numbl-core/jit/workspace/driverPrologue.d.ts +59 -0
- package/dist-browser/numbl-core/jit/workspace/mtoc2UserFunctionLoader.d.ts +62 -0
- package/dist-browser/numbl-core/jit/workspace/workspace.d.ts +243 -0
- package/dist-browser/numbl-core/jitDeclineDiagnostics.d.ts +32 -0
- package/dist-browser/numbl-core/jitTypes.d.ts +94 -0
- package/dist-browser/numbl-core/jsUserFunctions.d.ts +61 -0
- package/dist-browser/numbl-core/lexer/helpers.d.ts +15 -0
- package/dist-browser/numbl-core/lexer/index.d.ts +4 -0
- package/dist-browser/numbl-core/lexer/keywords.d.ts +3 -0
- package/dist-browser/numbl-core/lexer/token-config.d.ts +94 -0
- package/dist-browser/numbl-core/lexer/tokenizer.d.ts +9 -0
- package/dist-browser/numbl-core/lexer/types.d.ts +80 -0
- package/dist-browser/numbl-core/lowering/classInfo.d.ts +53 -0
- package/dist-browser/numbl-core/lowering/constants.d.ts +4 -0
- package/dist-browser/numbl-core/lowering/errors.d.ts +17 -0
- package/dist-browser/numbl-core/lowering/index.d.ts +3 -0
- package/dist-browser/numbl-core/lowering/itemTypes.d.ts +87 -0
- package/dist-browser/numbl-core/lowering/loweringContext.d.ts +241 -0
- package/dist-browser/numbl-core/native/bridge-resolve.d.ts +14 -0
- package/dist-browser/numbl-core/native/geometry-bridge.d.ts +39 -0
- package/dist-browser/numbl-core/native/lapack-bridge.d.ts +482 -0
- package/dist-browser/numbl-core/native/qhull-browser.d.ts +15 -0
- package/dist-browser/numbl-core/native/qhull-node.d.ts +13 -0
- package/dist-browser/numbl-core/native/ts-lapack-bridge.d.ts +9 -0
- package/dist-browser/numbl-core/native/ts-lapack-eig-complex.d.ts +32 -0
- package/dist-browser/numbl-core/ops/bessel.d.ts +18 -0
- package/dist-browser/numbl-core/ops/comparison.d.ts +11 -0
- package/dist-browser/numbl-core/ops/complexBinaryElemwise.d.ts +10 -0
- package/dist-browser/numbl-core/ops/complexUnaryElemwise.d.ts +8 -0
- package/dist-browser/numbl-core/ops/dispatch.d.ts +26 -0
- package/dist-browser/numbl-core/ops/index.d.ts +8 -0
- package/dist-browser/numbl-core/ops/opCodes.d.ts +70 -0
- package/dist-browser/numbl-core/ops/realBinaryElemwise.d.ts +8 -0
- package/dist-browser/numbl-core/ops/realUnaryElemwise.d.ts +5 -0
- package/dist-browser/numbl-core/ops/reduce.d.ts +6 -0
- package/dist-browser/numbl-core/parser/ArgumentsParser.d.ts +33 -0
- package/dist-browser/numbl-core/parser/ClassParser.d.ts +21 -0
- package/dist-browser/numbl-core/parser/CommandParser.d.ts +31 -0
- package/dist-browser/numbl-core/parser/ControlFlowParser.d.ts +16 -0
- package/dist-browser/numbl-core/parser/ExpressionParser.d.ts +32 -0
- package/dist-browser/numbl-core/parser/FunctionParser.d.ts +10 -0
- package/dist-browser/numbl-core/parser/Parser.d.ts +17 -0
- package/dist-browser/numbl-core/parser/ParserBase.d.ts +35 -0
- package/dist-browser/numbl-core/parser/StatementParser.d.ts +13 -0
- package/dist-browser/numbl-core/parser/errors.d.ts +15 -0
- package/dist-browser/numbl-core/parser/index.d.ts +7 -0
- package/dist-browser/numbl-core/parser/types.d.ts +342 -0
- package/dist-browser/numbl-core/runtime/alloc.d.ts +12 -0
- package/dist-browser/numbl-core/runtime/axisCommand.d.ts +34 -0
- package/dist-browser/numbl-core/runtime/compare.d.ts +5 -0
- package/dist-browser/numbl-core/runtime/constructors.d.ts +39 -0
- package/dist-browser/numbl-core/runtime/convert.d.ts +10 -0
- package/dist-browser/numbl-core/runtime/cow.d.ts +33 -0
- package/dist-browser/numbl-core/runtime/display.d.ts +6 -0
- package/dist-browser/numbl-core/runtime/error.d.ts +78 -0
- package/dist-browser/numbl-core/runtime/index.d.ts +13 -0
- package/dist-browser/numbl-core/runtime/indexing.d.ts +28 -0
- package/dist-browser/numbl-core/runtime/plotBuiltinDispatch.d.ts +92 -0
- package/dist-browser/numbl-core/runtime/plotUtils.d.ts +336 -0
- package/dist-browser/numbl-core/runtime/refcount.d.ts +85 -0
- package/dist-browser/numbl-core/runtime/runtime.d.ts +354 -0
- package/dist-browser/numbl-core/runtime/runtimeDispatch.d.ts +27 -0
- package/dist-browser/numbl-core/runtime/runtimeHelpers.d.ts +31 -0
- package/dist-browser/numbl-core/runtime/runtimeIndexing.d.ts +28 -0
- package/dist-browser/numbl-core/runtime/runtimeMemberAccess.d.ts +26 -0
- package/dist-browser/numbl-core/runtime/runtimeOperators.d.ts +24 -0
- package/dist-browser/numbl-core/runtime/runtimePlot.d.ts +129 -0
- package/dist-browser/numbl-core/runtime/sentinels.d.ts +4 -0
- package/dist-browser/numbl-core/runtime/specialBuiltinNames.d.ts +2 -0
- package/dist-browser/numbl-core/runtime/specialBuiltins.d.ts +13 -0
- package/dist-browser/numbl-core/runtime/struct-access.d.ts +11 -0
- package/dist-browser/numbl-core/runtime/syncChannel.d.ts +1 -0
- package/dist-browser/numbl-core/runtime/tensor-construction.d.ts +10 -0
- package/dist-browser/numbl-core/runtime/types.d.ts +197 -0
- package/dist-browser/numbl-core/runtime/uihtmlSession.d.ts +40 -0
- package/dist-browser/numbl-core/runtime/utils.d.ts +19 -0
- package/dist-browser/numbl-core/stdlib-bundle.d.ts +3 -0
- package/dist-browser/numbl-core/systemAdapter.d.ts +23 -0
- package/dist-browser/numbl-core/version.d.ts +2 -0
- package/dist-browser/numbl-core/workspace/index.d.ts +4 -0
- package/dist-browser/numbl-core/workspace/types.d.ts +24 -0
- package/dist-browser/ts-lapack/src/BLAS/daxpy.d.ts +1 -0
- package/dist-browser/ts-lapack/src/BLAS/dcopy.d.ts +1 -0
- package/dist-browser/ts-lapack/src/BLAS/ddot.d.ts +1 -0
- package/dist-browser/ts-lapack/src/BLAS/dgemm.d.ts +1 -0
- package/dist-browser/ts-lapack/src/BLAS/dgemm_optimized.d.ts +1 -0
- package/dist-browser/ts-lapack/src/BLAS/dgemv.d.ts +1 -0
- package/dist-browser/ts-lapack/src/BLAS/dger.d.ts +1 -0
- package/dist-browser/ts-lapack/src/BLAS/dnrm2.d.ts +1 -0
- package/dist-browser/ts-lapack/src/BLAS/drot.d.ts +1 -0
- package/dist-browser/ts-lapack/src/BLAS/dscal.d.ts +1 -0
- package/dist-browser/ts-lapack/src/BLAS/dswap.d.ts +1 -0
- package/dist-browser/ts-lapack/src/BLAS/dtrmm.d.ts +1 -0
- package/dist-browser/ts-lapack/src/BLAS/dtrmv.d.ts +1 -0
- package/dist-browser/ts-lapack/src/BLAS/dtrsm.d.ts +1 -0
- package/dist-browser/ts-lapack/src/BLAS/idamax.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dbdsqr.d.ts +10 -0
- package/dist-browser/ts-lapack/src/SRC/dgebak.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dgebal.d.ts +5 -0
- package/dist-browser/ts-lapack/src/SRC/dgebd2.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dgebrd.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dgeev.d.ts +3 -0
- package/dist-browser/ts-lapack/src/SRC/dgehd2.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dgehrd.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dgelq2.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dgelqf.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dgeqr2.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dgeqrf.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dgeqrf_optimized.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dgesvd.d.ts +28 -0
- package/dist-browser/ts-lapack/src/SRC/dgetrf.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dgetrf2.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dgetri.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dhseqr.d.ts +32 -0
- package/dist-browser/ts-lapack/src/SRC/dlabrd.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dlacpy.d.ts +18 -0
- package/dist-browser/ts-lapack/src/SRC/dladiv.d.ts +9 -0
- package/dist-browser/ts-lapack/src/SRC/dlaexc.d.ts +21 -0
- package/dist-browser/ts-lapack/src/SRC/dlahqr.d.ts +24 -0
- package/dist-browser/ts-lapack/src/SRC/dlahr2.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dlaln2.d.ts +5 -0
- package/dist-browser/ts-lapack/src/SRC/dlamch.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dlange.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dlanv2.d.ts +12 -0
- package/dist-browser/ts-lapack/src/SRC/dlapy2.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dlaqr1.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dlaqr30.d.ts +81 -0
- package/dist-browser/ts-lapack/src/SRC/dlaqr5.d.ts +38 -0
- package/dist-browser/ts-lapack/src/SRC/dlarf.d.ts +18 -0
- package/dist-browser/ts-lapack/src/SRC/dlarf1f.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dlarfb.d.ts +25 -0
- package/dist-browser/ts-lapack/src/SRC/dlarfg.d.ts +4 -0
- package/dist-browser/ts-lapack/src/SRC/dlarft.d.ts +20 -0
- package/dist-browser/ts-lapack/src/SRC/dlarfx.d.ts +17 -0
- package/dist-browser/ts-lapack/src/SRC/dlartg.d.ts +5 -0
- package/dist-browser/ts-lapack/src/SRC/dlas2.d.ts +4 -0
- package/dist-browser/ts-lapack/src/SRC/dlascl.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dlaset.d.ts +19 -0
- package/dist-browser/ts-lapack/src/SRC/dlasr.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dlassq.d.ts +18 -0
- package/dist-browser/ts-lapack/src/SRC/dlasv2.d.ts +8 -0
- package/dist-browser/ts-lapack/src/SRC/dlaswp.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dlasy2.d.ts +5 -0
- package/dist-browser/ts-lapack/src/SRC/dorg2r.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dorgbr.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dorghr.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dorgl2.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dorglq.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dorgqr.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dorgqr_optimized.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dorm2r.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dormhr.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dormqr.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dpotf2.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dtrevc3.d.ts +27 -0
- package/dist-browser/ts-lapack/src/SRC/dtrexc.d.ts +24 -0
- package/dist-browser/ts-lapack/src/SRC/dtrti2.d.ts +1 -0
- package/dist-browser/ts-lapack/src/SRC/dtrtri.d.ts +1 -0
- package/dist-browser/ts-lapack/src/utils/constants.d.ts +28 -0
- package/dist-browser/ts-lapack/src/utils/iladlc.d.ts +1 -0
- package/dist-browser/ts-lapack/src/utils/iladlr.d.ts +1 -0
- package/dist-browser/ts-lapack/src/utils/ilaenv.d.ts +1 -0
- package/dist-browser/ts-lapack/src/utils/xerbla.d.ts +1 -0
- package/dist-browser/vfs/BrowserFileIOAdapter.d.ts +60 -0
- package/dist-browser/vfs/BrowserSystemAdapter.d.ts +27 -0
- package/dist-browser/vfs/VirtualFileSystem.d.ts +66 -0
- package/dist-browser/vfs/syncVfsChanges.d.ts +23 -0
- package/dist-browser/vfs/unzipToFiles.d.ts +7 -0
- package/dist-cli/cli.js +1290 -197
- package/dist-lib/lib.js +1284 -197
- package/dist-lib/numbl-core/helpers/scanFormat.d.ts +11 -0
- package/dist-lib/numbl-core/jit/builtins/defs/logical/fieldnames.d.ts +2 -2
- package/dist-lib/numbl-core/runtime/constructors.d.ts +3 -1
- package/dist-lib/numbl-core/runtime/indexing.d.ts +3 -0
- package/dist-lib/numbl-core/runtime/runtime.d.ts +1 -0
- package/dist-lib/numbl-core/runtime/types.d.ts +15 -1
- package/dist-lib/numbl-core/runtime/utils.d.ts +3 -0
- package/dist-lib/numbl-core/version.d.ts +1 -1
- package/dist-lib/vfs/BrowserFileIOAdapter.d.ts +6 -0
- package/dist-site-viewer/assets/{index-C-wfkZK0.js → index-CT9HA1Pn.js} +318 -316
- package/dist-site-viewer/assets/numbl-worker-CYPflGmm.js +5246 -0
- package/dist-site-viewer/index.html +1 -1
- package/package.json +9 -3
- package/dist-site-viewer/assets/numbl-worker-Bnbz2rMQ.js +0 -5228
package/dist-cli/cli.js
CHANGED
|
@@ -678,6 +678,7 @@ var isRuntimeStructArray = (value) => typeof value === "object" && value !== nul
|
|
|
678
678
|
var isRuntimeClassInstanceArray = (value) => typeof value === "object" && value !== null && value.kind === "class_instance_array";
|
|
679
679
|
var isRuntimeSparseMatrix = (value) => typeof value === "object" && value !== null && value.kind === "sparse_matrix";
|
|
680
680
|
var isRuntimeDictionary = (value) => typeof value === "object" && value !== null && value.kind === "dictionary";
|
|
681
|
+
var isRuntimeStringArray = (value) => typeof value === "object" && value !== null && value.kind === "string_array";
|
|
681
682
|
var kstr = (value) => {
|
|
682
683
|
if (isRuntimeNumber(value)) return "number";
|
|
683
684
|
if (isRuntimeLogical(value)) return "logical";
|
|
@@ -696,6 +697,7 @@ var kstr = (value) => {
|
|
|
696
697
|
if (isRuntimeStructArray(value)) return "struct array";
|
|
697
698
|
if (isRuntimeSparseMatrix(value)) return "sparse matrix";
|
|
698
699
|
if (isRuntimeDictionary(value)) return "dictionary";
|
|
700
|
+
if (isRuntimeStringArray(value)) return "string array";
|
|
699
701
|
return "unknown";
|
|
700
702
|
};
|
|
701
703
|
var RuntimeTensor = class extends Refcounted {
|
|
@@ -727,6 +729,24 @@ var RuntimeChar = class extends Refcounted {
|
|
|
727
729
|
this.shape = shape;
|
|
728
730
|
}
|
|
729
731
|
};
|
|
732
|
+
var RuntimeStringArray = class extends Refcounted {
|
|
733
|
+
kind = "string_array";
|
|
734
|
+
/** Elements in column-major order (plain JS strings). */
|
|
735
|
+
data;
|
|
736
|
+
/** 2-D shape [rows, cols]; data.length === rows*cols. A 1x1 string is
|
|
737
|
+
* normally represented as a primitive JS string, not a 1x1 array —
|
|
738
|
+
* use stringArrayValue() to build results so scalars collapse. */
|
|
739
|
+
shape;
|
|
740
|
+
constructor(data, shape) {
|
|
741
|
+
super();
|
|
742
|
+
this.data = data;
|
|
743
|
+
this.shape = shape;
|
|
744
|
+
}
|
|
745
|
+
};
|
|
746
|
+
function stringArrayValue(data, shape) {
|
|
747
|
+
if (data.length === 1 && shape[0] === 1 && shape[1] === 1) return data[0];
|
|
748
|
+
return new RuntimeStringArray(data, shape);
|
|
749
|
+
}
|
|
730
750
|
var RuntimeCell = class extends Refcounted {
|
|
731
751
|
kind = "cell";
|
|
732
752
|
data;
|
|
@@ -2603,6 +2623,10 @@ var RTV = {
|
|
|
2603
2623
|
string(value) {
|
|
2604
2624
|
return value;
|
|
2605
2625
|
},
|
|
2626
|
+
/** String array (does NOT collapse 1x1 — use stringArrayValue for that). */
|
|
2627
|
+
stringArray(data, shape) {
|
|
2628
|
+
return new RuntimeStringArray(data, shape);
|
|
2629
|
+
},
|
|
2606
2630
|
char(value) {
|
|
2607
2631
|
return new RuntimeChar(value);
|
|
2608
2632
|
},
|
|
@@ -3237,6 +3261,29 @@ function sub2ind(shape, subs) {
|
|
|
3237
3261
|
}
|
|
3238
3262
|
return idx;
|
|
3239
3263
|
}
|
|
3264
|
+
function matlabNumToString(n) {
|
|
3265
|
+
if (n === Infinity) return "Inf";
|
|
3266
|
+
if (n === -Infinity) return "-Inf";
|
|
3267
|
+
if (isNaN(n)) return "NaN";
|
|
3268
|
+
if (n === 0) return "0";
|
|
3269
|
+
if (Number.isInteger(n)) return String(n);
|
|
3270
|
+
const prec = 5;
|
|
3271
|
+
const exp2 = Math.floor(Math.log10(Math.abs(n)));
|
|
3272
|
+
let s;
|
|
3273
|
+
if (exp2 < -4 || exp2 >= prec) {
|
|
3274
|
+
s = n.toExponential(prec - 1);
|
|
3275
|
+
const ePos = s.indexOf("e");
|
|
3276
|
+
let mantissa = s.slice(0, ePos);
|
|
3277
|
+
const expPart0 = s.slice(ePos);
|
|
3278
|
+
if (mantissa.includes(".")) mantissa = mantissa.replace(/\.?0+$/, "");
|
|
3279
|
+
const expPart = expPart0.replace(/([eE][+-])(\d)$/, "$10$2");
|
|
3280
|
+
s = mantissa + expPart;
|
|
3281
|
+
} else {
|
|
3282
|
+
s = n.toPrecision(prec);
|
|
3283
|
+
if (s.includes(".")) s = s.replace(/\.?0+$/, "");
|
|
3284
|
+
}
|
|
3285
|
+
return s;
|
|
3286
|
+
}
|
|
3240
3287
|
|
|
3241
3288
|
// src/numbl-core/helpers/sparse-arithmetic.ts
|
|
3242
3289
|
function isComplexSparse(S) {
|
|
@@ -3993,6 +4040,11 @@ function toString(v) {
|
|
|
3993
4040
|
switch (v.kind) {
|
|
3994
4041
|
case "char":
|
|
3995
4042
|
return v.value;
|
|
4043
|
+
case "string_array":
|
|
4044
|
+
if (v.data.length === 1) return v.data[0];
|
|
4045
|
+
throw new RuntimeError(
|
|
4046
|
+
"Expected a scalar text value, got a string array"
|
|
4047
|
+
);
|
|
3996
4048
|
default:
|
|
3997
4049
|
throw new RuntimeError(`Cannot convert ${kstr(v)} to string`);
|
|
3998
4050
|
}
|
|
@@ -21626,6 +21678,15 @@ var valuesAreEqual = (a, b) => {
|
|
|
21626
21678
|
}
|
|
21627
21679
|
case "dictionary":
|
|
21628
21680
|
return a === b;
|
|
21681
|
+
case "string_array": {
|
|
21682
|
+
const sb = b;
|
|
21683
|
+
if (a.shape[0] !== sb.shape[0] || a.shape[1] !== sb.shape[1])
|
|
21684
|
+
return false;
|
|
21685
|
+
for (let i = 0; i < a.data.length; i++) {
|
|
21686
|
+
if (a.data[i] !== sb.data[i]) return false;
|
|
21687
|
+
}
|
|
21688
|
+
return true;
|
|
21689
|
+
}
|
|
21629
21690
|
default:
|
|
21630
21691
|
return false;
|
|
21631
21692
|
}
|
|
@@ -21678,7 +21739,34 @@ function displayValue(v) {
|
|
|
21678
21739
|
return formatDictionary(v);
|
|
21679
21740
|
case "class_instance_array":
|
|
21680
21741
|
return ` ${v.shape[0]}x${v.shape[1]} ${v.className} array`;
|
|
21742
|
+
case "string_array":
|
|
21743
|
+
return formatStringArray(v);
|
|
21744
|
+
}
|
|
21745
|
+
}
|
|
21746
|
+
function formatStringArray(v) {
|
|
21747
|
+
const [rows, cols] = v.shape;
|
|
21748
|
+
if (v.data.length === 0) {
|
|
21749
|
+
return ` ${rows}x${cols} empty string array`;
|
|
21750
|
+
}
|
|
21751
|
+
const quoted = v.data.map((s) => `"${s}"`);
|
|
21752
|
+
const widths = [];
|
|
21753
|
+
for (let c = 0; c < cols; c++) {
|
|
21754
|
+
let w = 0;
|
|
21755
|
+
for (let r = 0; r < rows; r++) {
|
|
21756
|
+
w = Math.max(w, quoted[c * rows + r].length);
|
|
21757
|
+
}
|
|
21758
|
+
widths.push(w);
|
|
21759
|
+
}
|
|
21760
|
+
const lines = [];
|
|
21761
|
+
for (let r = 0; r < rows; r++) {
|
|
21762
|
+
const parts = [];
|
|
21763
|
+
for (let c = 0; c < cols; c++) {
|
|
21764
|
+
const q = quoted[c * rows + r];
|
|
21765
|
+
parts.push(c === cols - 1 ? q : q.padEnd(widths[c]));
|
|
21766
|
+
}
|
|
21767
|
+
lines.push(" " + parts.join(" "));
|
|
21681
21768
|
}
|
|
21769
|
+
return lines.join("\n");
|
|
21682
21770
|
}
|
|
21683
21771
|
var formatStructArray = (v) => {
|
|
21684
21772
|
const elements = v.elements;
|
|
@@ -22799,6 +22887,68 @@ function indexIntoChar(base, indices) {
|
|
|
22799
22887
|
}
|
|
22800
22888
|
throw new RuntimeError("Char indexing supports 1 or 2 dimensions");
|
|
22801
22889
|
}
|
|
22890
|
+
function stringArraySubscript(idx, extent) {
|
|
22891
|
+
if (isColonIndex(idx)) {
|
|
22892
|
+
return Array.from({ length: extent }, (_, i) => i);
|
|
22893
|
+
}
|
|
22894
|
+
if (isRuntimeTensor(idx)) {
|
|
22895
|
+
if (idx._isLogical) {
|
|
22896
|
+
const out = [];
|
|
22897
|
+
for (let i = 0; i < idx.data.length; i++)
|
|
22898
|
+
if (idx.data[i] !== 0) out.push(i);
|
|
22899
|
+
return out;
|
|
22900
|
+
}
|
|
22901
|
+
return Array.from(idx.data, (v) => Math.round(v) - 1);
|
|
22902
|
+
}
|
|
22903
|
+
if (isRuntimeLogical(idx)) return idx ? [0] : [];
|
|
22904
|
+
return [Math.round(toNumber(idx)) - 1];
|
|
22905
|
+
}
|
|
22906
|
+
function indexIntoStringArray(base, indices) {
|
|
22907
|
+
const [rows, cols] = base.shape;
|
|
22908
|
+
const total = base.data.length;
|
|
22909
|
+
if (indices.length === 2) {
|
|
22910
|
+
const ri = stringArraySubscript(indices[0], rows);
|
|
22911
|
+
const ci = stringArraySubscript(indices[1], cols);
|
|
22912
|
+
const out2 = [];
|
|
22913
|
+
for (const c of ci) {
|
|
22914
|
+
if (c < 0 || c >= cols)
|
|
22915
|
+
throw new RuntimeError("Index exceeds array bounds");
|
|
22916
|
+
for (const r of ri) {
|
|
22917
|
+
if (r < 0 || r >= rows)
|
|
22918
|
+
throw new RuntimeError("Index exceeds array bounds");
|
|
22919
|
+
out2.push(base.data[c * rows + r]);
|
|
22920
|
+
}
|
|
22921
|
+
}
|
|
22922
|
+
return stringArrayValue(out2, [ri.length, ci.length]);
|
|
22923
|
+
}
|
|
22924
|
+
if (indices.length !== 1) {
|
|
22925
|
+
throw new RuntimeError("String array indexing supports 1 or 2 subscripts");
|
|
22926
|
+
}
|
|
22927
|
+
const idx = indices[0];
|
|
22928
|
+
if (isColonIndex(idx)) {
|
|
22929
|
+
return stringArrayValue(base.data.slice(), [total, 1]);
|
|
22930
|
+
}
|
|
22931
|
+
const linear = stringArraySubscript(idx, total);
|
|
22932
|
+
const out = [];
|
|
22933
|
+
for (const i of linear) {
|
|
22934
|
+
if (i < 0 || i >= total)
|
|
22935
|
+
throw new RuntimeError("Index exceeds array bounds");
|
|
22936
|
+
out.push(base.data[i]);
|
|
22937
|
+
}
|
|
22938
|
+
let shape;
|
|
22939
|
+
if (rows === 1 || cols === 1) {
|
|
22940
|
+
shape = rows === 1 ? [1, out.length] : [out.length, 1];
|
|
22941
|
+
} else if (isRuntimeTensor(idx) && !idx._isLogical) {
|
|
22942
|
+
const is = idx.shape;
|
|
22943
|
+
const im = is.length >= 2 ? is[0] : 1;
|
|
22944
|
+
shape = [im, out.length / (im || 1)];
|
|
22945
|
+
} else if (isRuntimeTensor(idx) && idx._isLogical) {
|
|
22946
|
+
shape = [out.length, 1];
|
|
22947
|
+
} else {
|
|
22948
|
+
shape = [1, out.length];
|
|
22949
|
+
}
|
|
22950
|
+
return stringArrayValue(out, shape);
|
|
22951
|
+
}
|
|
22802
22952
|
function indexIntoLogical(base, indices) {
|
|
22803
22953
|
if (indices.length === 1) {
|
|
22804
22954
|
const idx = indices[0];
|
|
@@ -22929,6 +23079,9 @@ function indexIntoRTValue(base, indices) {
|
|
|
22929
23079
|
return base;
|
|
22930
23080
|
}
|
|
22931
23081
|
}
|
|
23082
|
+
if (isRuntimeStringArray(base)) {
|
|
23083
|
+
return indexIntoStringArray(base, indices);
|
|
23084
|
+
}
|
|
22932
23085
|
if (isRuntimeLogical(base)) {
|
|
22933
23086
|
return indexIntoLogical(base, indices);
|
|
22934
23087
|
}
|
|
@@ -23750,26 +23903,18 @@ function horzcat(...values) {
|
|
|
23750
23903
|
if (values.some((v) => isRuntimeCell(v))) {
|
|
23751
23904
|
return cellCatAlongDim(values, 1);
|
|
23752
23905
|
}
|
|
23906
|
+
if (values.some((v) => isRuntimeString(v) || isRuntimeStringArray(v))) {
|
|
23907
|
+
return stringCat(values, 1);
|
|
23908
|
+
}
|
|
23753
23909
|
if (values.some((v) => isRuntimeChar(v))) {
|
|
23754
23910
|
let result = "";
|
|
23755
23911
|
for (const v of values) {
|
|
23756
23912
|
if (isRuntimeChar(v)) result += v.value;
|
|
23757
|
-
else if (isRuntimeString(v)) result += v;
|
|
23758
23913
|
else if (isRuntimeNumber(v)) result += String.fromCharCode(Math.round(v));
|
|
23759
23914
|
else throw new RuntimeError(`Cannot concatenate ${kstr(v)} into char`);
|
|
23760
23915
|
}
|
|
23761
23916
|
return RTV.char(result);
|
|
23762
23917
|
}
|
|
23763
|
-
if (values.some((v) => isRuntimeString(v) || isRuntimeChar(v))) {
|
|
23764
|
-
let result = "";
|
|
23765
|
-
for (const v of values) {
|
|
23766
|
-
if (isRuntimeString(v)) result += v;
|
|
23767
|
-
else if (isRuntimeChar(v)) result += v.value;
|
|
23768
|
-
else if (isRuntimeNumber(v)) result += String(v);
|
|
23769
|
-
else throw new RuntimeError(`Cannot concatenate ${v} into string`);
|
|
23770
|
-
}
|
|
23771
|
-
return RTV.string(result);
|
|
23772
|
-
}
|
|
23773
23918
|
if (values.some((v) => isRuntimeStruct(v) || isRuntimeStructArray(v))) {
|
|
23774
23919
|
return structCat(values);
|
|
23775
23920
|
}
|
|
@@ -23784,6 +23929,9 @@ function vertcat(...values) {
|
|
|
23784
23929
|
if (values.some((v) => isRuntimeCell(v))) {
|
|
23785
23930
|
return cellCatAlongDim(values, 0);
|
|
23786
23931
|
}
|
|
23932
|
+
if (values.some((v) => isRuntimeString(v) || isRuntimeStringArray(v))) {
|
|
23933
|
+
return stringCat(values, 0);
|
|
23934
|
+
}
|
|
23787
23935
|
if (values.some((v) => isRuntimeChar(v))) {
|
|
23788
23936
|
return vertcatChars(values);
|
|
23789
23937
|
}
|
|
@@ -23792,6 +23940,86 @@ function vertcat(...values) {
|
|
|
23792
23940
|
}
|
|
23793
23941
|
return catAlongDim(values, 0);
|
|
23794
23942
|
}
|
|
23943
|
+
function toStringBlock(v) {
|
|
23944
|
+
if (isRuntimeString(v)) return { data: [v], rows: 1, cols: 1 };
|
|
23945
|
+
if (isRuntimeStringArray(v)) {
|
|
23946
|
+
if (v.data.length === 0) return null;
|
|
23947
|
+
return { data: v.data.slice(), rows: v.shape[0], cols: v.shape[1] };
|
|
23948
|
+
}
|
|
23949
|
+
if (isRuntimeChar(v)) {
|
|
23950
|
+
const rows = v.shape ? v.shape[0] : 1;
|
|
23951
|
+
const width = v.shape ? v.shape[1] : v.value.length;
|
|
23952
|
+
if (rows <= 1) return { data: [v.value], rows: 1, cols: 1 };
|
|
23953
|
+
const out = [];
|
|
23954
|
+
for (let r = 0; r < rows; r++) {
|
|
23955
|
+
out.push(v.value.slice(r * width, (r + 1) * width));
|
|
23956
|
+
}
|
|
23957
|
+
return { data: out, rows, cols: 1 };
|
|
23958
|
+
}
|
|
23959
|
+
if (isRuntimeNumber(v)) {
|
|
23960
|
+
return { data: [matlabNumToString(v)], rows: 1, cols: 1 };
|
|
23961
|
+
}
|
|
23962
|
+
if (isRuntimeLogical(v)) {
|
|
23963
|
+
return { data: [v ? "true" : "false"], rows: 1, cols: 1 };
|
|
23964
|
+
}
|
|
23965
|
+
if (isRuntimeTensor(v)) {
|
|
23966
|
+
if (v.data.length === 0) return null;
|
|
23967
|
+
const rows = v.shape.length >= 2 ? v.shape[0] : 1;
|
|
23968
|
+
const cols = v.data.length / (rows || 1);
|
|
23969
|
+
const out = [];
|
|
23970
|
+
for (let i = 0; i < v.data.length; i++) {
|
|
23971
|
+
out.push(
|
|
23972
|
+
v._isLogical ? v.data[i] ? "true" : "false" : matlabNumToString(v.data[i])
|
|
23973
|
+
);
|
|
23974
|
+
}
|
|
23975
|
+
return { data: out, rows, cols };
|
|
23976
|
+
}
|
|
23977
|
+
throw new RuntimeError(`Cannot concatenate ${kstr(v)} into string array`);
|
|
23978
|
+
}
|
|
23979
|
+
function stringCat(values, dim) {
|
|
23980
|
+
const blocks = [];
|
|
23981
|
+
for (const v of values) {
|
|
23982
|
+
const b = toStringBlock(v);
|
|
23983
|
+
if (b) blocks.push(b);
|
|
23984
|
+
}
|
|
23985
|
+
if (blocks.length === 0) return RTV.stringArray([], [0, 0]);
|
|
23986
|
+
if (dim === 1) {
|
|
23987
|
+
const rows2 = blocks[0].rows;
|
|
23988
|
+
let cols2 = 0;
|
|
23989
|
+
for (const b of blocks) {
|
|
23990
|
+
if (b.rows !== rows2) {
|
|
23991
|
+
throw new RuntimeError(
|
|
23992
|
+
"Dimensions of arrays being concatenated are not consistent"
|
|
23993
|
+
);
|
|
23994
|
+
}
|
|
23995
|
+
cols2 += b.cols;
|
|
23996
|
+
}
|
|
23997
|
+
const data2 = [];
|
|
23998
|
+
for (const b of blocks) data2.push(...b.data);
|
|
23999
|
+
return stringArrayValue(data2, [rows2, cols2]);
|
|
24000
|
+
}
|
|
24001
|
+
const cols = blocks[0].cols;
|
|
24002
|
+
let rows = 0;
|
|
24003
|
+
for (const b of blocks) {
|
|
24004
|
+
if (b.cols !== cols) {
|
|
24005
|
+
throw new RuntimeError(
|
|
24006
|
+
"Dimensions of arrays being concatenated are not consistent"
|
|
24007
|
+
);
|
|
24008
|
+
}
|
|
24009
|
+
rows += b.rows;
|
|
24010
|
+
}
|
|
24011
|
+
const data = new Array(rows * cols);
|
|
24012
|
+
let rOff = 0;
|
|
24013
|
+
for (const b of blocks) {
|
|
24014
|
+
for (let c = 0; c < cols; c++) {
|
|
24015
|
+
for (let r = 0; r < b.rows; r++) {
|
|
24016
|
+
data[c * rows + rOff + r] = b.data[c * b.rows + r];
|
|
24017
|
+
}
|
|
24018
|
+
}
|
|
24019
|
+
rOff += b.rows;
|
|
24020
|
+
}
|
|
24021
|
+
return stringArrayValue(data, [rows, cols]);
|
|
24022
|
+
}
|
|
23795
24023
|
function vertcatChars(values) {
|
|
23796
24024
|
let cols = null;
|
|
23797
24025
|
let totalRows = 0;
|
|
@@ -27736,6 +27964,28 @@ function coerceToConcatString(v) {
|
|
|
27736
27964
|
return null;
|
|
27737
27965
|
}
|
|
27738
27966
|
function mAdd(a, b) {
|
|
27967
|
+
if (isRuntimeStringArray(a) || isRuntimeStringArray(b)) {
|
|
27968
|
+
const sa = isRuntimeStringArray(a) ? a : null;
|
|
27969
|
+
const sb = isRuntimeStringArray(b) ? b : null;
|
|
27970
|
+
if (sa && sb) {
|
|
27971
|
+
if (sa.shape[0] !== sb.shape[0] || sa.shape[1] !== sb.shape[1]) {
|
|
27972
|
+
throw new RuntimeError("Array dimensions must match for string plus");
|
|
27973
|
+
}
|
|
27974
|
+
return stringArrayValue(
|
|
27975
|
+
sa.data.map((s, i) => s + sb.data[i]),
|
|
27976
|
+
sa.shape
|
|
27977
|
+
);
|
|
27978
|
+
}
|
|
27979
|
+
const arr = sa ?? sb;
|
|
27980
|
+
const other = coerceToConcatString(sa ? b : a);
|
|
27981
|
+
if (other === null) {
|
|
27982
|
+
throw new RuntimeError("Cannot concatenate this value with a string");
|
|
27983
|
+
}
|
|
27984
|
+
return stringArrayValue(
|
|
27985
|
+
arr.data.map((s) => sa ? s + other : other + s),
|
|
27986
|
+
arr.shape
|
|
27987
|
+
);
|
|
27988
|
+
}
|
|
27739
27989
|
if (isRuntimeString(a) || isRuntimeString(b)) {
|
|
27740
27990
|
const aStr = coerceToConcatString(a);
|
|
27741
27991
|
const bStr = coerceToConcatString(b);
|
|
@@ -28242,12 +28492,24 @@ function transposeClassInstanceArray(v) {
|
|
|
28242
28492
|
}
|
|
28243
28493
|
return new RuntimeClassInstanceArray(v.className, out, [c, r]);
|
|
28244
28494
|
}
|
|
28495
|
+
function transposeStringArray(v) {
|
|
28496
|
+
const [r, c] = v.shape;
|
|
28497
|
+
const out = new Array(r * c);
|
|
28498
|
+
for (let i = 0; i < r; i++) {
|
|
28499
|
+
for (let j = 0; j < c; j++) {
|
|
28500
|
+
out[i * c + j] = v.data[j * r + i];
|
|
28501
|
+
}
|
|
28502
|
+
}
|
|
28503
|
+
return stringArrayValue(out, [c, r]);
|
|
28504
|
+
}
|
|
28245
28505
|
function mTranspose(v) {
|
|
28246
28506
|
if (isRuntimeSparseMatrix(v)) return sparseTranspose(v);
|
|
28247
28507
|
if (isRuntimeComplexNumber(v)) return v;
|
|
28248
28508
|
if (isRuntimeNumber(v) || isRuntimeLogical(v)) return v;
|
|
28249
28509
|
if (isRuntimeCell(v)) return transposeCellArray(v);
|
|
28250
28510
|
if (isRuntimeChar(v)) return v;
|
|
28511
|
+
if (isRuntimeString(v)) return v;
|
|
28512
|
+
if (isRuntimeStringArray(v)) return transposeStringArray(v);
|
|
28251
28513
|
if (isRuntimeClassInstance(v)) return v;
|
|
28252
28514
|
if (isRuntimeClassInstanceArray(v)) return transposeClassInstanceArray(v);
|
|
28253
28515
|
if (!isRuntimeTensor(v))
|
|
@@ -28260,6 +28522,8 @@ function mConjugateTranspose(v) {
|
|
|
28260
28522
|
if (isRuntimeNumber(v) || isRuntimeLogical(v)) return v;
|
|
28261
28523
|
if (isRuntimeCell(v)) return transposeCellArray(v);
|
|
28262
28524
|
if (isRuntimeChar(v)) return v;
|
|
28525
|
+
if (isRuntimeString(v)) return v;
|
|
28526
|
+
if (isRuntimeStringArray(v)) return transposeStringArray(v);
|
|
28263
28527
|
if (isRuntimeClassInstance(v)) return v;
|
|
28264
28528
|
if (isRuntimeClassInstanceArray(v)) return transposeClassInstanceArray(v);
|
|
28265
28529
|
if (!isRuntimeTensor(v))
|
|
@@ -28272,7 +28536,38 @@ function asStringPair(a, b) {
|
|
|
28272
28536
|
if (isRuntimeChar(a) && isRuntimeString(b)) return [a.value, b];
|
|
28273
28537
|
return null;
|
|
28274
28538
|
}
|
|
28539
|
+
function textOperandElems(v) {
|
|
28540
|
+
if (isRuntimeString(v)) return { data: [v], shape: [1, 1] };
|
|
28541
|
+
if (isRuntimeChar(v)) {
|
|
28542
|
+
const rows = v.shape ? v.shape[0] : 1;
|
|
28543
|
+
if (rows > 1) return null;
|
|
28544
|
+
return { data: [v.value], shape: [1, 1] };
|
|
28545
|
+
}
|
|
28546
|
+
if (isRuntimeStringArray(v)) return { data: v.data, shape: v.shape };
|
|
28547
|
+
return null;
|
|
28548
|
+
}
|
|
28275
28549
|
function stringComparisonOp(a, b, op) {
|
|
28550
|
+
if (isRuntimeStringArray(a) || isRuntimeStringArray(b)) {
|
|
28551
|
+
const ta = textOperandElems(a);
|
|
28552
|
+
const tb = textOperandElems(b);
|
|
28553
|
+
if (ta === null || tb === null) return null;
|
|
28554
|
+
const aScalar = ta.data.length === 1 && ta.shape[0] * ta.shape[1] === 1;
|
|
28555
|
+
const bScalar = tb.data.length === 1 && tb.shape[0] * tb.shape[1] === 1;
|
|
28556
|
+
if (!aScalar && !bScalar && (ta.shape[0] !== tb.shape[0] || ta.shape[1] !== tb.shape[1])) {
|
|
28557
|
+
throw new RuntimeError("Array dimensions must match for comparison");
|
|
28558
|
+
}
|
|
28559
|
+
const shape = aScalar ? tb.shape : ta.shape;
|
|
28560
|
+
const n = aScalar ? tb.data.length : ta.data.length;
|
|
28561
|
+
const out = allocFloat64Array(n);
|
|
28562
|
+
for (let i = 0; i < n; i++) {
|
|
28563
|
+
const x = aScalar ? ta.data[0] : ta.data[i];
|
|
28564
|
+
const y = bScalar ? tb.data[0] : tb.data[i];
|
|
28565
|
+
out[i] = op(x, y) ? 1 : 0;
|
|
28566
|
+
}
|
|
28567
|
+
const t = RTV.tensor(out, [shape[0], shape[1]]);
|
|
28568
|
+
t._isLogical = true;
|
|
28569
|
+
return t;
|
|
28570
|
+
}
|
|
28276
28571
|
const pair = asStringPair(a, b);
|
|
28277
28572
|
if (pair === null) return null;
|
|
28278
28573
|
return RTV.logical(op(pair[0], pair[1]));
|
|
@@ -31560,9 +31855,9 @@ var ExpressionParser = class extends ParserBase {
|
|
|
31560
31855
|
if (this.consume(50 /* LParen */)) {
|
|
31561
31856
|
const args = [];
|
|
31562
31857
|
if (!this.consume(51 /* RParen */)) {
|
|
31563
|
-
|
|
31858
|
+
this.parseFuncArg(args);
|
|
31564
31859
|
while (this.consume(47 /* Comma */)) {
|
|
31565
|
-
|
|
31860
|
+
this.parseFuncArg(args);
|
|
31566
31861
|
}
|
|
31567
31862
|
if (!this.consume(51 /* RParen */)) {
|
|
31568
31863
|
throw this.error("expected ')' after method arguments");
|
|
@@ -31591,9 +31886,9 @@ var ExpressionParser = class extends ParserBase {
|
|
|
31591
31886
|
}
|
|
31592
31887
|
const args = [];
|
|
31593
31888
|
if (!this.consume(51 /* RParen */)) {
|
|
31594
|
-
|
|
31889
|
+
this.parseFuncArg(args);
|
|
31595
31890
|
while (this.consume(47 /* Comma */)) {
|
|
31596
|
-
|
|
31891
|
+
this.parseFuncArg(args);
|
|
31597
31892
|
}
|
|
31598
31893
|
if (!this.consume(51 /* RParen */)) {
|
|
31599
31894
|
throw this.error("expected ')' after super call arguments");
|
|
@@ -32440,13 +32735,8 @@ var FunctionParser = class extends ArgumentsParser {
|
|
|
32440
32735
|
}
|
|
32441
32736
|
}
|
|
32442
32737
|
const vararginIdx = params.indexOf("varargin");
|
|
32443
|
-
if (vararginIdx !== -1) {
|
|
32444
|
-
|
|
32445
|
-
throw this.error("'varargin' must be the last input parameter");
|
|
32446
|
-
}
|
|
32447
|
-
if (params.filter((p2) => p2 === "varargin").length > 1) {
|
|
32448
|
-
throw this.error("'varargin' cannot appear more than once");
|
|
32449
|
-
}
|
|
32738
|
+
if (vararginIdx !== -1 && params.filter((p2) => p2 === "varargin").length > 1) {
|
|
32739
|
+
throw this.error("'varargin' cannot appear more than once");
|
|
32450
32740
|
}
|
|
32451
32741
|
const varargoutIdx = outputs.indexOf("varargout");
|
|
32452
32742
|
if (varargoutIdx !== -1) {
|
|
@@ -32458,6 +32748,22 @@ var FunctionParser = class extends ArgumentsParser {
|
|
|
32458
32748
|
}
|
|
32459
32749
|
}
|
|
32460
32750
|
const argumentsBlocks = this.parseArgumentsBlocks();
|
|
32751
|
+
if (vararginIdx !== -1 && vararginIdx !== params.length - 1) {
|
|
32752
|
+
const nvBases = /* @__PURE__ */ new Set();
|
|
32753
|
+
for (const block of argumentsBlocks) {
|
|
32754
|
+
if (block.kind === "Output" || block.kind === "OutputRepeating")
|
|
32755
|
+
continue;
|
|
32756
|
+
for (const e of block.entries) {
|
|
32757
|
+
const dot2 = e.name.indexOf(".");
|
|
32758
|
+
if (dot2 >= 0) nvBases.add(e.name.slice(0, dot2));
|
|
32759
|
+
}
|
|
32760
|
+
}
|
|
32761
|
+
for (const p2 of params.slice(vararginIdx + 1)) {
|
|
32762
|
+
if (!nvBases.has(p2)) {
|
|
32763
|
+
throw this.error("'varargin' must be the last input parameter");
|
|
32764
|
+
}
|
|
32765
|
+
}
|
|
32766
|
+
}
|
|
32461
32767
|
const body = this.parseBlock((t) => t === 15 /* End */);
|
|
32462
32768
|
if (!this.consume(15 /* End */)) {
|
|
32463
32769
|
throw this.error("expected 'end'");
|
|
@@ -33870,6 +34176,16 @@ function forIter(v) {
|
|
|
33870
34176
|
if (isRuntimeChar(mv)) {
|
|
33871
34177
|
return Array.from(mv.value).map((c) => RTV.char(c));
|
|
33872
34178
|
}
|
|
34179
|
+
if (isRuntimeStringArray(mv)) {
|
|
34180
|
+
const [rows, cols] = mv.shape;
|
|
34181
|
+
const out = [];
|
|
34182
|
+
for (let c = 0; c < cols; c++) {
|
|
34183
|
+
out.push(
|
|
34184
|
+
stringArrayValue(mv.data.slice(c * rows, (c + 1) * rows), [rows, 1])
|
|
34185
|
+
);
|
|
34186
|
+
}
|
|
34187
|
+
return out;
|
|
34188
|
+
}
|
|
33873
34189
|
return [v];
|
|
33874
34190
|
}
|
|
33875
34191
|
function emptyTensor() {
|
|
@@ -35377,6 +35693,9 @@ function isa(rt, value, classNameArg) {
|
|
|
35377
35693
|
case "class_instance_array":
|
|
35378
35694
|
valueClass = mv.className;
|
|
35379
35695
|
break;
|
|
35696
|
+
case "string_array":
|
|
35697
|
+
valueClass = "string";
|
|
35698
|
+
break;
|
|
35380
35699
|
default:
|
|
35381
35700
|
valueClass = "unknown";
|
|
35382
35701
|
break;
|
|
@@ -35950,6 +36269,8 @@ function numblClass(v) {
|
|
|
35950
36269
|
return "double";
|
|
35951
36270
|
case "class_instance":
|
|
35952
36271
|
return v.className;
|
|
36272
|
+
case "string_array":
|
|
36273
|
+
return "string";
|
|
35953
36274
|
default:
|
|
35954
36275
|
return "unknown";
|
|
35955
36276
|
}
|
|
@@ -36505,6 +36826,10 @@ function endResolver(mv, numIndices) {
|
|
|
36505
36826
|
}
|
|
36506
36827
|
if (isRuntimeStructArray(mv)) return mv.elements.length;
|
|
36507
36828
|
if (isRuntimeClassInstanceArray(mv)) return mv.elements.length;
|
|
36829
|
+
if (isRuntimeStringArray(mv)) {
|
|
36830
|
+
if (numIndices === 1) return mv.data.length;
|
|
36831
|
+
return dim < 2 ? mv.shape[dim] : 1;
|
|
36832
|
+
}
|
|
36508
36833
|
if (isRuntimeSparseMatrix(mv)) {
|
|
36509
36834
|
if (numIndices === 1) return mv.m * mv.n;
|
|
36510
36835
|
return dim === 0 ? mv.m : dim === 1 ? mv.n : 1;
|
|
@@ -36791,6 +37116,28 @@ function indexCell(rt, base, indices) {
|
|
|
36791
37116
|
if (isRuntimeCell(val) && val.data.length === 1) return val.data[0];
|
|
36792
37117
|
return val;
|
|
36793
37118
|
}
|
|
37119
|
+
if (isRuntimeString(mv) || isRuntimeStringArray(mv)) {
|
|
37120
|
+
const idxMvals2 = resolveIndices(indices, endResolver(mv, indices.length));
|
|
37121
|
+
const elems = isRuntimeString(mv) ? [mv] : mv.data;
|
|
37122
|
+
const shape = isRuntimeString(mv) ? [1, 1] : mv.shape;
|
|
37123
|
+
let lin;
|
|
37124
|
+
if (idxMvals2.length === 1) {
|
|
37125
|
+
lin = Math.round(toNumber(idxMvals2[0])) - 1;
|
|
37126
|
+
} else if (idxMvals2.length === 2) {
|
|
37127
|
+
const r = Math.round(toNumber(idxMvals2[0])) - 1;
|
|
37128
|
+
const c = Math.round(toNumber(idxMvals2[1])) - 1;
|
|
37129
|
+
if (r < 0 || r >= shape[0] || c < 0 || c >= shape[1])
|
|
37130
|
+
throw new RuntimeError("Index exceeds array bounds");
|
|
37131
|
+
lin = c * shape[0] + r;
|
|
37132
|
+
} else {
|
|
37133
|
+
throw new RuntimeError(
|
|
37134
|
+
"String brace indexing supports 1 or 2 subscripts"
|
|
37135
|
+
);
|
|
37136
|
+
}
|
|
37137
|
+
if (lin < 0 || lin >= elems.length)
|
|
37138
|
+
throw new RuntimeError("Index exceeds array bounds");
|
|
37139
|
+
return RTV.char(elems[lin]);
|
|
37140
|
+
}
|
|
36794
37141
|
if (!isRuntimeCell(mv)) throw new RuntimeError("Cell indexing on non-cell");
|
|
36795
37142
|
const idxMvals = resolveIndices(indices, endResolver(mv, indices.length));
|
|
36796
37143
|
if (idxMvals.length === 1) {
|
|
@@ -36984,6 +37331,15 @@ function indexStore(rt, base, indices, rhs, skipSubsasgn = false) {
|
|
|
36984
37331
|
return rhsMv2;
|
|
36985
37332
|
}
|
|
36986
37333
|
}
|
|
37334
|
+
{
|
|
37335
|
+
const rhsMv0 = ensureRuntimeValue(rhs);
|
|
37336
|
+
const baseIsStr = isRuntimeString(mv) || isRuntimeStringArray(mv);
|
|
37337
|
+
const baseEmpty = isRuntimeTensor(mv) && mv.data.length === 0;
|
|
37338
|
+
const rhsIsStr = isRuntimeString(rhsMv0) || isRuntimeStringArray(rhsMv0);
|
|
37339
|
+
if (baseIsStr || baseEmpty && rhsIsStr) {
|
|
37340
|
+
return stringArrayIndexStore(mv, indices, rhsMv0);
|
|
37341
|
+
}
|
|
37342
|
+
}
|
|
36987
37343
|
let wasScalar = false;
|
|
36988
37344
|
let wasChar = false;
|
|
36989
37345
|
if (!isRuntimeTensor(mv)) {
|
|
@@ -37027,6 +37383,109 @@ function indexStore(rt, base, indices, rhs, skipSubsasgn = false) {
|
|
|
37027
37383
|
}
|
|
37028
37384
|
return result;
|
|
37029
37385
|
}
|
|
37386
|
+
function rhsToStringElems(rhsMv) {
|
|
37387
|
+
if (isRuntimeString(rhsMv)) return [rhsMv];
|
|
37388
|
+
if (isRuntimeStringArray(rhsMv)) return rhsMv.data.slice();
|
|
37389
|
+
if (isRuntimeChar(rhsMv)) {
|
|
37390
|
+
const rows = rhsMv.shape ? rhsMv.shape[0] : 1;
|
|
37391
|
+
if (rows <= 1) return [rhsMv.value];
|
|
37392
|
+
const width = rhsMv.shape[1];
|
|
37393
|
+
const out = [];
|
|
37394
|
+
for (let r = 0; r < rows; r++)
|
|
37395
|
+
out.push(rhsMv.value.slice(r * width, (r + 1) * width));
|
|
37396
|
+
return out;
|
|
37397
|
+
}
|
|
37398
|
+
if (isRuntimeNumber(rhsMv)) return [matlabNumToString(rhsMv)];
|
|
37399
|
+
if (isRuntimeLogical(rhsMv)) return [rhsMv ? "true" : "false"];
|
|
37400
|
+
if (isRuntimeTensor(rhsMv))
|
|
37401
|
+
return Array.from(rhsMv.data, (d) => matlabNumToString(d));
|
|
37402
|
+
return null;
|
|
37403
|
+
}
|
|
37404
|
+
function stringArrayIndexStore(mv, indices, rhsMv) {
|
|
37405
|
+
let data;
|
|
37406
|
+
let rows;
|
|
37407
|
+
let cols;
|
|
37408
|
+
if (isRuntimeStringArray(mv)) {
|
|
37409
|
+
data = mv.data.slice();
|
|
37410
|
+
[rows, cols] = mv.shape;
|
|
37411
|
+
} else if (isRuntimeString(mv)) {
|
|
37412
|
+
data = [mv];
|
|
37413
|
+
rows = 1;
|
|
37414
|
+
cols = 1;
|
|
37415
|
+
} else {
|
|
37416
|
+
data = [];
|
|
37417
|
+
rows = 0;
|
|
37418
|
+
cols = 0;
|
|
37419
|
+
}
|
|
37420
|
+
const idxMvals = resolveIndices(indices, endResolver(mv, indices.length));
|
|
37421
|
+
if (isRuntimeTensor(rhsMv) && rhsMv.data.length === 0 && idxMvals.length === 1) {
|
|
37422
|
+
const del = new Set(stringArraySubscript(idxMvals[0], data.length));
|
|
37423
|
+
const kept = data.filter((_, i) => !del.has(i));
|
|
37424
|
+
if (cols === 1 && rows > 1) return stringArrayValue(kept, [kept.length, 1]);
|
|
37425
|
+
return stringArrayValue(kept, [1, kept.length]);
|
|
37426
|
+
}
|
|
37427
|
+
const rhsElems = rhsToStringElems(rhsMv);
|
|
37428
|
+
if (rhsElems === null) {
|
|
37429
|
+
throw new RuntimeError("Cannot assign this value into a string array");
|
|
37430
|
+
}
|
|
37431
|
+
if (idxMvals.length === 1) {
|
|
37432
|
+
const positions = stringArraySubscript(idxMvals[0], data.length);
|
|
37433
|
+
const maxPos = positions.length ? Math.max(...positions) : -1;
|
|
37434
|
+
if (positions.some((p2) => p2 < 0)) {
|
|
37435
|
+
throw new RuntimeError("Index must be a positive integer");
|
|
37436
|
+
}
|
|
37437
|
+
if (maxPos >= data.length) {
|
|
37438
|
+
if (rows > 1 && cols > 1) {
|
|
37439
|
+
throw new RuntimeError("Index exceeds array bounds");
|
|
37440
|
+
}
|
|
37441
|
+
while (data.length <= maxPos) data.push("");
|
|
37442
|
+
}
|
|
37443
|
+
if (rhsElems.length !== 1 && rhsElems.length !== positions.length) {
|
|
37444
|
+
throw new RuntimeError(
|
|
37445
|
+
"Unable to perform assignment because the left and right sides have a different number of elements"
|
|
37446
|
+
);
|
|
37447
|
+
}
|
|
37448
|
+
positions.forEach((p2, k) => {
|
|
37449
|
+
data[p2] = rhsElems.length === 1 ? rhsElems[0] : rhsElems[k];
|
|
37450
|
+
});
|
|
37451
|
+
if (rows > 1 && cols > 1) return stringArrayValue(data, [rows, cols]);
|
|
37452
|
+
if (cols === 1 && rows > 1) return stringArrayValue(data, [data.length, 1]);
|
|
37453
|
+
return stringArrayValue(data, [1, data.length]);
|
|
37454
|
+
}
|
|
37455
|
+
if (idxMvals.length === 2) {
|
|
37456
|
+
const ri = stringArraySubscript(idxMvals[0], rows);
|
|
37457
|
+
const ci = stringArraySubscript(idxMvals[1], cols);
|
|
37458
|
+
if (ri.some((p2) => p2 < 0) || ci.some((p2) => p2 < 0)) {
|
|
37459
|
+
throw new RuntimeError("Index must be a positive integer");
|
|
37460
|
+
}
|
|
37461
|
+
const newRows = Math.max(rows, ri.length ? Math.max(...ri) + 1 : 0);
|
|
37462
|
+
const newCols = Math.max(cols, ci.length ? Math.max(...ci) + 1 : 0);
|
|
37463
|
+
let grid = data;
|
|
37464
|
+
if (newRows !== rows || newCols !== cols) {
|
|
37465
|
+
grid = new Array(newRows * newCols).fill("");
|
|
37466
|
+
for (let c = 0; c < cols; c++) {
|
|
37467
|
+
for (let r = 0; r < rows; r++) {
|
|
37468
|
+
grid[c * newRows + r] = data[c * rows + r];
|
|
37469
|
+
}
|
|
37470
|
+
}
|
|
37471
|
+
}
|
|
37472
|
+
const count = ri.length * ci.length;
|
|
37473
|
+
if (rhsElems.length !== 1 && rhsElems.length !== count) {
|
|
37474
|
+
throw new RuntimeError(
|
|
37475
|
+
"Unable to perform assignment because the left and right sides have a different number of elements"
|
|
37476
|
+
);
|
|
37477
|
+
}
|
|
37478
|
+
let k = 0;
|
|
37479
|
+
for (const c of ci) {
|
|
37480
|
+
for (const r of ri) {
|
|
37481
|
+
grid[c * newRows + r] = rhsElems.length === 1 ? rhsElems[0] : rhsElems[k];
|
|
37482
|
+
k++;
|
|
37483
|
+
}
|
|
37484
|
+
}
|
|
37485
|
+
return stringArrayValue(grid, [newRows, newCols]);
|
|
37486
|
+
}
|
|
37487
|
+
throw new RuntimeError("String array assignment supports 1 or 2 subscripts");
|
|
37488
|
+
}
|
|
37030
37489
|
function indexCellStore(base, indices, rhs, rt) {
|
|
37031
37490
|
if (base === void 0 || base === null) base = RTV.cell([], [0, 0]);
|
|
37032
37491
|
let mv = ensureRuntimeValue(base);
|
|
@@ -37073,6 +37532,87 @@ function multiOutputCellAssign(base, indices, results, rt) {
|
|
|
37073
37532
|
return mv;
|
|
37074
37533
|
}
|
|
37075
37534
|
|
|
37535
|
+
// src/numbl-core/helpers/scanFormat.ts
|
|
37536
|
+
function scanFormat(str, fmt, maxCount) {
|
|
37537
|
+
const results = [];
|
|
37538
|
+
let strPos = 0;
|
|
37539
|
+
let fmtPos = 0;
|
|
37540
|
+
let matchFailure = false;
|
|
37541
|
+
while (fmtPos < fmt.length && strPos < str.length && results.length < maxCount) {
|
|
37542
|
+
if (fmt[fmtPos] === "%") {
|
|
37543
|
+
fmtPos++;
|
|
37544
|
+
if (fmtPos >= fmt.length) break;
|
|
37545
|
+
while (fmtPos < fmt.length && /[\d.]/.test(fmt[fmtPos])) fmtPos++;
|
|
37546
|
+
if (fmtPos >= fmt.length) break;
|
|
37547
|
+
const spec = fmt[fmtPos];
|
|
37548
|
+
fmtPos++;
|
|
37549
|
+
if (spec !== "c" && spec !== "s") {
|
|
37550
|
+
while (strPos < str.length && /\s/.test(str[strPos])) strPos++;
|
|
37551
|
+
}
|
|
37552
|
+
if (spec === "d" || spec === "i" || spec === "u") {
|
|
37553
|
+
const m = str.slice(strPos).match(/^[+-]?\d+/);
|
|
37554
|
+
if (!m) {
|
|
37555
|
+
matchFailure = true;
|
|
37556
|
+
break;
|
|
37557
|
+
}
|
|
37558
|
+
results.push(parseInt(m[0], 10));
|
|
37559
|
+
strPos += m[0].length;
|
|
37560
|
+
} else if (spec === "f" || spec === "e" || spec === "g") {
|
|
37561
|
+
const m = str.slice(strPos).match(/^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?/);
|
|
37562
|
+
if (!m) {
|
|
37563
|
+
matchFailure = true;
|
|
37564
|
+
break;
|
|
37565
|
+
}
|
|
37566
|
+
results.push(parseFloat(m[0]));
|
|
37567
|
+
strPos += m[0].length;
|
|
37568
|
+
} else if (spec === "x") {
|
|
37569
|
+
const m = str.slice(strPos).match(/^[+-]?[0-9a-fA-F]+/);
|
|
37570
|
+
if (!m) {
|
|
37571
|
+
matchFailure = true;
|
|
37572
|
+
break;
|
|
37573
|
+
}
|
|
37574
|
+
results.push(parseInt(m[0], 16));
|
|
37575
|
+
strPos += m[0].length;
|
|
37576
|
+
} else if (spec === "o") {
|
|
37577
|
+
const m = str.slice(strPos).match(/^[+-]?[0-7]+/);
|
|
37578
|
+
if (!m) {
|
|
37579
|
+
matchFailure = true;
|
|
37580
|
+
break;
|
|
37581
|
+
}
|
|
37582
|
+
results.push(parseInt(m[0], 8));
|
|
37583
|
+
strPos += m[0].length;
|
|
37584
|
+
} else if (spec === "c") {
|
|
37585
|
+
results.push(str.charCodeAt(strPos));
|
|
37586
|
+
strPos++;
|
|
37587
|
+
} else if (spec === "s") {
|
|
37588
|
+
const m = str.slice(strPos).match(/^\S+/);
|
|
37589
|
+
if (!m) {
|
|
37590
|
+
matchFailure = true;
|
|
37591
|
+
break;
|
|
37592
|
+
}
|
|
37593
|
+
for (let ci = 0; ci < m[0].length && results.length < maxCount; ci++) {
|
|
37594
|
+
results.push(m[0].charCodeAt(ci));
|
|
37595
|
+
}
|
|
37596
|
+
strPos += m[0].length;
|
|
37597
|
+
}
|
|
37598
|
+
} else if (/\s/.test(fmt[fmtPos])) {
|
|
37599
|
+
fmtPos++;
|
|
37600
|
+
while (strPos < str.length && /\s/.test(str[strPos])) strPos++;
|
|
37601
|
+
} else {
|
|
37602
|
+
if (str[strPos] !== fmt[fmtPos]) {
|
|
37603
|
+
matchFailure = true;
|
|
37604
|
+
break;
|
|
37605
|
+
}
|
|
37606
|
+
strPos++;
|
|
37607
|
+
fmtPos++;
|
|
37608
|
+
}
|
|
37609
|
+
if (fmtPos >= fmt.length && results.length < maxCount && strPos < str.length) {
|
|
37610
|
+
fmtPos = 0;
|
|
37611
|
+
}
|
|
37612
|
+
}
|
|
37613
|
+
return { results, consumed: strPos, matchFailure };
|
|
37614
|
+
}
|
|
37615
|
+
|
|
37076
37616
|
// src/numbl-core/interpreter/builtins/datetime.ts
|
|
37077
37617
|
var MATLAB_EPOCH_DAYS = 719529;
|
|
37078
37618
|
function makeDatetime(year, month, day, hour, minute, second) {
|
|
@@ -39098,6 +39638,7 @@ var SPECIAL_BUILTIN_NAMES = [
|
|
|
39098
39638
|
"fclose",
|
|
39099
39639
|
"fgetl",
|
|
39100
39640
|
"fgets",
|
|
39641
|
+
"fscanf",
|
|
39101
39642
|
"fileread",
|
|
39102
39643
|
"feof",
|
|
39103
39644
|
"ferror",
|
|
@@ -39365,7 +39906,10 @@ function registerSpecialBuiltins(rt) {
|
|
|
39365
39906
|
fmtIdx = 1;
|
|
39366
39907
|
}
|
|
39367
39908
|
const fmt = toString(margs[fmtIdx]);
|
|
39368
|
-
|
|
39909
|
+
const rest = margs.slice(fmtIdx + 1).flatMap(
|
|
39910
|
+
(a) => isRuntimeStringArray(a) ? a.data.map((s) => RTV.string(s)) : [a]
|
|
39911
|
+
);
|
|
39912
|
+
output = sprintfFormat(fmt, rest);
|
|
39369
39913
|
if (fid === 1 || fid === 2) {
|
|
39370
39914
|
rt.output(output);
|
|
39371
39915
|
} else {
|
|
@@ -39519,6 +40063,53 @@ function registerSpecialBuiltins(rt) {
|
|
|
39519
40063
|
const result = io.fgets(toNumber(margs[0]));
|
|
39520
40064
|
return typeof result === "number" ? RTV.num(result) : RTV.char(result);
|
|
39521
40065
|
});
|
|
40066
|
+
registerSpecial("fscanf", (nargout, args) => {
|
|
40067
|
+
const io = requireFileIO();
|
|
40068
|
+
const margs = args.map((a) => ensureRuntimeValue(a));
|
|
40069
|
+
if (margs.length < 2)
|
|
40070
|
+
throw new RuntimeError("fscanf requires at least 2 arguments");
|
|
40071
|
+
if (!io.ftell || !io.fseek || !io.freadBytes)
|
|
40072
|
+
throw new RuntimeError("fscanf is not supported in this environment");
|
|
40073
|
+
const fid = toNumber(margs[0]);
|
|
40074
|
+
const fmt = toString(margs[1]);
|
|
40075
|
+
let maxCount = Infinity;
|
|
40076
|
+
let rows = null;
|
|
40077
|
+
if (margs.length >= 3) {
|
|
40078
|
+
const sz = margs[2];
|
|
40079
|
+
if (isRuntimeTensor(sz) && sz.data.length >= 2) {
|
|
40080
|
+
rows = sz.data[0];
|
|
40081
|
+
maxCount = sz.data[0] * sz.data[1];
|
|
40082
|
+
} else {
|
|
40083
|
+
maxCount = toNumber(sz);
|
|
40084
|
+
}
|
|
40085
|
+
}
|
|
40086
|
+
const pos = io.ftell(fid);
|
|
40087
|
+
const CHUNK = 1 << 16;
|
|
40088
|
+
const chunks = [];
|
|
40089
|
+
for (; ; ) {
|
|
40090
|
+
const bytes = io.freadBytes(fid, CHUNK);
|
|
40091
|
+
let s = "";
|
|
40092
|
+
for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]);
|
|
40093
|
+
chunks.push(s);
|
|
40094
|
+
if (bytes.length < CHUNK) break;
|
|
40095
|
+
}
|
|
40096
|
+
const { results, consumed } = scanFormat(chunks.join(""), fmt, maxCount);
|
|
40097
|
+
io.fseek(fid, pos + consumed, -1);
|
|
40098
|
+
const n = results.length;
|
|
40099
|
+
let out;
|
|
40100
|
+
if (rows !== null && Number.isFinite(rows) && rows > 0) {
|
|
40101
|
+
const cols = Math.ceil(n / rows);
|
|
40102
|
+
const data = allocFloat64Array(rows * cols);
|
|
40103
|
+
for (let i = 0; i < n; i++) data[i] = results[i];
|
|
40104
|
+
out = RTV.tensor(data, [rows, cols]);
|
|
40105
|
+
} else if (n === 1) {
|
|
40106
|
+
out = RTV.num(results[0]);
|
|
40107
|
+
} else {
|
|
40108
|
+
out = RTV.tensor(allocFloat64Array(results), [n, 1]);
|
|
40109
|
+
}
|
|
40110
|
+
if (nargout >= 2) return [out, RTV.num(n)];
|
|
40111
|
+
return out;
|
|
40112
|
+
});
|
|
39522
40113
|
registerSpecial("fileread", (_nargout, args) => {
|
|
39523
40114
|
const io = requireFileIO();
|
|
39524
40115
|
const margs = args.map((a) => ensureRuntimeValue(a));
|
|
@@ -43968,6 +44559,7 @@ var Runtime = class _Runtime {
|
|
|
43968
44559
|
if (isRuntimeChar(rv))
|
|
43969
44560
|
return rv.shape ?? (rv.value.length === 0 ? [0, 0] : [1, rv.value.length]);
|
|
43970
44561
|
if (isRuntimeString(rv)) return [1, 1];
|
|
44562
|
+
if (isRuntimeStringArray(rv)) return [...rv.shape];
|
|
43971
44563
|
if (isRuntimeClassInstance(rv)) return [1, 1];
|
|
43972
44564
|
return [1, 1];
|
|
43973
44565
|
}
|
|
@@ -45987,6 +46579,13 @@ function valuesEqualSimple(a, b) {
|
|
|
45987
46579
|
}
|
|
45988
46580
|
return true;
|
|
45989
46581
|
}
|
|
46582
|
+
if (isRuntimeStringArray(a) && isRuntimeStringArray(b)) {
|
|
46583
|
+
if (a.shape[0] !== b.shape[0] || a.shape[1] !== b.shape[1]) return false;
|
|
46584
|
+
for (let i = 0; i < a.data.length; i++) {
|
|
46585
|
+
if (a.data[i] !== b.data[i]) return false;
|
|
46586
|
+
}
|
|
46587
|
+
return true;
|
|
46588
|
+
}
|
|
45990
46589
|
return false;
|
|
45991
46590
|
}
|
|
45992
46591
|
function textValue(v) {
|
|
@@ -46259,6 +46858,7 @@ function getShape(v) {
|
|
|
46259
46858
|
if (isRuntimeCell(v)) return v.shape;
|
|
46260
46859
|
if (isRuntimeStructArray(v)) return [1, v.elements.length];
|
|
46261
46860
|
if (isRuntimeClassInstanceArray(v)) return [...v.shape];
|
|
46861
|
+
if (isRuntimeStringArray(v)) return [...v.shape];
|
|
46262
46862
|
return [1, 1];
|
|
46263
46863
|
}
|
|
46264
46864
|
defineBuiltin({
|
|
@@ -46314,7 +46914,11 @@ defineBuiltin({
|
|
|
46314
46914
|
});
|
|
46315
46915
|
defineBuiltin({
|
|
46316
46916
|
name: "isstring",
|
|
46317
|
-
cases: [
|
|
46917
|
+
cases: [
|
|
46918
|
+
anyToLogicalCase(
|
|
46919
|
+
(args) => isRuntimeString(args[0]) || isRuntimeStringArray(args[0])
|
|
46920
|
+
)
|
|
46921
|
+
]
|
|
46318
46922
|
});
|
|
46319
46923
|
var MATLAB_KEYWORDS = /* @__PURE__ */ new Set([
|
|
46320
46924
|
"break",
|
|
@@ -46497,6 +47101,7 @@ defineBuiltin({
|
|
|
46497
47101
|
if (isRuntimeString(v)) return false;
|
|
46498
47102
|
if (isRuntimeStructArray(v)) return v.elements.length === 0;
|
|
46499
47103
|
if (isRuntimeClassInstanceArray(v)) return v.elements.length === 0;
|
|
47104
|
+
if (isRuntimeStringArray(v)) return v.data.length === 0;
|
|
46500
47105
|
return false;
|
|
46501
47106
|
})
|
|
46502
47107
|
]
|
|
@@ -46551,6 +47156,7 @@ defineBuiltin({
|
|
|
46551
47156
|
if (isRuntimeString(v)) return 1;
|
|
46552
47157
|
if (isRuntimeStructArray(v)) return v.elements.length;
|
|
46553
47158
|
if (isRuntimeClassInstanceArray(v)) return v.elements.length;
|
|
47159
|
+
if (isRuntimeStringArray(v)) return v.data.length;
|
|
46554
47160
|
return 1;
|
|
46555
47161
|
}
|
|
46556
47162
|
}
|
|
@@ -46581,6 +47187,8 @@ defineBuiltin({
|
|
|
46581
47187
|
if (isRuntimeStructArray(v)) return v.elements.length;
|
|
46582
47188
|
if (isRuntimeClassInstanceArray(v))
|
|
46583
47189
|
return v.elements.length === 0 ? 0 : Math.max(...v.shape);
|
|
47190
|
+
if (isRuntimeStringArray(v))
|
|
47191
|
+
return v.data.length === 0 ? 0 : Math.max(...v.shape);
|
|
46584
47192
|
return 1;
|
|
46585
47193
|
}
|
|
46586
47194
|
}
|
|
@@ -46708,6 +47316,7 @@ defineBuiltin({
|
|
|
46708
47316
|
return mkChar(v._isLogical ? "logical" : "double");
|
|
46709
47317
|
if (isRuntimeSparseMatrix(v)) return mkChar("double");
|
|
46710
47318
|
if (isRuntimeString(v)) return mkChar("string");
|
|
47319
|
+
if (isRuntimeStringArray(v)) return mkChar("string");
|
|
46711
47320
|
if (isRuntimeChar(v)) return mkChar("char");
|
|
46712
47321
|
if (isRuntimeStruct(v) || isRuntimeStructArray(v))
|
|
46713
47322
|
return mkChar("struct");
|
|
@@ -46758,7 +47367,7 @@ function fieldnamesApply(args) {
|
|
|
46758
47367
|
if (isRuntimeStructArray(v)) {
|
|
46759
47368
|
const names2 = v.fieldNames;
|
|
46760
47369
|
return RTV.cell(
|
|
46761
|
-
names2.map((n) => RTV.
|
|
47370
|
+
names2.map((n) => RTV.char(n)),
|
|
46762
47371
|
[names2.length, 1]
|
|
46763
47372
|
);
|
|
46764
47373
|
}
|
|
@@ -46766,7 +47375,7 @@ function fieldnamesApply(args) {
|
|
|
46766
47375
|
throw new RuntimeError("fieldnames: argument must be a struct");
|
|
46767
47376
|
const names = [...v.fields.keys()];
|
|
46768
47377
|
return RTV.cell(
|
|
46769
|
-
names.map((n) => RTV.
|
|
47378
|
+
names.map((n) => RTV.char(n)),
|
|
46770
47379
|
[names.length, 1]
|
|
46771
47380
|
);
|
|
46772
47381
|
}
|
|
@@ -47594,6 +48203,9 @@ function applyTextFn(v, fn) {
|
|
|
47594
48203
|
return RTV.char(fn(v.value));
|
|
47595
48204
|
}
|
|
47596
48205
|
if (isRuntimeString(v)) return RTV.string(fn(toString(v)));
|
|
48206
|
+
if (isRuntimeStringArray(v)) {
|
|
48207
|
+
return RTV.stringArray(v.data.map(fn), [v.shape[0], v.shape[1]]);
|
|
48208
|
+
}
|
|
47597
48209
|
return v;
|
|
47598
48210
|
}
|
|
47599
48211
|
function textPreserveResolve(fn) {
|
|
@@ -47606,6 +48218,16 @@ function textPreserveResolve(fn) {
|
|
|
47606
48218
|
apply: (args) => applyTextFn(args[0], fn)
|
|
47607
48219
|
};
|
|
47608
48220
|
}
|
|
48221
|
+
if (t.kind === "unknown") {
|
|
48222
|
+
return {
|
|
48223
|
+
outputTypes: [{ kind: "unknown" }],
|
|
48224
|
+
apply: (args) => {
|
|
48225
|
+
if (!isRuntimeStringArray(args[0]))
|
|
48226
|
+
throw new RuntimeError("Expected a text input");
|
|
48227
|
+
return applyTextFn(args[0], fn);
|
|
48228
|
+
}
|
|
48229
|
+
};
|
|
48230
|
+
}
|
|
47609
48231
|
const out = preserveTextType(t);
|
|
47610
48232
|
if (!out) return null;
|
|
47611
48233
|
return {
|
|
@@ -47695,17 +48317,14 @@ registerIBuiltin({
|
|
|
47695
48317
|
name: "erase",
|
|
47696
48318
|
resolve: (argTypes) => {
|
|
47697
48319
|
if (argTypes.length !== 2) return null;
|
|
47698
|
-
const out = preserveTextType(argTypes[0]);
|
|
48320
|
+
const out = argTypes[0].kind === "unknown" ? { kind: "unknown" } : preserveTextType(argTypes[0]);
|
|
47699
48321
|
if (!out) return null;
|
|
47700
48322
|
if (!isTextType(argTypes[1])) return null;
|
|
47701
48323
|
return {
|
|
47702
48324
|
outputTypes: [out],
|
|
47703
48325
|
apply: (args) => {
|
|
47704
|
-
const v = args[0];
|
|
47705
|
-
const s = toString(v);
|
|
47706
48326
|
const pat = toString(args[1]);
|
|
47707
|
-
|
|
47708
|
-
return isRuntimeChar(v) ? RTV.char(result) : RTV.string(result);
|
|
48327
|
+
return applyTextFn(args[0], (s) => s.split(pat).join(""));
|
|
47709
48328
|
}
|
|
47710
48329
|
};
|
|
47711
48330
|
}
|
|
@@ -47713,18 +48332,15 @@ registerIBuiltin({
|
|
|
47713
48332
|
function strreplaceResolve() {
|
|
47714
48333
|
return (argTypes) => {
|
|
47715
48334
|
if (argTypes.length !== 3) return null;
|
|
47716
|
-
const out = preserveTextType(argTypes[0]);
|
|
48335
|
+
const out = argTypes[0].kind === "unknown" || argTypes[0].kind === "cell" ? { kind: argTypes[0].kind } : preserveTextType(argTypes[0]);
|
|
47717
48336
|
if (!out) return null;
|
|
47718
48337
|
if (!isTextType(argTypes[1]) || !isTextType(argTypes[2])) return null;
|
|
47719
48338
|
return {
|
|
47720
48339
|
outputTypes: [out],
|
|
47721
48340
|
apply: (args) => {
|
|
47722
|
-
const v = args[0];
|
|
47723
|
-
const s = toString(v);
|
|
47724
48341
|
const old = toString(args[1]);
|
|
47725
48342
|
const rep = toString(args[2]);
|
|
47726
|
-
|
|
47727
|
-
return isRuntimeChar(v) ? RTV.char(result) : RTV.string(result);
|
|
48343
|
+
return applyTextFn(args[0], (s) => s.split(old).join(rep));
|
|
47728
48344
|
}
|
|
47729
48345
|
};
|
|
47730
48346
|
};
|
|
@@ -47892,9 +48508,16 @@ registerIBuiltin({
|
|
|
47892
48508
|
function isText(v) {
|
|
47893
48509
|
return isRuntimeChar(v) || isRuntimeString(v);
|
|
47894
48510
|
}
|
|
48511
|
+
function stringArrayToCell(v) {
|
|
48512
|
+
if (!isRuntimeStringArray(v)) return v;
|
|
48513
|
+
return RTV.cell(
|
|
48514
|
+
v.data.map((s) => RTV.string(s)),
|
|
48515
|
+
[v.shape[0], v.shape[1]]
|
|
48516
|
+
);
|
|
48517
|
+
}
|
|
47895
48518
|
function strcmpApply(args, cmp) {
|
|
47896
|
-
const a = args[0];
|
|
47897
|
-
const b = args[1];
|
|
48519
|
+
const a = stringArrayToCell(args[0]);
|
|
48520
|
+
const b = stringArrayToCell(args[1]);
|
|
47898
48521
|
const aIsCell = isRuntimeCell(a);
|
|
47899
48522
|
const bIsCell = isRuntimeCell(b);
|
|
47900
48523
|
if (!aIsCell && !bIsCell) {
|
|
@@ -48140,24 +48763,43 @@ registerIBuiltin({
|
|
|
48140
48763
|
};
|
|
48141
48764
|
}
|
|
48142
48765
|
});
|
|
48766
|
+
function patternList(pat) {
|
|
48767
|
+
if (isRuntimeCell(pat)) return pat.data.map((e) => toString(e));
|
|
48768
|
+
if (isRuntimeStringArray(pat)) return pat.data.slice();
|
|
48769
|
+
return [toString(pat)];
|
|
48770
|
+
}
|
|
48771
|
+
function textSubjectApply(subject, perElem) {
|
|
48772
|
+
if (isRuntimeStringArray(subject)) {
|
|
48773
|
+
return new RuntimeTensor(
|
|
48774
|
+
allocFloat64Array(subject.data.map((s) => perElem(s) ? 1 : 0)),
|
|
48775
|
+
[subject.shape[0], subject.shape[1]],
|
|
48776
|
+
void 0,
|
|
48777
|
+
true
|
|
48778
|
+
);
|
|
48779
|
+
}
|
|
48780
|
+
if (isRuntimeCell(subject)) {
|
|
48781
|
+
return new RuntimeTensor(
|
|
48782
|
+
allocFloat64Array(subject.data.map((e) => perElem(toString(e)) ? 1 : 0)),
|
|
48783
|
+
subject.shape.slice(),
|
|
48784
|
+
void 0,
|
|
48785
|
+
true
|
|
48786
|
+
);
|
|
48787
|
+
}
|
|
48788
|
+
return RTV.logical(perElem(toString(subject)));
|
|
48789
|
+
}
|
|
48790
|
+
function subjectTypeOk(t) {
|
|
48791
|
+
return isTextType(t) || t.kind === "cell" || t.kind === "unknown";
|
|
48792
|
+
}
|
|
48143
48793
|
registerIBuiltin({
|
|
48144
48794
|
name: "contains",
|
|
48145
48795
|
resolve: (argTypes) => {
|
|
48146
48796
|
if (argTypes.length < 2) return null;
|
|
48147
|
-
if (!
|
|
48148
|
-
if (argTypes[1].kind === "unknown") return null;
|
|
48797
|
+
if (!subjectTypeOk(argTypes[0])) return null;
|
|
48149
48798
|
return {
|
|
48150
48799
|
outputTypes: [{ kind: "boolean" }],
|
|
48151
48800
|
apply: (args) => {
|
|
48152
|
-
const
|
|
48153
|
-
|
|
48154
|
-
if (isRuntimeCell(pat)) {
|
|
48155
|
-
for (let i = 0; i < pat.data.length; i++) {
|
|
48156
|
-
if (s.includes(toString(pat.data[i]))) return RTV.logical(true);
|
|
48157
|
-
}
|
|
48158
|
-
return RTV.logical(false);
|
|
48159
|
-
}
|
|
48160
|
-
return RTV.logical(s.includes(toString(pat)));
|
|
48801
|
+
const pats = patternList(args[1]);
|
|
48802
|
+
return textSubjectApply(args[0], (s) => pats.some((p2) => s.includes(p2)));
|
|
48161
48803
|
}
|
|
48162
48804
|
};
|
|
48163
48805
|
}
|
|
@@ -48167,7 +48809,7 @@ function resolveStartsEndsWith(name, testFn) {
|
|
|
48167
48809
|
name,
|
|
48168
48810
|
resolve: (argTypes) => {
|
|
48169
48811
|
if (argTypes.length < 2) return null;
|
|
48170
|
-
if (!
|
|
48812
|
+
if (!subjectTypeOk(argTypes[0])) return null;
|
|
48171
48813
|
return {
|
|
48172
48814
|
outputTypes: [{ kind: "boolean" }],
|
|
48173
48815
|
apply: (args) => {
|
|
@@ -48177,20 +48819,12 @@ function resolveStartsEndsWith(name, testFn) {
|
|
|
48177
48819
|
ic = !!toNumber(args[i + 1]);
|
|
48178
48820
|
}
|
|
48179
48821
|
}
|
|
48180
|
-
let
|
|
48181
|
-
if (ic)
|
|
48182
|
-
|
|
48183
|
-
|
|
48184
|
-
|
|
48185
|
-
|
|
48186
|
-
if (ic) p3 = p3.toLowerCase();
|
|
48187
|
-
if (testFn(s, p3)) return RTV.logical(true);
|
|
48188
|
-
}
|
|
48189
|
-
return RTV.logical(false);
|
|
48190
|
-
}
|
|
48191
|
-
let p2 = toString(pat);
|
|
48192
|
-
if (ic) p2 = p2.toLowerCase();
|
|
48193
|
-
return RTV.logical(testFn(s, p2));
|
|
48822
|
+
let pats = patternList(args[1]);
|
|
48823
|
+
if (ic) pats = pats.map((p2) => p2.toLowerCase());
|
|
48824
|
+
return textSubjectApply(args[0], (s0) => {
|
|
48825
|
+
const s = ic ? s0.toLowerCase() : s0;
|
|
48826
|
+
return pats.some((p2) => testFn(s, p2));
|
|
48827
|
+
});
|
|
48194
48828
|
}
|
|
48195
48829
|
};
|
|
48196
48830
|
}
|
|
@@ -48202,13 +48836,19 @@ registerIBuiltin({
|
|
|
48202
48836
|
name: "strlength",
|
|
48203
48837
|
resolve: (argTypes) => {
|
|
48204
48838
|
if (argTypes.length !== 1) return null;
|
|
48205
|
-
if (!isTextType(argTypes[0])) return null;
|
|
48839
|
+
if (!isTextType(argTypes[0]) && argTypes[0].kind !== "unknown") return null;
|
|
48206
48840
|
return {
|
|
48207
48841
|
outputTypes: [{ kind: "number", sign: "nonneg" }],
|
|
48208
48842
|
apply: (args) => {
|
|
48209
48843
|
const v = args[0];
|
|
48210
48844
|
if (isRuntimeString(v)) return RTV.num(v.length);
|
|
48211
48845
|
if (isRuntimeChar(v)) return RTV.num(v.value.length);
|
|
48846
|
+
if (isRuntimeStringArray(v)) {
|
|
48847
|
+
return RTV.tensor(allocFloat64Array(v.data.map((s) => s.length)), [
|
|
48848
|
+
v.shape[0],
|
|
48849
|
+
v.shape[1]
|
|
48850
|
+
]);
|
|
48851
|
+
}
|
|
48212
48852
|
throw new RuntimeError("strlength: argument must be a string or char");
|
|
48213
48853
|
}
|
|
48214
48854
|
};
|
|
@@ -48264,6 +48904,20 @@ registerIBuiltin({
|
|
|
48264
48904
|
}
|
|
48265
48905
|
};
|
|
48266
48906
|
}
|
|
48907
|
+
if (t.kind === "unknown") {
|
|
48908
|
+
return {
|
|
48909
|
+
outputTypes: [{ kind: "tensor", isComplex: false }],
|
|
48910
|
+
apply: (args) => {
|
|
48911
|
+
const v = args[0];
|
|
48912
|
+
if (!isRuntimeStringArray(v))
|
|
48913
|
+
throw new RuntimeError("str2double: expected text input");
|
|
48914
|
+
return RTV.tensor(
|
|
48915
|
+
allocFloat64Array(v.data.map((s) => str2doubleScalar(s))),
|
|
48916
|
+
[v.shape[0], v.shape[1]]
|
|
48917
|
+
);
|
|
48918
|
+
}
|
|
48919
|
+
};
|
|
48920
|
+
}
|
|
48267
48921
|
return null;
|
|
48268
48922
|
}
|
|
48269
48923
|
});
|
|
@@ -48449,29 +49103,7 @@ registerIBuiltin({
|
|
|
48449
49103
|
};
|
|
48450
49104
|
}
|
|
48451
49105
|
});
|
|
48452
|
-
|
|
48453
|
-
if (n === Infinity) return "Inf";
|
|
48454
|
-
if (n === -Infinity) return "-Inf";
|
|
48455
|
-
if (isNaN(n)) return "NaN";
|
|
48456
|
-
if (n === 0) return "0";
|
|
48457
|
-
if (Number.isInteger(n)) return String(n);
|
|
48458
|
-
const prec = 5;
|
|
48459
|
-
const exp2 = Math.floor(Math.log10(Math.abs(n)));
|
|
48460
|
-
let s;
|
|
48461
|
-
if (exp2 < -4 || exp2 >= prec) {
|
|
48462
|
-
s = n.toExponential(prec - 1);
|
|
48463
|
-
const ePos = s.indexOf("e");
|
|
48464
|
-
let mantissa = s.slice(0, ePos);
|
|
48465
|
-
const expPart0 = s.slice(ePos);
|
|
48466
|
-
if (mantissa.includes(".")) mantissa = mantissa.replace(/\.?0+$/, "");
|
|
48467
|
-
const expPart = expPart0.replace(/([eE][+-])(\d)$/, "$10$2");
|
|
48468
|
-
s = mantissa + expPart;
|
|
48469
|
-
} else {
|
|
48470
|
-
s = n.toPrecision(prec);
|
|
48471
|
-
if (s.includes(".")) s = s.replace(/\.?0+$/, "");
|
|
48472
|
-
}
|
|
48473
|
-
return s;
|
|
48474
|
-
}
|
|
49106
|
+
var numStr2 = matlabNumToString;
|
|
48475
49107
|
registerIBuiltin({
|
|
48476
49108
|
name: "num2str",
|
|
48477
49109
|
resolve: (argTypes) => {
|
|
@@ -48682,7 +49314,7 @@ registerIBuiltin({
|
|
|
48682
49314
|
resolve: (argTypes) => {
|
|
48683
49315
|
if (argTypes.length !== 1) return null;
|
|
48684
49316
|
const a = argTypes[0];
|
|
48685
|
-
if (a.kind !== "char" && a.kind !== "string" && a.kind !== "number" && a.kind !== "tensor" && a.kind !== "cell")
|
|
49317
|
+
if (a.kind !== "char" && a.kind !== "string" && a.kind !== "number" && a.kind !== "tensor" && a.kind !== "cell" && a.kind !== "unknown")
|
|
48686
49318
|
return null;
|
|
48687
49319
|
return {
|
|
48688
49320
|
outputTypes: [{ kind: "char" }],
|
|
@@ -48704,6 +49336,9 @@ registerIBuiltin({
|
|
|
48704
49336
|
for (const el of v.data) rows.push(...valueToCharRows(el));
|
|
48705
49337
|
return charRowsToMatrix(rows);
|
|
48706
49338
|
}
|
|
49339
|
+
if (isRuntimeStringArray(v)) {
|
|
49340
|
+
return charRowsToMatrix(v.data.slice());
|
|
49341
|
+
}
|
|
48707
49342
|
throw new RuntimeError("char: unsupported arguments");
|
|
48708
49343
|
}
|
|
48709
49344
|
};
|
|
@@ -48714,14 +49349,260 @@ registerIBuiltin({
|
|
|
48714
49349
|
resolve: (argTypes) => {
|
|
48715
49350
|
if (argTypes.length !== 1) return null;
|
|
48716
49351
|
const a = argTypes[0];
|
|
48717
|
-
|
|
49352
|
+
const scalarText = a.kind === "char" || a.kind === "string" || a.kind === "number" || a.kind === "boolean";
|
|
48718
49353
|
return {
|
|
48719
|
-
outputTypes: [{ kind: "string" }],
|
|
49354
|
+
outputTypes: [scalarText ? { kind: "string" } : { kind: "unknown" }],
|
|
49355
|
+
apply: (args) => {
|
|
49356
|
+
const v = args[0];
|
|
49357
|
+
if (isRuntimeString(v) || isRuntimeStringArray(v)) return v;
|
|
49358
|
+
if (isRuntimeChar(v)) {
|
|
49359
|
+
const rows = v.shape ? v.shape[0] : 1;
|
|
49360
|
+
if (rows <= 1) return RTV.string(v.value);
|
|
49361
|
+
const width = v.shape[1];
|
|
49362
|
+
const out = [];
|
|
49363
|
+
for (let r = 0; r < rows; r++) {
|
|
49364
|
+
out.push(v.value.slice(r * width, (r + 1) * width));
|
|
49365
|
+
}
|
|
49366
|
+
return RTV.stringArray(out, [rows, 1]);
|
|
49367
|
+
}
|
|
49368
|
+
if (isRuntimeNumber(v)) return RTV.string(numStr2(v));
|
|
49369
|
+
if (isRuntimeLogical(v)) return RTV.string(v ? "true" : "false");
|
|
49370
|
+
if (isRuntimeTensor(v)) {
|
|
49371
|
+
const rows = v.shape.length >= 2 ? v.shape[0] : 1;
|
|
49372
|
+
const cols = v.data.length === 0 ? v.shape[1] ?? 0 : v.data.length / (rows || 1);
|
|
49373
|
+
const out = [];
|
|
49374
|
+
for (let i = 0; i < v.data.length; i++) {
|
|
49375
|
+
out.push(
|
|
49376
|
+
v._isLogical ? v.data[i] ? "true" : "false" : numStr2(v.data[i])
|
|
49377
|
+
);
|
|
49378
|
+
}
|
|
49379
|
+
return stringArrayValue(out, [rows, cols]);
|
|
49380
|
+
}
|
|
49381
|
+
if (isRuntimeCell(v)) {
|
|
49382
|
+
const rows = v.shape.length >= 2 ? v.shape[0] : 1;
|
|
49383
|
+
const cols = v.data.length / (rows || 1);
|
|
49384
|
+
const out = v.data.map((el) => {
|
|
49385
|
+
const rv = ensureRuntimeValue(el);
|
|
49386
|
+
if (isRuntimeChar(rv)) return rv.value;
|
|
49387
|
+
if (isRuntimeString(rv)) return rv;
|
|
49388
|
+
if (isRuntimeNumber(rv)) return numStr2(rv);
|
|
49389
|
+
if (isRuntimeLogical(rv)) return rv ? "true" : "false";
|
|
49390
|
+
throw new RuntimeError(
|
|
49391
|
+
"string: cell elements must be text or numbers"
|
|
49392
|
+
);
|
|
49393
|
+
});
|
|
49394
|
+
return stringArrayValue(out, [rows, cols]);
|
|
49395
|
+
}
|
|
49396
|
+
return RTV.string(displayValue(v));
|
|
49397
|
+
}
|
|
49398
|
+
};
|
|
49399
|
+
}
|
|
49400
|
+
});
|
|
49401
|
+
registerIBuiltin({
|
|
49402
|
+
name: "strings",
|
|
49403
|
+
help: {
|
|
49404
|
+
signatures: ["strings", "strings(n)", "strings(m,n)", "strings([m n])"],
|
|
49405
|
+
description: 'Create a string array with every element set to "" (empty string).'
|
|
49406
|
+
},
|
|
49407
|
+
resolve: (argTypes) => {
|
|
49408
|
+
if (argTypes.some((t) => t.kind !== "number" && t.kind !== "tensor"))
|
|
49409
|
+
return null;
|
|
49410
|
+
return {
|
|
49411
|
+
outputTypes: [{ kind: "unknown" }],
|
|
49412
|
+
apply: (args) => {
|
|
49413
|
+
const dims = [];
|
|
49414
|
+
for (const a of args) {
|
|
49415
|
+
const rv = ensureRuntimeValue(a);
|
|
49416
|
+
if (isRuntimeTensor(rv)) {
|
|
49417
|
+
for (const d of rv.data) dims.push(Math.max(0, Math.round(d)));
|
|
49418
|
+
} else {
|
|
49419
|
+
dims.push(Math.max(0, Math.round(toNumber(rv))));
|
|
49420
|
+
}
|
|
49421
|
+
}
|
|
49422
|
+
if (dims.length === 0) dims.push(1, 1);
|
|
49423
|
+
if (dims.length === 1) dims.push(dims[0]);
|
|
49424
|
+
const m = dims[0];
|
|
49425
|
+
const n = dims.slice(1).reduce((a, b) => a * b, 1);
|
|
49426
|
+
return stringArrayValue(new Array(m * n).fill(""), [m, n]);
|
|
49427
|
+
}
|
|
49428
|
+
};
|
|
49429
|
+
}
|
|
49430
|
+
});
|
|
49431
|
+
registerIBuiltin({
|
|
49432
|
+
name: "newline",
|
|
49433
|
+
help: {
|
|
49434
|
+
signatures: ["newline"],
|
|
49435
|
+
description: "Newline character, char(10)."
|
|
49436
|
+
},
|
|
49437
|
+
resolve: (argTypes) => {
|
|
49438
|
+
if (argTypes.length !== 0) return null;
|
|
49439
|
+
return {
|
|
49440
|
+
outputTypes: [{ kind: "char" }],
|
|
49441
|
+
apply: () => RTV.char("\n")
|
|
49442
|
+
};
|
|
49443
|
+
}
|
|
49444
|
+
});
|
|
49445
|
+
registerIBuiltin({
|
|
49446
|
+
name: "split",
|
|
49447
|
+
help: {
|
|
49448
|
+
signatures: ["split(str)", "split(str, delimiter)"],
|
|
49449
|
+
description: "Split text at whitespace (or the given delimiter(s)) into a string array. A scalar input yields a column of parts."
|
|
49450
|
+
},
|
|
49451
|
+
resolve: (argTypes) => {
|
|
49452
|
+
if (argTypes.length < 1 || argTypes.length > 2) return null;
|
|
49453
|
+
const a = argTypes[0];
|
|
49454
|
+
if (!isTextType(a) && a.kind !== "cell" && a.kind !== "unknown")
|
|
49455
|
+
return null;
|
|
49456
|
+
return {
|
|
49457
|
+
outputTypes: [{ kind: "unknown" }],
|
|
48720
49458
|
apply: (args) => {
|
|
49459
|
+
const delims = args.length >= 2 ? patternList(args[1]) : null;
|
|
49460
|
+
const splitOne = (s) => {
|
|
49461
|
+
if (delims === null) {
|
|
49462
|
+
const trimmed = s.trim();
|
|
49463
|
+
return trimmed.length === 0 ? [""] : trimmed.split(/\s+/);
|
|
49464
|
+
}
|
|
49465
|
+
const escaped = delims.map((d) => d.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|");
|
|
49466
|
+
return s.split(new RegExp(escaped));
|
|
49467
|
+
};
|
|
49468
|
+
const v = args[0];
|
|
49469
|
+
const subjects = isRuntimeStringArray(v) ? v.data.slice() : isRuntimeCell(v) ? v.data.map((e) => toString(e)) : [toString(v)];
|
|
49470
|
+
const partsPer = subjects.map(splitOne);
|
|
49471
|
+
const nParts = partsPer[0].length;
|
|
49472
|
+
if (partsPer.some((p2) => p2.length !== nParts)) {
|
|
49473
|
+
throw new RuntimeError(
|
|
49474
|
+
"split: all elements must split into the same number of parts"
|
|
49475
|
+
);
|
|
49476
|
+
}
|
|
49477
|
+
if (subjects.length === 1) {
|
|
49478
|
+
return stringArrayValue(partsPer[0], [nParts, 1]);
|
|
49479
|
+
}
|
|
49480
|
+
const m = subjects.length;
|
|
49481
|
+
const out = new Array(m * nParts);
|
|
49482
|
+
for (let i = 0; i < m; i++) {
|
|
49483
|
+
for (let j = 0; j < nParts; j++) {
|
|
49484
|
+
out[j * m + i] = partsPer[i][j];
|
|
49485
|
+
}
|
|
49486
|
+
}
|
|
49487
|
+
return stringArrayValue(out, [m, nParts]);
|
|
49488
|
+
}
|
|
49489
|
+
};
|
|
49490
|
+
}
|
|
49491
|
+
});
|
|
49492
|
+
registerIBuiltin({
|
|
49493
|
+
name: "join",
|
|
49494
|
+
help: {
|
|
49495
|
+
signatures: ["join(str)", "join(str, delimiter)"],
|
|
49496
|
+
description: "Combine the elements of a string array into single strings, separated by a space (or the given delimiter)."
|
|
49497
|
+
},
|
|
49498
|
+
resolve: (argTypes) => {
|
|
49499
|
+
if (argTypes.length < 1 || argTypes.length > 2) return null;
|
|
49500
|
+
const a = argTypes[0];
|
|
49501
|
+
if (!isTextType(a) && a.kind !== "cell" && a.kind !== "unknown")
|
|
49502
|
+
return null;
|
|
49503
|
+
return {
|
|
49504
|
+
outputTypes: [{ kind: "unknown" }],
|
|
49505
|
+
apply: (args) => {
|
|
49506
|
+
const delim = args.length >= 2 ? toString(args[1]) : " ";
|
|
48721
49507
|
const v = args[0];
|
|
48722
49508
|
if (isRuntimeString(v)) return v;
|
|
48723
49509
|
if (isRuntimeChar(v)) return RTV.string(v.value);
|
|
48724
|
-
|
|
49510
|
+
const elems = isRuntimeStringArray(v) ? v.data : isRuntimeCell(v) ? v.data.map((e) => toString(e)) : [toString(v)];
|
|
49511
|
+
const shape = isRuntimeStringArray(v) ? v.shape : [1, elems.length];
|
|
49512
|
+
const [m, n] = shape;
|
|
49513
|
+
if (m === 1 || n === 1) {
|
|
49514
|
+
return RTV.string(elems.join(delim));
|
|
49515
|
+
}
|
|
49516
|
+
const out = [];
|
|
49517
|
+
for (let r = 0; r < m; r++) {
|
|
49518
|
+
const parts = [];
|
|
49519
|
+
for (let c = 0; c < n; c++) parts.push(elems[c * m + r]);
|
|
49520
|
+
out.push(parts.join(delim));
|
|
49521
|
+
}
|
|
49522
|
+
return stringArrayValue(out, [m, 1]);
|
|
49523
|
+
}
|
|
49524
|
+
};
|
|
49525
|
+
}
|
|
49526
|
+
});
|
|
49527
|
+
registerIBuiltin({
|
|
49528
|
+
name: "cellstr",
|
|
49529
|
+
help: {
|
|
49530
|
+
signatures: ["cellstr(A)"],
|
|
49531
|
+
description: "Convert a string array, char array, or cell array of text to a cell array of character vectors."
|
|
49532
|
+
},
|
|
49533
|
+
resolve: (argTypes) => {
|
|
49534
|
+
if (argTypes.length !== 1) return null;
|
|
49535
|
+
const a = argTypes[0];
|
|
49536
|
+
if (!isTextType(a) && a.kind !== "cell" && a.kind !== "unknown")
|
|
49537
|
+
return null;
|
|
49538
|
+
return {
|
|
49539
|
+
outputTypes: [{ kind: "cell" }],
|
|
49540
|
+
apply: (args) => {
|
|
49541
|
+
const v = args[0];
|
|
49542
|
+
if (isRuntimeCell(v)) {
|
|
49543
|
+
return RTV.cell(
|
|
49544
|
+
v.data.map((e) => RTV.char(toString(e))),
|
|
49545
|
+
[...v.shape]
|
|
49546
|
+
);
|
|
49547
|
+
}
|
|
49548
|
+
if (isRuntimeStringArray(v)) {
|
|
49549
|
+
return RTV.cell(
|
|
49550
|
+
v.data.map((s) => RTV.char(s)),
|
|
49551
|
+
[v.shape[0], v.shape[1]]
|
|
49552
|
+
);
|
|
49553
|
+
}
|
|
49554
|
+
if (isRuntimeString(v)) return RTV.cell([RTV.char(v)], [1, 1]);
|
|
49555
|
+
if (isRuntimeChar(v)) {
|
|
49556
|
+
const rows = v.shape ? v.shape[0] : 1;
|
|
49557
|
+
if (rows <= 1) {
|
|
49558
|
+
return RTV.cell([RTV.char(v.value.replace(/\s+$/, ""))], [1, 1]);
|
|
49559
|
+
}
|
|
49560
|
+
const width = v.shape[1];
|
|
49561
|
+
const out = [];
|
|
49562
|
+
for (let r = 0; r < rows; r++) {
|
|
49563
|
+
out.push(
|
|
49564
|
+
RTV.char(
|
|
49565
|
+
v.value.slice(r * width, (r + 1) * width).replace(/\s+$/, "")
|
|
49566
|
+
)
|
|
49567
|
+
);
|
|
49568
|
+
}
|
|
49569
|
+
return RTV.cell(out, [rows, 1]);
|
|
49570
|
+
}
|
|
49571
|
+
throw new RuntimeError("cellstr: unsupported argument");
|
|
49572
|
+
}
|
|
49573
|
+
};
|
|
49574
|
+
}
|
|
49575
|
+
});
|
|
49576
|
+
registerIBuiltin({
|
|
49577
|
+
name: "ismissing",
|
|
49578
|
+
help: {
|
|
49579
|
+
signatures: ["ismissing(A)"],
|
|
49580
|
+
description: "Logical array marking missing elements. numbl has no <missing> value, so string inputs return all-false."
|
|
49581
|
+
},
|
|
49582
|
+
resolve: (argTypes) => {
|
|
49583
|
+
if (argTypes.length !== 1) return null;
|
|
49584
|
+
return {
|
|
49585
|
+
outputTypes: [{ kind: "boolean" }],
|
|
49586
|
+
apply: (args) => {
|
|
49587
|
+
const v = args[0];
|
|
49588
|
+
if (isRuntimeStringArray(v)) {
|
|
49589
|
+
const t = RTV.tensor(allocFloat64Array(v.data.length), [
|
|
49590
|
+
v.shape[0],
|
|
49591
|
+
v.shape[1]
|
|
49592
|
+
]);
|
|
49593
|
+
t._isLogical = true;
|
|
49594
|
+
return t;
|
|
49595
|
+
}
|
|
49596
|
+
if (isRuntimeTensor(v)) {
|
|
49597
|
+
const t = RTV.tensor(
|
|
49598
|
+
allocFloat64Array(v.data.map((x) => isNaN(x) ? 1 : 0)),
|
|
49599
|
+
[...v.shape]
|
|
49600
|
+
);
|
|
49601
|
+
t._isLogical = true;
|
|
49602
|
+
return t;
|
|
49603
|
+
}
|
|
49604
|
+
if (isRuntimeNumber(v)) return RTV.logical(isNaN(v));
|
|
49605
|
+
return RTV.logical(false);
|
|
48725
49606
|
}
|
|
48726
49607
|
};
|
|
48727
49608
|
}
|
|
@@ -48758,7 +49639,10 @@ registerIBuiltin({
|
|
|
48758
49639
|
outputTypes: [outType],
|
|
48759
49640
|
apply: (args) => {
|
|
48760
49641
|
const fmt = toString(args[0]);
|
|
48761
|
-
const
|
|
49642
|
+
const rest = args.slice(1).flatMap(
|
|
49643
|
+
(a) => isRuntimeStringArray(a) ? a.data.map((s) => RTV.string(s)) : [a]
|
|
49644
|
+
);
|
|
49645
|
+
const result = sprintfFormat(fmt, rest);
|
|
48762
49646
|
return isChar5 ? RTV.char(result) : RTV.string(result);
|
|
48763
49647
|
}
|
|
48764
49648
|
};
|
|
@@ -48779,80 +49663,11 @@ registerIBuiltin({
|
|
|
48779
49663
|
const str = toString(args[0]);
|
|
48780
49664
|
const fmt = toString(args[1]);
|
|
48781
49665
|
const maxCount = args.length >= 3 ? toNumber(args[2]) : Infinity;
|
|
48782
|
-
const
|
|
48783
|
-
|
|
48784
|
-
|
|
48785
|
-
|
|
48786
|
-
|
|
48787
|
-
if (fmt[fmtPos] === "%") {
|
|
48788
|
-
fmtPos++;
|
|
48789
|
-
if (fmtPos >= fmt.length) break;
|
|
48790
|
-
const spec = fmt[fmtPos];
|
|
48791
|
-
fmtPos++;
|
|
48792
|
-
if (spec !== "c" && spec !== "s") {
|
|
48793
|
-
while (strPos < str.length && /\s/.test(str[strPos])) strPos++;
|
|
48794
|
-
}
|
|
48795
|
-
if (spec === "d" || spec === "i") {
|
|
48796
|
-
const m = str.slice(strPos).match(/^[+-]?\d+/);
|
|
48797
|
-
if (!m) {
|
|
48798
|
-
matchFailure = true;
|
|
48799
|
-
break;
|
|
48800
|
-
}
|
|
48801
|
-
results.push(parseInt(m[0], 10));
|
|
48802
|
-
strPos += m[0].length;
|
|
48803
|
-
} else if (spec === "f" || spec === "e" || spec === "g") {
|
|
48804
|
-
const m = str.slice(strPos).match(/^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?/);
|
|
48805
|
-
if (!m) {
|
|
48806
|
-
matchFailure = true;
|
|
48807
|
-
break;
|
|
48808
|
-
}
|
|
48809
|
-
results.push(parseFloat(m[0]));
|
|
48810
|
-
strPos += m[0].length;
|
|
48811
|
-
} else if (spec === "x") {
|
|
48812
|
-
const m = str.slice(strPos).match(/^[+-]?[0-9a-fA-F]+/);
|
|
48813
|
-
if (!m) {
|
|
48814
|
-
matchFailure = true;
|
|
48815
|
-
break;
|
|
48816
|
-
}
|
|
48817
|
-
results.push(parseInt(m[0], 16));
|
|
48818
|
-
strPos += m[0].length;
|
|
48819
|
-
} else if (spec === "o") {
|
|
48820
|
-
const m = str.slice(strPos).match(/^[+-]?[0-7]+/);
|
|
48821
|
-
if (!m) {
|
|
48822
|
-
matchFailure = true;
|
|
48823
|
-
break;
|
|
48824
|
-
}
|
|
48825
|
-
results.push(parseInt(m[0], 8));
|
|
48826
|
-
strPos += m[0].length;
|
|
48827
|
-
} else if (spec === "c") {
|
|
48828
|
-
results.push(str.charCodeAt(strPos));
|
|
48829
|
-
strPos++;
|
|
48830
|
-
} else if (spec === "s") {
|
|
48831
|
-
const m = str.slice(strPos).match(/^\S+/);
|
|
48832
|
-
if (!m) {
|
|
48833
|
-
matchFailure = true;
|
|
48834
|
-
break;
|
|
48835
|
-
}
|
|
48836
|
-
for (let ci = 0; ci < m[0].length && results.length < maxCount; ci++) {
|
|
48837
|
-
results.push(m[0].charCodeAt(ci));
|
|
48838
|
-
}
|
|
48839
|
-
strPos += m[0].length;
|
|
48840
|
-
}
|
|
48841
|
-
} else if (/\s/.test(fmt[fmtPos])) {
|
|
48842
|
-
fmtPos++;
|
|
48843
|
-
while (strPos < str.length && /\s/.test(str[strPos])) strPos++;
|
|
48844
|
-
} else {
|
|
48845
|
-
if (str[strPos] !== fmt[fmtPos]) {
|
|
48846
|
-
matchFailure = true;
|
|
48847
|
-
break;
|
|
48848
|
-
}
|
|
48849
|
-
strPos++;
|
|
48850
|
-
fmtPos++;
|
|
48851
|
-
}
|
|
48852
|
-
if (fmtPos >= fmt.length && results.length < maxCount && strPos < str.length) {
|
|
48853
|
-
fmtPos = 0;
|
|
48854
|
-
}
|
|
48855
|
-
}
|
|
49666
|
+
const {
|
|
49667
|
+
results,
|
|
49668
|
+
consumed: strPos,
|
|
49669
|
+
matchFailure
|
|
49670
|
+
} = scanFormat(str, fmt, maxCount);
|
|
48856
49671
|
const vals = results.length === 1 ? RTV.num(results[0]) : RTV.tensor(allocFloat64Array(results), [results.length, 1]);
|
|
48857
49672
|
if (nout >= 2) {
|
|
48858
49673
|
const out = [vals, RTV.num(results.length)];
|
|
@@ -49131,6 +49946,10 @@ defineBuiltin({
|
|
|
49131
49946
|
};
|
|
49132
49947
|
return nargout > 1 ? [out, idx] : [out];
|
|
49133
49948
|
}
|
|
49949
|
+
if (a.kind === "string" || a.kind === "unknown") {
|
|
49950
|
+
const out = { kind: "unknown" };
|
|
49951
|
+
return nargout > 1 ? [out, { kind: "unknown" }] : [out];
|
|
49952
|
+
}
|
|
49134
49953
|
return null;
|
|
49135
49954
|
},
|
|
49136
49955
|
apply: (args, nargout) => {
|
|
@@ -49149,6 +49968,33 @@ defineBuiltin({
|
|
|
49149
49968
|
if (args.length >= 3 && (isRuntimeString(args[2]) || isRuntimeChar(args[2]))) {
|
|
49150
49969
|
descend = rstr(args[2]).toLowerCase() === "descend";
|
|
49151
49970
|
}
|
|
49971
|
+
if (isRuntimeStringArray(v)) {
|
|
49972
|
+
const order = v.data.map((_, i) => i);
|
|
49973
|
+
order.sort((i, j) => {
|
|
49974
|
+
const x = v.data[i];
|
|
49975
|
+
const y = v.data[j];
|
|
49976
|
+
const c = x < y ? -1 : x > y ? 1 : 0;
|
|
49977
|
+
return descend ? -c : c;
|
|
49978
|
+
});
|
|
49979
|
+
const sorted = order.map((i) => v.data[i]);
|
|
49980
|
+
const isRow = v.shape[0] === 1;
|
|
49981
|
+
const shape = isRow ? [1, sorted.length] : [sorted.length, 1];
|
|
49982
|
+
const result = stringArrayValue(sorted, shape);
|
|
49983
|
+
if (nargout > 1) {
|
|
49984
|
+
return [
|
|
49985
|
+
result,
|
|
49986
|
+
RTV.tensor(allocFloat64Array(order.map((i) => i + 1)), [
|
|
49987
|
+
shape[0],
|
|
49988
|
+
shape[1]
|
|
49989
|
+
])
|
|
49990
|
+
];
|
|
49991
|
+
}
|
|
49992
|
+
return result;
|
|
49993
|
+
}
|
|
49994
|
+
if (isRuntimeString(v)) {
|
|
49995
|
+
if (nargout > 1) return [v, RTV.num(1)];
|
|
49996
|
+
return v;
|
|
49997
|
+
}
|
|
49152
49998
|
if (isRuntimeNumber(v)) {
|
|
49153
49999
|
if (nargout > 1) return [v, RTV.num(1)];
|
|
49154
50000
|
return v;
|
|
@@ -49464,8 +50310,12 @@ var ismemberCases = [
|
|
|
49464
50310
|
apply: (args, nargout) => {
|
|
49465
50311
|
if (args.length < 2)
|
|
49466
50312
|
throw new RuntimeError("ismember requires 2 arguments");
|
|
49467
|
-
const
|
|
49468
|
-
|
|
50313
|
+
const asCellstr = (x) => isRuntimeStringArray(x) ? RTV.cell(
|
|
50314
|
+
x.data.map((s) => RTV.string(s)),
|
|
50315
|
+
[x.shape[0], x.shape[1]]
|
|
50316
|
+
) : x;
|
|
50317
|
+
const v = asCellstr(args[0]);
|
|
50318
|
+
const b = asCellstr(args[1]);
|
|
49469
50319
|
const isStringLike = (x) => isRuntimeString(x) || isRuntimeChar(x);
|
|
49470
50320
|
const isCellOfStrings = (x) => isRuntimeCell(x) && x.data.every(
|
|
49471
50321
|
(e) => isRuntimeString(e) || isRuntimeChar(e)
|
|
@@ -49768,6 +50618,30 @@ defineBuiltin({
|
|
|
49768
50618
|
)) {
|
|
49769
50619
|
return uniqueCellOfStrings(v, nargout, stable);
|
|
49770
50620
|
}
|
|
50621
|
+
if (isRuntimeStringArray(v)) {
|
|
50622
|
+
const elems = v.data;
|
|
50623
|
+
const seen = /* @__PURE__ */ new Map();
|
|
50624
|
+
for (let i = 0; i < elems.length; i++) {
|
|
50625
|
+
if (!seen.has(elems[i])) seen.set(elems[i], i);
|
|
50626
|
+
}
|
|
50627
|
+
let vals = [...seen.keys()];
|
|
50628
|
+
if (!stable) vals = vals.sort();
|
|
50629
|
+
const isRow = v.shape[0] === 1;
|
|
50630
|
+
const shape = isRow ? [1, vals.length] : [vals.length, 1];
|
|
50631
|
+
const result = stringArrayValue(vals, shape);
|
|
50632
|
+
if (nargout <= 1) return result;
|
|
50633
|
+
const ia = RTV.tensor(
|
|
50634
|
+
allocFloat64Array(vals.map((s) => seen.get(s) + 1)),
|
|
50635
|
+
[vals.length, 1]
|
|
50636
|
+
);
|
|
50637
|
+
if (nargout === 2) return [result, ia];
|
|
50638
|
+
const pos = new Map(vals.map((s, i) => [s, i + 1]));
|
|
50639
|
+
const ic = RTV.tensor(
|
|
50640
|
+
allocFloat64Array(elems.map((s) => pos.get(s))),
|
|
50641
|
+
[elems.length, 1]
|
|
50642
|
+
);
|
|
50643
|
+
return [result, ia, ic];
|
|
50644
|
+
}
|
|
49771
50645
|
if (!isRuntimeTensor(v))
|
|
49772
50646
|
throw new RuntimeError("unique: argument must be numeric");
|
|
49773
50647
|
if (byRows) return uniqueByRows(v, nargout, stable);
|
|
@@ -52971,6 +53845,27 @@ function flipAlongDim(v, dimIdx) {
|
|
|
52971
53845
|
}
|
|
52972
53846
|
return RTV.tensor(result, [...shape], resultImag);
|
|
52973
53847
|
}
|
|
53848
|
+
function flipCellAlongDim(v, dimIdx) {
|
|
53849
|
+
const shape = v.shape.length >= 2 ? v.shape : [1, v.shape[0] ?? v.data.length];
|
|
53850
|
+
const totalElems = v.data.length;
|
|
53851
|
+
const dimSize = dimIdx < shape.length ? shape[dimIdx] : 1;
|
|
53852
|
+
let strideDim = 1;
|
|
53853
|
+
for (let d = 0; d < dimIdx; d++) strideDim *= shape[d];
|
|
53854
|
+
const slabSize = strideDim * dimSize;
|
|
53855
|
+
const numOuter = totalElems / slabSize;
|
|
53856
|
+
const result = new Array(totalElems);
|
|
53857
|
+
for (let outer = 0; outer < numOuter; outer++) {
|
|
53858
|
+
const base = outer * slabSize;
|
|
53859
|
+
for (let k = 0; k < dimSize; k++) {
|
|
53860
|
+
const srcOff = base + k * strideDim;
|
|
53861
|
+
const dstOff = base + (dimSize - 1 - k) * strideDim;
|
|
53862
|
+
for (let i = 0; i < strideDim; i++) {
|
|
53863
|
+
result[dstOff + i] = v.data[srcOff + i];
|
|
53864
|
+
}
|
|
53865
|
+
}
|
|
53866
|
+
}
|
|
53867
|
+
return RTV.cell(result, [...shape]);
|
|
53868
|
+
}
|
|
52974
53869
|
function flipSparse(v, dimIdx) {
|
|
52975
53870
|
const isComplex = v.pi !== void 0;
|
|
52976
53871
|
const nnz = v.jc[v.n];
|
|
@@ -53147,6 +54042,41 @@ defineBuiltin({
|
|
|
53147
54042
|
chars[i2 * nc + j2] = linear[j2 * nr + i2];
|
|
53148
54043
|
return new RuntimeChar(chars.join(""), [nr, nc]);
|
|
53149
54044
|
}
|
|
54045
|
+
if (isRuntimeStringArray(v)) {
|
|
54046
|
+
const s = parseReshapeDims(args, v.data.length);
|
|
54047
|
+
while (s.length > 2 && s[s.length - 1] === 1) s.pop();
|
|
54048
|
+
if (s.length > 2)
|
|
54049
|
+
throw new RuntimeError("reshape: string arrays must be 2-D");
|
|
54050
|
+
const nr = s[0];
|
|
54051
|
+
const nc = s.length >= 2 ? s[1] : 1;
|
|
54052
|
+
return stringArrayValue(v.data.slice(), [nr, nc]);
|
|
54053
|
+
}
|
|
54054
|
+
if (isRuntimeString(v)) {
|
|
54055
|
+
parseReshapeDims(args, 1);
|
|
54056
|
+
return v;
|
|
54057
|
+
}
|
|
54058
|
+
if (isRuntimeClassInstanceArray(v)) {
|
|
54059
|
+
const total = v.elements.length;
|
|
54060
|
+
const s = parseReshapeDims(args, total);
|
|
54061
|
+
while (s.length > 2 && s[s.length - 1] === 1) s.pop();
|
|
54062
|
+
if (s.length > 2)
|
|
54063
|
+
throw new RuntimeError("reshape: object arrays must be 2-D");
|
|
54064
|
+
const nr = s[0];
|
|
54065
|
+
const nc = s.length >= 2 ? s[1] : 1;
|
|
54066
|
+
if (nr * nc !== total)
|
|
54067
|
+
throw new RuntimeError(
|
|
54068
|
+
"reshape: number of elements must not change"
|
|
54069
|
+
);
|
|
54070
|
+
return RTV.classInstanceArray(v.className, v.elements, [nr, nc]);
|
|
54071
|
+
}
|
|
54072
|
+
if (isRuntimeClassInstance(v)) {
|
|
54073
|
+
const s = parseReshapeDims(args, 1);
|
|
54074
|
+
if (s.reduce((a, b) => a * b, 1) !== 1)
|
|
54075
|
+
throw new RuntimeError(
|
|
54076
|
+
"reshape: number of elements must not change"
|
|
54077
|
+
);
|
|
54078
|
+
return v;
|
|
54079
|
+
}
|
|
53150
54080
|
if (!isRuntimeTensor(v) && !isRuntimeNumber(v) && !isRuntimeComplexNumber(v))
|
|
53151
54081
|
throw new RuntimeError("reshape: first argument must be numeric");
|
|
53152
54082
|
const data = isRuntimeTensor(v) ? v.data : isRuntimeComplexNumber(v) ? allocFloat64Array([v.re]) : allocFloat64Array([v]);
|
|
@@ -53458,6 +54388,7 @@ defineBuiltin({
|
|
|
53458
54388
|
if (isRuntimeChar(v))
|
|
53459
54389
|
return RTV.char(v.value.split("").reverse().join(""));
|
|
53460
54390
|
if (isRuntimeSparseMatrix(v)) return flipSparse(v, 1);
|
|
54391
|
+
if (isRuntimeCell(v)) return flipCellAlongDim(v, 1);
|
|
53461
54392
|
if (!isRuntimeTensor(v))
|
|
53462
54393
|
throw new RuntimeError("fliplr: argument must be numeric or char");
|
|
53463
54394
|
return flipAlongDim(v, 1);
|
|
@@ -53478,6 +54409,7 @@ defineBuiltin({
|
|
|
53478
54409
|
if (isRuntimeNumber(v)) return v;
|
|
53479
54410
|
if (isRuntimeChar(v)) return v;
|
|
53480
54411
|
if (isRuntimeSparseMatrix(v)) return flipSparse(v, 0);
|
|
54412
|
+
if (isRuntimeCell(v)) return flipCellAlongDim(v, 0);
|
|
53481
54413
|
if (!isRuntimeTensor(v))
|
|
53482
54414
|
throw new RuntimeError("flipud: argument must be numeric or char");
|
|
53483
54415
|
return flipAlongDim(v, 0);
|
|
@@ -53496,8 +54428,8 @@ defineBuiltin({
|
|
|
53496
54428
|
apply: (args) => {
|
|
53497
54429
|
const v = args[0];
|
|
53498
54430
|
if (isRuntimeNumber(v)) return v;
|
|
53499
|
-
if (!isRuntimeTensor(v))
|
|
53500
|
-
throw new RuntimeError("flip: argument must be numeric");
|
|
54431
|
+
if (!isRuntimeTensor(v) && !isRuntimeCell(v))
|
|
54432
|
+
throw new RuntimeError("flip: argument must be numeric or cell");
|
|
53501
54433
|
let dimIdx = 0;
|
|
53502
54434
|
if (args.length >= 2) {
|
|
53503
54435
|
dimIdx = Math.round(toNumber(args[1])) - 1;
|
|
@@ -53506,7 +54438,7 @@ defineBuiltin({
|
|
|
53506
54438
|
dimIdx = shape.findIndex((d) => d > 1);
|
|
53507
54439
|
if (dimIdx === -1) dimIdx = 0;
|
|
53508
54440
|
}
|
|
53509
|
-
return flipAlongDim(v, dimIdx);
|
|
54441
|
+
return isRuntimeCell(v) ? flipCellAlongDim(v, dimIdx) : flipAlongDim(v, dimIdx);
|
|
53510
54442
|
}
|
|
53511
54443
|
}
|
|
53512
54444
|
]
|
|
@@ -55176,6 +56108,8 @@ function getValClassName(v) {
|
|
|
55176
56108
|
return "double";
|
|
55177
56109
|
case "dictionary":
|
|
55178
56110
|
return "dictionary";
|
|
56111
|
+
case "string_array":
|
|
56112
|
+
return "string";
|
|
55179
56113
|
default:
|
|
55180
56114
|
return "unknown";
|
|
55181
56115
|
}
|
|
@@ -55205,6 +56139,8 @@ function getShapeOf(v) {
|
|
|
55205
56139
|
return [1, 1];
|
|
55206
56140
|
case "struct_array":
|
|
55207
56141
|
return [1, obj.elements.length];
|
|
56142
|
+
case "string_array":
|
|
56143
|
+
return [...obj.shape];
|
|
55208
56144
|
default:
|
|
55209
56145
|
return [1, 1];
|
|
55210
56146
|
}
|
|
@@ -56872,6 +57808,12 @@ defineBuiltin({
|
|
|
56872
57808
|
});
|
|
56873
57809
|
|
|
56874
57810
|
// src/numbl-core/interpreter/builtins/type-constructors.ts
|
|
57811
|
+
function parseDoubleText(s) {
|
|
57812
|
+
const t = s.trim();
|
|
57813
|
+
if (t === "") return NaN;
|
|
57814
|
+
if (/^[+-]?inf(inity)?$/i.test(t)) return t[0] === "-" ? -Infinity : Infinity;
|
|
57815
|
+
return Number(t);
|
|
57816
|
+
}
|
|
56875
57817
|
defineBuiltin({
|
|
56876
57818
|
name: "double",
|
|
56877
57819
|
cases: [
|
|
@@ -56879,7 +57821,7 @@ defineBuiltin({
|
|
|
56879
57821
|
match: (argTypes) => {
|
|
56880
57822
|
if (argTypes.length !== 1) return null;
|
|
56881
57823
|
const a = argTypes[0];
|
|
56882
|
-
if (a.kind === "number" || a.kind === "boolean" || a.kind === "char" || a.kind === "complex_or_number" || a.kind === "class_instance")
|
|
57824
|
+
if (a.kind === "number" || a.kind === "boolean" || a.kind === "char" || a.kind === "string" || a.kind === "unknown" || a.kind === "complex_or_number" || a.kind === "class_instance")
|
|
56883
57825
|
return [{ kind: "number" }];
|
|
56884
57826
|
if (a.kind === "tensor")
|
|
56885
57827
|
return [
|
|
@@ -56901,6 +57843,13 @@ defineBuiltin({
|
|
|
56901
57843
|
const codes = Array.from(v.value).map((c) => c.charCodeAt(0));
|
|
56902
57844
|
return RTV.row(codes);
|
|
56903
57845
|
}
|
|
57846
|
+
if (isRuntimeString(v)) return RTV.num(parseDoubleText(v));
|
|
57847
|
+
if (isRuntimeStringArray(v)) {
|
|
57848
|
+
return RTV.tensor(allocFloat64Array(v.data.map(parseDoubleText)), [
|
|
57849
|
+
v.shape[0],
|
|
57850
|
+
v.shape[1]
|
|
57851
|
+
]);
|
|
57852
|
+
}
|
|
56904
57853
|
if (isRuntimeLogical(v)) return RTV.num(v ? 1 : 0);
|
|
56905
57854
|
if (isRuntimeNumber(v)) return v;
|
|
56906
57855
|
if (isRuntimeComplexNumber(v)) return v.re;
|
|
@@ -57604,14 +58553,19 @@ registerIBuiltin({
|
|
|
57604
58553
|
let delims;
|
|
57605
58554
|
if (isRuntimeCell(args[1])) {
|
|
57606
58555
|
delims = args[1].data.map((d) => toString(d));
|
|
58556
|
+
} else if (isRuntimeStringArray(args[1])) {
|
|
58557
|
+
delims = args[1].data.slice();
|
|
57607
58558
|
} else {
|
|
57608
58559
|
delims = [toString(args[1])];
|
|
57609
58560
|
}
|
|
57610
58561
|
const escaped = delims.map((d) => d.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|");
|
|
57611
58562
|
parts = s.split(new RegExp("(?:" + escaped + ")+"));
|
|
57612
58563
|
}
|
|
58564
|
+
if (isRuntimeString(args[0]) || isRuntimeStringArray(args[0])) {
|
|
58565
|
+
return stringArrayValue(parts, [1, parts.length]);
|
|
58566
|
+
}
|
|
57613
58567
|
return RTV.cell(
|
|
57614
|
-
parts.map((p2) => RTV.
|
|
58568
|
+
parts.map((p2) => RTV.char(p2)),
|
|
57615
58569
|
[1, parts.length]
|
|
57616
58570
|
);
|
|
57617
58571
|
}
|
|
@@ -57625,11 +58579,18 @@ registerIBuiltin({
|
|
|
57625
58579
|
return {
|
|
57626
58580
|
outputTypes: [{ kind: "string" }],
|
|
57627
58581
|
apply: (args) => {
|
|
57628
|
-
|
|
58582
|
+
let elements;
|
|
58583
|
+
if (isRuntimeCell(args[0])) {
|
|
58584
|
+
elements = args[0].data.map((v) => toString(v));
|
|
58585
|
+
} else if (isRuntimeStringArray(args[0])) {
|
|
58586
|
+
elements = args[0].data.slice();
|
|
58587
|
+
} else if (isRuntimeString(args[0])) {
|
|
58588
|
+
elements = [args[0]];
|
|
58589
|
+
} else {
|
|
57629
58590
|
throw new RuntimeError(
|
|
57630
|
-
"strjoin: first argument must be a cell array"
|
|
58591
|
+
"strjoin: first argument must be a cell array or string array"
|
|
57631
58592
|
);
|
|
57632
|
-
|
|
58593
|
+
}
|
|
57633
58594
|
const delim = args.length >= 2 ? toString(args[1]) : " ";
|
|
57634
58595
|
return RTV.string(elements.join(delim));
|
|
57635
58596
|
}
|
|
@@ -57706,6 +58667,19 @@ function regexpImpl(caseSensitive, name, args, nargout) {
|
|
|
57706
58667
|
[1, tokensList.length]
|
|
57707
58668
|
);
|
|
57708
58669
|
}
|
|
58670
|
+
if (mode === "split") {
|
|
58671
|
+
const splits = [];
|
|
58672
|
+
let prev = 0;
|
|
58673
|
+
for (let i = 0; i < starts.length; i++) {
|
|
58674
|
+
splits.push(str.slice(prev, starts[i] - 1));
|
|
58675
|
+
prev = ends[i];
|
|
58676
|
+
}
|
|
58677
|
+
splits.push(str.slice(prev));
|
|
58678
|
+
return RTV.cell(
|
|
58679
|
+
splits.map((s) => RTV.char(s)),
|
|
58680
|
+
[1, splits.length]
|
|
58681
|
+
);
|
|
58682
|
+
}
|
|
57709
58683
|
if (mode === "names") {
|
|
57710
58684
|
if (starts.length === 0) return RTV.tensor(allocFloat64Array(0), [0, 0]);
|
|
57711
58685
|
const namedRe = new RegExp(pat, flags);
|
|
@@ -62917,7 +63891,7 @@ function getSourceLine(getSource, file, line) {
|
|
|
62917
63891
|
}
|
|
62918
63892
|
|
|
62919
63893
|
// src/numbl-core/version.ts
|
|
62920
|
-
var NUMBL_VERSION = "0.4.
|
|
63894
|
+
var NUMBL_VERSION = "0.4.10";
|
|
62921
63895
|
|
|
62922
63896
|
// src/cli-repl.ts
|
|
62923
63897
|
import { createInterface } from "readline";
|
|
@@ -65186,13 +66160,16 @@ function evalExprNargout(expr, nargout) {
|
|
|
65186
66160
|
return ctx.dimIndex < rv.shape.length ? rv.shape[ctx.dimIndex] : 1;
|
|
65187
66161
|
}
|
|
65188
66162
|
if (isRuntimeChar(rv)) return rv.value.length;
|
|
65189
|
-
if (isRuntimeString(rv)) return
|
|
66163
|
+
if (isRuntimeString(rv)) return 1;
|
|
65190
66164
|
if (isRuntimeClassInstance(rv)) {
|
|
65191
|
-
|
|
65192
|
-
|
|
65193
|
-
|
|
65194
|
-
|
|
65195
|
-
|
|
66165
|
+
if (this.rt.resolveClassMethod?.(rv.className, "end")) {
|
|
66166
|
+
return this.rt.dispatch("end", 1, [
|
|
66167
|
+
rv,
|
|
66168
|
+
ctx.dimIndex + 1,
|
|
66169
|
+
ctx.numIndices
|
|
66170
|
+
]);
|
|
66171
|
+
}
|
|
66172
|
+
return 1;
|
|
65196
66173
|
}
|
|
65197
66174
|
if (isRuntimeStructArray(rv)) {
|
|
65198
66175
|
return rv.elements.length;
|
|
@@ -65201,6 +66178,10 @@ function evalExprNargout(expr, nargout) {
|
|
|
65201
66178
|
if (ctx.numIndices === 1) return rv.elements.length;
|
|
65202
66179
|
return ctx.dimIndex < rv.shape.length ? rv.shape[ctx.dimIndex] : 1;
|
|
65203
66180
|
}
|
|
66181
|
+
if (isRuntimeStringArray(rv)) {
|
|
66182
|
+
if (ctx.numIndices === 1) return rv.data.length;
|
|
66183
|
+
return ctx.dimIndex < 2 ? rv.shape[ctx.dimIndex] : 1;
|
|
66184
|
+
}
|
|
65204
66185
|
if (isRuntimeSparseMatrix(rv)) {
|
|
65205
66186
|
if (ctx.numIndices === 1) return rv.m * rv.n;
|
|
65206
66187
|
return ctx.dimIndex === 0 ? rv.m : ctx.dimIndex === 1 ? rv.n : 1;
|
|
@@ -65525,7 +66506,8 @@ function evalMember(expr, nargout) {
|
|
|
65525
66506
|
if (lastDot > 0) {
|
|
65526
66507
|
const prefix = dottedName.slice(0, lastDot);
|
|
65527
66508
|
const methodName = dottedName.slice(lastDot + 1);
|
|
65528
|
-
if (this.functionIndex.classStaticMethods.get(prefix)?.has(methodName))
|
|
66509
|
+
if (this.functionIndex.classStaticMethods.get(prefix)?.has(methodName) || // Implicit static `ClassName.empty` (handled by interpretClassMethod)
|
|
66510
|
+
methodName === "empty" && this.functionIndex.workspaceClasses.has(prefix)) {
|
|
65529
66511
|
const target = {
|
|
65530
66512
|
kind: "classMethod",
|
|
65531
66513
|
className: prefix,
|
|
@@ -66777,6 +67759,22 @@ function interpretClassMethod(target, args, nargout) {
|
|
|
66777
67759
|
() => this.callUserFunction(extFn, actualArgs2, nargout)
|
|
66778
67760
|
);
|
|
66779
67761
|
}
|
|
67762
|
+
if (methodName === "empty") {
|
|
67763
|
+
const dims = [];
|
|
67764
|
+
for (const a of args) {
|
|
67765
|
+
const rv = ensureRuntimeValue(a);
|
|
67766
|
+
if (isRuntimeTensor(rv)) for (const d of rv.data) dims.push(d);
|
|
67767
|
+
else dims.push(toNumber(rv));
|
|
67768
|
+
}
|
|
67769
|
+
if (dims.length === 1) dims.push(dims[0]);
|
|
67770
|
+
if (dims.length === 0) dims.push(0, 0);
|
|
67771
|
+
if (!dims.some((d) => d === 0)) {
|
|
67772
|
+
throw new RuntimeError(
|
|
67773
|
+
`${className}.empty: at least one dimension must be zero`
|
|
67774
|
+
);
|
|
67775
|
+
}
|
|
67776
|
+
return RTV.classInstanceArray(className, [], [dims[0], dims[1]]);
|
|
67777
|
+
}
|
|
66780
67778
|
throw new RuntimeError(
|
|
66781
67779
|
`No method '${methodName}' for class '${className}'`
|
|
66782
67780
|
);
|
|
@@ -66902,8 +67900,9 @@ function callUserFunction(fn, args, nargout, narginOverride) {
|
|
|
66902
67900
|
const fnEnv = new Environment();
|
|
66903
67901
|
fnEnv.rt = this.rt;
|
|
66904
67902
|
fnEnv.persistentFuncId = `${this.currentFile}:${fn.name}`;
|
|
66905
|
-
const
|
|
66906
|
-
const
|
|
67903
|
+
const vararginIdx = fn.params.indexOf("varargin");
|
|
67904
|
+
const hasVarargin = vararginIdx !== -1;
|
|
67905
|
+
const regularParams = hasVarargin ? fn.params.slice(0, vararginIdx) : fn.params;
|
|
66907
67906
|
let numPositional = regularParams.length;
|
|
66908
67907
|
const inputBlocks = (fn.argumentsBlocks ?? []).filter(
|
|
66909
67908
|
(b) => b.kind !== "Output"
|
|
@@ -66922,7 +67921,14 @@ function callUserFunction(fn, args, nargout, narginOverride) {
|
|
|
66922
67921
|
}
|
|
66923
67922
|
}
|
|
66924
67923
|
if (hasVarargin) {
|
|
66925
|
-
|
|
67924
|
+
let extras = sharedArgs.slice(regularParams.length);
|
|
67925
|
+
if (vararginIdx !== fn.params.length - 1) {
|
|
67926
|
+
extras = extras.slice(
|
|
67927
|
+
0,
|
|
67928
|
+
nameValueTailStart(extras, nameValueFieldNames(fn))
|
|
67929
|
+
);
|
|
67930
|
+
}
|
|
67931
|
+
const extraArgs = extras.map((a) => ensureRuntimeValue(a));
|
|
66926
67932
|
fnEnv.set("varargin", RTV.cell(extraArgs, [1, extraArgs.length]));
|
|
66927
67933
|
}
|
|
66928
67934
|
fnEnv.set("$nargin", narginOverride ?? args.length);
|
|
@@ -67307,6 +68313,28 @@ function evalInLocalScope(codeArg, fileName) {
|
|
|
67307
68313
|
}
|
|
67308
68314
|
throw new RuntimeError("eval not available in this context");
|
|
67309
68315
|
}
|
|
68316
|
+
function nameValueFieldNames(fn) {
|
|
68317
|
+
const names = /* @__PURE__ */ new Set();
|
|
68318
|
+
for (const block of fn.argumentsBlocks ?? []) {
|
|
68319
|
+
if (block.kind === "Output" || block.kind === "OutputRepeating") continue;
|
|
68320
|
+
for (const e of block.entries) {
|
|
68321
|
+
const dot2 = e.name.indexOf(".");
|
|
68322
|
+
if (dot2 >= 0) names.add(e.name.slice(dot2 + 1));
|
|
68323
|
+
}
|
|
68324
|
+
}
|
|
68325
|
+
return names;
|
|
68326
|
+
}
|
|
68327
|
+
function nameValueTailStart(extras, fieldNames) {
|
|
68328
|
+
if (fieldNames.size === 0) return extras.length;
|
|
68329
|
+
for (let i = 0; i < extras.length; i++) {
|
|
68330
|
+
if (extras[i] === void 0) continue;
|
|
68331
|
+
const rv = ensureRuntimeValue(extras[i]);
|
|
68332
|
+
if ((isRuntimeChar(rv) || isRuntimeString(rv)) && fieldNames.has(toString(rv))) {
|
|
68333
|
+
return i;
|
|
68334
|
+
}
|
|
68335
|
+
}
|
|
68336
|
+
return extras.length;
|
|
68337
|
+
}
|
|
67310
68338
|
function processArgumentsBlocks(fn, args) {
|
|
67311
68339
|
const argBlocks = fn.argumentsBlocks;
|
|
67312
68340
|
if (!argBlocks || argBlocks.length === 0) return;
|
|
@@ -67341,9 +68369,18 @@ function processArgumentsBlocks(fn, args) {
|
|
|
67341
68369
|
);
|
|
67342
68370
|
}
|
|
67343
68371
|
}
|
|
68372
|
+
const vararginIdx = fn.params.indexOf("varargin");
|
|
67344
68373
|
for (const [paramName, fields] of nvGroups) {
|
|
67345
68374
|
const pIdx = fn.params.indexOf(paramName);
|
|
67346
|
-
|
|
68375
|
+
let nvArgs;
|
|
68376
|
+
if (pIdx >= 0 && vararginIdx >= 0 && vararginIdx < pIdx) {
|
|
68377
|
+
const extras = args.slice(vararginIdx);
|
|
68378
|
+
nvArgs = extras.slice(
|
|
68379
|
+
nameValueTailStart(extras, nameValueFieldNames(fn))
|
|
68380
|
+
);
|
|
68381
|
+
} else {
|
|
68382
|
+
nvArgs = args.slice(pIdx >= 0 ? pIdx : args.length);
|
|
68383
|
+
}
|
|
67347
68384
|
const defaults = {};
|
|
67348
68385
|
for (const { field, defaultExpr } of fields) {
|
|
67349
68386
|
if (defaultExpr) defaults[field] = this.evalExpr(defaultExpr);
|
|
@@ -68629,6 +69666,11 @@ var shimFiles = [
|
|
|
68629
69666
|
else
|
|
68630
69667
|
result = val;
|
|
68631
69668
|
end
|
|
69669
|
+
% The backing dictionary stores char values as strings;
|
|
69670
|
+
% MATLAB's containers.Map hands back char.
|
|
69671
|
+
if strcmp(obj.ValueType, 'char') && isstring(result)
|
|
69672
|
+
result = char(result);
|
|
69673
|
+
end
|
|
68632
69674
|
elseif strcmp(S(1).type, '.')
|
|
68633
69675
|
result = builtin('subsref', obj, S);
|
|
68634
69676
|
elseif strcmp(S(1).type, '{}')
|
|
@@ -68662,11 +69704,14 @@ var shimFiles = [
|
|
|
68662
69704
|
end
|
|
68663
69705
|
k = keys(obj.data_);
|
|
68664
69706
|
if strcmp(obj.KeyType, 'char')
|
|
68665
|
-
% Return
|
|
68666
|
-
|
|
68667
|
-
|
|
68668
|
-
|
|
68669
|
-
|
|
69707
|
+
% Return a cellstr: the backing dictionary stores keys as
|
|
69708
|
+
% strings, but MATLAB's containers.Map returns char vectors.
|
|
69709
|
+
if ~iscell(k)
|
|
69710
|
+
k = {k};
|
|
69711
|
+
end
|
|
69712
|
+
result = cell(size(k));
|
|
69713
|
+
for i = 1:numel(k)
|
|
69714
|
+
result{i} = char(k{i});
|
|
68670
69715
|
end
|
|
68671
69716
|
else
|
|
68672
69717
|
% Numeric keys: parse back from string
|
|
@@ -68699,6 +69744,14 @@ var shimFiles = [
|
|
|
68699
69744
|
result{i} = v(i);
|
|
68700
69745
|
end
|
|
68701
69746
|
end
|
|
69747
|
+
if strcmp(obj.ValueType, 'char')
|
|
69748
|
+
% Stored as strings in the dictionary; MATLAB returns char.
|
|
69749
|
+
for i = 1:numel(result)
|
|
69750
|
+
if isstring(result{i})
|
|
69751
|
+
result{i} = char(result{i});
|
|
69752
|
+
end
|
|
69753
|
+
end
|
|
69754
|
+
end
|
|
68702
69755
|
end
|
|
68703
69756
|
end
|
|
68704
69757
|
|
|
@@ -95159,6 +96212,31 @@ function executeCode(source, options = {}, workspaceFiles, mainFileName = "scrip
|
|
|
95159
96212
|
implicitCwdPath = null;
|
|
95160
96213
|
}
|
|
95161
96214
|
}
|
|
96215
|
+
if (searchPaths && options.fileIO?.scanDirectory) {
|
|
96216
|
+
const haveM = new Set(mWorkspaceFiles.map((f) => f.name));
|
|
96217
|
+
for (const dir of searchPaths) {
|
|
96218
|
+
try {
|
|
96219
|
+
const absDir = options.fileIO.resolvePath?.(dir) ?? dir;
|
|
96220
|
+
for (const f of options.fileIO.scanDirectory(absDir)) {
|
|
96221
|
+
if (f.name.endsWith(".m")) {
|
|
96222
|
+
if (!haveM.has(f.name)) {
|
|
96223
|
+
mWorkspaceFiles.push(f);
|
|
96224
|
+
haveM.add(f.name);
|
|
96225
|
+
}
|
|
96226
|
+
} else if (isNumblJsFile(f.name)) {
|
|
96227
|
+
if (!jsWorkspaceFiles.some((e) => e.name === f.name)) {
|
|
96228
|
+
jsWorkspaceFiles.push(f);
|
|
96229
|
+
}
|
|
96230
|
+
} else if (f.name.endsWith(".wasm")) {
|
|
96231
|
+
if (!wasmWorkspaceFiles.some((e) => e.name === f.name)) {
|
|
96232
|
+
wasmWorkspaceFiles.push(f);
|
|
96233
|
+
}
|
|
96234
|
+
}
|
|
96235
|
+
}
|
|
96236
|
+
} catch {
|
|
96237
|
+
}
|
|
96238
|
+
}
|
|
96239
|
+
}
|
|
95162
96240
|
const jsUserFunctions = loadJsUserFunctions(
|
|
95163
96241
|
jsWorkspaceFiles,
|
|
95164
96242
|
wasmWorkspaceFiles,
|
|
@@ -95791,7 +96869,7 @@ var NodeFileIOAdapter = class {
|
|
|
95791
96869
|
if (entry.eof) return 1;
|
|
95792
96870
|
const buf = Buffer.alloc(1);
|
|
95793
96871
|
try {
|
|
95794
|
-
const bytesRead = readSync(entry.fd, buf, 0, 1,
|
|
96872
|
+
const bytesRead = readSync(entry.fd, buf, 0, 1, entry.pos);
|
|
95795
96873
|
if (bytesRead === 0) {
|
|
95796
96874
|
entry.eof = true;
|
|
95797
96875
|
return 1;
|
|
@@ -96294,6 +97372,12 @@ var NodeFileIOAdapter = class {
|
|
|
96294
97372
|
}
|
|
96295
97373
|
/**
|
|
96296
97374
|
* Read one line from the file's buffer, refilling from the fd as needed.
|
|
97375
|
+
*
|
|
97376
|
+
* All reads are positional so `entry.pos` stays the single source of truth
|
|
97377
|
+
* for the logical file position: the buffer always holds the bytes starting
|
|
97378
|
+
* at `entry.pos`, and consuming a line advances `entry.pos` by its byte
|
|
97379
|
+
* length. This keeps text I/O (fgetl/fgets) coherent with binary I/O and
|
|
97380
|
+
* fscanf (freadBytes/fseek/ftell).
|
|
96297
97381
|
* @param keepNewline - if true, keep the trailing newline (fgets); if false, strip it (fgetl)
|
|
96298
97382
|
*/
|
|
96299
97383
|
readLine(entry, keepNewline) {
|
|
@@ -96303,7 +97387,13 @@ var NodeFileIOAdapter = class {
|
|
|
96303
97387
|
const buf = Buffer.alloc(READ_CHUNK_SIZE);
|
|
96304
97388
|
let bytesRead;
|
|
96305
97389
|
try {
|
|
96306
|
-
bytesRead = readSync(
|
|
97390
|
+
bytesRead = readSync(
|
|
97391
|
+
entry.fd,
|
|
97392
|
+
buf,
|
|
97393
|
+
0,
|
|
97394
|
+
READ_CHUNK_SIZE,
|
|
97395
|
+
entry.pos + Buffer.byteLength(entry.buffer, "utf-8")
|
|
97396
|
+
);
|
|
96307
97397
|
entry.lastError = "";
|
|
96308
97398
|
} catch (e) {
|
|
96309
97399
|
entry.lastError = e instanceof Error ? e.message : String(e);
|
|
@@ -96321,12 +97411,15 @@ var NodeFileIOAdapter = class {
|
|
|
96321
97411
|
}
|
|
96322
97412
|
const nlIdx = entry.buffer.indexOf("\n");
|
|
96323
97413
|
if (nlIdx !== -1) {
|
|
96324
|
-
const
|
|
97414
|
+
const consumed = entry.buffer.slice(0, nlIdx + 1);
|
|
97415
|
+
const line2 = keepNewline ? consumed : entry.buffer.slice(0, nlIdx);
|
|
96325
97416
|
entry.buffer = entry.buffer.slice(nlIdx + 1);
|
|
97417
|
+
entry.pos += Buffer.byteLength(consumed, "utf-8");
|
|
96326
97418
|
return line2;
|
|
96327
97419
|
}
|
|
96328
97420
|
const line = entry.buffer;
|
|
96329
97421
|
entry.buffer = "";
|
|
97422
|
+
entry.pos += Buffer.byteLength(line, "utf-8");
|
|
96330
97423
|
return line;
|
|
96331
97424
|
}
|
|
96332
97425
|
};
|