diff --git a/dist/datamodel/parser/BinarySlddParser.d.ts.map b/dist/datamodel/parser/BinarySlddParser.d.ts.map index 6723d8b5..feac42ca 100644 --- a/dist/datamodel/parser/BinarySlddParser.d.ts.map +++ b/dist/datamodel/parser/BinarySlddParser.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BinarySlddParser.d.ts","sourceRoot":"","sources":["../../../src/datamodel/parser/BinarySlddParser.ts"],"names":[],"mappings":"AAgDA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA6BhE,OAAO,EAA2E,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAgCtH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBrD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,WAAW,EACxB,QAAQ,CAAC,EAAE,YAAY,EAAE,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoDzB;AAQD,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,QAAQ,CAAC,EAAE,YAAY,EAAE,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiKzB;AAuLD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAuIvG;AAwsBD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,CAExE"} \ No newline at end of file +{"version":3,"file":"BinarySlddParser.d.ts","sourceRoot":"","sources":["../../../src/datamodel/parser/BinarySlddParser.ts"],"names":[],"mappings":"AAgDA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA8BhE,OAAO,EAA2E,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAgCtH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBrD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,WAAW,EACxB,QAAQ,CAAC,EAAE,YAAY,EAAE,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoDzB;AAQD,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACvC,QAAQ,CAAC,EAAE,YAAY,EAAE,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiKzB;AAuLD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAuIvG;AAsmBD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,CAExE"} \ No newline at end of file diff --git a/dist/datamodel/parser/BinarySlddParser.js b/dist/datamodel/parser/BinarySlddParser.js index e059c513..207c61f1 100644 --- a/dist/datamodel/parser/BinarySlddParser.js +++ b/dist/datamodel/parser/BinarySlddParser.js @@ -51,6 +51,7 @@ import { DATA_PART_KEY, DATA_PART_XML, TEXT_CONTENT, TEXT_PARTS } from './SlddPa import { encodedStream, encodedValueOf, isEncodedValue } from './EncodedValue.js'; import { charFromDecimal, charNeedsShape, complexClassTag, formatMatrixSerial, formatMxCharSerial, formatNumLiteral, needsExactInt, parseExactBody, parseMatlabNum, parseNumericBody, transposeFromColumnMajorND, BINARY_EMPTY_KEY, ENUM_KEY, ENUMERATION_KEY, PROPERTY_SOURCE_KEY, SAVEOBJ_KEY, } from './XmlUtils.js'; import { setOwn } from './ownKeys.js'; +import { arrayClassOf, componentsBaseOf } from './objectArrayClass.js'; import { headerDigits } from './Size.js'; import { recordPackageStamps, recordReadFrame, recordReadSource } from './EntrySource.js'; /** @@ -836,7 +837,8 @@ function cellValue(elements, dimParts) { // unclassed element set decodes as the struct array it is. // // `base` is the class the array's place names, where it names one (componentsBaseOf): it is -// the array's class whatever its elements are. +// the array's class whatever its elements are. Both rules are objectArrayClass.ts's, which the +// MCOS reader (McosParser) names a .mat's and a model workspace's object arrays by too. function objectArrayValue(elements, dimParts, base) { const first = elements.length > 0 ? elements[0]['@_Class'] || '' : ''; if (!first) { @@ -899,98 +901,6 @@ function propertySources(el) { } return sources; } -/** - * The class an object array of elements of `classes` is, as MATLAB's text format names it in - * `_array_class`: the class every element shares; for elements of several classes, the common - * base class where it can be derived (heterogeneousBaseOf); and otherwise the first element's, - * which is what this reader named every such array before it kept the elements' own. A config - * set's Components does not come here: its place names its class (componentsBaseOf). - * - * The first element's class is still what an array of no derivable base reads as: of the 71 - * mixed arrays the binary dictionaries of the test fixtures, the parity artifacts and the local - * corpus hold, one, a simmechanics.ConfigurationSet's Components of two simmechanics classes. - */ -function arrayClassOf(classes) { - if (classes.every((c) => c === classes[0])) { - return classes[0]; - } - return heterogeneousBaseOf(classes) ?? classes[0]; -} -/** - * The common base class of an array mixing `classes`, where this reader can derive one, or - * undefined. - * - * A binary dictionary does not state it: its `

` carries - * no Class, and each element names only its own. A text dictionary does, and two rules give the - * base it names from the classes alone: - * - Simulink.ConfigComponent, for an array whose classes each belong to CONFIG_COMPONENTS: every - * Components array of a Simulink.ConfigSet and of a Simulink.RTWCC that MATLAB wrote into a - * text dictionary is `_array_class` Simulink.ConfigComponent (30 of 30, in five - * dictionaries), over classes each listed there. - * - The one known MathWorks class (isMathWorksClass) of an array mixing it with classes that are - * not: a user's class can derive from a MathWorks class and a MathWorks class never from a - * user's, so the MathWorks class is the base the user classes extend. A text dictionary MATLAB - * wrote names a Simulink.Signal subclass beside a Simulink.Signal `{"_array_class": - * "Simulink.Signal", …}`, and this reader read the binary twin of that array, in two - * dictionaries, as the subclass, the first element's class. - * Of two MathWorks classes or more beside other classes, or of none, it names no base. - */ -function heterogeneousBaseOf(classes) { - if (classes.every((c) => c === CONFIG_COMPONENT || CONFIG_COMPONENTS.has(c))) { - return CONFIG_COMPONENT; - } - const known = new Set(classes.filter(isMathWorksClass)); - return known.size === 1 ? [...known][0] : undefined; -} -/** - * Whether `cls` is a known MathWorks class: a class of a package whose classes this package - * already names as MathWorks' (MATHWORKS_PACKAGES). Simulink and mpt are the packages of every - * class the node registry, the schema and the Kind column name (NodeClassMap, schema/index, - * kindMap), and the two the test suite tells MATLAB's own objects from custom ones by; SlCovCC, - * Sldv and hdlcoderui are the packages of the config components CONFIG_COMPONENTS names. A class - * of any other package, MathWorks' or not (CoderTarget, SSC, simmechanics, AUTOSAR among them), - * is not known here, and counts as one that is not MathWorks' (heterogeneousBaseOf). - */ -function isMathWorksClass(cls) { - const dot = cls.indexOf('.'); - return dot > 0 && MATHWORKS_PACKAGES.has(cls.slice(0, dot)); -} -/** The packages of the known MathWorks classes (isMathWorksClass). */ -const MATHWORKS_PACKAGES = new Set(['Simulink', 'mpt', 'SlCovCC', 'Sldv', 'hdlcoderui']); -/** - * The class the place of a property named `name` of an object of `ownerClass` names for an - * object array there, or undefined where it names none: Simulink.ConfigComponent, for the - * Components of a Simulink.ConfigSet or a Simulink.RTWCC, whatever components it holds. - * - * Every such array MATLAB wrote into a text dictionary is `_array_class` - * Simulink.ConfigComponent (30 of 30, in five dictionaries). A binary dictionary names no base - * for it, and can hold components no text dictionary has shown, so that CONFIG_COMPONENTS does - * not list them: a CoderTarget.SettingsController, in seven config sets of a corpus dictionary, - * and an SSC.SimscapeCC, in one of another. Those arrays used to read under their first - * component's class, a Simulink.SolverCC. - */ -function componentsBaseOf(ownerClass, name) { - return name === 'Components' && (ownerClass === 'Simulink.ConfigSet' || ownerClass === 'Simulink.RTWCC') ? CONFIG_COMPONENT : undefined; -} -const CONFIG_COMPONENT = 'Simulink.ConfigComponent'; -/** Each class MATLAB's text format lists as an element of a Simulink.ConfigComponent array (see heterogeneousBaseOf). */ -const CONFIG_COMPONENTS = new Set([ - 'Simulink.SolverCC', - 'Simulink.DataIOCC', - 'Simulink.OptimizationCC', - 'Simulink.DebuggingCC', - 'Simulink.HardwareCC', - 'Simulink.ModelReferenceCC', - 'Simulink.SFSimCC', - 'Simulink.RTWCC', - 'Simulink.CodeAppCC', - 'Simulink.GRTTargetCC', - 'Simulink.ERTTargetCC', - 'Simulink.STFCustomTargetCC', - 'SlCovCC.ConfigComp', - 'Sldv.ConfigComp', - 'hdlcoderui.hdlcc', -]); /** * A classed or shaped empty, as every place a value is read holds one, an entry's Value, an * object's property or a struct's field, and a cell's element: its class under the bare header diff --git a/dist/datamodel/parser/BinarySlddParser.js.map b/dist/datamodel/parser/BinarySlddParser.js.map index e80b30de..91d3a461 100644 --- a/dist/datamodel/parser/BinarySlddParser.js.map +++ b/dist/datamodel/parser/BinarySlddParser.js.map @@ -1 +1 @@ -{"version":3,"file":"BinarySlddParser.js","sourceRoot":"","sources":["../../../src/datamodel/parser/BinarySlddParser.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"BinarySlddParser.js","sourceRoot":"","sources":["../../../src/datamodel/parser/BinarySlddParser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/datamodel/parser/MatParser.d.ts.map b/dist/datamodel/parser/MatParser.d.ts.map index 8304e08a..ba2c60fe 100644 --- a/dist/datamodel/parser/MatParser.d.ts.map +++ b/dist/datamodel/parser/MatParser.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"MatParser.d.ts","sourceRoot":"","sources":["../../../src/datamodel/parser/MatParser.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA+BhF,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IAGb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IAKnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAOnB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IAGf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC;IAC3D,SAAS,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IAIpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAWnB,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAkBtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,WAAW,EAAE,CAAC;IAYzB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC5B;AAwKD,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAK9E;AAwCD,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAS3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAWzD;AAwMD,+FAA+F;AAC/F,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,CAEpF;AAmBD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAK5E;AAQD,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,SAAS,CAE3F;AA4GD,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,WAAW,CA0ZtG;AAED,wBAAgB,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,CA6L5D;AA8ID,uFAAuF;AACvF,MAAM,MAAM,SAAS,GACf;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAC;IAAC,gBAAgB,EAAE,UAAU,EAAE,CAAA;CAAE,GACnE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAYpC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,UAAQ,GAAG,MAAM,GAAG,IAAI,CAiChF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,SAAS,CA+B/F"} \ No newline at end of file +{"version":3,"file":"MatParser.d.ts","sourceRoot":"","sources":["../../../src/datamodel/parser/MatParser.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkChF,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IAGb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IAKnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAOnB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IAGf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC;IAC3D,SAAS,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IAIpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAWnB,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAkBtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,WAAW,EAAE,CAAC;IAYzB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC5B;AA8RD,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAK9E;AAwCD,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAS3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAWzD;AA2MD,+FAA+F;AAC/F,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,CAEpF;AAmBD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAK5E;AAQD,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,SAAS,CAE3F;AA4GD,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,WAAW,CA0ZtG;AAED,wBAAgB,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,CA6L5D;AA8ID,uFAAuF;AACvF,MAAM,MAAM,SAAS,GACf;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAC;IAAC,gBAAgB,EAAE,UAAU,EAAE,CAAA;CAAE,GACnE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAYpC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,UAAQ,GAAG,MAAM,GAAG,IAAI,CAiChF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,SAAS,CA+B/F"} \ No newline at end of file diff --git a/dist/datamodel/parser/MatParser.js b/dist/datamodel/parser/MatParser.js index edc892ee..12ffa55d 100644 --- a/dist/datamodel/parser/MatParser.js +++ b/dist/datamodel/parser/MatParser.js @@ -25,6 +25,9 @@ const MI_MATRIX = 14; const MI_COMPRESSED = 15; const MI_UTF8 = 16; const MI_UTF16 = 17; +// The array class of a single (mxSINGLE_CLASS), whose elements are read as MATLAB spells them +// (singleDigits). +const MX_SINGLE_CLASS = 7; function align8(n) { return n + ((8 - (n % 8)) % 8); } @@ -76,7 +79,12 @@ const ELEMENT_WIDTH = { // four UTF-16 code units share one uint64 and the rounding lands in the LOW bits — that // is, on the FIRST character of every group of four ("café" -> "`afé"). See // test/parity/matlab/STRING_MCOS.md. -function readNumericArray(view, sub, count) { +// +// `single` is whether the array is of class single (C-033): each miSINGLE element is then the +// decimal MATLAB spells that float32 with (singleDigits), and not the double getFloat32 widens +// it to. Any other class reads an miSINGLE element as that double, which for a double stored +// in four bytes is its value. +function readNumericArray(view, sub, count, single = false) { const values = []; const off = sub.dataOffset; // `count` comes from the array's DECLARED dimensions, which a truncated or @@ -103,9 +111,11 @@ function readNumericArray(view, sub, count) { case MI_DOUBLE: values.push(view.getFloat64(off + i * 8, true)); break; - case MI_SINGLE: - values.push(view.getFloat32(off + i * 4, true)); + case MI_SINGLE: { + const x = view.getFloat32(off + i * 4, true); + values.push(single ? singleDigits(x) : x); break; + } case MI_INT8: values.push(view.getInt8(off + i)); break; @@ -134,6 +144,111 @@ function readNumericArray(view, sub, count) { } return values; } +/** + * A single as the decimal MATLAB spells it with, measured (R2027a): C's `%.6g` where that is + * the same float32, and otherwise `%.9g`, which always is — or `%.10g` for realmax('single'), + * whose `%.9g` is past it. Six is FLT_DIG, the digits every float32 holds, and nine + * FLT_DECIMAL_DIG, the digits that name any one; MATLAB writes a double by the same rule at + * fifteen and seventeen (a binary dictionary holds 1/3 as 0.33333333333333331). + * + * getFloat32 hands back the double of the same value, and every number here prints as the + * shortest text of its DOUBLE: single(3.3) is the double 3.299999952316284, and showed so, + * where both dictionaries hold MATLAB's own text for the same value, `3.3` (the corpus + * twins param_vars.mat / param_json.sldd, P30_TypeMaxUnitDesc; DESIGN.md recorded the + * difference as a limitation). It is not "the shortest decimal that is the same float32": + * MATLAB writes single(1/3) as 0.333333343, where 0.33333334 would do, and the smallest + * subnormal as 1.4013e-45, where 1e-45 would. make_typed_fixtures.m's sSingleSweep, 4,082 + * float32 bit patterns from the smallest subnormal to realmax, holds MATLAB's text for each + * in a text dictionary (its binary format writes the same digits, measured), and this rule + * gives every one, where the shortest would differ on 3,520 (typedMcosFixtures.test.ts). It + * also gives every one of the 127,743 non-zero singles a customer text dictionary in the + * corpus holds. + * + * Lossless: the number is the same float32, so MatWriter's setFloat32 writes back the bits + * that were read, and a text dictionary's `0.333333343F` names them too. An infinity, a NaN + * and either zero are themselves. + */ +function singleDigits(x) { + if (!Number.isFinite(x) || x === 0) { + return x; + } + const ax = Math.abs(x); + let six = roundedDigits(ax, 6); + if (Number.isNaN(six)) { + six = Math.abs(Number(x.toPrecision(6))); + } + if (Math.fround(six) === ax) { + return x < 0 ? -six : six; + } + const nine = roundedDigits(ax, 9); + if (!Number.isNaN(nine)) { + return x < 0 ? -nine : nine; + } + const text = toPrecisionHalfEven(x, 9); + return Math.abs(text) > FLT_MAX ? toPrecisionHalfEven(x, 10) : text; +} +// The largest finite single, realmax('single'). +const FLT_MAX = 3.4028234663852886e38; +const POWERS_OF_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12]; +/** + * The positive single `ax` to `p` significant digits, an exact tie to the even digit, by + * arithmetic that is exact: `ax * 10^j` is, for a float32 and 0 <= j <= 12 (24 bits of + * mantissa by at most 28 of 5^12 fit a double's 53), so it is rounded as the exact value is, + * and `n / 10^j` is the double nearest that decimal. NaN where `j` would fall outside that + * range — a single of 1e9 or more, or under 1e-4 for nine digits and 1e-7 for six — which + * toPrecisionHalfEven reads instead. The same numbers (every 31st float32 bit pattern, both + * signs, compared), in a fifth of the time: singleDigits runs once per element, and a million + * singles took 400 ms by toPrecision alone and take 75 ms so, against 8 ms for the bare read. + */ +function roundedDigits(ax, p) { + let j = p - 1 - Math.floor(Math.log10(ax)); + if (j < 0 || j > 12) { + return NaN; + } + let y = ax * POWERS_OF_TEN[j]; + // log10 can land a hair either side of an exponent: then `y` has a digit too many or too + // few, and the scale moves one place. + if (y >= POWERS_OF_TEN[p]) { + if (j === 0) { + return NaN; + } + y = ax * POWERS_OF_TEN[--j]; + } + else if (y < POWERS_OF_TEN[p - 1]) { + if (j === 12) { + return NaN; + } + y = ax * POWERS_OF_TEN[++j]; + } + const whole = Math.floor(y); + const rest = y - whole; + const n = rest > 0.5 || (rest === 0.5 && whole % 2 === 1) ? whole + 1 : whole; + return n / POWERS_OF_TEN[j]; +} +/** + * `x` to `p` significant digits as C's printf rounds it: to the nearer, and an exact tie to + * the EVEN digit. toPrecision takes the one farther from zero at a tie, so single(1000000.125) + * came out 1000000.13 where MATLAB writes 1000000.12 (typed_mcos.sldd's sSingleTies). Only a + * value of exactly `p + 1` significant digits, the last a 5, is a tie; toPrecision's own text + * of it at `p + 1` digits is then that 5, which is what is looked for before the exact digits + * are. + */ +function toPrecisionHalfEven(x, p) { + const away = x.toPrecision(p); + if (!/5(?:e|$)/.test(x.toPrecision(p + 1))) { + return Number(away); + } + // Every significant digit of `x` up to a hundred, which a tie at ten has all of. + const digits = x.toPrecision(100).replace(/e.*$/, '').replace(/[-.]/g, '').replace(/^0+/, ''); + if (digits[p] !== '5' || !/^0*$/.test(digits.slice(p + 1))) { + return Number(away); + } + // An exact tie, which goes to the even neighbour: the one nearer zero, `x` cut to `p` + // digits, when the last of those is even, and `away` when it is odd. The nearer one is + // read off a number just inside the tie: 2^-45 of `x` moves a double, and is far less + // than half a unit in a tenth digit. + return Number(digits[p - 1]) % 2 === 0 ? Number((x * (1 - 2 ** -45)).toPrecision(p)) : Number(away); +} // Why the numeric part whose tag is at `at` holds none of the `count` elements its array // declares, or null when it holds what its bytes do. Either its tag is cut short by the end of // the bytes, which readSubelement reports as a tag of type 0, or its type has no width: in both @@ -325,7 +440,9 @@ export function structElementsHeld(v) { // outside the declared rows is dropped, rows repeated within a column keep the LAST value // (as the dense scatter this replaced had it), rows out of order are sorted, and a stored // zero is not a non-zero. -function readSparse(view, offset, end, dimensions, isComplex, nzmax) { +// `single` is whether the array is of class single, whose non-zeros are read as a full +// single array's are (readNumericArray). +function readSparse(view, offset, end, dimensions, isComplex, nzmax, single) { const rows = Math.max(0, dimensions[0] || 0); const cols = Math.max(0, dimensions[1] || 0); // Each of the four reads is guarded by the END OF THIS ELEMENT, the same way the @@ -362,13 +479,13 @@ function readSparse(view, offset, end, dimensions, isComplex, nzmax) { if (offset < end) { const prSub = readSubelement(view, offset); offset += prSub.totalSize; - pr = readNumericArray(view, prSub, nnz); + pr = readNumericArray(view, prSub, nnz, single); } let pi = []; if (isComplex && offset < end) { const piSub = readSubelement(view, offset); offset += piSub.totalSize; - pi = readNumericArray(view, piSub, nnz); + pi = readNumericArray(view, piSub, nnz, single); } // At most nnz entries, which ir's own bytes bound. const rowOut = new Int32Array(nnz); @@ -795,7 +912,7 @@ export function parseMatrix(view, baseOffset, length, depth = 0) { // read: a host that renders values without knowing about `sparse` still shows // something true. A 1x1 is not unwrapped to a scalar: it has no list to unwrap. const nzmax = flagsSub.bytes >= 8 ? view.getUint32(flagsSub.dataOffset + 4, true) : 0; - result.sparse = offset < end ? readSparse(view, offset, end, dimensions, isComplex, nzmax) : emptySparse(isComplex, 0); + result.sparse = offset < end ? readSparse(view, offset, end, dimensions, isComplex, nzmax, arrayClass === MX_SINGLE_CLASS) : emptySparse(isComplex, 0); result.value = sparseValue(dimensions, className); } else if (arrayClass >= 6 && arrayClass <= 15) { @@ -814,10 +931,10 @@ export function parseMatrix(view, baseOffset, length, depth = 0) { result.undecoded = unread; return result; } - const realValues = readNumericArray(view, realSub, totalElements); + const realValues = readNumericArray(view, realSub, totalElements, arrayClass === MX_SINGLE_CLASS); if (imagSub) { offset += imagSub.totalSize; - const imagValues = readNumericArray(view, imagSub, totalElements); + const imagValues = readNumericArray(view, imagSub, totalElements, arrayClass === MX_SINGLE_CLASS); const colMajor = realValues.map((r, i) => ({ re: r, im: imagValues[i] })); result.value = transposeFromColMajor(colMajor, dimensions); } diff --git a/dist/datamodel/parser/MatParser.js.map b/dist/datamodel/parser/MatParser.js.map index 7f0cb86f..41c11718 100644 --- a/dist/datamodel/parser/MatParser.js.map +++ b/dist/datamodel/parser/MatParser.js.map @@ -1 +1 @@ -{"version":3,"file":"MatParser.js","sourceRoot":"","sources":["../../../src/datamodel/parser/MatParser.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"MatParser.js","sourceRoot":"","sources":["../../../src/datamodel/parser/MatParser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/datamodel/parser/McosParser.d.ts.map b/dist/datamodel/parser/McosParser.d.ts.map index ad3562dc..85fdb42b 100644 --- a/dist/datamodel/parser/McosParser.d.ts.map +++ b/dist/datamodel/parser/McosParser.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"McosParser.d.ts","sourceRoot":"","sources":["../../../src/datamodel/parser/McosParser.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,WAAW,EACZ,MAAM,gBAAgB,CAAC;AA+DxB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IAOvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB,KAAK,EAAE,OAAO,CAAC;IAKf,cAAc,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;IAG1C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAqDD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAK/C,eAAO,MAAM,iBAAiB,WAAW,CAAC;AA0N1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAwB3F;AAokBD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CAC9B;AAKD,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,CAAC,CAAC;AAenG,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,eAAe,EAC3D,YAAY,EAAE,UAAU,EACxB,SAAS,EAAE,SAAS,CAAC,EAAE,EACvB,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,GAC/B,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAuHxB;AAKD,wBAAgB,cAAc,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAShH"} \ No newline at end of file +{"version":3,"file":"McosParser.d.ts","sourceRoot":"","sources":["../../../src/datamodel/parser/McosParser.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAiExB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IASvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB,KAAK,EAAE,OAAO,CAAC;IAKf,cAAc,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;IAG1C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAqDD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAK/C,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAsO1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAwB3F;AA+oBD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CAC9B;AAKD,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,CAAC,CAAC;AAenG,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,eAAe,EAC3D,YAAY,EAAE,UAAU,EACxB,SAAS,EAAE,SAAS,CAAC,EAAE,EACvB,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,GAC/B,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAuHxB;AAKD,wBAAgB,cAAc,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAShH"} \ No newline at end of file diff --git a/dist/datamodel/parser/McosParser.js b/dist/datamodel/parser/McosParser.js index a3f23afc..52c6fff8 100644 --- a/dist/datamodel/parser/McosParser.js +++ b/dist/datamodel/parser/McosParser.js @@ -4,7 +4,8 @@ import { isObjectHandle, objectHandleFromRaw, objectHandleFromValue } from './Mc import { matStreamOfElement } from './MatWriter.js'; import { uuencode } from './CdataCodec.js'; import { setOwn } from './ownKeys.js'; -import { complexClassTag, ENUM_KEY, ENUMERATION_KEY, formatComplexNum, formatMatlabNum, formatMatrixSerial, isExactToken, transposeToColumnMajorND, } from './XmlUtils.js'; +import { arrayClassOf, componentsBaseOf } from './objectArrayClass.js'; +import { complexClassTag, ENUM_KEY, ENUMERATION_KEY, formatComplexNum, formatMatlabNum, formatMatrixSerial, formatNumLiteral, isExactToken, transposeToColumnMajorND, } from './XmlUtils.js'; const MI_MATRIX = 14; const MAX_RECURSION_DEPTH = 32; // A MATLAB `string`-typed value is stored as its own MCOS object whose text lives in @@ -205,9 +206,20 @@ function parseMetaTable(cells) { // joined by newlines, the form MATLAB reads as an empty [] — so a Simulink.Parameter's // matrix Value copied out of a .mat, a workspace or a binary dictionary's hex into a text // dictionary came back empty. Inf and NaN are spelled as MATLAB spells them. -function buildMatrixValue(dims, elements) { - return { _type: 'double', _value: formatMatrixSerial(elements, dims, 'double') }; +// +// Of the array's own class (C-033): `double` for a double, and for any other numeric class +// the class itself, as BinarySlddParser.formatMatrix gives a binary dictionary's matrix of +// that class. A 1xN row of such a class takes formatMatrixSerial's bare `[a, b, c]`, which +// is BinarySlddParser.formatTypedVector's spelling of it. +function buildMatrixValue(dims, elements, cls = 'double') { + return { _type: cls, _value: formatMatrixSerial(elements, dims, cls) }; } +// The real numeric classes other than double, each of which a binary dictionary's reader +// hands the node layer typed (BinarySlddParser.formatTypedScalar, formatTypedVector, +// formatMatrix) and this decoder used to hand over bare, which the node layer reads as a +// double (MatlabVariableNode.parseFlatArray serves a text dictionary's bare JSON list too, +// where double is right, so the class cannot be recovered there). +const NON_DOUBLE_NUMERIC = new Set(['single', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64']); const isComplexPair = (x) => x !== null && typeof x === 'object' && 're' in x && 'im' in x; /** * A complex numeric property in the form a compressed-binary dictionary gives the same @@ -275,7 +287,12 @@ const isFinitePart = (x) => typeof x !== 'number' || Number.isFinite(x); // data model expects. Object handles recurse into nested { _object_class, // _properties }; structs and cells recurse into { _array_type: 'Struct'|'Cell', … }. // Unresolvable values return undefined (dropped). -function resolveValue(cell, ctx, path, depth) { +// +// `owner` and `propName` are the class of the object whose property this is and the +// property's name, where the value is a property's (buildProperties): the place an object +// array sits can name its class (componentsBaseOf). A struct's field and a cell's element +// pass neither, as the binary reader names no place for them either. +function resolveValue(cell, ctx, path, depth, owner, propName) { if (!cell) return undefined; if (isObjectHandle(cell)) { @@ -290,7 +307,23 @@ function resolveValue(cell, ctx, path, depth) { // BusElements): expand EVERY id into its own element, producing the same // value-object array shape the SLDD path emits so the data model builds one // child node per element instead of dropping all but the first. - const cls = ctx.meta.classes[ctx.meta.objects[handle.ids[0]]?.classId]; + // + // The array is under the class MATLAB's text format names it by, and each element + // of another class carries its own `_object_class`, as the binary reader reads one: + // both readers use objectArrayClass.ts. This used to read the first element's class + // for the whole array and give no element a class of its own. So a config set's + // Components in a .mat read as a Simulink.SolverCC array of nine SolverCCs, and a + // copy of the config set wrote every component as one. A dexdata.DerivedSignal + // beside a Simulink.Signal read as two DerivedSignals, where MATLAB says a + // Simulink.Signal array of the two (test/fixtures/mcos/configset.mat). + // + // A later element whose object names no class row is one of the first element's + // class, as the binary reader reads a classless later element: in the class the + // array is named by, and as the class it is marked with. Where the first names none + // either, the array has no class, as before. + const own = handle.ids.map((id) => ctx.meta.classes[ctx.meta.objects[id]?.classId]?.fullName ?? ''); + const classes = own.map((c) => c || own[0]); + const arrayClass = componentsBaseOf(owner, propName) ?? (classes[0] ? arrayClassOf(classes) : ''); // Every extent, as at the root-variable site below: a property holding a 2x3x2 // object array (ndNested.mat's h.Kids) reported [2, 3] over twelve elements, so // the container printed a shape MATLAB never had and the element subscripts ran @@ -298,11 +331,14 @@ function resolveValue(cell, ctx, path, depth) { // holds, which is why nothing here noticed. const dims = handle.dims.length >= 2 ? handle.dims.slice() : [1, handle.ids.length]; return { - _array_class: cls ? cls.fullName : '', + _array_class: arrayClass, _array_type: 'MATLABArray', _dimensions: dims, _mw_element_type: 'MATLABArray', - _elements: handle.ids.map((id) => ({ _properties: buildProperties(id, ctx, path, depth + 1) })), + _elements: handle.ids.map((id, k) => ({ + ...(classes[k] && classes[k] !== arrayClass ? { _object_class: classes[k] } : {}), + _properties: buildProperties(id, ctx, path, depth + 1), + })), }; } const cls = cell.className; @@ -326,7 +362,7 @@ function resolveValue(cell, ctx, path, depth) { if (cls === 'cell') { const elems = Array.isArray(val) ? val : []; const resolved = elems.map((e) => resolveValue(e, ctx, path, depth)); - const handle = functionHandleText(resolved); + const handle = functionHandleText(elems[0] ?? null, resolved); if (handle !== null) { return { _type: 'function_handle', _value: handle }; } @@ -365,18 +401,26 @@ function resolveValue(cell, ctx, path, depth) { } if (cell.isLogical) { if (Array.isArray(val)) { - // A logical MATRIX states its shape, in the typed literal BinarySlddParser reads a - // binary dictionary's own logical matrix into (logicalValue): a bare list of + // In the typed literal BinarySlddParser reads a binary dictionary's own logical array + // into (logicalValue), at every shape. A MATRIX states its shape: a bare list of // booleans is a row, so a 2x2 logical Value came back a 1x4 — MATLAB's // sparse([2;1], [1;2], [true;true], 2, 2) in a Simulink.Parameter showed // `[false true true false]`, where the text dictionary's twin of it showed // `[false true; true false]`. A rank-2 COLUMN states its shape for the same reason - // (an Nx1 came back 1xN); a row is still the bare list it always was. + // (an Nx1 came back 1xN). And a ROW states its class (C-033): the node layer reads a + // bare list of booleans as a DOUBLE row, so a logical([1 0 1]) Value showed class + // double, where both dictionaries show logical. formatMatrixSerial spells a 1xN + // logical `[1, 0, 1]`, as typed_binary.sldd's lglVec is held. + // + // An EMPTY logical is the `[]` it was before C-033 (a double 0x0: DESIGN.md records it), + // except where it was typed then too, which is wherever its shape alone says so: at rank + // 3 or more, a 2x0x2 is `Matrix(2,0,2)` and shows as a <2x0x2 logical> + // (mcosEmptyLogical.test.ts). const dims = cell.dimensions && cell.dimensions.length >= 2 ? cell.dimensions : [1, val.length]; - if (dims.length > 2 || (dims[0] > 1 && dims[1] > 1) || (dims.length === 2 && dims[0] > 1 && dims[1] === 1)) { - return { _type: 'logical', _value: formatMatrixSerial(val.map((x) => (x ? '1' : '0')), dims, 'logical') }; - } - return val.map((x) => !!x); + const shaped = dims.length > 2 || (dims[0] > 1 && dims[1] > 1) || (dims.length === 2 && dims[0] > 1 && dims[1] === 1); + if (val.length === 0 && !shaped) + return []; + return { _type: 'logical', _value: formatMatrixSerial(val.map((x) => (x ? '1' : '0')), dims, 'logical') }; } return !!val; } @@ -384,15 +428,27 @@ function resolveValue(cell, ctx, path, depth) { // double cannot hold arrives as its own decimal TEXT (MatParser via XmlUtils.exactInt), // so a scalar one is a string here — accepting only `typeof 'number'` would drop such a // property out of the object entirely rather than merely rounding it. + // + // A class other than double keeps its class (C-033), in the binary dictionary's typed + // spelling of the same value: a Simulink.Parameter whose Value is int8(-42) is + // `{_type: 'int8', _value: '-42'}`, as BinarySlddParser.formatTypedScalar gives it, and + // not the bare -42, which the node layer reads as a double. A double is bare, as it was. + const typed = NON_DOUBLE_NUMERIC.has(cls) ? cls : null; if (typeof val === 'number' || isExactToken(val)) { - return val; + return typed ? { _type: typed, _value: formatNumLiteral(val, typed) } : val; } if (Array.isArray(val)) { if (val.length === 0) return []; const dims = cell.dimensions || [1, val.length]; + // Of a class other than double, every shape is typed, a row as + // BinarySlddParser.formatTypedVector spells one (formatMatrixSerial's bare `[a, b]`) + // and anything else in the Matrix() literal of that class. + if (typed) { + return buildMatrixValue(dims, val, typed); + } // A rank-2 column goes out typed as well: a bare list is a row, so a Value of - // [10; 20; 30] showed, and copied out, as [10 20 30]. A row stays bare. + // [10; 20; 30] showed, and copied out, as [10 20 30]. A double row stays bare. if (dims.length >= 2 && dims[0] > 1 && (dims[1] > 1 || (dims.length === 2 && dims[1] === 1))) { return buildMatrixValue(dims, val); } @@ -400,6 +456,17 @@ function resolveValue(cell, ctx, path, depth) { } return undefined; } +// The number a non-double numeric SCALAR stands for, as text, when `v` is resolveValue's +// typed spelling of one (`{_type: 'int32', _value: '2'}`, `'2U'`, `'3.3F'`), or null. +function typedScalarText(v) { + if (v === null || typeof v !== 'object' || Array.isArray(v)) + return null; + const { _type: type, _value: text } = v; + if (typeof type !== 'string' || !NON_DOUBLE_NUMERIC.has(type) || typeof text !== 'string' || /^(\[|Matrix\()/.test(text)) { + return null; + } + return text.replace(/[FU]$/, ''); +} // The tag MATLAB writes at the head of an enumeration instance struct (MatParser.enumerationInstanceOf). const ENUMERATION_INSTANCE_TAG = 0xdd000000; /** @@ -454,6 +521,12 @@ function enumerationValue(instance, ctx, className) { if (m && (typeof v === 'number' || typeof v === 'boolean' || isExactToken(v))) { return { name: names[k], type: m[1], value: typeof v === 'boolean' ? (v ? '1' : '0') : typeof v === 'number' ? formatMatlabNum(v) : v }; } + // The `int32.Data` of an enumeration derived from int32 (Simulink.IntEnumType): its + // number, which resolveValue spells typed, as every non-double numeric (C-033). + const typedText = m ? typedScalarText(v) : null; + if (m && typedText !== null) { + return { name: names[k], type: m[1], value: typedText }; + } } return { name: names[k], value: '' }; }); @@ -503,9 +576,14 @@ const FUNCTION_HANDLE_MARKER = 0xdd000000; * text one and a .mat). Shown as it stood, it read `@sf%0@(y)y*2`. The prefix goes, and * the `@` that opens the anonymous function's own text stays; nothing else is rewritten * (MatParser.functionHandleText, which a .mat's own function handle is read with too). + * + * The marker is read off the cell's own first element (`marker`), not off what it resolves + * to: the word is a uint32, which resolves to its typed spelling, `{_type: 'uint32', _value: + * '3707764736U'}` (C-033). A number of any class whose value is the word is the marker, as it + * was when this compared the resolved number. */ -function functionHandleText(elements) { - if (elements.length !== 2 || elements[0] !== FUNCTION_HANDLE_MARKER) { +function functionHandleText(marker, elements) { + if (elements.length !== 2 || !marker || marker.isLogical || marker.value !== FUNCTION_HANDLE_MARKER) { return null; } const outer = elements[1]; @@ -572,11 +650,14 @@ function buildProperties(objId, ctx, path, depth) { // 1) Class defaults FIRST, so every property this class declares surfaces by name // (and value) even when the instance left it at its default and the instance // block omits it. Then the instance block overrides those it mutated. + // The class whose properties these are: an object array's place is named by it + // (resolveValue's `owner`). + const owner = ctx.meta.classes[obj.classId]?.fullName; const dflt = ctx.defaults[obj.classId]; if (dflt && dflt.className === 'struct' && dflt.fields) { for (const [fieldName, fieldVar] of Object.entries(dflt.fields)) { const fv = Array.isArray(fieldVar) ? fieldVar[0] : fieldVar; - const resolved = resolveValue(fv, ctx, path, depth); + const resolved = resolveValue(fv, ctx, path, depth, owner, fieldName); if (resolved !== undefined) { setOwn(props, fieldName, resolved); } @@ -596,7 +677,7 @@ function buildProperties(objId, ctx, path, depth) { continue; let resolved; if (flag === 1) { - resolved = resolveValue(ctx.cells[value + 2] || null, ctx, path, depth); + resolved = resolveValue(ctx.cells[value + 2] || null, ctx, path, depth, owner, name); } else if (flag === 0) { // An index past the string table names no string: drop the property, as an diff --git a/dist/datamodel/parser/McosParser.js.map b/dist/datamodel/parser/McosParser.js.map index 2295b4f6..e7fada3a 100644 --- a/dist/datamodel/parser/McosParser.js.map +++ b/dist/datamodel/parser/McosParser.js.map @@ -1 +1 @@ -{"version":3,"file":"McosParser.js","sourceRoot":"","sources":["../../../src/datamodel/parser/McosParser.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"McosParser.js","sourceRoot":"","sources":["../../../src/datamodel/parser/McosParser.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/datamodel/parser/objectArrayClass.d.ts b/dist/datamodel/parser/objectArrayClass.d.ts new file mode 100644 index 00000000..61ccbd51 --- /dev/null +++ b/dist/datamodel/parser/objectArrayClass.d.ts @@ -0,0 +1,51 @@ +/** + * The class an object array of elements of `classes` is, as MATLAB's text format names it in + * `_array_class`: the class every element shares; for elements of several classes, the common + * base class where it can be derived (heterogeneousBaseOf); and otherwise the first element's, + * which is what each reader named every such array before it kept the elements' own. A config + * set's Components does not come here: its place names its class (componentsBaseOf). + * + * The first element's class is still what an array of no derivable base reads as: of the 71 + * mixed arrays the binary dictionaries of the test fixtures, the parity artifacts and the local + * corpus hold, one, a simmechanics.ConfigurationSet's Components of two simmechanics classes. + */ +export declare function arrayClassOf(classes: string[]): string; +/** + * The common base class of an array mixing `classes`, where the readers can derive one, or + * undefined. + * + * Neither a binary dictionary nor an MCOS blob states it: a binary dictionary's `

` carries no Class, an MCOS object array is a list of + * object ids, and in both each element names only its own. A text dictionary does, and two + * rules give the base it names from the classes alone: + * - Simulink.ConfigComponent, for an array whose classes each belong to CONFIG_COMPONENTS: every + * Components array of a Simulink.ConfigSet and of a Simulink.RTWCC that MATLAB wrote into a + * text dictionary is `_array_class` Simulink.ConfigComponent (30 of 30, in five + * dictionaries), over classes each listed there. + * - The one known MathWorks class (isMathWorksClass) of an array mixing it with classes that are + * not: a user's class can derive from a MathWorks class and a MathWorks class never from a + * user's, so the MathWorks class is the base the user classes extend. A text dictionary MATLAB + * wrote names a Simulink.Signal subclass beside a Simulink.Signal `{"_array_class": + * "Simulink.Signal", …}`, and the binary reader read the binary twin of that array, in two + * dictionaries, as the subclass, the first element's class. MATLAB's class() of a + * dexdata.DerivedSignal beside a Simulink.Signal, read out of a .mat, is Simulink.Signal + * (test/fixtures/mcos/configset.truth.json). + * Of two MathWorks classes or more beside other classes, or of none, it names no base. + */ +export declare function heterogeneousBaseOf(classes: string[]): string | undefined; +/** + * The class the place of a property named `name` of an object of `ownerClass` names for an + * object array there, or undefined where it names none: Simulink.ConfigComponent, for the + * Components of a Simulink.ConfigSet or a Simulink.RTWCC, whatever components it holds. + * + * Every such array MATLAB wrote into a text dictionary is `_array_class` + * Simulink.ConfigComponent (30 of 30, in five dictionaries), and MATLAB's class() of one read + * out of a .mat is the same (test/fixtures/mcos/configset.truth.json). A binary dictionary and + * an MCOS blob name no base for it, and a binary dictionary can hold components no text + * dictionary has shown, so that CONFIG_COMPONENTS does not list them: a + * CoderTarget.SettingsController, in seven config sets of a corpus dictionary, and an + * SSC.SimscapeCC, in one of another. Those arrays used to read under their first component's + * class, a Simulink.SolverCC. + */ +export declare function componentsBaseOf(ownerClass: string | undefined, name: string | undefined): string | undefined; +//# sourceMappingURL=objectArrayClass.d.ts.map \ No newline at end of file diff --git a/dist/datamodel/parser/objectArrayClass.d.ts.map b/dist/datamodel/parser/objectArrayClass.d.ts.map new file mode 100644 index 00000000..3c4c3a12 --- /dev/null +++ b/dist/datamodel/parser/objectArrayClass.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"objectArrayClass.d.ts","sourceRoot":"","sources":["../../../src/datamodel/parser/objectArrayClass.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAKtD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAMzE;AAmBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAE7G"} \ No newline at end of file diff --git a/dist/datamodel/parser/objectArrayClass.js b/dist/datamodel/parser/objectArrayClass.js new file mode 100644 index 00000000..cdcebb9c --- /dev/null +++ b/dist/datamodel/parser/objectArrayClass.js @@ -0,0 +1,107 @@ +// Copyright 2026 The MathWorks, Inc. +// The class of an object array whose elements are of more than one class, as MATLAB's text +// format names it, for the readers whose format does not state it: a binary dictionary +// (BinarySlddParser), and a .mat or a model workspace's MCOS blob (McosParser). Both used to +// name such an array after its first element; one rule here keeps the two from drifting +// apart again. +// +// Each element of another class than the array's keeps its own, as `_object_class`; that is +// the readers' half. This is the class the array itself is, `_array_class`. +/** + * The class an object array of elements of `classes` is, as MATLAB's text format names it in + * `_array_class`: the class every element shares; for elements of several classes, the common + * base class where it can be derived (heterogeneousBaseOf); and otherwise the first element's, + * which is what each reader named every such array before it kept the elements' own. A config + * set's Components does not come here: its place names its class (componentsBaseOf). + * + * The first element's class is still what an array of no derivable base reads as: of the 71 + * mixed arrays the binary dictionaries of the test fixtures, the parity artifacts and the local + * corpus hold, one, a simmechanics.ConfigurationSet's Components of two simmechanics classes. + */ +export function arrayClassOf(classes) { + if (classes.every((c) => c === classes[0])) { + return classes[0]; + } + return heterogeneousBaseOf(classes) ?? classes[0]; +} +/** + * The common base class of an array mixing `classes`, where the readers can derive one, or + * undefined. + * + * Neither a binary dictionary nor an MCOS blob states it: a binary dictionary's `

` carries no Class, an MCOS object array is a list of + * object ids, and in both each element names only its own. A text dictionary does, and two + * rules give the base it names from the classes alone: + * - Simulink.ConfigComponent, for an array whose classes each belong to CONFIG_COMPONENTS: every + * Components array of a Simulink.ConfigSet and of a Simulink.RTWCC that MATLAB wrote into a + * text dictionary is `_array_class` Simulink.ConfigComponent (30 of 30, in five + * dictionaries), over classes each listed there. + * - The one known MathWorks class (isMathWorksClass) of an array mixing it with classes that are + * not: a user's class can derive from a MathWorks class and a MathWorks class never from a + * user's, so the MathWorks class is the base the user classes extend. A text dictionary MATLAB + * wrote names a Simulink.Signal subclass beside a Simulink.Signal `{"_array_class": + * "Simulink.Signal", …}`, and the binary reader read the binary twin of that array, in two + * dictionaries, as the subclass, the first element's class. MATLAB's class() of a + * dexdata.DerivedSignal beside a Simulink.Signal, read out of a .mat, is Simulink.Signal + * (test/fixtures/mcos/configset.truth.json). + * Of two MathWorks classes or more beside other classes, or of none, it names no base. + */ +export function heterogeneousBaseOf(classes) { + if (classes.every((c) => c === CONFIG_COMPONENT || CONFIG_COMPONENTS.has(c))) { + return CONFIG_COMPONENT; + } + const known = new Set(classes.filter(isMathWorksClass)); + return known.size === 1 ? [...known][0] : undefined; +} +/** + * Whether `cls` is a known MathWorks class: a class of a package whose classes this package + * already names as MathWorks' (MATHWORKS_PACKAGES). Simulink and mpt are the packages of every + * class the node registry, the schema and the Kind column name (NodeClassMap, schema/index, + * kindMap), and the two the test suite tells MATLAB's own objects from custom ones by; SlCovCC, + * Sldv and hdlcoderui are the packages of the config components CONFIG_COMPONENTS names. A class + * of any other package, MathWorks' or not (CoderTarget, SSC, simmechanics, AUTOSAR among them), + * is not known here, and counts as one that is not MathWorks' (heterogeneousBaseOf). + */ +function isMathWorksClass(cls) { + const dot = cls.indexOf('.'); + return dot > 0 && MATHWORKS_PACKAGES.has(cls.slice(0, dot)); +} +/** The packages of the known MathWorks classes (isMathWorksClass). */ +const MATHWORKS_PACKAGES = new Set(['Simulink', 'mpt', 'SlCovCC', 'Sldv', 'hdlcoderui']); +/** + * The class the place of a property named `name` of an object of `ownerClass` names for an + * object array there, or undefined where it names none: Simulink.ConfigComponent, for the + * Components of a Simulink.ConfigSet or a Simulink.RTWCC, whatever components it holds. + * + * Every such array MATLAB wrote into a text dictionary is `_array_class` + * Simulink.ConfigComponent (30 of 30, in five dictionaries), and MATLAB's class() of one read + * out of a .mat is the same (test/fixtures/mcos/configset.truth.json). A binary dictionary and + * an MCOS blob name no base for it, and a binary dictionary can hold components no text + * dictionary has shown, so that CONFIG_COMPONENTS does not list them: a + * CoderTarget.SettingsController, in seven config sets of a corpus dictionary, and an + * SSC.SimscapeCC, in one of another. Those arrays used to read under their first component's + * class, a Simulink.SolverCC. + */ +export function componentsBaseOf(ownerClass, name) { + return name === 'Components' && (ownerClass === 'Simulink.ConfigSet' || ownerClass === 'Simulink.RTWCC') ? CONFIG_COMPONENT : undefined; +} +const CONFIG_COMPONENT = 'Simulink.ConfigComponent'; +/** Each class MATLAB's text format lists as an element of a Simulink.ConfigComponent array (see heterogeneousBaseOf). */ +const CONFIG_COMPONENTS = new Set([ + 'Simulink.SolverCC', + 'Simulink.DataIOCC', + 'Simulink.OptimizationCC', + 'Simulink.DebuggingCC', + 'Simulink.HardwareCC', + 'Simulink.ModelReferenceCC', + 'Simulink.SFSimCC', + 'Simulink.RTWCC', + 'Simulink.CodeAppCC', + 'Simulink.GRTTargetCC', + 'Simulink.ERTTargetCC', + 'Simulink.STFCustomTargetCC', + 'SlCovCC.ConfigComp', + 'Sldv.ConfigComp', + 'hdlcoderui.hdlcc', +]); +//# sourceMappingURL=objectArrayClass.js.map \ No newline at end of file diff --git a/dist/datamodel/parser/objectArrayClass.js.map b/dist/datamodel/parser/objectArrayClass.js.map new file mode 100644 index 00000000..b2ef3a98 --- /dev/null +++ b/dist/datamodel/parser/objectArrayClass.js.map @@ -0,0 +1 @@ +{"version":3,"file":"objectArrayClass.js","sourceRoot":"","sources":["../../../src/datamodel/parser/objectArrayClass.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,2FAA2F;AAC3F,uFAAuF;AACvF,6FAA6F;AAC7F,wFAAwF;AACxF,eAAe;AACf,EAAE;AACF,4FAA4F;AAC5F,4EAA4E;AAE5E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,OAAiB;IAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,mBAAmB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAiB;IACnD,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,gBAAgB,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,GAAG,GAAG,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,sEAAsE;AACtE,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;AAE9G;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA8B,EAAE,IAAwB;IACvF,OAAO,IAAI,KAAK,YAAY,IAAI,CAAC,UAAU,KAAK,oBAAoB,IAAI,UAAU,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1I,CAAC;AAED,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AAEpD,yHAAyH;AACzH,MAAM,iBAAiB,GAAwB,IAAI,GAAG,CAAC;IACrD,mBAAmB;IACnB,mBAAmB;IACnB,yBAAyB;IACzB,sBAAsB;IACtB,qBAAqB;IACrB,2BAA2B;IAC3B,kBAAkB;IAClB,gBAAgB;IAChB,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;IACtB,4BAA4B;IAC5B,oBAAoB;IACpB,iBAAiB;IACjB,kBAAkB;CACnB,CAAC,CAAC"} \ No newline at end of file diff --git a/src/datamodel/parser/BinarySlddParser.ts b/src/datamodel/parser/BinarySlddParser.ts index c1912094..846613d5 100644 --- a/src/datamodel/parser/BinarySlddParser.ts +++ b/src/datamodel/parser/BinarySlddParser.ts @@ -74,6 +74,7 @@ import { type PropertySource, } from './XmlUtils.js'; import { setOwn } from './ownKeys.js'; +import { arrayClassOf, componentsBaseOf } from './objectArrayClass.js'; import { headerDigits } from './Size.js'; import { recordPackageStamps, recordReadFrame, recordReadSource, type ChunkFrame, type Span } from './EntrySource.js'; @@ -936,7 +937,8 @@ function cellValue(elements: XmlNode[], dimParts: number[]): Record { const first = elements.length > 0 ? elements[0]['@_Class'] || '' : ''; if (!first) { @@ -1002,105 +1004,6 @@ function propertySources(el: XmlNode): Record | null { return sources; } -/** - * The class an object array of elements of `classes` is, as MATLAB's text format names it in - * `_array_class`: the class every element shares; for elements of several classes, the common - * base class where it can be derived (heterogeneousBaseOf); and otherwise the first element's, - * which is what this reader named every such array before it kept the elements' own. A config - * set's Components does not come here: its place names its class (componentsBaseOf). - * - * The first element's class is still what an array of no derivable base reads as: of the 71 - * mixed arrays the binary dictionaries of the test fixtures, the parity artifacts and the local - * corpus hold, one, a simmechanics.ConfigurationSet's Components of two simmechanics classes. - */ -function arrayClassOf(classes: string[]): string { - if (classes.every((c) => c === classes[0])) { - return classes[0]; - } - return heterogeneousBaseOf(classes) ?? classes[0]; -} - -/** - * The common base class of an array mixing `classes`, where this reader can derive one, or - * undefined. - * - * A binary dictionary does not state it: its `

` carries - * no Class, and each element names only its own. A text dictionary does, and two rules give the - * base it names from the classes alone: - * - Simulink.ConfigComponent, for an array whose classes each belong to CONFIG_COMPONENTS: every - * Components array of a Simulink.ConfigSet and of a Simulink.RTWCC that MATLAB wrote into a - * text dictionary is `_array_class` Simulink.ConfigComponent (30 of 30, in five - * dictionaries), over classes each listed there. - * - The one known MathWorks class (isMathWorksClass) of an array mixing it with classes that are - * not: a user's class can derive from a MathWorks class and a MathWorks class never from a - * user's, so the MathWorks class is the base the user classes extend. A text dictionary MATLAB - * wrote names a Simulink.Signal subclass beside a Simulink.Signal `{"_array_class": - * "Simulink.Signal", …}`, and this reader read the binary twin of that array, in two - * dictionaries, as the subclass, the first element's class. - * Of two MathWorks classes or more beside other classes, or of none, it names no base. - */ -function heterogeneousBaseOf(classes: string[]): string | undefined { - if (classes.every((c) => c === CONFIG_COMPONENT || CONFIG_COMPONENTS.has(c))) { - return CONFIG_COMPONENT; - } - const known = new Set(classes.filter(isMathWorksClass)); - return known.size === 1 ? [...known][0] : undefined; -} - -/** - * Whether `cls` is a known MathWorks class: a class of a package whose classes this package - * already names as MathWorks' (MATHWORKS_PACKAGES). Simulink and mpt are the packages of every - * class the node registry, the schema and the Kind column name (NodeClassMap, schema/index, - * kindMap), and the two the test suite tells MATLAB's own objects from custom ones by; SlCovCC, - * Sldv and hdlcoderui are the packages of the config components CONFIG_COMPONENTS names. A class - * of any other package, MathWorks' or not (CoderTarget, SSC, simmechanics, AUTOSAR among them), - * is not known here, and counts as one that is not MathWorks' (heterogeneousBaseOf). - */ -function isMathWorksClass(cls: string): boolean { - const dot = cls.indexOf('.'); - return dot > 0 && MATHWORKS_PACKAGES.has(cls.slice(0, dot)); -} - -/** The packages of the known MathWorks classes (isMathWorksClass). */ -const MATHWORKS_PACKAGES: ReadonlySet = new Set(['Simulink', 'mpt', 'SlCovCC', 'Sldv', 'hdlcoderui']); - -/** - * The class the place of a property named `name` of an object of `ownerClass` names for an - * object array there, or undefined where it names none: Simulink.ConfigComponent, for the - * Components of a Simulink.ConfigSet or a Simulink.RTWCC, whatever components it holds. - * - * Every such array MATLAB wrote into a text dictionary is `_array_class` - * Simulink.ConfigComponent (30 of 30, in five dictionaries). A binary dictionary names no base - * for it, and can hold components no text dictionary has shown, so that CONFIG_COMPONENTS does - * not list them: a CoderTarget.SettingsController, in seven config sets of a corpus dictionary, - * and an SSC.SimscapeCC, in one of another. Those arrays used to read under their first - * component's class, a Simulink.SolverCC. - */ -function componentsBaseOf(ownerClass: string | undefined, name: string | undefined): string | undefined { - return name === 'Components' && (ownerClass === 'Simulink.ConfigSet' || ownerClass === 'Simulink.RTWCC') ? CONFIG_COMPONENT : undefined; -} - -const CONFIG_COMPONENT = 'Simulink.ConfigComponent'; - -/** Each class MATLAB's text format lists as an element of a Simulink.ConfigComponent array (see heterogeneousBaseOf). */ -const CONFIG_COMPONENTS: ReadonlySet = new Set([ - 'Simulink.SolverCC', - 'Simulink.DataIOCC', - 'Simulink.OptimizationCC', - 'Simulink.DebuggingCC', - 'Simulink.HardwareCC', - 'Simulink.ModelReferenceCC', - 'Simulink.SFSimCC', - 'Simulink.RTWCC', - 'Simulink.CodeAppCC', - 'Simulink.GRTTargetCC', - 'Simulink.ERTTargetCC', - 'Simulink.STFCustomTargetCC', - 'SlCovCC.ConfigComp', - 'Sldv.ConfigComp', - 'hdlcoderui.hdlcc', -]); - /** * A classed or shaped empty, as every place a value is read holds one, an entry's Value, an * object's property or a struct's field, and a cell's element: its class under the bare header diff --git a/src/datamodel/parser/MatParser.ts b/src/datamodel/parser/MatParser.ts index 84d6e3f4..9c1009f3 100644 --- a/src/datamodel/parser/MatParser.ts +++ b/src/datamodel/parser/MatParser.ts @@ -29,6 +29,9 @@ const MI_MATRIX = 14; const MI_COMPRESSED = 15; const MI_UTF8 = 16; const MI_UTF16 = 17; +// The array class of a single (mxSINGLE_CLASS), whose elements are read as MATLAB spells them +// (singleDigits). +const MX_SINGLE_CLASS = 7; // The one description of a parsed MATLAB variable, shared by the parsers that // produce it and MatlabVariableNode, which models it. Both sides once declared @@ -178,7 +181,12 @@ const ELEMENT_WIDTH: Record = { // four UTF-16 code units share one uint64 and the rounding lands in the LOW bits — that // is, on the FIRST character of every group of four ("café" -> "`afé"). See // test/parity/matlab/STRING_MCOS.md. -function readNumericArray(view: DataView, sub: SubElement, count: number): (number | string)[] { +// +// `single` is whether the array is of class single (C-033): each miSINGLE element is then the +// decimal MATLAB spells that float32 with (singleDigits), and not the double getFloat32 widens +// it to. Any other class reads an miSINGLE element as that double, which for a double stored +// in four bytes is its value. +function readNumericArray(view: DataView, sub: SubElement, count: number, single = false): (number | string)[] { const values: (number | string)[] = []; const off = sub.dataOffset; @@ -205,7 +213,11 @@ function readNumericArray(view: DataView, sub: SubElement, count: number): (numb for (let i = 0; i < count; i++) { switch (sub.type) { case MI_DOUBLE: values.push(view.getFloat64(off + i * 8, true)); break; - case MI_SINGLE: values.push(view.getFloat32(off + i * 4, true)); break; + case MI_SINGLE: { + const x = view.getFloat32(off + i * 4, true); + values.push(single ? singleDigits(x) : x); + break; + } case MI_INT8: values.push(view.getInt8(off + i)); break; case MI_UINT8: values.push(view.getUint8(off + i)); break; case MI_INT16: values.push(view.getInt16(off + i * 2, true)); break; @@ -219,6 +231,115 @@ function readNumericArray(view: DataView, sub: SubElement, count: number): (numb return values; } +/** + * A single as the decimal MATLAB spells it with, measured (R2027a): C's `%.6g` where that is + * the same float32, and otherwise `%.9g`, which always is — or `%.10g` for realmax('single'), + * whose `%.9g` is past it. Six is FLT_DIG, the digits every float32 holds, and nine + * FLT_DECIMAL_DIG, the digits that name any one; MATLAB writes a double by the same rule at + * fifteen and seventeen (a binary dictionary holds 1/3 as 0.33333333333333331). + * + * getFloat32 hands back the double of the same value, and every number here prints as the + * shortest text of its DOUBLE: single(3.3) is the double 3.299999952316284, and showed so, + * where both dictionaries hold MATLAB's own text for the same value, `3.3` (the corpus + * twins param_vars.mat / param_json.sldd, P30_TypeMaxUnitDesc; DESIGN.md recorded the + * difference as a limitation). It is not "the shortest decimal that is the same float32": + * MATLAB writes single(1/3) as 0.333333343, where 0.33333334 would do, and the smallest + * subnormal as 1.4013e-45, where 1e-45 would. make_typed_fixtures.m's sSingleSweep, 4,082 + * float32 bit patterns from the smallest subnormal to realmax, holds MATLAB's text for each + * in a text dictionary (its binary format writes the same digits, measured), and this rule + * gives every one, where the shortest would differ on 3,520 (typedMcosFixtures.test.ts). It + * also gives every one of the 127,743 non-zero singles a customer text dictionary in the + * corpus holds. + * + * Lossless: the number is the same float32, so MatWriter's setFloat32 writes back the bits + * that were read, and a text dictionary's `0.333333343F` names them too. An infinity, a NaN + * and either zero are themselves. + */ +function singleDigits(x: number): number { + if (!Number.isFinite(x) || x === 0) { + return x; + } + const ax = Math.abs(x); + let six = roundedDigits(ax, 6); + if (Number.isNaN(six)) { + six = Math.abs(Number(x.toPrecision(6))); + } + if (Math.fround(six) === ax) { + return x < 0 ? -six : six; + } + const nine = roundedDigits(ax, 9); + if (!Number.isNaN(nine)) { + return x < 0 ? -nine : nine; + } + const text = toPrecisionHalfEven(x, 9); + return Math.abs(text) > FLT_MAX ? toPrecisionHalfEven(x, 10) : text; +} + +// The largest finite single, realmax('single'). +const FLT_MAX = 3.4028234663852886e38; + +const POWERS_OF_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12]; + +/** + * The positive single `ax` to `p` significant digits, an exact tie to the even digit, by + * arithmetic that is exact: `ax * 10^j` is, for a float32 and 0 <= j <= 12 (24 bits of + * mantissa by at most 28 of 5^12 fit a double's 53), so it is rounded as the exact value is, + * and `n / 10^j` is the double nearest that decimal. NaN where `j` would fall outside that + * range — a single of 1e9 or more, or under 1e-4 for nine digits and 1e-7 for six — which + * toPrecisionHalfEven reads instead. The same numbers (every 31st float32 bit pattern, both + * signs, compared), in a fifth of the time: singleDigits runs once per element, and a million + * singles took 400 ms by toPrecision alone and take 75 ms so, against 8 ms for the bare read. + */ +function roundedDigits(ax: number, p: number): number { + let j = p - 1 - Math.floor(Math.log10(ax)); + if (j < 0 || j > 12) { + return NaN; + } + let y = ax * POWERS_OF_TEN[j]; + // log10 can land a hair either side of an exponent: then `y` has a digit too many or too + // few, and the scale moves one place. + if (y >= POWERS_OF_TEN[p]) { + if (j === 0) { + return NaN; + } + y = ax * POWERS_OF_TEN[--j]; + } else if (y < POWERS_OF_TEN[p - 1]) { + if (j === 12) { + return NaN; + } + y = ax * POWERS_OF_TEN[++j]; + } + const whole = Math.floor(y); + const rest = y - whole; + const n = rest > 0.5 || (rest === 0.5 && whole % 2 === 1) ? whole + 1 : whole; + return n / POWERS_OF_TEN[j]; +} + +/** + * `x` to `p` significant digits as C's printf rounds it: to the nearer, and an exact tie to + * the EVEN digit. toPrecision takes the one farther from zero at a tie, so single(1000000.125) + * came out 1000000.13 where MATLAB writes 1000000.12 (typed_mcos.sldd's sSingleTies). Only a + * value of exactly `p + 1` significant digits, the last a 5, is a tie; toPrecision's own text + * of it at `p + 1` digits is then that 5, which is what is looked for before the exact digits + * are. + */ +function toPrecisionHalfEven(x: number, p: number): number { + const away = x.toPrecision(p); + if (!/5(?:e|$)/.test(x.toPrecision(p + 1))) { + return Number(away); + } + // Every significant digit of `x` up to a hundred, which a tie at ten has all of. + const digits = x.toPrecision(100).replace(/e.*$/, '').replace(/[-.]/g, '').replace(/^0+/, ''); + if (digits[p] !== '5' || !/^0*$/.test(digits.slice(p + 1))) { + return Number(away); + } + // An exact tie, which goes to the even neighbour: the one nearer zero, `x` cut to `p` + // digits, when the last of those is even, and `away` when it is odd. The nearer one is + // read off a number just inside the tie: 2^-45 of `x` moves a double, and is far less + // than half a unit in a tenth digit. + return Number(digits[p - 1]) % 2 === 0 ? Number((x * (1 - 2 ** -45)).toPrecision(p)) : Number(away); +} + // Why the numeric part whose tag is at `at` holds none of the `count` elements its array // declares, or null when it holds what its bytes do. Either its tag is cut short by the end of // the bytes, which readSubelement reports as a tag of type 0, or its type has no width: in both @@ -416,13 +537,16 @@ export function structElementsHeld(v: MatVariable): number { // outside the declared rows is dropped, rows repeated within a column keep the LAST value // (as the dense scatter this replaced had it), rows out of order are sorted, and a stored // zero is not a non-zero. +// `single` is whether the array is of class single, whose non-zeros are read as a full +// single array's are (readNumericArray). function readSparse( view: DataView, offset: number, end: number, dimensions: number[], isComplex: boolean, - nzmax: number + nzmax: number, + single: boolean ): SparseData { const rows = Math.max(0, dimensions[0] || 0); const cols = Math.max(0, dimensions[1] || 0); @@ -464,14 +588,14 @@ function readSparse( if (offset < end) { const prSub = readSubelement(view, offset); offset += prSub.totalSize; - pr = readNumericArray(view, prSub, nnz); + pr = readNumericArray(view, prSub, nnz, single); } let pi: (number | string)[] = []; if (isComplex && offset < end) { const piSub = readSubelement(view, offset); offset += piSub.totalSize; - pi = readNumericArray(view, piSub, nnz); + pi = readNumericArray(view, piSub, nnz, single); } // At most nnz entries, which ir's own bytes bound. @@ -895,7 +1019,7 @@ export function parseMatrix(view: DataView, baseOffset: number, length: number, // read: a host that renders values without knowing about `sparse` still shows // something true. A 1x1 is not unwrapped to a scalar: it has no list to unwrap. const nzmax = flagsSub.bytes >= 8 ? view.getUint32(flagsSub.dataOffset + 4, true) : 0; - result.sparse = offset < end ? readSparse(view, offset, end, dimensions, isComplex, nzmax) : emptySparse(isComplex, 0); + result.sparse = offset < end ? readSparse(view, offset, end, dimensions, isComplex, nzmax, arrayClass === MX_SINGLE_CLASS) : emptySparse(isComplex, 0); result.value = sparseValue(dimensions, className); } else if (arrayClass >= 6 && arrayClass <= 15) { if (offset < end) { @@ -913,11 +1037,11 @@ export function parseMatrix(view: DataView, baseOffset: number, length: number, result.undecoded = unread; return result; } - const realValues = readNumericArray(view, realSub, totalElements); + const realValues = readNumericArray(view, realSub, totalElements, arrayClass === MX_SINGLE_CLASS); if (imagSub) { offset += imagSub.totalSize; - const imagValues = readNumericArray(view, imagSub, totalElements); + const imagValues = readNumericArray(view, imagSub, totalElements, arrayClass === MX_SINGLE_CLASS); const colMajor = realValues.map((r, i) => ({ re: r, im: imagValues[i] })); result.value = transposeFromColMajor(colMajor, dimensions); } else { diff --git a/src/datamodel/parser/McosParser.ts b/src/datamodel/parser/McosParser.ts index 30e077f5..87d8f52a 100644 --- a/src/datamodel/parser/McosParser.ts +++ b/src/datamodel/parser/McosParser.ts @@ -12,6 +12,7 @@ import { isObjectHandle, objectHandleFromRaw, objectHandleFromValue } from './Mc import { matStreamOfElement } from './MatWriter.js'; import { uuencode } from './CdataCodec.js'; import { setOwn } from './ownKeys.js'; +import { arrayClassOf, componentsBaseOf } from './objectArrayClass.js'; import { complexClassTag, ENUM_KEY, @@ -20,6 +21,7 @@ import { formatComplexNum, formatMatlabNum, formatMatrixSerial, + formatNumLiteral, isExactToken, transposeToColumnMajorND, } from './XmlUtils.js'; @@ -78,8 +80,10 @@ export interface McosObjectData { // Reconstructed `_properties` bag in the same shape the SLDD path produces: // scalars as numbers/strings/booleans, matrices as a Matrix(r,c) value object, // complex values as the binary dictionary's { _type: 'cdata' } text - // (complexPropertyValue), nested objects as { _object_class, _properties }. For an - // object ARRAY this mirrors elements[0] (back-compat for callers that only read a + // (complexPropertyValue), nested objects as { _object_class, _properties }, and a + // nested object ARRAY as { _array_class, _elements }, each element of another class + // than the array's carrying its own `_object_class` (resolveValue). For an object + // ARRAY variable this mirrors elements[0] (back-compat for callers that only read a // scalar). properties: Record; // One `_properties` bag per array element, in column-major order (MATLAB's). @@ -386,10 +390,22 @@ function parseMetaTable(cells: (MatVariable | null)[]): MetaTable | null { // joined by newlines, the form MATLAB reads as an empty [] — so a Simulink.Parameter's // matrix Value copied out of a .mat, a workspace or a binary dictionary's hex into a text // dictionary came back empty. Inf and NaN are spelled as MATLAB spells them. -function buildMatrixValue(dims: number[], elements: (number | string)[]): unknown { - return { _type: 'double', _value: formatMatrixSerial(elements, dims, 'double') }; +// +// Of the array's own class (C-033): `double` for a double, and for any other numeric class +// the class itself, as BinarySlddParser.formatMatrix gives a binary dictionary's matrix of +// that class. A 1xN row of such a class takes formatMatrixSerial's bare `[a, b, c]`, which +// is BinarySlddParser.formatTypedVector's spelling of it. +function buildMatrixValue(dims: number[], elements: (number | string)[], cls = 'double'): unknown { + return { _type: cls, _value: formatMatrixSerial(elements, dims, cls) }; } +// The real numeric classes other than double, each of which a binary dictionary's reader +// hands the node layer typed (BinarySlddParser.formatTypedScalar, formatTypedVector, +// formatMatrix) and this decoder used to hand over bare, which the node layer reads as a +// double (MatlabVariableNode.parseFlatArray serves a text dictionary's bare JSON list too, +// where double is right, so the class cannot be recovered there). +const NON_DOUBLE_NUMERIC = new Set(['single', 'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64']); + interface ComplexPair { re: unknown; im: unknown; @@ -464,7 +480,19 @@ const isFinitePart = (x: unknown): boolean => typeof x !== 'number' || Number.is // data model expects. Object handles recurse into nested { _object_class, // _properties }; structs and cells recurse into { _array_type: 'Struct'|'Cell', … }. // Unresolvable values return undefined (dropped). -function resolveValue(cell: MatVariable | null, ctx: DecodeContext, path: Set, depth: number): unknown { +// +// `owner` and `propName` are the class of the object whose property this is and the +// property's name, where the value is a property's (buildProperties): the place an object +// array sits can name its class (componentsBaseOf). A struct's field and a cell's element +// pass neither, as the binary reader names no place for them either. +function resolveValue( + cell: MatVariable | null, + ctx: DecodeContext, + path: Set, + depth: number, + owner?: string, + propName?: string, +): unknown { if (!cell) return undefined; if (isObjectHandle(cell)) { @@ -479,7 +507,23 @@ function resolveValue(cell: MatVariable | null, ctx: DecodeContext, path: Set ctx.meta.classes[ctx.meta.objects[id]?.classId]?.fullName ?? ''); + const classes = own.map((c) => c || own[0]); + const arrayClass = componentsBaseOf(owner, propName) ?? (classes[0] ? arrayClassOf(classes) : ''); // Every extent, as at the root-variable site below: a property holding a 2x3x2 // object array (ndNested.mat's h.Kids) reported [2, 3] over twelve elements, so // the container printed a shape MATLAB never had and the element subscripts ran @@ -487,11 +531,14 @@ function resolveValue(cell: MatVariable | null, ctx: DecodeContext, path: Set= 2 ? handle.dims.slice() : [1, handle.ids.length]; return { - _array_class: cls ? cls.fullName : '', + _array_class: arrayClass, _array_type: 'MATLABArray', _dimensions: dims, _mw_element_type: 'MATLABArray', - _elements: handle.ids.map((id) => ({ _properties: buildProperties(id, ctx, path, depth + 1) })), + _elements: handle.ids.map((id, k) => ({ + ...(classes[k] && classes[k] !== arrayClass ? { _object_class: classes[k] } : {}), + _properties: buildProperties(id, ctx, path, depth + 1), + })), }; } @@ -517,7 +564,7 @@ function resolveValue(cell: MatVariable | null, ctx: DecodeContext, path: Set resolveValue(e, ctx, path, depth)); - const handle = functionHandleText(resolved); + const handle = functionHandleText(elems[0] ?? null, resolved); if (handle !== null) { return { _type: 'function_handle', _value: handle }; } @@ -556,18 +603,25 @@ function resolveValue(cell: MatVariable | null, ctx: DecodeContext, path: Set + // (mcosEmptyLogical.test.ts). const dims = cell.dimensions && cell.dimensions.length >= 2 ? cell.dimensions : [1, val.length]; - if (dims.length > 2 || (dims[0] > 1 && dims[1] > 1) || (dims.length === 2 && dims[0] > 1 && dims[1] === 1)) { - return { _type: 'logical', _value: formatMatrixSerial(val.map((x) => (x ? '1' : '0')), dims, 'logical') }; - } - return val.map((x) => !!x); + const shaped = dims.length > 2 || (dims[0] > 1 && dims[1] > 1) || (dims.length === 2 && dims[0] > 1 && dims[1] === 1); + if (val.length === 0 && !shaped) return []; + return { _type: 'logical', _value: formatMatrixSerial(val.map((x) => (x ? '1' : '0')), dims, 'logical') }; } return !!val; } @@ -575,14 +629,26 @@ function resolveValue(cell: MatVariable | null, ctx: DecodeContext, path: Set= 2 && dims[0] > 1 && (dims[1] > 1 || (dims.length === 2 && dims[1] === 1))) { return buildMatrixValue(dims, val as (number | string)[]); } @@ -591,6 +657,17 @@ function resolveValue(cell: MatVariable | null, ctx: DecodeContext, path: Set; + if (typeof type !== 'string' || !NON_DOUBLE_NUMERIC.has(type) || typeof text !== 'string' || /^(\[|Matrix\()/.test(text)) { + return null; + } + return text.replace(/[FU]$/, ''); +} + // The tag MATLAB writes at the head of an enumeration instance struct (MatParser.enumerationInstanceOf). const ENUMERATION_INSTANCE_TAG = 0xdd000000; @@ -646,6 +723,12 @@ function enumerationValue(instance: MatVariable, ctx: DecodeContext, className: if (m && (typeof v === 'number' || typeof v === 'boolean' || isExactToken(v))) { return { name: names[k], type: m[1], value: typeof v === 'boolean' ? (v ? '1' : '0') : typeof v === 'number' ? formatMatlabNum(v) : v }; } + // The `int32.Data` of an enumeration derived from int32 (Simulink.IntEnumType): its + // number, which resolveValue spells typed, as every non-double numeric (C-033). + const typedText = m ? typedScalarText(v) : null; + if (m && typedText !== null) { + return { name: names[k], type: m[1], value: typedText }; + } } return { name: names[k], value: '' }; }); @@ -698,9 +781,14 @@ const FUNCTION_HANDLE_MARKER = 0xdd000000; * text one and a .mat). Shown as it stood, it read `@sf%0@(y)y*2`. The prefix goes, and * the `@` that opens the anonymous function's own text stays; nothing else is rewritten * (MatParser.functionHandleText, which a .mat's own function handle is read with too). + * + * The marker is read off the cell's own first element (`marker`), not off what it resolves + * to: the word is a uint32, which resolves to its typed spelling, `{_type: 'uint32', _value: + * '3707764736U'}` (C-033). A number of any class whose value is the word is the marker, as it + * was when this compared the resolved number. */ -function functionHandleText(elements: unknown[]): string | null { - if (elements.length !== 2 || elements[0] !== FUNCTION_HANDLE_MARKER) { +function functionHandleText(marker: MatVariable | null, elements: unknown[]): string | null { + if (elements.length !== 2 || !marker || marker.isLogical || marker.value !== FUNCTION_HANDLE_MARKER) { return null; } const outer = elements[1] as Record | null; @@ -769,11 +857,14 @@ function buildProperties(objId: number, ctx: DecodeContext, path: Set, d // 1) Class defaults FIRST, so every property this class declares surfaces by name // (and value) even when the instance left it at its default and the instance // block omits it. Then the instance block overrides those it mutated. + // The class whose properties these are: an object array's place is named by it + // (resolveValue's `owner`). + const owner = ctx.meta.classes[obj.classId]?.fullName; const dflt = ctx.defaults[obj.classId]; if (dflt && dflt.className === 'struct' && dflt.fields) { for (const [fieldName, fieldVar] of Object.entries(dflt.fields)) { const fv = Array.isArray(fieldVar) ? fieldVar[0] : fieldVar; - const resolved = resolveValue(fv, ctx, path, depth); + const resolved = resolveValue(fv, ctx, path, depth, owner, fieldName); if (resolved !== undefined) { setOwn(props, fieldName, resolved); } @@ -793,7 +884,7 @@ function buildProperties(objId: number, ctx: DecodeContext, path: Set, d if (!name) continue; let resolved: unknown; if (flag === 1) { - resolved = resolveValue(ctx.cells[value + 2] || null, ctx, path, depth); + resolved = resolveValue(ctx.cells[value + 2] || null, ctx, path, depth, owner, name); } else if (flag === 0) { // An index past the string table names no string: drop the property, as an // out-of-range heap index (flag 1) and an unknown flag do, rather than invent ''. diff --git a/src/datamodel/parser/objectArrayClass.ts b/src/datamodel/parser/objectArrayClass.ts new file mode 100644 index 00000000..59f5878c --- /dev/null +++ b/src/datamodel/parser/objectArrayClass.ts @@ -0,0 +1,114 @@ +// Copyright 2026 The MathWorks, Inc. + +// The class of an object array whose elements are of more than one class, as MATLAB's text +// format names it, for the readers whose format does not state it: a binary dictionary +// (BinarySlddParser), and a .mat or a model workspace's MCOS blob (McosParser). Both used to +// name such an array after its first element; one rule here keeps the two from drifting +// apart again. +// +// Each element of another class than the array's keeps its own, as `_object_class`; that is +// the readers' half. This is the class the array itself is, `_array_class`. + +/** + * The class an object array of elements of `classes` is, as MATLAB's text format names it in + * `_array_class`: the class every element shares; for elements of several classes, the common + * base class where it can be derived (heterogeneousBaseOf); and otherwise the first element's, + * which is what each reader named every such array before it kept the elements' own. A config + * set's Components does not come here: its place names its class (componentsBaseOf). + * + * The first element's class is still what an array of no derivable base reads as: of the 71 + * mixed arrays the binary dictionaries of the test fixtures, the parity artifacts and the local + * corpus hold, one, a simmechanics.ConfigurationSet's Components of two simmechanics classes. + */ +export function arrayClassOf(classes: string[]): string { + if (classes.every((c) => c === classes[0])) { + return classes[0]; + } + return heterogeneousBaseOf(classes) ?? classes[0]; +} + +/** + * The common base class of an array mixing `classes`, where the readers can derive one, or + * undefined. + * + * Neither a binary dictionary nor an MCOS blob states it: a binary dictionary's `

` carries no Class, an MCOS object array is a list of + * object ids, and in both each element names only its own. A text dictionary does, and two + * rules give the base it names from the classes alone: + * - Simulink.ConfigComponent, for an array whose classes each belong to CONFIG_COMPONENTS: every + * Components array of a Simulink.ConfigSet and of a Simulink.RTWCC that MATLAB wrote into a + * text dictionary is `_array_class` Simulink.ConfigComponent (30 of 30, in five + * dictionaries), over classes each listed there. + * - The one known MathWorks class (isMathWorksClass) of an array mixing it with classes that are + * not: a user's class can derive from a MathWorks class and a MathWorks class never from a + * user's, so the MathWorks class is the base the user classes extend. A text dictionary MATLAB + * wrote names a Simulink.Signal subclass beside a Simulink.Signal `{"_array_class": + * "Simulink.Signal", …}`, and the binary reader read the binary twin of that array, in two + * dictionaries, as the subclass, the first element's class. MATLAB's class() of a + * dexdata.DerivedSignal beside a Simulink.Signal, read out of a .mat, is Simulink.Signal + * (test/fixtures/mcos/configset.truth.json). + * Of two MathWorks classes or more beside other classes, or of none, it names no base. + */ +export function heterogeneousBaseOf(classes: string[]): string | undefined { + if (classes.every((c) => c === CONFIG_COMPONENT || CONFIG_COMPONENTS.has(c))) { + return CONFIG_COMPONENT; + } + const known = new Set(classes.filter(isMathWorksClass)); + return known.size === 1 ? [...known][0] : undefined; +} + +/** + * Whether `cls` is a known MathWorks class: a class of a package whose classes this package + * already names as MathWorks' (MATHWORKS_PACKAGES). Simulink and mpt are the packages of every + * class the node registry, the schema and the Kind column name (NodeClassMap, schema/index, + * kindMap), and the two the test suite tells MATLAB's own objects from custom ones by; SlCovCC, + * Sldv and hdlcoderui are the packages of the config components CONFIG_COMPONENTS names. A class + * of any other package, MathWorks' or not (CoderTarget, SSC, simmechanics, AUTOSAR among them), + * is not known here, and counts as one that is not MathWorks' (heterogeneousBaseOf). + */ +function isMathWorksClass(cls: string): boolean { + const dot = cls.indexOf('.'); + return dot > 0 && MATHWORKS_PACKAGES.has(cls.slice(0, dot)); +} + +/** The packages of the known MathWorks classes (isMathWorksClass). */ +const MATHWORKS_PACKAGES: ReadonlySet = new Set(['Simulink', 'mpt', 'SlCovCC', 'Sldv', 'hdlcoderui']); + +/** + * The class the place of a property named `name` of an object of `ownerClass` names for an + * object array there, or undefined where it names none: Simulink.ConfigComponent, for the + * Components of a Simulink.ConfigSet or a Simulink.RTWCC, whatever components it holds. + * + * Every such array MATLAB wrote into a text dictionary is `_array_class` + * Simulink.ConfigComponent (30 of 30, in five dictionaries), and MATLAB's class() of one read + * out of a .mat is the same (test/fixtures/mcos/configset.truth.json). A binary dictionary and + * an MCOS blob name no base for it, and a binary dictionary can hold components no text + * dictionary has shown, so that CONFIG_COMPONENTS does not list them: a + * CoderTarget.SettingsController, in seven config sets of a corpus dictionary, and an + * SSC.SimscapeCC, in one of another. Those arrays used to read under their first component's + * class, a Simulink.SolverCC. + */ +export function componentsBaseOf(ownerClass: string | undefined, name: string | undefined): string | undefined { + return name === 'Components' && (ownerClass === 'Simulink.ConfigSet' || ownerClass === 'Simulink.RTWCC') ? CONFIG_COMPONENT : undefined; +} + +const CONFIG_COMPONENT = 'Simulink.ConfigComponent'; + +/** Each class MATLAB's text format lists as an element of a Simulink.ConfigComponent array (see heterogeneousBaseOf). */ +const CONFIG_COMPONENTS: ReadonlySet = new Set([ + 'Simulink.SolverCC', + 'Simulink.DataIOCC', + 'Simulink.OptimizationCC', + 'Simulink.DebuggingCC', + 'Simulink.HardwareCC', + 'Simulink.ModelReferenceCC', + 'Simulink.SFSimCC', + 'Simulink.RTWCC', + 'Simulink.CodeAppCC', + 'Simulink.GRTTargetCC', + 'Simulink.ERTTargetCC', + 'Simulink.STFCustomTargetCC', + 'SlCovCC.ConfigComp', + 'Sldv.ConfigComp', + 'hdlcoderui.hdlcc', +]); diff --git a/test/complexMcosValue.test.ts b/test/complexMcosValue.test.ts index 936f5b3c..c8f03895 100644 --- a/test/complexMcosValue.test.ts +++ b/test/complexMcosValue.test.ts @@ -43,7 +43,9 @@ describe('formatComplexNum spells one element', () => { // plain .mat variable holding complex(1/3, 0.1) shows. [1 / 3, 0.1, '0.3333333333333333+0.1i'], [2 / 3, -Math.PI, '0.6666666666666666-3.141592653589793i'], - // A single, widened to the double it is: the plain .mat variable's digits too. + // The double a single widens to is spelled as any double is. MatParser no longer hands + // one over (a single shows MATLAB's digits for it, C-033: matSingleDigits.test.ts), so a + // .mat's complex(single(0.1), 0.2) is 0.1+0.2i; this is the formatter on such a double. [Math.fround(0.1), Math.fround(0.2), '0.10000000149011612+0.20000000298023224i'], // String()'s exponent form, as every other number in this package prints. [1e-20, 2e21, '1e-20+2e+21i'], diff --git a/test/fixtures/mcos/configset.mat b/test/fixtures/mcos/configset.mat new file mode 100644 index 00000000..d78bcbe9 Binary files /dev/null and b/test/fixtures/mcos/configset.mat differ diff --git a/test/fixtures/mcos/configset.truth.json b/test/fixtures/mcos/configset.truth.json new file mode 100644 index 00000000..956f6027 --- /dev/null +++ b/test/fixtures/mcos/configset.truth.json @@ -0,0 +1,123 @@ +{ + "version": "27.1.0.3409468 (R2027a) Prerelease", + "release": "2027a", + "file": "configset.mat", + "names": [ + "cs", + "csErt", + "mixed" + ], + "paths": { + "cs": { + "class": "Simulink.ConfigSet", + "Components": { + "class": "Simulink.ConfigComponent", + "size": [ + 9, + 1 + ], + "elements": [ + "Simulink.SolverCC", + "Simulink.DataIOCC", + "Simulink.OptimizationCC", + "Simulink.DebuggingCC", + "Simulink.HardwareCC", + "Simulink.ModelReferenceCC", + "Simulink.SFSimCC", + "Simulink.RTWCC", + "SlCovCC.ConfigComp" + ], + "names": [ + "Solver", + "Data Import/Export", + "Optimization", + "Diagnostics", + "Hardware Implementation", + "Model Referencing", + "Simulation Target", + "Code Generation", + "Simulink Coverage" + ] + }, + "rtwIndex": 8, + "RTWComponents": { + "class": "Simulink.ConfigComponent", + "size": [ + 2, + 1 + ], + "elements": [ + "Simulink.CodeAppCC", + "Simulink.GRTTargetCC" + ], + "names": [ + "Code Appearance", + "Target" + ] + } + }, + "csErt": { + "class": "Simulink.ConfigSet", + "Components": { + "class": "Simulink.ConfigComponent", + "size": [ + 9, + 1 + ], + "elements": [ + "Simulink.SolverCC", + "Simulink.DataIOCC", + "Simulink.OptimizationCC", + "Simulink.DebuggingCC", + "Simulink.HardwareCC", + "Simulink.ModelReferenceCC", + "Simulink.SFSimCC", + "Simulink.RTWCC", + "SlCovCC.ConfigComp" + ], + "names": [ + "Solver", + "Data Import/Export", + "Optimization", + "Diagnostics", + "Hardware Implementation", + "Model Referencing", + "Simulation Target", + "Code Generation", + "Simulink Coverage" + ] + }, + "rtwIndex": 8, + "RTWComponents": { + "class": "Simulink.ConfigComponent", + "size": [ + 2, + 1 + ], + "elements": [ + "Simulink.CodeAppCC", + "Simulink.ERTTargetCC" + ], + "names": [ + "Code Appearance", + "Target" + ] + } + }, + "mixed": { + "class": "NdHolder", + "Tag": "mixed", + "Kids": { + "class": "Simulink.Signal", + "size": [ + 1, + 2 + ], + "elements": [ + "dexdata.DerivedSignal", + "Simulink.Signal" + ] + } + } + } +} \ No newline at end of file diff --git a/test/fixtures/mcos/make_configset_fixture.m b/test/fixtures/mcos/make_configset_fixture.m new file mode 100644 index 00000000..5a937a35 --- /dev/null +++ b/test/fixtures/mcos/make_configset_fixture.m @@ -0,0 +1,188 @@ +function make_configset_fixture(outDir) + % Copyright 2026 The MathWorks, Inc. + % Authors configset.mat: object arrays whose elements are of more than one class, held by + % an object's property, as MATLAB saves them in a .mat, with a truth file of what MATLAB + % says each array and each element is. Run: + % + % mw -using Bmain matlab -nodesktop -batch "cd('/test/fixtures/mcos'); make_configset_fixture" + % + % (One line, for the reason make_class_fixtures.m gives. The `cd` puts NdHolder.m and the + % +dexdata package on the path. Verify by the WROTE lines and the trailing + % MAKE_CONFIGSET_FIXTURE_DONE, not by the exit code; any FAIL line above it means the file + % says something other than what this header promises.) An optional argument names + % another folder to write into, so a run can be inspected before it replaces what is + % committed. + % + % Writes two files: + % configset.mat MATLAB's default `save` format (Level 5, not -v7.3), of + % cs a default Simulink.ConfigSet (grt.tlc), whose + % Components mixes a dozen component classes and + % whose RTWCC's Components is a Simulink.CodeAppCC + % beside a Simulink.GRTTargetCC + % csErt the same with SystemTargetFile ert.tlc, so its + % RTWCC's Components holds a Simulink.ERTTargetCC + % mixed an NdHolder whose Kids is a dexdata.DerivedSignal + % (a user's subclass of Simulink.Signal) beside a + % Simulink.Signal, the subclass first + % configset.truth.json MATLAB's answers, read back from the file with `load`: + % for each array, class() of the array and of each element + % in order, and each config component's Name + % + % WHY. Inside an MCOS object (a .mat, a model workspace) the reader named such an array + % after its FIRST element and dropped every other element's class: a config set's + % Components read as a Simulink.SolverCC array of ten SolverCCs, and a copy of the config + % set wrote every component as one. A binary dictionary's reader already keeps each + % element's class, and names the array by the rules MATLAB's text format shows + % (Simulink.ConfigComponent for a config set's Components, the one MathWorks class beside + % a user's subclass of it). No fixture held such an array before this one: the two the + % corpus holds are a customer's. + here = fileparts(mfilename('fullpath')); + if nargin < 1 || isempty(outDir) + outDir = here; + end + if ~isfolder(outDir) + mkdir(outDir); + end + failures = {}; + + [V, failures] = values(failures); + matPath = fullfile(outDir, 'configset.mat'); + if isfile(matPath), delete(matPath); end + % No version flag: the default, which is what a user's `save` writes. + save(matPath, '-struct', 'V'); + fid = fopen(matPath, 'r'); + hdr = fread(fid, [1 116], 'char=>char'); + fclose(fid); + if ~startsWith(hdr, 'MATLAB 5.0 MAT-file') + failures{end + 1} = sprintf('configset.mat header is "%s"', strtrim(hdr(1:min(end, 40)))); + end + failures = check_uncompressed(failures, V); + fprintf('WROTE configset.mat bytes=%d\n', dir(matPath).bytes); + + L = load(matPath); + T = struct(); + T.version = version; + T.release = version('-release'); + T.file = 'configset.mat'; + T.names = fieldnames(V)'; + T.paths = struct(); + names = fieldnames(V); + for i = 1:numel(names) + n = names{i}; + if ~isfield(L, n) + failures{end + 1} = sprintf('configset.mat does not hold %s', n); %#ok + continue + end + [r, failures] = record(n, L.(n), failures); + % What was read back is what was written, or the fixture is not what its name says. + [built, failures] = record(n, V.(n), failures); + if ~isequal(r, built) + failures{end + 1} = sprintf('configset.mat reads %s back as another array', n); %#ok + end + T.paths.(n) = r; + end + write_json(fullfile(outDir, 'configset.truth.json'), T); + + if isempty(failures) + fprintf('MAKE_CONFIGSET_FIXTURE_DONE\n'); + else + fprintf('FAIL %s\n', failures{:}); + fprintf('MAKE_CONFIGSET_FIXTURE_FAILED %d\n', numel(failures)); + end +end + +% --------------------------------------------------------------------------- +% The values +% --------------------------------------------------------------------------- + +function [V, failures] = values(failures) + V = struct(); + V.cs = Simulink.ConfigSet; + csErt = Simulink.ConfigSet; + try + set_param(csErt, 'SystemTargetFile', 'ert.tlc'); + catch err + failures{end + 1} = sprintf('csErt refused ert.tlc: %s', err.message); + end + V.csErt = csErt; + mixed = NdHolder; + mixed.Tag = 'mixed'; + try + mixed.Kids = [dexdata.DerivedSignal, Simulink.Signal]; + catch err + failures{end + 1} = sprintf('mixed refused [DerivedSignal, Signal]: %s', err.message); + end + V.mixed = mixed; +end + +% --------------------------------------------------------------------------- +% What MATLAB says each array is +% --------------------------------------------------------------------------- + +function [r, failures] = record(name, x, failures) + r = struct(); + r.class = class(x); + if isa(x, 'Simulink.ConfigSet') + [comps, failures] = components_of(name, x, failures); + r.Components = array_record(comps); + r.Components.names = arrayfun(@(c) c.Name, comps, 'UniformOutput', false); + rtw = find(arrayfun(@(c) isa(c, 'Simulink.RTWCC'), comps)); + if numel(rtw) ~= 1 + failures{end + 1} = sprintf('%s holds %d Simulink.RTWCC components', name, numel(rtw)); + return + end + r.rtwIndex = rtw; + [inner, failures] = components_of([name '.RTWCC'], comps(rtw), failures); + r.RTWComponents = array_record(inner); + r.RTWComponents.names = arrayfun(@(c) c.Name, inner, 'UniformOutput', false); + elseif isa(x, 'NdHolder') + r.Tag = x.Tag; + r.Kids = array_record(x.Kids); + end +end + +function [comps, failures] = components_of(name, x, failures) + % The Components property itself, the array MATLAB stores in the file. + try + comps = x.Components; + catch err + failures{end + 1} = sprintf('%s.Components is not readable: %s', name, err.message); + comps = []; + end +end + +function r = array_record(a) + r = struct(); + r.class = class(a); + r.size = size(a); + r.elements = arrayfun(@(e) class(e), a(:)', 'UniformOutput', false); +end + +% --------------------------------------------------------------------------- +% No account name, no machine path +% --------------------------------------------------------------------------- + +function failures = check_uncompressed(failures, V) + % The default save deflates each variable, so its bytes are searched as an uncompressed + % -v6 save of the same variables, which holds the same subsystem. + tmp = [tempname '.mat']; + cleanup = onCleanup(@() delete(tmp)); %#ok + save(tmp, '-struct', 'V', '-v6'); + fid = fopen(tmp, 'r'); + bytes = fread(fid, Inf, 'uint8=>char')'; + fclose(fid); + needles = {getenv('USER'), matlabroot, getenv('HOME')}; + for k = 1:numel(needles) + if ~isempty(needles{k}) && contains(bytes, needles{k}) + failures{end + 1} = sprintf('configset.mat holds "%s"', needles{k}); %#ok + end + end +end + +function write_json(path, data) + fid = fopen(path, 'w', 'n', 'UTF-8'); + fprintf(fid, '%s', jsonencode(data, 'PrettyPrint', true)); + fclose(fid); + [~, name, ext] = fileparts(path); + fprintf('WROTE %s%s bytes=%d\n', name, ext, dir(path).bytes); +end diff --git a/test/fixtures/mcos/make_typed_fixtures.m b/test/fixtures/mcos/make_typed_fixtures.m new file mode 100644 index 00000000..d2636411 --- /dev/null +++ b/test/fixtures/mcos/make_typed_fixtures.m @@ -0,0 +1,369 @@ +function make_typed_fixtures(outDir) + % Copyright 2026 The MathWorks, Inc. + % Authors the typed-MCOS fixtures: Simulink.Parameters whose Value is a REAL number of a + % class other than double (intN, uintN, logical, single), beside double controls and + % plain single variables, written by MATLAB into the four venues that can hold them. + % Run: + % + % mw -using Bmain matlab -nodesktop -batch "cd('/test/fixtures/mcos'); make_typed_fixtures" + % + % (One line, for the reason make_class_fixtures.m gives. Verify by the WROTE lines and + % the trailing MAKE_TYPED_FIXTURES_DONE, not by the exit code; any FAIL line above it + % means a fixture says something other than what this header promises.) An optional + % argument names another folder to write into, so a run can be inspected before it + % replaces what is committed. + % + % Writes five files: + % typed_objects.mat MATLAB's default `save` format (Level 5, not -v7.3) + % typed_ws.slx an empty model whose MODEL WORKSPACE (DataSource 'Model + % File', a part of the .slx itself) holds the same values + % typed_mcos.sldd a data dictionary, FileFormat 'uncompressed-text' + % typed_mcos_binary.sldd the same entries, FileFormat 'compressed-binary', but + % for sSingleSweep (names_in says why) + % typed_fixtures.truth.json MATLAB's answers about each, read back from the file: + % `load`, the model reopened with load_system, and each + % dictionary reopened with Simulink.data.dictionary.open + % + % WHY. Inside an MCOS object (a .mat, a model workspace, a binary dictionary's hex) the + % reader handed a real non-double numeric over as a bare number or list, which the node + % layer reads as a double: an int32 row Value showed class double, a logical row double, + % and a single showed the double it widens to, 3.299999952316284 for single(3.3). Both + % dictionaries hold the same Values typed, and show int32, logical and 3.3. Every name + % here is in every venue (but for sSingleSweep in the binary dictionary), so a venue that + % presents a value differently from another is caught by name. + % + % The truth, per venue, `paths.`: the class of what was read back, and for its + % numbers (a Parameter's Value, or the plain variable itself) `value`: class, size, + % mat2str(v, 'class') and `elements`, column-major, each MATLAB's own exact answer — + % num2str for an integer or logical element, num2hex for a single or a double, + % whose bits are the value, as no decimal spelling is. A value of more than 64 elements + % records its class, size and numel alone. Every venue's value is checked here to be the + % value written, class, size and bits (a FAIL otherwise). + % + % THE DIGITS. A dictionary holds MATLAB's own text for a single, so the sweep below is + % MATLAB's rule for that text, measured: `%.6g` where that is the same single, otherwise + % `%.9g`, and `%.10g` for realmax('single'), whose `%.9g` is past it. + % + % NO ACCOUNT NAME IN ANY FILE, as make_complex_fixtures.m: the model's Creator and + % ModifiedByFormat are a fixed word, USER is that word while a dictionary is written, + % and every file and every part of each package is searched for the account name. + here = fileparts(mfilename('fullpath')); + if nargin < 1 || isempty(outDir) + outDir = here; + end + if ~isfolder(outDir) + mkdir(outDir); + end + failures = {}; + + T = struct(); + T.version = version; + T.release = version('-release'); + T.names = catalog()'; + [T.mat, failures] = write_mat(outDir, failures); + [T.slx, failures] = write_slx(outDir, failures); + [T.text, failures] = write_sldd(outDir, failures, 'typed_mcos.sldd', 'uncompressed-text'); + [T.binary, failures] = write_sldd(outDir, failures, 'typed_mcos_binary.sldd', 'compressed-binary'); + write_json(fullfile(outDir, 'typed_fixtures.truth.json'), T); + + if isempty(failures) + fprintf('MAKE_TYPED_FIXTURES_DONE\n'); + else + fprintf('FAIL %s\n', failures{:}); + fprintf('MAKE_TYPED_FIXTURES_FAILED %d\n', numel(failures)); + end +end + +% --------------------------------------------------------------------------- +% The catalog: one name per value, the same names in every venue. +% --------------------------------------------------------------------------- + +function names = catalog() + names = fieldnames(values())'; +end + +% The names a venue holds: all of them, but for the sweep in the binary dictionary. +% binarySaveKeepsUnedited.test.ts edits every element of every binary fixture, one save +% per edit, and 4,082 of them took three minutes; MATLAB's binary text for the same 4,082 +% singles is its text one (measured when this was written: every element alike). +function names = names_in(format) + names = catalog(); + if strcmp(format, 'compressed-binary') + names = setdiff(names, {'sSingleSweep'}, 'stable'); + end +end + +function S = values() + S = struct(); + % Integers, every shape: scalar, row, column, matrix, N-D, and the two 64-bit + % extremes no double holds. + S.pInt8 = param(int8(-42)); + S.pInt32Row = param(int32([100 200 300 400])); + S.pInt32Col = param(int32([100; 200; 300])); + S.pUint8Mat = param(uint8([1 2; 3 4])); + S.pInt16Nd = param(int16(reshape(1:8, 2, 2, 2))); + S.pUint16Row = param(uint16([0 65535])); + S.pUint64Max = param(intmax('uint64')); + S.pInt64Min = param(intmin('int64')); + % Logical: the scalar was already a boolean everywhere; the row and the column are not. + S.pLogical = param(true); + S.pLogicalRow = param([true false true]); + S.pLogicalCol = param([true; false; true]); + % Single: decimals with no exact binary form, so the widened double shows, and values + % that are exact, which must not move. + S.pSingle = param(single(3.3)); + S.pSingleRow = param(single([1.1 2.2 3.3])); + S.pSingleCol = param(single([0.1; 0.2])); + S.pSingleThird = param(single(1/3)); + S.pSingleExact = param(single([0.5 16777216])); + % Double controls: their presentation must not change. + S.pDouble = param(3.3); + S.pDoubleRow = param([1.1 2.2 3.3]); + S.pDoubleCol = param([1; 2; 3]); + % Plain singles, no object around them. + S.sSingle = single(3.3); + S.sSingleRow = single([1.1 2.2 3.3]); + S.sSingleThird = single(1/3); + % Every 1048577th float32 bit pattern from the smallest subnormal to the largest finite + % one, each with its negation, then realmax and realmin: the digits the text dictionary + % spells every one of them with are MATLAB's rule for a single's text, which a single + % read out of MAT bytes is held to. + sweep = typecast(uint32(1):uint32(1048577):uint32(2139095040), 'single'); + S.sSingleSweep = [sweep, -sweep, realmax('single'), realmin('single')]; + % Singles whose nine-digit spelling is an exact decimal tie: 1000000.125 is halfway + % between 1000000.12 and 1000000.13. + S.sSingleTies = single([1000000.125 1000000.375 1000000.625 -1000000.125 2097151.875]); +end + +function p = param(v) + p = Simulink.Parameter; + p.Value = v; +end + +% --------------------------------------------------------------------------- +% The venues +% --------------------------------------------------------------------------- + +function [T, failures] = write_mat(outDir, failures) + matPath = fullfile(outDir, 'typed_objects.mat'); + if isfile(matPath), delete(matPath); end + vars = values(); + % No version flag: the default, which is what a user's `save` writes. The header is + % checked below. + save(matPath, '-struct', 'vars'); + clear vars + fid = fopen(matPath, 'r'); + hdr = fread(fid, [1 116], 'char=>char'); + fclose(fid); + want = 'MATLAB 5.0 MAT-file'; + if ~startsWith(hdr, want) + failures{end + 1} = sprintf('typed_objects.mat header is "%s"', strtrim(hdr(1:min(end, 40)))); + end + failures = check_no_user(failures, matPath, 'typed_objects.mat', getenv('USER')); + fprintf('WROTE typed_objects.mat bytes=%d\n', dir(matPath).bytes); + [T, failures] = measure('typed_objects.mat', load(matPath), failures); +end + +function [T, failures] = write_slx(outDir, failures) + % The model is named for the file it is saved to: save_system to another name renames + % the block diagram. + mdl = 'typed_ws'; + slxPath = fullfile(outDir, [mdl '.slx']); + if bdIsLoaded(mdl), close_system(mdl, 0); end + if isfile(slxPath), delete(slxPath); end + closer = onCleanup(@() close_if_loaded(mdl)); %#ok + + new_system(mdl); + set_param(mdl, 'Creator', 'fixture', 'ModifiedByFormat', 'fixture'); + ws = get_param(mdl, 'ModelWorkspace'); + if ~strcmp(ws.DataSource, 'Model File') + failures{end + 1} = sprintf('new model workspace DataSource is %s', ws.DataSource); + end + vars = values(); + names = fieldnames(vars); + for i = 1:numel(names) + assignin(ws, names{i}, vars.(names{i})); + end + save_system(mdl, slxPath); + close_system(mdl, 0); + clear vars ws + fprintf('WROTE %s.slx bytes=%d\n', mdl, dir(slxPath).bytes); + failures = zip_no_user(slxPath, [mdl '.slx'], failures, getenv('USER')); + + load_system(slxPath); + ws = get_param(mdl, 'ModelWorkspace'); + dataSource = ws.DataSource; + V = struct(); + for i = 1:numel(names) + V.(names{i}) = getVariable(ws, names{i}); + end + clear ws + close_system(mdl, 0); + [T, failures] = measure([mdl '.slx'], V, failures); + T.dataSource = dataSource; +end + +function close_if_loaded(mdl) + if bdIsLoaded(mdl), close_system(mdl, 0); end +end + +function [T, failures] = write_sldd(outDir, failures, ddName, format) + % MATLAB keys open dictionaries by FILE NAME alone, so everything is closed first. + ddPath = fullfile(outDir, ddName); + Simulink.data.dictionary.closeAll('-discard'); + if isfile(ddPath), delete(ddPath); end + + oldUser = getenv('USER'); + setenv('USER', 'fixture'); + restoreUser = onCleanup(@() setenv('USER', oldUser)); + + vars = values(); + dd = Simulink.data.dictionary.create(ddPath); + ds = getSection(dd, 'Design Data'); + names = names_in(format); + for i = 1:numel(names) + try + addEntry(ds, names{i}, vars.(names{i})); + catch err + failures{end + 1} = sprintf('%s refused entry %s: %s', ddName, names{i}, err.message); %#ok + end + end + % Before saveChanges, which is what decides the bytes. + dd.FileFormat = format; + saveChanges(dd); + clear ds vars + close(dd); + clear dd + Simulink.data.dictionary.closeAll('-discard'); + clear restoreUser + if ~strcmp(getenv('USER'), oldUser) + failures{end + 1} = 'USER was not restored after the dictionary was written'; + end + if strcmp(format, 'compressed-binary') + failures = zip_no_user(ddPath, ddName, failures, oldUser); + else + failures = check_no_user(failures, ddPath, ddName, oldUser); + end + fprintf('WROTE %s bytes=%d\n', ddName, dir(ddPath).bytes); + + dd = Simulink.data.dictionary.open(ddPath); + fileFormat = dd.FileFormat; + if ~strcmp(fileFormat, format) + failures{end + 1} = sprintf('%s reopens as FileFormat %s, written as %s', ddName, fileFormat, format); + end + ds = getSection(dd, 'Design Data'); + V = struct(); + for i = 1:numel(names) + V.(names{i}) = getValue(getEntry(ds, names{i})); + end + clear ds + close(dd); + clear dd + Simulink.data.dictionary.closeAll('-discard'); + [T, failures] = measure(ddName, V, failures, names); + T.fileFormat = fileFormat; +end + +% --------------------------------------------------------------------------- +% Measuring what was read back +% --------------------------------------------------------------------------- + +function [T, failures] = measure(file, V, failures, names) + if nargin < 4 + names = catalog(); + end + T = struct(); + T.file = file; + T.paths = struct(); + built = values(); + for i = 1:numel(names) + n = names{i}; + if ~isfield(V, n) + failures{end + 1} = sprintf('%s does not hold %s', file, n); %#ok + continue + end + x = V.(n); + r = struct(); + r.class = class(x); + if isa(x, 'Simulink.Parameter') + v = x.Value; + b = built.(n).Value; + else + v = x; + b = built.(n); + end + r.value = value_record(v); + % What was read back is what was written, class and bits, or the fixture is not + % the value its name says. + if ~strcmp(class(v), class(b)) || ~isequal(size(v), size(b)) || ~isequal(v, b) + failures{end + 1} = sprintf('%s reads %s back as %s %s', file, n, class(v), mat2str(size(v))); %#ok + end + T.paths.(n) = r; + end +end + +function r = value_record(v) + r = struct(); + r.class = class(v); + r.size = size(v); + % A long value's elements are its bits in the .mat, which `measure` holds every other + % venue to; listing them would make this file the size of the sweep. + if numel(v) > 64 + r.numel = numel(v); + return + end + try + r.mat2str = mat2str(v, 'class'); + catch e + r.mat2str_error = e.message; + end + flat = v(:)'; + e = cell(1, numel(flat)); + for k = 1:numel(flat) + x = flat(k); + if islogical(x) || isinteger(x) + % num2str, not sprintf('%d'): sprintf answers 1.844674e+19 for intmax('uint64'). + e{k} = num2str(x); + else + e{k} = num2hex(x); + end + end + r.elements = e; +end + +% --------------------------------------------------------------------------- +% No account name +% --------------------------------------------------------------------------- + +function failures = check_no_user(failures, path, label, user) + if isempty(user), return, end + fid = fopen(path, 'r'); + bytes = fread(fid, Inf, 'uint8=>char')'; + fclose(fid); + if contains(bytes, user) + failures{end + 1} = sprintf('%s names the account that saved it', label); + end +end + +function failures = zip_no_user(zipPath, label, failures, user) + % A zip: a search of its raw bytes cannot see inside a deflated part, so every part + % is searched unpacked, in a scratch folder removed again before this returns. + tmp = tempname; + mkdir(tmp); + cleanup = onCleanup(@() rmdir(tmp, 's')); %#ok + files = unzip(zipPath, tmp); + for k = 1:numel(files) + if isfile(files{k}) + [~, partName, partExt] = fileparts(files{k}); + failures = check_no_user(failures, files{k}, sprintf('%s part %s%s', label, partName, partExt), user); + end + end +end + +function write_json(path, data) + fid = fopen(path, 'w', 'n', 'UTF-8'); + fprintf(fid, '%s', jsonencode(data, 'PrettyPrint', true)); + fclose(fid); + [~, name, ext] = fileparts(path); + fprintf('WROTE %s%s bytes=%d\n', name, ext, dir(path).bytes); +end diff --git a/test/fixtures/mcos/typed_fixtures.truth.json b/test/fixtures/mcos/typed_fixtures.truth.json new file mode 100644 index 00000000..11e90dfb --- /dev/null +++ b/test/fixtures/mcos/typed_fixtures.truth.json @@ -0,0 +1,1514 @@ +{ + "version": "27.1.0.3409468 (R2027a) Prerelease", + "release": "2027a", + "names": [ + "pInt8", + "pInt32Row", + "pInt32Col", + "pUint8Mat", + "pInt16Nd", + "pUint16Row", + "pUint64Max", + "pInt64Min", + "pLogical", + "pLogicalRow", + "pLogicalCol", + "pSingle", + "pSingleRow", + "pSingleCol", + "pSingleThird", + "pSingleExact", + "pDouble", + "pDoubleRow", + "pDoubleCol", + "sSingle", + "sSingleRow", + "sSingleThird", + "sSingleSweep", + "sSingleTies" + ], + "mat": { + "file": "typed_objects.mat", + "paths": { + "pInt8": { + "class": "Simulink.Parameter", + "value": { + "class": "int8", + "size": [ + 1, + 1 + ], + "mat2str": "int8(-42)", + "elements": [ + "-42" + ] + } + }, + "pInt32Row": { + "class": "Simulink.Parameter", + "value": { + "class": "int32", + "size": [ + 1, + 4 + ], + "mat2str": "int32([100 200 300 400])", + "elements": [ + "100", + "200", + "300", + "400" + ] + } + }, + "pInt32Col": { + "class": "Simulink.Parameter", + "value": { + "class": "int32", + "size": [ + 3, + 1 + ], + "mat2str": "int32([100;200;300])", + "elements": [ + "100", + "200", + "300" + ] + } + }, + "pUint8Mat": { + "class": "Simulink.Parameter", + "value": { + "class": "uint8", + "size": [ + 2, + 2 + ], + "mat2str": "uint8([1 2;3 4])", + "elements": [ + "1", + "3", + "2", + "4" + ] + } + }, + "pInt16Nd": { + "class": "Simulink.Parameter", + "value": { + "class": "int16", + "size": [ + 2, + 2, + 2 + ], + "mat2str_error": "Input matrix must be 2-D.", + "elements": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8" + ] + } + }, + "pUint16Row": { + "class": "Simulink.Parameter", + "value": { + "class": "uint16", + "size": [ + 1, + 2 + ], + "mat2str": "uint16([0 65535])", + "elements": [ + "0", + "65535" + ] + } + }, + "pUint64Max": { + "class": "Simulink.Parameter", + "value": { + "class": "uint64", + "size": [ + 1, + 1 + ], + "mat2str": "uint64(18446744073709551615)", + "elements": [ + "18446744073709551615" + ] + } + }, + "pInt64Min": { + "class": "Simulink.Parameter", + "value": { + "class": "int64", + "size": [ + 1, + 1 + ], + "mat2str": "int64(-9223372036854775808)", + "elements": [ + "-9223372036854775808" + ] + } + }, + "pLogical": { + "class": "Simulink.Parameter", + "value": { + "class": "logical", + "size": [ + 1, + 1 + ], + "mat2str": "logical(true)", + "elements": [ + "1" + ] + } + }, + "pLogicalRow": { + "class": "Simulink.Parameter", + "value": { + "class": "logical", + "size": [ + 1, + 3 + ], + "mat2str": "logical([true false true])", + "elements": [ + "1", + "0", + "1" + ] + } + }, + "pLogicalCol": { + "class": "Simulink.Parameter", + "value": { + "class": "logical", + "size": [ + 3, + 1 + ], + "mat2str": "logical([true;false;true])", + "elements": [ + "1", + "0", + "1" + ] + } + }, + "pSingle": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(3.29999995231628)", + "elements": [ + "40533333" + ] + } + }, + "pSingleRow": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 3 + ], + "mat2str": "single([1.10000002384186 2.20000004768372 3.29999995231628])", + "elements": [ + "3f8ccccd", + "400ccccd", + "40533333" + ] + } + }, + "pSingleCol": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 2, + 1 + ], + "mat2str": "single([0.100000001490116;0.200000002980232])", + "elements": [ + "3dcccccd", + "3e4ccccd" + ] + } + }, + "pSingleThird": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(0.333333343267441)", + "elements": [ + "3eaaaaab" + ] + } + }, + "pSingleExact": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 2 + ], + "mat2str": "single([0.5 16777216])", + "elements": [ + "3f000000", + "4b800000" + ] + } + }, + "pDouble": { + "class": "Simulink.Parameter", + "value": { + "class": "double", + "size": [ + 1, + 1 + ], + "mat2str": "double(3.3)", + "elements": [ + "400a666666666666" + ] + } + }, + "pDoubleRow": { + "class": "Simulink.Parameter", + "value": { + "class": "double", + "size": [ + 1, + 3 + ], + "mat2str": "double([1.1 2.2 3.3])", + "elements": [ + "3ff199999999999a", + "400199999999999a", + "400a666666666666" + ] + } + }, + "pDoubleCol": { + "class": "Simulink.Parameter", + "value": { + "class": "double", + "size": [ + 3, + 1 + ], + "mat2str": "double([1;2;3])", + "elements": [ + "3ff0000000000000", + "4000000000000000", + "4008000000000000" + ] + } + }, + "sSingle": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(3.29999995231628)", + "elements": [ + "40533333" + ] + } + }, + "sSingleRow": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 3 + ], + "mat2str": "single([1.10000002384186 2.20000004768372 3.29999995231628])", + "elements": [ + "3f8ccccd", + "400ccccd", + "40533333" + ] + } + }, + "sSingleThird": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(0.333333343267441)", + "elements": [ + "3eaaaaab" + ] + } + }, + "sSingleSweep": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 4082 + ], + "numel": 4082 + } + }, + "sSingleTies": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 5 + ], + "mat2str": "single([1000000.125 1000000.375 1000000.625 -1000000.125 2097151.875])", + "elements": [ + "49742402", + "49742406", + "4974240a", + "c9742402", + "49ffffff" + ] + } + } + } + }, + "slx": { + "file": "typed_ws.slx", + "paths": { + "pInt8": { + "class": "Simulink.Parameter", + "value": { + "class": "int8", + "size": [ + 1, + 1 + ], + "mat2str": "int8(-42)", + "elements": [ + "-42" + ] + } + }, + "pInt32Row": { + "class": "Simulink.Parameter", + "value": { + "class": "int32", + "size": [ + 1, + 4 + ], + "mat2str": "int32([100 200 300 400])", + "elements": [ + "100", + "200", + "300", + "400" + ] + } + }, + "pInt32Col": { + "class": "Simulink.Parameter", + "value": { + "class": "int32", + "size": [ + 3, + 1 + ], + "mat2str": "int32([100;200;300])", + "elements": [ + "100", + "200", + "300" + ] + } + }, + "pUint8Mat": { + "class": "Simulink.Parameter", + "value": { + "class": "uint8", + "size": [ + 2, + 2 + ], + "mat2str": "uint8([1 2;3 4])", + "elements": [ + "1", + "3", + "2", + "4" + ] + } + }, + "pInt16Nd": { + "class": "Simulink.Parameter", + "value": { + "class": "int16", + "size": [ + 2, + 2, + 2 + ], + "mat2str_error": "Input matrix must be 2-D.", + "elements": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8" + ] + } + }, + "pUint16Row": { + "class": "Simulink.Parameter", + "value": { + "class": "uint16", + "size": [ + 1, + 2 + ], + "mat2str": "uint16([0 65535])", + "elements": [ + "0", + "65535" + ] + } + }, + "pUint64Max": { + "class": "Simulink.Parameter", + "value": { + "class": "uint64", + "size": [ + 1, + 1 + ], + "mat2str": "uint64(18446744073709551615)", + "elements": [ + "18446744073709551615" + ] + } + }, + "pInt64Min": { + "class": "Simulink.Parameter", + "value": { + "class": "int64", + "size": [ + 1, + 1 + ], + "mat2str": "int64(-9223372036854775808)", + "elements": [ + "-9223372036854775808" + ] + } + }, + "pLogical": { + "class": "Simulink.Parameter", + "value": { + "class": "logical", + "size": [ + 1, + 1 + ], + "mat2str": "logical(true)", + "elements": [ + "1" + ] + } + }, + "pLogicalRow": { + "class": "Simulink.Parameter", + "value": { + "class": "logical", + "size": [ + 1, + 3 + ], + "mat2str": "logical([true false true])", + "elements": [ + "1", + "0", + "1" + ] + } + }, + "pLogicalCol": { + "class": "Simulink.Parameter", + "value": { + "class": "logical", + "size": [ + 3, + 1 + ], + "mat2str": "logical([true;false;true])", + "elements": [ + "1", + "0", + "1" + ] + } + }, + "pSingle": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(3.29999995231628)", + "elements": [ + "40533333" + ] + } + }, + "pSingleRow": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 3 + ], + "mat2str": "single([1.10000002384186 2.20000004768372 3.29999995231628])", + "elements": [ + "3f8ccccd", + "400ccccd", + "40533333" + ] + } + }, + "pSingleCol": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 2, + 1 + ], + "mat2str": "single([0.100000001490116;0.200000002980232])", + "elements": [ + "3dcccccd", + "3e4ccccd" + ] + } + }, + "pSingleThird": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(0.333333343267441)", + "elements": [ + "3eaaaaab" + ] + } + }, + "pSingleExact": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 2 + ], + "mat2str": "single([0.5 16777216])", + "elements": [ + "3f000000", + "4b800000" + ] + } + }, + "pDouble": { + "class": "Simulink.Parameter", + "value": { + "class": "double", + "size": [ + 1, + 1 + ], + "mat2str": "double(3.3)", + "elements": [ + "400a666666666666" + ] + } + }, + "pDoubleRow": { + "class": "Simulink.Parameter", + "value": { + "class": "double", + "size": [ + 1, + 3 + ], + "mat2str": "double([1.1 2.2 3.3])", + "elements": [ + "3ff199999999999a", + "400199999999999a", + "400a666666666666" + ] + } + }, + "pDoubleCol": { + "class": "Simulink.Parameter", + "value": { + "class": "double", + "size": [ + 3, + 1 + ], + "mat2str": "double([1;2;3])", + "elements": [ + "3ff0000000000000", + "4000000000000000", + "4008000000000000" + ] + } + }, + "sSingle": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(3.29999995231628)", + "elements": [ + "40533333" + ] + } + }, + "sSingleRow": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 3 + ], + "mat2str": "single([1.10000002384186 2.20000004768372 3.29999995231628])", + "elements": [ + "3f8ccccd", + "400ccccd", + "40533333" + ] + } + }, + "sSingleThird": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(0.333333343267441)", + "elements": [ + "3eaaaaab" + ] + } + }, + "sSingleSweep": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 4082 + ], + "numel": 4082 + } + }, + "sSingleTies": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 5 + ], + "mat2str": "single([1000000.125 1000000.375 1000000.625 -1000000.125 2097151.875])", + "elements": [ + "49742402", + "49742406", + "4974240a", + "c9742402", + "49ffffff" + ] + } + } + }, + "dataSource": "Model File" + }, + "text": { + "file": "typed_mcos.sldd", + "paths": { + "pInt8": { + "class": "Simulink.Parameter", + "value": { + "class": "int8", + "size": [ + 1, + 1 + ], + "mat2str": "int8(-42)", + "elements": [ + "-42" + ] + } + }, + "pInt32Row": { + "class": "Simulink.Parameter", + "value": { + "class": "int32", + "size": [ + 1, + 4 + ], + "mat2str": "int32([100 200 300 400])", + "elements": [ + "100", + "200", + "300", + "400" + ] + } + }, + "pInt32Col": { + "class": "Simulink.Parameter", + "value": { + "class": "int32", + "size": [ + 3, + 1 + ], + "mat2str": "int32([100;200;300])", + "elements": [ + "100", + "200", + "300" + ] + } + }, + "pUint8Mat": { + "class": "Simulink.Parameter", + "value": { + "class": "uint8", + "size": [ + 2, + 2 + ], + "mat2str": "uint8([1 2;3 4])", + "elements": [ + "1", + "3", + "2", + "4" + ] + } + }, + "pInt16Nd": { + "class": "Simulink.Parameter", + "value": { + "class": "int16", + "size": [ + 2, + 2, + 2 + ], + "mat2str_error": "Input matrix must be 2-D.", + "elements": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8" + ] + } + }, + "pUint16Row": { + "class": "Simulink.Parameter", + "value": { + "class": "uint16", + "size": [ + 1, + 2 + ], + "mat2str": "uint16([0 65535])", + "elements": [ + "0", + "65535" + ] + } + }, + "pUint64Max": { + "class": "Simulink.Parameter", + "value": { + "class": "uint64", + "size": [ + 1, + 1 + ], + "mat2str": "uint64(18446744073709551615)", + "elements": [ + "18446744073709551615" + ] + } + }, + "pInt64Min": { + "class": "Simulink.Parameter", + "value": { + "class": "int64", + "size": [ + 1, + 1 + ], + "mat2str": "int64(-9223372036854775808)", + "elements": [ + "-9223372036854775808" + ] + } + }, + "pLogical": { + "class": "Simulink.Parameter", + "value": { + "class": "logical", + "size": [ + 1, + 1 + ], + "mat2str": "logical(true)", + "elements": [ + "1" + ] + } + }, + "pLogicalRow": { + "class": "Simulink.Parameter", + "value": { + "class": "logical", + "size": [ + 1, + 3 + ], + "mat2str": "logical([true false true])", + "elements": [ + "1", + "0", + "1" + ] + } + }, + "pLogicalCol": { + "class": "Simulink.Parameter", + "value": { + "class": "logical", + "size": [ + 3, + 1 + ], + "mat2str": "logical([true;false;true])", + "elements": [ + "1", + "0", + "1" + ] + } + }, + "pSingle": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(3.29999995231628)", + "elements": [ + "40533333" + ] + } + }, + "pSingleRow": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 3 + ], + "mat2str": "single([1.10000002384186 2.20000004768372 3.29999995231628])", + "elements": [ + "3f8ccccd", + "400ccccd", + "40533333" + ] + } + }, + "pSingleCol": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 2, + 1 + ], + "mat2str": "single([0.100000001490116;0.200000002980232])", + "elements": [ + "3dcccccd", + "3e4ccccd" + ] + } + }, + "pSingleThird": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(0.333333343267441)", + "elements": [ + "3eaaaaab" + ] + } + }, + "pSingleExact": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 2 + ], + "mat2str": "single([0.5 16777216])", + "elements": [ + "3f000000", + "4b800000" + ] + } + }, + "pDouble": { + "class": "Simulink.Parameter", + "value": { + "class": "double", + "size": [ + 1, + 1 + ], + "mat2str": "double(3.3)", + "elements": [ + "400a666666666666" + ] + } + }, + "pDoubleRow": { + "class": "Simulink.Parameter", + "value": { + "class": "double", + "size": [ + 1, + 3 + ], + "mat2str": "double([1.1 2.2 3.3])", + "elements": [ + "3ff199999999999a", + "400199999999999a", + "400a666666666666" + ] + } + }, + "pDoubleCol": { + "class": "Simulink.Parameter", + "value": { + "class": "double", + "size": [ + 3, + 1 + ], + "mat2str": "double([1;2;3])", + "elements": [ + "3ff0000000000000", + "4000000000000000", + "4008000000000000" + ] + } + }, + "sSingle": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(3.29999995231628)", + "elements": [ + "40533333" + ] + } + }, + "sSingleRow": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 3 + ], + "mat2str": "single([1.10000002384186 2.20000004768372 3.29999995231628])", + "elements": [ + "3f8ccccd", + "400ccccd", + "40533333" + ] + } + }, + "sSingleThird": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(0.333333343267441)", + "elements": [ + "3eaaaaab" + ] + } + }, + "sSingleSweep": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 4082 + ], + "numel": 4082 + } + }, + "sSingleTies": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 5 + ], + "mat2str": "single([1000000.125 1000000.375 1000000.625 -1000000.125 2097151.875])", + "elements": [ + "49742402", + "49742406", + "4974240a", + "c9742402", + "49ffffff" + ] + } + } + }, + "fileFormat": "uncompressed-text" + }, + "binary": { + "file": "typed_mcos_binary.sldd", + "paths": { + "pInt8": { + "class": "Simulink.Parameter", + "value": { + "class": "int8", + "size": [ + 1, + 1 + ], + "mat2str": "int8(-42)", + "elements": [ + "-42" + ] + } + }, + "pInt32Row": { + "class": "Simulink.Parameter", + "value": { + "class": "int32", + "size": [ + 1, + 4 + ], + "mat2str": "int32([100 200 300 400])", + "elements": [ + "100", + "200", + "300", + "400" + ] + } + }, + "pInt32Col": { + "class": "Simulink.Parameter", + "value": { + "class": "int32", + "size": [ + 3, + 1 + ], + "mat2str": "int32([100;200;300])", + "elements": [ + "100", + "200", + "300" + ] + } + }, + "pUint8Mat": { + "class": "Simulink.Parameter", + "value": { + "class": "uint8", + "size": [ + 2, + 2 + ], + "mat2str": "uint8([1 2;3 4])", + "elements": [ + "1", + "3", + "2", + "4" + ] + } + }, + "pInt16Nd": { + "class": "Simulink.Parameter", + "value": { + "class": "int16", + "size": [ + 2, + 2, + 2 + ], + "mat2str_error": "Input matrix must be 2-D.", + "elements": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8" + ] + } + }, + "pUint16Row": { + "class": "Simulink.Parameter", + "value": { + "class": "uint16", + "size": [ + 1, + 2 + ], + "mat2str": "uint16([0 65535])", + "elements": [ + "0", + "65535" + ] + } + }, + "pUint64Max": { + "class": "Simulink.Parameter", + "value": { + "class": "uint64", + "size": [ + 1, + 1 + ], + "mat2str": "uint64(18446744073709551615)", + "elements": [ + "18446744073709551615" + ] + } + }, + "pInt64Min": { + "class": "Simulink.Parameter", + "value": { + "class": "int64", + "size": [ + 1, + 1 + ], + "mat2str": "int64(-9223372036854775808)", + "elements": [ + "-9223372036854775808" + ] + } + }, + "pLogical": { + "class": "Simulink.Parameter", + "value": { + "class": "logical", + "size": [ + 1, + 1 + ], + "mat2str": "logical(true)", + "elements": [ + "1" + ] + } + }, + "pLogicalRow": { + "class": "Simulink.Parameter", + "value": { + "class": "logical", + "size": [ + 1, + 3 + ], + "mat2str": "logical([true false true])", + "elements": [ + "1", + "0", + "1" + ] + } + }, + "pLogicalCol": { + "class": "Simulink.Parameter", + "value": { + "class": "logical", + "size": [ + 3, + 1 + ], + "mat2str": "logical([true;false;true])", + "elements": [ + "1", + "0", + "1" + ] + } + }, + "pSingle": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(3.29999995231628)", + "elements": [ + "40533333" + ] + } + }, + "pSingleRow": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 3 + ], + "mat2str": "single([1.10000002384186 2.20000004768372 3.29999995231628])", + "elements": [ + "3f8ccccd", + "400ccccd", + "40533333" + ] + } + }, + "pSingleCol": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 2, + 1 + ], + "mat2str": "single([0.100000001490116;0.200000002980232])", + "elements": [ + "3dcccccd", + "3e4ccccd" + ] + } + }, + "pSingleThird": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(0.333333343267441)", + "elements": [ + "3eaaaaab" + ] + } + }, + "pSingleExact": { + "class": "Simulink.Parameter", + "value": { + "class": "single", + "size": [ + 1, + 2 + ], + "mat2str": "single([0.5 16777216])", + "elements": [ + "3f000000", + "4b800000" + ] + } + }, + "pDouble": { + "class": "Simulink.Parameter", + "value": { + "class": "double", + "size": [ + 1, + 1 + ], + "mat2str": "double(3.3)", + "elements": [ + "400a666666666666" + ] + } + }, + "pDoubleRow": { + "class": "Simulink.Parameter", + "value": { + "class": "double", + "size": [ + 1, + 3 + ], + "mat2str": "double([1.1 2.2 3.3])", + "elements": [ + "3ff199999999999a", + "400199999999999a", + "400a666666666666" + ] + } + }, + "pDoubleCol": { + "class": "Simulink.Parameter", + "value": { + "class": "double", + "size": [ + 3, + 1 + ], + "mat2str": "double([1;2;3])", + "elements": [ + "3ff0000000000000", + "4000000000000000", + "4008000000000000" + ] + } + }, + "sSingle": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(3.29999995231628)", + "elements": [ + "40533333" + ] + } + }, + "sSingleRow": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 3 + ], + "mat2str": "single([1.10000002384186 2.20000004768372 3.29999995231628])", + "elements": [ + "3f8ccccd", + "400ccccd", + "40533333" + ] + } + }, + "sSingleThird": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 1 + ], + "mat2str": "single(0.333333343267441)", + "elements": [ + "3eaaaaab" + ] + } + }, + "sSingleTies": { + "class": "single", + "value": { + "class": "single", + "size": [ + 1, + 5 + ], + "mat2str": "single([1000000.125 1000000.375 1000000.625 -1000000.125 2097151.875])", + "elements": [ + "49742402", + "49742406", + "4974240a", + "c9742402", + "49ffffff" + ] + } + } + }, + "fileFormat": "compressed-binary" + } +} \ No newline at end of file diff --git a/test/fixtures/mcos/typed_mcos.sldd b/test/fixtures/mcos/typed_mcos.sldd new file mode 100644 index 00000000..f7fe763a --- /dev/null +++ b/test/fixtures/mcos/typed_mcos.sldd @@ -0,0 +1,1028 @@ +{ + "__MW_TEXT_COREPROPERTIES__": { + "release": "R2027a" + }, + "__MW_TEXT_PARTS__": { + "__MW_TEXT_PART__/data/chunk0": { + "__MW_TEXT_content": { + "entries": [ + { + "name": "pDouble", + "metadata": { + "uuid": "8375cae0-c8c1-4a33-98c2-698c96706d83", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.628279", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "Dimensions": [ + 1, + 1 + ], + "Value": 3.3 + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pDoubleCol", + "metadata": { + "uuid": "b9d92f99-5489-4402-b870-6a42583b0dd2", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.628727", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "Dimensions": [ + 3, + 1 + ], + "Value": { + "_type": "double", + "_value": "Matrix(3,1)\n[1.0, 2.0, 3.0]" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pDoubleRow", + "metadata": { + "uuid": "51e278df-b158-4e38-b2a8-b90fc28e1928", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.628485", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "Dimensions": [ + 1, + 3 + ], + "Value": [ + 1.1, + 2.2, + 3.3 + ] + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pInt16Nd", + "metadata": { + "uuid": "709b4bfa-f936-4ab7-a367-1090bf8a4601", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.623976", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "int16", + "Dimensions": [ + 2, + 2, + 2 + ], + "Value": { + "_type": "cdata", + "_value": " %)30 . 2 8 ( \"@ % # ( \" @ ! , 0 0 \" , ! % 8 !P ( \u0000\u0000\u0000" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pInt32Col", + "metadata": { + "uuid": "b082d3cc-0168-412e-b9e3-55b23e0cc2f9", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.623420", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "int32", + "Dimensions": [ + 3, + 1 + ], + "Value": { + "_type": "int32", + "_value": "Matrix(3,1)\n[100, 200, 300]" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pInt32Row", + "metadata": { + "uuid": "d778ef9d-cc7e-4709-bc96-5e12cf917a24", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.623086", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "int32", + "Dimensions": [ + 1, + 4 + ], + "Value": { + "_type": "int32", + "_value": "[100, 200, 300, 400]" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pInt64Min", + "metadata": { + "uuid": "697ac370-62a7-40ae-a834-ab8e6af3733b", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.624772", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "int64", + "Dimensions": [ + 1, + 1 + ], + "Value": { + "_type": "int64", + "_value": "-9223372036854775808" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pInt8", + "metadata": { + "uuid": "d9e7a752-e1a7-4293-9db4-edbfd70d9b90", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.620884", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "int8", + "Dimensions": [ + 1, + 1 + ], + "Value": { + "_type": "int8", + "_value": "-42" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pLogical", + "metadata": { + "uuid": "89d5a89a-7d55-488f-b916-2557dbb761d1", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.625095", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "boolean", + "Dimensions": [ + 1, + 1 + ], + "Value": true + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pLogicalCol", + "metadata": { + "uuid": "94577909-c8a4-474e-a0d3-ba79eece3e59", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.625533", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "boolean", + "Dimensions": [ + 3, + 1 + ], + "Value": { + "_type": "logical", + "_value": "Matrix(3,1)\n[1, 0, 1]" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pLogicalRow", + "metadata": { + "uuid": "17e5e125-ef54-4796-9e76-2ddb2499d351", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.625295", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "boolean", + "Dimensions": [ + 1, + 3 + ], + "Value": { + "_type": "logical", + "_value": "[1, 0, 1]" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pSingle", + "metadata": { + "uuid": "c90d46c6-b032-40d7-ab9c-da111a053643", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.626140", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "single", + "Dimensions": [ + 1, + 1 + ], + "Value": { + "_type": "single", + "_value": "3.3F" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pSingleCol", + "metadata": { + "uuid": "ea566eaa-9396-4b1a-aab4-b99eff60ed6a", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.626727", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "single", + "Dimensions": [ + 2, + 1 + ], + "Value": { + "_type": "single", + "_value": "Matrix(2,1)\n[0.1F, 0.2F]" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pSingleExact", + "metadata": { + "uuid": "f019d515-5c71-4d8c-98b7-0ca3942393a3", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.628055", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "single", + "Dimensions": [ + 1, + 2 + ], + "Value": { + "_type": "single", + "_value": "[0.5F, 16777216.0F]" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pSingleRow", + "metadata": { + "uuid": "5e0dfa3d-6ecb-4281-982b-844a0789d20b", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.626415", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "single", + "Dimensions": [ + 1, + 3 + ], + "Value": { + "_type": "single", + "_value": "[1.1F, 2.2F, 3.3F]" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pSingleThird", + "metadata": { + "uuid": "11cb9878-e4f0-4b8d-957e-31714a2f070e", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.627187", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "single", + "Dimensions": [ + 1, + 1 + ], + "Value": { + "_type": "single", + "_value": "0.333333343F" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pUint16Row", + "metadata": { + "uuid": "d4de8f04-bc2d-4141-97cd-dd44c881bec8", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.624267", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "uint16", + "Dimensions": [ + 1, + 2 + ], + "Value": { + "_type": "uint16", + "_value": "[0U, 65535U]" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pUint64Max", + "metadata": { + "uuid": "b730247d-85e1-40c2-92bc-7bc052c01a26", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.624491", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "uint64", + "Dimensions": [ + 1, + 1 + ], + "Value": { + "_type": "uint64", + "_value": "18446744073709551615U" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "pUint8Mat", + "metadata": { + "uuid": "aba95cfe-111a-4ba2-a017-dea8d7744cac", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.623724", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_array_class": "Simulink.Parameter", + "_dimensions": [ + 1, + 1 + ], + "_elements": [ + { + "_id": "1", + "_properties": { + "CoderInfo": { + "_id": "2", + "_object_class": "Simulink.CoderInfo", + "_properties": { + "CSCPackageName": "Simulink", + "CustomAttributes": { + "_id": "3", + "_object_class": "SimulinkCSC.AttribClass_Simulink_Default", + "_properties": {} + }, + "CustomStorageClass": "Default", + "ParameterOrSignal": "Parameter", + "StorageClass": "Auto" + } + }, + "Complexity": "real", + "DataType": "uint8", + "Dimensions": [ + 2, + 2 + ], + "Value": { + "_type": "uint8", + "_value": "Matrix(2,2)\n[[1U, 2U]; [3U, 4U]]" + } + } + } + ], + "_mw_element_type": "MATLABArray" + } + }, + { + "name": "sSingle", + "metadata": { + "uuid": "0f144800-f512-48d6-9146-40c3d6d62e3e", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.628961", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_type": "single", + "_value": "3.3F" + } + }, + { + "name": "sSingleRow", + "metadata": { + "uuid": "df13ff85-e6ee-417a-8b4c-e41ec7bb0a37", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.629459", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_type": "single", + "_value": "[1.1F, 2.2F, 3.3F]" + } + }, + { + "name": "sSingleSweep", + "metadata": { + "uuid": "63860fc0-5f97-417b-92d2-8d879c963bdf", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.630014", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_type": "single", + "_value": "Vector(4082)\n[1.4013e-45F, 1.46937074e-39F, 2.93874e-39F, 4.40811e-39F, 5.87747876e-39F, 7.3468481e-39F, 8.81621744e-39F, \n1.02855868e-38F, 1.17549561e-38F, 1.32243255e-38F, 1.46936948e-38F, 1.61630641e-38F, 1.76324335e-38F, 1.91018028e-38F, \n2.05711722e-38F, 2.20405415e-38F, 2.35099347e-38F, 2.64486733e-38F, 2.9387412e-38F, 3.23261507e-38F, 3.52648894e-38F, \n3.82036281e-38F, 4.11423667e-38F, 4.40811054e-38F, 4.70199142e-38F, 5.28973915e-38F, 5.87748689e-38F, 6.46523462e-38F, \n7.05298236e-38F, 7.64073e-38F, 8.22847783e-38F, 8.81622557e-38F, 9.4039918e-38F, 1.05794873e-37F, 1.17549827e-37F, \n1.29304782e-37F, 1.41059737e-37F, 1.52814692e-37F, 1.64569646e-37F, 1.76324601e-37F, 1.88080015e-37F, 2.11589925e-37F, \n2.35099834e-37F, 2.58609744e-37F, 2.82119653e-37F, 3.05629563e-37F, 3.29139472e-37F, 3.52649381e-37F, 3.76160389e-37F, \n4.23180208e-37F, 4.70200027e-37F, 5.17219846e-37F, 5.64239665e-37F, 6.11259484e-37F, 6.58279303e-37F, 7.05299122e-37F, \n7.52321496e-37F, 8.46361134e-37F, 9.40400772e-37F, 1.03444041e-36F, 1.12848005e-36F, 1.22251969e-36F, 1.31655932e-36F, \n1.41059896e-36F, 1.50464443e-36F, 1.6927237e-36F, 1.88080298e-36F, 2.06888225e-36F, 2.25696153e-36F, 2.44504081e-36F, \n2.63312e-36F, 2.82119936e-36F, 3.00929173e-36F, 3.38545028e-36F, 3.76160883e-36F, 4.13776738e-36F, 4.51392593e-36F, \n4.89008448e-36F, 5.26624303e-36F, 5.64240158e-36F, 6.01858919e-36F, 6.77090629e-36F, 7.52322339e-36F, 8.2755405e-36F, \n9.0278576e-36F, 9.7801747e-36F, 1.05324918e-35F, 1.12848089e-35F, 1.20371899e-35F, 1.35418241e-35F, 1.50464583e-35F, \n1.65510925e-35F, 1.80557267e-35F, 1.95603609e-35F, 2.10649951e-35F, 2.25696293e-35F, 2.40744027e-35F, 2.70836711e-35F, \n3.00929395e-35F, 3.31022079e-35F, 3.61114763e-35F, 3.91207447e-35F, 4.21300131e-35F, 4.51392815e-35F, 4.81488513e-35F, \n5.41673881e-35F, 6.01859249e-35F, 6.62044617e-35F, 7.2223e-35F, 7.82415354e-35F, 8.42600722e-35F, 9.0278609e-35F, \n9.62978e-35F, 1.08334868e-34F, 1.20371942e-34F, 1.32409015e-34F, 1.44446089e-34F, 1.56483163e-34F, 1.68520236e-34F, \n1.8055731e-34F, 1.92595772e-34F, 2.1666992e-34F, 2.40744067e-34F, 2.64818214e-34F, 2.88892362e-34F, 3.12966509e-34F, \n3.37040656e-34F, 3.61114803e-34F, 3.85191912e-34F, 4.33340207e-34F, 4.81488501e-34F, 5.29636796e-34F, 5.7778509e-34F, \n6.25933385e-34F, 6.74081679e-34F, 7.22229974e-34F, 7.70384559e-34F, 8.66681148e-34F, 9.62977737e-34F, 1.05927433e-33F, \n1.15557092e-33F, 1.2518675e-33F, 1.34816409e-33F, 1.44446068e-33F, 1.54077059e-33F, 1.73336377e-33F, 1.92595694e-33F, \n2.11855012e-33F, 2.3111433e-33F, 2.50373648e-33F, 2.69632966e-33F, 2.88892283e-33F, 3.08154411e-33F, 3.46673047e-33F, \n3.85191683e-33F, 4.23710318e-33F, 4.62228954e-33F, 5.0074759e-33F, 5.39266225e-33F, 5.77784861e-33F, 6.16309411e-33F, \n6.93346682e-33F, 7.70383953e-33F, 8.47421224e-33F, 9.24458496e-33F, 1.00149577e-32F, 1.07853304e-32F, 1.15557031e-32F, \n1.23262e-32F, 1.38669454e-32F, 1.54076908e-32F, 1.69484362e-32F, 1.84891817e-32F, 2.00299271e-32F, 2.15706725e-32F, \n2.31114179e-32F, 2.46524234e-32F, 2.77339143e-32F, 3.08154051e-32F, 3.3896896e-32F, 3.69783868e-32F, 4.00598777e-32F, \n4.31413685e-32F, 4.62228594e-32F, 4.93048939e-32F, 5.54678756e-32F, 6.16308573e-32F, 6.7793839e-32F, 7.39568207e-32F, \n8.01198e-32F, 8.62827841e-32F, 9.24457658e-32F, 9.86098819e-32F, 1.10935845e-31F, 1.23261809e-31F, 1.35587772e-31F, \n1.47913735e-31F, 1.60239699e-31F, 1.72565662e-31F, 1.84891626e-31F, 1.97219952e-31F, 2.21871879e-31F, 2.46523805e-31F, \n2.71175732e-31F, 2.95827659e-31F, 3.20479586e-31F, 3.45131513e-31F, 3.69783439e-31F, 3.9444028e-31F, 4.43744133e-31F, \n4.93048e-31F, 5.42351841e-31F, 5.91655694e-31F, 6.40959548e-31F, 6.90263401e-31F, 7.39567255e-31F, 7.88881312e-31F, \n8.87489e-31F, 9.86096726e-31F, 1.08470443e-30F, 1.18331214e-30F, 1.28191985e-30F, 1.38052755e-30F, 1.47913526e-30F, \n1.57776413e-30F, 1.77497954e-30F, 1.97219496e-30F, 2.16941037e-30F, 2.36662579e-30F, 2.5638412e-30F, 2.76105661e-30F, \n2.95827203e-30F, 3.15553127e-30F, 3.54996209e-30F, 3.94439292e-30F, 4.33882375e-30F, 4.73325458e-30F, 5.12768541e-30F, \n5.52211624e-30F, 5.91654707e-30F, 6.31106855e-30F, 7.09993e-30F, 7.88879187e-30F, 8.67765352e-30F, 9.46651518e-30F, \n1.02553768e-29F, 1.10442385e-29F, 1.18331e-29F, 1.26221491e-29F, 1.41998725e-29F, 1.57775958e-29F, 1.73553191e-29F, \n1.89330424e-29F, 2.05107657e-29F, 2.2088489e-29F, 2.36662123e-29F, 2.52443223e-29F, 2.8399769e-29F, 3.15552156e-29F, \n3.47106622e-29F, 3.78661089e-29F, 4.10215555e-29F, 4.41770021e-29F, 4.73324488e-29F, 5.04886928e-29F, 5.67995861e-29F, \n6.31104794e-29F, 6.94213726e-29F, 7.57322659e-29F, 8.20431591e-29F, 8.83540524e-29F, 9.46649457e-29F, 1.00977482e-28F, \n1.13599269e-28F, 1.26221055e-28F, 1.38842842e-28F, 1.51464628e-28F, 1.64086415e-28F, 1.76708201e-28F, 1.89329988e-28F, \n2.01955157e-28F, 2.2719873e-28F, 2.52442303e-28F, 2.77685876e-28F, 3.02929449e-28F, 3.28173022e-28F, 3.53416595e-28F, \n3.78660168e-28F, 4.03910698e-28F, 4.54397844e-28F, 5.04885e-28F, 5.55372137e-28F, 6.05859283e-28F, 6.56346429e-28F, \n7.06833575e-28F, 7.57320721e-28F, 8.07822167e-28F, 9.08796459e-28F, 1.00977075e-27F, 1.11074504e-27F, 1.21171934e-27F, \n1.31269363e-27F, 1.41366792e-27F, 1.51464221e-27F, 1.61564587e-27F, 1.81759446e-27F, 2.01954304e-27F, 2.22149163e-27F, \n2.42344021e-27F, 2.6253888e-27F, 2.82733738e-27F, 3.02928597e-27F, 3.23129483e-27F, 3.635192e-27F, 4.03908917e-27F, \n4.44298634e-27F, 4.84688351e-27F, 5.25078067e-27F, 5.65467784e-27F, 6.05857501e-27F, 6.46259582e-27F, 7.27039e-27F, \n8.0781845e-27F, 8.88597884e-27F, 9.69377317e-27F, 1.05015675e-26F, 1.13093618e-26F, 1.21171562e-26F, 1.2925204e-26F, \n1.45407927e-26F, 1.61563813e-26F, 1.777197e-26F, 1.93875587e-26F, 2.10031473e-26F, 2.2618736e-26F, 2.42343247e-26F, \n2.58504326e-26F, 2.908161e-26F, 3.23127873e-26F, 3.55439647e-26F, 3.8775142e-26F, 4.20063194e-26F, 4.52374967e-26F, \n4.8468674e-26F, 5.17009145e-26F, 5.81632692e-26F, 6.46256239e-26F, 7.10879786e-26F, 7.75503333e-26F, 8.4012688e-26F, \n9.04750427e-26F, 9.69374e-26F, 1.03401928e-25F, 1.16326637e-25F, 1.29251346e-25F, 1.42176056e-25F, 1.55100765e-25F, \n1.68025475e-25F, 1.80950184e-25F, 1.93874893e-25F, 2.06804052e-25F, 2.32653471e-25F, 2.5850289e-25F, 2.84352309e-25F, \n3.10201728e-25F, 3.36051146e-25F, 3.61900565e-25F, 3.87749984e-25F, 4.13608499e-25F, 4.65307337e-25F, 5.17006175e-25F, \n5.68705e-25F, 6.2040385e-25F, 6.72102687e-25F, 7.23801525e-25F, 7.75500362e-25F, 8.27217788e-25F, 9.30615463e-25F, \n1.03401314e-24F, 1.13741081e-24F, 1.24080849e-24F, 1.34420616e-24F, 1.44760384e-24F, 1.55100151e-24F, 1.65443715e-24F, \n1.8612325e-24F, 2.06802785e-24F, 2.2748232e-24F, 2.48161855e-24F, 2.6884139e-24F, 2.89520926e-24F, 3.10200461e-24F, \n3.30887746e-24F, 3.72246816e-24F, 4.13605886e-24F, 4.54964956e-24F, 4.96324026e-24F, 5.37683096e-24F, 5.79042167e-24F, \n6.20401237e-24F, 6.61776123e-24F, 7.44494264e-24F, 8.27212404e-24F, 9.09930544e-24F, 9.92648684e-24F, 1.07536682e-23F, \n1.15808496e-23F, 1.2408031e-23F, 1.32355351e-23F, 1.48898979e-23F, 1.65442607e-23F, 1.81986235e-23F, 1.98529863e-23F, \n2.15073491e-23F, 2.31617119e-23F, 2.48160747e-23F, 2.64710954e-23F, 2.9779821e-23F, 3.30885466e-23F, 3.63972722e-23F, \n3.97059978e-23F, 4.30147234e-23F, 4.63234491e-23F, 4.96321747e-23F, 5.29422413e-23F, 5.95596925e-23F, 6.61771438e-23F, \n7.2794595e-23F, 7.94120462e-23F, 8.60295e-23F, 9.26469486e-23F, 9.92644e-23F, 1.05884584e-22F, 1.19119486e-22F, \n1.32354388e-22F, 1.45589291e-22F, 1.58824193e-22F, 1.72059096e-22F, 1.85294e-22F, 1.98528901e-22F, 2.11769369e-22F, \n2.38239174e-22F, 2.64708979e-22F, 2.91178784e-22F, 3.17648589e-22F, 3.44118393e-22F, 3.70588198e-22F, 3.97058e-22F, \n4.23539142e-22F, 4.76478752e-22F, 5.29418362e-22F, 5.82357971e-22F, 6.35297581e-22F, 6.88237191e-22F, 7.411768e-22F, \n7.9411641e-22F, 8.47079092e-22F, 9.52958312e-22F, 1.05883753e-21F, 1.16471675e-21F, 1.27059597e-21F, 1.37647519e-21F, \n1.48235441e-21F, 1.58823363e-21F, 1.6941598e-21F, 1.90591824e-21F, 2.11767668e-21F, 2.32943512e-21F, 2.54119356e-21F, \n2.75295199e-21F, 2.96471043e-21F, 3.17646887e-21F, 3.38832283e-21F, 3.81183971e-21F, 4.23535659e-21F, 4.65887346e-21F, \n5.08239034e-21F, 5.50590722e-21F, 5.9294241e-21F, 6.35294097e-21F, 6.77665213e-21F, 7.62368588e-21F, 8.47072e-21F, \n9.31775339e-21F, 1.01647871e-20F, 1.10118209e-20F, 1.18588547e-20F, 1.27058884e-20F, 1.35533172e-20F, 1.52473847e-20F, \n1.69414522e-20F, 1.86355197e-20F, 2.03295872e-20F, 2.20236547e-20F, 2.37177222e-20F, 2.54117897e-20F, 2.71066602e-20F, \n3.04947952e-20F, 3.38829302e-20F, 3.72710653e-20F, 4.06592e-20F, 4.40473353e-20F, 4.74354703e-20F, 5.08236053e-20F, \n5.42133721e-20F, 6.09896422e-20F, 6.77659122e-20F, 7.45421822e-20F, 8.13184523e-20F, 8.80947223e-20F, 9.48709924e-20F, \n1.01647262e-19F, 1.08426848e-19F, 1.21979388e-19F, 1.35531928e-19F, 1.49084468e-19F, 1.62637008e-19F, 1.76189548e-19F, \n1.89742088e-19F, 2.03294628e-19F, 2.16853902e-19F, 2.43958982e-19F, 2.71064062e-19F, 2.98169143e-19F, 3.25274223e-19F, \n3.52379303e-19F, 3.79484383e-19F, 4.06589463e-19F, 4.33708218e-19F, 4.87918378e-19F, 5.42128538e-19F, 5.96338699e-19F, \n6.50548859e-19F, 7.04759e-19F, 7.5896918e-19F, 8.1317934e-19F, 8.67417262e-19F, 9.75837583e-19F, 1.0842579e-18F, \n1.19267822e-18F, 1.30109855e-18F, 1.40951887e-18F, 1.51793919e-18F, 1.62635951e-18F, 1.73483618e-18F, 1.95167682e-18F, \n2.16851746e-18F, 2.3853581e-18F, 2.60219874e-18F, 2.81903939e-18F, 3.03588e-18F, 3.25272067e-18F, 3.46967567e-18F, \n3.90335695e-18F, 4.33703823e-18F, 4.77071952e-18F, 5.2044008e-18F, 5.63808208e-18F, 6.07176336e-18F, 6.50544465e-18F, \n6.93935795e-18F, 7.80672052e-18F, 8.67408308e-18F, 9.54144565e-18F, 1.04088082e-17F, 1.12761708e-17F, 1.21435333e-17F, \n1.30108959e-17F, 1.38787291e-17F, 1.56134543e-17F, 1.73481794e-17F, 1.90829045e-17F, 2.08176297e-17F, 2.25523548e-17F, \n2.42870799e-17F, 2.60218051e-17F, 2.77574847e-17F, 3.1226935e-17F, 3.46963853e-17F, 3.81658355e-17F, 4.16352858e-17F, \n4.51047361e-17F, 4.85741863e-17F, 5.20436366e-17F, 5.55150224e-17F, 6.2453923e-17F, 6.93928235e-17F, 7.6331724e-17F, \n8.32706245e-17F, 9.0209525e-17F, 9.71484256e-17F, 1.04087326e-16F, 1.11030151e-16F, 1.24907952e-16F, 1.38785753e-16F, \n1.52663554e-16F, 1.66541355e-16F, 1.80419156e-16F, 1.94296957e-16F, 2.08174758e-16F, 2.22060513e-16F, 2.49816115e-16F, \n2.77571717e-16F, 3.0532732e-16F, 3.33082922e-16F, 3.60838524e-16F, 3.88594126e-16F, 4.16349728e-16F, 4.4412145e-16F, \n4.99632654e-16F, 5.55143858e-16F, 6.10655063e-16F, 6.66166267e-16F, 7.21677471e-16F, 7.77188675e-16F, 8.32699879e-16F, \n8.88243747e-16F, 9.99266155e-16F, 1.11028856e-15F, 1.22131097e-15F, 1.33233338e-15F, 1.44335579e-15F, 1.5543782e-15F, \n1.66540061e-15F, 1.77648919e-15F, 1.998534e-15F, 2.22057882e-15F, 2.44262364e-15F, 2.66466846e-15F, 2.88671327e-15F, \n3.10875809e-15F, 3.33080291e-15F, 3.55298176e-15F, 3.9970714e-15F, 4.44116103e-15F, 4.88525066e-15F, 5.3293403e-15F, \n5.77343e-15F, 6.21751956e-15F, 6.6616092e-15F, 7.10597e-15F, 7.99414957e-15F, 8.88232884e-15F, 9.77050811e-15F, \n1.06586874e-14F, 1.15468666e-14F, 1.24350459e-14F, 1.33232252e-14F, 1.42119542e-14F, 1.59883127e-14F, 1.77646712e-14F, \n1.95410298e-14F, 2.13173883e-14F, 2.30937468e-14F, 2.48701054e-14F, 2.66464639e-14F, 2.84239354e-14F, 3.19766525e-14F, \n3.55293696e-14F, 3.90820866e-14F, 4.26348037e-14F, 4.61875208e-14F, 4.97402378e-14F, 5.32929549e-14F, 5.68479251e-14F, \n6.39533592e-14F, 7.10587933e-14F, 7.81642275e-14F, 8.52696616e-14F, 9.23750957e-14F, 9.94805299e-14F, 1.06585964e-13F, \n1.13695959e-13F, 1.27906827e-13F, 1.42117695e-13F, 1.56328563e-13F, 1.70539432e-13F, 1.847503e-13F, 1.98961168e-13F, \n2.13172036e-13F, 2.27392134e-13F, 2.55813871e-13F, 2.84235607e-13F, 3.12657344e-13F, 3.4107908e-13F, 3.69500817e-13F, \n3.97922553e-13F, 4.2634429e-13F, 4.54784702e-13F, 5.11628175e-13F, 5.68471648e-13F, 6.25315121e-13F, 6.82158594e-13F, \n7.39002067e-13F, 7.9584554e-13F, 8.52689e-13F, 9.09570271e-13F, 1.02325722e-12F, 1.13694416e-12F, 1.25063111e-12F, \n1.36431806e-12F, 1.478005e-12F, 1.59169195e-12F, 1.70537889e-12F, 1.81914228e-12F, 2.04651617e-12F, 2.27389e-12F, \n2.50126395e-12F, 2.72863785e-12F, 2.95601174e-12F, 3.18338563e-12F, 3.41075952e-12F, 3.63828802e-12F, 4.09303581e-12F, \n4.54778359e-12F, 5.00253138e-12F, 5.45727916e-12F, 5.91202694e-12F, 6.36677473e-12F, 6.82152251e-12F, 7.27658298e-12F, \n8.18607855e-12F, 9.09557412e-12F, 1.00050697e-11F, 1.09145653e-11F, 1.18240608e-11F, 1.27335564e-11F, 1.3643052e-11F, \n1.45531798e-11F, 1.6372171e-11F, 1.81911621e-11F, 2.00101533e-11F, 2.18291444e-11F, 2.36481355e-11F, 2.54671267e-11F, \n2.72861178e-11F, 2.91063874e-11F, 3.27443697e-11F, 3.6382352e-11F, 4.00203343e-11F, 4.36583165e-11F, 4.72963e-11F, \n5.09342811e-11F, 5.45722634e-11F, 5.82128304e-11F, 6.54887949e-11F, 7.27647595e-11F, 8.0040724e-11F, 8.73166886e-11F, \n9.45926532e-11F, 1.01868618e-10F, 1.09144582e-10F, 1.16425772e-10F, 1.30977701e-10F, 1.4552963e-10F, 1.60081559e-10F, \n1.74633488e-10F, 1.89185417e-10F, 2.03737346e-10F, 2.18289276e-10F, 2.32851766e-10F, 2.61955624e-10F, 2.91059482e-10F, \n3.2016334e-10F, 3.49267198e-10F, 3.78371057e-10F, 4.07474915e-10F, 4.36578773e-10F, 4.65704e-10F, 5.23911692e-10F, \n5.82119408e-10F, 6.40327125e-10F, 6.98534841e-10F, 7.56742558e-10F, 8.14950274e-10F, 8.73158e-10F, 9.31408839e-10F, \n1.04782427e-9F, 1.1642397e-9F, 1.28065514e-9F, 1.39707057e-9F, 1.513486e-9F, 1.62990144e-9F, 1.74631687e-9F, \n1.86281945e-9F, 2.09565032e-9F, 2.32848119e-9F, 2.56131205e-9F, 2.79414292e-9F, 3.02697378e-9F, 3.25980465e-9F, \n3.49263551e-9F, 3.72564246e-9F, 4.19130419e-9F, 4.65696592e-9F, 5.12262766e-9F, 5.58828939e-9F, 6.05395112e-9F, \n6.51961285e-9F, 6.98527458e-9F, 7.45129203e-9F, 8.38261549e-9F, 9.31393895e-9F, 1.02452624e-8F, 1.11765859e-8F, \n1.21079093e-8F, 1.30392328e-8F, 1.39705563e-8F, 1.49025983e-8F, 1.67652452e-8F, 1.86278921e-8F, 2.0490539e-8F, \n2.2353186e-8F, 2.42158329e-8F, 2.60784798e-8F, 2.79411267e-8F, 2.9805225e-8F, 3.35305188e-8F, 3.72558127e-8F, \n4.09811065e-8F, 4.47064e-8F, 4.84316942e-8F, 5.21569881e-8F, 5.58822819e-8F, 5.96105068e-8F, 6.70610945e-8F, \n7.45116822e-8F, 8.19622699e-8F, 8.94128576e-8F, 9.68634453e-8F, 1.04314033e-7F, 1.11764621e-7F, 1.19221127e-7F, \n1.34122303e-7F, 1.49023478e-7F, 1.63924653e-7F, 1.78825829e-7F, 1.93727e-7F, 2.0862818e-7F, 2.23529355e-7F, \n2.38442482e-7F, 2.68244833e-7F, 2.98047183e-7F, 3.27849534e-7F, 3.57651885e-7F, 3.87454236e-7F, 4.17256587e-7F, \n4.47058937e-7F, 4.76885418e-7F, 5.3649012e-7F, 5.96094822e-7F, 6.55699523e-7F, 7.15304225e-7F, 7.74908926e-7F, \n8.34513628e-7F, 8.9411833e-7F, 9.53771746e-7F, 1.07298115e-6F, 1.19219055e-6F, 1.3114e-6F, 1.43060936e-6F, \n1.54981876e-6F, 1.66902817e-6F, 1.78823757e-6F, 1.90754531e-6F, 2.14596412e-6F, 2.38438292e-6F, 2.62280173e-6F, \n2.86122054e-6F, 3.09963934e-6F, 3.33805815e-6F, 3.57647696e-6F, 3.81509426e-6F, 4.29193187e-6F, 4.76876949e-6F, \n5.2456071e-6F, 5.72244471e-6F, 6.19928232e-6F, 6.67612e-6F, 7.15295755e-6F, 7.6301958e-6F, 8.58387102e-6F, \n9.53754625e-6F, 1.04912215e-5F, 1.14448967e-5F, 1.23985719e-5F, 1.33522472e-5F, 1.43059224e-5F, 1.52604061e-5F, \n1.71677566e-5F, 1.9075107e-5F, 2.09824575e-5F, 2.2889808e-5F, 2.47971584e-5F, 2.67045089e-5F, 2.86118593e-5F, \n3.05208414e-5F, 3.43355423e-5F, 3.81502432e-5F, 4.19649441e-5F, 4.5779645e-5F, 4.95943459e-5F, 5.34090468e-5F, \n5.72237477e-5F, 6.1041741e-5F, 6.86711428e-5F, 7.63005446e-5F, 8.39299464e-5F, 9.15593482e-5F, 9.918875e-5F, \n0.000106818152F, 0.000114447554F, 0.000122083598F, 0.000137342402F, 0.000152601206F, 0.000167860009F, 0.000183118813F, \n0.000198377616F, 0.00021363642F, 0.000228895224F, 0.00024416743F, 0.000274685037F, 0.000305202644F, 0.000335720251F, \n0.000366237859F, 0.000396755466F, 0.000427273073F, 0.00045779068F, 0.000488335325F, 0.000549370539F, 0.000610405754F, \n0.000671440968F, 0.000732476183F, 0.000793511397F, 0.000854546612F, 0.000915581826F, 0.000976671581F, 0.00109874201F, \n0.00122081244F, 0.00134288287F, 0.0014649533F, 0.00158702373F, 0.00170909415F, 0.00183116458F, 0.00195334502F, \n0.00219748588F, 0.00244162674F, 0.0026857676F, 0.00292990846F, 0.00317404931F, 0.00341819017F, 0.00366233103F, \n0.00390669378F, 0.00439497549F, 0.00488325721F, 0.00537153892F, 0.00585982064F, 0.00634810235F, 0.00683638407F, \n0.00732466578F, 0.007813395F, 0.00878995843F, 0.00976652186F, 0.0107430853F, 0.0117196487F, 0.0126962122F, \n0.0136727756F, 0.014649339F, 0.0156268049F, 0.0175799318F, 0.0195330586F, 0.0214861855F, 0.0234393124F, 0.0253924392F, \n0.0273455661F, 0.0292986929F, 0.0312536396F, 0.0351598933F, 0.0390661471F, 0.0429724F, 0.0468786545F, 0.0507849082F, \n0.054691162F, 0.0585974157F, 0.0625073388F, 0.0703198463F, 0.0781323537F, 0.0859448612F, 0.0937573686F, 0.101569876F, \n0.109382384F, 0.117194891F, 0.125014797F, 0.140639812F, 0.156264827F, 0.171889842F, 0.187514856F, 0.203139871F, \n0.218764886F, 0.234389901F, 0.250029832F, 0.281279862F, 0.312529892F, 0.343779922F, 0.375029951F, 0.406279981F, \n0.43753F, 0.468780041F, 0.500060141F, 0.562560201F, 0.62506026F, 0.68756032F, 0.75006038F, 0.812560439F, 0.875060499F, \n0.937560558F, 1.00012124F, 1.12512136F, 1.25012147F, 1.37512159F, 1.50012171F, 1.62512183F, 1.75012195F, 1.87512207F, \n2.00024438F, 2.25024462F, 2.50024486F, 2.75024509F, 3.00024533F, 3.25024557F, 3.50024581F, 3.75024605F, 4.00049257F, \n4.50049305F, 5.00049353F, 5.500494F, 6.00049448F, 6.50049496F, 7.00049543F, 7.50049591F, 8.00099277F, 9.00099373F, \n10.0009947F, 11.0009956F, 12.0009966F, 13.0009975F, 14.0009985F, 15.0009995F, 16.002F, 18.0020027F, 20.0020046F, \n22.0020065F, 24.0020084F, 26.0020103F, 28.0020123F, 30.0020142F, 32.0040321F, 36.0040359F, 40.0040398F, 44.0040436F, \n48.0040474F, 52.0040512F, 56.004055F, 60.0040588F, 64.0081253F, 72.0081329F, 80.0081406F, 88.0081482F, 96.0081558F, \n104.008163F, 112.008171F, 120.008179F, 128.016373F, 144.016388F, 160.016403F, 176.016418F, 192.016434F, 208.016449F, \n224.016464F, 240.016479F, 256.033F, 288.03302F, 320.033051F, 352.033081F, 384.033112F, 416.033142F, 448.033173F, \n480.033203F, 512.066467F, 576.066528F, 640.066589F, 704.06665F, 768.066711F, 832.066772F, 896.066833F, 960.066895F, \n1024.13391F, 1152.13403F, 1280.13416F, 1408.13428F, 1536.1344F, 1664.13452F, 1792.13464F, 1920.13477F, 2048.26978F, \n2304.27F, 2560.27026F, 2816.27051F, 3072.27075F, 3328.271F, 3584.27124F, 3840.27148F, 4096.54346F, 4608.54395F, \n5120.54443F, 5632.54492F, 6144.54541F, 6656.5459F, 7168.54639F, 7680.54688F, 8193.09473F, 9217.0957F, 10241.0967F, \n11265.0977F, 12289.0986F, 13313.1F, 14337.1006F, 15361.1016F, 16386.2051F, 18434.207F, 20482.209F, 22530.2109F, \n24578.2129F, 26626.2148F, 28674.2168F, 30722.2188F, 32772.4414F, 36868.4453F, 40964.4492F, 45060.4531F, 49156.457F, \n53252.4609F, 57348.4648F, 61444.4688F, 65544.9453F, 73736.9531F, 81928.9609F, 90120.9688F, 98312.9766F, 106504.984F, \n114696.992F, 122889.0F, 131090.016F, 147474.031F, 163858.047F, 180242.062F, 196626.078F, 213010.094F, 229394.109F, \n245778.125F, 262180.281F, 294948.312F, 327716.344F, 360484.375F, 393252.406F, 426020.438F, 458788.469F, 491556.5F, \n524361.062F, 589897.125F, 655433.188F, 720969.25F, 786505.312F, 852041.375F, 917577.438F, 983113.5F, 1048723.12F, \n1179795.25F, 1310867.38F, 1441939.5F, 1573011.62F, 1704083.75F, 1835155.88F, 1966228.0F, 2097448.25F, 2359592.5F, \n2621736.75F, 2883881.0F, 3146025.25F, 3408169.5F, 3670313.75F, 3932458.0F, 4194900.5F, 4719189.0F, 5243477.5F, \n5767766.0F, 6292054.5F, 6816343.0F, 7340631.5F, 7.86492e+6F, 8389809.0F, 9438386.0F, 10486963.0F, 11535540.0F, \n12584117.0F, 13632694.0F, 14681271.0F, 15729848.0F, 16779634.0F, 18876788.0F, 20973942.0F, 23071096.0F, 25168250.0F, \n27265404.0F, 29362558.0F, 31459712.0F, 3.35593e+7F, 37753608.0F, 41947916.0F, 46142224.0F, 50336532.0F, 54530840.0F, \n58725148.0F, 62919456.0F, 67118664.0F, 75507280.0F, 83895896.0F, 92284512.0F, 100673128.0F, 109061744.0F, \n117450360.0F, 125838976.0F, 134237456.0F, 151014688.0F, 167791920.0F, 184569152.0F, 201346384.0F, 218123616.0F, \n234900848.0F, 251678080.0F, 268475168.0F, 302029632.0F, 335584096.0F, 369138560.0F, 402693024.0F, 436247488.0F, \n469801952.0F, 503356416.0F, 536950848.0F, 604059776.0F, 671168704.0F, 738277632.0F, 805386560.0F, 872495488.0F, \n939604416.0F, 1.00671334e+9F, 1.07390272e+9F, 1.20812058e+9F, 1.34233843e+9F, 1.47655629e+9F, 1.61077414e+9F, \n1.744992e+9F, 1.87920986e+9F, 2.01342771e+9F, 2.14780749e+9F, 2.4162432e+9F, 2.68467891e+9F, 2.95311462e+9F, \n3.22155034e+9F, 3.48998605e+9F, 3.75842176e+9F, 4.02685747e+9F, 4.29561907e+9F, 4.8324905e+9F, 5.36936192e+9F, \n5.90623334e+9F, 6.44310477e+9F, 6.97997619e+9F, 7.51684762e+9F, 8.05371904e+9F, 8.59124634e+9F, 9.66498918e+9F, \n1.0738732e+10F, 1.18124749e+10F, 1.28862177e+10F, 1.39599606e+10F, 1.50337034e+10F, 1.61074463e+10F, 1.71825091e+10F, \n1.93299948e+10F, 2.14774804e+10F, 2.36249661e+10F, 2.57724518e+10F, 2.79199375e+10F, 3.00674232e+10F, 3.22149089e+10F, \n3.43650509e+10F, 3.86600223e+10F, 4.29549937e+10F, 4.72499651e+10F, 5.15449364e+10F, 5.58399078e+10F, 6.01348792e+10F, \n6.44298506e+10F, 6.87301673e+10F, 7.73201101e+10F, 8.59100529e+10F, 9.44999956e+10F, 1.03089938e+11F, 1.11679881e+11F, \n1.20269824e+11F, 1.28859767e+11F, 1.37460466e+11F, 1.54640351e+11F, 1.71820237e+11F, 1.89000122e+11F, 2.0618e+11F, \n2.23359894e+11F, 2.40539779e+11F, 2.57719665e+11F, 2.74921193e+11F, 3.09280965e+11F, 3.43640736e+11F, 3.78000507e+11F, \n4.12360278e+11F, 4.46720049e+11F, 4.8107982e+11F, 5.15439591e+11F, 5.49842911e+11F, 6.18562454e+11F, 6.87282e+11F, \n7.56001538e+11F, 8.2472108e+11F, 8.93440623e+11F, 9.62160165e+11F, 1.03087971e+12F, 1.09968687e+12F, 1.23712596e+12F, \n1.37456504e+12F, 1.51200412e+12F, 1.64944321e+12F, 1.78688229e+12F, 1.92432138e+12F, 2.06176046e+12F, 2.19937584e+12F, \n2.47425401e+12F, 2.74913218e+12F, 3.02401035e+12F, 3.29888852e+12F, 3.57376668e+12F, 3.84864485e+12F, 4.12352302e+12F, \n4.39875587e+12F, 4.94851221e+12F, 5.49826855e+12F, 6.04802489e+12F, 6.59778123e+12F, 7.14753756e+12F, 7.6972939e+12F, \n8.24705e+12F, 8.79752e+12F, 9.89703281e+12F, 1.09965455e+13F, 1.20960582e+13F, 1.31955708e+13F, 1.42950835e+13F, \n1.53945962e+13F, 1.64941089e+13F, 1.7595057e+13F, 1.97940824e+13F, 2.19931078e+13F, 2.41921331e+13F, 2.63911585e+13F, \n2.85901838e+13F, 3.07892092e+13F, 3.29882345e+13F, 3.51901476e+13F, 3.95882e+13F, 4.39862491e+13F, 4.83843e+13F, \n5.27823505e+13F, 5.71804e+13F, 6.15784519e+13F, 6.59765026e+13F, 7.03803624e+13F, 7.91764638e+13F, 8.79725652e+13F, \n9.67686666e+13F, 1.05564768e+14F, 1.14360869e+14F, 1.23156971e+14F, 1.31953072e+14F, 1.40760859e+14F, 1.58353062e+14F, \n1.75945265e+14F, 1.93537467e+14F, 2.1112967e+14F, 2.28721873e+14F, 2.46314076e+14F, 2.63906279e+14F, 2.81522e+14F, \n3.16706392e+14F, 3.51890798e+14F, 3.87075203e+14F, 4.22259609e+14F, 4.57444e+14F, 4.9262842e+14F, 5.27812826e+14F, \n5.6304451e+14F, 6.33413321e+14F, 7.03782132e+14F, 7.74150944e+14F, 8.44519755e+14F, 9.14888566e+14F, 9.85257378e+14F, \n1.05562619e+15F, 1.12609009e+15F, 1.26682772e+15F, 1.40756534e+15F, 1.54830296e+15F, 1.68904058e+15F, 1.82977821e+15F, \n1.97051583e+15F, 2.11125345e+15F, 2.25218233e+15F, 2.53365758e+15F, 2.81513282e+15F, 3.09660807e+15F, 3.37808331e+15F, \n3.65955856e+15F, 3.94103381e+15F, 4.22250905e+15F, 4.50436896e+15F, 5.06731945e+15F, 5.63027e+15F, 6.19322043e+15F, \n6.75617092e+15F, 7.31912141e+15F, 7.88207191e+15F, 8.4450224e+15F, 9.00874652e+15F, 1.01346475e+16F, 1.12605485e+16F, \n1.23864495e+16F, 1.35123504e+16F, 1.46382514e+16F, 1.57641524e+16F, 1.68900534e+16F, 1.80175102e+16F, 2.02693122e+16F, \n2.25211141e+16F, 2.47729161e+16F, 2.70247181e+16F, 2.927652e+16F, 3.1528322e+16F, 3.37801239e+16F, 3.60350548e+16F, \n4.05386587e+16F, 4.50422626e+16F, 4.95458666e+16F, 5.40494705e+16F, 5.85530744e+16F, 6.30566783e+16F, 6.75602822e+16F, \n7.20701783e+16F, 8.10773861e+16F, 9.0084594e+16F, 9.90918e+16F, 1.0809901e+17F, 1.17106218e+17F, 1.26113425e+17F, \n1.35120633e+17F, 1.44140494e+17F, 1.6215491e+17F, 1.80169325e+17F, 1.98183741e+17F, 2.16198157e+17F, 2.34212572e+17F, \n2.52226988e+17F, 2.70241404e+17F, 2.88281263e+17F, 3.24310094e+17F, 3.60338926e+17F, 3.96367757e+17F, 4.32396588e+17F, \n4.6842542e+17F, 5.04454251e+17F, 5.40483083e+17F, 5.76563076e+17F, 6.48620738e+17F, 7.20678401e+17F, 7.92736064e+17F, \n8.64793727e+17F, 9.36851389e+17F, 1.00890905e+18F, 1.08096671e+18F, 1.15312725e+18F, 1.29724258e+18F, 1.4413579e+18F, \n1.58547323e+18F, 1.72958855e+18F, 1.87370388e+18F, 2.0178192e+18F, 2.16193453e+18F, 2.3062567e+18F, 2.59448735e+18F, \n2.882718e+18F, 3.17094865e+18F, 3.4591793e+18F, 3.74741e+18F, 4.03564061e+18F, 4.32387126e+18F, 4.6125178e+18F, \n5.1889791e+18F, 5.7654404e+18F, 6.34190171e+18F, 6.91836301e+18F, 7.49482431e+18F, 8.07128561e+18F, 8.64774691e+18F, \n9.22504439e+18F, 1.0377967e+19F, 1.15308896e+19F, 1.26838122e+19F, 1.38367348e+19F, 1.49896574e+19F, 1.614258e+19F, \n1.72955026e+19F, 1.84501064e+19F, 2.07559516e+19F, 2.30617968e+19F, 2.5367642e+19F, 2.76734872e+19F, 2.99793324e+19F, \n3.22851776e+19F, 3.45910228e+19F, 3.69002479e+19F, 4.15119384e+19F, 4.61236288e+19F, 5.07353192e+19F, 5.53470096e+19F, \n5.99587e+19F, 6.45703904e+19F, 6.91820809e+19F, 7.38005663e+19F, 8.30239471e+19F, 9.22473279e+19F, 1.01470709e+20F, \n1.1069409e+20F, 1.1991747e+20F, 1.29140851e+20F, 1.38364232e+20F, 1.47601273e+20F, 1.66048035e+20F, 1.84494797e+20F, \n2.02941558e+20F, 2.2138832e+20F, 2.39835082e+20F, 2.58281843e+20F, 2.76728605e+20F, 2.95202828e+20F, 3.32096351e+20F, \n3.68989875e+20F, 4.05883398e+20F, 4.42776921e+20F, 4.79670445e+20F, 5.16563968e+20F, 5.53457491e+20F, 5.90406219e+20F, \n6.64193266e+20F, 7.37980312e+20F, 8.11767359e+20F, 8.85554406e+20F, 9.59341452e+20F, 1.0331285e+21F, 1.10691555e+21F, \n1.18081356e+21F, 1.32838766e+21F, 1.47596175e+21F, 1.62353584e+21F, 1.77111e+21F, 1.91868403e+21F, 2.06625812e+21F, \n2.21383222e+21F, 2.36162938e+21F, 2.65677757e+21F, 2.95192575e+21F, 3.24707394e+21F, 3.54222213e+21F, 3.83737031e+21F, \n4.1325185e+21F, 4.42766669e+21F, 4.72326326e+21F, 5.31355964e+21F, 5.90385601e+21F, 6.49415238e+21F, 7.08444876e+21F, \n7.67474513e+21F, 8.2650415e+21F, 8.85533788e+21F, 9.44653553e+21F, 1.06271283e+22F, 1.1807721e+22F, 1.29883138e+22F, \n1.41689065e+22F, 1.53494993e+22F, 1.6530092e+22F, 1.77106848e+22F, 1.88930891e+22F, 2.12542746e+22F, 2.36154601e+22F, \n2.59766456e+22F, 2.83378311e+22F, 3.06990165e+22F, 3.3060202e+22F, 3.54213875e+22F, 3.77862142e+22F, 4.25085852e+22F, \n4.72309562e+22F, 5.19533271e+22F, 5.66757e+22F, 6.13980691e+22F, 6.61204401e+22F, 7.08428111e+22F, 7.55725e+22F, \n8.50172424e+22F, 9.44619844e+22F, 1.03906726e+23F, 1.13351468e+23F, 1.2279621e+23F, 1.32240952e+23F, 1.41685694e+23F, \n1.51145145e+23F, 1.70034629e+23F, 1.88924113e+23F, 2.07813597e+23F, 2.26703081e+23F, 2.45592565e+23F, 2.64482049e+23F, \n2.83371533e+23F, 3.02290578e+23F, 3.40069546e+23F, 3.77848514e+23F, 4.15627482e+23F, 4.5340645e+23F, 4.91185418e+23F, \n5.28964386e+23F, 5.66743353e+23F, 6.04581733e+23F, 6.80139669e+23F, 7.55697604e+23F, 8.3125554e+23F, 9.06813476e+23F, \n9.82371412e+23F, 1.05792935e+24F, 1.13348728e+24F, 1.20916462e+24F, 1.36028049e+24F, 1.51139636e+24F, 1.66251223e+24F, \n1.8136281e+24F, 1.96474398e+24F, 2.11585985e+24F, 2.26697572e+24F, 2.41833154e+24F, 2.72056329e+24F, 3.02279503e+24F, \n3.32502677e+24F, 3.62725852e+24F, 3.92949026e+24F, 4.231722e+24F, 4.53395374e+24F, 4.8366677e+24F, 5.44113118e+24F, \n6.04559467e+24F, 6.65005816e+24F, 7.25452164e+24F, 7.85898513e+24F, 8.46344861e+24F, 9.0679121e+24F, 9.67334462e+24F, \n1.08822716e+25F, 1.20911986e+25F, 1.33001255e+25F, 1.45090525e+25F, 1.57179795e+25F, 1.69269065e+25F, 1.81358334e+25F, \n1.93467077e+25F, 2.17645616e+25F, 2.41824156e+25F, 2.66002695e+25F, 2.90181235e+25F, 3.14359774e+25F, 3.38538314e+25F, \n3.62716853e+25F, 3.86934523e+25F, 4.35291601e+25F, 4.8364868e+25F, 5.32005759e+25F, 5.80362838e+25F, 6.28719917e+25F, \n6.77077e+25F, 7.25434075e+25F, 7.73869783e+25F, 8.70583941e+25F, 9.67298099e+25F, 1.06401226e+26F, 1.16072641e+26F, \n1.25744057e+26F, 1.35415473e+26F, 1.45086889e+26F, 1.54774104e+26F, 1.74116936e+26F, 1.93459767e+26F, 2.12802599e+26F, \n2.3214543e+26F, 2.51488262e+26F, 2.70831094e+26F, 2.90173925e+26F, 3.09548504e+26F, 3.48234167e+26F, 3.8691983e+26F, \n4.25605493e+26F, 4.64291156e+26F, 5.02976819e+26F, 5.41662482e+26F, 5.80348145e+26F, 6.19097597e+26F, 6.96468924e+26F, \n7.7384025e+26F, 8.51211576e+26F, 9.28582902e+26F, 1.00595423e+27F, 1.08332555e+27F, 1.16069688e+27F, 1.23819638e+27F, \n1.39293903e+27F, 1.54768168e+27F, 1.70242433e+27F, 1.85716699e+27F, 2.01190964e+27F, 2.16665229e+27F, 2.32139494e+27F, \n2.47639511e+27F, 2.78588042e+27F, 3.09536572e+27F, 3.40485103e+27F, 3.71433633e+27F, 4.02382164e+27F, 4.33330694e+27F, \n4.64279225e+27F, 4.95279495e+27F, 5.57176556e+27F, 6.19073617e+27F, 6.80970678e+27F, 7.42867739e+27F, 8.047648e+27F, \n8.66661861e+27F, 9.28558922e+27F, 9.90559934e+27F, 1.11435406e+28F, 1.23814818e+28F, 1.3619423e+28F, 1.48573642e+28F, \n1.60953054e+28F, 1.73332467e+28F, 1.85711879e+28F, 1.98112176e+28F, 2.22871e+28F, 2.47629824e+28F, 2.72388649e+28F, \n2.97147473e+28F, 3.21906298e+28F, 3.46665122e+28F, 3.71423946e+28F, 3.96224729e+28F, 4.45742378e+28F, 4.95260027e+28F, \n5.44777675e+28F, 5.94295324e+28F, 6.43812973e+28F, 6.93330622e+28F, 7.42848271e+28F, 7.92450214e+28F, 8.91485511e+28F, \n9.90520809e+28F, 1.08955611e+29F, 1.1885914e+29F, 1.2876267e+29F, 1.386662e+29F, 1.4856973e+29F, 1.58490194e+29F, \n1.78297253e+29F, 1.98104313e+29F, 2.17911372e+29F, 2.37718432e+29F, 2.57525491e+29F, 2.77332551e+29F, 2.9713961e+29F, \n3.1698069e+29F, 3.56594809e+29F, 3.96208928e+29F, 4.35823047e+29F, 4.75437166e+29F, 5.15051285e+29F, 5.54665404e+29F, \n5.94279523e+29F, 6.33962e+29F, 7.13190222e+29F, 7.9241846e+29F, 8.71646699e+29F, 9.50874937e+29F, 1.03010317e+30F, \n1.10933141e+30F, 1.18855965e+30F, 1.26792518e+30F, 1.42638165e+30F, 1.58483813e+30F, 1.74329461e+30F, 1.90175108e+30F, \n2.06020756e+30F, 2.21866403e+30F, 2.37712051e+30F, 2.53585277e+30F, 2.85276573e+30F, 3.16967868e+30F, 3.48659163e+30F, \n3.80350458e+30F, 4.12041753e+30F, 4.43733049e+30F, 4.75424344e+30F, 5.07171038e+30F, 5.70553629e+30F, 6.33936219e+30F, \n6.9731881e+30F, 7.607014e+30F, 8.24084e+30F, 8.87466581e+30F, 9.50849171e+30F, 1.01434304e+31F, 1.14110822e+31F, \n1.26787341e+31F, 1.39463859e+31F, 1.52140377e+31F, 1.64816895e+31F, 1.77493413e+31F, 1.90169931e+31F, 2.02868802e+31F, \n2.28221838e+31F, 2.53574874e+31F, 2.78927911e+31F, 3.04280947e+31F, 3.29633983e+31F, 3.54987019e+31F, 3.80340055e+31F, \n4.05738e+31F, 4.56444063e+31F, 5.07150136e+31F, 5.57856208e+31F, 6.08562281e+31F, 6.59268353e+31F, 7.09974425e+31F, \n7.60680498e+31F, 8.11476756e+31F, 9.12888901e+31F, 1.01430105e+32F, 1.11571319e+32F, 1.21712533e+32F, 1.31853748e+32F, \n1.41994962e+32F, 1.52136177e+32F, 1.62295506e+32F, 1.82577935e+32F, 2.02860364e+32F, 2.23142793e+32F, 2.43425222e+32F, \n2.63707651e+32F, 2.8399008e+32F, 3.04272509e+32F, 3.24591321e+32F, 3.65156179e+32F, 4.05721037e+32F, 4.46285895e+32F, \n4.86850753e+32F, 5.27415611e+32F, 5.67980469e+32F, 6.08545327e+32F, 6.49183262e+32F, 7.30313e+32F, 8.11442693e+32F, \n8.92572409e+32F, 9.73702125e+32F, 1.05483184e+33F, 1.13596156e+33F, 1.21709127e+33F, 1.29836776e+33F, 1.46062719e+33F, \n1.62288662e+33F, 1.78514606e+33F, 1.94740549e+33F, 2.10966492e+33F, 2.27192435e+33F, 2.43418378e+33F, 2.596738e+33F, \n2.92125686e+33F, 3.24577572e+33F, 3.57029459e+33F, 3.89481345e+33F, 4.21933231e+33F, 4.54385118e+33F, 4.86837e+33F, \n5.19348095e+33F, 5.84251867e+33F, 6.4915564e+33F, 7.14059413e+33F, 7.78963185e+33F, 8.43866958e+33F, 9.08770731e+33F, \n9.73674503e+33F, 1.03869718e+34F, 1.16850473e+34F, 1.29831227e+34F, 1.42811982e+34F, 1.55792736e+34F, 1.68773491e+34F, \n1.81754245e+34F, 1.94735e+34F, 2.07739634e+34F, 2.33701143e+34F, 2.59662652e+34F, 2.85624161e+34F, 3.1158567e+34F, \n3.37547179e+34F, 3.63508688e+34F, 3.89470197e+34F, 4.15479664e+34F, 4.67402682e+34F, 5.193257e+34F, 5.71248719e+34F, \n6.23171737e+34F, 6.75094755e+34F, 7.27017773e+34F, 7.78940791e+34F, 8.30960121e+34F, 9.34806157e+34F, 1.03865219e+35F, \n1.14249823e+35F, 1.24634427e+35F, 1.3501903e+35F, 1.45403634e+35F, 1.55788237e+35F, 1.66192183e+35F, 1.8696139e+35F, \n2.07730597e+35F, 2.28499804e+35F, 2.49269012e+35F, 2.70038219e+35F, 2.90807426e+35F, 3.11576633e+35F, 3.32384682e+35F, \n3.73923097e+35F, 4.15461511e+35F, 4.56999926e+35F, 4.9853834e+35F, 5.40076755e+35F, 5.81615169e+35F, 6.23153584e+35F, \n6.6477e+35F, 7.47846827e+35F, 8.30923656e+35F, 9.14000485e+35F, 9.97077314e+35F, 1.08015414e+36F, 1.16323097e+36F, \n1.2463078e+36F, 1.32954126e+36F, 1.49569492e+36F, 1.66184858e+36F, 1.82800224e+36F, 1.9941559e+36F, 2.16030955e+36F, \n2.32646321e+36F, 2.49261687e+36F, 2.65908506e+36F, 2.99139238e+36F, 3.32369969e+36F, 3.65600701e+36F, 3.98831433e+36F, \n4.32062164e+36F, 4.65292896e+36F, 4.98523627e+36F, 5.3181752e+36F, 5.98279e+36F, 6.64740446e+36F, 7.31201909e+36F, \n7.97663372e+36F, 8.64124836e+36F, 9.30586299e+36F, 9.97047762e+36F, 1.06363605e+37F, 1.19655898e+37F, 1.32948191e+37F, \n1.46240483e+37F, 1.59532776e+37F, 1.72825069e+37F, 1.86117361e+37F, 1.99409654e+37F, 2.12727414e+37F, 2.39312e+37F, \n2.65896584e+37F, 2.92481169e+37F, 3.19065755e+37F, 3.4565034e+37F, 3.72234925e+37F, 3.9881951e+37F, 4.25455233e+37F, \n4.78624403e+37F, 5.31793574e+37F, 5.84962744e+37F, 6.38131915e+37F, 6.91301085e+37F, 7.44470256e+37F, 7.97639426e+37F, \n8.50911277e+37F, 9.57249618e+37F, 1.06358796e+38F, 1.1699263e+38F, 1.27626464e+38F, 1.38260298e+38F, 1.48894132e+38F, \n1.59527966e+38F, 1.70182418e+38F, 1.91450086e+38F, 2.12717754e+38F, 2.33985422e+38F, 2.5525309e+38F, 2.76520759e+38F, \n2.97788427e+38F, 3.19056095e+38F, -1.4013e-45F, -1.46937074e-39F, -2.93874e-39F, -4.40811e-39F, -5.87747876e-39F, \n-7.3468481e-39F, -8.81621744e-39F, -1.02855868e-38F, -1.17549561e-38F, -1.32243255e-38F, -1.46936948e-38F, \n-1.61630641e-38F, -1.76324335e-38F, -1.91018028e-38F, -2.05711722e-38F, -2.20405415e-38F, -2.35099347e-38F, \n-2.64486733e-38F, -2.9387412e-38F, -3.23261507e-38F, -3.52648894e-38F, -3.82036281e-38F, -4.11423667e-38F, \n-4.40811054e-38F, -4.70199142e-38F, -5.28973915e-38F, -5.87748689e-38F, -6.46523462e-38F, -7.05298236e-38F, \n-7.64073e-38F, -8.22847783e-38F, -8.81622557e-38F, -9.4039918e-38F, -1.05794873e-37F, -1.17549827e-37F, \n-1.29304782e-37F, -1.41059737e-37F, -1.52814692e-37F, -1.64569646e-37F, -1.76324601e-37F, -1.88080015e-37F, \n-2.11589925e-37F, -2.35099834e-37F, -2.58609744e-37F, -2.82119653e-37F, -3.05629563e-37F, -3.29139472e-37F, \n-3.52649381e-37F, -3.76160389e-37F, -4.23180208e-37F, -4.70200027e-37F, -5.17219846e-37F, -5.64239665e-37F, \n-6.11259484e-37F, -6.58279303e-37F, -7.05299122e-37F, -7.52321496e-37F, -8.46361134e-37F, -9.40400772e-37F, \n-1.03444041e-36F, -1.12848005e-36F, -1.22251969e-36F, -1.31655932e-36F, -1.41059896e-36F, -1.50464443e-36F, \n-1.6927237e-36F, -1.88080298e-36F, -2.06888225e-36F, -2.25696153e-36F, -2.44504081e-36F, -2.63312e-36F, \n-2.82119936e-36F, -3.00929173e-36F, -3.38545028e-36F, -3.76160883e-36F, -4.13776738e-36F, -4.51392593e-36F, \n-4.89008448e-36F, -5.26624303e-36F, -5.64240158e-36F, -6.01858919e-36F, -6.77090629e-36F, -7.52322339e-36F, \n-8.2755405e-36F, -9.0278576e-36F, -9.7801747e-36F, -1.05324918e-35F, -1.12848089e-35F, -1.20371899e-35F, \n-1.35418241e-35F, -1.50464583e-35F, -1.65510925e-35F, -1.80557267e-35F, -1.95603609e-35F, -2.10649951e-35F, \n-2.25696293e-35F, -2.40744027e-35F, -2.70836711e-35F, -3.00929395e-35F, -3.31022079e-35F, -3.61114763e-35F, \n-3.91207447e-35F, -4.21300131e-35F, -4.51392815e-35F, -4.81488513e-35F, -5.41673881e-35F, -6.01859249e-35F, \n-6.62044617e-35F, -7.2223e-35F, -7.82415354e-35F, -8.42600722e-35F, -9.0278609e-35F, -9.62978e-35F, -1.08334868e-34F, \n-1.20371942e-34F, -1.32409015e-34F, -1.44446089e-34F, -1.56483163e-34F, -1.68520236e-34F, -1.8055731e-34F, \n-1.92595772e-34F, -2.1666992e-34F, -2.40744067e-34F, -2.64818214e-34F, -2.88892362e-34F, -3.12966509e-34F, \n-3.37040656e-34F, -3.61114803e-34F, -3.85191912e-34F, -4.33340207e-34F, -4.81488501e-34F, -5.29636796e-34F, \n-5.7778509e-34F, -6.25933385e-34F, -6.74081679e-34F, -7.22229974e-34F, -7.70384559e-34F, -8.66681148e-34F, \n-9.62977737e-34F, -1.05927433e-33F, -1.15557092e-33F, -1.2518675e-33F, -1.34816409e-33F, -1.44446068e-33F, \n-1.54077059e-33F, -1.73336377e-33F, -1.92595694e-33F, -2.11855012e-33F, -2.3111433e-33F, -2.50373648e-33F, \n-2.69632966e-33F, -2.88892283e-33F, -3.08154411e-33F, -3.46673047e-33F, -3.85191683e-33F, -4.23710318e-33F, \n-4.62228954e-33F, -5.0074759e-33F, -5.39266225e-33F, -5.77784861e-33F, -6.16309411e-33F, -6.93346682e-33F, \n-7.70383953e-33F, -8.47421224e-33F, -9.24458496e-33F, -1.00149577e-32F, -1.07853304e-32F, -1.15557031e-32F, \n-1.23262e-32F, -1.38669454e-32F, -1.54076908e-32F, -1.69484362e-32F, -1.84891817e-32F, -2.00299271e-32F, \n-2.15706725e-32F, -2.31114179e-32F, -2.46524234e-32F, -2.77339143e-32F, -3.08154051e-32F, -3.3896896e-32F, \n-3.69783868e-32F, -4.00598777e-32F, -4.31413685e-32F, -4.62228594e-32F, -4.93048939e-32F, -5.54678756e-32F, \n-6.16308573e-32F, -6.7793839e-32F, -7.39568207e-32F, -8.01198e-32F, -8.62827841e-32F, -9.24457658e-32F, \n-9.86098819e-32F, -1.10935845e-31F, -1.23261809e-31F, -1.35587772e-31F, -1.47913735e-31F, -1.60239699e-31F, \n-1.72565662e-31F, -1.84891626e-31F, -1.97219952e-31F, -2.21871879e-31F, -2.46523805e-31F, -2.71175732e-31F, \n-2.95827659e-31F, -3.20479586e-31F, -3.45131513e-31F, -3.69783439e-31F, -3.9444028e-31F, -4.43744133e-31F, \n-4.93048e-31F, -5.42351841e-31F, -5.91655694e-31F, -6.40959548e-31F, -6.90263401e-31F, -7.39567255e-31F, \n-7.88881312e-31F, -8.87489e-31F, -9.86096726e-31F, -1.08470443e-30F, -1.18331214e-30F, -1.28191985e-30F, \n-1.38052755e-30F, -1.47913526e-30F, -1.57776413e-30F, -1.77497954e-30F, -1.97219496e-30F, -2.16941037e-30F, \n-2.36662579e-30F, -2.5638412e-30F, -2.76105661e-30F, -2.95827203e-30F, -3.15553127e-30F, -3.54996209e-30F, \n-3.94439292e-30F, -4.33882375e-30F, -4.73325458e-30F, -5.12768541e-30F, -5.52211624e-30F, -5.91654707e-30F, \n-6.31106855e-30F, -7.09993e-30F, -7.88879187e-30F, -8.67765352e-30F, -9.46651518e-30F, -1.02553768e-29F, \n-1.10442385e-29F, -1.18331e-29F, -1.26221491e-29F, -1.41998725e-29F, -1.57775958e-29F, -1.73553191e-29F, \n-1.89330424e-29F, -2.05107657e-29F, -2.2088489e-29F, -2.36662123e-29F, -2.52443223e-29F, -2.8399769e-29F, \n-3.15552156e-29F, -3.47106622e-29F, -3.78661089e-29F, -4.10215555e-29F, -4.41770021e-29F, -4.73324488e-29F, \n-5.04886928e-29F, -5.67995861e-29F, -6.31104794e-29F, -6.94213726e-29F, -7.57322659e-29F, -8.20431591e-29F, \n-8.83540524e-29F, -9.46649457e-29F, -1.00977482e-28F, -1.13599269e-28F, -1.26221055e-28F, -1.38842842e-28F, \n-1.51464628e-28F, -1.64086415e-28F, -1.76708201e-28F, -1.89329988e-28F, -2.01955157e-28F, -2.2719873e-28F, \n-2.52442303e-28F, -2.77685876e-28F, -3.02929449e-28F, -3.28173022e-28F, -3.53416595e-28F, -3.78660168e-28F, \n-4.03910698e-28F, -4.54397844e-28F, -5.04885e-28F, -5.55372137e-28F, -6.05859283e-28F, -6.56346429e-28F, \n-7.06833575e-28F, -7.57320721e-28F, -8.07822167e-28F, -9.08796459e-28F, -1.00977075e-27F, -1.11074504e-27F, \n-1.21171934e-27F, -1.31269363e-27F, -1.41366792e-27F, -1.51464221e-27F, -1.61564587e-27F, -1.81759446e-27F, \n-2.01954304e-27F, -2.22149163e-27F, -2.42344021e-27F, -2.6253888e-27F, -2.82733738e-27F, -3.02928597e-27F, \n-3.23129483e-27F, -3.635192e-27F, -4.03908917e-27F, -4.44298634e-27F, -4.84688351e-27F, -5.25078067e-27F, \n-5.65467784e-27F, -6.05857501e-27F, -6.46259582e-27F, -7.27039e-27F, -8.0781845e-27F, -8.88597884e-27F, \n-9.69377317e-27F, -1.05015675e-26F, -1.13093618e-26F, -1.21171562e-26F, -1.2925204e-26F, -1.45407927e-26F, \n-1.61563813e-26F, -1.777197e-26F, -1.93875587e-26F, -2.10031473e-26F, -2.2618736e-26F, -2.42343247e-26F, \n-2.58504326e-26F, -2.908161e-26F, -3.23127873e-26F, -3.55439647e-26F, -3.8775142e-26F, -4.20063194e-26F, \n-4.52374967e-26F, -4.8468674e-26F, -5.17009145e-26F, -5.81632692e-26F, -6.46256239e-26F, -7.10879786e-26F, \n-7.75503333e-26F, -8.4012688e-26F, -9.04750427e-26F, -9.69374e-26F, -1.03401928e-25F, -1.16326637e-25F, \n-1.29251346e-25F, -1.42176056e-25F, -1.55100765e-25F, -1.68025475e-25F, -1.80950184e-25F, -1.93874893e-25F, \n-2.06804052e-25F, -2.32653471e-25F, -2.5850289e-25F, -2.84352309e-25F, -3.10201728e-25F, -3.36051146e-25F, \n-3.61900565e-25F, -3.87749984e-25F, -4.13608499e-25F, -4.65307337e-25F, -5.17006175e-25F, -5.68705e-25F, \n-6.2040385e-25F, -6.72102687e-25F, -7.23801525e-25F, -7.75500362e-25F, -8.27217788e-25F, -9.30615463e-25F, \n-1.03401314e-24F, -1.13741081e-24F, -1.24080849e-24F, -1.34420616e-24F, -1.44760384e-24F, -1.55100151e-24F, \n-1.65443715e-24F, -1.8612325e-24F, -2.06802785e-24F, -2.2748232e-24F, -2.48161855e-24F, -2.6884139e-24F, \n-2.89520926e-24F, -3.10200461e-24F, -3.30887746e-24F, -3.72246816e-24F, -4.13605886e-24F, -4.54964956e-24F, \n-4.96324026e-24F, -5.37683096e-24F, -5.79042167e-24F, -6.20401237e-24F, -6.61776123e-24F, -7.44494264e-24F, \n-8.27212404e-24F, -9.09930544e-24F, -9.92648684e-24F, -1.07536682e-23F, -1.15808496e-23F, -1.2408031e-23F, \n-1.32355351e-23F, -1.48898979e-23F, -1.65442607e-23F, -1.81986235e-23F, -1.98529863e-23F, -2.15073491e-23F, \n-2.31617119e-23F, -2.48160747e-23F, -2.64710954e-23F, -2.9779821e-23F, -3.30885466e-23F, -3.63972722e-23F, \n-3.97059978e-23F, -4.30147234e-23F, -4.63234491e-23F, -4.96321747e-23F, -5.29422413e-23F, -5.95596925e-23F, \n-6.61771438e-23F, -7.2794595e-23F, -7.94120462e-23F, -8.60295e-23F, -9.26469486e-23F, -9.92644e-23F, -1.05884584e-22F, \n-1.19119486e-22F, -1.32354388e-22F, -1.45589291e-22F, -1.58824193e-22F, -1.72059096e-22F, -1.85294e-22F, \n-1.98528901e-22F, -2.11769369e-22F, -2.38239174e-22F, -2.64708979e-22F, -2.91178784e-22F, -3.17648589e-22F, \n-3.44118393e-22F, -3.70588198e-22F, -3.97058e-22F, -4.23539142e-22F, -4.76478752e-22F, -5.29418362e-22F, \n-5.82357971e-22F, -6.35297581e-22F, -6.88237191e-22F, -7.411768e-22F, -7.9411641e-22F, -8.47079092e-22F, \n-9.52958312e-22F, -1.05883753e-21F, -1.16471675e-21F, -1.27059597e-21F, -1.37647519e-21F, -1.48235441e-21F, \n-1.58823363e-21F, -1.6941598e-21F, -1.90591824e-21F, -2.11767668e-21F, -2.32943512e-21F, -2.54119356e-21F, \n-2.75295199e-21F, -2.96471043e-21F, -3.17646887e-21F, -3.38832283e-21F, -3.81183971e-21F, -4.23535659e-21F, \n-4.65887346e-21F, -5.08239034e-21F, -5.50590722e-21F, -5.9294241e-21F, -6.35294097e-21F, -6.77665213e-21F, \n-7.62368588e-21F, -8.47072e-21F, -9.31775339e-21F, -1.01647871e-20F, -1.10118209e-20F, -1.18588547e-20F, \n-1.27058884e-20F, -1.35533172e-20F, -1.52473847e-20F, -1.69414522e-20F, -1.86355197e-20F, -2.03295872e-20F, \n-2.20236547e-20F, -2.37177222e-20F, -2.54117897e-20F, -2.71066602e-20F, -3.04947952e-20F, -3.38829302e-20F, \n-3.72710653e-20F, -4.06592e-20F, -4.40473353e-20F, -4.74354703e-20F, -5.08236053e-20F, -5.42133721e-20F, \n-6.09896422e-20F, -6.77659122e-20F, -7.45421822e-20F, -8.13184523e-20F, -8.80947223e-20F, -9.48709924e-20F, \n-1.01647262e-19F, -1.08426848e-19F, -1.21979388e-19F, -1.35531928e-19F, -1.49084468e-19F, -1.62637008e-19F, \n-1.76189548e-19F, -1.89742088e-19F, -2.03294628e-19F, -2.16853902e-19F, -2.43958982e-19F, -2.71064062e-19F, \n-2.98169143e-19F, -3.25274223e-19F, -3.52379303e-19F, -3.79484383e-19F, -4.06589463e-19F, -4.33708218e-19F, \n-4.87918378e-19F, -5.42128538e-19F, -5.96338699e-19F, -6.50548859e-19F, -7.04759e-19F, -7.5896918e-19F, \n-8.1317934e-19F, -8.67417262e-19F, -9.75837583e-19F, -1.0842579e-18F, -1.19267822e-18F, -1.30109855e-18F, \n-1.40951887e-18F, -1.51793919e-18F, -1.62635951e-18F, -1.73483618e-18F, -1.95167682e-18F, -2.16851746e-18F, \n-2.3853581e-18F, -2.60219874e-18F, -2.81903939e-18F, -3.03588e-18F, -3.25272067e-18F, -3.46967567e-18F, \n-3.90335695e-18F, -4.33703823e-18F, -4.77071952e-18F, -5.2044008e-18F, -5.63808208e-18F, -6.07176336e-18F, \n-6.50544465e-18F, -6.93935795e-18F, -7.80672052e-18F, -8.67408308e-18F, -9.54144565e-18F, -1.04088082e-17F, \n-1.12761708e-17F, -1.21435333e-17F, -1.30108959e-17F, -1.38787291e-17F, -1.56134543e-17F, -1.73481794e-17F, \n-1.90829045e-17F, -2.08176297e-17F, -2.25523548e-17F, -2.42870799e-17F, -2.60218051e-17F, -2.77574847e-17F, \n-3.1226935e-17F, -3.46963853e-17F, -3.81658355e-17F, -4.16352858e-17F, -4.51047361e-17F, -4.85741863e-17F, \n-5.20436366e-17F, -5.55150224e-17F, -6.2453923e-17F, -6.93928235e-17F, -7.6331724e-17F, -8.32706245e-17F, \n-9.0209525e-17F, -9.71484256e-17F, -1.04087326e-16F, -1.11030151e-16F, -1.24907952e-16F, -1.38785753e-16F, \n-1.52663554e-16F, -1.66541355e-16F, -1.80419156e-16F, -1.94296957e-16F, -2.08174758e-16F, -2.22060513e-16F, \n-2.49816115e-16F, -2.77571717e-16F, -3.0532732e-16F, -3.33082922e-16F, -3.60838524e-16F, -3.88594126e-16F, \n-4.16349728e-16F, -4.4412145e-16F, -4.99632654e-16F, -5.55143858e-16F, -6.10655063e-16F, -6.66166267e-16F, \n-7.21677471e-16F, -7.77188675e-16F, -8.32699879e-16F, -8.88243747e-16F, -9.99266155e-16F, -1.11028856e-15F, \n-1.22131097e-15F, -1.33233338e-15F, -1.44335579e-15F, -1.5543782e-15F, -1.66540061e-15F, -1.77648919e-15F, \n-1.998534e-15F, -2.22057882e-15F, -2.44262364e-15F, -2.66466846e-15F, -2.88671327e-15F, -3.10875809e-15F, \n-3.33080291e-15F, -3.55298176e-15F, -3.9970714e-15F, -4.44116103e-15F, -4.88525066e-15F, -5.3293403e-15F, \n-5.77343e-15F, -6.21751956e-15F, -6.6616092e-15F, -7.10597e-15F, -7.99414957e-15F, -8.88232884e-15F, -9.77050811e-15F, \n-1.06586874e-14F, -1.15468666e-14F, -1.24350459e-14F, -1.33232252e-14F, -1.42119542e-14F, -1.59883127e-14F, \n-1.77646712e-14F, -1.95410298e-14F, -2.13173883e-14F, -2.30937468e-14F, -2.48701054e-14F, -2.66464639e-14F, \n-2.84239354e-14F, -3.19766525e-14F, -3.55293696e-14F, -3.90820866e-14F, -4.26348037e-14F, -4.61875208e-14F, \n-4.97402378e-14F, -5.32929549e-14F, -5.68479251e-14F, -6.39533592e-14F, -7.10587933e-14F, -7.81642275e-14F, \n-8.52696616e-14F, -9.23750957e-14F, -9.94805299e-14F, -1.06585964e-13F, -1.13695959e-13F, -1.27906827e-13F, \n-1.42117695e-13F, -1.56328563e-13F, -1.70539432e-13F, -1.847503e-13F, -1.98961168e-13F, -2.13172036e-13F, \n-2.27392134e-13F, -2.55813871e-13F, -2.84235607e-13F, -3.12657344e-13F, -3.4107908e-13F, -3.69500817e-13F, \n-3.97922553e-13F, -4.2634429e-13F, -4.54784702e-13F, -5.11628175e-13F, -5.68471648e-13F, -6.25315121e-13F, \n-6.82158594e-13F, -7.39002067e-13F, -7.9584554e-13F, -8.52689e-13F, -9.09570271e-13F, -1.02325722e-12F, \n-1.13694416e-12F, -1.25063111e-12F, -1.36431806e-12F, -1.478005e-12F, -1.59169195e-12F, -1.70537889e-12F, \n-1.81914228e-12F, -2.04651617e-12F, -2.27389e-12F, -2.50126395e-12F, -2.72863785e-12F, -2.95601174e-12F, \n-3.18338563e-12F, -3.41075952e-12F, -3.63828802e-12F, -4.09303581e-12F, -4.54778359e-12F, -5.00253138e-12F, \n-5.45727916e-12F, -5.91202694e-12F, -6.36677473e-12F, -6.82152251e-12F, -7.27658298e-12F, -8.18607855e-12F, \n-9.09557412e-12F, -1.00050697e-11F, -1.09145653e-11F, -1.18240608e-11F, -1.27335564e-11F, -1.3643052e-11F, \n-1.45531798e-11F, -1.6372171e-11F, -1.81911621e-11F, -2.00101533e-11F, -2.18291444e-11F, -2.36481355e-11F, \n-2.54671267e-11F, -2.72861178e-11F, -2.91063874e-11F, -3.27443697e-11F, -3.6382352e-11F, -4.00203343e-11F, \n-4.36583165e-11F, -4.72963e-11F, -5.09342811e-11F, -5.45722634e-11F, -5.82128304e-11F, -6.54887949e-11F, \n-7.27647595e-11F, -8.0040724e-11F, -8.73166886e-11F, -9.45926532e-11F, -1.01868618e-10F, -1.09144582e-10F, \n-1.16425772e-10F, -1.30977701e-10F, -1.4552963e-10F, -1.60081559e-10F, -1.74633488e-10F, -1.89185417e-10F, \n-2.03737346e-10F, -2.18289276e-10F, -2.32851766e-10F, -2.61955624e-10F, -2.91059482e-10F, -3.2016334e-10F, \n-3.49267198e-10F, -3.78371057e-10F, -4.07474915e-10F, -4.36578773e-10F, -4.65704e-10F, -5.23911692e-10F, \n-5.82119408e-10F, -6.40327125e-10F, -6.98534841e-10F, -7.56742558e-10F, -8.14950274e-10F, -8.73158e-10F, \n-9.31408839e-10F, -1.04782427e-9F, -1.1642397e-9F, -1.28065514e-9F, -1.39707057e-9F, -1.513486e-9F, -1.62990144e-9F, \n-1.74631687e-9F, -1.86281945e-9F, -2.09565032e-9F, -2.32848119e-9F, -2.56131205e-9F, -2.79414292e-9F, -3.02697378e-9F, \n-3.25980465e-9F, -3.49263551e-9F, -3.72564246e-9F, -4.19130419e-9F, -4.65696592e-9F, -5.12262766e-9F, -5.58828939e-9F, \n-6.05395112e-9F, -6.51961285e-9F, -6.98527458e-9F, -7.45129203e-9F, -8.38261549e-9F, -9.31393895e-9F, -1.02452624e-8F, \n-1.11765859e-8F, -1.21079093e-8F, -1.30392328e-8F, -1.39705563e-8F, -1.49025983e-8F, -1.67652452e-8F, -1.86278921e-8F, \n-2.0490539e-8F, -2.2353186e-8F, -2.42158329e-8F, -2.60784798e-8F, -2.79411267e-8F, -2.9805225e-8F, -3.35305188e-8F, \n-3.72558127e-8F, -4.09811065e-8F, -4.47064e-8F, -4.84316942e-8F, -5.21569881e-8F, -5.58822819e-8F, -5.96105068e-8F, \n-6.70610945e-8F, -7.45116822e-8F, -8.19622699e-8F, -8.94128576e-8F, -9.68634453e-8F, -1.04314033e-7F, -1.11764621e-7F, \n-1.19221127e-7F, -1.34122303e-7F, -1.49023478e-7F, -1.63924653e-7F, -1.78825829e-7F, -1.93727e-7F, -2.0862818e-7F, \n-2.23529355e-7F, -2.38442482e-7F, -2.68244833e-7F, -2.98047183e-7F, -3.27849534e-7F, -3.57651885e-7F, -3.87454236e-7F, \n-4.17256587e-7F, -4.47058937e-7F, -4.76885418e-7F, -5.3649012e-7F, -5.96094822e-7F, -6.55699523e-7F, -7.15304225e-7F, \n-7.74908926e-7F, -8.34513628e-7F, -8.9411833e-7F, -9.53771746e-7F, -1.07298115e-6F, -1.19219055e-6F, -1.3114e-6F, \n-1.43060936e-6F, -1.54981876e-6F, -1.66902817e-6F, -1.78823757e-6F, -1.90754531e-6F, -2.14596412e-6F, -2.38438292e-6F, \n-2.62280173e-6F, -2.86122054e-6F, -3.09963934e-6F, -3.33805815e-6F, -3.57647696e-6F, -3.81509426e-6F, -4.29193187e-6F, \n-4.76876949e-6F, -5.2456071e-6F, -5.72244471e-6F, -6.19928232e-6F, -6.67612e-6F, -7.15295755e-6F, -7.6301958e-6F, \n-8.58387102e-6F, -9.53754625e-6F, -1.04912215e-5F, -1.14448967e-5F, -1.23985719e-5F, -1.33522472e-5F, -1.43059224e-5F, \n-1.52604061e-5F, -1.71677566e-5F, -1.9075107e-5F, -2.09824575e-5F, -2.2889808e-5F, -2.47971584e-5F, -2.67045089e-5F, \n-2.86118593e-5F, -3.05208414e-5F, -3.43355423e-5F, -3.81502432e-5F, -4.19649441e-5F, -4.5779645e-5F, -4.95943459e-5F, \n-5.34090468e-5F, -5.72237477e-5F, -6.1041741e-5F, -6.86711428e-5F, -7.63005446e-5F, -8.39299464e-5F, -9.15593482e-5F, \n-9.918875e-5F, -0.000106818152F, -0.000114447554F, -0.000122083598F, -0.000137342402F, -0.000152601206F, \n-0.000167860009F, -0.000183118813F, -0.000198377616F, -0.00021363642F, -0.000228895224F, -0.00024416743F, \n-0.000274685037F, -0.000305202644F, -0.000335720251F, -0.000366237859F, -0.000396755466F, -0.000427273073F, \n-0.00045779068F, -0.000488335325F, -0.000549370539F, -0.000610405754F, -0.000671440968F, -0.000732476183F, \n-0.000793511397F, -0.000854546612F, -0.000915581826F, -0.000976671581F, -0.00109874201F, -0.00122081244F, \n-0.00134288287F, -0.0014649533F, -0.00158702373F, -0.00170909415F, -0.00183116458F, -0.00195334502F, -0.00219748588F, \n-0.00244162674F, -0.0026857676F, -0.00292990846F, -0.00317404931F, -0.00341819017F, -0.00366233103F, -0.00390669378F, \n-0.00439497549F, -0.00488325721F, -0.00537153892F, -0.00585982064F, -0.00634810235F, -0.00683638407F, -0.00732466578F, \n-0.007813395F, -0.00878995843F, -0.00976652186F, -0.0107430853F, -0.0117196487F, -0.0126962122F, -0.0136727756F, \n-0.014649339F, -0.0156268049F, -0.0175799318F, -0.0195330586F, -0.0214861855F, -0.0234393124F, -0.0253924392F, \n-0.0273455661F, -0.0292986929F, -0.0312536396F, -0.0351598933F, -0.0390661471F, -0.0429724F, -0.0468786545F, \n-0.0507849082F, -0.054691162F, -0.0585974157F, -0.0625073388F, -0.0703198463F, -0.0781323537F, -0.0859448612F, \n-0.0937573686F, -0.101569876F, -0.109382384F, -0.117194891F, -0.125014797F, -0.140639812F, -0.156264827F, \n-0.171889842F, -0.187514856F, -0.203139871F, -0.218764886F, -0.234389901F, -0.250029832F, -0.281279862F, \n-0.312529892F, -0.343779922F, -0.375029951F, -0.406279981F, -0.43753F, -0.468780041F, -0.500060141F, -0.562560201F, \n-0.62506026F, -0.68756032F, -0.75006038F, -0.812560439F, -0.875060499F, -0.937560558F, -1.00012124F, -1.12512136F, \n-1.25012147F, -1.37512159F, -1.50012171F, -1.62512183F, -1.75012195F, -1.87512207F, -2.00024438F, -2.25024462F, \n-2.50024486F, -2.75024509F, -3.00024533F, -3.25024557F, -3.50024581F, -3.75024605F, -4.00049257F, -4.50049305F, \n-5.00049353F, -5.500494F, -6.00049448F, -6.50049496F, -7.00049543F, -7.50049591F, -8.00099277F, -9.00099373F, \n-10.0009947F, -11.0009956F, -12.0009966F, -13.0009975F, -14.0009985F, -15.0009995F, -16.002F, -18.0020027F, \n-20.0020046F, -22.0020065F, -24.0020084F, -26.0020103F, -28.0020123F, -30.0020142F, -32.0040321F, -36.0040359F, \n-40.0040398F, -44.0040436F, -48.0040474F, -52.0040512F, -56.004055F, -60.0040588F, -64.0081253F, -72.0081329F, \n-80.0081406F, -88.0081482F, -96.0081558F, -104.008163F, -112.008171F, -120.008179F, -128.016373F, -144.016388F, \n-160.016403F, -176.016418F, -192.016434F, -208.016449F, -224.016464F, -240.016479F, -256.033F, -288.03302F, \n-320.033051F, -352.033081F, -384.033112F, -416.033142F, -448.033173F, -480.033203F, -512.066467F, -576.066528F, \n-640.066589F, -704.06665F, -768.066711F, -832.066772F, -896.066833F, -960.066895F, -1024.13391F, -1152.13403F, \n-1280.13416F, -1408.13428F, -1536.1344F, -1664.13452F, -1792.13464F, -1920.13477F, -2048.26978F, -2304.27F, \n-2560.27026F, -2816.27051F, -3072.27075F, -3328.271F, -3584.27124F, -3840.27148F, -4096.54346F, -4608.54395F, \n-5120.54443F, -5632.54492F, -6144.54541F, -6656.5459F, -7168.54639F, -7680.54688F, -8193.09473F, -9217.0957F, \n-10241.0967F, -11265.0977F, -12289.0986F, -13313.1F, -14337.1006F, -15361.1016F, -16386.2051F, -18434.207F, \n-20482.209F, -22530.2109F, -24578.2129F, -26626.2148F, -28674.2168F, -30722.2188F, -32772.4414F, -36868.4453F, \n-40964.4492F, -45060.4531F, -49156.457F, -53252.4609F, -57348.4648F, -61444.4688F, -65544.9453F, -73736.9531F, \n-81928.9609F, -90120.9688F, -98312.9766F, -106504.984F, -114696.992F, -122889.0F, -131090.016F, -147474.031F, \n-163858.047F, -180242.062F, -196626.078F, -213010.094F, -229394.109F, -245778.125F, -262180.281F, -294948.312F, \n-327716.344F, -360484.375F, -393252.406F, -426020.438F, -458788.469F, -491556.5F, -524361.062F, -589897.125F, \n-655433.188F, -720969.25F, -786505.312F, -852041.375F, -917577.438F, -983113.5F, -1048723.12F, -1179795.25F, \n-1310867.38F, -1441939.5F, -1573011.62F, -1704083.75F, -1835155.88F, -1966228.0F, -2097448.25F, -2359592.5F, \n-2621736.75F, -2883881.0F, -3146025.25F, -3408169.5F, -3670313.75F, -3932458.0F, -4194900.5F, -4719189.0F, \n-5243477.5F, -5767766.0F, -6292054.5F, -6816343.0F, -7340631.5F, -7.86492e+6F, -8389809.0F, -9438386.0F, -10486963.0F, \n-11535540.0F, -12584117.0F, -13632694.0F, -14681271.0F, -15729848.0F, -16779634.0F, -18876788.0F, -20973942.0F, \n-23071096.0F, -25168250.0F, -27265404.0F, -29362558.0F, -31459712.0F, -3.35593e+7F, -37753608.0F, -41947916.0F, \n-46142224.0F, -50336532.0F, -54530840.0F, -58725148.0F, -62919456.0F, -67118664.0F, -75507280.0F, -83895896.0F, \n-92284512.0F, -100673128.0F, -109061744.0F, -117450360.0F, -125838976.0F, -134237456.0F, -151014688.0F, -167791920.0F, \n-184569152.0F, -201346384.0F, -218123616.0F, -234900848.0F, -251678080.0F, -268475168.0F, -302029632.0F, \n-335584096.0F, -369138560.0F, -402693024.0F, -436247488.0F, -469801952.0F, -503356416.0F, -536950848.0F, \n-604059776.0F, -671168704.0F, -738277632.0F, -805386560.0F, -872495488.0F, -939604416.0F, -1.00671334e+9F, \n-1.07390272e+9F, -1.20812058e+9F, -1.34233843e+9F, -1.47655629e+9F, -1.61077414e+9F, -1.744992e+9F, -1.87920986e+9F, \n-2.01342771e+9F, -2.14780749e+9F, -2.4162432e+9F, -2.68467891e+9F, -2.95311462e+9F, -3.22155034e+9F, -3.48998605e+9F, \n-3.75842176e+9F, -4.02685747e+9F, -4.29561907e+9F, -4.8324905e+9F, -5.36936192e+9F, -5.90623334e+9F, -6.44310477e+9F, \n-6.97997619e+9F, -7.51684762e+9F, -8.05371904e+9F, -8.59124634e+9F, -9.66498918e+9F, -1.0738732e+10F, \n-1.18124749e+10F, -1.28862177e+10F, -1.39599606e+10F, -1.50337034e+10F, -1.61074463e+10F, -1.71825091e+10F, \n-1.93299948e+10F, -2.14774804e+10F, -2.36249661e+10F, -2.57724518e+10F, -2.79199375e+10F, -3.00674232e+10F, \n-3.22149089e+10F, -3.43650509e+10F, -3.86600223e+10F, -4.29549937e+10F, -4.72499651e+10F, -5.15449364e+10F, \n-5.58399078e+10F, -6.01348792e+10F, -6.44298506e+10F, -6.87301673e+10F, -7.73201101e+10F, -8.59100529e+10F, \n-9.44999956e+10F, -1.03089938e+11F, -1.11679881e+11F, -1.20269824e+11F, -1.28859767e+11F, -1.37460466e+11F, \n-1.54640351e+11F, -1.71820237e+11F, -1.89000122e+11F, -2.0618e+11F, -2.23359894e+11F, -2.40539779e+11F, \n-2.57719665e+11F, -2.74921193e+11F, -3.09280965e+11F, -3.43640736e+11F, -3.78000507e+11F, -4.12360278e+11F, \n-4.46720049e+11F, -4.8107982e+11F, -5.15439591e+11F, -5.49842911e+11F, -6.18562454e+11F, -6.87282e+11F, \n-7.56001538e+11F, -8.2472108e+11F, -8.93440623e+11F, -9.62160165e+11F, -1.03087971e+12F, -1.09968687e+12F, \n-1.23712596e+12F, -1.37456504e+12F, -1.51200412e+12F, -1.64944321e+12F, -1.78688229e+12F, -1.92432138e+12F, \n-2.06176046e+12F, -2.19937584e+12F, -2.47425401e+12F, -2.74913218e+12F, -3.02401035e+12F, -3.29888852e+12F, \n-3.57376668e+12F, -3.84864485e+12F, -4.12352302e+12F, -4.39875587e+12F, -4.94851221e+12F, -5.49826855e+12F, \n-6.04802489e+12F, -6.59778123e+12F, -7.14753756e+12F, -7.6972939e+12F, -8.24705e+12F, -8.79752e+12F, -9.89703281e+12F, \n-1.09965455e+13F, -1.20960582e+13F, -1.31955708e+13F, -1.42950835e+13F, -1.53945962e+13F, -1.64941089e+13F, \n-1.7595057e+13F, -1.97940824e+13F, -2.19931078e+13F, -2.41921331e+13F, -2.63911585e+13F, -2.85901838e+13F, \n-3.07892092e+13F, -3.29882345e+13F, -3.51901476e+13F, -3.95882e+13F, -4.39862491e+13F, -4.83843e+13F, \n-5.27823505e+13F, -5.71804e+13F, -6.15784519e+13F, -6.59765026e+13F, -7.03803624e+13F, -7.91764638e+13F, \n-8.79725652e+13F, -9.67686666e+13F, -1.05564768e+14F, -1.14360869e+14F, -1.23156971e+14F, -1.31953072e+14F, \n-1.40760859e+14F, -1.58353062e+14F, -1.75945265e+14F, -1.93537467e+14F, -2.1112967e+14F, -2.28721873e+14F, \n-2.46314076e+14F, -2.63906279e+14F, -2.81522e+14F, -3.16706392e+14F, -3.51890798e+14F, -3.87075203e+14F, \n-4.22259609e+14F, -4.57444e+14F, -4.9262842e+14F, -5.27812826e+14F, -5.6304451e+14F, -6.33413321e+14F, \n-7.03782132e+14F, -7.74150944e+14F, -8.44519755e+14F, -9.14888566e+14F, -9.85257378e+14F, -1.05562619e+15F, \n-1.12609009e+15F, -1.26682772e+15F, -1.40756534e+15F, -1.54830296e+15F, -1.68904058e+15F, -1.82977821e+15F, \n-1.97051583e+15F, -2.11125345e+15F, -2.25218233e+15F, -2.53365758e+15F, -2.81513282e+15F, -3.09660807e+15F, \n-3.37808331e+15F, -3.65955856e+15F, -3.94103381e+15F, -4.22250905e+15F, -4.50436896e+15F, -5.06731945e+15F, \n-5.63027e+15F, -6.19322043e+15F, -6.75617092e+15F, -7.31912141e+15F, -7.88207191e+15F, -8.4450224e+15F, \n-9.00874652e+15F, -1.01346475e+16F, -1.12605485e+16F, -1.23864495e+16F, -1.35123504e+16F, -1.46382514e+16F, \n-1.57641524e+16F, -1.68900534e+16F, -1.80175102e+16F, -2.02693122e+16F, -2.25211141e+16F, -2.47729161e+16F, \n-2.70247181e+16F, -2.927652e+16F, -3.1528322e+16F, -3.37801239e+16F, -3.60350548e+16F, -4.05386587e+16F, \n-4.50422626e+16F, -4.95458666e+16F, -5.40494705e+16F, -5.85530744e+16F, -6.30566783e+16F, -6.75602822e+16F, \n-7.20701783e+16F, -8.10773861e+16F, -9.0084594e+16F, -9.90918e+16F, -1.0809901e+17F, -1.17106218e+17F, \n-1.26113425e+17F, -1.35120633e+17F, -1.44140494e+17F, -1.6215491e+17F, -1.80169325e+17F, -1.98183741e+17F, \n-2.16198157e+17F, -2.34212572e+17F, -2.52226988e+17F, -2.70241404e+17F, -2.88281263e+17F, -3.24310094e+17F, \n-3.60338926e+17F, -3.96367757e+17F, -4.32396588e+17F, -4.6842542e+17F, -5.04454251e+17F, -5.40483083e+17F, \n-5.76563076e+17F, -6.48620738e+17F, -7.20678401e+17F, -7.92736064e+17F, -8.64793727e+17F, -9.36851389e+17F, \n-1.00890905e+18F, -1.08096671e+18F, -1.15312725e+18F, -1.29724258e+18F, -1.4413579e+18F, -1.58547323e+18F, \n-1.72958855e+18F, -1.87370388e+18F, -2.0178192e+18F, -2.16193453e+18F, -2.3062567e+18F, -2.59448735e+18F, \n-2.882718e+18F, -3.17094865e+18F, -3.4591793e+18F, -3.74741e+18F, -4.03564061e+18F, -4.32387126e+18F, -4.6125178e+18F, \n-5.1889791e+18F, -5.7654404e+18F, -6.34190171e+18F, -6.91836301e+18F, -7.49482431e+18F, -8.07128561e+18F, \n-8.64774691e+18F, -9.22504439e+18F, -1.0377967e+19F, -1.15308896e+19F, -1.26838122e+19F, -1.38367348e+19F, \n-1.49896574e+19F, -1.614258e+19F, -1.72955026e+19F, -1.84501064e+19F, -2.07559516e+19F, -2.30617968e+19F, \n-2.5367642e+19F, -2.76734872e+19F, -2.99793324e+19F, -3.22851776e+19F, -3.45910228e+19F, -3.69002479e+19F, \n-4.15119384e+19F, -4.61236288e+19F, -5.07353192e+19F, -5.53470096e+19F, -5.99587e+19F, -6.45703904e+19F, \n-6.91820809e+19F, -7.38005663e+19F, -8.30239471e+19F, -9.22473279e+19F, -1.01470709e+20F, -1.1069409e+20F, \n-1.1991747e+20F, -1.29140851e+20F, -1.38364232e+20F, -1.47601273e+20F, -1.66048035e+20F, -1.84494797e+20F, \n-2.02941558e+20F, -2.2138832e+20F, -2.39835082e+20F, -2.58281843e+20F, -2.76728605e+20F, -2.95202828e+20F, \n-3.32096351e+20F, -3.68989875e+20F, -4.05883398e+20F, -4.42776921e+20F, -4.79670445e+20F, -5.16563968e+20F, \n-5.53457491e+20F, -5.90406219e+20F, -6.64193266e+20F, -7.37980312e+20F, -8.11767359e+20F, -8.85554406e+20F, \n-9.59341452e+20F, -1.0331285e+21F, -1.10691555e+21F, -1.18081356e+21F, -1.32838766e+21F, -1.47596175e+21F, \n-1.62353584e+21F, -1.77111e+21F, -1.91868403e+21F, -2.06625812e+21F, -2.21383222e+21F, -2.36162938e+21F, \n-2.65677757e+21F, -2.95192575e+21F, -3.24707394e+21F, -3.54222213e+21F, -3.83737031e+21F, -4.1325185e+21F, \n-4.42766669e+21F, -4.72326326e+21F, -5.31355964e+21F, -5.90385601e+21F, -6.49415238e+21F, -7.08444876e+21F, \n-7.67474513e+21F, -8.2650415e+21F, -8.85533788e+21F, -9.44653553e+21F, -1.06271283e+22F, -1.1807721e+22F, \n-1.29883138e+22F, -1.41689065e+22F, -1.53494993e+22F, -1.6530092e+22F, -1.77106848e+22F, -1.88930891e+22F, \n-2.12542746e+22F, -2.36154601e+22F, -2.59766456e+22F, -2.83378311e+22F, -3.06990165e+22F, -3.3060202e+22F, \n-3.54213875e+22F, -3.77862142e+22F, -4.25085852e+22F, -4.72309562e+22F, -5.19533271e+22F, -5.66757e+22F, \n-6.13980691e+22F, -6.61204401e+22F, -7.08428111e+22F, -7.55725e+22F, -8.50172424e+22F, -9.44619844e+22F, \n-1.03906726e+23F, -1.13351468e+23F, -1.2279621e+23F, -1.32240952e+23F, -1.41685694e+23F, -1.51145145e+23F, \n-1.70034629e+23F, -1.88924113e+23F, -2.07813597e+23F, -2.26703081e+23F, -2.45592565e+23F, -2.64482049e+23F, \n-2.83371533e+23F, -3.02290578e+23F, -3.40069546e+23F, -3.77848514e+23F, -4.15627482e+23F, -4.5340645e+23F, \n-4.91185418e+23F, -5.28964386e+23F, -5.66743353e+23F, -6.04581733e+23F, -6.80139669e+23F, -7.55697604e+23F, \n-8.3125554e+23F, -9.06813476e+23F, -9.82371412e+23F, -1.05792935e+24F, -1.13348728e+24F, -1.20916462e+24F, \n-1.36028049e+24F, -1.51139636e+24F, -1.66251223e+24F, -1.8136281e+24F, -1.96474398e+24F, -2.11585985e+24F, \n-2.26697572e+24F, -2.41833154e+24F, -2.72056329e+24F, -3.02279503e+24F, -3.32502677e+24F, -3.62725852e+24F, \n-3.92949026e+24F, -4.231722e+24F, -4.53395374e+24F, -4.8366677e+24F, -5.44113118e+24F, -6.04559467e+24F, \n-6.65005816e+24F, -7.25452164e+24F, -7.85898513e+24F, -8.46344861e+24F, -9.0679121e+24F, -9.67334462e+24F, \n-1.08822716e+25F, -1.20911986e+25F, -1.33001255e+25F, -1.45090525e+25F, -1.57179795e+25F, -1.69269065e+25F, \n-1.81358334e+25F, -1.93467077e+25F, -2.17645616e+25F, -2.41824156e+25F, -2.66002695e+25F, -2.90181235e+25F, \n-3.14359774e+25F, -3.38538314e+25F, -3.62716853e+25F, -3.86934523e+25F, -4.35291601e+25F, -4.8364868e+25F, \n-5.32005759e+25F, -5.80362838e+25F, -6.28719917e+25F, -6.77077e+25F, -7.25434075e+25F, -7.73869783e+25F, \n-8.70583941e+25F, -9.67298099e+25F, -1.06401226e+26F, -1.16072641e+26F, -1.25744057e+26F, -1.35415473e+26F, \n-1.45086889e+26F, -1.54774104e+26F, -1.74116936e+26F, -1.93459767e+26F, -2.12802599e+26F, -2.3214543e+26F, \n-2.51488262e+26F, -2.70831094e+26F, -2.90173925e+26F, -3.09548504e+26F, -3.48234167e+26F, -3.8691983e+26F, \n-4.25605493e+26F, -4.64291156e+26F, -5.02976819e+26F, -5.41662482e+26F, -5.80348145e+26F, -6.19097597e+26F, \n-6.96468924e+26F, -7.7384025e+26F, -8.51211576e+26F, -9.28582902e+26F, -1.00595423e+27F, -1.08332555e+27F, \n-1.16069688e+27F, -1.23819638e+27F, -1.39293903e+27F, -1.54768168e+27F, -1.70242433e+27F, -1.85716699e+27F, \n-2.01190964e+27F, -2.16665229e+27F, -2.32139494e+27F, -2.47639511e+27F, -2.78588042e+27F, -3.09536572e+27F, \n-3.40485103e+27F, -3.71433633e+27F, -4.02382164e+27F, -4.33330694e+27F, -4.64279225e+27F, -4.95279495e+27F, \n-5.57176556e+27F, -6.19073617e+27F, -6.80970678e+27F, -7.42867739e+27F, -8.047648e+27F, -8.66661861e+27F, \n-9.28558922e+27F, -9.90559934e+27F, -1.11435406e+28F, -1.23814818e+28F, -1.3619423e+28F, -1.48573642e+28F, \n-1.60953054e+28F, -1.73332467e+28F, -1.85711879e+28F, -1.98112176e+28F, -2.22871e+28F, -2.47629824e+28F, \n-2.72388649e+28F, -2.97147473e+28F, -3.21906298e+28F, -3.46665122e+28F, -3.71423946e+28F, -3.96224729e+28F, \n-4.45742378e+28F, -4.95260027e+28F, -5.44777675e+28F, -5.94295324e+28F, -6.43812973e+28F, -6.93330622e+28F, \n-7.42848271e+28F, -7.92450214e+28F, -8.91485511e+28F, -9.90520809e+28F, -1.08955611e+29F, -1.1885914e+29F, \n-1.2876267e+29F, -1.386662e+29F, -1.4856973e+29F, -1.58490194e+29F, -1.78297253e+29F, -1.98104313e+29F, \n-2.17911372e+29F, -2.37718432e+29F, -2.57525491e+29F, -2.77332551e+29F, -2.9713961e+29F, -3.1698069e+29F, \n-3.56594809e+29F, -3.96208928e+29F, -4.35823047e+29F, -4.75437166e+29F, -5.15051285e+29F, -5.54665404e+29F, \n-5.94279523e+29F, -6.33962e+29F, -7.13190222e+29F, -7.9241846e+29F, -8.71646699e+29F, -9.50874937e+29F, \n-1.03010317e+30F, -1.10933141e+30F, -1.18855965e+30F, -1.26792518e+30F, -1.42638165e+30F, -1.58483813e+30F, \n-1.74329461e+30F, -1.90175108e+30F, -2.06020756e+30F, -2.21866403e+30F, -2.37712051e+30F, -2.53585277e+30F, \n-2.85276573e+30F, -3.16967868e+30F, -3.48659163e+30F, -3.80350458e+30F, -4.12041753e+30F, -4.43733049e+30F, \n-4.75424344e+30F, -5.07171038e+30F, -5.70553629e+30F, -6.33936219e+30F, -6.9731881e+30F, -7.607014e+30F, \n-8.24084e+30F, -8.87466581e+30F, -9.50849171e+30F, -1.01434304e+31F, -1.14110822e+31F, -1.26787341e+31F, \n-1.39463859e+31F, -1.52140377e+31F, -1.64816895e+31F, -1.77493413e+31F, -1.90169931e+31F, -2.02868802e+31F, \n-2.28221838e+31F, -2.53574874e+31F, -2.78927911e+31F, -3.04280947e+31F, -3.29633983e+31F, -3.54987019e+31F, \n-3.80340055e+31F, -4.05738e+31F, -4.56444063e+31F, -5.07150136e+31F, -5.57856208e+31F, -6.08562281e+31F, \n-6.59268353e+31F, -7.09974425e+31F, -7.60680498e+31F, -8.11476756e+31F, -9.12888901e+31F, -1.01430105e+32F, \n-1.11571319e+32F, -1.21712533e+32F, -1.31853748e+32F, -1.41994962e+32F, -1.52136177e+32F, -1.62295506e+32F, \n-1.82577935e+32F, -2.02860364e+32F, -2.23142793e+32F, -2.43425222e+32F, -2.63707651e+32F, -2.8399008e+32F, \n-3.04272509e+32F, -3.24591321e+32F, -3.65156179e+32F, -4.05721037e+32F, -4.46285895e+32F, -4.86850753e+32F, \n-5.27415611e+32F, -5.67980469e+32F, -6.08545327e+32F, -6.49183262e+32F, -7.30313e+32F, -8.11442693e+32F, \n-8.92572409e+32F, -9.73702125e+32F, -1.05483184e+33F, -1.13596156e+33F, -1.21709127e+33F, -1.29836776e+33F, \n-1.46062719e+33F, -1.62288662e+33F, -1.78514606e+33F, -1.94740549e+33F, -2.10966492e+33F, -2.27192435e+33F, \n-2.43418378e+33F, -2.596738e+33F, -2.92125686e+33F, -3.24577572e+33F, -3.57029459e+33F, -3.89481345e+33F, \n-4.21933231e+33F, -4.54385118e+33F, -4.86837e+33F, -5.19348095e+33F, -5.84251867e+33F, -6.4915564e+33F, \n-7.14059413e+33F, -7.78963185e+33F, -8.43866958e+33F, -9.08770731e+33F, -9.73674503e+33F, -1.03869718e+34F, \n-1.16850473e+34F, -1.29831227e+34F, -1.42811982e+34F, -1.55792736e+34F, -1.68773491e+34F, -1.81754245e+34F, \n-1.94735e+34F, -2.07739634e+34F, -2.33701143e+34F, -2.59662652e+34F, -2.85624161e+34F, -3.1158567e+34F, \n-3.37547179e+34F, -3.63508688e+34F, -3.89470197e+34F, -4.15479664e+34F, -4.67402682e+34F, -5.193257e+34F, \n-5.71248719e+34F, -6.23171737e+34F, -6.75094755e+34F, -7.27017773e+34F, -7.78940791e+34F, -8.30960121e+34F, \n-9.34806157e+34F, -1.03865219e+35F, -1.14249823e+35F, -1.24634427e+35F, -1.3501903e+35F, -1.45403634e+35F, \n-1.55788237e+35F, -1.66192183e+35F, -1.8696139e+35F, -2.07730597e+35F, -2.28499804e+35F, -2.49269012e+35F, \n-2.70038219e+35F, -2.90807426e+35F, -3.11576633e+35F, -3.32384682e+35F, -3.73923097e+35F, -4.15461511e+35F, \n-4.56999926e+35F, -4.9853834e+35F, -5.40076755e+35F, -5.81615169e+35F, -6.23153584e+35F, -6.6477e+35F, \n-7.47846827e+35F, -8.30923656e+35F, -9.14000485e+35F, -9.97077314e+35F, -1.08015414e+36F, -1.16323097e+36F, \n-1.2463078e+36F, -1.32954126e+36F, -1.49569492e+36F, -1.66184858e+36F, -1.82800224e+36F, -1.9941559e+36F, \n-2.16030955e+36F, -2.32646321e+36F, -2.49261687e+36F, -2.65908506e+36F, -2.99139238e+36F, -3.32369969e+36F, \n-3.65600701e+36F, -3.98831433e+36F, -4.32062164e+36F, -4.65292896e+36F, -4.98523627e+36F, -5.3181752e+36F, \n-5.98279e+36F, -6.64740446e+36F, -7.31201909e+36F, -7.97663372e+36F, -8.64124836e+36F, -9.30586299e+36F, \n-9.97047762e+36F, -1.06363605e+37F, -1.19655898e+37F, -1.32948191e+37F, -1.46240483e+37F, -1.59532776e+37F, \n-1.72825069e+37F, -1.86117361e+37F, -1.99409654e+37F, -2.12727414e+37F, -2.39312e+37F, -2.65896584e+37F, \n-2.92481169e+37F, -3.19065755e+37F, -3.4565034e+37F, -3.72234925e+37F, -3.9881951e+37F, -4.25455233e+37F, \n-4.78624403e+37F, -5.31793574e+37F, -5.84962744e+37F, -6.38131915e+37F, -6.91301085e+37F, -7.44470256e+37F, \n-7.97639426e+37F, -8.50911277e+37F, -9.57249618e+37F, -1.06358796e+38F, -1.1699263e+38F, -1.27626464e+38F, \n-1.38260298e+38F, -1.48894132e+38F, -1.59527966e+38F, -1.70182418e+38F, -1.91450086e+38F, -2.12717754e+38F, \n-2.33985422e+38F, -2.5525309e+38F, -2.76520759e+38F, -2.97788427e+38F, -3.19056095e+38F, 3.402823466e+38F, \n1.17549435e-38F]" + } + }, + { + "name": "sSingleThird", + "metadata": { + "uuid": "3f379542-e299-4c20-a797-75c72242f7f8", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.629808", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_type": "single", + "_value": "0.333333343F" + } + }, + { + "name": "sSingleTies", + "metadata": { + "uuid": "2c3cde07-1512-48df-8643-9dce817bf019", + "namespace": "dacaf35e-55a5-454d-a7c1-93db038a210e", + "lastmod": "20261016T235609.630254", + "modifiedby": "fixture", + "isderived": "0" + }, + "value": { + "_type": "single", + "_value": "[1000000.12F, 1000000.38F, 1000000.62F, -1000000.12F, 2097151.88F]" + } + } + ], + "Dictionary References": [], + "AllowAccessBWS": false + } + } + } +} \ No newline at end of file diff --git a/test/fixtures/mcos/typed_mcos_binary.sldd b/test/fixtures/mcos/typed_mcos_binary.sldd new file mode 100644 index 00000000..39fc698e Binary files /dev/null and b/test/fixtures/mcos/typed_mcos_binary.sldd differ diff --git a/test/fixtures/mcos/typed_objects.mat b/test/fixtures/mcos/typed_objects.mat new file mode 100644 index 00000000..b279702b Binary files /dev/null and b/test/fixtures/mcos/typed_objects.mat differ diff --git a/test/fixtures/mcos/typed_ws.slx b/test/fixtures/mcos/typed_ws.slx new file mode 100644 index 00000000..dc7268d7 Binary files /dev/null and b/test/fixtures/mcos/typed_ws.slx differ diff --git a/test/matSingleDigits.test.ts b/test/matSingleDigits.test.ts new file mode 100644 index 00000000..875667f6 --- /dev/null +++ b/test/matSingleDigits.test.ts @@ -0,0 +1,130 @@ +// Copyright 2026 The MathWorks, Inc. +// +// C-033, its digits half: a SINGLE read out of MAT bytes shows MATLAB's digits, not the +// double it widens to. MatParser read each float32 with getFloat32, which hands back the +// double of the same value, and every number in this package prints as the shortest text +// that is that DOUBLE: single(3.3) is the double 3.299999952316284, and showed so — in a +// .mat, in an MCOS object's property (a .mat, a model workspace, a binary dictionary's +// hex) and in a text dictionary's MAT stream — where both dictionaries hold MATLAB's own +// text for the same value, 3.3 (the corpus twins param_vars.mat / param_json.sldd, +// P30_TypeMaxUnitDesc, and the plain SingleRowVec). +// +// The reader now keeps, for a value of class single, the decimal MATLAB spells it with, +// measured (R2027a, both dictionary formats): C's `%.6g` where that is the same float32, +// otherwise `%.9g` with an exact tie to the even digit, and `%.10g` for realmax('single'). +// That is not the shortest decimal that is the same float32: single(1/3) is 0.333333343, +// where 0.33333334 would do. typedMcosFixtures.test.ts grades it against MATLAB's own text +// for 4,086 float32 bit patterns. It is lossless: it is the same float32, so a save writes +// the bits it read (MatWriter's setFloat32, a text dictionary's `3.3F`). A value of another +// class is read as it was, a double whose bytes happen to be stored as miSINGLE included: +// its value is the double, whatever its storage. +// +// Each value is built byte by byte (test/tools/matBytes.ts) and read through the real +// readers: a .mat by the session, and a MAT stream by decodeMatStream, the reader a text +// dictionary's cdata and a binary dictionary's hex go through. +import { describe, it, expect } from 'vitest'; +import { decodeMatStream } from '../src/datamodel/parser/MatParser.js'; +import { createSession } from '../src/index.js'; +import { CLASS, MI, matFile, numericVar, sparseVar } from './tools/matBytes.js'; + +const opened = (variables: Uint8Array[]): any => createSession().addMatSource('t.mat', matFile(variables)); +const single = (name: string, dimensions: number[], real: number[], imag?: number[]) => + numericVar({ name, cls: CLASS.SINGLE, dimensions, real, imag }); +const child = (root: any, name: string): any => root.children.find((c: any) => c.name === name); + +/** The value of a MAT stream holding the one variable `bytes`, as decodeMatStream reads it. */ +function streamValue(bytes: Uint8Array): unknown { + const decoded = decodeMatStream(Uint8Array.from([0x00, 0x01, 0x49, 0x4d, 0x00, 0x00, 0x00, 0x00, ...bytes])); + if (!decoded.ok) throw new Error('the stream did not decode'); + return decoded.variable.value; +} + +describe('a single read out of MAT bytes shows MATLAB\'s digits for it', () => { + it('a .mat: single(3.3) shows 3.3 and single([1.1 2.2 3.3]) shows [1.1 2.2 3.3]', () => { + const root = opened([single('s', [1, 1], [3.3]), single('r', [1, 3], [1.1, 2.2, 3.3])]); + // Before: 3.299999952316284, and [1.100000023841858 2.200000047683716 3.299999952316284]. + expect([child(root, 's').displayValue, child(root, 's').className]).toEqual(['3.3', 'single']); + expect([child(root, 'r').displayValue, child(root, 'r').className]).toEqual(['[1.1 2.2 3.3]', 'single']); + expect(child(root, 'r').children.map((c: any) => c.displayValue)).toEqual(['1.1', '2.2', '3.3']); + }); + + it('a MAT stream (a text dictionary\'s cdata, a binary dictionary\'s hex): the same numbers', () => { + expect(streamValue(single('', [1, 1], [3.3]))).toBe(3.3); + expect(streamValue(single('', [1, 3], [1.1, 2.2, 3.3]))).toEqual([1.1, 2.2, 3.3]); + expect(streamValue(single('', [2, 1], [0.1, 1 / 3]))).toEqual([0.1, 0.333333343]); + }); + + it('a complex single: both parts', () => { + const root = opened([single('z', [1, 1], [0.1], [0.2])]); + // Before: 0.10000000149011612+0.20000000298023224i. + expect(child(root, 'z').displayValue).toBe('0.1+0.2i'); + }); + + it('a sparse single: its non-zeros', () => { + const root = opened([ + sparseVar({ name: 'sp', cls: CLASS.SINGLE, sparseFlag: true, dataType: MI.SINGLE, dimensions: [2, 2], ir: [0, 1], jc: [0, 1, 2], real: [1.1, 2.2] }), + ]); + const sp = child(root, 'sp'); + expect(sp.className).toBe('single'); + expect(sp.children.map((c: any) => c.displayValue)).toEqual(['1.1', '2.2']); + }); + + it('MATLAB\'s digits: %.6g where that is the same single, %.9g where it is not', () => { + const stored = [1 / 3, 3.4028234663852886e38, 1e-45, 12187.2695, 473.15, 0.01, 2.3023181].map(Math.fround); + const values = streamValue(single('', [1, stored.length], stored)) as number[]; + // MATLAB's own text for each (R2027a, make_typed_fixtures.m, both dictionary formats): + // single(1/3) is 0.333333343, though 0.33333334 is the same single; realmax('single') is + // 3.402823466e+38, its %.9g being past it; the smallest subnormal is 1.4013e-45, though + // 1e-45 is the same single. 12187.2695, 473.15, 0.01 and 2.3023181 are a customer + // dictionary's text for the same singles. + expect(values).toEqual([0.333333343, 3.402823466e38, 1.4013e-45, 12187.2695, 473.15, 0.01, 2.3023181]); + // Lossless: each is the float32 that was stored. + expect(values.map(Math.fround)).toEqual(stored); + }); + + it('a nine-digit tie goes to the even digit, as MATLAB writes it', () => { + // 1000000.125 is halfway between 1000000.12 and 1000000.13; MATLAB writes 1000000.12 + // (typed_mcos.sldd's sSingleTies), where toPrecision gives 1000000.13. + const stored = [1000000.125, 1000000.375, 1000000.625, -1000000.125, 2097151.875, 2 ** -13]; + const values = streamValue(single('', [1, stored.length], stored)) as number[]; + expect(values).toEqual([1000000.12, 1000000.38, 1000000.62, -1000000.12, 2097151.88, 0.000122070312]); + expect(values.map(Math.fround)).toEqual(stored); + }); + + it('lossless over a sweep of float32 bit patterns: each shown number is the stored single', () => { + // Every 1048577th pattern of the positive finite range, and its negation: the exponents + // from subnormal to the largest, with mantissas that need from one digit to nine. The + // same patterns as make_typed_fixtures.m's sSingleSweep, whose digits are graded against + // MATLAB's own in typedMcosFixtures.test.ts. + const stored: number[] = []; + const bits = new DataView(new ArrayBuffer(4)); + for (let b = 1; b < 0x7f800000; b += 0x100001) { + bits.setUint32(0, b); + stored.push(bits.getFloat32(0), -bits.getFloat32(0)); + } + const read = streamValue(single('', [1, stored.length], stored)) as number[]; + expect(read).toHaveLength(stored.length); + expect(read.filter((v, k) => Math.fround(v) !== stored[k])).toEqual([]); + // And none is the widened double, which takes up to seventeen digits: at most ten. + expect(read.filter((v) => v.toPrecision(11) !== Number(v.toPrecision(10)).toPrecision(11))).toEqual([]); + }); + + it('control: a single that is exact is unchanged, and so are Inf, -Inf, NaN and -0', () => { + const values = streamValue(single('', [1, 7], [0.5, 16777216, -2.25, Infinity, -Infinity, NaN, -0])) as number[]; + expect(values.slice(0, 6)).toEqual([0.5, 16777216, -2.25, Infinity, -Infinity, NaN]); + expect(Object.is(values[6], -0)).toBe(true); + }); + + it('control: a DOUBLE stored as miSINGLE keeps the double it is', () => { + // A writer may store a double whose values a float32 holds exactly as miSINGLE. Its + // value is the double, so it shows every digit the double has. + const bytes = numericVar({ name: 'd', cls: CLASS.DOUBLE, dataType: MI.SINGLE, dimensions: [1, 1], real: [1.1] }); + expect(streamValue(bytes)).toBe(Math.fround(1.1)); + const root = opened([bytes]); + expect([child(root, 'd').displayValue, child(root, 'd').className]).toEqual(['1.100000023841858', 'double']); + }); + + it('control: a double is read as it was', () => { + expect(streamValue(numericVar({ name: '', cls: CLASS.DOUBLE, dimensions: [1, 2], real: [3.3, 1 / 3] }))).toEqual([3.3, 1 / 3]); + }); +}); diff --git a/test/mcosColumnVector.test.ts b/test/mcosColumnVector.test.ts index 1579037e..9ae7e83b 100644 --- a/test/mcosColumnVector.test.ts +++ b/test/mcosColumnVector.test.ts @@ -6,6 +6,7 @@ import { decodeMcosBlob, type OpaqueVarRef } from '../src/datamodel/parser/McosP import { parseMat } from '../src/datamodel/parser/MatParser.js'; import * as NodeRegistry from '../src/datamodel/node/NodeRegistry.js'; import '../src/datamodel/node/data/NodeClassMap.js'; +import { CLASS } from './tools/matBytes.js'; // An Nx1 real or logical MCOS property keeps its column shape. The decoder handed the // node layer any numeric or logical VECTOR as a bare list, and a bare list is a row @@ -14,14 +15,15 @@ import '../src/datamodel/node/data/NodeClassMap.js'; // [10 20 30] — a different MATLAB value. The text dictionary's twin states a column as // Matrix(3,1), as MATLAB itself writes it, and the binary dictionary's reader keeps // it; a complex value and a logical MATRIX already kept their shape in this decoder. -// Now a rank-2 column takes the typed Matrix(r,1) literal too. A 1xN row is still the -// bare list it was, and rank > 2 is unchanged. +// Now a rank-2 column takes the typed Matrix(r,1) literal too. A double 1xN row is still +// the bare list it was, and rank > 2 is unchanged. (A row of any other class, a logical +// one included, is typed since C-033: see the second describe below.) // // ParamMat.mat (MATLAB-written) holds a Simulink.Parameter whose Value is the 2x3 // [1 2 3; 4 5 6]. Its dims subelement in the MCOS blob is respelled, same length, so // the six doubles MATLAB stored column-major (1 4 2 5 3 6) are read as another shape; // setting the array-flags logical bit, as the Bp.mat tests in mcosParser.test.ts do, -// makes the same cell logical. +// makes the same cell logical, and respelling its class byte makes it another class. function blobParts(file: string): { raw: Uint8Array; vars: OpaqueVarRef[] } { const path = fileURLToPath(new URL(`./fixtures/mcos/${file}`, import.meta.url)); @@ -47,8 +49,12 @@ function findAll(raw: Uint8Array, needle: number[]): number[] { return at; } -/** ParamMat.mat's Value respelled as rows x cols, optionally logical. */ -function paramMatValue(rows: number, cols: number, logical = false): unknown { +/** + * ParamMat.mat's Value respelled as rows x cols, optionally logical, and optionally of + * another class: `cls` is the array-flags class byte (matBytes.ts CLASS), which leaves the + * six stored elements as they were, so only the class the cell declares changes. + */ +function paramMatValue(rows: number, cols: number, logical = false, cls?: number): unknown { const { raw, vars } = blobParts('ParamMat.mat'); // Exactly one such subelement, so fixture drift fails loudly instead of silently // patching the wrong bytes. @@ -62,6 +68,7 @@ function paramMatValue(rows: number, cols: number, logical = false): unknown { view.setUint32(dimsAt + 8, rows, true); view.setUint32(dimsAt + 12, cols, true); if (logical) patched[dimsAt - 7] |= LOGICAL_FLAG; + if (cls !== undefined) patched[dimsAt - 8] = cls; return decodeMcosBlob(patched, vars).get('ParamMat')!.properties.Value; } @@ -100,9 +107,74 @@ describe('decodeMcosBlob — an Nx1 MCOS property keeps its column shape', () => }); }); - it('control: a logical 1x6 is still the bare row of booleans it was', () => { + // C-033: a bare list of booleans is read as a DOUBLE row by the node layer + // (MatlabVariableNode.parseFlatArray, which also serves a text dictionary's bare list, + // where double is right), so the row showed class double. It is the typed literal the + // binary dictionary's reader gives a logical row (typed_binary.sldd's lglVec). + it('a logical 1x6 is the typed logical row a binary dictionary gives, and shows as logical', () => { const value = paramMatValue(1, 6, true); - expect(value).toEqual([true, true, true, true, true, true]); - expect(shown(value)).toMatchObject({ dims: [1, 6] }); + expect(value).toEqual({ _type: 'logical', _value: '[1, 1, 1, 1, 1, 1]' }); + expect(shown(value)).toEqual({ + className: 'logical', + dims: [1, 6], + display: '[true true true true true true]', + }); + }); +}); + +// C-033: a REAL numeric property of a class other than double keeps its class. The +// decoder handed every numeric scalar and row over bare, and stamped `double` on every +// column and matrix, so a Simulink.Parameter whose Value is int32([1 2 3]) showed class +// double in a .mat and a model workspace, where both dictionaries show int32 (the corpus +// twins param_vars.mat / param_bin.sldd, P47_ValInt32Vec). Each is now the binary +// dictionary's spelling of the same value (BinarySlddParser formatTypedScalar, +// formatTypedVector, formatMatrix), which the node layer already reads. A double is +// unchanged: bare scalar and row, `_type: 'double'` column and matrix. +describe('decodeMcosBlob — a real non-double MCOS property keeps its class', () => { + it('an int32 1x6 is a typed int32 row and shows as int32', () => { + const value = paramMatValue(1, 6, false, CLASS.INT32); + expect(value).toEqual({ _type: 'int32', _value: '[1, 4, 2, 5, 3, 6]' }); + expect(shown(value)).toEqual({ className: 'int32', dims: [1, 6], display: '[1 4 2 5 3 6]' }); + }); + + it('an int16 6x1 is a typed int16 Matrix(6,1) and shows as an int16 column', () => { + const value = paramMatValue(6, 1, false, CLASS.INT16); + expect(value).toEqual({ _type: 'int16', _value: 'Matrix(6,1)\n[1, 4, 2, 5, 3, 6]' }); + expect(shown(value)).toEqual({ className: 'int16', dims: [6, 1], display: '[1; 4; 2; 5; 3; 6]' }); + }); + + it('a uint8 1x1 is a typed uint8 scalar and shows as uint8', () => { + const value = paramMatValue(1, 1, false, CLASS.UINT8); + expect(value).toEqual({ _type: 'uint8', _value: '1U' }); + expect(shown(value)).toEqual({ className: 'uint8', dims: [1, 1], display: '1' }); + }); + + it('a single 2x3 is a typed single matrix and shows as single', () => { + const value = paramMatValue(2, 3, false, CLASS.SINGLE); + expect(value).toEqual({ _type: 'single', _value: 'Matrix(2,3)\n[[1F, 2F, 3F]; [4F, 5F, 6F]]' }); + expect(shown(value)).toMatchObject({ className: 'single', dims: [2, 3] }); + }); + + it('a uint64 1x3 is a typed uint64 row, each element with its U', () => { + const value = paramMatValue(1, 3, false, CLASS.UINT64); + // Three of the six stored elements are held: the dims say 1x3. + expect(value).toEqual({ _type: 'uint64', _value: '[1U, 4U, 2U]' }); + expect(shown(value)).toEqual({ className: 'uint64', dims: [1, 3], display: '[1 4 2]' }); + }); + + it('control: a double 1x1 is still the bare number it was', () => { + const value = paramMatValue(1, 1, false, CLASS.DOUBLE); + expect(value).toBe(1); + expect(shown(value)).toEqual({ className: 'double', dims: [1, 1], display: '1' }); + }); + + it('control: a double 1x6, 6x1 and 2x3 are exactly as they were', () => { + expect(paramMatValue(1, 6, false, CLASS.DOUBLE)).toEqual([1, 4, 2, 5, 3, 6]); + expect(paramMatValue(6, 1, false, CLASS.DOUBLE)).toEqual({ _type: 'double', _value: 'Matrix(6,1)\n[1.0, 4.0, 2.0, 5.0, 3.0, 6.0]' }); + expect(paramMatValue(2, 3, false, CLASS.DOUBLE)).toEqual({ _type: 'double', _value: 'Matrix(2,3)\n[[1.0, 2.0, 3.0]; [4.0, 5.0, 6.0]]' }); + }); + + it('control: a logical 1x1 is still the boolean it was', () => { + expect(paramMatValue(1, 1, true)).toBe(true); }); }); diff --git a/test/mcosEmptyLogical.test.ts b/test/mcosEmptyLogical.test.ts new file mode 100644 index 00000000..cca2fe0f --- /dev/null +++ b/test/mcosEmptyLogical.test.ts @@ -0,0 +1,116 @@ +// Copyright 2026 The MathWorks, Inc. +// +// An EMPTY logical of rank 3 or more, held by an MCOS object's property (a .mat, a model +// workspace), keeps its class and its shape: McosParser.resolveValue hands it over in the +// typed logical literal, `{_type: 'logical', _value: 'Matrix(2,0,2)\n[[]; []]'}`, which the +// node layer shows as a <2x0x2 logical>. It always did, until C-033's logical arm returned +// `[]` for every empty logical before reading the shape, and `[]` reads as a double 0x0. +// +// Every other empty is the `[]` it was before C-033 and after it: an empty logical of rank +// 2, and an empty of any numeric class (DESIGN.md records that as a limitation). +// +// typed_objects.mat is MATLAB's (test/fixtures/mcos/make_typed_fixtures.m). Its pInt16Nd is +// a Simulink.Parameter whose Value is int16(reshape(1:8, 2, 2, 2)); that cell's dims +// subelement is respelled, same length, to 2x0x2, and its array-flags logical bit is set, +// as mcosColumnVector.test.ts does to ParamMat.mat's 2x3. No MATLAB-written file in the +// fixtures or the corpus holds an empty logical of rank 3 in an MCOS object. +import { describe, it, expect } from 'vitest'; +import { readFileSync } from 'node:fs'; +import { fileURLToPath } from 'node:url'; +import { decodeMcosBlob, type OpaqueVarRef } from '../src/datamodel/parser/McosParser.js'; +import { parseMat } from '../src/datamodel/parser/MatParser.js'; +import * as NodeRegistry from '../src/datamodel/node/NodeRegistry.js'; +import '../src/datamodel/node/data/NodeClassMap.js'; + +function blobParts(file: string): { raw: Uint8Array; vars: OpaqueVarRef[] } { + const buf = readFileSync(fileURLToPath(new URL(`./fixtures/mcos/${file}`, import.meta.url))); + const { variables } = parseMat(buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) as ArrayBuffer); + const anon = variables.find((v) => (v as unknown as { _anonymous?: boolean })._anonymous)!; + const opaque = variables.filter((v) => v.isOpaque && v.name); + return { raw: anon._rawBytes!, vars: opaque.map((v) => ({ name: v.name, className: v.className, rawBytes: v._rawBytes })) }; +} + +function findAll(raw: Uint8Array, needle: number[]): number[] { + const at: number[] = []; + for (let i = 0; i + needle.length <= raw.length; i++) { + if (needle.every((b, k) => raw[i + k] === b)) at.push(i); + } + return at; +} + +const LOGICAL_FLAG = 0x02; + +/** A cell's dims subelement: miINT32, its byte count, and each extent. */ +const dimsSubelement = (extents: number[]): number[] => [ + 5, 0, 0, 0, extents.length * 4, 0, 0, 0, + ...extents.flatMap((n) => [n & 0xff, (n >> 8) & 0xff, 0, 0]), +]; + +/** + * The Value of `name` in `file`, its dims subelement (`from`, which must be the only one in the + * blob) respelled as `to`, of the same rank, and the cell made logical where `logical` is set. + */ +function respelledValue(file: string, name: string, from: number[], to: number[], logical: boolean): unknown { + const { raw, vars } = blobParts(file); + const hits = findAll(raw, dimsSubelement(from)); + expect(hits).toHaveLength(1); + const at = hits[0]; + // The array-flags subelement just before it, whose class byte is at `at - 8` and whose + // flags byte is at `at - 7` (miUINT32, 8 bytes). + expect(Array.from(raw.slice(at - 16, at - 8))).toEqual([6, 0, 0, 0, 8, 0, 0, 0]); + expect(raw[at - 7] & LOGICAL_FLAG).toBe(0); + const patched = raw.slice(); + const view = new DataView(patched.buffer, patched.byteOffset, patched.byteLength); + to.forEach((n, k) => view.setUint32(at + 8 + k * 4, n, true)); + if (logical) patched[at - 7] |= LOGICAL_FLAG; + return decodeMcosBlob(patched, vars).get(name)!.properties.Value; +} + +// What the host shows for the value, and the shape it holds. +function shown(value: unknown): { className: string; dims: number[]; display: string } { + const node: any = NodeRegistry.parseValue(value, 'Value', null); + return { className: node.className, dims: node._dims, display: node.displayValue }; +} + +const ND = ['typed_objects.mat', 'pInt16Nd', [2, 2, 2]] as const; +const MAT = ['ParamMat.mat', 'ParamMat', [2, 3]] as const; + +describe('decodeMcosBlob: an empty logical of rank 3 keeps its class and its shape', () => { + it('precondition: pInt16Nd is the int16 2x2x2 MATLAB wrote', () => { + const [file, name, dims] = ND; + const value = respelledValue(file, name, [...dims], [...dims], false); + expect(value).toEqual({ _type: 'int16', _value: 'Matrix(2,2,2)\n[[1, 3]; [2, 4]; [5, 7]; [6, 8]]' }); + }); + + it('a logical 2x0x2 is the typed logical Matrix(2,0,2), and shows as a <2x0x2 logical>', () => { + const [file, name, dims] = ND; + const value = respelledValue(file, name, [...dims], [2, 0, 2], true); + expect(value).toEqual({ _type: 'logical', _value: 'Matrix(2,0,2)\n[[]; []]' }); + expect(shown(value)).toEqual({ className: 'logical', dims: [2, 0, 2], display: '<2x0x2 logical>' }); + }); + + it('a logical 0x2x2 and 2x2x0 are typed alike', () => { + const [file, name, dims] = ND; + expect(shown(respelledValue(file, name, [...dims], [0, 2, 2], true))).toMatchObject({ className: 'logical', dims: [0, 2, 2] }); + expect(shown(respelledValue(file, name, [...dims], [2, 2, 0], true))).toMatchObject({ className: 'logical', dims: [2, 2, 0] }); + }); + + it('control: a logical 2x2x2 is the typed logical it was', () => { + const [file, name, dims] = ND; + const value = respelledValue(file, name, [...dims], [...dims], true); + expect(value).toMatchObject({ _type: 'logical' }); + expect(shown(value)).toMatchObject({ className: 'logical', dims: [2, 2, 2] }); + }); + + it('control: an int16 2x0x2 is still the [] it was', () => { + const [file, name, dims] = ND; + expect(respelledValue(file, name, [...dims], [2, 0, 2], false)).toEqual([]); + }); + + it('control: a logical 0x0, 1x0, 0x1, 2x0 and 0x3 are still the [] they were', () => { + const [file, name, dims] = MAT; + for (const to of [[0, 0], [1, 0], [0, 1], [2, 0], [0, 3]]) { + expect(respelledValue(file, name, [...dims], to, true), to.join('x')).toEqual([]); + } + }); +}); diff --git a/test/mcosMixedObjectArray.test.ts b/test/mcosMixedObjectArray.test.ts new file mode 100644 index 00000000..0f4385fa --- /dev/null +++ b/test/mcosMixedObjectArray.test.ts @@ -0,0 +1,351 @@ +// Copyright 2026 The MathWorks, Inc. +// +// F1-47: an object array held by an MCOS object's property (a .mat, a model workspace), whose +// elements are of more than one class. The MCOS reader named the array after its first element +// and gave no element a class of its own, so each element read, showed and copied as one of the +// first element's class: +// - a config set's Components read as a Simulink.SolverCC array, and a copy of the config set +// pasted into a dictionary wrote all nine components as Simulink.SolverCC; +// - a dexdata.DerivedSignal beside a Simulink.Signal read as a dexdata.DerivedSignal array of +// two dexdata.DerivedSignals. +// It now reads as the binary dictionary reader does (D6/D15; the rule is objectArrayClass.ts, +// shared by both): the array under the class MATLAB's text format names, and each element of +// another class under its own `_object_class`. +// +// configset.mat is MATLAB's (R2027a, test/fixtures/mcos/make_configset_fixture.m), and +// configset.truth.json is what MATLAB says each array and each element is, read back out of +// it: class() of the array, which is the class this reader names, and class() of each element. +// busArray.mat is re-pointed byte by byte where no MATLAB file holds the case. +import { describe, it, expect } from 'vitest'; +import { readFileSync } from 'node:fs'; +import { fileURLToPath } from 'node:url'; +import { strFromU8, unzipSync } from 'fflate'; +import { createSession } from '../src/index.js'; +import { ingest } from '../src/core/ingest.js'; +import { decodeMcosBlob, type OpaqueVarRef } from '../src/datamodel/parser/McosParser.js'; +import { arrayClassOf } from '../src/datamodel/parser/objectArrayClass.js'; +import { parseMat } from '../src/datamodel/parser/MatParser.js'; +import { SECTION_NAMESPACE } from '../src/datamodel/SectionConstants.js'; +import '../src/datamodel/node/data/NodeClassMap.js'; + +const fixturePath = (name: string): string => fileURLToPath(new URL(`./fixtures/${name}`, import.meta.url)); +const bytes = (name: string): Uint8Array => new Uint8Array(readFileSync(fixturePath(name))); +const buffer = (u8: Uint8Array): ArrayBuffer => u8.buffer.slice(u8.byteOffset, u8.byteOffset + u8.byteLength) as ArrayBuffer; + +/** The two inputs decodeMcosBlob takes, out of a .mat, as MatNode.fromParsed builds them. */ +function blobParts(name: string): { raw: Uint8Array; vars: OpaqueVarRef[] } { + const { variables } = parseMat(buffer(bytes(name))); + const anon = variables.find((v) => (v as unknown as { _anonymous?: boolean })._anonymous)!; + const opaque = variables.filter((v) => v.isOpaque && v.name); + return { raw: anon._rawBytes!, vars: opaque.map((v) => ({ name: v.name, className: v.className, rawBytes: v._rawBytes })) }; +} + +interface ArrayTruth { + class: string; + size: number[]; + elements: string[]; + names?: string[]; +} +interface ConfigSetTruth { + class: string; + Components: ArrayTruth; + rtwIndex: number; + RTWComponents: ArrayTruth; +} +const truth: { release: string; paths: { cs: ConfigSetTruth; csErt: ConfigSetTruth; mixed: { class: string; Kids: ArrayTruth } } } = JSON.parse( + readFileSync(fixturePath('mcos/configset.truth.json'), 'utf8'), +); + +/** An array's class and each element's, as a reader that holds no element class would name it. */ +function classesOf(array: any): { arrayClass: string; elements: string[] } { + return { arrayClass: array._array_class, elements: array._elements.map((e: any) => e._object_class ?? array._array_class) }; +} + +describe('configset.mat, as MATLAB wrote it: each mixed array under MATLAB\'s class, each element under its own', () => { + const decoded = (() => { + const { raw, vars } = blobParts('mcos/configset.mat'); + return decodeMcosBlob(raw, vars); + })(); + + it('the truth is MATLAB\'s, and says what this file is for', () => { + expect(truth.release).toBe('2027a'); + // Two arrays of each config set mix classes, and the holder's does, with the subclass first. + expect(new Set(truth.paths.cs.Components.elements).size).toBeGreaterThan(5); + expect(truth.paths.cs.RTWComponents.elements).toEqual(['Simulink.CodeAppCC', 'Simulink.GRTTargetCC']); + expect(truth.paths.csErt.RTWComponents.elements).toEqual(['Simulink.CodeAppCC', 'Simulink.ERTTargetCC']); + expect(truth.paths.mixed.Kids.elements).toEqual(['dexdata.DerivedSignal', 'Simulink.Signal']); + }); + + for (const name of ['cs', 'csErt'] as const) { + it(`${name}: Components, and its RTWCC's Components, are Simulink.ConfigComponent arrays of MATLAB's components in order`, () => { + const t = truth.paths[name]; + const components: any = decoded.get(name)!.properties.Components; + expect(t.Components.class).toBe('Simulink.ConfigComponent'); + expect(components._array_class).toBe(t.Components.class); + expect(components._dimensions).toEqual(t.Components.size); + // Each element's own class, on every element, since none is the array's class. + expect(components._elements.map((e: any) => e._object_class)).toEqual(t.Components.elements); + + const rtw = components._elements[t.rtwIndex - 1]; + expect(rtw._object_class).toBe('Simulink.RTWCC'); + const inner = rtw._properties.Components; + expect(t.RTWComponents.class).toBe('Simulink.ConfigComponent'); + expect(inner._array_class).toBe(t.RTWComponents.class); + expect(inner._elements.map((e: any) => e._object_class)).toEqual(t.RTWComponents.elements); + }); + } + + it('mixed: a dexdata.DerivedSignal beside a Simulink.Signal is a Simulink.Signal array, the subclass marked', () => { + const kids: any = decoded.get('mixed')!.properties.Kids; + expect(truth.paths.mixed.Kids.class).toBe('Simulink.Signal'); + expect(classesOf(kids)).toEqual({ arrayClass: truth.paths.mixed.Kids.class, elements: truth.paths.mixed.Kids.elements }); + // Only the element of another class than the array's says so, as the binary reader writes it. + expect(kids._elements.map((e: any) => e._object_class)).toEqual(['dexdata.DerivedSignal', undefined]); + // The subclass's own properties are its own. + expect(kids._elements[0]._properties.Routing).toBe('bus'); + expect('Routing' in kids._elements[1]._properties).toBe(false); + }); + + it('mixed shows a <1x2 Simulink.Signal> whose elements are a dexdata.DerivedSignal and a Simulink.Signal', () => { + const root: any = ingest(createSession(), buffer(bytes('mcos/configset.mat')), { filename: 'configset.mat' }); + const kids = root.children.find((c: any) => c.name === 'mixed').children.find((c: any) => c.name === 'Kids'); + expect([kids.className, kids.displayValue]).toEqual(['Simulink.Signal', '<1x2 Simulink.Signal>']); + expect(kids.children.map((c: any) => [c.constructor.name, c.className])).toEqual([ + ['ObjectNode', 'dexdata.DerivedSignal'], + ['SignalNode', 'Simulink.Signal'], + ]); + }); +}); + +// What a host copies out of the .mat goes into a dictionary under each element's own class: a +// copy used to write every component of a config set as a Simulink.SolverCC. +describe('configset.mat, copied into a binary dictionary and saved', () => { + const session = createSession(); + const mat: any = ingest(session, buffer(bytes('mcos/configset.mat')), { filename: 'configset.mat' }); + const root: any = ingest(session, buffer(bytes('sparse/sparse_binary.sldd')), { filename: 'sparse_binary.sldd' }); + const meta = root.getSection('design').children[0].metadata; + let seq = 0; + const paste = (name: string, section: string): void => { + const payload: any = JSON.parse(JSON.stringify(mat.children.find((c: any) => c.name === name).serialize())); + payload.name = name + '_fromMat'; + payload.metadata = { ...meta, namespace: SECTION_NAMESPACE[section], uuid: `00000000-0000-4000-8000-f147000000${String(++seq).padStart(2, '0')}` }; + root.getSection(section).parseEntry(payload); + }; + paste('cs', 'config'); + paste('csErt', 'config'); + paste('mixed', 'design'); + const saved: any = session.serializeSource(root.name); + const xml = strFromU8(unzipSync(saved.bytes)['data/chunk0.xml']); + const reopened: any = ingest(createSession(), buffer(saved.bytes), { filename: 'sparse_binary.sldd' }); + + /** The `` of the entry `name` in the saved chunk. */ + const entryBlock = (name: string): string => { + const at = xml.indexOf('

' + name + '

'); + expect(at, name).toBeGreaterThan(0); + return xml.slice(xml.lastIndexOf('', at)); + }; + /** The Class of each `` directly under the first `

` at `indent` in `block`. */ + const elementClasses = (block: string, prop: string, indent: number): string[] => { + const open = new RegExp(`^ {${indent}}

$`, 'm').exec(block); + expect(open, prop).not.toBeNull(); + const from = open!.index; + const to = block.indexOf('\n' + ' '.repeat(indent) + '

', from); + const span = block.slice(from, to); + return [...span.matchAll(new RegExp(`^ {${indent + 4}}$`, 'gm'))].map((m) => m[1]); + }; + const entry = (section: string, name: string): any => reopened.getSection(section).children.find((e: any) => e.name === name); + + for (const name of ['cs', 'csErt'] as const) { + it(`${name}: each component is written as MATLAB's class, and reads back so`, () => { + const t = truth.paths[name]; + const block = entryBlock(name + '_fromMat'); + expect(elementClasses(block, 'Components', 16)).toEqual(t.Components.elements); + expect(elementClasses(block, 'Components', 24)).toEqual(t.RTWComponents.elements); + const components = entry('config', name + '_fromMat').serial._rawVal._elements[0]._properties.Components; + expect(classesOf(components)).toEqual({ arrayClass: 'Simulink.ConfigComponent', elements: t.Components.elements }); + expect(classesOf(components._elements[t.rtwIndex - 1]._properties.Components)).toEqual({ + arrayClass: 'Simulink.ConfigComponent', + elements: t.RTWComponents.elements, + }); + }); + } + + it('mixed: Kids is written as a dexdata.DerivedSignal and a Simulink.Signal, and reads back as a Simulink.Signal array', () => { + expect(elementClasses(entryBlock('mixed_fromMat'), 'Kids', 16)).toEqual(truth.paths.mixed.Kids.elements); + const kids = entry('design', 'mixed_fromMat').children.find((c: any) => c.name === 'Kids'); + expect([kids.className, kids.displayValue]).toEqual(['Simulink.Signal', '<1x2 Simulink.Signal>']); + expect(kids.children.map((c: any) => c.className)).toEqual(truth.paths.mixed.Kids.elements); + }); +}); + +// Where no MATLAB file holds the case: busArray.mat's object table re-pointed, one word at a time. +// Its bus(2).Elements_internal is two Simulink.BusElements, objects 4 and 5; bus(3)'s is three, +// objects 7 to 9. +describe('busArray.mat re-pointed: an object array property of two classes', () => { + // The blob offset of busArray.mat's metadata table (mcosParser.test.ts asserts it there too). + const META = 304; + const { raw, vars } = blobParts('mcos/busArray.mat'); + const u32 = (b: Uint8Array, at: number): number => new DataView(b.buffer, b.byteOffset, b.byteLength).getUint32(at, true); + const header = Array.from({ length: 10 }, (_, i) => u32(raw, META + i * 4)); + const classRow = (k: number): number => META + header[2] + k * 16; + const objectRow = (k: number): number => META + header[4] + k * 24; + const patched = (words: [number, number][]): Uint8Array => { + const copy = raw.slice(); + const view = new DataView(copy.buffer, copy.byteOffset, copy.byteLength); + for (const [at, value] of words) view.setUint32(at, value, true); + return copy; + }; + const elementsOf = (blob: Uint8Array, bus: number): any => (decodeMcosBlob(blob, vars).get('buses')!.elements[bus] as any).Elements_internal; + + it('the tables are where, and what, these cases assume', () => { + // Class rows 1 and 2 are Simulink.BusElement and Simulink.Bus, and objects 4 and 5 are + // bus(2)'s elements, of class row 1. + const { raw: r } = blobParts('mcos/busArray.mat'); + expect(Array.from({ length: 9 }, (_, k) => u32(r, objectRow(k + 1)))).toEqual([2, 1, 2, 1, 1, 2, 1, 1, 1]); + const plain = elementsOf(raw, 1); + expect(classesOf(plain)).toEqual({ arrayClass: 'Simulink.BusElement', elements: ['Simulink.BusElement', 'Simulink.BusElement'] }); + expect(plain._elements.map((e: any) => '_object_class' in e)).toEqual([false, false]); + expect(classesOf(elementsOf(patched([[objectRow(5), 2]]), 2))).toEqual(classesOf(elementsOf(raw, 2))); + }); + + it('a Simulink.BusElement beside a Simulink.Bus keeps the first\'s class for the array, and the second its own', () => { + // Two MathWorks classes: no base can be derived, so the array is the first element's class. + const ei = elementsOf(patched([[objectRow(5), 2]]), 1); + expect(ei._array_class).toBe('Simulink.BusElement'); + expect(ei._elements.map((e: any) => e._object_class)).toEqual([undefined, 'Simulink.Bus']); + // Each is still its own object. + expect(ei._elements.map((e: any) => e._properties.Name)).toEqual(elementsOf(raw, 1)._elements.map((e: any) => e._properties.Name)); + }); + + it('a user\'s class beside the one MathWorks class is an array of the MathWorks class', () => { + // Class row 1's package word set to the empty string: its objects are of a class `BusElement` + // of no package, a user's. Object 5 is re-pointed at Simulink.Bus. + const blob = patched([[classRow(1), 0], [objectRow(5), 2]]); + const ei = elementsOf(blob, 1); + expect(ei._array_class).toBe('Simulink.Bus'); + expect(ei._elements.map((e: any) => e._object_class)).toEqual(['BusElement', undefined]); + // bus(3)'s three, all of the user's class, are an array of it, with no element marked. + const three = elementsOf(blob, 2); + expect(three._array_class).toBe('BusElement'); + expect(three._elements.map((e: any) => '_object_class' in e)).toEqual([false, false, false]); + }); + + it('a later element whose object names no class is one of the first element\'s class, as in a binary dictionary', () => { + // bus(3): object 7 of the user's class, object 8 re-pointed at Simulink.Bus, and object 9 + // at a class row past the table. The binary reader reads a classless later as one + // of the first element's class (objectArrayElementClass.test.ts), which names the array + // here as it does there: the user's class twice beside the one MathWorks class. + const blob = patched([[classRow(1), 0], [objectRow(8), 2], [objectRow(9), 99]]); + const ei = elementsOf(blob, 2); + expect(ei._array_class).toBe('Simulink.Bus'); + expect(ei._elements.map((e: any) => e._object_class)).toEqual(['BusElement', undefined, 'BusElement']); + // Its own properties are still read. + expect(ei._elements[2]._properties.Name).toBe(elementsOf(raw, 2)._elements[2]._properties.Name); + }); +}); + +// A config set's Components is a Simulink.ConfigComponent array whatever components it holds: +// its place names its class (componentsBaseOf), and the shared element rule (arrayClassOf) is +// not asked. On configset.mat as MATLAB wrote it the two agree, because every component there +// is one CONFIG_COMPONENTS lists; a binary dictionary of the corpus holds components it does +// not list (a CoderTarget.SettingsController, an SSC.SimscapeCC), whose array the shared rule +// names after its first element. configset.mat's class table re-pointed, one word at a time, +// to hold such a component, in a config set's Components and in its RTWCC's. +describe('configset.mat re-pointed: a Components array the shared element rule would name otherwise', () => { + // The blob offset of configset.mat's metadata table, which is busArray.mat's too. + const META = 304; + const { raw, vars } = blobParts('mcos/configset.mat'); + const u32 = (b: Uint8Array, at: number): number => new DataView(b.buffer, b.byteOffset, b.byteLength).getUint32(at, true); + const header = Array.from({ length: 10 }, (_, i) => u32(raw, META + i * 4)); + const classRow = (k: number): number => META + header[2] + k * 16; + const objectRow = (k: number): number => META + header[4] + k * 24; + const patched = (words: [number, number][]): Uint8Array => { + const copy = raw.slice(); + const view = new DataView(copy.buffer, copy.byteOffset, copy.byteLength); + for (const [at, value] of words) view.setUint32(at, value, true); + return copy; + }; + // Class row 12 is SlCovCC.ConfigComp, the last component of both config sets (objects 12 and + // 24). Its package word set to the empty string makes it `ConfigComp`, a class of no package: + // one CONFIG_COMPONENTS does not list, and one the shared rule counts as not MathWorks', as it + // counts a CoderTarget or an SSC class (objectArrayClass.ts isMathWorksClass). + const UNLISTED = [classRow(12), 0] as [number, number]; + // Object 11 is cs's Simulink.GRTTargetCC, the second of its RTWCC's two components. + const RTW_TARGET_UNLISTED = [objectRow(11), 12] as [number, number]; + const decoded = decodeMcosBlob(patched([UNLISTED, RTW_TARGET_UNLISTED]), vars); + // Each config set's components, as MATLAB wrote them but the last, now `ConfigComp`. + const repointed = [...truth.paths.cs.Components.elements.slice(0, -1), 'ConfigComp']; + + it('the tables are where, and what, these cases assume, and the shared rule names these arrays otherwise', () => { + const strings = new TextDecoder().decode(raw.slice(META + 40, META + header[2])).split('\0'); + const nameOf = (row: number): string => [strings[u32(raw, row) - 1], strings[u32(raw, row + 4) - 1]].join('.'); + expect([nameOf(classRow(12)), nameOf(classRow(9))]).toEqual(['SlCovCC.ConfigComp', 'Simulink.GRTTargetCC']); + expect([12, 24, 11].map((k) => u32(raw, objectRow(k)))).toEqual([12, 12, 9]); + // Unpatched, both readings agree: MATLAB's components, each listed. + expect(decodeMcosBlob(raw, vars).get('cs')!.properties.Components).toMatchObject({ _array_class: 'Simulink.ConfigComponent' }); + // Patched, the shared rule alone would name the config set's Components after its first + // component (no derivable base among eight MathWorks classes and one other), and the + // RTWCC's after its one MathWorks class beside one that is not. + expect(truth.paths.csErt.Components.elements).toEqual(truth.paths.cs.Components.elements); + expect(arrayClassOf(repointed)).toBe('Simulink.SolverCC'); + expect(arrayClassOf(['Simulink.CodeAppCC', 'ConfigComp'])).toBe('Simulink.CodeAppCC'); + }); + + it('a config set\'s Components holding an unlisted component is still a Simulink.ConfigComponent array, each element its own class', () => { + for (const name of ['cs', 'csErt'] as const) { + const components: any = decoded.get(name)!.properties.Components; + expect(components._array_class, name).toBe('Simulink.ConfigComponent'); + expect(components._elements.map((e: any) => e._object_class), name).toEqual(repointed); + } + }); + + it('an RTWCC\'s Components holding an unlisted component is still a Simulink.ConfigComponent array', () => { + const rtw = (decoded.get('cs')!.properties.Components as any)._elements[truth.paths.cs.rtwIndex - 1]; + expect(rtw._object_class).toBe('Simulink.RTWCC'); + const inner = rtw._properties.Components; + expect(inner._array_class).toBe('Simulink.ConfigComponent'); + expect(inner._elements.map((e: any) => e._object_class)).toEqual(['Simulink.CodeAppCC', 'ConfigComp']); + // csErt's RTWCC was not re-pointed, and reads as MATLAB wrote it. + const ert = (decoded.get('csErt')!.properties.Components as any)._elements[truth.paths.csErt.rtwIndex - 1]; + expect(ert._properties.Components._elements.map((e: any) => e._object_class)).toEqual(truth.paths.csErt.RTWComponents.elements); + }); + + it('control: the same classes in a place that names none are read by the shared rule', () => { + // mixed's Kids, a property of an NdHolder, re-pointed at the two classes the RTWCC's + // Components holds above: the shared rule, so the one MathWorks class. + const kidsIds = [26, 30]; + expect(kidsIds.map((k) => u32(raw, objectRow(k)))).toEqual([18, 19]); + const blob = patched([UNLISTED, [objectRow(26), 8], [objectRow(30), 12]]); + const kids: any = decodeMcosBlob(blob, vars).get('mixed')!.properties.Kids; + expect(kids._array_class).toBe('Simulink.CodeAppCC'); + expect(kids._elements.map((e: any) => e._object_class)).toEqual([undefined, 'ConfigComp']); + }); +}); + +// Controls: what shares one class reads as it did. +describe('an object array property of one class, and an enumeration value, read as they did', () => { + it('busArray.mat\'s Elements_internal and ndNested.mat\'s Kids carry no element class', () => { + const { raw, vars } = blobParts('mcos/busArray.mat'); + for (const bus of decodeMcosBlob(raw, vars).get('buses')!.elements.slice(1) as any[]) { + expect(bus.Elements_internal._array_class).toBe('Simulink.BusElement'); + expect(bus.Elements_internal._elements.every((e: any) => Object.keys(e).join() === '_properties')).toBe(true); + } + const nd = blobParts('mcos/ndNested.mat'); + const kids: any = decodeMcosBlob(nd.raw, nd.vars).get('h')!.properties.Kids; + expect(kids._array_class).toBe('Simulink.Parameter'); + expect(kids._elements).toHaveLength(12); + expect(kids._elements.every((e: any) => Object.keys(e).join() === '_properties')).toBe(true); + }); + + it('display/dispcat_opaque.mat\'s enumeration Value is its class, with no element class', () => { + const { raw, vars } = blobParts('display/dispcat_opaque.mat'); + const values = [...decodeMcosBlob(raw, vars).values()] + .map((d) => d.properties.Value as any) + .filter((v) => v && Array.isArray(v._elements) && v._elements.some((e: any) => e._enumeration)); + expect(values.length).toBeGreaterThan(0); + for (const v of values) { + expect(v._array_class).toBe('DispColor'); + expect(v._elements.every((e: any) => !('_object_class' in e))).toBe(true); + } + }); +}); diff --git a/test/mcosParser.test.ts b/test/mcosParser.test.ts index 747c88d4..ea21ed29 100644 --- a/test/mcosParser.test.ts +++ b/test/mcosParser.test.ts @@ -690,9 +690,11 @@ describe('decodeMcosBlob — logical-flagged heap cells resolve as booleans', () expect(typeof bpProps.TunableSizeValue).toBe('boolean'); }); - it('array of logicals resolves as boolean[], not number[] (Dimensions)', () => { + it('array of logicals resolves as a typed logical row, not number[] (Dimensions)', () => { // cells[4] in Bp.mat is a double array [0, 0] used as Dimensions. Setting - // isLogical should resolve it to [false, false]. + // isLogical should resolve it to a logical [false false]: the typed literal a binary + // dictionary gives a logical row (C-033), since a bare list of booleans is read by the + // node layer as a DOUBLE row. const { raw, vars } = blobParts('Bp.mat'); const patched = raw.slice(); // Flags byte for cells[4] is at raw offset 1481 (class = 0x06 at 1480). @@ -702,8 +704,9 @@ describe('decodeMcosBlob — logical-flagged heap cells resolve as booleans', () const bp = decodeMcosBlob(patched, vars).get('Bp')!; const breakpoints = bp.properties.Breakpoints as Record; const bpProps = (breakpoints._properties as Record); - // Before fix: [0, 0] (number[]). After fix: [false, false] (boolean[]). - expect(bpProps.Dimensions).toEqual([false, false]); + // Before the first fix: [0, 0] (number[]). Then [false, false] (boolean[]), which + // showed as a double row. Now the logical row. + expect(bpProps.Dimensions).toEqual({ _type: 'logical', _value: '[0, 0]' }); }); }); diff --git a/test/objectArrayClass.test.ts b/test/objectArrayClass.test.ts new file mode 100644 index 00000000..14b20f66 --- /dev/null +++ b/test/objectArrayClass.test.ts @@ -0,0 +1,78 @@ +// Copyright 2026 The MathWorks, Inc. +// +// The one rule both readers that hold no class for a mixed object array name it by +// (src/datamodel/parser/objectArrayClass.ts): a binary dictionary (BinarySlddParser) and a .mat +// or a model workspace's MCOS blob (McosParser). The rule was the binary reader's own, private +// to it, so the MCOS reader named every such array after its first element. These are the binary +// reader's assertions (objectArrayElementClass.test.ts) asked of the rule itself; the readers' +// tests ask each reader. +import { describe, it, expect } from 'vitest'; +import { arrayClassOf, componentsBaseOf, heterogeneousBaseOf } from '../src/datamodel/parser/objectArrayClass.js'; + +// Every class MATLAB's text format lists under a Simulink.ConfigComponent array. +const COMPONENTS = [ + 'Simulink.SolverCC', 'Simulink.DataIOCC', 'Simulink.OptimizationCC', 'Simulink.DebuggingCC', 'Simulink.HardwareCC', + 'Simulink.ModelReferenceCC', 'Simulink.SFSimCC', 'Simulink.RTWCC', 'Simulink.CodeAppCC', 'Simulink.GRTTargetCC', + 'Simulink.ERTTargetCC', 'Simulink.STFCustomTargetCC', 'SlCovCC.ConfigComp', 'Sldv.ConfigComp', 'hdlcoderui.hdlcc', +]; + +describe('arrayClassOf: the class of an object array, from its elements\' classes', () => { + it('is the class every element shares', () => { + expect(arrayClassOf(['Simulink.Signal', 'Simulink.Signal'])).toBe('Simulink.Signal'); + expect(arrayClassOf(['My.A', 'My.A', 'My.A'])).toBe('My.A'); + // One class alone, and a config component alone, are the class they are. + expect(arrayClassOf(['Simulink.SolverCC'])).toBe('Simulink.SolverCC'); + expect(arrayClassOf(['Simulink.SolverCC', 'Simulink.SolverCC'])).toBe('Simulink.SolverCC'); + }); + + it('is Simulink.ConfigComponent for a mix of the config components MATLAB lists under one', () => { + expect(arrayClassOf(COMPONENTS)).toBe('Simulink.ConfigComponent'); + expect(arrayClassOf(['Simulink.CodeAppCC', 'Simulink.GRTTargetCC'])).toBe('Simulink.ConfigComponent'); + expect(arrayClassOf(['Simulink.CodeAppCC', 'Simulink.ERTTargetCC'])).toBe('Simulink.ConfigComponent'); + expect(arrayClassOf(['Simulink.ConfigComponent', 'Simulink.SolverCC'])).toBe('Simulink.ConfigComponent'); + }); + + it('is the one MathWorks class beside classes that are not MathWorks\', wherever it stands', () => { + expect(arrayClassOf(['dexdata.DerivedSignal', 'Simulink.Signal'])).toBe('Simulink.Signal'); + expect(arrayClassOf(['Simulink.Signal', 'dexdata.DerivedSignal'])).toBe('Simulink.Signal'); + expect(arrayClassOf(['My.A', 'mpt.Signal', 'My.B'])).toBe('mpt.Signal'); + // A package of no known MathWorks class counts as a user's, MathWorks' or not. + expect(arrayClassOf(['CoderTarget.SettingsController', 'Simulink.SolverCC'])).toBe('Simulink.SolverCC'); + // The package is the text before the first dot: a name that only begins with one is not in it. + expect(arrayClassOf(['SimulinkX.A', 'Simulink.Signal'])).toBe('Simulink.Signal'); + expect(arrayClassOf(['SimulinkX.A', 'My.B'])).toBe('SimulinkX.A'); + }); + + it('is the first element\'s class where no base can be derived', () => { + // Two MathWorks classes beside a user's. + expect(arrayClassOf(['MySubclasses.MySlSignal', 'Simulink.Signal', 'Simulink.Parameter'])).toBe('MySubclasses.MySlSignal'); + // Two MathWorks classes alone, neither a listed config component. + expect(arrayClassOf(['Simulink.BusElement', 'Simulink.Bus'])).toBe('Simulink.BusElement'); + // No MathWorks class at all. + expect(arrayClassOf(['My.A', 'My.B'])).toBe('My.A'); + expect(arrayClassOf(['simmechanics.A', 'simmechanics.B'])).toBe('simmechanics.A'); + // A class with no package is a user's. + expect(arrayClassOf(['BusElement', 'My.B'])).toBe('BusElement'); + }); +}); + +describe('heterogeneousBaseOf: the base a mix names, or none', () => { + it('names Simulink.ConfigComponent, the one MathWorks class, or nothing', () => { + expect(heterogeneousBaseOf(['Simulink.SolverCC', 'hdlcoderui.hdlcc'])).toBe('Simulink.ConfigComponent'); + expect(heterogeneousBaseOf(['BusElement', 'Simulink.Bus'])).toBe('Simulink.Bus'); + expect(heterogeneousBaseOf(['My.A', 'My.B'])).toBeUndefined(); + expect(heterogeneousBaseOf(['Simulink.Signal', 'Simulink.Parameter', 'My.A'])).toBeUndefined(); + }); +}); + +describe('componentsBaseOf: the class a property\'s place names for an object array there', () => { + it('is Simulink.ConfigComponent for a config set\'s Components and an RTWCC\'s, and nothing else', () => { + expect(componentsBaseOf('Simulink.ConfigSet', 'Components')).toBe('Simulink.ConfigComponent'); + expect(componentsBaseOf('Simulink.RTWCC', 'Components')).toBe('Simulink.ConfigComponent'); + expect(componentsBaseOf('My.Holder', 'Components')).toBeUndefined(); + expect(componentsBaseOf('Simulink.SolverCC', 'Components')).toBeUndefined(); + expect(componentsBaseOf('Simulink.ConfigSet', 'Elements')).toBeUndefined(); + expect(componentsBaseOf('Simulink.ConfigSet', undefined)).toBeUndefined(); + expect(componentsBaseOf(undefined, 'Components')).toBeUndefined(); + }); +}); diff --git a/test/parity/matlab/DESIGN.md b/test/parity/matlab/DESIGN.md index e75e14a5..fb8fdfc8 100644 --- a/test/parity/matlab/DESIGN.md +++ b/test/parity/matlab/DESIGN.md @@ -2450,6 +2450,25 @@ Two findings from that hardening, measured and deliberately NOT acted on: inside a DICTIONARY cell was never this limitation — it was defect 52, and citing this bullet for it is how that defect came to be pinned in `cellElementShape.test.ts` as expected behaviour instead of being fixed. +- **An object array of mixed classes, held by an MCOS object's property, read under its + first element's class — now closed (F1-47).** `McosParser.resolveValue` named such an + array after its first element and gave no element a class of its own. So a config set's + `Components` in a `.mat` read as a `Simulink.SolverCC` array, and a copy of the config set + pasted into a dictionary wrote all nine components as `Simulink.SolverCC`. A + `dexdata.DerivedSignal` beside a `Simulink.Signal` read as two `DerivedSignal`s. The array + is now named, and each element of another class marked `_object_class`, as the binary + dictionary reader does it, by one rule both readers import (`objectArrayClass.ts`). + MATLAB's own `class()` of each array, read back out of `test/fixtures/mcos/configset.mat` + (`make_configset_fixture.m`, R2027a), is the class this names: + `Simulink.ConfigComponent` for both config sets' `Components` and for their RTWCC's, and + `Simulink.Signal` for the subclass beside its base. Pinned in + `mcosMixedObjectArray.test.ts`, and the rule itself in `objectArrayClass.test.ts`. + + **Not closed: the same array as a top-level variable.** A `.mat` variable that is itself + a mixed-class object array is refused whole, by the code: `decodeMcosVariables` requires + every element's object to be of the declared class, and reports `its objects are of class + …, not …`. This was not measured on a MATLAB-written file, and no such variable is in the + corpus or the fixtures, so it is recorded rather than fixed. - **A `missing` has no dictionary spelling.** If a decoded string array carrying a `missing` were copied into a `.sldd`, the element would serialize as JSON `null`; what MATLAB reads that back as was not measured. Not reachable today (a `.mat` string is @@ -2462,17 +2481,9 @@ Two findings from that hardening, measured and deliberately NOT acted on: of the four channels carry no property data for it at all — defect 40. Recorded from the raw bags, because MATLAB does not call `Choices` a property and parity therefore passes. -- **A REAL array inside an MCOS object is classed double.** `McosParser.buildMatrixValue` - writes `_type: 'double'` and a row goes through as a bare list, so `single([0.1 0.3])` - as a Parameter's Value shows Data Type double on its Value row in a `.mat`, where both - dictionaries say single. Defect 57 gives a COMPLEX value its class (`_class`); the real - arms predate it and are left as they were. -- **A single shows the double it widens to, out of a `.mat`.** MatParser reads a float32 - into a JavaScript number, and every `.mat` arm prints that: complex(single(0.1), 0.2) - is `0.10000000149011612+0.20000000298023224i` in a plain `.mat` variable, in an MCOS - object and in a text dictionary (whose stream is read by the same arm), where a binary - dictionary shows MATLAB's own text, `0.1+0.2i`, and MATLAB's display `0.1000 + 0.2000i`. - The shortest spelling of the float32 would change every one of those venues at once. +- **An EMPTY numeric or logical array of a class other than double, in an MCOS object, reads + as a double 0x0** (left out of C-033): `McosParser.resolveValue` hands it over as `[]`, but + a logical of rank 3 or more keeps its typed `Matrix(2,0,2)` (`mcosEmptyLogical.test.ts`). - **A complex EMPTY in a binary dictionary shows as an empty quoted char.** MATLAB writes `

`; the empty body fails parseCdata's text test and its stream decode, so the value is `''` where the same Parameter in a diff --git a/test/typedMcosFixtures.test.ts b/test/typedMcosFixtures.test.ts new file mode 100644 index 00000000..f6954ba3 --- /dev/null +++ b/test/typedMcosFixtures.test.ts @@ -0,0 +1,270 @@ +// Copyright 2026 The MathWorks, Inc. +// +// C-033: a real number of a class other than double, inside an MCOS object, against +// MATLAB's own answers, on the fixtures test/fixtures/mcos/make_typed_fixtures.m writes +// (R2027a): typed_objects.mat; typed_ws.slx, whose MODEL WORKSPACE holds the same values; +// and typed_mcos.sldd (text) and typed_mcos_binary.sldd (compressed-binary), dictionaries +// holding them entry for variable. Every name is in all four. +// +// A Simulink.Parameter whose Value is int32([100 200 300 400]) showed class double in the +// .mat and the workspace, where both dictionaries showed int32; a logical row showed +// double; and single(3.3) showed 3.299999952316284 where both dictionaries showed 3.3. The +// MCOS decoder handed a non-double number over bare, which the node layer reads as a +// double, and MatParser read a single as the double it widens to. Each venue now presents +// each value as every other does, of MATLAB's class and size. +// +// The digits a single shows are MATLAB's: a dictionary holds MATLAB's own text for it, so +// sSingleSweep, 4,082 float32 bit patterns from the smallest subnormal to realmax, is +// MATLAB's rule for that text, element by element, and a single read out of MAT bytes is +// held to it. The sweep is in every venue but the binary dictionary (make_typed_fixtures.m's +// names_in gives the reason), whose text for the same singles was measured to be the text +// dictionary's. +import { describe, it, expect } from 'vitest'; +import { readFileSync } from 'node:fs'; +import { fileURLToPath } from 'node:url'; +import { unzipSync } from 'fflate'; +import { createSession } from '../src/index.js'; +import { ingest } from '../src/core/ingest.js'; +import { decodeMcosBlob } from '../src/datamodel/parser/McosParser.js'; +import { parseMat } from '../src/datamodel/parser/MatParser.js'; +import '../src/datamodel/node/data/NodeClassMap.js'; +import { presentation } from './tools/nodePresentation.js'; + +const fixturePath = (name: string): string => fileURLToPath(new URL(`./fixtures/${name}`, import.meta.url)); +const bytes = (name: string): Uint8Array => new Uint8Array(readFileSync(fixturePath(name))); +const buffer = (u8: Uint8Array): ArrayBuffer => u8.buffer.slice(u8.byteOffset, u8.byteOffset + u8.byteLength) as ArrayBuffer; + +interface ValueTruth { + class: string; + size: number[]; + numel?: number; + mat2str?: string; + elements?: string[]; +} +interface Venue { + file: string; + paths: Record; +} +const truth: { release: string; names: string[]; mat: Venue; slx: Venue; text: Venue; binary: Venue } = JSON.parse( + readFileSync(fixturePath('mcos/typed_fixtures.truth.json'), 'utf8'), +); + +/** A venue's variables: the node MATLAB's top-level names sit under. */ +function variablesOf(file: string, session = createSession()): any { + const root: any = ingest(session, buffer(bytes(`mcos/${file}`)), { filename: file }); + if (file.endsWith('.slx')) return root.getSection('workspace'); + if (file.endsWith('.sldd')) return root.getSection('design'); + return root; +} +const VENUES = (['mat', 'slx', 'text', 'binary'] as const).map((key) => ({ key, file: truth[key].file, variables: variablesOf(truth[key].file) })); +const named = (variables: any, name: string): any => variables.children.find((c: any) => c.name === name); + +/** The node that holds a value's numbers: a Parameter's value node, or the variable itself. */ +function valueNodeOf(node: any): any | null { + if (!/Parameter$/.test(node.className)) return node; + return node._valueNode ?? node.children.find((c: any) => c.name === 'Value') ?? null; +} + +/** What a host is shown for a value: its own cell, class and size, and every element's. */ +function shownOf(node: any): unknown { + const v = valueNodeOf(node); + return { + className: node.className, + displayValue: node.displayValue, + row: node.toRow().Value, + value: v && { + className: v.className, + dims: v.dims, + displayValue: v.displayValue, + elements: v.children.map((c: any) => [c.toRow().Name.label.replace(/^[^(]*/, ''), c.className, c.displayValue]), + }, + }; +} + +// A double or a logical SCALAR in a Parameter is shown inline, with no node of its own +// to carry a class (parameterNode.test.ts): there the class is graded on the dictionaries' +// side alone, by the presentation being theirs. +const INLINE = new Set(['pDouble', 'pLogical']); + +// The two values of more than 64 elements, whose truth is their size (make_typed_fixtures.m). +const LONG = new Set(['sSingleSweep']); + +// The names a venue holds, by its truth: every one, but for the sweep in the binary dictionary. +const holds = (key: (typeof VENUES)[number]['key'], name: string): boolean => name in truth[key].paths; + +describe('typed MCOS fixtures: every venue holds every name', () => { + it('as MATLAB read it back', () => { + expect(truth.release).toBe('2027a'); + for (const { key, variables } of VENUES) { + const expected = truth.names.filter((n) => !(key === 'binary' && LONG.has(n))); + expect(Object.keys(truth[key].paths).sort(), key).toEqual([...expected].sort()); + for (const name of expected) { + expect(named(variables, name), `${key} ${name}`).toBeDefined(); + } + } + }); +}); + +describe('typed MCOS fixtures: each value presents alike in every venue, as MATLAB\'s class and size', () => { + for (const name of truth.names) { + it(name, () => { + const t = truth.mat.paths[name]; + const text = shownOf(named(VENUES[2].variables, name)); + // The .mat, the workspace and the binary dictionary, each as the text dictionary. + for (const { key, variables } of VENUES.filter((v) => holds(v.key, name))) { + expect(shownOf(named(variables, name)), `${key} ${name}`).toEqual(text); + } + const node = named(VENUES[0].variables, name); + expect(node.className, name).toBe(t.class); + if (INLINE.has(name)) { + expect(valueNodeOf(node), name).toBeNull(); + return; + } + const v = valueNodeOf(node); + expect(v.className, name).toBe(t.value.class); + expect(v.dims, name).toEqual(t.value.size); + }); + } +}); + +/** A float32's value from MATLAB's num2hex of it. */ +const fromHex = (hex: string): number => { + const view = new DataView(new ArrayBuffer(hex.length / 2)); + for (let i = 0; i < hex.length; i += 2) view.setUint8(i / 2, parseInt(hex.slice(i, i + 2), 16)); + return hex.length === 8 ? view.getFloat32(0) : view.getFloat64(0); +}; + +// An element row's label names its subscripts, and the truth is column-major. +function columnMajorIndex(label: string, size: number[]): number { + const m = /\(([\d,]+)\)$/.exec(label); + if (!m) return 0; + const subs = m[1].split(',').map(Number); + if (subs.length === 1) return subs[0] - 1; + let k = 0; + let stride = 1; + subs.forEach((s, d) => { + k += (s - 1) * stride; + stride *= size[d]; + }); + return k; +} + +describe('typed MCOS fixtures: the .mat\'s numbers are MATLAB\'s', () => { + for (const name of truth.names.filter((n) => !INLINE.has(n) && !LONG.has(n))) { + it(name, () => { + const t = truth.mat.paths[name].value; + const v = valueNodeOf(named(VENUES[0].variables, name)); + const rows: any[] = v.children.length > 0 ? v.children : [v]; + expect(rows, name).toHaveLength(t.elements!.length); + for (const row of rows) { + const label = row === v ? '' : row.toRow().Name.label; + const k = columnMajorIndex(label, t.size); + const matlab = t.elements![k]; + const ours = row.displayValue; + if (t.class === 'single' || t.class === 'double') { + // The number shown is the one MATLAB stored, to the bit. + const bits = fromHex(matlab); + expect(t.class === 'single' ? Math.fround(Number(ours)) : Number(ours), `${name}${label}`).toBe(bits); + } else if (t.class === 'logical') { + expect(ours, `${name}${label}`).toBe(matlab === '1' ? 'true' : 'false'); + } else { + expect(ours, `${name}${label}`).toBe(matlab); + } + } + }); + } +}); + +describe('typed MCOS fixtures: a single shows the digits MATLAB writes for it', () => { + // MATLAB's own text for each element of sSingleSweep, out of each dictionary's bytes. + const textTokens = (): string[] => { + const json = JSON.parse(new TextDecoder().decode(bytes('mcos/typed_mcos.sldd'))); + const entries: any[] = json.__MW_TEXT_PARTS__['__MW_TEXT_PART__/data/chunk0'].__MW_TEXT_content.entries; + const value: string = entries.find((e) => e.name === 'sSingleSweep').value._value; + return value.slice(value.indexOf('[') + 1, value.lastIndexOf(']')).split(',').map((s) => s.trim().replace(/F$/, '')); + }; + it('the sweep is the 4,082 singles it says', () => { + expect(textTokens()).toHaveLength(4082); + expect(truth.mat.paths.sSingleSweep.value).toMatchObject({ class: 'single', size: [1, 4082] }); + }); + + for (const key of ['mat', 'slx', 'text'] as const) { + it(`${key}: every element of the sweep shows MATLAB's digits`, () => { + const matlab = textTokens().map((s) => String(Number(s))); + const sweep = named(VENUES.find((v) => v.key === key)!.variables, 'sSingleSweep'); + expect(sweep.children).toHaveLength(matlab.length); + const ours: string[] = sweep.children.map((c: any) => c.displayValue); + const differ = ours.map((o, k) => [k, o, matlab[k]]).filter(([, o, m]) => o !== m); + expect(differ).toEqual([]); + }); + } + + it('an exact tie at nine digits goes to the even one, in every venue', () => { + for (const { key, variables } of VENUES) { + expect(named(variables, 'sSingleTies').displayValue, key).toBe('[1000000.12 1000000.38 1000000.62 -1000000.12 2097151.88]'); + } + }); +}); + +describe('typed MCOS fixtures: a Parameter out of the .mat goes into a dictionary as MATLAB\'s own entry is', () => { + const PARAMS = truth.names.filter((n) => truth.mat.paths[n].class === 'Simulink.Parameter'); + + /** The Value `

` of an entry in a binary dictionary's chunk XML. */ + const valueTag = (xml: string): string => /

]*>[^<]*<\/P>/.exec(xml)![0]; + const entryBlock = (xml: string, name: string): string => { + const at = xml.indexOf('

' + name + '

'); + return xml.slice(xml.lastIndexOf('', at)); + }; + + for (const target of ['typed_mcos.sldd', 'typed_mcos_binary.sldd']) { + describe(target, () => { + const session = createSession(); + const mat = variablesOf('typed_objects.mat', session); + const root: any = ingest(session, buffer(bytes(`mcos/${target}`)), { filename: target }); + const design = root.getSection('design'); + const meta = named(design, 'pInt8').metadata; + let seq = 0; + for (const name of PARAMS) { + const payload: any = JSON.parse(JSON.stringify(named(mat, name).serialize())); + payload.name = name + '_fromMat'; + payload.metadata = { ...meta, uuid: `00000000-0000-4000-8000-${String(++seq).padStart(12, '0')}` }; + design.parseEntry(payload); + } + const saved: any = session.serializeSource(root.name); + const reopened: any = ingest(createSession(), buffer(saved.bytes ?? new TextEncoder().encode(saved.text)), { filename: target }).getSection('design'); + + for (const name of PARAMS) { + it(name, () => { + const pasted = named(reopened, name + '_fromMat'); + const own = named(reopened, name); + expect(presentation(pasted, pasted.displayName)).toEqual(presentation(own, own.displayName)); + if (target.endsWith('binary.sldd')) { + // The Value MATLAB wrote for the same value: its class, its shape, its text. + const xml = new TextDecoder().decode(unzipSync(saved.bytes)['data/chunk0.xml']); + const matlab = new TextDecoder().decode(unzipSync(bytes(`mcos/${target}`))['data/chunk0.xml']); + expect(valueTag(entryBlock(xml, name + '_fromMat')), name).toBe(valueTag(entryBlock(matlab, name))); + } + }); + } + }); + } +}); + +describe('what reads a typed number back out of an MCOS property', () => { + it('an int32 enumeration keeps the number each enumeral stands for', () => { + // display/dispcat_opaque.mat (R2027a) holds a Simulink.Parameter whose Value is + // DispColor.Green, DispColor being an Simulink.IntEnumType. The enumeral's number is its + // object's `int32.Data`, an int32 the decoder now spells typed; the enumeration reader + // takes its number from that spelling as it took it from the bare number. + const buf = bytes('display/dispcat_opaque.mat'); + const { variables } = parseMat(buffer(buf)); + const anon = variables.find((v) => (v as unknown as { _anonymous?: boolean })._anonymous)!; + const opaque = variables.filter((v) => v.isOpaque && v.name); + const decoded = decodeMcosBlob(anon._rawBytes!, opaque.map((v) => ({ name: v.name, className: v.className, rawBytes: v._rawBytes }))); + const enumerals = [...decoded.values()].flatMap((d) => { + const value = d.properties.Value as { _elements?: { _enumeration?: unknown }[] } | undefined; + return (value?._elements ?? []).map((e) => e._enumeration).filter(Boolean); + }); + expect(enumerals).toContainEqual({ name: 'Green', type: 'int32', value: '2' }); + }); +});